{"record":{"id":"9d265b3438fcf367","repo":"GitoxideLabs/gitoxide","slug":"lane-worker-stopped-unexpectedly","errorCode":null,"errorMessage":"lane worker stopped unexpectedly","messagePattern":"lane worker stopped unexpectedly","errorType":"exception","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"gix-tix/src/lib.rs","lineNumber":1536,"sourceCode":"                    }\n                    update_hidden_branch_updates(&mut app, history_graph.as_ref(), &ref_snapshot);\n                    let response_ids = filesystem_responses.active_reference_ids().to_vec();\n                    filesystem_responses.phase(&response_ids, \"lane-computation-completed\");\n                    filesystem_responses.queue_frame(&response_ids, \"lane-computation-completed\");\n                    filesystem_responses.finish_after_frame(&response_ids, \"completed\");\n                    history_status_deadline = None;\n                    app.deferred_history_state = None;\n                    selection_relation = None;\n                    app.selection_relation = None;\n                    lane_receiver = None;\n                    dirty = true;\n                    if quit_on_finish {\n                        urgent = true;\n                    }\n                }\n                Err(mpsc::TryRecvError::Empty) => {}\n                Err(mpsc::TryRecvError::Disconnected) => {\n                    anyhow::bail!(\"lane worker stopped unexpectedly\")\n                }\n            }\n        }\n        if let Some(result) = refresh_receiver.as_ref().map(mpsc::Receiver::try_recv) {\n            match result {\n                Ok((kind, mut graph, result)) => {\n                    let result = result?;\n                    if matches!(kind, RefreshKind::RefTree { .. }) {\n                        graph.set_current_view(&ref_snapshot.view_tips);\n                    }\n                    app.set_known_descendants(graph.commits_with_descendants());\n                    app.set_known_merge_descendants(graph.commits_with_merge_descendants());\n                    app.set_worktree_branch(\n                        (!repository_is_bare)\n                            .then(|| current_worktree_branch(&result.refs))\n                            .flatten(),\n                    );\n                    ref_tree.rebuild(&graph, &result.refs, &result.decorations);","sourceCodeStart":1518,"sourceCodeEnd":1554,"githubUrl":"https://github.com/GitoxideLabs/gitoxide/blob/e73179060badf27222d790981fac3f84c1830a7e/gix-tix/src/lib.rs#L1518-L1554","documentation":"Runtime guard in gix-tix's TUI event loop for the lane-layout worker. Branch/history lanes are computed on a background thread that streams phase frames and a final result; if the worker's channel disconnects before the completed frame arrives, the main loop reports that the lane worker stopped unexpectedly, since graph lanes can never be drawn for the current selection. It signals a worker-thread crash or premature exit, not a repository problem. Recovery is by restarting the app or triggering a history refresh, which respawns the worker.","triggerScenarios":"Thrown at gix-tix/src/lib.rs:1536 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Check the lane worker's panic message on stderr or in tracing logs to find the input rows that crashed lane computation","Restart tix; a new lane worker is spawned on the next refresh, which may succeed once the failing state has changed","File a bug with the repository state that reliably panics the lane worker"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"e73179060badf27222d790981fac3f84c1830a7e","analyzedAt":"2026-09-08T11:26:50.865Z","contentChangedAt":"2026-09-08T11:26:50.865Z","schemaVersion":2},"datasetVersion":"2026-09-15T23:17:13.987Z"}