{"record":{"id":"d2c36bddc6e53a1c","repo":"Hmbown/CodeWhale","slug":"repl-kernel-initialized-above","errorCode":null,"errorMessage":"REPL kernel initialized above","messagePattern":"REPL kernel initialized above","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/tui/src/core/engine/turn_loop.rs","lineNumber":1673,"sourceCode":"                    if self.repl_kernel.is_none() {\n                        self.repl_kernel = match crate::repl::runtime::PythonRuntime::new().await {\n                            Ok(runtime) => Some(runtime),\n                            Err(e) => {\n                                let _ = self\n                                    .tx_event\n                                    .send(Event::status(format!(\"REPL init failed: {e}\")))\n                                    .await;\n                                turn_error = Some(format!(\"REPL init failed: {e}\"));\n                                break;\n                            }\n                        };\n                    }\n\n                    let kernel_context = self.repl_kernel_context();\n                    let refresh_result = self\n                        .repl_kernel\n                        .as_mut()\n                        .expect(\"REPL kernel initialized above\")\n                        .replace_context(&kernel_context)\n                        .await;\n                    if let Err(e) = refresh_result {\n                        // A broken subprocess cannot be trusted to retain\n                        // state. Drop it so a later model step gets a clean,\n                        // freshly bootstrapped kernel instead of repeating a\n                        // hidden failure.\n                        self.repl_kernel = None;\n                        let _ = self\n                            .tx_event\n                            .send(Event::status(format!(\"REPL context refresh failed: {e}\")))\n                            .await;\n                        turn_error = Some(format!(\"REPL context refresh failed: {e}\"));\n                        break;\n                    }\n\n                    // Child queries use the same object-safe client as the\n                    // root turn. This follows the user-selected provider and","sourceCodeStart":1655,"sourceCodeEnd":1691,"githubUrl":"https://github.com/Hmbown/CodeWhale/blob/0c42157ee52f9d55af2b506d71b46249910f77d3/crates/tui/src/core/engine/turn_loop.rs#L1655-L1691","documentation":"The REPL execution path expects self.repl_kernel to be Some because the kernel is initialized earlier in the round (with a failure path that breaks out of the turn on error). Hitting the expect means execution continued past kernel initialization without it — a control-flow bug in the turn loop.","triggerScenarios":"Thrown at crates/tui/src/core/engine/turn_loop.rs:1673 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Ensure the early-return/break on REPL init failure covers every path that reaches execution","Re-check the lazy-init condition guarding kernel creation"],"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"}