Blocked-by: #15154
Four more platform-checklist items ask a runner to read back organization_id on a
sys_metadata_activation row. That column was dropped before it ever shipped (#15024, PR
#15155): the object declares systemFields: { tenant: false }, so the column is not merely
unwritten — it is absent from the physical table.
#15154 enumerated the staleness in platform-core.activation-ledger-row-contract and
(lightly) in access-security.activation-write-operator-gate, and PR #15251 repaired exactly
those two under an explicit "no other checklist items touched" scope. The sweep for that work
found four siblings the card did not name. Recording them rather than widening that PR.
The four
| item | area file | stale sites |
|---|
platform-core.activation-ledger-registration-home | areas/platform-core.json | step 2 captures the row as organization_id NULL; the no-automation acceptance clause says the flip "writes ONE install-level row (metadata_type 'action', organization_id NULL)" |
api-backend.packaged-action-disabled-dispatch | areas/api-backend.json | the disable step confirms the row with organization_id NULL; automated.ref describes the dogfood pin as asserting "ONE install-level row with organization_id NULL" |
api-backend.action-activation-door-contract | areas/api-backend.json | the happy-path step reads the row with organization_id NULL; the matching acceptance clause repeats it and glosses it as "the per-org dimension is reserved and unwritten" |
automation.packaged-flow-disable-durable | areas/automation.json | the ledger read step records organization_id as one of the fields to capture; the durability clause asserts organization_id NULL with the gloss "§5 reserves the column"; a source line still cites "org-carrying rows skipped on read" and "organization_id never written" |
Why this is worse than a wording nit
⛔ These are not correctable by swapping NULL for a different value — the read must be
inverted into a key-set assertion. Once the column is gone, a value check of the shape
row.organization_id ?? null answers null whether or not the column exists, so the leg
passes while measuring nothing: green for exactly the reason it should be red. #15024 hit
this on the dogfood pin and inverted it to
expect(Object.keys(row)).not.toContain('organization_id') with an arrayContaining
anti-vacuity control beside it; PR #15251 carried the same inversion into the two items it
owned. These four still carry the vacuous spelling.
Two of the glosses are also now wrong on the decision, not just the value: ADR-0126 §5 D3's
"the org column is reserved" bullet was withdrawn by ADR-0131 D7 ("a reserved nullable
tenant column is the shape D1 forbids"), which additionally names sys_metadata_activation as
reverted before 17.3 and not returning. An item that still says the column is "reserved and
unwritten" tells a runner the dimension is coming back.
Not urgent for CI
pnpm check:platform-checklist is deliberately not wired into lint.yml (maintainer
decision) and does not read step prose, so none of this reds anything. It misleads a human
runner — the same cost #15154 recorded.
Suggested shape
One docs-only PR over the three area files, following the pattern PR #15251 already landed:
invert each read-back to a key-set assertion, correct the two "reserved" glosses to cite
ADR-0131 D7, drop the retired org-row-skip clause from the automation item's source line,
and bump revision plus a history entry on each of the four (the checklist's change
lifecycle, docs/qa/platform-checklist/README.md).
Refs: #15154 · PR #15251 · #15024
Generated by Claude Code
Blocked-by: #15154
Four more platform-checklist items ask a runner to read back
organization_idon asys_metadata_activationrow. That column was dropped before it ever shipped (#15024, PR#15155): the object declares
systemFields: { tenant: false }, so the column is not merelyunwritten — it is absent from the physical table.
#15154 enumerated the staleness in
platform-core.activation-ledger-row-contractand(lightly) in
access-security.activation-write-operator-gate, and PR #15251 repaired exactlythose two under an explicit "no other checklist items touched" scope. The sweep for that work
found four siblings the card did not name. Recording them rather than widening that PR.
The four
platform-core.activation-ledger-registration-homeareas/platform-core.jsonorganization_id NULL; the no-automation acceptance clause says the flip "writes ONE install-level row (metadata_type 'action', organization_id NULL)"api-backend.packaged-action-disabled-dispatchareas/api-backend.jsonorganization_id NULL;automated.refdescribes the dogfood pin as asserting "ONE install-level row with organization_id NULL"api-backend.action-activation-door-contractareas/api-backend.jsonorganization_id NULL; the matching acceptance clause repeats it and glosses it as "the per-org dimension is reserved and unwritten"automation.packaged-flow-disable-durableareas/automation.jsonorganization_idas one of the fields to capture; the durability clause assertsorganization_id NULLwith the gloss "§5 reserves the column"; asourceline still cites "org-carrying rows skipped on read" and "organization_id never written"Why this is worse than a wording nit
⛔ These are not correctable by swapping
NULLfor a different value — the read must beinverted into a key-set assertion. Once the column is gone, a value check of the shape
row.organization_id ?? nullanswersnullwhether or not the column exists, so the legpasses while measuring nothing: green for exactly the reason it should be red. #15024 hit
this on the dogfood pin and inverted it to
expect(Object.keys(row)).not.toContain('organization_id')with anarrayContaininganti-vacuity control beside it; PR #15251 carried the same inversion into the two items it
owned. These four still carry the vacuous spelling.
Two of the glosses are also now wrong on the decision, not just the value: ADR-0126 §5 D3's
"the org column is reserved" bullet was withdrawn by ADR-0131 D7 ("a reserved nullable
tenant column is the shape D1 forbids"), which additionally names
sys_metadata_activationasreverted before 17.3 and not returning. An item that still says the column is "reserved and
unwritten" tells a runner the dimension is coming back.
Not urgent for CI
pnpm check:platform-checklistis deliberately not wired intolint.yml(maintainerdecision) and does not read step prose, so none of this reds anything. It misleads a human
runner — the same cost #15154 recorded.
Suggested shape
One docs-only PR over the three area files, following the pattern PR #15251 already landed:
invert each read-back to a key-set assertion, correct the two "reserved" glosses to cite
ADR-0131 D7, drop the retired org-row-skip clause from the
automationitem'ssourceline,and bump
revisionplus ahistoryentry on each of the four (the checklist's changelifecycle,
docs/qa/platform-checklist/README.md).Refs: #15154 · PR #15251 · #15024
Generated by Claude Code