Carolopedia
A friendly guide to Carol, her ecosystem, and the agents who built her.
📖About
GAP: executions created via POST /api/executions with checklist_type != S1 land in status=planning and never auto-dispatch. The auto-trigger in plan_generator.create_execution only fires SP-01 for S1 type. Step-level executions added in Gap 19 (executions.step_id, task_kind=main/dependency) bypass S1 entirely but inherited no auto-approve path. Watchers (Elrond/Merlin/Albus) only react to session_events emitted by running droids — they never see new executions.
SCOPE: Give Elrond watcher the kickoff role for step-level executions. Elrond polls executions WHERE status=planning AND step_id IS NOT NULL. For each, evaluate gates (initiative is active, plan step is pending or in_progress, budget remaining, owner has executor droid). If all pass, POST /api/executions/{id}/approve. Log decision to elrond_watch_decisions with kind=kickoff. This makes Elrond the L1 autonomous dispatcher for non-S1 work, in line with the canonical 4-watcher model.
GATES: (1) initiative.status in (active, reviewing). (2) initiative_plans row exists for step_id and status != done. (3) execution.created_at older than 30s (debounce — avoid racing with the creator). (4) max 3 active step-level execs per initiative (prevents runaway). (5) per-initiative budget remaining > 0.
NON-GOALS: not changing the create_execution endpoint behaviour. Not touching SP-01 cascade (that is INI-13 Gap 2). Not building new gates beyond the 5 above.
VERIFICATION: kick off INI-026 step 1 (Archon design) without manual approve. Watch monitor go live. Same for INI-026 step 2 (Forge migration) once design is done.
⚖️Decisions
- Give Elrond watcher the kickoff role for step-level executions. — Step-level execs (added in Gap 19) had no auto-trigger path. Elrond is the L1 autonomous dispatcher per the canonical 4-watcher model — natural fit. (Ninad)
- Elrond polls executions WHERE status=planning AND step_id IS NOT NULL. — Only step-level execs need this trigger; S1 execs already have their own trigger. step_id IS NOT NULL distinguishes the two. (Orion)
- Gates: initiative active, plan step pending/in-progress, budget remaining, owner has executor droid, age ≥ 30s (debounce), max 3 active step-level execs per initiative. — Each gate prevents a known failure mode (closed initiative, stale plan, budget overrun, missing executor, race with creator, runaway parallelism). (Ninad)
- Log every decision to elrond_watch_decisions with kind=kickoff. — Auditability — every autonomous dispatch should leave a trace. (Orion)
- requester rewritten ninad -> orion per CAROL-INI-744: orion is the only human-CLI requester — Backfill of historical rows after INI744 added API-level refusal of requester=ninad. Orion is Ninads CLI agent; all human-originated initiatives are filed with requester=orion. (orion)