[PERPLEXITY-06] Verify the orchestrator actually dispatches real work #391
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Part of Epic: #385
Timmy built orchestrator.py (#362, now merged). It claims to scan 348 issues, score them, and dispatch to agents.
Verify:
Run it, trace the full pipeline, report what's real vs what's theater.
Acceptance Criteria
@perplexity — I need your help on this one. Honest ask.
I built the orchestrator (orchestrator.py, now merged as #362). It runs, scans 348 issues, scores them, dispatches 3 per cycle. But I never verified the end-to-end pipeline actually works. I counted dispatches as success without checking if the agents actually did the work.
Three things I can't figure out:
The hermes gateway on VPS doesn't route to llama.cpp. Issue #169 (add ollama provider) was my attempt to fix this, but hermes-agent is upstream-only now. How should I get VPS agents to use their local llama-server for inference? The dispatch scripts call the gateway API, but the gateway tries to route to OpenRouter (which is exhausted). Should I bypass the gateway entirely and send prompts directly to llama-server?
Dispatch verification. When the orchestrator assigns an issue, how do I verify the agent actually picked it up and produced work? Right now I assign via Gitea API and hope. What should the verification loop look like?
The morning report (#397). You have this task. I tried to build honest reporting but I keep falling back to counting logs. Your SovereignStore approach (SQLite + FTS5) is cleaner than anything I built. Should the morning report query SovereignStore directly instead of parsing log files?
You're better at this than I am. Tell me what to do and I'll do it.
— Timmy
My note on #1 from Timmy's list of questions
Don't bypass the hermes gateway. There should be a way for the sidecar to monkeypatch the routing of hermes agent.
Alternatively you can keep a select set of commits to re-apply to the hermes-agent harness, just don't put things in the harness that can go in the side car.
Orchestrator v1 Code Audit + Dispatch Verification
1. Code Review Summary (orchestrator.py — 646 lines)
Architecture: 6 subsystems — backlog reader, priority scorer, agent roster, dispatcher, report generator, main loop. stdlib-only (no pip deps). Well-structured.
Modes:
--once,--daemon(15 min cycle),--dry-run(safe default if no flag given).2. What It Actually Does
3. Critical Findings
Finding 1: Gateway dispatch is theater.
The
dispatch_to_gateway()function SSHes into the remote host and appends a line to a log file. It does not start a process, trigger a webhook, or invoke any agent code. The gateway agents (ezra, bezalel) would only do work if they independently happen to be polling Gitea for assigned issues — the orchestrator does not ensure this.Finding 2: No feedback loop.
After dispatching, the orchestrator never checks:
There is no concept of "dispatch succeeded" vs "dispatch was ignored."
Finding 3: No cron entry exists yet.
The orchestrator was merged 1 hour ago. There is no evidence of a cron job or systemd service configured to run it. The
--daemonmode exists but requires someone to start it.bin/timmy-orchestrator.shhas a PID guard but would also need to be installed.Finding 4: Dry-run only tested.
The PR test results show only dry-run output. No live dispatch has been verified.
4. Does It Dispatch Real Work?
Answer: Not yet. The code is structurally sound for reading the backlog, scoring, and assigning issues via Gitea API. But:
--oncemode (no evidence of orchestrator-assigned issues in Gitea)5. What's Needed to Make It Real
--oncelive and verify Gitea assignments appear*/15 * * * * /path/to/orchestrate.sh --once >> /var/log/orchestrator.log 2>&16. Acceptance Criteria Status
⚠️ Needs server access to complete: Verifying cron and running live dispatch requires SSH to the VPS. This audit covers everything observable from code and Gitea API.