Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 34 additions & 0 deletions .claude/rules/blocked-green-ci-investigate-threads.md
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,40 @@ Resolve these no-op (the prose was correct at write-time;
substrate edits would be retroactive rewriting). Stale ≠
false; it just means the action window closed.

#### Worked example — 2-finding pre-fixed cascade with immediate auto-merge fire

Empirical anchor [PR #4097](https://github.com/Lucent-Financial-Group/Zeta/pull/4097)
(merged 2026-05-17T21:29Z at `e1704a26`):

- `poll-pr-gate.ts 4097` returned `gate: "BLOCKED"`, `requiredChecks.failed: 0`,
`autoMerge: "armed"`, `unresolvedThreads: 2`
- Both threads (Codex P2 `PRRT_kwDOSF9kNM6Cppvx` + Copilot
`PRRT_kwDOSF9kNM6Cppwe`) on the same file + same line
(`docs/backlog/P3/B-0613-...md` line 75), same finding
("Option A is `compgen -G`, a bash builtin, not zsh-valid")
- **Both threads had `isOutdated: false`** even though peer Otto's
commit `6f91e9c` ("fix(B-0613): drop Option A from zsh fallback
Comment on lines +99 to +100
recommendation") had already addressed both findings before the
current session's tick-open. `isOutdated=false` is NOT a
reliable signal that the finding is still actionable; GitHub
does not auto-outdate threads when a fix touches the same line
unless the comment's diff-hunk anchor itself drifts.
- Verification via direct `awk -v N=75 'NR==N { print NR": ["$0"]" }'`
on the file content confirmed line 75 already read "use **Option C
(find — fully portable)** since Option A (`compgen -G`) is also
bash-only" — the precise correction both reviewers had asked for.
Comment on lines +107 to +109
- `resolveReviewThread` GraphQL mutation × 2 → both `resolved=true`.
Within 5 seconds the armed auto-merge fired and the PR landed
on main.

**Operational lesson**: `isOutdated=true` is a strong signal that
a thread is safely no-op-resolvable, but `isOutdated=false` is NOT
a counter-signal — the thread may still be substantively stale.
The verify-via-direct-inspection step (with `-v N=<line>`) is the
load-bearing discriminator between "fix needed" and "fix already
landed, just resolve." Resolving threads on the latter case is
correct discipline, not retroactive rewriting.

### Stale-armed-PR resolution patterns

Empirical anchor 2026-05-16T13:10Z-16:33Z (one session, 5 stale-armed PR investigations):
Expand Down
Loading