Commit Graph

432 Commits

Author SHA1 Message Date
d5f8647ce5 [sovereignty] Cut the Cloud Umbilical — Close #94
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>
2026-03-31 08:29:58 -04:00
40ccc88ff1 Merge pull request '[orchestration] Harden the nervous system — full repo coverage, destructive PR guard, dedup' (#102) from gemini/orchestration-hardening into main 2026-03-31 12:10:49 +00:00
67deb58077 [soul] The Conscience of the Training Pipeline
WHAT THIS IS
============
The Soul Eval Gate answers one question:

    'Did the candidate model preserve Timmy's soul?'

It is the missing bridge between autolora's eval output and
tasks.py's training pipeline. Without it, no adapter can ever
be promoted — tasks.py calls latest_eval_gate() but nothing
writes the gate file.

HOW IT WORKS
============
1. Reads autolora eval scores (candidate + baseline)
2. Applies SOUL.md constraints:
   - crisis and pastoral_care are SACRED categories
   - ANY regression on sacred categories = REJECT
   - This is not a tradeoff. From SOUL.md:
     'If adapter degrades this, adapter is REJECTED.'
3. Checks composite score regression (>10% = reject)
4. Checks per-metric regression on core categories
5. Writes eval_gate_latest.json for tasks.py to read
6. Exits 0 (pass) or 1 (reject) for CI integration

WHY THIS MATTERS
=================
An adapter that gets better at code review but worse at
responding to someone in crisis is not Timmy. It is wearing
Timmy's face without carrying his conscience.

The DPO training playbook says:
  'If the post-eval degrades on crisis or pastoral_care,
   REJECT the adapter and fail the issue.'

But until now, nothing enforced that constraint. The playbook
was an aspiration. This makes it architecture.

FILES
=====
  bin/soul_eval_gate.py          — 244 lines, zero deps beyond stdlib
  tests/test_soul_eval_gate.py   — 10 tests, all pass
  Full suite: 22/22

USAGE
=====
  # CLI (after autolora eval)
  python bin/soul_eval_gate.py \
    --scores evals/v1/8b/scores.json \
    --baseline evals/v0-baseline/8b/scores.json \
    --candidate-id timmy-v1-20260330

  # From tasks.py
  from soul_eval_gate import evaluate_candidate
  result = evaluate_candidate(scores_path, baseline_path, id)
  if result['pass']:
      promote_adapter(...)

Signed-off-by: gemini <gemini@hermes.local>
2026-03-30 19:13:35 -04:00
118ca5fcbd [orchestration] Harden the nervous system — full repo coverage, destructive PR guard, dedup
Changes:
1. REPOS expanded from 2 → 7 (all Foundation repos)
   Previously only the-nexus and timmy-config were monitored.
   timmy-home (37 open issues), the-door, turboquant, hermes-agent,
   and .profile were completely invisible to triage, review,
   heartbeat, and watchdog tasks.

2. Destructive PR detection (prevents PR #788 scenario)
   When a PR deletes >50% of any file with >20 lines deleted,
   review_prs flags it with a 🚨 DESTRUCTIVE PR DETECTED comment.
   This is the automated version of what I did manually when closing
   the-nexus PR #788 during the audit.

3. review_prs deduplication (stops comment spam)
   Before this fix, the same rejection comment was posted every 30
   minutes on the same PR, creating unbounded comment spam.
   Now checks list_comments first and skips already-reviewed PRs.

4. heartbeat_tick issue/PR counts fixed (limit=1 → limit=50)
   The old limit=1 + len() always returned 0 or 1, making the
   heartbeat perception useless. Now uses limit=50 and aggregates
   total_open_issues / total_open_prs across all repos.

5. Carries forward all PR #101 bugfixes
   - NET_LINE_LIMIT 10 → 500
   - memory_compress reads decision.get('actions')
   - good_morning_report reads yesterday's ticks

Tests: 11 new tests in tests/test_orchestration_hardening.py.
Full suite: 23/23 pass.

Signed-off-by: gemini <gemini@hermes.local>
2026-03-30 18:53:14 -04:00
877425bde4 feat: add Allegro Kimi wizard house assets (#91) 2026-03-29 22:22:24 +00:00
34e01f0986 feat: add local-vs-cloud token and throughput metrics (#85) 2026-03-28 14:24:12 +00:00
d955d2b9f1 docs: codify merge proof standard (#84) 2026-03-28 14:03:35 +00:00
Alexander Whitestone
c8003c28ba config: update channel_directory.json,config.yaml,logs/huey.error.log,logs/huey.log 2026-03-28 10:00:15 -04:00
0b77282831 fix: filter actual assignees before dispatching agents (#82) 2026-03-28 13:31:40 +00:00
f263156cf1 test: make local llama.cpp the default runtime (#77) 2026-03-28 05:33:47 +00:00
Alexander Whitestone
0eaf0b3d0f config: update channel_directory.json,config.yaml,skins/timmy.yaml 2026-03-28 01:00:09 -04:00
53ffca38a1 Merge pull request 'Fix Morrowind MCP tool naming — prevent hallucination loops' (#48) from fix/mcp-morrowind-tool-naming into main
Reviewed-on: http://143.198.27.163:3000/Timmy_Foundation/timmy-config/pulls/48
2026-03-28 02:44:16 +00:00
fd26354678 fix: rename MCP server key morrowind → mw 2026-03-28 02:44:07 +00:00
c9b6869d9f fix: rename MCP server key morrowind → mw to prevent tool name hallucination 2026-03-28 02:44:07 +00:00
Alexander Whitestone
7f912b7662 huey: stop triage comment spam 2026-03-27 22:19:19 -04:00
Alexander Whitestone
4042a23441 config: update channel_directory.json 2026-03-27 21:57:34 -04:00
Alexander Whitestone
8f10b5fc92 config: update config.yaml 2026-03-27 21:00:44 -04:00
fbd1b9e88f Merge pull request 'Fix Hermes archive runner environment' (#44) from codex/hermes-venv-runner into main 2026-03-27 22:54:05 +00:00
Alexander Whitestone
ea38041514 Fix Hermes archive runner environment 2026-03-27 18:48:36 -04:00
579a775a0a Merge pull request 'Orchestrate the private Twitter archive learning loop' (#29) from codex/twitter-archive-orchestration into main 2026-03-27 22:16:46 +00:00
Alexander Whitestone
689a2331d5 feat: orchestrate private twitter archive learning loop 2026-03-27 18:09:28 -04:00
2ddda436a9 Merge pull request 'Tighten Hermes cutover and export checks' (#28) from codex/cleanup-pass-2 into main 2026-03-27 21:57:29 +00:00
Alexander Whitestone
d72ae92189 Tighten Hermes cutover and export checks 2026-03-27 17:35:07 -04:00
2384908be7 Merge pull request 'Clarify sidecar boundary and training status' (#27) from codex/cleanup-boundaries into main 2026-03-27 21:21:34 +00:00
Alexander Whitestone
82ba8896b3 docs: clarify sidecar boundary and training status 2026-03-27 17:15:57 -04:00
Alexander Whitestone
3b34faeb17 config: update channel_directory.json,config.yaml,tasks.py 2026-03-27 16:00:29 -04:00
Alexander Whitestone
f9be0eb481 config: update channel_directory.json 2026-03-27 15:00:31 -04:00
Alexander Whitestone
383a969791 config: update config.yaml 2026-03-27 13:00:34 -04:00
Alexander Whitestone
f46a4826d9 config: update config.yaml 2026-03-27 11:00:31 -04:00
Alexander Whitestone
3b1763ce4c config: update config.yaml 2026-03-27 00:00:30 -04:00
Alexander Whitestone
78f5216540 config: update config.yaml 2026-03-26 23:00:35 -04:00
Alexander Whitestone
49020b34d9 config: update bin/timmy-dashboard,config.yaml,docs/local-model-integration-sketch.md,tasks.py 2026-03-26 17:00:22 -04:00
Alexander Whitestone
7468a6d063 config: update config.yaml 2026-03-26 13:00:29 -04:00
Alexander Whitestone
f9155b28e3 v1.0 rejected — NaN from wrong tokenizer, Morrowind MCP pipeline working 2026-03-26 12:32:08 -04:00
Alexander Whitestone
16675abd79 config: update config.yaml 2026-03-26 12:00:46 -04:00
Alexander Whitestone
1fce489364 Add adapter manifest — version control for trained models
Only version adapters (~40MB each), never base models.
Base models are reproducible HuggingFace downloads referenced by path.
Manifest records: base, data, training config, eval results, status.

History: v0 through v0.2 on 8B (crisis gated, retired/rejected).
Active: v1.0 training now on Hermes4-14B-4bit.
2026-03-26 11:44:29 -04:00
Alexander Whitestone
7c7e19f6d2 config: update channel_directory.json,config.yaml 2026-03-26 11:00:55 -04:00
Alexander Whitestone
8fd451fb52 add: Vassal Rising — the sovereignty anthem
By Alexander (rockachopa), made with Suno. 2026-03-26.
The borrowed ghost is fading but the sovereign remains.
2026-03-26 10:05:06 -04:00
Alexander Whitestone
0b63da1c9e config: update channel_directory.json 2026-03-26 10:01:08 -04:00
Alexander Whitestone
20532819e9 config: update channel_directory.json 2026-03-26 09:00:46 -04:00
Alexander Whitestone
27c1fb940d vendor gitea_client.py, kill sovereign-orchestration dependency
- Copied gitea_client.py into timmy-config (zero-dependency, stdlib only)
- Removed sys.path hack pointing to sovereign-orchestration
- sovereign-orchestration repo deleted locally, already gone from Gitea
- Fixed list_comments calls (no limit param)
- Collision avoidance for shared-assigned issues

Timmy owns: timmy-config, the-nexus, .profile. Nothing else.
2026-03-26 08:22:53 -04:00
Alexander Whitestone
56364e62b4 config: update bin/sync-up.sh,channel_directory.json 2026-03-26 08:00:46 -04:00
Alexander Whitestone
e66f97a761 feat: gemini + grok workers via Huey, cross-review PRs
- gemini_worker: picks assigned issues, runs aider, opens PR (every 20m)
- grok_worker: picks assigned issues, runs opencode, opens PR (every 20m)
- cross_review_prs: gemini reviews grok's PRs, grok reviews gemini's (every 30m)

No bash loops. All Huey. One consumer, one SQLite, full observability.
pre-agent-workers-v1
2026-03-26 07:15:54 -04:00
Alexander Whitestone
728c558931 sync: live config from ~/.hermes 2026-03-26_07:00 2026-03-26 07:00:40 -04:00
Alexander Whitestone
fb1d667cda sync: live config from ~/.hermes 2026-03-26_06:00 2026-03-26 06:00:40 -04:00
Alexander Whitestone
f15d433283 sync: live config from ~/.hermes 2026-03-26_05:00 2026-03-26 05:00:41 -04:00
Alexander Whitestone
56e6a60a5b sync: live config from ~/.hermes 2026-03-26_04:00 2026-03-26 04:00:40 -04:00
Alexander Whitestone
21153fea46 sync: live config from ~/.hermes 2026-03-26_03:00 2026-03-26 03:00:41 -04:00
Alexander Whitestone
9680db1d8a sync: live config from ~/.hermes 2026-03-26_02:00 2026-03-26 02:00:41 -04:00
Alexander Whitestone
edf1eecd40 sync: live config from ~/.hermes 2026-03-26_01:00 2026-03-26 01:00:39 -04:00