{"record":{"id":"9cbcda91cd482824","repo":"astrid-runtime/astrid","slug":"fuse-service-returned-an-incompatible-status-respo","errorCode":null,"errorMessage":"FUSE service returned an incompatible status response","messagePattern":"FUSE service returned an incompatible status response","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/astrid-storage-provider-fuse/src/main.rs","lineNumber":365,"sourceCode":"        },\n    }\n}\n\nasync fn sync(\n    client: &mut AdminClient,\n    acting_principal: &astrid_core::PrincipalId,\n    selector: &StorageMountSelectorV1,\n) -> Result<StorageProviderSuccessV1> {\n    let record = registry::resolve_record(selector)?;\n    let status = require_live_lease(client, acting_principal, &record).await?;\n    validate_record(&record, &status)?;\n    let control = live_control_status(client, acting_principal, &record).await?;\n    match control {\n        ControlResponse::Status { access } if access == record.access => {},\n        ControlResponse::Status { access } => {\n            bail!(\"detached FUSE service access {access:?} does not match lease\")\n        },\n        ControlResponse::Done => bail!(\"FUSE service returned an incompatible status response\"),\n        ControlResponse::Failure { code, message } => {\n            bail!(\"FUSE service status failed [{code}]: {message}\")\n        },\n    }\n    into_success(\n        client\n            .request(AdminRequestKind::StorageMountSync {\n                mount_id: record.mount_id,\n            })\n            .await?,\n    )?;\n    Ok(StorageProviderSuccessV1::Synced {\n        mount_id: record.mount_id,\n    })\n}\n\nasync fn status(\n    client: &mut AdminClient,","sourceCodeStart":347,"sourceCodeEnd":383,"githubUrl":"https://github.com/astrid-runtime/astrid/blob/affd8760f44190dbdfbec23403f4c4b642c33112/crates/astrid-storage-provider-fuse/src/main.rs#L347-L383","documentation":"This error means the live FUSE service answered a status query with `ControlResponse::Done`, which cannot carry the required access/status information. The sync path expects `Status`; `Done` indicates the service is shutting down or responding with an incompatible protocol shape. It is thrown in main.rs:365 in the status match after the access-equality arm.","triggerScenarios":"The status match arm `ControlResponse::Done` is hit — the service replied with Done instead of `Status { access }` when `live_control_status` queried it.","commonSituations":"The service exited or is mid-shutdown while the admin client queries it; a stale socket answered by a different process; version skew changing which ControlResponse variant is emitted for status queries.","solutions":["Verify the service process is alive; if it exited, clean artifacts and remount from the lease.","Re-run the status/sync after confirming the service is fully started and stable.","Remove stale control sockets so a foreign or dead peer cannot answer.","Align crate versions between the admin client and the service so response variants agree."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":"fn is_status(control: &ControlResponse) -> bool {\n    matches!(control, ControlResponse::Status { .. })\n}","tryCatchPattern":"match live_control_status(client, principal, &record).await {\n    ControlResponse::Status { .. } => { /* proceed */ }\n    ControlResponse::Done => { /* service gone: cleanup + remount */ }\n    _ => { /* handle Failure / mismatch */ }\n}","preventionTips":["Check service liveness before querying status","Remove stale control sockets before remounting","Retry status queries with backoff around service restarts"],"tags":["fuse","status","protocol-mismatch"],"backgroundTag":"unexpected-response-shape","analyzedSha":"affd8760f44190dbdfbec23403f4c4b642c33112","analyzedAt":"2026-09-09T21:28:12.402Z","contentChangedAt":"2026-09-09T21:28:12.402Z","schemaVersion":2},"datasetVersion":"2026-09-14T11:17:12.474Z"}