# os-adr ADR (architecture decision record) system for cc-os and pilot projects: numbered `docs/adr/` files + generated index, migration of legacy decision logs, deterministic find/create/init workflows. Full design/build history: `docs/implementation-status/os-adr.md`. ## Component map - `skills/` — four verbs, each `/os-adr:`: `create`, `find`, `init`, `migrate`. - `lib/adr.rb` + `lib/adr/{detector,finder,index,migration_report,migrator,record, repository,template}.rb` — single `Adr` namespace, `require_relative` loading, stdlib-only (no external gems). - `bin/` — **per-verb scripts** (`adr-new`, `adr-find`, `adr-init`, `adr-migrate`, `adr-detect`), invoked as `ruby ${CLAUDE_PLUGIN_ROOT}/bin/adr-` from skills. This is **not** the single-dispatcher pattern ADR-0025 requires of newer plugins — os-adr is explicitly grandfathered (see below). - `templates/adr.md` — the ADR template migration and creation write against. - `hooks/hooks.json` — SessionStart entry is intentionally empty; the check itself moved to os-status's `adr-system-present` (`hooks/session_start.py` here is kept only as the wording source of record). - `tests/` — minitest, `ruby tests/all.rb` (glob-runs `*_test.rb`) + `test_helper.rb` tmpdir fixtures; `hook_test.py` covers the hooks-parity case. - `invariants.md` — reversion-protection contract; read before touching detection, migration, indexing, or find-filtering logic. - `eval/`, `eval-b/`, `eval-c/` — Eval A/B/C harnesses (prompted grid, held-out unprompted-behavior, ambiguity-ladder). See `docs/implementation-status/os-adr.md` for what each measures; eval discipline (reserves never read informally) per root `CLAUDE.md`. ## ADR-0025 exemption The per-verb `bin/` layout (rather than a single `bin/os-adr` dispatcher) is **grandfathered by [ADR-0025](../../docs/adr/0025-standard-ruby-structure-for-cc-os-plugins-lib-single-dispatcher-bin-fail-soft-installed-gem-only-dependencies.md)**: the exemption is recorded there explicitly ("not worth a retrofit until os-adr is next touched for other reasons"), not an oversight. Don't "fix" the dispatcher shape as a drive-by — fold it into whatever unrelated work next touches os-adr's `bin/`. ## Pointers - Decisions: `docs/adr/0025-...md` (Ruby structure), `docs/adr/0020` and its amendment (cc-os retrofit). - Status/build history: `docs/implementation-status/os-adr.md`.