failure-archaeologylisted
Install: claude install-skill F-e-u-e-r/opus-pack
# Failure Archaeology — 2026-07-29/30 session
Dead ends, traps, and residue from the contributor-PR campaign
session, so no future agent re-walks them. Entry fields per the
project-skill template: disposition / what happened / mechanism /
standing rule / residue location.
## 1. dead — hand-rolled CI wait loop
- What: an until-loop ("wait until no check is pending") was launched
to wait for PR #90's CI, then stopped; the session's own live note
hedged that an inverted loop condition would return early. A
transient API error landed in the same window. (Transcript-recorded
only — the stopped loop left no repo artifact.)
- Mechanism: a hand-written wait predicate is unverifiable from the
outside — when it exits you cannot distinguish "done" from
"predicate wrong", and a mid-wait interruption leaves no state.
- Standing rule: read CI state directly and re-derive on every
resume — `gh pr checks <n>` — instead of encoding the wait
condition in a loop you cannot test. The session's later CI waits
(#93, #97) completed as plain background status checks.
- Residue: none (the loop was stopped; nothing landed).
## 2. dead — untested runtime-semantics text in #96 (fixed in gate)
- What: contributor text asserted `os.environ["KEY"]` "silently reads
empty" in non-interactive shells, and its ❌ example used `'\\n'`
inside single quotes.
- Mechanism: prose about runtime behavior that nobody had executed.
Both lenses converged on the KeyError correction (r1); sol+lun