Uh oh!
There was an error while loading. Please reload this page.
docs(qa): cli.doctor-deprecation-scan no longer calls os migrate meta a codemod - #10829
Merged
Merged
Conversation
…a` a codemod
The item described `os migrate meta` twice as a codemod: an acceptance clause
("The real metadata codemod is `os migrate meta`") and a `source` entry
("cli.migrate-meta-codemod (the codemod that actually exists)").
It is not one. The command declares exactly
from/to/step/out/stored/database-url/apply/yes/force/type/json
(packages/cli/src/commands/migrate/meta.ts:195-239) with no --write/--fix/
in-place flag; its only file writes are the two `if (flags.out)`-guarded
writeFileSync calls at :347 and :394-396, which emit a JSON snapshot; and its
header at :155-157 declines the AST rewrite as "unsafe and lossy". The in-place
codemod is commissioned as #9591 (v18, pm:on-hold) and has not been built.
Both descriptors now say what the command is -- a chain replayer that PRINTS
the mechanical edits for hand application -- and name #9591 as the
commissioned-but-unbuilt codemod, which is added to `source` so the reference
resolves. revision 1 -> 2 with a history entry, per the directory README's
change lifecycle (a revision re-pins the run records).
The item's load-bearing assertion is unchanged and still an expected-fail: the
doctor hint at doctor.ts:2149 prescribes `objectstack codemod v2-to-v3`, which
is registered nowhere.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DdCnBGcHeufjrq7drTD3wtos-zhuang
marked this pull request as ready for review
August 21, 2026 13:18
Uh oh!
There was an error while loading. Please reload this page.
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 freeto 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.
Fixes#10418
docs/qa/platform-checklist/areas/cli.json, itemcli.doctor-deprecation-scan, describedos migrate metatwice as a codemod. It is not one. Both descriptors now say what the command is, and name #9591 as the commissioned-but-unbuilt in-place codemod.The two claims, before and after
1 — the EXPECTED-FAIL acceptance clause
os migrate meta(cli.migrate-meta-codemod)."os migrate meta(cli.migrate-meta-codemod) — but it is not a codemod: it replays the migration chain and PRINTS the mechanical edits for the author to apply by hand. It declares no--write/--fix/in-place flag (exactly from/to/step/out/stored/database-url/apply/yes/force/type/json,commands/migrate/meta.ts:195-239) and writes no source file — bothwriteFileSynccalls are guarded byif (flags.out)(:347and:394-396) and emit a JSON snapshot, and the header at:155-157declines the AST rewrite as 'unsafe and lossy'. The in-place codemod is commissioned as feat(cli):os migrate meta --write— the AST codemod that rewrites authored sources for the mechanicalappliedset (v18) #9591 (v18,pm:on-hold) and has not been built, so a hint rewritten to nameos migrate metamust promise a LIST of edits, not an auto-fix."2 — the
sourcedescriptoros migrate meta— the remediation path that does exist; its revision 3 asserts the command LISTS mechanical edits and rewrites no source file. The id keeps its-codemodspelling only because ids are immutable and never reused (README lifecycle) — it reads as a forward reference to feat(cli):os migrate meta --write— the AST codemod that rewrites authored sources for the mechanicalappliedset (v18) #9591, not as a description of today's command)"A
sourceentry for #9591 was added alongside it, so the clause's reference resolves to the card that owns the unbuilt capability.What did NOT change: the item's load-bearing assertion.
os doctor's remediation hint atdoctor.ts:2149still prescribesobjectstack codemod v2-to-v3, registered nowhere inpackages/cli/src/commands/, and the clause is still the expected-fail. The clause now also warns that a fix which merely repoints the hint atos migrate metamust describe it as a list, not an auto-fix — otherwise a dead prescription is replaced by a false one.Facts re-derived at this base (
f4e5d916d6)packages/cli/src/commands/migrate/meta.ts:195-239—from:195,to:199,step:203,out:208,stored:212,database-url:218,apply:222,yes:226,force:231,type:235,json:239. No--write/--fix/in-place: agrep -nE "write|fix|in-place|inplace"over the file returns only thewriteFileSyncimport, prose in comments, and the--storedrow-rewrite text.:347if (flags.out) writeFileSync(resolve(flags.out), …)and:394-396if (flags.out) { writeFileSync(…); printInfo('Wrote migrated stack snapshot → …') }— the onlywriteFileSynccall sites in the file.:155-157— "The command does not silently rewrite TS config source (that AST rewrite is unsafe and lossy);--outwrites the canonicalized stack as a JSON snapshot the agent can diff and adopt."enhancement · domain:cli · target:v18 · pm:on-hold; nothing inpackages/cliimplements it.Revision protocol
revision1 → 2 with ahistoryentry, perdocs/qa/platform-checklist/README.md("Change — edit the fields, bumprevision, append ahistoryentry saying what changed and why. The revision matters because run records pin the revision they ran against"). The entry's shape is copied from the single-line sibling entrycli.scaffold-console-first-paintrevision 2 ({ "revision", "date", "change", "ref" },refnaming the card that commissioned the change, ascli.migrate-meta-codemodrevision 3 does with#9733). The two old wordings survive inside that history entry only — quoted as what was corrected, which is what the README asks a history entry to record.Verification
pnpm check:platform-checklistis two halves; both run separately with the exit code captured before any pipe, at final commit862b32b7b8:Both halves were also green before the edit (0 / 0), so the revision/history check is confirmed to have been satisfied on both sides rather than only after.
The last three families are what
node scripts/pm/dispatch-gates.mjsnames for this change set (docs/**⇢ doc-authoring and doc-formula-expressions; nul-bytes for any edit).check:doc-formula-expressionsneededpnpm --filter '@objectstack/lint^...' buildfirst — before that it failed on a missing@objectstack/formula/dist, which reads exactly like a real red.check:platform-checklistis NOT wired into CI — by maintainer decision (.github/workflows/lint.yml:954-960, and the same decision restated in the directory README). This local green is therefore the only signal this change will ever get; no CI job will re-run it on this PR. Do not read a green CI as covering the checklist.No ablation applies: this is a prose correction with no guard under test — there is nothing whose deletion would flip a check from green to red, so the slot is empty rather than filled with a ceremonial run.
Out of scope, deliberately
cli.migrate-meta-codemod— read, not touched. Its revision-3 text (QA checklist itemcli.migrate-meta-codemodis active P1 for a capability that does not exist — it assertsos migrate metarewrites authored sources #9733 / PR docs(qa): rewrite thecli.migrate-meta-codemodP1 to whatos migrate metaactually does #10412, merged 2026-08-20) already states the print-only contract correctly and does not repeat the claim; its-codemodid is immutable by README lifecycle, and revision 3 already documents that as a forward reference.packages/cli/src/commands/migrate/meta.ts— the command is correct; the checklist was wrong.os migrate meta --write— the AST codemod that rewrites authored sources for the mechanicalappliedset (v18) #9591 — not built, not scoped.scripts/check-platform-checklist.mjs— untouched; fix(qa-checklist): resolveprovisioning.useagainst its own area's recipes (#10593 gap 1) #10810 is in flight against it and this change does not trip it.Did the claim spread?
Checked, and reported on the issue: the word "codemod" is attached to
os migrate metanowhere else.docs/qa/platform-checklist/FOLLOW-UPS.md:212calls it "the real path" (accurate),content/docs/protocol/backward-compatibility.mdx:134says only that an automatedcodemodcommand is not yet available, and thecontent/docs/releases/v17.mdxhits are a different, unrelated codemod script. A separate defect was found in the same class and filed rather than fixed here — four docs-site lines attribute an in-place rewrite toos migrate meta --from, which the same docs site contradicts in bold atcontent/docs/upgrading.mdx:145.Generated by Claude Code