EPBDS-16211: bring the plan's checklist in line with what is done - #150
Merged
Merged
Conversation
Several boxes in docs/UPGRADE-PLAN.md were still open, or said "still open", after the work they track had landed and been recorded elsewhere in the plan. Each box closed here cites the evidence that closes it. Each box that stays open now says why. - §9.3 step 3 is marked done, as R14 already was. The one item with no record, the translation registries, was checked: every phrase is registered when its module loads, and no instance writes them. - Phase 6: five boxes are ticked. Each cites its record: §9.3 steps 2, 3, 4 and 7, and the two-instance tests. - The go/no-go on the TypeScript tail is ticked with its 2026-09-30 decision. The Tabs reconciliation is ticked with its rename (#60). - The orphan-name grep is moot. The mapper registered none of the twelve files H1 deleted, and each name renders the same before and after #53. - The react-refresh check ran on 18, the React the demo develops against: a hot update kept the page's state. - The alias grep is ticked. No alias is configured, so such an import cannot resolve. - F2 and F4 stay open, each headed by the decision that keeps it so. The F2-seam invariant applies only if F2 reopens. - E3's colGroup finding and F1's tooltip half are marked resolved. package.json: the layer lint's messages were stale. - The modules message said two suppressed imports remained in modules/form/utils. §9.3 step 2 removed both. - The state override's messages said "core/utils". - The layer direction they quote now includes core/state. Only the message text changes. A probe import still fails both rules.
AlexSamBY
added a commit
that referenced
this pull request
Oct 2, 2026
## What changes **Five sentences in `docs/UPGRADE-PLAN.md` no longer say that the `Tabs` duplicate is open.** - They still said that the pack `Tabs.js` was on disk, and that the H6 duplicate was only half resolved. - In fact #60 renamed the pack copy `StandaloneTabs` on 2026-09-22, and §9.9-H6 records the item as closed. | Where | It said | It now adds | |---|---|---| | §1, executive summary | "the pack `Tabs.js` is still present" | the rename, and why the copies were renamed rather than merged | | §2.6, finding 14 | "the pack `Tabs.js` survives" | the same | | §9.2, step 1 | "`Tabs` is **still open** … the gate above still applies" | the gate is met, and the copy was converted to hooks on 2026-09-28 (§9.3 step 6) | | Appendix A, structure facts | "**H6 is not closed**" | H6's `Tabs`/`TabList` item is closed, and its other renames are still open | | Appendix C, archived snapshot | "only half reconciled" | the rename | Each sentence is struck through and followed by what closed it, as the plan marks its other closed items. **How I checked that none is left:** I searched the plan for the stale phrases: - "H6 is not closed"; - "half resolved" and "half reconciled"; - "`Tabs` is **still open**"; - "`Tabs.js` is still" and "`Tabs.js` survives". They occur on six lines, and on each one only inside a strikethrough. #150 struck the sixth. ### Found, and not changed here - **The orphan scan in Appendix B scans nothing now.** It loops over `src/core/components/*.js`, and since the TypeScript migration the pack has no `.js` file: it has 42 `.ts`/`.tsx` files. - In zsh the glob fails. - In bash the loop runs once, on the literal pattern. - Its `Tabs` example also predates the rename. - **Appendix A's structure facts are stale beyond `Tabs`.** They still list three things that are gone: - the engine ⇄ form-modules cycle, which #69 removed; - an import of `modules` from `components/Text.js:4`, while `Text.tsx` imports nothing from it; - the demo entries at the `src/` root, which H3 moved to `src/demo/`. ## Gates All exited 0, run on this branch: - `lint:js`, `lint:css`, `typecheck`, `typecheck:contract`; - `docs:props:check`, `docs:views:check`, `css:fixture:check`; - `test:env-flags`, `build`; - `test:coverage`, thresholds included; - `test:pack`, `test:pack:peers`, `test:types`; - `test:react16`, `test:react17`, `test:react19`, 2854 tests each, with no worker crash; - `test:e2e`, 41 tests; - the manifest contract. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What changes
The checklists in
docs/UPGRADE-PLAN.mdnow match what the plan records as done. Several boxes were still open, or said "still open", after the work had landed and been recorded elsewhere in the plan.There is no code change. In
package.json, only the text of lint messages changes.Closed, with the record that closes them
§9.3 step 3, de-globalizing instance state, is marked done.
Active.translateis done, the rest is not".One item in step 3 had no record: the translation registries. I checked them now, and there is nothing to convert:
localiseTranslationcall insrc/coreruns at module top level.Active.LANG, the language the phrases are read in, is assigned nowhere outside the tests.Activefrom an instance, apart from thetranslatefallback that step 3 already records.renderField,FieldandUIRenderare code, and the same for every document.passwordCheckis set by the host.Phase 6: five boxes are ticked.
src/core/modulesimports the engine. Only its tests do, to render whole documents.src.rules.two-instances.test.js,rules.two-instances-errors.test.js,popup-root.two-instances.test.js, and the two-documents case inexamples.strict-mode.test.js.The go/no-go on the E2/E3 tail of the TS migration. It was decided GO on 2026-09-30 (§9.6, Governance), and the tail is done.
H1/H6: the pack
Tabs.StandaloneTabs, because the two copies are not interchangeable.NavTabs.view: 'Tabs'renders the engine's copy.H1/H6: grepping consumer metas for orphan names is moot, as measured.
TabList, resolves to the engine's copy on both.Phase 1: the react-refresh dev loop, checked on 18.
src/demo/pages/Examples.jsxarrived as a hot update, and so did reverting it.windowsurvived both, and so did a number typed into a field.Ongoing invariant: the alias grep stays at zero.
ui-*-packalias is configured in any webpack config or in jest, and no such package is installed. So an import of one fails to resolve.Two findings are marked resolved.
colGrouppropType: E5 deleted the propTypes, and the TS type,TableColGroupProps['colGroup'], saysstyle.omitPropskeepsview,indexandsymboloff the bubble.Left open, now saying why
momentstays (2026-09-30)". Its two boxes wait for a reopening. The F2-seam invariant now says it applies only if F2 reopens.package.json: the layer lint's messagesOnly the message text changes, in 14 messages:
core/modulesmessage said "Two sites in modules/form/utils.tsx predate this rule and carry an eslint-disable". EPBDS-16211 Phase 6 step 2: dissolve the engine/form-modules import cycle #69 (§9.3 step 2) removed both.core/stateoverride's three messages began "core/utils must not import". They were copied from the utils override.core/state. It now matches CLAUDE.md, and the bans configured in the overrides.I put a probe import of the engine in
src/core/stateand another insrc/core/modules. Both still fail lint, with the new text, and the probes are removed. Rewritingpackage.jsonthrough JSON leaves it byte-identical when nothing is changed, so nothing but these 14 lines moved.Gates
All exited 0, run on this branch:
lint:js,lint:css,typecheck,typecheck:contract;docs:props:check,docs:views:check,css:fixture:check;test:env-flags,build;test:coverage, thresholds included;test:pack,test:pack:peers,test:types;test:react16,test:react17,test:react19, 2854 tests each, with no worker crash;test:e2e, 41 tests;The number of tests is unchanged.
🤖 Generated with Claude Code