Conversation
…py of the tree `make gate` went red on a clean branch with 1107 "NEW unprovable claims", every one of them pointing at an innocent roadmap row. The claims were real rows — read twice. `.claude/worktrees/` is agy's throwaway lane workspace: a full checkout, roadmap.yaml included, created per review lane and left behind when a lane dies. It is in `.git/info/exclude`, so nothing under it can ever reach the tree CI gates. But this guard's universe deliberately includes UNTRACKED files — that is the hole it was written to close (#2512, an untracked file is exactly how a new uncited claim arrives) — so it walked straight into the lane checkouts and counted every entry twice. The arithmetic says it plainly: completed claims 2266 before, 1133 after. Exactly half. Universe 46 roadmap files before, 23 after. NEW 1107 -> 0. check_complexity_ratchet.sh:149 already prunes `*/.claude/worktrees/*`. That lesson was paid for once and never propagated; this guard is the second place it was needed. The prune is applied in `is_candidate` rather than only in the walk, so the `git ls-files` half of the universe is covered by the same rule, and the walk skips descending into what was measured as 66 registered lane worktrees. This does not widen any hole: a path under `.claude/worktrees/` is in `.git/info/exclude` and cannot be committed, so it can never be part of the tree this guard gates. Case-table row ships with the fix: a fixture roadmap planted at `.claude/worktrees/lane-deadbeef/docs/roadmaps/roadmap.yaml` with a completed-and-uncited entry must contribute 0 records. It reads `want 0 got 1` without the prune. Pmat-Ticket: PMAT-3226 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
noahgift
enabled auto-merge
September 14, 2026 14:11
|
§13.11 rung 1 — quorum shadow verdict Shadow mode: this records a verdict and merges nothing. A refusal |
Contributor
Author
|
Superseded by #3295, which carries this change unmodified along with eight other Not abandoned and not rejected: the commits are merged into Why: a successful |
noahgift
added a commit
that referenced
this pull request
Sep 15, 2026
… semantically Nine branches each inserted their roadmap entry at the correct slot RELATIVE TO MAIN AT THE TIME. main then gained PMAT-3228 and PMAT-3229, so merging #3272 placed PMAT-3226 after them by textual context: 3222, 3228, 3229, 3226. check_roadmap_sorted.sh is RED on the merged tree and GREEN on all nine branches individually. This is the class of defect a batch surfaces and per-PR CI cannot: each input is sorted, the union is not. Pmat-Ticket: PMAT-3231
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
make gatewent red on a clean branch with 1107 "NEW unprovable claims", every one pointing at an innocent roadmap row. The claims were real rows — read twice..claude/worktrees/is agy's throwaway lane workspace: a full checkout,roadmap.yamlincluded, created per review lane and left behind when a lane dies. It is in.git/info/exclude, so nothing under it can ever reach the tree CI gates. But this guard's universe deliberately includes untracked files — that is the hole it was written to close (#2512: an untracked file is exactly how a new uncited claim arrives) — so it walked straight into the lane checkouts and counted every entry twice.The arithmetic says it plainly:
Exactly half. The lane worktree was duplicating the entire universe.
Why it is a one-line class of fix that was already known
scripts/check_complexity_ratchet.sh:149already prunes*/.claude/worktrees/*. That lesson was paid for once and never propagated; this guard is the second place it was needed. Of the scripts that mention lane scratch at all, only one actually excluded it — the rest name it in prose.The prune is applied in
is_candidate()rather than only in theos.walk, so thegit ls-fileshalf of the universe is covered by the same rule; the walk additionally skips descending into what was measured here as 66 registered lane worktrees.This widens no hole
A path under
.claude/worktrees/is in.git/info/excludeand cannot be committed, so it can never be part of the tree this guard gates. Excluding scratch from a guard over the tree is not a weakening — scanning it was the defect, because a guard that reds on files CI cannot see is a guard nobody can act on.RED first
A fixture roadmap planted at
.claude/worktrees/lane-deadbeef/docs/roadmaps/roadmap.yamlwith a completed-and-uncited entry must contribute 0 records. Without the prune the guard's own case table reads:The row ships with the fix, in the guard's existing
case table: the universeblock.Found by
Verifying #3271 (APR-RELEASE-001 §5 P0·Instrument). A
make gaterun there failed on four checks; three were pre-existing or time-dependent and one was mine. A second gate run after fixing mine surfaced this one, which the first run had not reached — the review quorum I had dispatched in between left the lane checkout that the guard then walked into.Separately measured and not acted on here: 66 registered worktrees under
.claude/worktrees, 1 prunable, 0 with a missing directory. They are live directories that may belong to other sessions, so pruning them is not this PR's business.no-close: this is a guard-universe defect found while verifying #3271; it has no issue of its own and arrival already outruns closure 2:1, so it files nothing new.
ont-delta: none — the §11.1 delta for the guard surface is a
codecontract over the universe predicate, and it waits on ONT-1 (pv census), epic #3269.🤖 Generated with Claude Code