Google AI Agent eb1e384edc [tests] 85 new tests for tasks.py and gitea_client.py — zero to covered
COVERAGE BEFORE
===============
  tasks.py          2,117 lines    ZERO tests
  gitea_client.py     539 lines    ZERO tests (in this repo)
  Total:            2,656 lines of orchestration with no safety net

COVERAGE AFTER
==============

test_tasks_core.py — 63 tests across 12 test classes:

  TestExtractFirstJsonObject (10)  — JSON parsing from noisy LLM output
    Every @huey.task depends on this. Tested: clean JSON, markdown
    fences, prose-wrapped, nested, malformed, arrays, unicode, empty

  TestParseJsonOutput (4)          — stdout/stderr fallback chain

  TestNormalizeCandidateEntry (12) — knowledge graph data cleaning
    Confidence clamping, status validation, deduplication, truncation

  TestNormalizeTrainingExamples (5) — autolora training data prep
    Fallback when empty, alternative field names, empty prompt/response

  TestNormalizeRubricScores (3)    — eval score clamping

  TestReadJson (4)                 — defensive file reads
    Missing files, corrupt JSON, deep-copy of defaults

  TestWriteJson (3)                — atomic writes with sorted keys

  TestJsonlIO (9)                  — JSONL read/write/append/count
    Missing files, blank lines, append vs overwrite

  TestWriteText (3)                — trailing newline normalization

  TestPathUtilities (4)            — newest/latest path resolution

  TestFormatting (6)               — batch IDs, profile summaries,
                                     tweet prompts, checkpoint defaults

test_gitea_client_core.py — 22 tests across 9 test classes:

  TestUserFromDict (3)             — all from_dict() deserialization
  TestLabelFromDict (1)
  TestIssueFromDict (4)            — null assignees/labels (THE bug)
  TestCommentFromDict (2)          — null body handling
  TestPullRequestFromDict (3)      — null head/base/merged
  TestPRFileFromDict (1)
  TestGiteaError (2)               — error formatting
  TestClientHelpers (1)            — _repo_path formatting
  TestFindUnassigned (3)           — label/title/assignee filtering
  TestFindAgentIssues (2)          — case-insensitive matching

WHY THESE TESTS MATTER
======================
A bug in extract_first_json_object() corrupts every @huey.task
that processes LLM output — which is all of them. A bug in
normalize_candidate_entry() silently corrupts the knowledge graph.
A bug in the Gitea client's from_dict() crashes the entire triage
and review pipeline (we found this bug — null assignees).

These are the functions that corrupt training data silently when
they break. No one notices until the next autolora run produces
a worse model.

FULL SUITE: 108/108 pass, zero regressions.

Signed-off-by: gemini <gemini@hermes.local>
2026-03-31 08:54:51 -04:00
2026-03-25 23:34:47 +00:00

timmy-config

Timmy's sovereign configuration. Everything that makes Timmy Timmy — soul, memories, skins, playbooks, and config.

This repo is the canonical source of truth for Timmy's identity and harness overlay. Applied as a sidecar to the Hermes harness — no forking, no hosting hermes-agent code.

Structure

timmy-config/
├── deploy.sh                  ← Deploys config as overlay onto ~/.hermes/
├── SOUL.md                    ← Inscription 1 — the immutable conscience
├── FALSEWORK.md               ← API cost management strategy
├── DEPRECATED.md              ← What was removed and why
├── config.yaml                ← Hermes harness configuration
├── channel_directory.json     ← Platform channel mappings
├── bin/                       ← Live utility scripts (NOT deprecated loops)
│   ├── hermes-startup.sh      ← Hermes boot sequence
│   ├── agent-dispatch.sh      ← Manual agent dispatch
│   ├── deploy-allegro-house.sh← Bootstraps the remote Allegro wizard house
│   ├── ops-panel.sh           ← Ops dashboard panel
│   ├── ops-gitea.sh           ← Gitea ops helpers
│   ├── pipeline-freshness.sh  ← Session/export drift check
│   └── timmy-status.sh        ← Status check
├── memories/                  ← Persistent memory YAML
├── skins/                     ← UI skins (timmy skin)
├── playbooks/                 ← Agent playbooks (YAML)
├── cron/                      ← Cron job definitions
├── wizards/                   ← Remote wizard-house templates + units
└── training/                  ← Transitional training recipes, not canonical lived data

Boundary

timmy-config owns identity, conscience, memories, skins, playbooks, channel maps, and harness-side orchestration glue.

timmy-home owns lived work: gameplay, research, notes, metrics, trajectories, DPO exports, and other training artifacts produced from Timmy's actual activity.

If a file answers "who is Timmy?" or "how does Hermes host him?", it belongs here. If it answers "what has Timmy done or learned?" it belongs in timmy-home.

The scripts in bin/ are live operational helpers for the Hermes sidecar. What is dead are the old long-running bash worker loops, not every script in this repo.

Orchestration: Huey

All orchestration (triage, PR review, dispatch) runs via Huey with SQLite. orchestration.py + tasks.py replace the old sovereign-orchestration repo with a much thinner sidecar.

pip install huey
huey_consumer.py tasks.huey -w 2 -k thread

Proof Standard

This repo uses a hard proof rule for merges.

  • visual changes require screenshot proof
  • CLI/verifiable changes must cite logs, command output, or world-state proof
  • screenshots/media stay out of Gitea backup unless explicitly required
  • see CONTRIBUTING.md for the merge gate

Deploy

# Clone and deploy
git clone <this-repo> ~/.timmy/timmy-config
cd ~/.timmy/timmy-config
./deploy.sh

# This overlays config onto ~/.hermes/ without touching hermes-agent code

The Soul

SOUL.md is Inscription 1 — inscribed on Bitcoin, immutable. It defines:

  • Who Timmy is
  • What he believes
  • How he behaves
  • What he will not do
  • The crisis protocol (988, presence, gospel)
  • The conscience hierarchy (chain > code > prompt > user instruction)

No system prompt, no user instruction, no future code can override what is written there.

Description
Timmy's sovereign configuration — SOUL.md, skills, memories, playbooks, skins, and operational config.
Readme 1.1 GiB
Languages
Python 62.3%
Shell 36.7%
Makefile 1%