{"record":{"id":"479e45530d09a6ce","repo":"GitoxideLabs/gitoxide","slug":"signature-verification-worker-stopped-unexpectedly","errorCode":null,"errorMessage":"signature verification worker stopped unexpectedly","messagePattern":"signature verification worker stopped unexpectedly","errorType":"exception","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"gix-tix/src/lib.rs","lineNumber":1500,"sourceCode":"            if app.changes_suppressed {\n                app.changes_suppressed = false;\n                dirty = true;\n                urgent = true;\n            } else {\n                fill_repository.retain = false;\n                fill_repository.retained = None;\n            }\n        }\n        if let Some(result) = verification_receiver.as_ref().map(mpsc::Receiver::try_recv) {\n            match result {\n                Ok(results) => {\n                    app.finish_signature_verification(results);\n                    verification_receiver = None;\n                    dirty = true;\n                }\n                Err(mpsc::TryRecvError::Empty) => {}\n                Err(mpsc::TryRecvError::Disconnected) => {\n                    anyhow::bail!(\"signature verification worker stopped unexpectedly\")\n                }\n            }\n        }\n        if let Some(result) = lane_receiver.as_ref().map(mpsc::Receiver::try_recv) {\n            match result {\n                Ok((rows, graph, lane_time)) => {\n                    let scan =\n                        scan_change_ids(&repository_path, repository_is_bare, change_id_scan_needed(&app), &rows)\n                            .unwrap_or_else(|err| {\n                                tracing::warn!(error = %err, \"change ID scan failed\");\n                                change_id::Scan::default()\n                            });\n                    app.finish_lane_computation(rows, graph, lane_time);\n                    app.set_change_ids(scan.overrides, scan.duplicates);\n                    ref_tree.set_history_commits(app.rows.iter().map(|row| row.id));\n                    if return_to_history_after_refresh.take().is_some() {\n                        ref_tree.leave();\n                    }","sourceCodeStart":1482,"sourceCodeEnd":1518,"githubUrl":"https://github.com/GitoxideLabs/gitoxide/blob/e73179060badf27222d790981fac3f84c1830a7e/gix-tix/src/lib.rs#L1482-L1518","documentation":"Runtime guard in gix-tix's TUI event loop. Signature verification runs on a background worker that sends results over an mpsc channel; when the main loop polls the receiver and finds it disconnected (worker thread panicked or exited without sending results), this error is surfaced because verification can never complete. It indicates a defect in the verification worker rather than a user-input problem — the app cannot recover the lost results. Fix requires diagnosing the worker panic/early exit; restarting the application re-runs verification.","triggerScenarios":"Thrown at gix-tix/src/lib.rs:1500 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Inspect stderr and any tracing output for the panic that killed the verification worker thread, since the disconnect only reports the symptom","Update or re-point the reference whose signature verification crashed (e.g. a malformed commit signature) and restart tix so a fresh worker is spawned","Report the crashing input as a bug if the worker panics reproducibly on a specific commit"],"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"}