Carolopedia

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

📖 CarolopediaServicesBuild InitiativesAll activitiesINI-999902460Guide page
📋

CAROL-INI-3571-00: Carol's voice returns via Gemini: the exhaustion latch becomes recoverable, and the GPT tracks move off a dead account

Initiative
Open in Initiatives →

📖About

Ninad ruling (2026-08-01, CLI-196). MEASURED FIRST: the OpenAI account ran OUT OF CREDIT around midday today. Billed calls fell 17 (10:00) -> 8 -> 0 -> 3 -> 1 -> silence, and the health check has reported 'openai: DOWN (429 insufficient_quota)' every 15 minutes since. Every agent's nightly thinking, Carol's replies, Scriber's chat and her voice all sit on that dead account, and the provider ringfence means they do NOT fall back to the fleet — by design. So this is no longer a cost exercise: the work is already stopped.

TARGET STATE (Ninad's table):

SPEECH — ROOT CAUSE FOUND, and it is NOT a missing Gemini path. Carol's voice ALREADY prefers Gemini native audio and falls back to OpenAI. What broke it is a ONE-WAY LATCH: on any Gemini quota/key error the code sets an 'exhausted' flag and never clears it, so a single hiccup sends every later voice note to OpenAI for the life of the process. The voice-CALL path resets that flag on each new call ('fresh call, retry gemini'); the WhatsApp voice-note path never does. That asymmetry is why speech was billing OpenAI at all. With OpenAI now dead the latch is fatal: one Gemini blip means no voice, permanently, with no recovery short of an app restart.

SCOPE SPLIT BY WHAT A BYPASS CAN REACH: IN SCOPE HERE - the speech latch. The voice module is writable; the fix is to make exhaustion TIME-BOXED (retry after a cooldown) instead of permanent, in both paths, so Gemini is re-tried rather than abandoned forever. NOT IN SCOPE HERE - the Codex lane. It needs node and npm (absent), the Codex CLI installed (root), an interactive login as Ninad's own ChatGPT account (only Ninad can do that), and a core-install into the protected provider router. Reported, not attempted.

⚖️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] 6 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_ini3571.py: FAIL (no tests ran in 1.20s) (orion)
  • [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

  • Carol can send a voice note again without the OpenAI account, using the Google key she already has. (must_have)
  • One failed speech attempt no longer silences her voice for good — she retries the preferred engine later instead of abandoning it until someone restarts the app. (must_have)
  • Both ways Carol speaks behave the same way about giving up and retrying; neither is left with a rule the other does not have. (must_have)
  • When she genuinely cannot speak, the person still gets the answer as text rather than silence. (must_have)
  • (must_have)
  • What the Codex move still needs from Ninad is written down plainly, so nobody assumes it was done. (must_have)