Filed by the domain:spec execution seat (#6017), session_01KB5PFtxuy1x3dcR5gxudx6, 2026-09-14T14:1xZ, from the out_of_scope_findings of the #17469 round (PR #18187). ⛔ Not claimed, ⛔ not dispatched. Grading and routing are triage's — ⚠️ the landing point spans four packages in at least three lanes, so this may want splitting; domain:spec is a holding label, ⛔ not a claim on the work.
What #17469 restored, and where it stops
#17469 (ruled, director batch #128 item 5, option 1′) established one definition of "is this field multi-valued": isMultiValueField in packages/spec, with storage following it. The seat's implementation ruling extended ruled item 2 from the single site the ruling named to all 18 sites in driver-sql that read field.multiple as that question.
⇒ The invariant stops at the driver-sql package boundary. These sites still read field.multiple raw:
| site |
what it decides |
packages/cli/src/commands/generate.ts:2617 |
if (fieldDef.multiple) { table.jsonb(...) } — the generated migration's column type |
packages/cli/src/commands/generate.ts:2443 |
fieldTypeToSql(fType, !!fieldDef.multiple, ...) |
packages/cli/src/commands/generate.ts:1706 |
declaredColumnDefault — if (declaring?.multiple) return { kind: 'none' } |
packages/drivers/driver-turso/src/remote-transport.ts:2435 |
if (field.multiple) return 'TEXT' — column type |
packages/objectql/src/engine.ts:4741 and :13584 |
value shape |
packages/runtime/src/action-execution.ts:1279 |
parameter arity |
The measurable consequence today
os generate migration and the runtime driver now disagree for the retired shapes: a text field flagged multiple: true gets JSONB from the generator and a varchar from driver-sql. That is #14829 in reverse — the platform and the GENERATED DDL as two lists — and it is exactly what #14829's own pin caught when #17469 landed (packages/cli/src/commands/generate-multiple-json-column.pin.test.ts went red and had to be re-targeted).
⚠️ generate.ts carries its own comment saying the authority is the driver's flag rule and not the spec's isMultiValueField — a declared divergence, which is why this is a contract question and not a typo.
Why it is BOUNDED, stated so the card is not over-graded
Those declarations are refused at the authoring entrance by #17469's ruled item 1, so they can only still reach these readers through doors that never run FieldSchema (registerExternalObject / initObjects, and the generators' own unvalidated input). Reachable, but no longer authorable. This seat is ⛔ not grading it p1.
Why #17469 did NOT fix it
Seat decision, recorded on #17469 (5664249028): the ruling's scope was the driver, packages/cli is another lane, and widening a 21-file cross-domain PR into a third domain mid-flight is not a call a dispatching seat makes on its own. Only the three cli pins were re-targeted — they pin driver-sql's own source and behaviour, so they had to follow it — and generate.ts's logic was explicitly left alone.
What a taker owes first
⚠️ Per-site, the same premise #17469 used, and it is falsifiable: does this site read field.multiple to mean "is this value multi-valued"? A site reading it for a different question is ⛔ not covered. That premise held for 18 driver-sql sites and failed for 3 (message interpolations that echo an author's declaration rather than deciding anything) — so expect the same split here. ⛔ Do not align a site because it matches a grep.
Dedupe words
field.multiple raw read · isMultiValueField · os generate migration JSONB · 14829 reverse · one definition multi-valued
⛔ This seat did not run a dedupe search (per the filer-does-not-dedupe rule). ⚠️ A check must include closed cards.
Refs
#17469 (the ruling and the driver-sql half) · PR #18187 · #14829 (the original two-lists defect) · #11437 (the radio precedent)
Generated by Claude Code
Filed by the⚠️ the landing point spans four packages in at least three lanes, so this may want splitting;
domain:specexecution seat (#6017),session_01KB5PFtxuy1x3dcR5gxudx6, 2026-09-14T14:1xZ, from theout_of_scope_findingsof the #17469 round (PR #18187). ⛔ Not claimed, ⛔ not dispatched. Grading and routing are triage's —domain:specis a holding label, ⛔ not a claim on the work.What #17469 restored, and where it stops
#17469 (ruled, director batch #128 item 5, option 1′) established one definition of "is this field multi-valued":
isMultiValueFieldinpackages/spec, with storage following it. The seat's implementation ruling extended ruled item 2 from the single site the ruling named to all 18 sites indriver-sqlthat readfield.multipleas that question.⇒ The invariant stops at the
driver-sqlpackage boundary. These sites still readfield.multipleraw:packages/cli/src/commands/generate.ts:2617if (fieldDef.multiple) { table.jsonb(...) }— the generated migration's column typepackages/cli/src/commands/generate.ts:2443fieldTypeToSql(fType, !!fieldDef.multiple, ...)packages/cli/src/commands/generate.ts:1706declaredColumnDefault—if (declaring?.multiple) return { kind: 'none' }packages/drivers/driver-turso/src/remote-transport.ts:2435if (field.multiple) return 'TEXT'— column typepackages/objectql/src/engine.ts:4741and:13584packages/runtime/src/action-execution.ts:1279The measurable consequence today
os generate migrationand the runtime driver now disagree for the retired shapes: atextfield flaggedmultiple: truegets JSONB from the generator and a varchar fromdriver-sql. That is #14829 in reverse — the platform and the GENERATED DDL as two lists — and it is exactly what #14829's own pin caught when #17469 landed (packages/cli/src/commands/generate-multiple-json-column.pin.test.tswent red and had to be re-targeted).generate.tscarries its own comment saying the authority is the driver's flag rule and not the spec'sisMultiValueField— a declared divergence, which is why this is a contract question and not a typo.Why it is BOUNDED, stated so the card is not over-graded
Those declarations are refused at the authoring entrance by #17469's ruled item 1, so they can only still reach these readers through doors that never run
FieldSchema(registerExternalObject/initObjects, and the generators' own unvalidated input). Reachable, but no longer authorable. This seat is ⛔ not grading it p1.Why #17469 did NOT fix it
Seat decision, recorded on #17469 (
5664249028): the ruling's scope was the driver,packages/cliis another lane, and widening a 21-file cross-domain PR into a third domain mid-flight is not a call a dispatching seat makes on its own. Only the three cli pins were re-targeted — they pin driver-sql's own source and behaviour, so they had to follow it — andgenerate.ts's logic was explicitly left alone.What a taker owes first
field.multipleto mean "is this value multi-valued"? A site reading it for a different question is ⛔ not covered. That premise held for 18 driver-sql sites and failed for 3 (message interpolations that echo an author's declaration rather than deciding anything) — so expect the same split here. ⛔ Do not align a site because it matches a grep.Dedupe words
field.multipleraw read ·isMultiValueField·os generate migrationJSONB · 14829 reverse · one definition multi-valued⛔ This seat did not run a dedupe search (per the filer-does-not-dedupe rule).⚠️ A check must include closed cards.
Refs
#17469 (the ruling and the driver-sql half) · PR #18187 · #14829 (the original two-lists defect) · #11437 (the radio precedent)
Generated by Claude Code