[BUGFIX] Bump phpdocumentor/guides-* to fix bignums-tip leak in tabs#1243
Conversation
Bumps phpdocumentor monorepo subsplit packages: - phpdocumentor/guides 1.9.6 -> 1.10.1 - phpdocumentor/guides-restructured-text 1.9.6 -> 1.10.1 - phpdocumentor/guides-theme-bootstrap 1.9.6 -> 1.9.7 - phpdocumentor/filesystem 1.9.0 -> 1.10.0 The fix landed incidentally in phpDocumentor/guides#1316 which moved the Tabs/Tab directives out of guides-theme-bootstrap into guides-restructured-text, turning the Bootstrap classes into deprecation shims that no longer carry the TabsNode dual-storage bug. With the move, the sibling rst-class node is no longer leaked as text into the tab pane. The bump was previously blocked because guides-theme-bootstrap:1.9.7 declared phpdocumentor/guides-restructured-text:^1.10 || ^2.0 but no 1.10.x of the restructured-text package had been published yet (phpDocumentor/guides#1341). guides-restructured-text:1.10.1 has now been tagged. Adds a regression fixture at tests/Integration/tests/bignum/bignum-in-tabs/ that mirrors the reproducer from the upstream issue and asserts the rendered tab pane contains <ol class="bignums-tip"> without leaking the literal class name as text. Resolves: TYPO3-Documentation#1236 Related: phpDocumentor/guides#1316, phpDocumentor/guides#1341 Signed-off-by: Sebastian Mendel <info@sebastianmendel.de>
Detailed change review for maintainersExpanded breakdown of all upstream changes in phpDocumentor/guides 1.9.6...1.10.1, grouped per subsplit and annotated with risk and pointers for deeper review. Why these 4 packages bump and others stay at 1.9.6
1.9.7 — 2026-04-07 (compare)
1.10.0 — 2026-04-14 (compare)
1.10.1 — 2026-05-08 (compare)
Non-substantive (CI only — no runtime impact)GitHub Actions workflow updates only; none touch any #1313, #1318, #1319, #1323, #1332, #1337, #1340 — dependabot bumps for TL;DR — highest-attention itemsFor maintainers wanting to focus their review, these three are the ones worth reading carefully:
Everything else is either an additive surface change, a deprecation that defaults to BC, or a fix. |
phpDocumentor/guides#1316 moved Tabs/Tab from guides-theme-bootstrap to guides-restructured-text. The Bootstrap\Nodes\AbstractTabNode class is now a deprecation shim that uses class_alias() at runtime, which PHPStan cannot follow. As a result, static analysis sees an empty `if (false) abstract class AbstractTabNode {}` declaration, leading to: - Method T3Docs\Typo3DocsTheme\Directives\GroupTabDirective::processSub() should return Node|null but returns GroupTabNode (because the parent AbstractTabNode appears to PHPStan as not-a-Node) - Call to undefined static method phpDocumentor\Guides\Bootstrap\Nodes\AbstractTabNode::__construct() Switching the import to the new RestructuredText namespace resolves both errors. Runtime behaviour is unchanged: the deprecated Bootstrap class is class_alias()d to the RST one, so the inheritance chain is identical either way. This also silences the deprecation notice the shim would otherwise emit when the file is loaded. Refs: phpDocumentor/guides#1316, phpDocumentor/guides#1320 Signed-off-by: Sebastian Mendel <info@sebastianmendel.de>
|
Ready for review. |
…(#1243) ## Summary Bumps phpdocumentor monorepo subsplit packages so the `bignums-tip` text leak in tabs (#1236) is fixed: - `phpdocumentor/guides` 1.9.6 → 1.10.1 - `phpdocumentor/guides-restructured-text` 1.9.6 → 1.10.1 - `phpdocumentor/guides-theme-bootstrap` 1.9.6 → 1.9.7 - `phpdocumentor/filesystem` 1.9.0 → 1.10.0 Resolves #1236. ## Why this fixes #1236 The `bignums-tip` rst-class leak inside tabs was caused by a dual-storage bug in `phpDocumentor\Guides\Bootstrap\Nodes\TabsNode`: tab children were kept in two parallel arrays (a private `$tabs` cache plus the `$value` array inherited from `CompoundNode`). The `ClassNodeTransformer` correctly removed orphan `ClassNode`s from `$value`, but the bootstrap-theme Twig template iterated the stale `$tabs` cache, which still referenced the pre-transform tab and emitted its `ClassNode`'s value (`bignums-tip`) as plain text. The fix landed incidentally via [phpDocumentor/guides#1316 / 1bdb18c7](phpDocumentor/guides@1bdb18c7), which moved the Tabs/Tab directives out of `guides-theme-bootstrap` into `guides-restructured-text`. The Bootstrap classes are now deprecation shims that delegate to `RestructuredText\Nodes\TabsNode`, whose `getTabs()` is derived from `getChildren()` — no stale cache, no leak. ## Why this couldn't be merged earlier `guides-theme-bootstrap:1.9.7` declared `phpdocumentor/guides-restructured-text:^1.10 || ^2.0`, but no `1.10.x` of `guides-restructured-text` had been published on Packagist yet — the constraint was unresolvable for any consumer with the default `minimum-stability: stable`. I filed [phpDocumentor/guides#1341](phpDocumentor/guides#1341); @jaapio tagged `1.10.1` on 2026-05-05 and the release is now installable. ## Test plan - [x] `composer update phpdocumentor/*` resolves cleanly with the existing constraints in `composer.json` (no constraint changes needed) - [x] `make test-integration` — 114 tests, 1140 assertions, OK (1 new test added) - [x] `make test-unit` — 83 tests, 183 assertions, OK - [x] `make test-xml` — all `guides.xml` fixtures validate - [x] `make test-docs` — project docs render successfully - [x] `make test-rendertest` — render test corpus renders successfully (incl. ru_RU, fr_FR, de_DE localizations) - [x] `make phpstan` — `[OK] No errors` - [x] Reproducer from #1236 rendered against upgraded packages — produces `<ol class="bignums-tip">` with no literal text leak - [x] Same reproducer rendered against pre-upgrade packages — still leaks `bignums-tip` (regression test would catch it) ## New regression fixture `tests/Integration/tests/bignum/bignum-in-tabs/` — mirrors the reproducer from #1236 (rst-class sibling to a list inside a `tabs::` directive) and asserts the rendered tab pane contains `<ol class="bignums-tip">` without leaking the literal class name as text. The fixture lives under `bignum/` rather than `tabs/` because the existing `tabs/` test harness already has a top-level `input/` directory and the data provider only recurses into directories without one. ## Downstream PHPStan fix included [phpDocumentor/guides#1316](phpDocumentor/guides#1316) made `phpDocumentor\Guides\Bootstrap\Nodes\AbstractTabNode` a `class_alias()` shim. The local `T3Docs\Typo3DocsTheme\Nodes\GroupTabNode` extends that class, and PHPStan can't follow runtime aliases — so the bump initially caused two `Quality` job failures (`return.type` and `staticMethod.notFound`). Fix is a one-line import switch to the new home: `phpDocumentor\Guides\RestructuredText\Nodes\AbstractTabNode`. Runtime behaviour is identical (the alias makes the inheritance chain the same either way), and the deprecation notice the shim would otherwise emit on file load is silenced as a side effect. ## Related - #1236 — the issue this PR resolves - [phpDocumentor/guides#1316](phpDocumentor/guides#1316) / [commit 1bdb18c7](phpDocumentor/guides@1bdb18c7) — upstream move of Tabs/Tab into `guides-restructured-text` (the incidental fix) - [phpDocumentor/guides#1341](phpDocumentor/guides#1341) — packaging issue blocking the upgrade until 2026-05-08 A detailed per-PR review of all upstream changes between `1.9.6...1.10.1` (with risk assessment and pointers for deeper review) is in the [comment thread below](TYPO3-Documentation/render-guides#1243 (comment)). ## Notes for review - No `composer.json` constraint changes were required — the existing `^1.9.4` / `^1.9` / `^1.7` constraints all resolve to the new versions. The only code change is the one-line `GroupTabNode` import switch documented above. - The bump pulls in `phpdocumentor/guides:1.10.1` (a minor) — the changes between 1.9.6 and 1.10.1 are dominated by the Tabs/Tab move (#1316) plus deprecation shims; full integration suite passes without changes to any other expected fixtures. --------- Signed-off-by: Sebastian Mendel <info@sebastianmendel.de>
Summary
Bumps phpdocumentor monorepo subsplit packages so the
bignums-tiptext leak in tabs (#1236) is fixed:phpdocumentor/guides1.9.6 → 1.10.1phpdocumentor/guides-restructured-text1.9.6 → 1.10.1phpdocumentor/guides-theme-bootstrap1.9.6 → 1.9.7phpdocumentor/filesystem1.9.0 → 1.10.0Resolves #1236.
Why this fixes #1236
The
bignums-tiprst-class leak inside tabs was caused by a dual-storage bug inphpDocumentor\Guides\Bootstrap\Nodes\TabsNode: tab children were kept in two parallel arrays (a private$tabscache plus the$valuearray inherited fromCompoundNode). TheClassNodeTransformercorrectly removed orphanClassNodes from$value, but the bootstrap-theme Twig template iterated the stale$tabscache, which still referenced the pre-transform tab and emitted itsClassNode's value (bignums-tip) as plain text.The fix landed incidentally via phpDocumentor/guides#1316 / 1bdb18c7, which moved the Tabs/Tab directives out of
guides-theme-bootstrapintoguides-restructured-text. The Bootstrap classes are now deprecation shims that delegate toRestructuredText\Nodes\TabsNode, whosegetTabs()is derived fromgetChildren()— no stale cache, no leak.Why this couldn't be merged earlier
guides-theme-bootstrap:1.9.7declaredphpdocumentor/guides-restructured-text:^1.10 || ^2.0, but no1.10.xofguides-restructured-texthad been published on Packagist yet — the constraint was unresolvable for any consumer with the defaultminimum-stability: stable. I filed phpDocumentor/guides#1341; @jaapio tagged1.10.1on 2026-05-05 and the release is now installable.Test plan
composer update phpdocumentor/*resolves cleanly with the existing constraints incomposer.json(no constraint changes needed)make test-integration— 114 tests, 1140 assertions, OK (1 new test added)make test-unit— 83 tests, 183 assertions, OKmake test-xml— allguides.xmlfixtures validatemake test-docs— project docs render successfullymake test-rendertest— render test corpus renders successfully (incl. ru_RU, fr_FR, de_DE localizations)make phpstan—[OK] No errorsrst-class:: bignums-tipfor bulletpoints nested in tabs outputs the rst-class-tip in rendered documentation #1236 rendered against upgraded packages — produces<ol class="bignums-tip">with no literal text leakbignums-tip(regression test would catch it)New regression fixture
tests/Integration/tests/bignum/bignum-in-tabs/— mirrors the reproducer from #1236 (rst-class sibling to a list inside atabs::directive) and asserts the rendered tab pane contains<ol class="bignums-tip">without leaking the literal class name as text. The fixture lives underbignum/rather thantabs/because the existingtabs/test harness already has a top-levelinput/directory and the data provider only recurses into directories without one.Downstream PHPStan fix included
phpDocumentor/guides#1316 made
phpDocumentor\Guides\Bootstrap\Nodes\AbstractTabNodeaclass_alias()shim. The localT3Docs\Typo3DocsTheme\Nodes\GroupTabNodeextends that class, and PHPStan can't follow runtime aliases — so the bump initially caused twoQualityjob failures (return.typeandstaticMethod.notFound).Fix is a one-line import switch to the new home:
phpDocumentor\Guides\RestructuredText\Nodes\AbstractTabNode. Runtime behaviour is identical (the alias makes the inheritance chain the same either way), and the deprecation notice the shim would otherwise emit on file load is silenced as a side effect.Related
rst-class:: bignums-tipfor bulletpoints nested in tabs outputs the rst-class-tip in rendered documentation #1236 — the issue this PR resolvesguides-restructured-text(the incidental fix)A detailed per-PR review of all upstream changes between
1.9.6...1.10.1(with risk assessment and pointers for deeper review) is in the comment thread below.Notes for review
composer.jsonconstraint changes were required — the existing^1.9.4/^1.9/^1.7constraints all resolve to the new versions. The only code change is the one-lineGroupTabNodeimport switch documented above.phpdocumentor/guides:1.10.1(a minor) — the changes between 1.9.6 and 1.10.1 are dominated by the Tabs/Tab move (#1316) plus deprecation shims; full integration suite passes without changes to any other expected fixtures.