zed-industries/zed · error

ErrorCode::Internal

ErrorCode::Internal

Error message

handler did not send a response

What it means

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.

Source

Thrown at crates/collab/src/rpc.rs:811

        M: RequestMessage,
    {
        let handler = Arc::new(handler);
        self.add_handler(move |envelope, session| {
            let receipt = envelope.receipt();
            let handler = handler.clone();
            async move {
                let peer = session.peer.clone();
                let responded = Arc::new(AtomicBool::default());
                let response = Response {
                    peer: peer.clone(),
                    responded: responded.clone(),
                    receipt,
                };
                match (handler)(envelope.payload, response, session).await {
                    Ok(()) => {
                        if responded.load(std::sync::atomic::Ordering::SeqCst) {
                            Ok(())
                        } else {
                            let error = anyhow!("handler did not send a response");
                            let proto_err =
                                ErrorCode::Internal.message(format!("{error}")).to_proto();
                            peer.respond_with_error(receipt, proto_err)?;
                            Err(error)?
                        }
                    }
                    Err(error) => {
                        let proto_err = match &error {
                            Error::Internal(err) => err.to_proto(),
                            _ => ErrorCode::Internal.message(format!("{error}")).to_proto(),
                        };
                        peer.respond_with_error(receipt, proto_err)?;
                        Err(error)
                    }
                }
            }
        })

View on GitHub (pinned to 9d272b0363)

Solutions

  1. Fix the handler to call response.send(...) on all success paths
  2. Ensure early returns and error branches still send or propagate a response
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at crates/collab/src/rpc.rs:804 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of zed-industries/zed@9d272b0363 (2026-08-20). Data as JSON: /api/errors/8a115b112f2e032e. Report an issue: GitHub.