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

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

    , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
     blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
    }
    } catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
    })();
    (function(){
    try {
    var __m = "github.com";
    var __re = new RegExp('^' + "github\\.com" + '
    
    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

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions

      , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
      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

      Type

      No type

      Projects

      No projects

        Milestone

        No milestone

        Relationships

        None yet

        Development

        No branches or pull requests

        Issue actions

        , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
        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

        Type

        No type

        Projects

        No projects

          Milestone

          No milestone

          Relationships

          None yet

          Development

          No branches or pull requests

          Issue actions

          , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
          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

          Type

          No type

          Projects

          No projects

            Milestone

            No milestone

            Relationships

            None yet

            Development

            No branches or pull requests

            Issue actions

            , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
            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

            Type

            No type

            Projects

            No projects

              Milestone

              No milestone

              Relationships

              None yet

              Development

              No branches or pull requests

              Issue actions

              , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
              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

              Type

              No type

              Projects

              No projects

                Milestone

                No milestone

                Relationships

                None yet

                Development

                No branches or pull requests

                Issue actions

                , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
                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

                Type

                No type

                Projects

                No projects

                  Milestone

                  No milestone

                  Relationships

                  None yet

                  Development

                  No branches or pull requests

                  Issue actions