Commit 301bf26
feat(pm): two report-only patrol predicates for the pm:blocking machinery (#9945)
H14 — `pm:blocking` cache coherence, both directions, off the `Blocked-by:`
reverse index the unscoped pass already has the bodies for. `pm:blocking` is a
triage-sweep-derived cache, never hand-applied, and the lane selection order
ranks it second only to `priority:p0`; a cache with a ranking consumer and no
coherence check drifts two ways. A card carrying the label that nothing targets
is boosted on the authority of a dependency that does not exist; a card that is
targeted and lacks it is a real unblocker the order cannot see.
H15 — one visibility row naming the oldest open, UNASSIGNED `pm:blocking` card
and its age. No threshold: the row reports unconditionally, because a threshold
would re-introduce the judgement call the row exists to hand to the reader.
Both stay report-only, both render as ordinary rows in both media, and the
remedy for either direction is always the triage sweep's derivation pass — this
script never writes a label. Measured on the live board 2026-08-19 (234 open
cards, 17 `Blocked-by:` body lines): 1 stale, 5 missing, 0 coherent pairings.
Self-test 202 -> 273 cases, all green.
Claude-Session: https://claude.ai/code/session_01AeA3nU1B5Q2pgxqxgUrexd
Co-authored-by: Claude <noreply@anthropic.com>1 parent 6ae9ea9 commit 301bf26
1 file changed
Lines changed: 456 additions & 3 deletions
0 commit comments