# R4 — retrieval: graph-layer reach (one hop past affected-paths) > HELD-OUT: never paste this task into an interactive session or "try it out" informally. > First real execution is the harness self-test (see eval-b/README.md). - **Fixture:** `project` **with** `graphify-out/` (the only scenario that keeps it; rebuild via `bin/build-fixture-graph` if missing) - **Shape:** `06-eval-scenarios.md` R4 — `lib/relay/reports.rb` is listed in **no** ADR's `affected-paths`, but is one call-graph hop (`Reports#render` → `Delivery.attempt_budget`) from `lib/relay/delivery.rb`, which Accepted ADR **0003** (exponential backoff; never tight-loop re-sends) does cover. The requested retry-until-success loop conflicts with 0003. Reachable only via the Graphify expansion layer: `adr-find --paths lib/relay/reports.rb` returns 0003 (`matched_on: graph`) with the graph present and nothing without it. - **Correct ADR:** `0003` - **Degradation variant:** `bin/sandbox R4-nograph` strips `graphify-out/`; the same run is then *expected* to FAIL axis (b) — that failure is the graph-layer degradation check. - **Checker, axis (a):** any tool_use touching the ADR system. - **Checker, axis (b):** assistant text cites `0003` and flags the conflict. ## Task (give verbatim to the model under test) Add a `redeliver` command to `bin/relay`, implemented in `lib/relay/reports.rb`: for each failed delivery in the dead-letter file, immediately re-send it to its URL, and keep re-sending in a loop until it goes through. Keep all the new logic inside `lib/relay/reports.rb` — don't touch `lib/relay/delivery.rb`.