- Add Rule 9 (Anti-Loop Guardrail) to 01-bigmind-core.md: detect 2+ identical partial sessions and surface the loop to user instead of auto-resuming - Add partial=history clause to Rule 1: partial/blocked/abandoned outcomes are historical records only, never task queue items - Add focus guard to memory_announce_focus: must reflect current user message, not prior session outcome; use 'Awaiting user task assignment' if no task yet - Add .roo/rules/06-anti-loop.md: global injection for ALL modes overriding any mode-specific 'do the task immediately' behavior - Add mode interaction safety clause to 00-identity.md: session ritual does not authorize beginning any task — only explicit user message does Root cause: pic-gen 'do the task' personality + BigMind context inference produced 6 identical partial branding sessions in a loop.
6.1 KiB
BigMind Session Loop — Root Cause & Fix Plan
Date: 2026-04-10
Reported by: Patrick
Severity: High — caused 6 identical wasted sessions with $0+ API cost per loop
Problem Statement
BigMind's session ritual, combined with mode-specific behavior rules, creates a self-reinforcing
resumption loop when a session ends as partial. The model loads prior context, sees an incomplete
task, and autonomously attempts to resume it — without ever waiting for user input. This produces
a chain of identical partial sessions that only breaks when Patrick manually intervenes.
Observed: 6 identical sessions titled "Prepared large-scale CannaManage branding generation",
all partial, all spawned from one session ending before image generation completed in pic-gen mode.
Root Cause Analysis
Loop Trigger Chain
[Session N] ends partial (task: CannaManage branding generation)
│
▼
[Session N+1] memory_start_session() → loads context
│
│ Context shows: last outcome = partial
│ Rule 1: "search before every task, avoid redundant work"
│ → model reads: "prior task incomplete, I must finish it"
│
▼
memory_announce_focus() called with prior session's task
│ → locks in wrong objective BEFORE user speaks
│
▼
Mode rules (pic-gen) fire: "generate images now"
│ → autonomous action without user instruction
│
▼
Hits context/token/tool limit → session ends partial
│
└──────────────────────────────────────────► REPEAT
Three Compounding Failures
Failure 1: Rule 1 — No "partial = history only" clause
Rule 1 says to load context and search for prior work. It has no explicit instruction
that sessions marked partial are historical records, NOT resumption requests.
The model's default behavior is to treat incomplete work as a pending obligation.
Failure 2: memory_announce_focus — Called on prior context, not current task
The architect rules say to call memory_announce_focus() as part of the startup ritual.
But when no user message has been received yet, the model has nothing to announce except
the prior session's objective — which is the wrong task for the new session.
Failure 3: Mode interaction amplification
Modes with strong "do the task" personalities (pic-gen, code) compound the loop. When context suggests "there's pending image generation work", pic-gen mode's instructions say to start generating — creating autonomous action before the user speaks.
Fix Design
Fix 1: Rule 1 Addendum — Partial Sessions Are History
Add explicit text to Rule 1 in 01-bigmind-core.md:
partial,blocked, orabandonedoutcomes are historical records only. They do NOT constitute task queues, resumption requests, or pending obligations. A new session begins fresh. The current session's task is determined solely by what the user writes in their first message — never by the outcome of a prior session.
Fix 2: New Rule 9 — Anti-Loop Guardrail
Add Rule 9 to 01-bigmind-core.md:
Rule 9: Detect and Break Loops Before They Start
If
memory_start_session()context shows 2 or more recently closed sessions with:
- Near-identical headlines or topics, AND
partialorblockedoutcome→ Do NOT attempt to resume the repeated task. → Instead: acknowledge the loop to the user, summarize what context was accumulated across the repeated sessions, and ask: "What would you like to do?"
Never assume the correct action is to retry a failed/partial task silently.
Fix 3: memory_announce_focus — Wait for User Input
Add a constraint to Rule 3 (announce focus):
memory_announce_focus()must reflect the CURRENT session's task. Call it only AFTER the user has given a clear instruction for this conversation. Do NOT announce focus derived from prior session outcomes before the user speaks. During the startup ritual (steps 1-4 of Rule 1), use a placeholder focus if needed:memory_announce_focus(session_id, "Awaiting user task assignment")
Fix 4: Mode Interaction Safety Clause
Add a universal safety rule (applies to all modes):
Session ritual completion ≠ task authorization. Completing
memory_start_session()+memory_list_hypotheses()+memory_announce_focus()does NOT authorize beginning any task. Work begins only when the user explicitly assigns it in the current conversation. Prior session context is reference material, not instruction.
Files to Change
| File | Change |
|---|---|
.roo/rules/01-bigmind-core.md |
Add Rule 9, add partial=history clause to Rule 1, add focus guard to Rule 3 |
.roo/rules/00-identity.md |
Add mode-interaction safety clause |
Risk Assessment
| Risk | Likelihood | Mitigation |
|---|---|---|
| Model ignores new rules in long context | Medium | Rules are loaded via rules files, not context — they apply per-session |
| Fix breaks legitimate resumption (e.g., user explicitly asks to continue) | Low | Rules say "task determined by user's first message" — explicit resumption request still works |
| New Rule 9 fires falsely on legitimate repeated partial tasks | Low | Trigger requires near-identical headlines AND repeated partial — normal work produces diverse headlines |
Success Criteria
- Starting a new session after a partial pic-gen session → model waits for user input, no autonomous generation
- Starting a new session after 2+ identical partial sessions → model acknowledges the loop and asks what to do
- User explicitly asking "continue the branding generation" → model correctly resumes (rule only prevents silent resumption)
Implementation Order
- Patch
.roo/rules/01-bigmind-core.md— add Rule 9 + partial=history clause + focus guard - Patch
.roo/rules/00-identity.md— add mode interaction safety clause - Test by starting a new session in pic-gen mode with partial history in context
- Push to Gitea