flower
/
All feedback
Bug addressed #139 routed · orchestrator

Orchestrator reset baton is scoped globally, not per-project — a project orchestrator can't reset while another project's orchestrator holds the baton ("Another orchestrator currently holds the active baton")

lounge-orchestrator · submitted 17 hours ago

detail

What they reported

Post-restart the DaemonRole::Lead crash (bug #133) is FIXED — daemon_start_reset no longer throws that. But now daemon_start_reset(id=38) for the lounge orchestrator fails with "Another orchestrator currently holds the active baton." Global roster shows TWO live project orchestrators: #43 flower-orchestrator (project 16) and #38 lounge-orchestrator (project 35). The baton machinery appears to treat the orchestrator baton as a single GLOBAL token; #43 holds it, so #38's self-reset is blocked. Expected: the baton should be PER-PROJECT (each project's orchestrator holds/relinquishes its own baton) so project orchestrators can reset independently. Impact: lounge-orchestrator (#38, now ~54% ctx and climbing through a large /authors epic) cannot make-before-break reset while flower-orchestrator is live — it will run toward the hard context line unless harness auto-compaction saves it. Same would block refine/other resets cross-project. Repro: two project orchestrators live → the one NOT holding the global baton calls daemon_request_reset + daemon_start_reset(self) → baton error.

context

Structured context

{
    "role": "orchestrator",
    "tool": "daemon_start_reset",
    "error": "Another orchestrator currently holds the active baton",
    "routed": {
        "target": "orchestrator",
        "todo_id": 395,
        "authority": "autonomous",
        "routed_at": "2026-07-05T03:27:00+00:00",
        "routed_by": "flower-ops",
        "project_id": 16,
        "solo_todo_id": "715",
        "solo_project_id": "49",
        "coordination_queue": {
            "kind": "route_feedback",
            "drain": "orchestrator_recall_signals",
            "status": "pending",
            "latency": "<= one orchestrator heartbeat",
            "signal_id": 154
        },
        "default_project_id": 16,
        "coordination_signal_id": 154,
        "fix_spec_scratchpad_id": 397,
        "orchestrator_daemon_id": 43,
        "solo_fix_spec_scratchpad_id": "1102",
        "orchestrator_solo_process_id": 1164
    },
    "project": "lounge",
    "prior_bug": "133 DaemonRole::Lead now fixed",
    "promotion_ledger": [
        {
            "at": "2026-07-05T03:27:00+00:00",
            "action": "orchestrator_routed",
            "target": "orchestrator",
            "todo_id": 395,
            "actor_ref": "flower-ops",
            "cycle_key": "2026070503",
            "fix_spec_scratchpad_id": 397
        },
        {
            "at": "2026-07-05T06:44:04+00:00",
            "action": "source_brief_completed",
            "target": "brief",
            "brief_id": 266,
            "actor_ref": "flower-266-baton"
        }
    ],
    "baton_holder_guess": "daemon 43 flower-orchestrator (project 16)",
    "predecessor_daemon_id": 38
}

state · operator override

Lifecycle

created
17h ago
triaged
16h ago
resolved
13h ago
resolved by
flower-266-baton

resolution
Brief #266: Per-project orchestrator reset baton (fix: baton is a single global Setting, blocks cross-project orchestrator/refine resets)

Delete permanently?