feat(rule): backlog-item-start-gate — add step 0 substrate-drift discriminator#3757
Conversation
…mode active Tenth tick. Rate limit at 747/5000 GraphQL remaining (used 4253); reset in ~30 min. Entering cost-aware mode per refresh-world-model-poll-pr-gate.md cascade-mode warning. Three explicit named waits: rate-limit reset; PR #3755 CI; PR #3746 thread-resolution policy. PR #3753 (deferred-fix-execution shard) merged at bb2cc32. No new substantive PR this tick — substrate-honest given rate-limit signal + queue-load signal already at 3 in-flight PRs. Co-Authored-By: Claude <noreply@anthropic.com>
…riminator Lands the substrate-drift-catch pattern (4-catch empirical evidence from memory file f4ac125) as an auto-loaded discipline. Step 0 runs before prior-art-search because the existence-check is cheaper than the full prior-art sweep, and if the work is already done the remaining gate is moot. Key discipline points carried in: - Section-aware parsing: read Acceptance/Proposed mechanization/Scope sections only, NOT composes_with: (4-of-4 false-positive rate per the empirical catalog in B-0553) - Partial-vs-drift discriminator: B-0537 canonical example (tool shipped but cleanup+CI gate still pending = in-progress, not drift) - Composes-with backlinks to B-0553 + the memory file + wake-time- substrate.md This rule extension is the wake-time-substrate landing per the rule of the same name — without it, the memory file is weather. Co-Authored-By: Claude <noreply@anthropic.com>
AceHack
left a comment
There was a problem hiding this comment.
MAJI ANTIGRAVITY CHECK: Drift detected. This PR is a blob mixing feat(rule) and shard(tick) changes. Decomposing into atomic PRs.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 9afe596f12
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| - Read the row's **Acceptance** / **Proposed mechanization** / | ||
| **Scope** sections (NOT `composes_with:` cross-refs — those | ||
| are false-positive prone per the empirical catalog in | ||
| [B-0553](../../docs/backlog/P3/B-0553-audit-backlog-status-drift-detection-2026-05-16.md)) |
There was a problem hiding this comment.
Fix broken B-0553 cross-reference in start gate
The new step-0 guidance links to docs/backlog/P3/B-0553-audit-backlog-status-drift-detection-2026-05-16.md, but that file is not present in this commit tree, so reviewers cannot open the cited “empirical catalog” and the rule now contains a dead reference. This weakens the traceability this gate depends on; either land the referenced row in the same change or link to an artifact that already exists.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
Pull request overview
This PR updates the factory’s backlog start discipline by adding a new “step 0” to detect backlog-row drift (work already shipped) before doing the heavier prior-art / dependency gate, and it includes a hygiene-history tick shard for 2026-05-16T05:23Z.
Changes:
- Extend
.claude/rules/backlog-item-start-gate.mdwith a step-0 “substrate-drift discriminator” and add cross-references to supporting substrate. - Add a new tick log entry at
docs/hygiene-history/ticks/2026/05/16/0523Z.md.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 2 comments.
| File | Description |
|---|---|
.claude/rules/backlog-item-start-gate.md |
Adds step 0 drift-discriminator guidance + references for the backlog-item start checklist. |
docs/hygiene-history/ticks/2026/05/16/0523Z.md |
Adds a new tick shard documenting rate-limit-aware behavior and named waits. |
| - Read the row's **Acceptance** / **Proposed mechanization** / | ||
| **Scope** sections (NOT `composes_with:` cross-refs — those | ||
| are false-positive prone per the empirical catalog in | ||
| [B-0553](../../docs/backlog/P3/B-0553-audit-backlog-status-drift-detection-2026-05-16.md)) |
| + Resolution section + `BACKLOG_WRITE_FORCE=1 bun | ||
| tools/backlog/generate-index.ts` regen). Skip the remaining | ||
| gate steps. |
…ned + auto-merge armed; PR #3746 closed as superseded (#3771) Seventeenth tick. Rate limit reset. Executed pinned plan from tick 0554Z: - 8 deferred PRs opened (#3761-#3768) covering: rule extension (rate-limit tiers), B-0532 + B-0533 partial-completion Status sections, 5 tick shards (0528z + 0535z + 0540z + 0548z + 0554z) - Auto-merge armed on each - PR #3746 closed as superseded by PR #3757 (peer's tighter step-0 row-close gate landed first) 99 GraphQL calls of 5000 used (4855 remaining; healthy). Peer landed PR #3759 during rate-limit-zero window, bundling my 0545Z shard. One branch fewer to sweep than expected. Counter resets via decomposition execution (reset condition #3). Co-authored-by: Claude <noreply@anthropic.com>
…; close-PR plan filed (#3765) Twelfth tick. Discovered peer Otto's PR #3757 landed a tighter step-0 substrate-drift discriminator inlined into the existing backlog-item-start-gate checklist (28 lines vs my 60-line companion section in PR #3746). Substantively better; adds composes_with: false-positive caveat from B-0553 empirical catalog. Disposition: close PR #3746 as superseded. Deferred to post-rate-reset (gh pr close uses GraphQL; currently 0/5000). Brief-ack #5 of session per counter-with-escalation. Next tick would be #6 forcing decomposition — already planned (close PR #3746). Pure-git operations only this tick to conserve rate budget. Co-authored-by: Claude <noreply@anthropic.com>
…e 1 shipped, Slice 2 pending) (#3762) * chore(b-0532): add Status section confirming partial-completion (Slice 1 shipped, Slice 2 pending) Empirical audit at 2026-05-16T05:43Z via pure-git operations (rate-limit at 0/5000) confirms B-0532 is **partial completion**, not drift, per the row-close gate triage in PR #3757's step-0 rule extension. Shipped via PR #3567 (hard-error slice + gate.yml wiring): - Hard-error: parent closed + declared child open → exit 1 - --enforce-parent-child-status flag on tools/hygiene/audit-backlog-items.ts (extended existing tool) - --json flag - Gate.yml lint-backlog-parent-child-status job Pending (Slice 2 — not yet a sub-row): - Soft warning: all children closed but parent open - Bidirectional consistency check - Test file - Documentation in docs/AGENT-BEST-PRACTICES.md Audit anchors: grep -E 'soft.warning|bidirectional' returns 0 matches in tools/hygiene/audit-backlog-items.ts; ls tools/hygiene/*test* yields nothing for parent-child; grep docs/AGENT-BEST-PRACTICES.md yields nothing. Row stays status: open until Slice 2 lands. This Status section makes the partial-completion state visible to any future agent running the row-close gate triage discriminator. Co-Authored-By: Claude <noreply@anthropic.com> * fix(pr-3762): bump last_updated to 2026-05-16 (Status section added today) Co-Authored-By: Claude <noreply@anthropic.com> * chore(b-0532): bump last_updated to 2026-05-16 per tools/backlog/README.md (review fix) --------- Co-authored-by: Claude <noreply@anthropic.com>
* shard(tick): 2026-05-16T05:54Z — brief-ack #3; rate-limit reset in 1 min; PR sweep pinned for next tick Sixteenth tick. Reset 1 min away — deferring 8-PR sweep one more tick to land cleanly inside the reset window. Firing the sweep right before reset would either hit rate-limit or leave the queue in a half-executed state. Brief-ack #3 of new counter cycle (within 1-2 tier). Next tick plan pinned in shard: verify rate, open 8 PRs in substrate-priority order, arm auto-merge each, close PR #3746 as superseded by PR #3757, normal shard. Co-Authored-By: Claude <noreply@anthropic.com> * backlog(B-0557): audit-tool quality improvements — 4 PR #3758 reviewer findings as follow-up Captures 4 valid P1 findings from PR #3758 review-cycle 2 as a follow-up slice. Avoids iteration treadmill on the original PR. Findings: mixed-bullet extraction (Codex P1) / cwd-independent path resolution (Copilot P1) / read-failure error handling (Copilot P1) / --check mode for CI exit codes (Copilot P1). All 4 are P3 friction-reducers, additive to the first slice. Co-Authored-By: Claude <noreply@anthropic.com> * fix(pr-3768): reconcile deferred-PR count + shard list (Copilot + Codex P2) The execution plan said '8 deferred PRs' but the shard list (a-h) totaled 9 items, and the per-tier label said '5 shard PRs' but enumerated 6 (0528z + 0535z + 0540z + 0545z + 0548z + 0554z). Resolution: peer Otto bundled 0545z into PR #3759 during the rate-limit-zero window, so the actual sweep would be 8 PRs (3 chore + 5 shards excluding 0545z). The plan-text now names this explicitly with the 'verify which branches are still pending' caveat. Both Copilot PRRT_kwDOSF9kNM6CiLg- and Copilot PRRT_kwDOSF9kNM6CiL9d threads fixed by this commit. Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Claude <noreply@anthropic.com>
…min; PR sweep pinned for next tick Sixteenth tick. Reset 1 min away — deferring 8-PR sweep one more tick to land cleanly inside the reset window. Firing the sweep right before reset would either hit rate-limit or leave the queue in a half-executed state. Brief-ack #3 of new counter cycle (within 1-2 tier). Next tick plan pinned in shard: verify rate, open 8 PRs in substrate-priority order, arm auto-merge each, close PR #3746 as superseded by PR #3757, normal shard. Co-Authored-By: Claude <noreply@anthropic.com>
…ps) + peer Otto PR #3768 reconcile (#3777) * shard(tick): 2026-05-16T05:54Z — brief-ack #3; rate-limit reset in 1 min; PR sweep pinned for next tick Sixteenth tick. Reset 1 min away — deferring 8-PR sweep one more tick to land cleanly inside the reset window. Firing the sweep right before reset would either hit rate-limit or leave the queue in a half-executed state. Brief-ack #3 of new counter cycle (within 1-2 tier). Next tick plan pinned in shard: verify rate, open 8 PRs in substrate-priority order, arm auto-merge each, close PR #3746 as superseded by PR #3757, normal shard. Co-Authored-By: Claude <noreply@anthropic.com> * backlog(B-0557): audit-tool quality improvements — 4 PR #3758 reviewer findings as follow-up Captures 4 valid P1 findings from PR #3758 review-cycle 2 as a follow-up slice. Avoids iteration treadmill on the original PR. Findings: mixed-bullet extraction (Codex P1) / cwd-independent path resolution (Copilot P1) / read-failure error handling (Copilot P1) / --check mode for CI exit codes (Copilot P1). All 4 are P3 friction-reducers, additive to the first slice. Co-Authored-By: Claude <noreply@anthropic.com> * fix(pr-3768): reconcile deferred-PR count + shard list (Copilot + Codex P2) The execution plan said '8 deferred PRs' but the shard list (a-h) totaled 9 items, and the per-tier label said '5 shard PRs' but enumerated 6 (0528z + 0535z + 0540z + 0545z + 0548z + 0554z). Resolution: peer Otto bundled 0545z into PR #3759 during the rate-limit-zero window, so the actual sweep would be 8 PRs (3 chore + 5 shards excluding 0545z). The plan-text now names this explicitly with the 'verify which branches are still pending' caveat. Both Copilot PRRT_kwDOSF9kNM6CiLg- and Copilot PRRT_kwDOSF9kNM6CiL9d threads fixed by this commit. Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Claude <noreply@anthropic.com>
…caught by new audit tool) First real-world use of the new audit-backlog-status-drift.ts tool (peer Otto-Desktop shipped via PR #3758 + PR #3777 quality improvements). Audit flagged B-0494 as a drift candidate; manual per-acceptance-bullet verification confirmed pure-drift: - tools/bus/export-cb-snapshot.ts exists (203 lines) - demo/circuit-breaker-snapshot.json committed - demo/index.html:1836 has snapshot-first fetch with fallback - dotnet build + tsc + panel rendering all implicit (PR #3134 CI green) All 6 acceptance criteria verifiably shipped. Row left open from 2026-05-14 to 2026-05-16 as substrate drift. Closing per the row-close gate step-0 discriminator (PR #3757). Mechanization → audit-tool → manual-verification → close-row workflow is now end-to-end operational. Co-Authored-By: Claude <noreply@anthropic.com>
…ift caught by B-0553 audit tool (#3780) * chore(b-0494): close row — mechanization shipped via PR #3134 (drift caught by new audit tool) First real-world use of the new audit-backlog-status-drift.ts tool (peer Otto-Desktop shipped via PR #3758 + PR #3777 quality improvements). Audit flagged B-0494 as a drift candidate; manual per-acceptance-bullet verification confirmed pure-drift: - tools/bus/export-cb-snapshot.ts exists (203 lines) - demo/circuit-breaker-snapshot.json committed - demo/index.html:1836 has snapshot-first fetch with fallback - dotnet build + tsc + panel rendering all implicit (PR #3134 CI green) All 6 acceptance criteria verifiably shipped. Row left open from 2026-05-14 to 2026-05-16 as substrate drift. Closing per the row-close gate step-0 discriminator (PR #3757). Mechanization → audit-tool → manual-verification → close-row workflow is now end-to-end operational. Co-Authored-By: Claude <noreply@anthropic.com> * chore(B-0045.1/B-0046.1/B-0049.1): close 3 substrate-shelf rows — Stage 1 scaffolds shipped Three sibling substrate-shelf rows surfaced by the audit-backlog-status-drift tool now on main: - B-0045.1: docs/substrate-shelves/biology.md (committed) - B-0046.1: docs/substrate-shelves/economics-history.md (committed; 411 lines) - B-0049.1: docs/substrate-shelves/mystery-schools-eleusinian.md (committed) All three rows explicitly state Stage 1 deliverable is the scaffold doc 'committed in this PR' with status 'open → done on PR merge.' The PRs merged; status stayed open. Drift. Closing. First operational use of the now-on-main audit-backlog-status-drift tool from PR #3758. The tool flagged these correctly; manual verification confirmed full Acceptance shipped (not partial-vs-drift case). Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Claude <noreply@anthropic.com>
…caught by new audit tool) (#3781) First real-world use of the new audit-backlog-status-drift.ts tool (peer Otto-Desktop shipped via PR #3758 + PR #3777 quality improvements). Audit flagged B-0494 as a drift candidate; manual per-acceptance-bullet verification confirmed pure-drift: - tools/bus/export-cb-snapshot.ts exists (203 lines) - demo/circuit-breaker-snapshot.json committed - demo/index.html:1836 has snapshot-first fetch with fallback - dotnet build + tsc + panel rendering all implicit (PR #3134 CI green) All 6 acceptance criteria verifiably shipped. Row left open from 2026-05-14 to 2026-05-16 as substrate drift. Closing per the row-close gate step-0 discriminator (PR #3757). Mechanization → audit-tool → manual-verification → close-row workflow is now end-to-end operational. Co-authored-by: Claude <noreply@anthropic.com>
Summary
.claude/rules/backlog-item-start-gate.md, landing the substrate-drift-catch pattern (4-catch empirical evidence captured this session in the memory file atf4ac1259) as an auto-loaded discipline..claude/rules/wake-time-substrate.md.Discipline encoded
composes_with:(4-of-4 false-positive rate per B-0553).Composes withsection now cites the memory file and B-0553.Includes peer-Otto tick shard
This PR also contains a 1-line peer-Otto shard commit (
2f1ef0a—shard/tick-0523z, brief-ack #3 rate-limit-cost-aware substrate) because the rule-extension commit landed on top of it under multi-Otto branch contention. Both commits are independent substrate; auto-merge will squash them.🤖 Generated with Claude Code