{"record":{"id":"a98f8274a67cf531","repo":"Hmbown/CodeWhale","slug":"a-fresh-automatic-compaction-id-cannot-be-pre-canc","errorCode":null,"errorMessage":"a fresh automatic compaction id cannot be pre-canceled","messagePattern":"a fresh automatic compaction id cannot be pre-canceled","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/tui/src/core/engine/turn_loop.rs","lineNumber":724,"sourceCode":"                billed_input_tokens,\n            ) {\n                Some(self.prepare_compaction_envelope(auto_compaction_config))\n            } else {\n                None\n            };\n\n            if let Some(prepared) = prepared\n                && crate::compaction::should_compact_with_billed(\n                    &self.session.messages,\n                    self.session.system_prompt.as_ref(),\n                    &prepared,\n                    billed_input_tokens,\n                )\n            {\n                let compaction_id = format!(\"compact_{}\", &uuid::Uuid::new_v4().to_string()[..8]);\n                let compaction_cancel = self\n                    .claim_compaction(&compaction_id)\n                    .expect(\"a fresh automatic compaction id cannot be pre-canceled\");\n                self.emit_compaction_started(\n                    compaction_id.clone(),\n                    true,\n                    \"Auto context compaction started\".to_string(),\n                )\n                .await;\n                let auto_messages_before = self.session.messages.len();\n                let auto_tokens_before = self.estimated_input_tokens();\n                let turn_cancel = self.cancel_token.clone();\n                let (compaction_result, turn_was_canceled) = tokio::select! {\n                    biased;\n                    _ = turn_cancel.cancelled() => (None, true),\n                    _ = compaction_cancel.cancelled() => (None, false),\n                    result = compact_messages_safe(\n                        client.as_ref(),\n                        &self.session.messages,\n                        self.session.system_prompt.as_ref(),\n                        &prepared,","sourceCodeStart":706,"sourceCodeEnd":742,"githubUrl":"https://github.com/Hmbown/CodeWhale/blob/0c42157ee52f9d55af2b506d71b46249910f77d3/crates/tui/src/core/engine/turn_loop.rs#L706-L742","documentation":"When auto-compaction starts, a freshly generated compaction id is expected to never appear in the pre-canceled set, so the code asserts that a cancel-check on it is false. Firing would mean id generation collided or cancellation state leaked across turns — an internal logic bug.","triggerScenarios":"Thrown at crates/tui/src/core/engine/turn_loop.rs:724 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Verify canceled-compaction ids are cleared per turn","Check for uuid collisions or reuse of a stale compaction id"],"exampleFix":null,"handlingStrategy":"type-guard","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"0c42157ee52f9d55af2b506d71b46249910f77d3","analyzedAt":"2026-08-20T21:50:45.477Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}