{"record":{"id":"8a115b112f2e032e","repo":"zed-industries/zed","slug":"errorcode-internal","errorCode":"ErrorCode::Internal","errorMessage":"handler did not send a response","messagePattern":"handler did not send a response","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/collab/src/rpc.rs","lineNumber":811,"sourceCode":"        M: RequestMessage,\n    {\n        let handler = Arc::new(handler);\n        self.add_handler(move |envelope, session| {\n            let receipt = envelope.receipt();\n            let handler = handler.clone();\n            async move {\n                let peer = session.peer.clone();\n                let responded = Arc::new(AtomicBool::default());\n                let response = Response {\n                    peer: peer.clone(),\n                    responded: responded.clone(),\n                    receipt,\n                };\n                match (handler)(envelope.payload, response, session).await {\n                    Ok(()) => {\n                        if responded.load(std::sync::atomic::Ordering::SeqCst) {\n                            Ok(())\n                        } else {\n                            let error = anyhow!(\"handler did not send a response\");\n                            let proto_err =\n                                ErrorCode::Internal.message(format!(\"{error}\")).to_proto();\n                            peer.respond_with_error(receipt, proto_err)?;\n                            Err(error)?\n                        }\n                    }\n                    Err(error) => {\n                        let proto_err = match &error {\n                            Error::Internal(err) => err.to_proto(),\n                            _ => ErrorCode::Internal.message(format!(\"{error}\")).to_proto(),\n                        };\n                        peer.respond_with_error(receipt, proto_err)?;\n                        Err(error)\n                    }\n                }\n            }\n        })","sourceCodeStart":793,"sourceCodeEnd":829,"githubUrl":"https://github.com/zed-industries/zed/blob/9d272b036335401f339d024ea94968fd51016c40/crates/collab/src/rpc.rs#L793-L829","documentation":"add_request_handler wraps each handler with a Response whose 'responded' flag is checked after the handler future completes; if the handler returned Ok without sending a reply, this framework assertion fires. It signals a handler implementation bug — every request handler must respond exactly once.","triggerScenarios":"Thrown at crates/collab/src/rpc.rs:804 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Fix the handler to call response.send(...) on all success paths","Ensure early returns and error branches still send or propagate a response"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"9d272b036335401f339d024ea94968fd51016c40","analyzedAt":"2026-08-20T19:29:52.058Z","contentChangedAt":"2026-08-20T19:29:52.058Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}