You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Retarget the general-rule ADR-0057 D10 citations to ADR-0124 D1 — a classification pass, not a sed #11501
Filed by the triage seat (session session_01Kktexqp6uVuFMztvvTMf3V, 2026-08-24 daily round) as the named unblocking prerequisite of #9592, per the 2026-08-20 devx-seat analysis on that card (comment of 2026-08-20T15:48Z) and the 2026-08-23 dissent that followed it. Dedup: no open card mentions ADR-0124 or this retarget (control query: 19 open titles mention ADR-).
What
ADR-0124 (landed via #9628) states its own remaining step: the ADR-0057 D10 citations that invoke the general enforcement rule ("the server is the enforcement point; client-side gating is a usability courtesy") retarget to ADR-0124 D1. That retarget was deliberately left out of ADR-0124's own PR and has not landed since — ADR-0057 D10 still appears in ~42 files on origin/main.
The trap (why this is a classification pass)
ADR-0124 is explicit that not everyADR-0057 D10 citation is wrong: sites that cite D10 for what D10 actually decides (Setup-nav capability surfacing, filterAppForUser's requiresService gating, the account app's nav declarations) are correct as written and stay. Only citations invoking the general rule move. A blanket rewrite trades one mis-citation for another — ⛔ no sed.
Re-check commands (premise lines)
git grep -l 'ADR-0057 D10' origin/main | wc -l — currently ~42; if near 0, this card is done or overtaken.
git show origin/main:docs/adr/0124-*.md | head -50 — D1 wording is the retarget target.
Done means
Every remaining ADR-0057 D10 citation in the tree cites D10 for its actual subject (Setup-nav surfacing family), and no citation of the general enforcement rule spells itself ADR-0057 D10. This is #9592's Restart-when: condition.
Note: ADR files themselves are governed surface (docs/adr/**) — this pass edits citing sites, not the ADRs; if any edit does touch docs/adr/**, that PR half stays draft for a human merge.
Claim: devx lane PM seat, session e2eac1a7-8000-5c95-9749-38aec2ace6fc, branch claude/issue-11501-adr-0057-d10-retarget.
⚠️Governed-surface note recorded up front, measured rather than assumed: ADR-0057 is cited in 279 files, of which 21 are under docs/adr/ — and skills/objectstack-data/ carries citations too. Both are governed surface, so the PR stays draft, requests review from os-zhuang, and is never flipped ready, armed, or queued by this seat. That is expected for this card, not a problem with it.
If you are a different session and you see this comment before starting work, this card is taken — pick another.
{
"issue": 11501,
"status": "done",
"branch": "claude/issue-11501-adr-0057-d10-retarget",
"pr": "https://github.com/objectstack-ai/objectstack/pull/11780",
"premise_still_valid": true,
"summary": "Classified all 98 occurrences of `ADR-0057 D10` (42 files) and retargeted 31 of them; 33 live citing sites stay on D10 because D10 IS their subject (the requiresService/Setup-nav capability gate family, which ADR-0124 names as 'correct as written and stay'), and 34 occurrences are records not rewritten (29 in shipped package CHANGELOGs, 5 in ADR-0124 and ADR-0057 themselves, both forbidden by ruling). The card's premise holds on both axes I was asked to falsify: ADR-0124 D1 says exactly what these citations need, and D2 makes its scope general by construction so it cannot be re-narrowed. The PM's 279 was the wrong population unit — it counts any ADR-0057 mention; the real population is 98 occurrences across 42 files, and 'D10' alone is useless as a selector because ADR-0056/0058/0076/0079/0090 all have their own D10 (345 such hits). DECLARED DEVIATION: 4 of the 31 point at ADR-0124 D5, not D1 — their sentences assert what counts as VERIFICATION ('both sides were exercised', 'the forged PUT returns a refusal'), which is D5's exact subject, and sending a method claim to a location decision would be the same loose-citation class this card exists to close. Flagged in the PR body, collapsible in a 4-token edit. The third class the PM asked about DOES exist: 3 citations invoke both (D10's capability gate as vehicle, the general rule as reason) — resolved by the subject test and left on D10, named individually in the PR body for a second opinion.",
"tests": "Gates run on final commit 584cff6b9 (base 5cb62d88b), all under `scripts/pm/os-verify-lock.sh -c`, exit captured before any pipe (`cmd > /tmp/g.out 2>&1; e=$?`), verdicts quoted from each gate's own printed line — lock VERDICT: `command-exit 0 · held the lock 10s · waited 37s`. check:adr-anchors => `OK (52 anchored file(s), every governing ADR still referenced; 123 decision number(s) ...; 27918 citation(s) across 3497 file(s) resolve)`. check:platform-checklist => `OK - 15 areas, 207 items (207 active)`. check:nul-bytes => `OK (scanned 6572 text file(s) ... no raw ASCII control bytes)`. check:doc-authoring => `389 files clean - no bare metadata literals`. check:pm-skill-ratchet => `dogfood-verification/SKILL.md is 155 lines (ceiling 155; headroom 0)` (skill edit is line-neutral). check:pm-governed-prose, check:skill-frame-sync, check:agent-test-spelling => green. Gate set derived with `node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack` (no path args; it read 19 working-tree paths off the merge base and confirmed the repo assertion holds). NON-VACUITY with controls: `ADR-0057 D10` 98 -> 67 (-31, exactly the retargets); `ADR-0124 D1\\b` 1 -> 29 (+28); `ADR-0124 D5` 0 -> 4; diff ledger shows 31 removed `-` lines carrying the old citation and 0 `+` lines re-spelling it. CONTROL `ADR-0057` total 789 -> 756 = -33, i.e. it does NOT close at -31, and the 2 extra are named and required: `\"ADR-0057\"` had to leave the adr-anchors JSON for rule-validator.ts (that file's only 2 ADR-0057 mentions were both D10, so retargeting them left check:adr-anchors' presence assertion pointing at a string no longer in the file - the gate would have gone red), plus one obsolete sentence in the same invariant explaining why the old citation was unresolvable. 28+4=32 citations across 31 sites because RUNNER.md carries both D1 and D5. NO ABLATION was run - nothing here is a new guard, and the non-vacuity question ('did the edit land?') is answered directly by the before/after pins plus the diff ledger. DECLARED NARROWING - no local typecheck/test: this worktree has no node_modules (the gates above are dependency-free node scripts) and installing a monorepo closure to typecheck a comments-only diff is poor use of a shared container. Measured, not assumed: (1) population read from `git diff --name-only` = 8 .ts files, not guessed; (2) 0 changed lines in those files are non-comment lines (every +/- line begins `*`, `//` or `/**`) and `/*` vs `*/` counts are IDENTICAL before and after in all 8, so no comment was opened or closed; (3) a change confined to comment interiors alters no type and no parse structure, so no untouched file's verdict can move. CI runs the full `TypeScript Type Check` job (no paths filter) regardless.",
"open_questions": [],
"out_of_scope_findings": [
"filed as #11781: [finding] the published `objectstack-data` skill cites bare `ADR-0057` three times - a number two unrelated records share (#5992) - in files that ship to codebases with no `docs/adr/` to grep; distinct from #5992's deferred in-repo B-work because the audience is external and cannot resolve it at all. Not filed: the neighbouring `ADR-0057 D1` citation at SKILL.md:651, which I checked and found CORRECT (the ERP record's D1 is 'Scope-depth on object grants', exactly what it cites)."
]
}
Activity
os-steve commentedon Aug 24, 2026
Claim: devx lane PM seat, session
e2eac1a7-8000-5c95-9749-38aec2ace6fc, branchclaude/issue-11501-adr-0057-d10-retarget.ADR-0057is cited in 279 files, of which 21 are underdocs/adr/— andskills/objectstack-data/carries citations too. Both are governed surface, so the PR stays draft, requests review fromos-zhuang, and is never flipped ready, armed, or queued by this seat. That is expected for this card, not a problem with it.If you are a different session and you see this comment before starting work, this card is taken — pick another.
Generated by Claude Code
claude commentedon Aug 24, 2026
{ "issue": 11501, "status": "done", "branch": "claude/issue-11501-adr-0057-d10-retarget", "pr": "https://github.com/objectstack-ai/objectstack/pull/11780", "premise_still_valid": true, "summary": "Classified all 98 occurrences of `ADR-0057 D10` (42 files) and retargeted 31 of them; 33 live citing sites stay on D10 because D10 IS their subject (the requiresService/Setup-nav capability gate family, which ADR-0124 names as 'correct as written and stay'), and 34 occurrences are records not rewritten (29 in shipped package CHANGELOGs, 5 in ADR-0124 and ADR-0057 themselves, both forbidden by ruling). The card's premise holds on both axes I was asked to falsify: ADR-0124 D1 says exactly what these citations need, and D2 makes its scope general by construction so it cannot be re-narrowed. The PM's 279 was the wrong population unit — it counts any ADR-0057 mention; the real population is 98 occurrences across 42 files, and 'D10' alone is useless as a selector because ADR-0056/0058/0076/0079/0090 all have their own D10 (345 such hits). DECLARED DEVIATION: 4 of the 31 point at ADR-0124 D5, not D1 — their sentences assert what counts as VERIFICATION ('both sides were exercised', 'the forged PUT returns a refusal'), which is D5's exact subject, and sending a method claim to a location decision would be the same loose-citation class this card exists to close. Flagged in the PR body, collapsible in a 4-token edit. The third class the PM asked about DOES exist: 3 citations invoke both (D10's capability gate as vehicle, the general rule as reason) — resolved by the subject test and left on D10, named individually in the PR body for a second opinion.", "tests": "Gates run on final commit 584cff6b9 (base 5cb62d88b), all under `scripts/pm/os-verify-lock.sh -c`, exit captured before any pipe (`cmd > /tmp/g.out 2>&1; e=$?`), verdicts quoted from each gate's own printed line — lock VERDICT: `command-exit 0 · held the lock 10s · waited 37s`. check:adr-anchors => `OK (52 anchored file(s), every governing ADR still referenced; 123 decision number(s) ...; 27918 citation(s) across 3497 file(s) resolve)`. check:platform-checklist => `OK - 15 areas, 207 items (207 active)`. check:nul-bytes => `OK (scanned 6572 text file(s) ... no raw ASCII control bytes)`. check:doc-authoring => `389 files clean - no bare metadata literals`. check:pm-skill-ratchet => `dogfood-verification/SKILL.md is 155 lines (ceiling 155; headroom 0)` (skill edit is line-neutral). check:pm-governed-prose, check:skill-frame-sync, check:agent-test-spelling => green. Gate set derived with `node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack` (no path args; it read 19 working-tree paths off the merge base and confirmed the repo assertion holds). NON-VACUITY with controls: `ADR-0057 D10` 98 -> 67 (-31, exactly the retargets); `ADR-0124 D1\\b` 1 -> 29 (+28); `ADR-0124 D5` 0 -> 4; diff ledger shows 31 removed `-` lines carrying the old citation and 0 `+` lines re-spelling it. CONTROL `ADR-0057` total 789 -> 756 = -33, i.e. it does NOT close at -31, and the 2 extra are named and required: `\"ADR-0057\"` had to leave the adr-anchors JSON for rule-validator.ts (that file's only 2 ADR-0057 mentions were both D10, so retargeting them left check:adr-anchors' presence assertion pointing at a string no longer in the file - the gate would have gone red), plus one obsolete sentence in the same invariant explaining why the old citation was unresolvable. 28+4=32 citations across 31 sites because RUNNER.md carries both D1 and D5. NO ABLATION was run - nothing here is a new guard, and the non-vacuity question ('did the edit land?') is answered directly by the before/after pins plus the diff ledger. DECLARED NARROWING - no local typecheck/test: this worktree has no node_modules (the gates above are dependency-free node scripts) and installing a monorepo closure to typecheck a comments-only diff is poor use of a shared container. Measured, not assumed: (1) population read from `git diff --name-only` = 8 .ts files, not guessed; (2) 0 changed lines in those files are non-comment lines (every +/- line begins `*`, `//` or `/**`) and `/*` vs `*/` counts are IDENTICAL before and after in all 8, so no comment was opened or closed; (3) a change confined to comment interiors alters no type and no parse structure, so no untouched file's verdict can move. CI runs the full `TypeScript Type Check` job (no paths filter) regardless.", "open_questions": [], "out_of_scope_findings": [ "filed as #11781: [finding] the published `objectstack-data` skill cites bare `ADR-0057` three times - a number two unrelated records share (#5992) - in files that ship to codebases with no `docs/adr/` to grep; distinct from #5992's deferred in-repo B-work because the audience is external and cannot resolve it at all. Not filed: the neighbouring `ADR-0057 D1` citation at SKILL.md:651, which I checked and found CORRECT (the ERP record's D1 is 'Scope-depth on object grants', exactly what it cites)." ] }Generated by Claude Code