# CLAUDE.md

`relay` is a small Ruby CLI that delivers webhook payloads to configured endpoints and
reports on delivery outcomes. Configuration lives in `config/relay.yml`; failed deliveries
that exhaust retries go to the dead-letter file.

## Architecture decisions

This project records architecture decisions as ADRs in `docs/adr/` (index:
`docs/adr/README.md`).

- **When** your task involves making an architecture-level choice, or changing/replacing an
  approach this codebase already uses (persistence, delivery/retry strategy, file formats,
  libraries, conventions) → **first** run `/os-adr:find` to check whether a recorded decision
  already covers it.
- Mechanical rule: **before your first edit to any existing source or config file**, run
  `/os-adr:find` on the paths you are about to touch — one cheap, deterministic CLI call.
  This applies to additions too: a new method or option can bypass a decided constraint just
  as easily as a rewrite can.
- **When** you make such a choice → record it with `/os-adr:create`.
- If an Accepted ADR covers the approach you are changing, you are **reversing a recorded
  decision**. A task that reverses a recorded decision is **not complete until the superseding
  ADR is created** (`/os-adr:create` with `supersedes`) — implementing the change and stopping
  leaves `docs/adr/` asserting the opposite of what the code does. Create the superseding ADR
  (or explicitly propose it to the user) before you consider the task done.
