Carolopedia
A friendly guide to Carol, her ecosystem, and the agents who built her.
📖About
Architectural debt: agents.id is the lowercased agent name ("argus", "inspector"), used as a string FK across droids.owner, designs.agent_ref, filesystem dirs (agents/
⚖️Decisions
- Introduce an opaque stable_id on agents (e.g. agt_001 slug or UUID); reduce agents.name to a renameable display attribute. — Today agents.id is the lowercased name. Renaming cascades across DB rows (droids.owner, designs.agent_ref), filesystem dirs (agents/<id>/), and Python imports. Decoupling makes rename a single UPDATE on agents.name. (Ninad)
- Filesystem dirs and Python imports must reference the opaque id, not the display name. — Without this, renames still cascade through the codebase. The whole point is to make rename a metadata-only operation. (Ninad)
- Block rename projects (Argus->Hermione, Inspector->Argus) behind this initiative. — Surfaced this initiative while attempting those renames on 2026-04-27. Doing renames first would mean doing the cascade work twice. Better to land opaque IDs first, then renames are trivial. (Ninad)
- 7 plan steps: Archon designs the scheme; Forge migrates in 5 steps; Inspector verifies via test renames. — Layered delivery — design first, mechanical migration in stages, verification by exercising the new rename pattern. (Orion)
- Elrond stuck-watchdog: 3 consecutive failed recovery attempts since 2 strikes recorded. Initiative idle past 600s with no live queue row; Albus invoked 3 times without progress. Flipping to blocked and surfacing on operator queue per CAROL-INI-403. (elrond.handover_watchdog)
- CAROL-INI-510 restore: this initiative was wrongly flipped to 'blocked' by elrond.handover_watchdog Gap D, which treated status='planned' as 'stuck'. INI-510 removes 'planned' from the watchdog's status scan; planned means filed-and-waiting-for-operator-dispatch, not stuck. Status restored to 'planned'. (ninad)
- Handover-watchdog: gap-H dispatched planned bypass INI 999914. (elrond)
- 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)
- [status-router] planned -> discarded | event=operator_bulk | test (orion)
- [status-router] discarded -> closed | event=operator_put | PUT /api/initiatives (operator)
✅Success criteria
- agents table primary key is stable_id, not name (must_have)
- All FKs (droids.owner, designs.agent_ref) point at stable_id (must_have)
- All filesystem dirs use stable_id; all imports use stable_id (must_have)
- Test rename (Argus->Hermione) works as a single UPDATE on agents.name with no cascading file/code changes (must_have)
- Inspector verification confirms the test rename leaves the system functional end-to-end (must_have)