# status-checks — in-process check contract + initial checks ## ADDED Requirements ### Requirement: Uniform in-process check contract Every status check SHALL be a Python function in the os-status plugin with the signature `check(ctx) -> CheckResult`, where `ctx` provides the project root (or None outside a git project) and per-project config, and `CheckResult` carries `status` (`ok` | `note` | `warn`) and `message` (empty for `ok`). Checks SHALL be registered in a single registry list; adding a check SHALL require only the function and one registry entry. #### Scenario: Check returns ok - **WHEN** a registered check finds its precondition satisfied and has no informational output - **THEN** it returns `status: ok` and contributes no output to the session #### Scenario: Check failure is isolated - **WHEN** a registered check raises an exception or exceeds the per-check time budget - **THEN** the runner records it as `warn` with a generic message naming the check, continues running the remaining checks, and never blocks or fails the session ### Requirement: ADR system check preserves os-adr behavior The `adr_system_present` check SHALL reproduce os-adr's SessionStart behavior: in a git project with `docs/adr/` present it returns `note` with the existing Eval-B-tuned usage-note wording verbatim; with `docs/adr/` absent it returns `warn` suggesting init/migrate at most once per day, permanently silenced by `.os-adr/suppress`; outside a git project it returns `ok`. #### Scenario: ADR system present - **WHEN** the session starts in a git project containing `docs/adr/` - **THEN** the check returns `note` whose message is byte-identical to os-adr's current PRESENT_NOTE wording #### Scenario: ADR system absent, not suppressed - **WHEN** the session starts in a git project without `docs/adr/` and no `.os-adr/suppress` exists and no suggestion was emitted today - **THEN** the check returns `warn` naming `/os-adr:init` and `/os-adr:migrate` #### Scenario: ADR suggestion suppressed - **WHEN** `.os-adr/suppress` exists in the project - **THEN** the check returns `ok` ### Requirement: Vault hub-note check The `vault_hub_note_present` check SHALL determine whether the current project has a hub note in the SecondBrain vault, preferring an explicit hub slug from per-project config over inference by `project/` facet tag. Missing hub note in a git project SHALL yield `warn` naming the corrective action; present SHALL yield `ok` with no context injection. #### Scenario: Hub note missing - **WHEN** the session starts in a git project with no matching hub note in the vault - **THEN** the check returns `warn` telling the user which skill to run to create one #### Scenario: Hub note present - **WHEN** a hub note matching the project exists in the vault - **THEN** the check returns `ok` and injects nothing ### Requirement: Subagent model env-override check The `subagent_model_env_override` check SHALL return `warn` when `CLAUDE_CODE_SUBAGENT_MODEL` is set in the process environment or present in the `env` block of `~/.claude/settings.json`, identifying where it was found; otherwise `ok`. This check SHALL run regardless of whether the cwd is a git project. #### Scenario: Override set in settings.json - **WHEN** `~/.claude/settings.json` contains `CLAUDE_CODE_SUBAGENT_MODEL` in its `env` block - **THEN** the check returns `warn` naming the variable, its value, and the file it was found in #### Scenario: No override - **WHEN** the variable is absent from both the environment and settings.json - **THEN** the check returns `ok` ### Requirement: os-adr SessionStart hook removed atomically In the same change that ships the `adr_system_present` check, os-adr's own SessionStart hook entry SHALL be removed from `plugins/os-adr/hooks/hooks.json`, and the cutover SHALL be verified against the refreshed plugin cache (not only source), such that exactly one component emits the ADR status per session. #### Scenario: No double emission after cutover - **WHEN** a fresh session starts after `bin/refresh-plugins` with os-status and os-adr both installed - **THEN** the ADR usage note or suggestion appears exactly once