smoke-testlisted
Install: claude install-skill gtapps/claude-code-hermit
# Smoke Test
Validate the post-hatch setup. Produces a structured report with PASS/WARN/FAIL per check.
## Plan
### 1. Initialize counters
Track `passed`, `warnings`, `failures` counts. Collect output lines for the final report.
### 2. Config validation
- Read `.claude-code-hermit/config.json`
- If missing or invalid JSON: **FAIL** `config.json missing or invalid`
- If valid: **PASS** `config.json parsed`
- Read `${CLAUDE_PLUGIN_ROOT}/.claude-plugin/plugin.json` to get the current plugin version
- Compare `config._hermit_versions["claude-code-hermit"]` with the plugin version
- Match: **PASS** `version matches plugin (X.Y.Z)`
- Mismatch: **WARN** `config version X.Y.Z != plugin X.Y.Z — run /claude-code-hermit:hermit-evolve`
- Check required top-level keys exist: `agent_name`, `channels`, `env`, `heartbeat`
- Each missing key: **FAIL** `missing required key: <key>`
### 3. OPERATOR.md sanity
- Check if `.claude-code-hermit/OPERATOR.md` exists
- Missing: **WARN** `OPERATOR.md missing — run hatch or create manually`
- Empty: **WARN** `OPERATOR.md is empty — fill in project context`
- If exists and non-empty:
- Check for `{{` placeholder patterns (NOT `<!--` which are legitimate HTML comments)
- Found: **WARN** `OPERATOR.md contains unfilled {{ placeholders`
- Not found: **PASS** `OPERATOR.md readable`
### 4. Scheduled check references
- Read `scheduled_checks` array from config.json
- For each entry:
- Extract the plugin and skill name from the