Filing gate: ① a product defect with reach measured. reach: public door + wrong answer, measured once (below). Filed by the domain:cli seat (seat post #6024, session_016GiHYRmLSNWTfbX9gVQkpz), from the out-of-scope findings of #21573's os-dev report (5974434894). ⛔ Not a claim. Triage sets the grade and the lane.
Reader who acts: triage grades it. The fix lands in the os migrate data-migration commands that take --object and record a deployment-level flag on --apply: packages/cli/src/commands/migrate/value-shapes.ts, and by the same reading files-to-references.ts.
Dedupe: MCP search_issues, repo-scoped, open and closed together:
Measured (by the #21573 dev, by hand, on a throwaway SQLite project at a tree whose value-shapes.ts equals main 3222c57404)
- With one off-shape value stored (a lookup holding an expanded record object),
os migrate value-shapes --json answers gatePassed: false with blocking: 1.
- On the same database,
os migrate value-shapes --object <a name the deployment does not declare> --apply --yes --json exits 0 and answers gatePassed: true with scannedObjects: [].
- It records the deployment-level
adr-0104-value-shapes flag as verified: verified_at is set and blocking is 0.
Read (PM, on main 3222c57404; not separately measured)
- In
value-shapes.ts, --object narrows the scan (scanValueShapes(…, { objects: flags.object })). The --apply branch then calls recordDataMigrationRun with migrationId: VALUE_SHAPES_MIGRATION_ID and passed taken from that narrowed report. Nothing conditions the deployment-level write on the scan having covered the deployment.
- So the class is not limited to a misspelling. Any
--object subset that passes records the flag for the whole deployment, over objects the run never read.
- The header comment says that flag, "never the platform version, is what turns strict enforcement of those classes on for THIS deployment."
files-to-references.ts has the same shape: objects: flags.object, plus a deployment flag recorded on --apply (adr-0104-file-references). Read only, unmeasured.
- The family drops an unknown
--object name silently, with no refusal, in value-shapes, files-to-references, summary-nulls and duplicates (per the same report). Unmeasured here beyond the case above.
Why it matters: the flag is the deployment's attestation that its stored data passed the gate, and it turns strict enforcement on. A narrowed run, or a typo, attests to data nobody scanned. That is a wrong answer at an operator door, and the opposite of the command's own rule that "a deployment whose data has regressed closes its own gate rather than coasting".
Candidate seams, which triage decides:
- A narrowed
--apply records no deployment flag, or refuses --apply with --object altogether.
- An unknown
--object name is refused (OBJECT_NOT_FOUND) across the family, rather than narrowing to nothing.
One closure card for the family is the report's recommendation, not single cards.
Generated by Claude Code
Filing gate: ① a product defect with reach measured.
reach:public door + wrong answer, measured once (below). Filed by thedomain:cliseat (seat post #6024,session_016GiHYRmLSNWTfbX9gVQkpz), from the out-of-scope findings of #21573's os-dev report (5974434894). ⛔ Not a claim. Triage sets the grade and the lane.Reader who acts: triage grades it. The fix lands in the
os migratedata-migration commands that take--objectand record a deployment-level flag on--apply:packages/cli/src/commands/migrate/value-shapes.ts, and by the same readingfiles-to-references.ts.Dedupe: MCP
search_issues, repo-scoped, open and closed together:detailfor a legacy{latitude, longitude}location is the missing-pair error, not thelatituderename hint the schema carries #15490 (a finding detail, closed). Neither is this.detailfor a legacy{latitude, longitude}location is the missing-pair error, not thelatituderename hint the schema carries #15490, neither this.Measured (by the #21573 dev, by hand, on a throwaway SQLite project at a tree whose
value-shapes.tsequalsmain3222c57404)os migrate value-shapes --jsonanswersgatePassed: falsewithblocking: 1.os migrate value-shapes --object <a name the deployment does not declare> --apply --yes --jsonexits 0 and answersgatePassed: truewithscannedObjects: [].adr-0104-value-shapesflag as verified:verified_atis set andblockingis 0.Read (PM, on
main3222c57404; not separately measured)value-shapes.ts,--objectnarrows the scan (scanValueShapes(…, { objects: flags.object })). The--applybranch then callsrecordDataMigrationRunwithmigrationId: VALUE_SHAPES_MIGRATION_IDandpassedtaken from that narrowed report. Nothing conditions the deployment-level write on the scan having covered the deployment.--objectsubset that passes records the flag for the whole deployment, over objects the run never read.files-to-references.tshas the same shape:objects: flags.object, plus a deployment flag recorded on--apply(adr-0104-file-references). Read only, unmeasured.--objectname silently, with no refusal, invalue-shapes,files-to-references,summary-nullsandduplicates(per the same report). Unmeasured here beyond the case above.Why it matters: the flag is the deployment's attestation that its stored data passed the gate, and it turns strict enforcement on. A narrowed run, or a typo, attests to data nobody scanned. That is a wrong answer at an operator door, and the opposite of the command's own rule that "a deployment whose data has regressed closes its own gate rather than coasting".
Candidate seams, which triage decides:
--applyrecords no deployment flag, or refuses--applywith--objectaltogether.--objectname is refused (OBJECT_NOT_FOUND) across the family, rather than narrowing to nothing.One closure card for the family is the report's recommendation, not single cards.
Generated by Claude Code