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
- Sign the Zed CLA (zed.dev/contribute/cla, authenticated with the same GitHub account used in the client) and retry joining the room
- Verify the client is signed in with the GitHub identity that signed the CLA
- 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
- Mark CLA-gated rooms in the UI and check the flag before joining
- Sign the CLA with the same GitHub account used to sign in to Zed
- After signing, verify the contributor record exists (re-auth) before retrying the join
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
- banned users cannot invite
- not a room participant
- guests cannot share projects
- not authorized to edit projects
- not authorized to read projects
AI-assisted analysis of zed-industries/zed@bc538def45 (2026-08-16).
Data as JSON: /api/errors/61c327161ac32885.
Report an issue: GitHub.