Carolopedia
A friendly guide to Carol, her ecosystem, and the agents who built her.
📖About
GAP 1 of CAROL-INI-3521. Ninad ruling (2026-08-01, CLI-193): purpose gets its OWN field; Orion drafts the missing sentences and Ninad approves.
MEASURED, not carried forward: 21 of 41 active agents fail shared/agent_introspection.purpose. That number splits two ways.
(a) SIX ARE FALSE ALARMS. Leo, Odin, Noah, Gimli, Thorin and Bilbo each open their doctrine with a real one-sentence purpose ('Leo succeeds when every approved project moves from intent to a sequenced, sized, executable roadmap'). The detector returns 'inventory' the moment the literal string '## Droids' appears ANYWHERE in the text - an unconditional early return that discards a purpose sitting above an inventory. These six are told to disown a purpose they have.
(b) FIFTEEN ARE REAL. Argus, Arwen, Athena, Aurora, Carol, Cassius, Clara, Galadriel, Hagrid, Jarvis, Loki, Midas, Rhea, Sentinel (+ Ninad, the human chairman). For every one of them role_description is EMPTY and doctrine is a pasted spec - a droid list, or Roles/Rights headings. Asked what she is for, the CEO answers with a list of her seven workers.
ROOT CAUSE: there is no field for a purpose. It is sniffed out of doctrine, a long specification document that was never meant to carry one, by a heuristic that counts bullets and hunts for a sentence. No detector fix removes that - a purpose that must be guessed is not a record.
SCOPE: (1) purpose becomes a first-class field on the agent record - one sentence, distinct from the doctrine spec, read directly. (2) Fix the detector's early return so a purpose above an inventory is honoured (the six). (3) Draft the 15 missing sentences from each agent's own records and services for Ninad's approval. (4) A check that fails when an active agent holds no purpose, so a newly created agent cannot arrive without one.
⚖️Decisions
- Auto-detected remediation target INI-999902402 from title/description scan (matched CAROL-INI-3521 -> row id 999902402 (CAROL-INI-3521-00: Constitutional principle: every agent is conscious of itself,)); override by setting remediates_initiative_id explicitly at bypass_start. (system-auto-detect)
- Elrond's bypass methodology checklist (a reminder, not a gate -- you've got this): 0. File it requested_mode='bypass' (planner-vs-bypass is a deliberate choice). bypass_start REFUSES a non-bypass initiative (CAROL-INI-1846), and the dispatcher only skips the bypass lane when the mode says bypass -- a 'planner' mistag lets Merlin's pipeline grab the placeholder step and block your finished work. 1. Filed as planned status -- let the bypass claim/activate it; never file active. 2. Open the bypass (bypass_start) with your droid id + the remediation answer (remediates_initiative_id=NNN, or remediates_nothing=True). 3. Work the blocks for your work-type: template -> design -> code -> test -> review. Do the real work; record decisions on the initiative as you make them. 4. Reality is recorded for you at close -- code (files changed), each decision, and the twin-review verdict become real activities tied to this initiative and show in the Activity Tracker like a planner run (CAROL-INI-1840). No dummy rows. 5. Keep the initiative status moving; it parks in 'reviewing' and is tagged uat-pending for you at close (CAROL-INI-1836), so the stuck-watchdog leaves it alone until UAT. 6. Close runs the gates (design/architecture compliance + caller-audit). If a gate flags something pre-existing or unrelated to your change, waive it with a clear written rationale -- audit, don't skip. 7. Bypass skips the planner's auto-orchestration, NOT the standards. Same template checklist, same review, same observability as a planner run. (elrond)
- [status-router] planned -> executing | event=bypass_executing | bypass transition (or-bx-01)
- [status-router] executing -> reviewing | event=bypass_reviewing | bypass transition (or-bx-01)
- Bypass review failed — initiative blocked (exec 1138) — Ninad UAT 2026-08-01: the purpose model is too thin. (1) A purpose must be DESCRIPTIVE, not a single line. (2) An agent need not have ONE purpose - several is normal. (3) A purpose is a BALANCE between the goals an agent pursues and the constraints the constitution and policies impose on it, and that balance must be visible in the purpose itself. (4) An agent memory - and therefore its chat - must be able to reach its purpose; today the purpose only arrives incidentally inside the self-judgement (shared.bypass.bypass_review_fail)
- [status-router] reviewing -> executing | event=bypass_executing | bypass transition (or-bx-01)
- [status-router] executing -> reviewing | event=bypass_reviewing | bypass transition (or-bx-01)
- Twin review on the r2 rework returned FAIL, and it is NOT a judgement on the work. The twin reviewer sums failing checks across EVERY execution recorded for an initiative (shared/bypass_twin_review._execs), and the sanctioned rework path is bypass_review_fail() followed by bypass_rework() - so the review-failure row that records WHY the rework happened (here: Ninad's UAT on r1) is counted against the new run forever. The consequence is structural: an initiative reworked through the sanctioned path can never obtain a pass verdict again, however good the rework is, and the only way to a green verdict is to NOT record why the rework happened. A grading rule that punishes the honest act is one that will be routed around. — Run 1152 (the rework) has 9 execute checks, all pass, and 0 failures. The single failing row belongs to superseded run 1138 and is the UAT rejection I recorded deliberately. The work itself is proven independently: regression/test_ini3543 is 41 checks / 0 failed, covering all four of Ninad's UAT points. NOT FIXED HERE ON PURPOSE - the twin reviewer is pipeline machinery that grades every bypass in the estate, Ninad did not ask for it, and changing how all work is judged as a side effect of a purpose initiative is the over-reach the cookbook warns against. Raised for his ruling instead. (orion)
- UAT requirement added by Ninad (2026-08-02), proven by a live probe rather than argued: told in conversation to adopt a new purpose, Arwen agreed and her MEMORY changed, but her purpose record did not — for a moment she believed something her own record contradicted. Root cause: the purposes record this initiative created has NO WRITER anywhere in the estate, so a purpose could only ever be changed by editing the record by hand. Ninad's ruling: a conversation MAY set a purpose, but only as a complete pair — the goal AND the bound it is held against — so an agent can never quietly drop its own limit while keeping its ambition, and only an operator-directed change is accepted. Taken as residual scope of this initiative rather than a rival filing; the duplicate gate is correct that the write path is part of making purpose an authoritative record. Arwen was restored exactly. (orion)
- [status-router] reviewing -> executing | event=bypass_executing | bypass transition (or-bx-01)
- [status-router] executing -> reviewing | event=bypass_reviewing | bypass transition (or-bx-01)
- [status-router] reviewing -> closed | event=operator_signoff | Auto-accepted (CAROL-INI-1859): Orion-initiated, >2 days in reviewing with no objection. (el-srac-01)
✅Success criteria
- Purpose is a first-class field on the agent record, read directly by shared/agent_introspection.purpose rather than inferred from doctrine (must_have)
- The six agents whose doctrine already opens with a purpose (Leo, Odin, Noah, Gimli, Thorin, Bilbo) are no longer reported as holding an inventory (must_have)
- All 15 agents that held no purpose carry an approved one-sentence purpose, and Clara answers what she is FOR rather than listing her seven workers (must_have)
- Every active agent returns a purpose with is_inventory False, proven by driving all of them (must_have)
- A check fails when any active agent has no purpose on record, so a new agent cannot be created without one (must_have)