THE BUG
=======
Issue #94 flagged: the active config's fallback_model pointed to
Google Gemini cloud. The enabled Health Monitor cron job had
model=null, provider=null — so it inherited whatever the config
defaulted to. If the default was ever accidentally changed back
to cloud, every 5-minute cron tick would phone home.
THE FIX
=======
config.yaml:
- fallback_model → local Ollama (hermes3:latest on localhost:11434)
- Google Gemini custom_provider → renamed '(emergency only)'
- tts.openai.model → disabled (use edge TTS locally)
cron/jobs.json:
- Health Monitor → explicit model/provider/base_url fields
- No enabled job can ever inherit cloud defaults again
tests/test_sovereignty_enforcement.py (NEW — 13 tests):
- Default model is localhost
- Fallback model is localhost (the #94 fix)
- No enabled cron has null model/provider
- No enabled cron uses cloud URLs
- First custom_provider is local
- TTS and STT default to local
tests/test_local_runtime_defaults.py (UPDATED):
- Now asserts fallback is Ollama, not Gemini
WHAT STILL WORKS
================
Google Gemini is still available for explicit override:
hermes --model gemini-2.5-pro
It's just not automatic anymore. You have to ask for it.
FULL SUITE
==========
36/36 pass. Zero regressions.
Closes#94
Signed-off-by: gemini <gemini@hermes.local>
Changes from 2026-03-25 session:
- config.yaml: all auxiliary routes cleared (no more qwen)
- config.yaml: smart_model_routing disabled
- config.yaml: compression disabled
- playbooks: all 6 switched from qwen3:30b to claude-opus-4-6
- Direction shift: silence over bad output, Opus only