zed-industries/zed · error

user has not signed the Zed CLA

Error message

user has not signed the Zed CLA

What it means

Thrown by check_user_has_signed_cla when the room's channel has requires_zed_cla = true and the user has no row in the contributor table. Zed gates certain rooms (e.g. the Zed contributors channel) behind signing the Contributor License Agreement; the count query over channels joined from the room determines whether the gate applies.

Source

Thrown at crates/collab/src/db/queries/rooms.rs:1203

        if let Some(channel) = channel {
            let requires_zed_cla = channel.requires_zed_cla
                || channel::Entity::find()
                    .filter(
                        channel::Column::Id
                            .is_in(channel.ancestors())
                            .and(channel::Column::RequiresZedCla.eq(true)),
                    )
                    .count(tx)
                    .await?
                    > 0;
            if requires_zed_cla
                && contributor::Entity::find()
                    .filter(contributor::Column::UserId.eq(user_id))
                    .one(tx)
                    .await?
                    .is_none()
            {
                Err(anyhow!("user has not signed the Zed CLA"))?;
            }
        }
        Ok(())
    }

    pub async fn connection_lost(&self, connection: ConnectionId) -> Result<()> {
        self.transaction(|tx| async move {
            self.room_connection_lost(connection, &tx).await?;
            self.channel_buffer_connection_lost(connection, &tx).await?;
            Ok(())
        })
        .await
    }

    pub async fn room_connection_lost(
        &self,
        connection: ConnectionId,
        tx: &DatabaseTransaction,

View on GitHub (pinned to bc538def45)

Solutions

  1. Sign the Zed CLA (zed.dev/contribute/cla, authenticated with the same GitHub account used in the client) and retry joining the room
  2. Verify the client is signed in with the GitHub identity that signed the CLA
  3. If you believe you already signed it, confirm the contributor record exists for that user id (support/dev-tools) before retrying

Example fix

// before
client.join_room(cla_required_room_id).await?;

// after (surface an actionable message)
if let Err(err) = client.join_room(cla_required_room_id).await {
    if err.to_string().contains("has not signed the Zed CLA") {
        self.ui.open_url("https://zed.dev/contribute/cla");
        self.ui.show_toast("Sign the Zed CLA to join this room");
        return Ok(());
    }
    return Err(err);
}
Defensive patterns

Strategy: validation

Validate before calling

// Gate joining CLA-required rooms behind a known-signed-CLA state.
if room.requires_zed_cla && !self.user_signed_cla {
    self.ui.open_url("https://zed.dev/contribute/cla");
    self.ui.show_toast("Sign the Zed CLA to join this room");
    return Ok(());
}
client.join_room(room_id).await?;

Try / catch

if let Err(err) = client.join_room(room_id).await {
    if err.to_string().contains("has not signed the Zed CLA") {
        self.ui.open_url("https://zed.dev/contribute/cla");
        return Ok(());
    }
    return Err(err);
}

Prevention

When it happens

Trigger: Joining or being invited into a CLA-required room without having signed the Zed CLA; calling into a CLA-gated channel room; rejoining such a room after the contributor record was never created for this user account.

Common situations: New contributor accounts joining the contributors channel for the first time; users signed into a different GitHub account than the one that signed the CLA; automated invites into gated rooms.

Related errors


AI-assisted analysis of zed-industries/zed@bc538def45 (2026-08-16). Data as JSON: /api/errors/61c327161ac32885. Report an issue: GitHub.