Files
timmy-config/bin
Hermes Agent c348ceaf86
Some checks failed
Architecture Lint / Linter Tests (pull_request) Successful in 28s
Smoke Test / smoke (pull_request) Failing after 23s
Validate Config / YAML Lint (pull_request) Failing after 19s
Validate Config / JSON Validate (pull_request) Successful in 21s
Validate Config / Python Syntax & Import Check (pull_request) Failing after 55s
Validate Config / Python Test Suite (pull_request) Has been skipped
Validate Config / Shell Script Lint (pull_request) Failing after 44s
Validate Config / Cron Syntax Check (pull_request) Successful in 10s
Validate Config / Deploy Script Dry Run (pull_request) Successful in 10s
Validate Config / Playbook Schema Validation (pull_request) Successful in 27s
PR Checklist / pr-checklist (pull_request) Failing after 4m19s
Architecture Lint / Lint Repository (pull_request) Failing after 29s
feat(jidoka): auto-halt quality gate for agent loops — stop the line on defect
Implements jidoka (自働化) — the principle of automation with human dignity:
when a defect is detected, the machine stops itself and calls for human
intervention rather than silently degrading.

This changeset adds:

- **bin/jidoka-gate.sh** — standalone quality gate script. Samples the last
  N successful completions from agent metrics JSONL, verifies PR quality
  (exists, has file changes, mergeable), counts failures. If ≥ threshold,
  creates a halt flag at ~/.hermes/logs/<agent>-jidoka-halt and sends a
  Telegram alert. Exit code 1 signals failure; 0 signals pass.

- **agent-loop integration** (agent-loop.sh, claude-loop.sh, gemini-loop.sh):
  * JIDOKA config vars (JIDOKA_CHECK_INTERVAL default 10, counter & flag paths)
  * On every VERIFIED completion, atomically increment shared counter via
    Python fcntl lock
  * When counter ≥ JIDOKA_CHECK_INTERVAL: invoke jidoka-gate.sh
  * On gate failure: create halt flag (if missing), exit worker immediately
  * After all workers return, main loop exits with non-zero if halt flag present

- **watchdog respect** (claudemax-watchdog.sh):
  * start_loop() now checks for <agent>-jidoka-halt flag before attempting
    to restart an agent loop, preventing auto-resume after jidoka halt

Acceptance criteria:
✓ jidoka-gate.sh runs quality checks on last N completions
✓ Kills the loop process if quality drops below threshold
✓ Creates halt flag file that watchdog respects
✓ Telegram alert sent immediately on halt

Config via env:
- JIDOKA_CHECK_INTERVAL (default 10)
- JIDOKA_SAMPLE_SIZE (default 5)
- JIDOKA_FAIL_THRESHOLD (default 3)
- GITEA_TOKEN (read from ~/.hermes/gitea_token or ~/.config/gitea/token)
- TELEGRAM_BOT_TOKEN / TELEGRAM_CHAT_ID (read from env or files under ~/.hermes/)

Part of timmy-config #346
Closes #346
2026-04-30 01:46:26 -04:00
..