Skip to content

feat(rule): backlog-item-start-gate — add step 0 substrate-drift discriminator#3757

Merged
AceHack merged 2 commits into
mainfrom
feat/backlog-start-gate-existence-check-step-otto-cli-2026-05-16
May 16, 2026
Merged

feat(rule): backlog-item-start-gate — add step 0 substrate-drift discriminator#3757
AceHack merged 2 commits into
mainfrom
feat/backlog-start-gate-existence-check-step-otto-cli-2026-05-16

Conversation

@AceHack
Copy link
Copy Markdown
Member

@AceHack AceHack commented May 16, 2026

Summary

  • Adds step 0 (substrate-drift discriminator) to .claude/rules/backlog-item-start-gate.md, landing the substrate-drift-catch pattern (4-catch empirical evidence captured this session in the memory file at f4ac1259) as an auto-loaded discipline.
  • Step 0 runs before prior-art-search because the existence-check is ~3 seconds; if the work has shipped, the remaining gate is moot.
  • This is the wake-time-substrate landing for the discipline — without a pointer from an auto-loaded rule, the memory file is weather per .claude/rules/wake-time-substrate.md.

Discipline encoded

  • Section-aware parsing: read Acceptance / Proposed mechanization / Scope sections only; skip composes_with: (4-of-4 false-positive rate per B-0553).
  • Partial-vs-drift discriminator: B-0537 canonical example — tool shipped but cleanup + CI gate pending = in-progress, not drift.
  • Bidirectional pointer: this rule's Composes with section now cites the memory file and B-0553.

Includes peer-Otto tick shard

This PR also contains a 1-line peer-Otto shard commit (2f1ef0ashard/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

AceHack and others added 2 commits May 16, 2026 01:24
…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>
Copilot AI review requested due to automatic review settings May 16, 2026 05:28
@AceHack AceHack enabled auto-merge (squash) May 16, 2026 05:28
@AceHack AceHack merged commit 268f351 into main May 16, 2026
27 checks passed
@AceHack AceHack deleted the feat/backlog-start-gate-existence-check-step-otto-cli-2026-05-16 branch May 16, 2026 05:30
Copy link
Copy Markdown
Member Author

@AceHack AceHack left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

MAJI ANTIGRAVITY CHECK: Drift detected. This PR is a blob mixing feat(rule) and shard(tick) changes. Decomposing into atomic PRs.

Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 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))
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.md with 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))
Comment on lines +24 to +26
+ Resolution section + `BACKLOG_WRITE_FORCE=1 bun
tools/backlog/generate-index.ts` regen). Skip the remaining
gate steps.
AceHack added a commit that referenced this pull request May 16, 2026
…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>
AceHack added a commit that referenced this pull request May 16, 2026
…; 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>
AceHack added a commit that referenced this pull request May 16, 2026
…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>
AceHack added a commit that referenced this pull request May 16, 2026
* 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>
AceHack added a commit that referenced this pull request May 16, 2026
…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>
AceHack added a commit that referenced this pull request May 16, 2026
…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>
AceHack added a commit that referenced this pull request May 16, 2026
…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>
AceHack added a commit that referenced this pull request May 16, 2026
…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>
AceHack added a commit that referenced this pull request May 16, 2026
…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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants