cc-os/plugins/os-status/CLAUDE.md

41 lines
2.1 KiB
Markdown
Raw Normal View History

# os-status
Aggregated, in-process `SessionStart` status checks for the cc-os plugin
family: per-project artifact checks (ADR system, vault hub note, project
graph, tracker config, config version) and environment hazard checks
(subagent model env override). See
[docs/adr/0022](../../docs/adr/0022-os-status-plugin-aggregated-in-process-sessionstart-status-checks.md)
for why checks are aggregated into one plugin instead of scattered per-plugin
hooks.
At most one `systemMessage` banner per session (one line per surviving warn);
`note`-level results bypass snooze/suppress and go out as `additionalContext`.
Snooze/suppress state lives under `.cc-os/status/` (ADR-027, with legacy
top-level fallback read).
## Component map
- `hooks/checks.py` — the check registry (`REGISTRY` at the bottom of the
file) plus each check function and the `--json` CLI entry point the `fix`
skill drives. Current checks: `subagent-model-env-override`,
`adr-system-present`, `vault-hub-note-present`, `orchestration-audit-due`,
`tracker-configured`, `config-version-current`, `project-graph-present`.
Read `checks.py` directly for exact check logic — this list is a pointer,
not a restatement.
- `hooks/session_start.py` — the `SessionStart` hook entry point; runs the
registry, applies snooze/suppress, emits the single banner.
- `hooks/state.py` — project-root resolution, `.cc-os/config` read, snooze/
suppress state read/write.
- `hooks/hooks.json``SessionStart` wiring.
- `skills/fix/SKILL.md``/os-status:fix`: remediates whatever the registry
flags, idempotent, doubles as the update-to-current-approach path
(ADR-026).
- `invariants.md` — the reversion-protection contract (8 numbered
invariants, including byte-identical wording parity with os-adr's
session_start.py); enforced by `tests/hook_test.py`.
- `tests/hook_test.py` — 80 tests, model-free (`python3 tests/hook_test.py`).
Adding a check means adding a function + a `Check(...)` entry to `REGISTRY` in
`checks.py`, following the uniform `check(ctx) -> CheckResult` signature
(invariant #8) — do not special-case a new check's wiring elsewhere.