### Added
- `chief route` subcommand — conversational stack routing from the terminal without opening an agent session. Sends the project description to an AI provider (Anthropic, OpenAI, or GitHub Models) with `AGENTS.md` as the system prompt, runs the classify → clarify → agree loop, and prints the recommended stack with next-step commands on AGREE. Requires `pip install 'framework-chief[route]'`.
- Multi-provider support in `chief route`: `--provider anthropic` (default, Claude), `--provider openai` (GPT-4o), `--provider github` (GitHub Copilot via GitHub Models API). `--model` flag overrides the provider default.
- Loading spinner (`Rich console.status()`) in `chief route` — animated dots while the API call is in-flight; disappears cleanly when the response arrives.
- Sentinel hardening in `route.py`: `_strip_fenced_blocks()` prevents false sentinel matches inside code blocks; `_VALID_STATES` / `_VALID_VERDICT_PATTERNS` frozensets validate state and verdict values before acting on them; `MAX_SENTINEL_RETRIES = 3` and `MAX_LOOP_ITERATIONS = 20` guard against stuck loops; 4-tuple `_strip_sentinel` return surfaces error messages for malformed sentinels without crashing.
- `compose.py` hardening: `_AUTO_RESOLVERS` dispatch table (keyed by placeholder name) replaces the flat resolver that returned today's date for any auto placeholder; bidirectional placeholder validation checks declared-in-meta ↔ body-token agreement in both directions; post-resolver leakage check raises `CompositionError` if a `required` token survives unfilled; atomic file write via `tempfile.NamedTemporaryFile` + `Path.replace()` prevents partial writes from corrupting AGENTS.md; empty body guard rejects blocks with no content before reaching the resolver pass.
- 6 new unit tests in `tests/unit/test_compose.py` covering: `_AUTO_RESOLVERS` dispatch, unknown auto placeholder error, bidirectional validation (both directions), post-resolver leakage, atomic write behaviour.
- Unit test suite for four pure domain modules — `checks`, `compose`, `decision_log`, `phases` — 92 tests, ~0.5 s, no subprocess, no LLM required
- `tests/unit/test_registry.py` — REGISTRY consistency tests (replaces `test_cli.py`)
- `tests/unit/test_checks.py` — prereq check logic and version string parsing (14 tests)
- `tests/unit/test_compose.py` — composition block apply, resolver logic, monkeypatched block dir (10 tests)
- `tests/unit/test_decision_log.py` — append-only log bootstrap, parse-and-append, last-stack query (12 tests)
- `tests/unit/test_phases.py` — phase checkpointing: skip / run / force / symlink (8 tests)
- `unit` CI job in `.github/workflows/ci.yml` — `uv run pytest tests/unit/ -v`, no Docker, 5 min cap
- README: `chief route` and `chief compose` documented in the Advanced CLI `<details>` block with provider options and usage examples
- README: "What it looks like" — concrete example interaction (classify → agree → install)
- README: "The five frameworks" — one-row mini-glossary so the routing table has grounding
- README: "Prerequisites" table (Python, uv, git, Node)
- README: "Get started" revamped as a three-step flow with per-agent wiring table and advanced CLI in `<details>`
- `CONTRIBUTING.md` — routing eval harness, test layer architecture, CI setup, development workflow
- `CHANGELOG.md` (this file)

### Changed
- `max_tokens` raised from 2048 → 4096 in both `_call_anthropic` and `_call_openai` — long AGREE responses (especially BMAD + Superpowers with full composition block) were silently truncated at the old limit.
- README "Status" updated to reflect the full Python CLI surface including `route` (AI API calls) and `compose` (atomic AGENTS.md writes); version label bumped from `v0` to `v0.1`
- `tests/unit/test_cli.py` renamed to `tests/unit/test_registry.py` — filename now matches what is tested
- README "Status" trimmed to v0 disclaimer + two seams-to-watch; eval harness details moved to `CONTRIBUTING.md`
- README "What's in the box" updated to reflect all five unit test files and the new CI job

---
