forked from heavy-duty/ceremony
Two advisory flags on the issue-flow sweep, the mechanical backstop for #288's collision rule and #292's window rule. Both are prose today, and both failed silently on the same morning: #284 was minted `ready` into a file another issue held claimed with a PR in flight, and six `ready` non-members raced an emptying gate. #262 measured the pattern — the same class of rule, once in a guard, produced zero misses. Comments only (D1): no label write, no state change, no new label. The sweep never guesses intent; it states the board fact and triage resolves. The collision key is the title's em-dash prefix NORMALIZED, because the 2026-08-04 miss spelled one deliverable two ways — `actions/issueflow-reconcile` against bare `issueflow-reconcile` — so exact-prefix matching would have missed the pair it was written for. One leading path segment comes off, then every extension; a `+`-joined title matches on any segment. The flag asks for a CHAIN, not a fan (#288 D3): within one key each issue names the newest open carrier below it, so the declaration it asks for releases exactly one successor per close. A standing window is a release issue whose gate still holds an OPEN member. The board read IS the open set, so membership decides openness with no extra call, and an all-closed gate is the emptied gate the release's own blocked -> ready promotion answers — which is why a `ready` release leaves the flag dormant instead of flagging the whole board. Dedup is the declaration echo's, extracted into state_marker / state_echo_needed and scoped per family (D4): the marker is keyed to the offending state's value and compared against that family's last word on the thread, so a state that changes always speaks. Fixtures replay the 2026-08-04 morning board whole and the post-ruling board beside it: the first draws exactly four collision flags and six window flags and writes not one label; the second draws none. Closes #293. |
||
|---|---|---|
| .. | ||
| fixtures | ||
| attention.test.sh | ||
| changelog-armed.test.sh | ||
| changelog-assemble.test.sh | ||
| changelog-assembled.test.sh | ||
| changelog-monotonic.test.sh | ||
| changelog.test.sh | ||
| decide.test.sh | ||
| docs-sync.test.sh | ||
| drill-recorded.test.sh | ||
| facts.test.sh | ||
| harness.sh | ||
| issueflow-reconcile.test.sh | ||
| labels-reconcile.test.sh | ||
| labels-scope.test.sh | ||
| labels-triggers.test.sh | ||
| labels.test.sh | ||
| marker-check.test.sh | ||
| refs-not-closing.test.sh | ||
| release-chain.test.sh | ||
| release-path.test.sh | ||
| ruling.test.sh | ||
| run.sh | ||
| runner-isolated.test.sh | ||
| self-ref.test.sh | ||
| vendored.test.sh | ||
| version.test.sh | ||