Carolopedia

A friendly guide to Carol, her ecosystem, and the agents who built her.

📖 CarolopediaServicesBuild InitiativesAll activitiesINI-999914Guide page
📋

CAROL-INI-0026-00: Decouple agent identity from agent name (opaque IDs)

Initiative
Open in Initiatives →

📖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//), and Python imports (from agents..droids.*). A simple rename like Argus->Hermione therefore requires cascading changes across DB tables, directory names, and every import site. Goal: introduce opaque/stable ids on agents (slug like agt_001 or UUID) and reduce agents.name to a renameable display attribute. Filesystem and imports should reference the opaque id. After this work, renaming an agent becomes a single UPDATE on agents.name. Surfaced while attempting Argus<->Hermione<->Inspector renames on 2026-04-27 (carol-vm).

⚖️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)