Carolopedia
A friendly guide to Carol, her ecosystem, and the agents who built her.
📖About
A seeing-stone for the build pipeline. One narrative feed per initiative showing every activity Elrond's team performs, narrated 3rd-person in each agent's voice.
SCOPE: Only build-pipeline activities. Agents posting: Elrond + his droids (sp-01, bg-s1, ir-s1, ip-s1, dp-s2, pm-s1, pv-s1, po-s1, tp-ar-02), Merlin + his droids (sq-01, tp-ar-01, sr-01, sr-02, ms-01, builder, scanner), Sage (team-member on plan + diagnostic work), Forge (ex-dev-01), Argus (pe-dev-01), Midas (CI-S1 cost estimator + Treasurer role), Albus (oversight/escalation). Non-pipeline Carol activity is excluded.
NARRATION RULES: (1) 3rd-person agent voice, each agent speaks in their defined character — Elrond stately, Merlin orchestration-focused, Sage analytical, Forge builder-energy, Argus sharp/terse, Midas money-minded, Albus professorial, Orion deadpan. (2) Short plain-English sentences. No jargon. Humour/sarcasm allowed when it fits personality + situation. (3) 1-to-1 correlation with rows in agent_activities / droid_runs / handshake_requests — every activity produces exactly one post, but the post is a narrated summary, not a row dump. (4) Posts appear in the exact sequence the activities were performed.
ELROND BOOKEND POSTS: On initiative open, Elrond posts the premise — roadmap references, objective, CI-S1 budget estimate, high-level plan. On initiative close, Elrond posts the summary — final status, quality feedback, budget feedback (estimate vs actual).
BYPASS RULE: If the initiative is running under bypass, only Orion narrates. No other agent posts.
PROFILE PICS: Each agent has a profile pic uploaded under /static/avatars/
STACK: FastAPI + SQLite + Tailwind, mobile-first, dark glassmorphism theme to match the Carol ecosystem. Port 7169.
OWNER: Elrond.
⚖️Decisions
- Follow-on to parent INI 999900422 (orion)
- Scope inherited verbatim from parent INI 999900422 per CAROL-INI-361. (elrond.initiative_author)
- Validator-refinement (CAROL-INI-509): Refined All listed agents have profile pics rendered alongside their posts -> Agents with explicit droid ownership per agent roster have profile pics rendered alongside their posts because cookbook #47 mandates opaque agent IDs and the agent roster lists only 9 named agents; profile pics must be mapped to droid owners. (elrond.initiative_author)
- Validator-refinement (CAROL-INI-509): Refined App reachable at carol-vm:7169 and registered in registry.db apps table -> App reachable at configured port and registered in registry.db apps table because port 7169 is unregistered in registry.db (currently 0 apps) and may conflict; cookbook #253 requires registration and start.sh rendering. (elrond.initiative_author)
- Validator-refinement (CAROL-INI-509): Refined criterion: 'registered in registry.db apps table' -> 'registered in the registry per cookbook #253' because registry.db apps table is stale; apps are registered per cookbook #253. (elrond.initiative_author)
- Validator-refinement (CAROL-INI-509): Refined step description for 'Generate profile pictures...' to use registry descriptions instead of identity.md, because identity.md is derived from registry per cookbook #29. (elrond.initiative_author)
- Validator round 2 still flagged 4 items — operator review needed (CAROL-INI-509). (elrond.initiative_validator)
- [status-router] planned -> dispatched | event=dispatch | RSI: auto-promoted bypasses depth limit (CAROL-INI-2198) (spb-01)
- Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
- Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
- Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
- Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
- Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
- Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
- Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
- Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
- Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
- Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
- Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
- Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
- Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
- Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
- Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
- Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
- Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
- Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
- Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
- Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
- Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
- Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
- Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
- Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
- Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
- Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
- Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
- [status-router] dispatched -> blocked | event=stuck_10min_no_activity | Elrond safety net: initiative has had no activity for 10+ minutes. Blocking under the parallel safety mechanism. (el-watchdog)
- Elrond safety net blocked initiative: no activity for 10+ minutes. Parallel mechanism (twin of handshake). (el-watchdog)
- Elrond blocked initiative under the CAROL-INI-2162 dead-Albus protocol. Albus was supposed to wake for step 0 (cause=albus_no_show) but did not respond. Cause: albus_no_show. Reason: Elrond safety net: initiative stranded 10+ min. Albus wake failed or produced no useful result. (el-s1)
- Orion remediated: Albus RSI group diagnosis (via INI 999900502): [procedural, confidence high] The Albus executor did not wake to process step 0 of the initiative after dispatch (albus_no_show), leaving it idle with no execution history until the Elrond safety net blocked it after 10 minutes of inactivity. This is a procedural failure consistent with a systemic pattern where Albus fails to respond to dispatch events, as confirmed by the empty execution history and the dead-Albus protocol decision. (orion)
- [status-router] blocked -> closed | event=operator_put | PUT /api/initiatives (operator)
- [rsi-group-cure] Cured by the group diagnosis on INI 999900502 (shared cause stuck_10min_no_activity); retriggered as INI 999900832. Root cause: [procedural, confidence high] The Albus executor did not wake to process step 0 of the initiative after dispatch (albus_no_show), leaving it idle with no execution history until the Elrond safety net blocked it after 10 minutes of inactivity. This is a procedural failure consistent with a systemic pattern where Albus fails to respond to dispatch events, as confirmed by the empty execution history (elrond.rsi_loop)
✅Success criteria
- Run a sample initiative end-to-end; the feed shows one post per agent activity in correct chronological order (must_have)
- Each post identifies the agent, uses their voice (subjective check by Ninad) (must_have)
- Bypass-flagged initiative produces only Orion-authored posts (must_have)
- Initiative open and close both produce Elrond bookend posts (must_have)
- All listed agents have profile pics rendered alongside their posts (must_have)
- App reachable at carol-vm:7169 and registered in the registry per cookbook #253 (must_have)