Skip to content

FOLLOW-UPS.md §7b still lists the dead objectstack codemod v2-to-v3 prescription as unfixed — #10680 removed it, and the row's "the real path is os migrate meta" is what that fix deliberately refused #11628

Description

@os-steve

Found while refreshing the sibling checklist item cli.doctor-deprecation-scan for #11420. That card's declared file surface is docs/qa/platform-checklist/areas/cli.json, that one item — so this is filed rather than folded in, matching the precedent #11420 was itself filed under.

Measured at origin/main @ 3637731e2.

The row

docs/qa/platform-checklist/FOLLOW-UPS.md:211-215, under §7b Docs drift (PD#10 class — file as docs fixes, not checklist items):

  • Dead remediation prescription in a live commanddoctor.ts:2149 prints "Run
    objectstack codemod v2-to-v3 to auto-fix"; no codemod command exists (the real path
    is os migrate meta), and content/docs/protocol/backward-compatibility.mdx:134 admits
    it. Fix the string; the new cli.doctor-deprecation-scan item carries the expected-fail
    probe until then.

Three things in it are false at head, and one is still true.

1. The string was already fixed — by #10680. The row's closing instruction ("Fix the string … until then") reads as open work. At head the print site is doctor.ts:2283-2288 and prints a two-branch printInfo:

Found N deprecated pattern(s). No automated codemod ships with the CLI — apply each finding's replacement by hand (re-run with --verbose to print them).
Found N deprecated pattern(s). No automated codemod ships with the CLI — apply the → replacement shown under each finding above. (--verbose)

grep -rn "codemod v2-to-v3" packages/cli/src/ returns only the comment at doctor.ts:2258 that records the removed prescription, and packages/cli/src/commands/doctor-deprecation-hint-commands.test.ts pins the class (expect(unregisteredHintsIn(printable)).toEqual([])).

2. "the real path is os migrate meta" is the reading #10680 explicitly refused. Its comment at doctor.ts:2265-2277 and the test's own header both record why: os migrate meta's subject is an authored stack config, its header declines the AST rewrite as "unsafe and lossy", both its writes are --out JSON snapshots, and three of the eight DEPRECATED_PATTERNS (EnhancedObjectKernel and the two deep-import paths) are not metadata at all. The test asserts the repoint did not happen: expect(printable).not.toContain('migrate meta'). A reader acting on this row today would re-introduce the defect in its "same defect respelled" form.

3. The doctor.ts:2149 anchor moved#10679 shifted the scanner block by +76 lines and #10680's comment block pushed the print site further; the hint is at :2283-2288.

Still true:content/docs/protocol/backward-compatibility.mdx:134 does still admit the automated codemod is "not yet available" — and at head that admission is consistent with the tool rather than contradicting it, which is the opposite of what the row asserts.

Why it is worth an edit rather than a shrug

§7b's own heading says these rows are filed as docs fixes; the row is the ledger's record that this one is outstanding. A resolved row left in the outstanding list is the same class of stale-instruction defect that #11420, #11138 and #10798 were each filed for — the cost lands on whoever works the ledger next, and here the wrong action it prescribes (repoint at os migrate meta) is one a landed fix specifically argued against.

Not resolved here

§7b shows no convention for retiring a row — no struck-through, annotated or dated example exists in the file — so the correct shape (delete the row, or annotate it with the fixing PR and keep the history) is a call for whoever owns the ledger, not something this report should guess. #10881 closed the twin claim in packages/cli/README.md; how that one was recorded may be the precedent to follow.


Generated by Claude Code

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions