97a9c65302
Acts on the seven review comments on PR #1. Design A is gone (comment 4). clients/ deleted rather than tracked: with workers carrying cross-machine work the bridge is undeployed, which supersedes the 2026-07-27 "keep through Phase 5" decision. CLAUDE.md, AGENTS.md and AUDIT.md updated from "retained" to "deleted". The harness-hook completion path is gone (comment 10). Investigation of the live OpenCode QA run showed orchestra-worker owns completion end to end: it watches for .orchestra/done, confirms via AgentStatus that the agent is not busy, then posts through /v1/federation/* with both lease epoch and expected version. The hook scripts used a different, older convention (.orchestra-report.md) and posted to /v1/harness/complete, which had already been reduced to a 410 stub - so that path could not have completed a task. Nothing exercised it, because the live run never used it. Deleted: the three deploy/hooks scripts, the 410 route, the unmounted harnessCompletion handler, and its test. That test passed against a handler no mux routed to, which is the exact "looks wired but isn't" pattern CLAUDE.md warns about; the constant-time token compare added to it earlier today goes with it, having never been reachable. /v1/harness/turn is untouched and still live. Retired deployment files (comments 8, 12, 14): deploy/orchestra.service and deploy/redeploy.sh (which sudo-installed to /usr/local/bin and restarted that unit), plus deploy/docker-api-entrypoint.sh. The entrypoint was safe to remove once its premise was checked: env vars reach the container through `env_file: .env` in compose.yaml, not by sourcing /etc/orchestra/orchestra.env - only config.jsonc is bind-mounted there - and Dockerfile.api's line 17 already sets ORCHESTRA_DATA/ORCHESTRA_PORT. Dockerfile.api now execs /app/orchestra directly. orchestra-worker.service is a different, current unit and is kept. deploy/config.example.json deleted as a duplicate (comment 6); the annotated .jsonc is the one registry.go points at, and its header no longer tells the reader to copy the file that just went away. Documentation corrected beyond the deletions: - CLAUDE.md's deployment section claimed the container bind-mounts /etc/orchestra:ro and its entrypoint sources the env file. Both wrong. - AGENTS.md still described a systemd deployment on homesrv as of 2026-07-27. - AUDIT.md's H5 row still described a "retained compatibility handler". - deploy/DEPLOYMENT.md still named redeploy.sh as the deployment path. - deploy/orchestra.env.example still cited EnvironmentFile=. TOKEN_MINIMAL_WORKFLOW_PLAN.md (comment 2) is untouched: it and WEB_UI_PLAN.md were both missed by REVIEW.md's documentation sweep, and reconciling a 534-line forward-looking plan against AUDIT.md is its own task, not a review fixup. Verified: go build ./..., go vet ./..., go test ./... all pass after the deletions, and go list ./... has no node_modules entry. No live herdr or pane was touched; nothing was deployed. The running image still predates this commit until compose is rebuilt. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GEugbHVYfAXFpTqDYbByEB
83 lines
4.1 KiB
JSON
83 lines
4.1 KiB
JSON
// Annotated reference for registry.Config (internal/registry/registry.go).
|
|
// This file is NOT valid JSON (it has comments) and is not loaded by orchestra —
|
|
// it exists purely to document fields. Copy it, strip the comments, and install
|
|
// the result as the deployed config.jsonc (bind-mounted into /etc/orchestra/ by
|
|
// compose.override.yaml). The plain config.example.json was deleted on
|
|
// 2026-07-31 as a duplicate of this file.
|
|
{
|
|
// Static project topology. One entry per project the fleet routes tasks for.
|
|
"projects": [
|
|
{
|
|
"id": "correx", // Project id; tasks/events are tagged with this.
|
|
"machine_affinity": ["mainframe"], // Machine ids (below) this project may run on.
|
|
// Required — a project with no affinity can't be routed.
|
|
"repo": "/var/lib/orchestra/repos/correx.git", // Optional per-project git repo path.
|
|
// Overrides the global ORCHESTRA_REPO default.
|
|
"worktree_root": "/var/lib/orchestra/worktrees/correx", // Optional per-project worktree dir.
|
|
// Overrides global ORCHESTRA_WORKTREE_ROOT.
|
|
"quality_gate": "go test ./... && go vet ./..." // Worker runs this before deterministic delivery.
|
|
},
|
|
{
|
|
"id": "maven",
|
|
"machine_affinity": ["mainframe", "satellite"] // Multiple affinities: routable to either machine.
|
|
// repo/worktree_root omitted here: falls back to the deployment's global default.
|
|
}
|
|
],
|
|
|
|
// Physical/logical machines in the fleet. herdrs.machine_id below must reference one of these.
|
|
"machines": [
|
|
{ "id": "mainframe", "address": "10.0.0.10:9145" }, // address: host:port this machine's orchestra API listens on.
|
|
{ "id": "satellite", "address": "10.0.0.11:9145" }
|
|
],
|
|
|
|
// Herdrs: individual harness worker slots that execute tasks.
|
|
"herdrs": [
|
|
{
|
|
"id": "mainframe-claude-1", // Unique herdr id.
|
|
"machine_id": "mainframe", // Which machine (above) this herdr runs on.
|
|
// "address" omitted: falls back to the parent machine's address (used here since
|
|
// this herdr's harness listens on the machine's default port).
|
|
"harness": "claude", // Harness adapter to use: "claude" | "codex" | "opencode".
|
|
"protocol": "1", // Herdr wire protocol version. Falls back to
|
|
// ORCHESTRA_HERDR_PROTOCOL if omitted.
|
|
"capabilities": ["code", "review"], // Task capability tags this herdr can accept.
|
|
"concurrency": 2, // Max simultaneous sessions this herdr will run.
|
|
"quota_limit_5h": 50, // Rolling 5-hour usage quota (harness-specific units).
|
|
"quota_limit_weekly": 500 // Rolling weekly usage quota.
|
|
// "quota_limit" (deprecated): if set without quota_limit_5h, treated as weekly-only,
|
|
// to preserve old configs' historical meaning without inventing a 5h cap.
|
|
},
|
|
{
|
|
"id": "satellite-claude-1",
|
|
"machine_id": "satellite",
|
|
"address": "10.0.0.11:9245", // Explicit override: this herdr listens on a non-default
|
|
// port on its machine (e.g. multiple herdrs per machine).
|
|
"harness": "claude",
|
|
"protocol": "1",
|
|
"capabilities": ["code"],
|
|
"concurrency": 1,
|
|
"quota_limit_5h": 20,
|
|
"quota_limit_weekly": 200
|
|
},
|
|
{
|
|
"id": "mainframe-codex-1",
|
|
"machine_id": "mainframe",
|
|
"harness": "codex", // OpenAI Codex CLI harness adapter.
|
|
"protocol": "1",
|
|
"capabilities": ["code"],
|
|
"concurrency": 1,
|
|
"quota_limit_weekly": 300 // codex has no separate 5h window tracked here; weekly only.
|
|
},
|
|
{
|
|
"id": "satellite-opencode-1",
|
|
"machine_id": "satellite",
|
|
"address": "10.0.0.11:9345",
|
|
"harness": "opencode", // OpenCode CLI harness adapter.
|
|
"protocol": "1",
|
|
"capabilities": ["code", "review"],
|
|
"concurrency": 1,
|
|
"quota_limit_weekly": 300
|
|
}
|
|
]
|
|
}
|