Skip to content

docs(qa): platform-checklist activation-ledger-row-contract is written around the removed sys_metadata_activation tenant column #15154

Description

@hotlong

The platform checklist item platform-core.activation-ledger-row-contract
(docs/qa/platform-checklist/areas/platform-core.json) is written around a column that
no longer exists, so several of its steps are now impossible to execute as written.

What changed underneath it

PR for #15024 drops the reserved organization_id column from sys_metadata_activation:
the object declares systemFields: { tenant: false }, the declared unique index states
unique: 'global' over (metadata_type, name), and
ObjectStoreMetadataActivationStore no longer filters reads to NULL-organization rows or
skips org-carrying ones. The table never shipped with the column (it landed after the
@objectstack/account@17.2.0 tag), so this is a plain removal.

What is now stale in the item

Measured against the item's own text:

  • Step 2 tells the runner each row "carries the five declared columns (metadata_type,
    name, package_id, organization_id, active) and organization_id is NULL on every row" —
    there are now four columns and no tenant column.
  • Step 6 (uniqueness probe) describes the refusal as coming from "the COALESCE'd unique
    index (ADR-0120 D3 NULL-collapse)". The index is now a plain 'global' unique over the two
    real key parts. The probe still works and should still refuse; only the stated mechanism is wrong.
  • Step 7 (org-row-skip probe) instructs the runner to INSERT a row with
    organization_id set into the sqlite file. That INSERT can no longer succeed — there is no
    such column — so the leg cannot be run at all, and the clause it verifies
    ("org-carrying rows are SKIPPED on read, never merged") no longer describes the platform.
  • The ref lines cite unique:'organization', "organization_id reserved-NULL" and
    "org-row skip on read (the wall)" in sys-metadata-activation.object.ts and
    metadata-activation-store.ts. None of those are in either file any more.
  • access-security.activation-write-operator-gate is affected more lightly: it asks the runner
    to read the row back and see organization_id NULL. The operator gate itself is unchanged
    and its pins pass unchanged; only that one read-back detail is stale.

Why this was not fixed in the #15024 PR

Rewriting it is not mechanical. Step 7 does not have a drop-in replacement — the honest
question is whether the org-skip clause is replaced by a "the table has no tenant column"
probe, or simply retired along with the behaviour it tested — and that is a judgement about
what the checklist should assert, which belongs with the checklist's own authoring pass rather
than riding on a code PR.

⚠️ Not urgent for CI: pnpm check:platform-checklist is deliberately NOT wired into the lint
workflow (maintainer decision, noted in .github/workflows/lint.yml — it is run by hand), and it
already reports 4 unrelated UNCLASSIFIED coverage problems on origin/main today
(batch_endpoints, crud_endpoints, metadata_endpoints, route_generation), verified
byte-identical at fcc42e6c1 before any of this work. So this item's staleness blocks nothing
mechanically — it misleads a human runner, which is the whole cost.

Refs: #15024 · branch claude/issue-15024-activation-ledger-tenantless

🤖 Generated with Claude Code

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions