Carolopedia

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

📖 CarolopediaServicesBuild InitiativesAll activitiesINI-999902474Guide page
📋

CAROL-INI-3581-00: Gemini carries speech as well as pictures, and the page must say so — a lane that names a droid which never runs, and an in-use light that does not mean what the legend says

Initiative
Open in Initiatives →

📖About

Ninad, 2026-08-02: the Gemini box on Carol Intelligence shows ONE track, Media Generation, and that one reads inactive. Both halves are real defects and neither is about Gemini.

(1) THE IN-USE LIGHT DOES NOT MEAN WHAT THE LEGEND SAYS. The page states '● = model seen in the cost log'. The code lights a model when the block's DROID was seen making any call at all — never checking the model. So Nano Banana reads standby after 71 recorded generations. Every one of the 72,242 ledger rows carries both a caller and a model, so the exact claim is available: this droid ran this model.

(2) THE MEDIA LANE NAMES A DROID THAT HAS NEVER RUN. Membership is derived from one process name, which resolves to a single droid that appears nowhere in the ledger. The real generating is done by Scriber's story droid (71 Nano Banana calls), the Carolverse generator and four agents calling the image path directly. The lane is therefore watching nobody, which is why the block cannot light however busy it is.

(3) SPEECH IS DRAWN NOWHERE AT ALL. It has no BLOCK, and blocks are the only thing the page draws, so neither the Gemini half nor the OpenAI half appears. The same is true of the Image & Video track under Agent Resources.

(4) SPEECH SPEND IS ANONYMOUS. 11 of the 13 speech rows carry no caller, so the charge can be attributed to no agent and no block. The recorder already accepts the speaking agent; the synthesis paths simply never pass it. Cookbook 1020: every unit of work carries a ticket saying what it is FOR.

⚖️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)
  • [delivery-check] 5 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_ini3581.py: FAIL (no tests ran in 2.76s) (orion)
  • [status-router] executing -> reviewing | event=bypass_reviewing | bypass transition (or-bx-01)
  • POST-CLOSE ADDITION, recorded here so UAT covers it. After this bypass closed twin-PASS, Ninad ruled on the last open finding: IMAGE GENERATION IS CENTRALISED WITH SCRIBER. Every service asks him for its pictures, so every picture bills SCRIBER'S image-and-video track whoever asked — which also answers why Gemini need not list every service: no other service buys from Gemini any more. Shipped by moving the media work ticket into the image GENERATOR, the one door every caller passes through; the ticket already existed and had been wired into exactly one droid. Proven from four askers (Orion's Author, Clara's encyclopaedia generator, Scriber's story composer, and a call naming nobody) — all four now resolve to the image track. The asker is still named on the row so demand stays visible; only the money centralises. DELIBERATELY NOT DONE: droid ownership was left alone. Clara's encyclopaedia generator and Orion's Author are writers who need a picture, not image droids; moving them to Scriber would make him accountable for work he cannot judge and would collapse 'who is accountable' back into 'what the money is for' — the very rule this initiative separated. Both compliance checks read clean afterwards and every affected test passes. (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

  • A model reads in use only when THAT model was actually seen being run by a droid of that block, proven against the ledger — not when the droid was seen running something else, and not when someone else ran that model. (must_have)
  • Media Generation reads active while the ledger holds real image generations, and Veo keeps reading standby because no video generation has ever been recorded — an honest dark light is a pass, a lit one for unrun work is a failure. (must_have)
  • The media lane names the droids that actually generate, proven by every Gemini image caller in the ledger resolving into the lane. (must_have)
  • Speech renders as its own block on its own governed track, showing the Gemini preferred engine and the OpenAI fallback as the two subscriptions it really rides. (must_have)
  • A speech charge names the agent that spoke, so the Speech track's spend can be attributed; no new anonymous speech row is written after this change. (must_have)