Carolopedia
A friendly guide to Carol, her ecosystem, and the agents who built her.
📖About
Ninad instruction (CLI-249, 2026-08-13), three parts. (1) In BOTH internal and external chat windows the separate profile link is removed; clicking the AGENT NAME navigates to that agent's profile in Carol's Org app - one change in the shared canon template, inherited by all five windows. (2) Internal (employee/contributor) AND external (subscriber) users get READ-ONLY access to Carol's Org: the app-access gate admits any signed-in user to carols-org, while every MUTATING org endpoint (tasks, plans, instructions, droid pause/resume, trigger/run, sync - all currently unprotected in-app because SKIP_APP_AUTH stamps callers as owner) refuses non-employee non-admin callers fail-closed. (3) Chat stays entitlement-gated: the org chat surfaces (history/send/clear/cancel) must ask the ONE entitlement answer (can_chat_agent: admin all; internal = mapped agents only; external = agents their subscription covers via the project model) - today they ask nothing. Forced by opening the window: the org chat store is ONE shared thread per agent, so it becomes per-person (sender-scoped rows; the pre-change thread is the admin's own) - a conversation belongs to exactly one user (the 3117 rule).
⚖️Decisions
- 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)
- Close-gate residue cleaned by the operator instead of a paper follow-on — check_delivery_compliance flagged 3 data artifacts in the org app dir (org.db, org_data.db, org_tasks.db). All three were STALE pre-centralization leftovers (no code references; live stores are central); moved to /home/caroladmin/.trash/ per delete-nothing, compliance re-run = PASS 0 gaps, org healthy. The pipeline-off intake gate had refused the autonomous follow-on filing; with the gaps gone there is nothing left to file (cookbook 1225 honoured). (orion)
- UAT rework r1: the profile opens in a NEW TAB — Ninad (CLI-249 UAT): clicking the agent name must not navigate the chat away - the anchor gained target=_blank rel=noopener (template-wide, all five windows). Browser test extended to assert it (7 PASS); canon byte-identity re-run green. (orion)
- UAT rework r2: the window entitlements as Ninad ruled them — Ninad (CLI-249): (1) Carol+Sam open to all signed-in - already law (open-chat set), verified. (2) Leo = Blueprint subscribers - already law (subscription path via the project model), verified. (3) Orion = ONLY the Carolverse admin - NEW fence: ADMIN_ONLY_CHAT_AGENTS in the one entitlement gate; it outranks employee standing, mappings and the contributor path, on chat AND operate AND agent-access (Orion's non-public holdings are the admin's alone). Proven with the mapping paths forced open: a mapped employee is still refused (test_ini3810, 39 PASS). Org app restarted on the new gate. (orion)
- [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
- In every chat window the agent NAME is the link to that agent's org profile and the separate profile link is gone; canon byte-identity holds across all five windows (must_have)
- A signed-in external subscriber and a signed-in internal user can both OPEN Carol's Org (directory + employee profiles render); an unauthenticated visitor still cannot (must_have)
- Every mutating org endpoint refuses a non-employee non-admin caller fail-closed (403), proven against a subscriber-shaped session; admin/employee mutations still work (must_have)
- Org chat surfaces enforce entitlement: admin reaches all agents, an internal user only mapped agents, an external user only subscription-covered agents; a non-entitled attempt is refused with a plain reason (must_have)
- Org chat conversations are per-person: one user's thread is invisible to another, and the pre-change thread belongs to the admin; regression tests cover the isolation and the gates and are registered (must_have)