# progress ## 2026-06-10 — Phase 1: foundations, ADRs, skeleton, docs **Landed:** - Module scaffold (Go 1.26), `.gitea/workflows/ci.yaml` (foreman-style gates: build, vet, race tests, tidy-diff), `.env.example`. - `llm/` canonical contract: Message/Part (sealed; text+image), Request/Options, Response/Usage/FinishReason, Stream/StreamEvent, Tool/Toolbox (panic-safe Execute), Capabilities (zero-value semantics), Model/Provider interfaces, APIError + transient/permanent Classify. - `health/`: clock-injected tracker — consecutive-failure threshold, exponential capped cooldown, reset-on-success, thread-safe; full deterministic test suite (fake clock). - Root: Registry (providers/aliases/schemes/health), Parse with the binding grammar (verbatim model ids, inline recursive alias expansion, cycle detection, dedup), LLM_* env-DSN loading (go-llm-parity lazy fallback + eager LoadEnv/New scan), chain executor implementing Model (retry-on-transient, bench-on-repeat, skip-benched, 404-advance, fail-fast-on-auth, joined exhaustion errors). Built-ins register as resolvable stubs until their phases land. - `provider/fake/`: scriptable provider (per-model outcome queues, request recording, capabilities overrides, streaming) — the hermetic test rig. - ADRs 0001–0008 + index; CLAUDE.md; honest README with pending-marked matrix. - Tests cover the two required cases: the trailing-`thinking` chain parse and `LLM_M1=foreman://token@host` loading (plus DSN table, lazy fallback, cycle detection, chain failover/backoff/exhaustion, toolbox execution, error classification). **Notes:** chain executor landed in Phase 1 (design was settled); Phase 2 deepens its test matrix (cooldown re-admission via fake clock, alias-in-chain failover, permanent-policy override) and wires anything the tests flush out. **Next:** Phase 2 — exhaustive health/chain test matrix.