Commit 0bddffd
docs(spec): nine migration-step rationale passages and two registry comments drop their deleted tracker numbers (stage 11) (#21578)
Part of #20234
Clause-②: no
Stage 11 of the dead-citation sweep: the hand-written parts of
`packages/spec/src/migrations/registry.ts`, under ruling C+D (record
`5749154545` on #19123). At base, those parts carried 13 sites citing
deleted tracker numbers: 2 in source comments and 11 in step rationale
text that authors read. A step `rationale` is author-shown: `os migrate
meta` prints it per hop, and step 17's is projected into
`docs/protocol-upgrade-guide.md`. Text only. No step, fragment id,
fragment order, generated entry, conversion or code token moves.
- **Form C, the 2 comments.** Each dead number now cites the commit that
decided it (verified against the commit's own text), and the sentence
says what that commit did.
- **Form D, the 11 rationale sites.** They sit in 9 rationale units:
step 17's `mongodb` paragraph and 8 step-18 fragments (a fragment is
"one retirement's sentences"). Each of those 9 units now carries no
number at all. The 11 dead numbers go, and so do the 11 live numbers in
the same units, because form D removes every number from author-visible
text. Each sentence states the cited decision in words, read from its
decision record, not its title.
- **Regenerated, never hand-edited:** `docs/protocol-upgrade-guide.md`
line 68. `check:generated --fix` proved it the only stale artifact of
15. `gen:migration-registry` has nothing to do, because no generated
region mirrors a rationale.
- One `@objectstack/spec` **patch** changeset.
## What changes
Line numbers are at base `e909aa0a23`. "Dead" means `GET issues/N`
answers 404, with no redirect followed.
| line | number(s) | decision, as read, and its record | now reads |
|---|---|---|---|
| 344 | #6345 (dead), #4410 (live) | `mongo` → `mongodb` became the
canonical driver id under one shared driver vocabulary (commit
e2798fa). #4410: `datasource.config` is parsed against the declared
driver's contract, and `mongo` and `mongodb` both map to the mongo
contract (commit cdf4d9a) | "renamed to `mongodb`. The two spellings
have both been accepted since `datasource.config` was first parsed
against its driver's own contract" |
| 5180 | #14676 (dead) | retire `connector.errorMapping`, ADR-0049
(commit 13c48c2) | the number dropped; the fragment already states the
decision |
| 5601–5608 | #12868 (dead); objectui#6263 ×2, #7246, PR #7388 (live) |
narrow per-option `default` out of the form-view vocabulary only,
disposition 甲 (commit c459da6, whose diff added this fragment).
objectui#6263: the console's form controls never read the key, and the
ruling closed that card. #7246 / #7388: maintainer ruling of 2026-08-10,
"enforce" on the object-field face (`applyFieldDefaults`) | "maintainer
ruling 2026-08-28 on the console form renderer's analysis"; "enforced
there by a maintainer ruling of 2026-08-10"; "measured against the
console's form controls, none of which reads the key" |
| 5703–5704 | #10329 (dead), #4509 (live) | retire the `lookup` steering
params (commit 15d58db). #4509: 17.0.0 retired the keys the lint could
never warn about, the mapping trio among them (commit 5966c2a) | "the
sub-walk half of the 17.0.0 mapping cleanup that retired `extractQuery`
/ `errorPolicy` / `batchSize`" |
| 5718, 5721 | #8336 (live), #8495 (dead) | refuse `${…}` in memory
`persistence.path` / `persistence.key` at publish (commit 4bfe1a5).
#8336: the 2026-08-13 ruling refusing placeholders in datasource
connection config at publish (the protocol-17 entry
`datasource-config-placeholder-refused`) | "extends the publish-time
refusal of unresolved placeholders, which protocol 17 applied to
datasource connection config, to the memory driver's …"; "(#8495)"
dropped |
| 5732–5733 | #13135 (dead), #12057 (live) | retire the paper
customization protocol with its full coupling set; the maintainer
adopted retirement 2026-08-29 (commit 9e0ba21, whose diff carries the
number) | "(ADR-0049 enforce-or-remove, maintainer ruling 2026-08-29)" |
| 5963, 5966, 5973, 5975 | #10724, #10627, #10726 (dead); #11169 (live)
| retire nine dead `contributes` members; a controlled three-repo census
found one non-test read (commit be21955). #10726: `routes` later
retired too, ruled Option B (commit bc56e18, whose diff carries the
number). #11169: retire `kinds[].globs`, maintainer ruling 2026-08-24
(commit be21955) | "A census of all three repos, with controls,
measured …"; "`routes` was left to a ruling of its own, which retired it
as well (the `plugin-manifest-contributes-routes-retired` entry)" |
| 6020 | #10485 (dead) | retire stack `themes` and `ThemeSchema`, ruled
B (commit 35ad101) | the number dropped |
| 6049, 6052, 6058 | #10926 (dead); #9249 ×2 (live) | retire the
`submitLabel` copy key, Option A (commit d173125). #9249:
`element:form` retired whole (the `element-form-retired` fragment, which
renders earlier) | "retired whole above"; "nothing read it once
`element:form` was retired" |
| 6301 (comment) | #8495 (dead) | as above (commit 4bfe1a5) | "(commit
4bfe1a5, PR #8666: `${…}` refused at publish in `persistence.path` /
`persistence.key`)" |
| 24935 (comment) | #6239 (dead) | the 2026-08-08 sweep retired the
viewId-addressed `ViewProtocol` as whole defs (commit f549a0d, whose
subject names the number) | "(commit f549a0d, D3
`view-management-protocol-retired`)" |
Where a commit message does not name its number, the anchor was
confirmed from the files that commit added: c459da6, 9e0ba21 and
bc56e18 each carry their number in their own diff. Both sha anchors
added to comments are unambiguous: `rev-parse --disambiguate` count 1,
and `GET commits/SHA` returns the full sha (a 4-character control
returns 422). `merge-base --is-ancestor` answers 0 for all 11 anchors.
The checkout is shallow, with a boundary of 2026-06-28. Every anchor is
later than that, and exit 0 proves ancestry on its own.
## What stays, and why (counts left on #20234)
- **Live numbers in comments: 46 sites (plus 1 cross-repo).** The rule
applies to dead citations in comments, so these stay.
- **Live numbers in author-visible rationale text outside the 9 units:
192 sites** (175 in-repo, 17 cross-repo; 142 distinct in-repo numbers).
Step 17 holds 116 of them and step 18 holds 76. Form D would remove them
too, but they are not dead citations, and they lie outside this stage's
claimed surface. Note that #20749 (the runtime-string burn-down) counts
migration-registry text as its share, yet both of its stage claims
(`5965785560`, `5966674486`) exclude `migrations/registry.ts` as
"#20234's stage 11". So no stage currently covers them.
`migrations.test.ts` pins one of them, the live #4722 in step 17, so
whichever stage takes them moves that pin. This is reported as the open
question.
- The 6 dead numbers from census pointer `5923089344` are outside this
stage, as dispatched.
## Verification
**Deadness.** A TypeScript 6.0.3 walker runs the citation gate's own
`extractCitations` over two projections of the file (comment-only and
string-only, line structure kept). It classes each site by kind and by
region; the generated regions are the 6 `os-generated` pairs. At base,
the hand-written parts hold 262 sites: 48 in comments (1 cross-repo) and
214 in rationale strings (19 cross-repo), over 177 distinct in-repo
numbers. A REST probe of all 177 (`issues/N`, no redirect followed; lit
control #20234 and dead control #8710 at the start, after every 50 and
at the end): 165 answer 200, 12 answer 404, and 0 answer 301. Controls
behaved 5/5 lit and 5/5 dead. The 12 numbers sit on exactly the 13 sites
stage 10 named (`5902947213`). At head, the 162 distinct numbers all
answer 200 (controls 5/5 and 5/5), and 0 dead sites remain. Site-set
difference: 24 removed (13 dead and 11 live, all inside the 9 units) and
1 added (#8666, live, the PR link beside commit 4bfe1a5 in a comment,
which form C allows). The 911 sites in generated regions do not change.
**Text only.** A second instrument over TypeScript 6.0.3 evaluates the
step-17 `rationale` and every step-18 fragment `text` (72 owners). It
masks each of those initializers to one token that names its owner and
cuts every comment, JSDoc included. The base and head leaf-token streams
are IDENTICAL: 37,526 tokens, sha256 prefix `647bc09580ac619e` on both
sides. Evaluated values changed for exactly 9 owners, the units listed
above, and each word diff is the citation and its replacement words
only. Controls mutate the head in memory: a comment insertion stays
IDENTICAL, and each of these DIFFERS: a fragment `order` change, a
fragment `id` change, an unmasked string edit, a conversion-id string
edit, and an appended declaration (6/6).
**Regeneration.** Before regeneration, `check:migration-registry` and
`check:spec-changes` exit 0, and `check:upgrade-guide` exits 1.
`check:generated --fix` regenerated only the guide. Its word diff on
line 68 shows `mongodb` (#6345). becoming `mongodb`. and #4410 becoming
the decision in words. After the `origin/main` merge (`6dd99b82c3`,
through `os-regen-merge.sh`, which touched none of these paths), a
rebuild plus `check:generated` reports "All 15 generated artifacts are
up to date". No regeneration commit was owed.
**Pins and quotes.** No test asserts a changed phrase. `content/docs/**`
and `skills/**` quote none of them. The other hits for the old spellings
are independent comments in other files (live numbers), release-owned
CHANGELOGs and one test title, all left alone.
**Tests and gates** (at head `64bbd3693e`; all builds and tests through
`scripts/pm/os-verify-lock.sh`, each VERDICT command-exit 0):
- `pnpm --filter @objectstack/spec build`, and a full `turbo run build
--concurrency=2` over `./packages/*` and `./packages/*/*` (71/71).
- spec local project: Test Files 606 passed, Tests 17952 passed, 1 todo.
- spec repo project, 47 of its 51 files by name: 47 passed, 750 tests,
including `scripts/step18-rationale-merge.test.ts`.
- `pnpm --filter @objectstack/spec typecheck`: `check:test-typecheck`
OK.
- `node scripts/pm/dispatch-gates.mjs --repo
objectstack-ai/objectstack`: 85 families derived, 85 run, all exit 0,
reconciled with `--ran` ("0 NOT-MEASURED, 0 UNRUN"). That includes
`check:doc-authoring` (self-test and run), `check:issue-citations`,
`check:nul-bytes`, `check:generated`, `check:migration-registry`,
`check:upgrade-guide` and the changeset gates. Three of them first
exited 3 (prerequisite: unbuilt dist) and were rerun green after the
full build.
- Lint, as a proven narrowing: `eslint --no-inline-config --format json`
over the one touched `.ts` file reports 1 file, 0 errors, 0 warnings,
and `isPathIgnored` is false. `eslint.config.mjs:327-328` states that
type-aware linting is never enabled, so a text edit cannot move an
untouched file's verdict. The repo-wide `pnpm lint` is CI's run.
- NOT MEASURED, declared to CI as in stages 8 to 10:
`scripts/build-schemas-check-mode.test.ts` (it overran the foreground
cap on its own in stage 10; it parses this file's source, whose code
tokens the text-only proof shows unchanged), plus `def-key-collisions`
and the two `publish-smoke-*` files (temp-tree rebuild or server boot).
**Changeset.** `packages/spec` `files[]` ships `dist`. In the built
dist, the new phrases appear in 2 files (`dist/migrations/index.js`,
`.mjs`), the old spellings in 0, and an unchanged control phrase in the
same 2. Hence `patch`.
## Acceptance notes
- **Open, for the seat:** whether the 192 live author-visible numbers
become a stage, and on which card (#20234, or #20749 whose stages
currently exclude this file). They are not filed.
- **Gate coverage boundary (carrier: none; noted, not filed):** the
citation gate reads comment prose only, so these 11 dead rationale sites
were never in its census. Stage 9 recorded the same boundary for
conversion summaries.
---
_Generated by [Claude
Code](https://claude.ai/code/session_01YDt3PzwfrkuFzUBF89WPmM)_
---------
Co-authored-by: Claude <noreply@anthropic.com>1 parent 1777a9b commit 0bddffd
3 files changed
Lines changed: 58 additions & 30 deletions
File tree
- .changeset
- docs
- packages/spec/src/migrations
Lines changed: 19 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
65 | 65 | | |
66 | 66 | | |
67 | 67 | | |
68 | | - | |
| 68 | + | |
69 | 69 | | |
70 | 70 | | |
71 | 71 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
341 | 341 | | |
342 | 342 | | |
343 | 343 | | |
344 | | - | |
| 344 | + | |
| 345 | + | |
345 | 346 | | |
346 | 347 | | |
347 | 348 | | |
| |||
5177 | 5178 | | |
5178 | 5179 | | |
5179 | 5180 | | |
5180 | | - | |
| 5181 | + | |
5181 | 5182 | | |
5182 | 5183 | | |
5183 | 5184 | | |
| |||
5598 | 5599 | | |
5599 | 5600 | | |
5600 | 5601 | | |
5601 | | - | |
5602 | | - | |
5603 | | - | |
5604 | | - | |
5605 | | - | |
| 5602 | + | |
| 5603 | + | |
| 5604 | + | |
| 5605 | + | |
| 5606 | + | |
| 5607 | + | |
5606 | 5608 | | |
5607 | 5609 | | |
5608 | | - | |
| 5610 | + | |
| 5611 | + | |
5609 | 5612 | | |
5610 | 5613 | | |
5611 | 5614 | | |
| |||
5700 | 5703 | | |
5701 | 5704 | | |
5702 | 5705 | | |
5703 | | - | |
5704 | | - | |
| 5706 | + | |
| 5707 | + | |
| 5708 | + | |
5705 | 5709 | | |
5706 | 5710 | | |
5707 | 5711 | | |
| |||
5715 | 5719 | | |
5716 | 5720 | | |
5717 | 5721 | | |
5718 | | - | |
| 5722 | + | |
| 5723 | + | |
5719 | 5724 | | |
5720 | 5725 | | |
5721 | | - | |
| 5726 | + | |
5722 | 5727 | | |
5723 | 5728 | | |
5724 | 5729 | | |
| |||
5729 | 5734 | | |
5730 | 5735 | | |
5731 | 5736 | | |
5732 | | - | |
5733 | | - | |
| 5737 | + | |
| 5738 | + | |
5734 | 5739 | | |
5735 | 5740 | | |
5736 | 5741 | | |
| |||
5960 | 5965 | | |
5961 | 5966 | | |
5962 | 5967 | | |
5963 | | - | |
| 5968 | + | |
5964 | 5969 | | |
5965 | 5970 | | |
5966 | | - | |
5967 | | - | |
| 5971 | + | |
| 5972 | + | |
| 5973 | + | |
5968 | 5974 | | |
5969 | 5975 | | |
5970 | 5976 | | |
5971 | 5977 | | |
5972 | | - | |
5973 | | - | |
| 5978 | + | |
| 5979 | + | |
| 5980 | + | |
5974 | 5981 | | |
5975 | | - | |
5976 | | - | |
| 5982 | + | |
| 5983 | + | |
5977 | 5984 | | |
5978 | 5985 | | |
5979 | 5986 | | |
| |||
6017 | 6024 | | |
6018 | 6025 | | |
6019 | 6026 | | |
6020 | | - | |
6021 | | - | |
| 6027 | + | |
| 6028 | + | |
6022 | 6029 | | |
6023 | 6030 | | |
6024 | 6031 | | |
| |||
6046 | 6053 | | |
6047 | 6054 | | |
6048 | 6055 | | |
6049 | | - | |
| 6056 | + | |
6050 | 6057 | | |
6051 | 6058 | | |
6052 | | - | |
| 6059 | + | |
6053 | 6060 | | |
6054 | 6061 | | |
6055 | 6062 | | |
6056 | 6063 | | |
6057 | 6064 | | |
6058 | | - | |
| 6065 | + | |
| 6066 | + | |
6059 | 6067 | | |
6060 | 6068 | | |
6061 | 6069 | | |
| |||
6298 | 6306 | | |
6299 | 6307 | | |
6300 | 6308 | | |
6301 | | - | |
6302 | | - | |
| 6309 | + | |
| 6310 | + | |
| 6311 | + | |
6303 | 6312 | | |
6304 | 6313 | | |
6305 | 6314 | | |
| |||
24932 | 24941 | | |
24933 | 24942 | | |
24934 | 24943 | | |
24935 | | - | |
| 24944 | + | |
24936 | 24945 | | |
24937 | 24946 | | |
24938 | 24947 | | |
| |||
0 commit comments