Carolopedia

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

📖 CarolopediaServicesBuild InitiativesAll activitiesINI-999902781Guide page
📋

CAROL-INI-3861-00: Employee chat turns can never earn a receipt on a text-only lane: the mandatory commit must travel as text where the lane has no tool protocol

Initiative
Open in Initiatives →

📖About

Raised by Ninad (2026-08-15): Clara's internal chat answers every one of his messages with the boundary refusal ('I could not verify an action receipt...'). Root cause, reproduced live: an EMPLOYEE turn attaches the mandatory commit as a NATIVE TOOL (tool_choice required, 3513), but the chat lane runs on Codex, whose adapter carries text only and silently drops the tools kwargs - so the commit tool can never fire, no receipt is ever written, and the fail-closed gate replaces every reply with the refusal. Non-employee conversation works (no boundary), which is why the operator alone was hit, and the previous timeout defect (3838) masked this one. The break dates from the chat lane's move to Codex; native-tool lanes (Claude Code windows, Carol's metered lane) were never affected.

Cure: on lanes with no native tool protocol (codex/deepseek/kimi) the SAME commit contract travels IN THE PROMPT as strict JSON and the parsed commit runs through the SAME executor with the SAME fail-closed receipt - only the transport differs. This is the proven pattern the grounding SQL round already uses on the same lane. An unparseable commit still leaves no receipt and still refuses - fail-closed unchanged.

⚖️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)
  • [rework-plan] reviewer rework (phase 2) added 5 step(s): Address: A live employee turn on Clara's chat returns the agent's real reply (no; Address: The text-carried commit runs through the SAME executor as the native to; Address: Fail-closed preserved: a turn whose reply carries no parseable commit s; Address: Native-tool lanes are untouched: the tools kwargs path is byte-for-byte; Address: A regression test locks the deterministic receipt path (begin turn -> e (ir-s1)
  • [delivery-check] 5 pending must-have criteria stamped met at bypass_end on live re-performance evidence (CAROL-INI-3020): test test_ini3861.py: PASS (4 passed in 0.41s) (orion)
  • [status-router] executing -> reviewing | event=bypass_reviewing | bypass transition (or-bx-01)
  • Close-crash audit trail (operator): the first bypass_end crashed mid-close on a transient activities-DB lock (regression runner running) after recording a phase-1 fail row; the retry completed clean and the LATEST twin verdict is PASS. The stray fail row is the crash artifact, not a grading of the work - the reproduction pair and 4/4 regression test stand. (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 live employee turn on Clara's chat returns the agent's real reply (not the refusal) with a completed respond receipt on the record - reproduced before (refusal) and after (real reply) with the same probe. (must_have)
  • The text-carried commit runs through the SAME executor as the native tool path (one boundary, two transports); side-effecting actions keep their employee gate and authority checks untouched. (must_have)
  • Fail-closed preserved: a turn whose reply carries no parseable commit still produces no receipt and still refuses. (must_have)
  • Native-tool lanes are untouched: the tools kwargs path is byte-for-byte the previous behaviour when the resolved lane supports tools. (must_have)
  • A regression test locks the deterministic receipt path (begin turn -> execute parsed respond commit -> completed receipt -> gate passes the reply) and the lane branch, baselined with zero NEW FAILURE. (must_have)