7f12c7fc37
The v3 stack, previously an uncommitted working tree, plus this session's two units and the burn-in instrument. This commit is the burn-in build identity: coordinator and worker must both report this revision before a task is created. Workflow (earlier sessions, uncommitted until now): human decision events and reduction, source cursors and reconcile-before-launch, turn-boundary reconciliation, internal/agentctx as the single renderer, ace-fca phases with sealed artifacts, the trajectory gate, bounded grilling, independent review, task pr enforcement, and human review reflection. Capability restrictions at the agent boundary: an authz.Agent surface at GatedWrite may ask and may not act. It also fixes two bugs the unit exposed -- gated surfaces could not reach the two endpoints written for them, and RequestHumanDecision would block an unowned task while rejecting a question from the session that did own it. Turn-boundary reconcile-failure escalation: a streak of consecutive failures asks the session to hand off, fenced on the lease epoch, with reconcile_failure as a real handoff reason. The worker was dropping the coordinator's verdict on the floor; it now acts on it. Burn-in: herdr.WriteLaunchContext dumps the exact agentctx.Build result to <worktree>/.orchestra/launch.md at every launch, local and federated. BURNIN.md is the runbook. deploy/build.sh stamps both binaries from one commit. go build, go vet and go test ./... pass, 20 packages. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
97 lines
5.0 KiB
JSON
97 lines
5.0 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.
|
|
,
|
|
// Cognitive phase path. Omit for the default
|
|
// frame -> research -> plan -> implement -> review. A phase left out is
|
|
// skipped, which is how a trivial project runs frame/implement/review.
|
|
"work_phases": ["frame", "research", "plan", "implement", "review"],
|
|
// Phase transitions the human must confirm before work continues. The
|
|
// task blocks with block_reason "trajectory_gate" and the decision
|
|
// packet arrives on the usual notification surfaces. Any reply is
|
|
// recorded as a human decision and outranks the sealed plan.
|
|
"trajectory_gate": { "plan_to_implement": "required" },
|
|
// Per-task budget for bounded questions to the human. Default 6. Once
|
|
// spent, the task blocks with block_reason "operator_required" and a
|
|
// reply no longer resumes it, so a task cannot become an interview.
|
|
"human_decisions": { "max_requests_per_task": 6 }
|
|
},
|
|
{
|
|
"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.
|
|
"backend": "herdr", // Pane backend: "herdr" (default) or "tmux" (Claude only).
|
|
// "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",
|
|
"backend": "tmux", // tmux entries are always worker-owned, including on the
|
|
// coordinator machine; the worker reports local health.
|
|
"harness": "claude",
|
|
"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
|
|
}
|
|
]
|
|
}
|