spacedriveapp/spacedrive · error · anyhow::Error
Invalid event type: {}
Error message
Invalid event type: {} What it means
'sd sync events export --event-type <value>' fails when the value does not exactly match a name accepted by SyncEventType::from_str (core/src/infra/sync/event_log/types.rs:189). Valid values are the snake_case names: state_transition, backfill_session_started, backfill_session_completed, backfill_session_failed, catch_up_session_started, catch_up_session_completed, batch_ingestion, backfill_request_sent, backfill_request_received, backfill_response_sent, peer_connected, peer_disconnected, sync_error.
Source
Thrown at apps/cli/src/domains/sync/mod.rs:437
let library_id = ctx.library_id.ok_or_else(|| {
anyhow::anyhow!("No library selected. Use 'sd library switch' to select a library first.")
})?;
// Build query
let mut query = SyncEventQuery::new(library_id).with_limit(args.limit);
// Parse time filter
if let Some(since_str) = &args.since {
let since = parse_time_filter(since_str)?;
query = query.with_time_range(since, Utc::now());
}
// Parse event type filter
if let Some(event_type_str) = &args.event_type {
if let Some(event_type) = SyncEventType::from_str(event_type_str) {
query = query.with_event_types(vec![event_type]);
} else {
return Err(anyhow::anyhow!("Invalid event type: {}", event_type_str));
}
}
// Parse correlation ID filter
if let Some(corr_id_str) = &args.correlation_id {
let corr_id = uuid::Uuid::parse_str(corr_id_str)?;
query = query.with_correlation_id(corr_id);
}
// Parse severity filter
if let Some(severity_str) = &args.severity {
if let Some(severity) = EventSeverity::from_str(severity_str) {
query = query.with_severities(vec![severity]);
} else {
return Err(anyhow::anyhow!("Invalid severity: {}", severity_str));
}
}
View on GitHub (pinned to 6dfeccf211)
Solutions
- Use an exact snake_case value, e.g. --event-type peer_connected
- Run the export without --event-type and read the event_type field of the JSON output for the valid names
- Check SyncEventType::from_str in core/src/infra/sync/event_log/types.rs for the authoritative list for your build
Example fix
# before sd sync events export --event-type PeerConnected # after sd sync events export --event-type peer_connected
Defensive patterns
Strategy: validation
Validate before calling
const VALID_EVENT_TYPES: &[&str] = &[
"state_transition", "backfill_session_started", "backfill_session_completed",
"backfill_session_failed", "catch_up_session_started", "catch_up_session_completed",
"batch_ingestion", "backfill_request_sent", "backfill_request_received",
"backfill_response_sent", "peer_connected", "peer_disconnected", "sync_error",
];
fn is_valid_event_type(s: &str) -> bool {
VALID_EVENT_TYPES.contains(&s)
} Type guard
fn as_event_type(s: &str) -> Option<sd_core::infra::sync::event_log::types::SyncEventType> {
sd_core::infra::sync::event_log::types::SyncEventType::from_str(s)
} Try / catch
match SyncEventType::from_str(event_type_str) {
Some(t) => query = query.with_event_types(vec![t]),
None => return Err(anyhow!("Invalid event type: {}. Valid: {}", event_type_str, VALID_EVENT_TYPES.join(", "))),
} Prevention
- Derive the accepted list from SyncEventType::as_str() so it can never drift from the enum
- Include the valid values in the error message and in clap's value_help for the flag
- Normalize user input to snake_case before matching
When it happens
Trigger: Passing CamelCase ('PeerConnected'), spaces, abbreviations ('backfill'), or any plural/singular variant that is not byte-for-byte identical to the snake_case list above.
Common situations: Guessing flag values instead of checking the enum; scripts written against an older core where event type names differed; copy-pasting UI labels into the CLI.
Related errors
- Invalid severity: {}
- Unknown format: {}. Use json, sql, or markdown
- Failed to build action: {}
- No paired devices found. Pair a device first with: sd networ
- Remote device {} is not online
AI-assisted analysis of spacedriveapp/spacedrive@6dfeccf211 (2026-08-16).
Data as JSON: /api/errors/96d7b22814d8b3b7.
Report an issue: GitHub.