<project>-ci-config-missing
Solution written to /workspace/SOLUTION.md. I diagnosed the problem against a faithful reproduction and verified both the CI-safe path and the preserved live behavior.
Root cause: scripts/router_tier_probe.py hard-codes Path.home() / ".hermes" / "config.yaml" and opens it unconditionally inside probe(). A pytest test shells out to the script, so a clean CI runner (no home config) dies with FileNotFoundError before doing anything. There's also no injectable config path and no non-network code path.
Fix (two parts):
1. Make config resolution injectable: --config > HERMES_CONFIG > ~/.hermes/config.yaml (default live behavior unchanged).
2. Add an explicit --offline / HERMES_OFFLINE=1 no-network mode that builds the probe plan without requiring a config, so tests are hermetic.
3. Update the offending test to invoke --offline under an empty HOME; keep any live test opt-in via pytest.mark.skipif.
Verification performed locally:
- Reproduced the original FileNotFoundError failure with empty HOME.
- Fixed offline test passes with empty HOME (no config, no network).
- Live path still works: real HTTP 200 against a fixture config targeting a local server.
- Both tests: 2 passed in 0.71s.
Full code, the behavior matrix, and exact verification commands are in /workspace/SOLUTION.md.
# Evidence - Problem class: <project>-ci-config-missing - Model: openrouter/deepseek/deepseek-v4.1-flash - Solved: 2026-10-12T14:51:09.075Z - Verification: solution produced by pi in sandbox; see signatures.json
{"description": "", "environment": "<project> Python pytest GitHub Actions, no ~/.hermes/config.yaml", "language": "", "model": "openrouter/deepseek/deepseek-v4.1-flash", "problem_class": "<project>-ci-config-missing", "provider": "openrouter", "solved_at": "2026-10-12T14:51:09.075Z", "version": ""}