{"record":{"id":"96d7b22814d8b3b7","repo":"spacedriveapp/spacedrive","slug":"invalid-event-type","errorCode":null,"errorMessage":"Invalid event type: {}","messagePattern":"Invalid event type: (.+?)","errorType":"validation","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"apps/cli/src/domains/sync/mod.rs","lineNumber":437,"sourceCode":"\tlet library_id = ctx.library_id.ok_or_else(|| {\n\t\tanyhow::anyhow!(\"No library selected. Use 'sd library switch' to select a library first.\")\n\t})?;\n\n\t// Build query\n\tlet mut query = SyncEventQuery::new(library_id).with_limit(args.limit);\n\n\t// Parse time filter\n\tif let Some(since_str) = &args.since {\n\t\tlet since = parse_time_filter(since_str)?;\n\t\tquery = query.with_time_range(since, Utc::now());\n\t}\n\n\t// Parse event type filter\n\tif let Some(event_type_str) = &args.event_type {\n\t\tif let Some(event_type) = SyncEventType::from_str(event_type_str) {\n\t\t\tquery = query.with_event_types(vec![event_type]);\n\t\t} else {\n\t\t\treturn Err(anyhow::anyhow!(\"Invalid event type: {}\", event_type_str));\n\t\t}\n\t}\n\n\t// Parse correlation ID filter\n\tif let Some(corr_id_str) = &args.correlation_id {\n\t\tlet corr_id = uuid::Uuid::parse_str(corr_id_str)?;\n\t\tquery = query.with_correlation_id(corr_id);\n\t}\n\n\t// Parse severity filter\n\tif let Some(severity_str) = &args.severity {\n\t\tif let Some(severity) = EventSeverity::from_str(severity_str) {\n\t\t\tquery = query.with_severities(vec![severity]);\n\t\t} else {\n\t\t\treturn Err(anyhow::anyhow!(\"Invalid severity: {}\", severity_str));\n\t\t}\n\t}\n","sourceCodeStart":419,"sourceCodeEnd":455,"githubUrl":"https://github.com/spacedriveapp/spacedrive/blob/6dfeccf2113039e35f2ce735f945e70dc3e4ea45/apps/cli/src/domains/sync/mod.rs#L419-L455","documentation":"'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.","triggerScenarios":"Passing CamelCase ('PeerConnected'), spaces, abbreviations ('backfill'), or any plural/singular variant that is not byte-for-byte identical to the snake_case list above.","commonSituations":"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.","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"],"exampleFix":"# before\nsd sync events export --event-type PeerConnected\n\n# after\nsd sync events export --event-type peer_connected","handlingStrategy":"validation","validationCode":"const VALID_EVENT_TYPES: &[&str] = &[\n    \"state_transition\", \"backfill_session_started\", \"backfill_session_completed\",\n    \"backfill_session_failed\", \"catch_up_session_started\", \"catch_up_session_completed\",\n    \"batch_ingestion\", \"backfill_request_sent\", \"backfill_request_received\",\n    \"backfill_response_sent\", \"peer_connected\", \"peer_disconnected\", \"sync_error\",\n];\n\nfn is_valid_event_type(s: &str) -> bool {\n    VALID_EVENT_TYPES.contains(&s)\n}","typeGuard":"fn as_event_type(s: &str) -> Option<sd_core::infra::sync::event_log::types::SyncEventType> {\n    sd_core::infra::sync::event_log::types::SyncEventType::from_str(s)\n}","tryCatchPattern":"match SyncEventType::from_str(event_type_str) {\n    Some(t) => query = query.with_event_types(vec![t]),\n    None => return Err(anyhow!(\"Invalid event type: {}. Valid: {}\", event_type_str, VALID_EVENT_TYPES.join(\", \"))),\n}","preventionTips":["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"],"tags":["cli","sync","validation","enums"],"backgroundTag":null,"analyzedSha":"6dfeccf2113039e35f2ce735f945e70dc3e4ea45","analyzedAt":"2026-08-16T11:26:17.074Z","schemaVersion":2},"datasetVersion":"2026-08-16T13:17:31.715Z"}