{"record":{"id":"6f79c07ffca29937","repo":"GitoxideLabs/gitoxide","slug":"history-refresh-worker-stopped-unexpectedly","errorCode":null,"errorMessage":"history refresh worker stopped unexpectedly","messagePattern":"history refresh worker stopped unexpectedly","errorType":"exception","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"gix-tix/src/lib.rs","lineNumber":1616,"sourceCode":"                            .and_then(|repo| Ok(repo.head()?.is_unborn()))\n                            .unwrap_or(false);\n                    app.set_worktree_head_unborn(worktree_head_unborn);\n                    decorations = result.decorations;\n                    selection_relation = None;\n                    app.selection_relation = None;\n                    let hidden_tips = if app.show_hidden {\n                        &[][..]\n                    } else {\n                        result.refs.hidden_tips.as_slice()\n                    };\n                    if let Some(rows) = app.start_refresh(result.commits, &result.refs.view_tips, hidden_tips, false) {\n                        lane_receiver = Some(start_lane_worker(rows));\n                    }\n                    refresh_receiver = None;\n                    dirty = true;\n                }\n                Err(mpsc::TryRecvError::Empty) => {}\n                Err(mpsc::TryRecvError::Disconnected) => anyhow::bail!(\"history refresh worker stopped unexpectedly\"),\n            }\n        }\n        if ref_tree_refresh_pending\n            && refresh_receiver.is_none()\n            && lane_receiver.is_none()\n            && history_graph.is_some()\n            && matches!(app.state, State::Complete | State::Cancelled)\n        {\n            ref_tree_refresh_pending = false;\n            refresh_receiver = Some(start_history_refresh(\n                repository_path.clone(),\n                repository_is_bare,\n                revisions.clone(),\n                if app.show_hidden { Vec::new() } else { hide.clone() },\n                true,\n                Default::default(),\n                gix::features::threading::OwnShared::clone(&authors),\n                history_graph","sourceCodeStart":1598,"sourceCodeEnd":1634,"githubUrl":"https://github.com/GitoxideLabs/gitoxide/blob/e73179060badf27222d790981fac3f84c1830a7e/gix-tix/src/lib.rs#L1598-L1634","documentation":"Runtime guard in gix-tix's TUI event loop for the history-refresh worker. Refreshes (re-reading refs, decorations, worktree head state) run off-thread and deliver results over a channel; if the receiver finds the channel closed without a result, the refresh worker died unexpectedly and the pending history refresh cannot complete. The UI would otherwise wait forever for decorations and selection relation updates, so the failure is surfaced. Indicates a worker-thread panic/early exit; recover by restarting the app or issuing another refresh.","triggerScenarios":"Thrown at gix-tix/src/lib.rs:1616 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Look for the underlying panic message from the refresh worker thread in stderr/tracing, since this error only signals that its channel closed","Verify the repository is readable and not concurrently locked or deleted, then restart tix to relaunch the history refresh","Capture a backtrace of the panicking worker (RUST_BACKTRACE=1) and report it if the crash is reproducible"],"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"}