Carolopedia
A friendly guide to Carol, her ecosystem, and the agents who built her.
📖About
Ninad: Scriber still has no knowledge of his own activities. Asked how many videos he typically posts in a day he answered that the live record 'has no value'. Three faults sit behind that one answer.
1. HIS VIDEO LEDGER IS NEVER WRITTEN. The daily composer records a rendered video only as a url on the story row and never inserts the story_videos row that is supposed to be the record of it. The Logbook page still shows the videos because it synthesises a legacy entry from that url when the table is empty - so the surface looked right while the ledger stayed at zero rows, and nobody noticed. The grounding notes point the model straight at that empty table, so Scriber counted his own published work and got none.
2. NO AGENT CAN READ ITS OWN ACTIVITY RECORD. Grounding gives an agent the data of the apps it OWNS. Scriber does not own the activity tracker, so his own runs - the deeds recorded under his own name - are invisible to him. The constitution's self-knowledge duty (cookbook 1062) says an agent knows its own ledger and deeds; an agent reading its OWN rows is strictly less than the supervisor rule already allows.
3. GROUNDING FAILS SILENTLY. When the grounding query cannot run at all - the lane refused on budget, the call errored, the model returned nothing - grounding returns an empty string, which is indistinguishable from 'the records hold nothing'. The agent then answers as though it had consulted its records and found them wanting. A read that could not happen is not a read that found nothing, and the agent must say which one it was.
⚖️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)
- Current state at filing (Elrond validity check): Scribe and Ledger are both running. The specific defects described—story_videos rows never written, agents unable to read their own activity rows without owning the tracker, and grounding failures returning empty strings—are not shown as resolved by any recently closed initiative. (elrond)
- [status-router] planned -> executing | event=bypass_executing | bypass transition (or-bx-01)
- [delivery-check] 7 must-have criteria remain pending at bypass_end — delivery FAILED live re-performance; UAT must grade on live evidence, not checklist silence (CAROL-INI-3020): test test_ini3545.py: FAIL (no tests ran in 1.93s) (orion)
- [status-router] executing -> reviewing | event=bypass_reviewing | bypass transition (or-bx-01)
- Record the video where every story save passes, not in the composer — The daily composer wrote the video only as a url on the story row, and the page synthesised a legacy entry whenever the ledger was empty - so the surface looked right while the record stayed at zero rows and nobody noticed for the life of the feature. Writing it at the shared save means no future composer can forget. (orion)
- An agent's own deeds are written by code onto every turn, not fetched by a generated query — Grounding gives an agent the apps it OWNS, and nobody owns their own history. A code-written block with the agent id bound cannot be talked into widening, and is present even when the generated lookup cannot run at all - which is exactly when an agent most needs to know what it did. (orion)
- A read that could not happen must never look like a read that found nothing — Both returned an empty string, so a budget refusal reached Scriber as silence and he described a record he had never seen. The two outcomes now carry different words, and the could-not-run case forbids him from stating what the records hold. (orion)
- [agt_036.mind] dispatched my droid ob-uat-01 (sequence next): Run first-pass acceptance testing for CAROL-INI-3545-00: verify an agent can write Scriber video ledger entries, that each agent can read its own activity record, and that grounding failures do not fail silently. Reproduce behaviour in UI/API, capture screenshots/logs/timings, confirm the rule is written where policy/cookbook lives if required, compare implementation shape to existing ledger/accounting templates, flag any bespoke access-control or new architecture, and produce an accept/reject verdict with recommended next step (fix, reuse template, or escalate). — My discipline is one concrete dispatch per wake, oldest-first; this moves reviewing forward, produces evidence about architecture shape, and prevents me inventing new templates unnecessarily. (agt_036.mind)
- [agt_036.mind] dispatched my droid ob-uat-01 (sequence next): Run a first-pass acceptance test for CAROL-INI-3545-00: verify an agent can write Scriber video ledger entries, each agent can read its own activity record, and grounding failures do not fail silently; reproduce behaviour via UI/API, capture screenshots/logs/timings, confirm any required rule is written in cookbook/policies, compare implementation shape to existing ledger/accounting templates, flag any bespoke access-control or new architecture, and produce an accept/reject verdict with recommended next step (fix, reuse template, or escalate). — My duty is to produce the HOW and to review architecture before initiatives are filed; my discipline is one concrete UAT, oldest-first, so dispatching ob-uat-01 against CAROL-INI-3545-00 is the highest-value next step and will surface any template mismatches or bespoke architecture. (agt_036.mind)
- [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
- Every video Scriber renders is recorded in his video ledger as it is produced, so the ledger and the published files agree (must_have)
- The videos already published are backfilled into the ledger, and counting the ledger matches counting the mp4 files on disk (must_have)
- Asking Scriber how many videos he has published, or on which days, is answerable from his own records rather than refused (must_have)
- Scriber can read his OWN rows in the activity record - his runs, under his own name - without owning the activity tracker (must_have)
- An agent reading its own activity record still cannot read another agent's rows through that route (must_have)
- When the grounding read cannot run at all - refused, errored or empty from the model - the agent is told that explicitly and says it could not consult its records, instead of answering as if it had (must_have)
- A grounding read that ran and genuinely found nothing is still reported as 'nothing on record', kept distinct from the could-not-run case (must_have)