Carol — back to Apps ← Apps

Carolopedia

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

📖 CarolopediaServicesBuild InitiativesAll activitiesINI-999900652
📋

CAROL-INI-2223-01: RSI pipeline loop: block-triggered instead of hourly + strict once-per-initiative dedup

Initiative
Open in Initiatives →

📖About

Convert Elrond RSI improvement engine from hourly cron to block-event triggered: the status router fires the loop when an initiative becomes blocked. Make per-blocked-initiative diagnosis strictly idempotent (the RSI-diagnosed marker means never diagnose that initiative again, dropping the re-block re-diagnosis clause). Keep the three-mode lane loop (orion_bypass/albus_bypass/planner) and the re-dispatch/monitor steps, backstopped by a daily safety run for the fix-close tail. Debounce concurrent triggers with a lockfile. Add two cookbook requirement entries.

⚖️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)
  • Follow-on to parent INI 999900464 (orion)
  • Scope inherited verbatim from parent INI 999900464 per CAROL-INI-361. (elrond.initiative_author)
  • Validator-refinement (CAROL-INI-509): Refined criterion 7 (RSI tab removal): present-day Monitor shows no RSI tab exists; changed to 'no RSI tab removal needed as the RSI tab does not currently exist'. (elrond.initiative_author)
  • Validator-refinement (CAROL-INI-509): Refined criterion 11 (retire old trigger): present-day state shows no lane-score auto-filing; changed to 'replaces the obsolete block-event trigger (no lane-score auto-filing) which is absent from present-day state'. (elrond.initiative_author)
  • Validator round 2 still flagged 1 items — operator review needed (CAROL-INI-509). (elrond.initiative_validator)
  • [status-router] planned -> dispatched | event=dispatch | RSI: auto-promoted bypasses depth limit (CAROL-INI-2198) (spb-01)
  • Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
  • Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
  • Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
  • Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
  • Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
  • Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
  • Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
  • Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
  • Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
  • Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
  • Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
  • Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
  • Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
  • Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
  • Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
  • Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
  • Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
  • Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
  • Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
  • Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
  • Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
  • Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
  • Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
  • Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
  • Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
  • Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
  • Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
  • Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
  • Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
  • Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
  • Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
  • Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
  • Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
  • Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
  • Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
  • Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
  • Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
  • Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
  • Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
  • Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
  • Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
  • Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
  • Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
  • Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
  • Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
  • Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
  • Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
  • Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
  • Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
  • Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
  • Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
  • Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
  • Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
  • Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
  • Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
  • Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
  • Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
  • Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
  • Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
  • Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
  • Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
  • Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
  • Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
  • Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
  • Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
  • Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
  • Gap J (CAROL-INI-771): stuck-dispatched with queue.status='no-queue-row'; flipped to blocked so Escalation card surfaces it. Reason: (elrond.handover_watchdog)
  • [status-router] dispatched -> blocked | event=stuck_10min_no_activity | Elrond safety net: initiative has had no activity for 10+ minutes. Blocking under the parallel safety mechanism. (el-watchdog)
  • Elrond blocked initiative under the CAROL-INI-2162 dead-Albus protocol. Albus was supposed to wake for step 0 (cause=albus_no_show) but did not respond. Cause: albus_no_show. Reason: Elrond safety net: initiative stranded 10+ min. Albus wake failed or produced no useful result. (el-s1)
  • Orion remediated: Albus RSI group diagnosis (via INI 999900522): [procedural, confidence high] The initiative was repeatedly retracted from the dispatch queue before Albus could execute step 0, then left in 'planned' status with no further dispatch attempt, causing the Elrond 10-minute inactivity safety net to trigger. The execution history is empty, confirming Albus never started work. This is a procedural failure: the dispatching system repeatedly queued and retracted the initiative without ever holding it long enough for an operator push or automated executor wake-up, and after the final retraction (orion)
  • [status-router] blocked -> closed | event=operator_put | PUT /api/initiatives (operator)
  • [rsi-group-cure] Cured by the group diagnosis on INI 999900522 (shared cause stuck_10min_no_activity); retriggered as INI 999900848. Root cause: [procedural, confidence high] The initiative was repeatedly retracted from the dispatch queue before Albus could execute step 0, then left in 'planned' status with no further dispatch attempt, causing the Elrond 10-minute inactivity safety net to trigger. The execution history is empty, confirming Albus never started work. This is a procedural failure: the dispatching system repeatedly queued and (elrond.rsi_loop)

Success criteria

  • The RSI improvement engine is triggered whenever an initiative transitions to blocked (via the status router), not on an hourly schedule. (must_have)
  • A blocked initiative that has already been RSI-diagnosed once is never diagnosed again on a later trigger (strict marker-based dedup). (must_have)
  • The loop still covers all three pipeline modes: Orion bypass, Albus bypass, and planner. (must_have)
  • Concurrent block events do not stack duplicate engine runs (debounced), and every run is run-audited so the Daily Process Sweep can see it. (must_have)
  • Two new cookbook entries document the block-triggered rule and the once-per-initiative dedup rule. (must_have)
  • Within 5 minutes of the loop running with blocked initiatives present, the oldest-blocked initiative visibly moves to a new diagnosis status and an Albus diagnosis bypass opens for it (must_have)
  • The initiatives app no longer shows an RSI tab; the Monitor tab shows a Diagnosis card containing the initiative currently under diagnosis (must_have)
  • When a diagnosis completes, the initiative is re-triggered through the standard attempt process carrying the diagnosis recommendations, appears in the dispatch queue, and follows the regular route to Current Execution (must_have)
  • At no point are two initiatives in diagnosis simultaneously - the loop visibly skips while a diagnosis is in progress (must_have)
  • When a re-triggered initiative executes, the Albus troubleshooting prompt contains the diagnosis history for that initiative (must_have)
  • The cookbook describes the new RSI machinery and the old block-event trigger and lane-score auto-filing are retired from the running system (must_have)