{"record":{"id":"118a86bead3ec8e5","repo":"Hmbown/CodeWhale","slug":"error","errorCode":null,"errorMessage":"{error}","messagePattern":"\\{error\\}","errorType":"exception","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"crates/lane/src/runtime.rs","lineNumber":1110,"sourceCode":"        registry: &LaneRegistry,\n        record: &mut LaneRecord,\n        _spec: &LaneStartSpec,\n    ) -> Result<()> {\n        let error = format!(\n            \"{} runtime is not implemented; use tmux or inline\",\n            self.kind.as_str()\n        );\n        append_log_event(\n            &record.log_path,\n            serde_json::json!({\n                \"type\": \"lane_failed\",\n                \"lane_id\": record.id,\n                \"runtime\": self.kind.as_str(),\n                \"error\": &error,\n            }),\n        )?;\n        let _ = registry.mark_terminal_if_active(record, LaneStatus::Failed)?;\n        bail!(\"{error}\")\n    }\n\n    fn attach_command(&self, _record: &LaneRecord) -> Option<String> {\n        None\n    }\n\n    fn stop(\n        &self,\n        registry: &LaneRegistry,\n        record: &mut LaneRecord,\n        fence: Option<u64>,\n    ) -> Result<TerminalTransition> {\n        registry.mark_terminal_if_active_fenced(record, LaneStatus::Stopped, fence, |_| Ok(()))\n    }\n}\n\nfn shell_escape(s: &str) -> String {\n    format!(\"'{}'\", s.replace('\\'', \"'\\\\''\"))","sourceCodeStart":1092,"sourceCodeEnd":1128,"githubUrl":"https://github.com/Hmbown/CodeWhale/blob/0c42157ee52f9d55af2b506d71b46249910f77d3/crates/lane/src/runtime.rs#L1092-L1128","documentation":"StubRuntime is the placeholder backend for the not-yet-implemented Vm and Ci runtime kinds (surface-only in Phase 1). Its start formats \"<kind> runtime is not implemented; use tmux or inline\", appends a lane_failed event to the lane log, best-effort marks the record Failed via mark_terminal_if_active, and re-raises that message verbatim — so the error you see is the formatted text (e.g. 'vm runtime is not implemented; use tmux or inline').","triggerScenarios":"Starting a lane whose RuntimeBackendKind parses to \"vm\" or \"ci\" (RuntimeBackendKind::parse accepts all four). Any start attempt on those kinds deterministically fails here after recording the failure.","commonSituations":"Config or CLI selecting runtime \"vm\"/\"ci\" because the option is accepted; copying examples from forward-looking docs; code enumerating all backend kinds and defaulting to an unimplemented one.","solutions":["Switch the lane's runtime to \"tmux\" or \"inline\", the two implemented backends","If you selected vm/ci accidentally (typo, stale example), fix the configuration value","Track the feature for the backend you need instead of retrying — this failure is deterministic, not transient"],"exampleFix":"# before\n# config: runtime = \"vm\"\n\n# after\nruntime = \"tmux\"","handlingStrategy":"validation","validationCode":"fn runtime_implemented(kind: RuntimeBackendKind) -> bool {\n    matches!(kind, RuntimeBackendKind::Tmux | RuntimeBackendKind::Inline)\n}\n\nanyhow::ensure!(\n    runtime_implemented(selected_kind),\n    \"{} runtime is not implemented; use tmux or inline\",\n    selected_kind.as_str()\n);","typeGuard":"fn runtime_implemented(kind: RuntimeBackendKind) -> bool {\n    matches!(kind, RuntimeBackendKind::Tmux | RuntimeBackendKind::Inline)\n}","tryCatchPattern":null,"preventionTips":["Restrict runtime options in config to tmux|inline until vm/ci ship","Treat this error as deterministic: the lane is already marked Failed and logged; do not retry","Watch release notes for vm/ci availability instead of probing with real lanes"],"tags":["rust","lane","stub","not-implemented","runtime-backend"],"backgroundTag":"feature-not-implemented","analyzedSha":"0c42157ee52f9d55af2b506d71b46249910f77d3","analyzedAt":"2026-08-20T21:50:45.477Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}