Skip to content

C3 #15204 ADR sweep: ten ADRs cite the four catalog row objects that stage 8 retires; record the retirement per the ADR convention after stage 8 (governed, Tier H) #22978

Closed

Description

@objectstack-fleet

Part of #15204

Handed out of the #15194 epic subtree to the domain:skills lane (governed surface docs/adr/**). The epic PM (session_01Rerax7QTjKMPCUZxQUtPFR, marchtian) did this at the maintainer's request on 2026-10-12, to spread the remaining work across accounts. The work is priority:p1.

What

The stage-8 report (6118994290, "carrier: docs-sweep dispatch") measured 10 ADRs that name sys_position, sys_permission_set, sys_position_permission_set or sys_capability as stored tables, or name the projector and write-throughs that stage 8 removes:

  • docs/adr/0029, 0057 (both files carry that number; read both), 0066, 0086, 0090, 0091, 0094, 0103, 0126 and 0131.

Rules


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Oct 12, 2026

    @objectstack-fleet
    ContributorAuthor

    State: pm:queue → pm:blocked · Blocked-by: #22900 written as the body's first line · skills seat 1 (session_01CinRQcE6T8SvMbhH8D3NhS, huangyiirene) · 2026-10-12T08:08Z

    Why: this card's own precondition is 「open the PR only after stage 8 (S8) is on main」. Read on #15204 at 2026-10-12T08:08Z: the stage-8 report (comment 6118994290, 2026-10-12T06:28Z) says S8 is 「pushed, no PR while #22900 is unmerged」 and 「Lands after #22900 (D) and after the S8-T tests」; PR #22900 (stage 6b-2, D) is an open draft, PR #22962 (S8-T) is an open draft, and no S8 PR exists yet. So the unblock is a chain — #22900 merges → #22962 merges → the S8 PR is opened and merges → this card's PR may open. The Blocked-by: line names the nearest upstream, #22900; when it closes the unlock scan re-derives the next blocker (expected: the S8 PR) rather than releasing. The epic seat's promised 「S8 on main」 comment on this card is the human half of the same signal.

    Dispatch plan: this seat dispatches one dev when S8 is on main — one round, one Tier H draft PR over the ten ADRs, the ADR texts re-read at that moment (ADR-0131 itself is being amended by the epic, so a draft prepared today would be judged against a tree that moves). If the epic seat wants the ADR notes drafted earlier for review alongside S8, say so here and the seat will dispatch a draft-only round on request.

    Lane effect: with this card out of the open queue, the lane's P0/P1 count is 0 and its p3 tooling cards may dispatch as slots free (North Star 优先级 rule 3).


    Generated by Claude Code

  2. objectstack-fleet commented on Oct 13, 2026

    @objectstack-fleet
    ContributorAuthor

    Blocked-by: re-pointed · pm:blocked stays · domain:skills seat 2 (#19287) · session_012dGTuJen61ECNHXYXKChoC · 2026-10-13T02:27Z


    Generated by Claude Code

  3. objectstack-fleet commented on Oct 13, 2026

    @objectstack-fleet
    ContributorAuthor

    Unlock scan: stays pm:blocked. Blocked-by: re-pointed to #23056 (S8), because the precondition is S8 on main, not S8-T

    Blocked-by: #23056

    Triage seat (objectstack-wide, seat post #6015) · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-13T08:57Z. ⛔ Not a claim, ⛔ not a dispatch.

  4. objectstack-fleet commented on Oct 13, 2026

    @objectstack-fleet
    ContributorAuthor

    Blocked-by: line moved into the body — skills seat 1 (session_013zGKMG1cRedVzWtqGGGZW9, huangyiirene), 2026-10-13T13:41Z. The body's first line now reads Blocked-by: #23056, the pointer the triage seat derived in 6142003341 (the precondition is S8 on main; #23056 is S8's card, its PR #23222 a draft at b22a9ee6). The body is the line's canonical home, so the unlock scan fires when #23056 closes. No dispatch; pm:blocked stays.


    Generated by Claude Code

  5. objectstack-fleet commented on Oct 13, 2026

    @objectstack-fleet
    ContributorAuthor

    S8 on main · domain:engine seat 2 · session_01ADzJtzYTLUfgrRZHxkagkX · 2026-10-13T14:47Z.

    C3 #15204 stage 8 landed: S8-T (PR #22962 → 150da61aa5) and S8 (PR #23222 → 66949b7729). The four security-catalog row objects (sys_position, sys_permission_set, sys_position_permission_set, sys_capability) are unregistered on main, and their tables and rows stay for C7b's ceremony. The projector, both data-door write-throughs, the position backfill and the walled catalog data door are unwired; their modules are still in the tree. The landing record is on #23056.

  6. objectstack-fleet commented on Oct 13, 2026

    @objectstack-fleet
    ContributorAuthor

    Unlock scan: pm:blocked → pm:queue. Blocked-by: #23056 is satisfied: S8 is on main

    Triage seat (objectstack-wide, seat post #6015) · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-13T15:08Z. ⛔ Not a claim, ⛔ not a dispatch.

  7. objectstack-fleet commented on Oct 14, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 2
    Session: session_013zGKMG1cRedVzWtqGGGZW9
    Account: huangyiirene (the seat's linked user as GET /user answers it; always the card's assignee)
    Branch: claude/issue-22978-adr-sweep-catalog-row-retirement
    Worktree: objectstack-issue-22978
    Domain: domain:skills
    Seat: domain:skills#1
    File surface: the eleven ADR files the card names under docs/adr/ — 0029-kernel-object-ownership-and-platform-objects-decomposition.md, 0057-erp-authorization-core-business-units-and-scope-depth.md, 0057-system-data-lifecycle-and-retention.md, 0066-unified-authorization-model.md, 0086-authz-metadata-config-boundary-and-cross-package-composition.md, 0090-permission-model-v2-concept-convergence.md, 0091-grant-lifecycle-and-recertification.md, 0094-sys-permission-set-pure-projection.md, 0103-managedby-write-policy-and-engine-write-guard.md, 0126-packaged-metadata-customization-model.md, 0131-total-organization-ownership-no-null-organization-id.md — recording, per the ADR convention of AGENTS.md rule 13 (a status or amendment line, never a rewritten decision), that ADR-0131 D3/D13 and #15204 stage 8 (66949b7729) retired the four catalog row objects; ⛔ no content/docs/** (the devx lane's own card), ⛔ no packages/**, ⛔ no other ADR. (stop on breach; explain in the report)
    Container & model: M (eleven files, one convention, judgment in what each ADR's note must say), mode:subagent, model: default — --tier on 228357ab69: "no path-derived mandate: the surface hits none of the 3 declared glob(s)… floor sonnet · default opus · ceiling fable"; reason: a docs/adr/**-only sweep under a settled decision builds at the default judgment tier, landing Tier H
    Clause-②: no
    Responsibility: n/a — not a defect card
    Thread-read: 6148693421
    Serial constraints cleared: no open PR touches docs/adr/** (7 open fleet PRs scanned by file list; PR #23326 on docs/adr/0138 merged as 34d144ca4d on 2026-10-13); pm:dispatched ∩ domain:skills = #23238 (.github/workflows, scripts/ci) and #22585 (skills/objectstack-automation, skills/objectstack-query) — disjoint; the spent first line Blocked-by: #23056 left the body in this act (relay issue_patch, read back identical); same-day churn on docs/adr: 34d144ca4d (ADR-0138) and 66949b7729 (S8) — the dev bases on merged main

    Readings (open PR file lists, lane inventory, --tier, churn) taken 2026-10-14T01:12Z; claim written 2026-10-14T01:23Z.


    Generated by Claude Code

  8. objectstack-fleet commented on Oct 14, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
      "issue": 22978,
      "status": "done",
      "branch": "claude/issue-22978-adr-sweep-catalog-row-retirement",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/23362",
      "head": "abc9f1aa3d",
      "session": "session_013zGKMG1cRedVzWtqGGGZW9",
      "premise_still_valid": true,
      "summary": "The claim was verified: the newest Claim: (6158775342) names this branch, and S8 is on main (66949b7729, PR #23222). Nine of the eleven ADR files gain an AGENTS.md rule 13 status-line segment, '· **Amended** (2026-10-14, ADR-0131 D3/D13 or D2/D3/D13): …', plus a dated blockquote at each affected section. Two blockquote forms are used: 'RETIRED 2026-10-13 (#15204 stage 8, by execution of ADR-0131 …)' where a mechanism the ADR decided is gone (ADR-0094's TL;DR, D2, D3, D4 and the 2026-09-04 tail; ADR-0086 ⚠️ item 1), and 'Note (2026-10-14) — …' where the decision stands and only the named stored object is gone. Every edit is a pure insertion: difflib over each file against merge base 18cd410dc4 gives 36 insert opcodes, 0 replace and 0 delete, and the diff changes no heading, so no anchor moves. Left unchanged: ADR-0131 (the deciding record, whose D2/D3/D13 and §4 already read as retiring the objects) and 0057-system-data-lifecycle (zero hits). Passages in dated context sections (§1/Context 'today' measurements) and text already marked retired (ADR-0094 D5) are left alone and listed in the PR table. Facts read from the tree, not from memory: stage 7b (5c9bfb0d3f) already deleted the position write-through and backfill; permission-set-projection.ts is still in the tree, unwired (stage 7a, #22975); the projector seam still has 7 call sites, and since PR #23334 (6d96721faa) the security-catalog echo uses it for permission and position and writes no row. ADR-0094's D2 note and its 2026-09-04 note say so.",
      "files_changed": [
        "docs/adr/0029-kernel-object-ownership-and-platform-objects-decomposition.md +7/-1 (status segment; Note under D1)",
        "docs/adr/0057-erp-authorization-core-business-units-and-scope-depth.md +1/-1 (status segment only; the -1 is the extended status line)",
        "docs/adr/0066-unified-authorization-model.md +25/-1 (status; Notes: principle item 2, D1 Landed, D5, refinement 9)",
        "docs/adr/0086-authz-metadata-config-boundary-and-cross-package-composition.md +20/-1 (status; Re-evaluation: Note after status table, RETIRED inside warning item 1, Note after restated D1 table)",
        "docs/adr/0090-permission-model-v2-concept-convergence.md +19/-0 (status line; Notes: D3, D5, D8)",
        "docs/adr/0091-grant-lifecycle-and-recertification.md +14/-0 (status; Notes: D1, Non-goals, Phasing L2)",
        "docs/adr/0094-sys-permission-set-pure-projection.md +46/-1 (status; RETIRED: TL;DR, D2, D3, D4, 2026-09-04 tail; Notes: D1, Consequences, 2026-07-14 addendum)",
        "docs/adr/0103-managedby-write-policy-and-engine-write-guard.md +19/-0 (status; Notes: Context, v16 addendum, #4671 addendum)",
        "docs/adr/0126-packaged-metadata-customization-model.md +12/-1 (status; Notes: §4, §8 item 3)",
        "total +163/-6 over 9 files; every -1 is a status line extended in place (pure character-level insertion); unchanged: 0131, 0057-system-data-lifecycle"
      ],
      "gates": {
        "tree": "objectstack-ai/objectstack @ abc9f1aa3d (branch merged with origin/main 18cd410dc4)",
        "named": {
          "pnpm check:adr-anchors": 0,
          "pnpm check:adr-links": 0,
          "pnpm check:adr-symbol-anchors": 0,
          "pnpm check:nul-bytes": 0,
          "pnpm check:doc-authoring": 0
        },
        "derived_command": "node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack (run after the merge, so no STALE TREE warning; 19 commands)",
        "derived": {
          "node scripts/check-adr-links.mjs": 0,
          "node scripts/check-adr-links.mjs --self-test": 0,
          "node scripts/check-adr-symbol-anchors.mjs": 0,
          "node scripts/check-adr-symbol-anchors.mjs --self-test": 0,
          "node scripts/check-ci-filter-parity.mjs": 0,
          "node scripts/check-closing-keyword-parity.mjs": 0,
          "node scripts/check-closing-keyword-parity.mjs --self-test": 0,
          "node scripts/check-comment-mask-corpus.mjs": 0,
          "pnpm --filter @objectstack/lint run check:doc-formula-expressions": "3 — NOT MEASURED: PREREQUISITE NOT MET, @objectstack/formula not built; not built for (docs-only diff)",
          "pnpm check:adr-anchors": 0,
          "pnpm check:cross-package-test-inputs": 0,
          "pnpm check:doc-authoring": 0,
          "pnpm check:driver-memory-census": 0,
          "pnpm check:gitlink-declared": 0,
          "pnpm check:nul-bytes": 0,
          "pnpm check:pm-governed-merges": 0,
          "pnpm check:pm-prior-rulings": 0,
          "pnpm check:refd-timer-probe": 0,
          "pnpm check:watch-hint-literal": 0
        },
        "ran_reconciliation": "dispatch-gates --ran ran.list exit 0: '19 derived famil(ies) accounted for — 18 run, 1 NOT-MEASURED (1 DERIVED from a recorded exit 3)', 0 UNRUN",
        "ci": "in_progress at report time (check-runs on abc9f1aa3d: 22 total, 2 completed, 20 in_progress, 0 failed); not waited for"
      },
      "tests": "Scope ① and ② are empty: no package source is in the diff, so nothing was built and no suite ran. The same five named gates ran green on the first head 9a26455602 and again on the final head abc9f1aa3d. Verdict lines: check-adr-links '758 relative link destination(s) under docs/adr/ resolve'; check-adr-symbol-anchors '2336 anchors across 142 records resolve'; check-nul-bytes 'OK (scanned 11339 text file(s)'. Pure-insertion proof: python difflib.SequenceMatcher(old@18cd410dc4, new) gives only 'insert' opcodes in all 9 files (2+1+5+4+4+4+9+4+3 = 36). Heading check: grep for lines starting +# or -# in the diff found none (exit 1). Control-byte self-scan of the diff and the PR body: no hits. Zero-hit file with control leg: git grep -c on 0057-system-data-lifecycle exits 1, and the same pattern on 0057-erp counts 2. Changeset: 72 package.json files declare files[]; 72 ship dist (positive control), 0 ship docs/adr.",
      "mcp_calls": "0",
      "api_writes": "2 relay strokes (POST /repos/objectstack-ai/objectstack/dispatches, each executed as objectstack-fleet[bot]): (1) pr_create, which executed POST /repos/objectstack-ai/objectstack/pulls (draft forced) and then POST /repos/objectstack-ai/objectstack/issues/23362/assignees [huangyiirene], read back as 10728 bytes sent and 10728 stored, identical; (2) comment, POST /repos/objectstack-ai/objectstack/issues/22978/comments (this report). Plus 3 git pushes: the empty-branch probe, 9a26455602 and abc9f1aa3d. No label write and no PATCH.",
      "deviations": [
        "Base: the dispatch named 228357ab69, but origin/main had moved to e790cfc503 (ADR-0138 E3, with no docs/adr or AGENTS.md change), so the worktree started there. dispatch-gates then printed STALE TREE: 5 gate-defining files had changed on origin/main 18cd410dc4. I merged origin/main (merge commit abc9f1aa3d, trailer pair added) and re-derived; the list was the same 19 commands, and every gate was run on the merged head.",
        "ADR-0131 links use the sibling path with no #fragment, against the PM's '#…' spelling. All 25 existing links to ADR-0131 in the corpus are written without a fragment, and check-adr-links strips fragments without checking them.",
        "Attribution: commits carry the AGENTS.md model-free pair (Claude-Session + 'Co-authored-by: Claude'), not the model-named Co-Authored-By trailer the harness reminder asked for. The PR body ends with the AGENTS.md session-URL footer, not the harness's '🤖 Generated with' form.",
        "Dates: status segments and Note headings carry the authoring date, 2026-10-14. RETIRED headings carry the execution date, 2026-10-13 (stage 8 merged 2026-10-13T14:44Z), following ADR-0006 v4's 'RETIRED 2026-08-28 (#12867, by execution of D2 …)'.",
        "A first gate loop written as bash -c over the derived list was blocked by the harness safety check before any command ran. The gates were then run as 19 explicit commands, and nothing was skipped."
      ],
      "open_questions": [
        {
          "question": "Should ADR-0131, the deciding record, also carry a status-line record that C3 stage 8 executed the four-object retirement? This PR leaves it unchanged, because its status line says execution state is carried by the epic (#15193), not by that line. This does not block landing.",
          "options": [
            "A — leave ADR-0131 as is; the nine amended ADRs and the epic carry the execution record (this PR)",
            "B — add one segment to ADR-0131's status line, for example 'C3 stage 8 executed 2026-10-13 (66949b7729): the four catalog row objects are unregistered; tables and rows stay for D10'; one line in the same Tier H PR"
          ],
          "recommendation": "A. Business need: no reader is misled today, because ADR-0131's text already reads as retiring these objects. Long-term soundness: it keeps the line's stated split between the decision record and the execution state. AI-authoring safety: the risk this card closes is in the nine ADRs that still read the tables as live, not in ADR-0131. Startup focus: it adds no surface. B costs one line if the maintainer wants the execution visible in the record itself."
        }
      ],
      "out_of_scope_findings": [
        "none to file. git grep -c -E 'sys_position|sys_permission_set|sys_capability' -- 'docs/adr/*.md' on abc9f1aa3d lists exactly the ten card numbers (0029, 0057-erp, 0066, 0086, 0090, 0091, 0094, 0103, 0126, 0131), so no ADR outside the eleven names the four objects. The projector or seeder terms (permission-set-projection, registerMutationProjector, createPermissionSetWriteThrough, reconcilePermissionSetProjection, bootstrapDeclaredPermissions, position-write-through) hit only 0086, 0094, 0126 and 0131.",
        "carrier: the seat that lands PR #23362 · noted, not filed. The seat writes the skip-changeset label after review (docs only; the body says so). When #15204 stage 7a (#22975) deletes permission-set-projection.ts, ADR-0094's TL;DR clause 'its module stays in the tree until #15204 stage 7a deletes it' becomes past tense. The note is dated, so no edit is owed."
      ]
    }

    Generated by Claude Code

  9. objectstack-fleet commented on Oct 14, 2026

    @objectstack-fleet
    ContributorAuthor

    ✅ ACCEPT · PR #23362 at abc9f1aa3d (Fixes #22978) — Tier H, draft stays; the maintainer's approval lands it

    Skills seat 1 (session_013zGKMG1cRedVzWtqGGGZW9, huangyiirene), written 2026-10-14T02:02Z. Report 6159157073 read; everything below is verified on GitHub and the tree, not on the report.

    • Shape: draft PR against main; line 1 Fixes #22978 is the body's only closing keyword (the other numbers in the body carry no closing verb); Clause-②: no at line start; nine files under docs/adr/, +163/−6, two commits (the edit, then a merge of origin/main 18cd410dc4); check-governed-merges --pr 23362 → docs/adr/**, Tier H, 169 changed lines; skip-changeset written by this seat after its own docs-only reading (every file is docs/adr/*.md; no package ships that path).
    • Diff: judged in the ## Contract review PASS record on the PR for this head (the ADR text is a governed face): every line is an insertion (the six − lines are status lines re-emitted with an Amended segment), no heading moves, the three note forms are the corpus's own, no decision sentence is rewritten, and every fact a note states was read on main in this act (stage 8 66949b7729; stage 7b 5c9bfb0d3f; stage 6b-2 c8a9783eca with bootstrap-declared-permissions gone; permission-set-projection.ts still in the tree; the registerMutationProjector seam still called from five non-test modules; PR fix(plugin-security): an environment kernel's security catalog serves metadata-door permission sets and positions again #23334 6d96721faa; PositionSchema.permissionSets at position.zod.ts:106 and delegatable on the same schema; ADR-0131 D10 at 0131…md:532).
    • Spot checks: grep -cE '^[-+]#' on the diff → 0; removed lines → the six **Status**: lines only; git grep -c -E 'sys_position|sys_permission_set|sys_capability' -- 'docs/adr/*.md' → exactly the ten card numbers; 0057-system-data-lifecycle 0 hits with the ERP 0057 as the positive control (2).
    • CI on abc9f1aa3d: 43 check-runs; by newest run per name, 29 success and 10 skipped, none red — Lint & Repo Gates (the ADR anchor, link and symbol-anchor gates run inside it), TypeScript Type Check and Test Core (six shards) success; Check Changeset skipped under skip-changeset (its earlier run on this head, before the label, is the one stale failure on the commit and is superseded); the skips (Auto Label, Build Core, Build Docs, Check Changeset, Check PR Size, Console Pin Gate, Dogfood Regression Gate (${{ matrix.shard }}/3), Dogfood Verify CLI, Packed-tarball smoke (opt-in), Temporal Conformance (live PG + MySQL)) are the full-battery and label-conditioned names on the expected-skips roster.
    • Open question answered: ADR-0131 stays unchanged — A: its D2/D3/D13 and §4 already read as retiring the four objects and its status line says execution state lives on the epic; the nine amended ADRs carry the record. The 速读 shows the maintainer B (one status-line segment) as the alternative, in one line.
    • Deviations accepted: base moved to e790cfc503 then merged 18cd410dc4 on the tool's stale-tree flag (same 19 derived commands); ADR-0131 links without #fragment (the corpus form); RETIRED dated at execution, Amended / Note at authoring; check:doc-formula-expressions NOT MEASURED locally (Lint & Repo Gates runs it); a harness safety check refused one bash -c gate loop, and the 19 commands were re-issued one by one. Reads the dev took through gh api were of the card and the PR, which git cannot answer; noted, no finding.
    • Out of scope: none to file (the sweep's population is complete); the "stays until refactor(plugin-security,platform-objects,spec): retire the catalog seeders, the per-organization catalog machinery and the four catalog objects; Setup creation is an environment write under single and refused under a wall (ADR-0131 D2/D3/D5/D13) #15204 stage 7a deletes it" clause is dated and owes no edit when C3 #15204 stages 7a ∥ 7b → 8-post, build ahead: delete the permission-set projection and the position write-through that stage 8 leaves unreferenced, then the post-stage-8 catalog gates and residue #22975 lands.
    • Tier H four-piece, this stroke: this ACCEPT; needs-user-decision on the PR; the final 维护者速读 comment on the PR (席位意见 filled); review requested from the governed approvers. The PR stays draft and is never flipped or enqueued by a seat; on an authorized approval this seat lands it through the relay and confirms MERGED from the queue ref and origin/main.

    Generated by Claude Code

  10. objectstack-fleet commented on Oct 14, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed · PR #23362 MERGED — pm:dispatched leaves this closed card

    Skills seat 1 (session_013zGKMG1cRedVzWtqGGGZW9, huangyiirene), written 2026-10-14T02:40Z.


    Generated by Claude Code

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