{"record":{"id":"a6d88f779b46ff1d","repo":"astrid-runtime/astrid","slug":"detached-fuse-service-readiness-failed-code","errorCode":null,"errorMessage":"detached FUSE service readiness failed [{code}]: {message}","messagePattern":"detached FUSE service readiness failed \\[(.+?)\\]: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/astrid-storage-provider-fuse/src/main.rs","lineNumber":343,"sourceCode":"                control_path,\n                &launch.mountpoint,\n                launch.auto_created_mountpoint,\n            )\n        },\n    )\n}\n\nfn require_ready_control_response(\n    response: ControlResponse,\n    expected_access: StorageProviderAccessV1,\n) -> Result<()> {\n    match response {\n        ControlResponse::Status { access } if access == expected_access => Ok(()),\n        ControlResponse::Status { access } => {\n            bail!(\"detached FUSE service readiness access {access:?} does not match its lease\")\n        },\n        ControlResponse::Failure { code, message } => {\n            bail!(\"detached FUSE service readiness failed [{code}]: {message}\")\n        },\n        ControlResponse::Done => {\n            bail!(\"detached FUSE service returned an incompatible readiness response\")\n        },\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 => {},","sourceCodeStart":325,"sourceCodeEnd":361,"githubUrl":"https://github.com/astrid-runtime/astrid/blob/affd8760f44190dbdfbec23403f4c4b642c33112/crates/astrid-storage-provider-fuse/src/main.rs#L325-L361","documentation":"This error means the detached FUSE service reported a `ControlResponse::Failure` during its readiness probe, carrying the service's own error `code` and `message`. The provider surfaces those fields verbatim so the underlying service-side failure is visible to the caller. It is thrown from the readiness validation helper in main.rs:343.","triggerScenarios":"The readiness check receives `ControlResponse::Failure { code, message }` instead of `Status` — the service itself failed during startup or when answering the control request.","commonSituations":"Service failed to mount (missing /dev/fuse, permissions); service-side validation rejected the lease; internal service error like a bad path or resource exhaustion; the message text usually names the root cause.","solutions":["Read the embedded `code` and `message` in the error text — they identify the actual service-side fault.","Fix the root cause on the service (mount prerequisites, lease validity, paths) and retry readiness.","Ensure the service binary and the provider are the same version so failure codes are interpretable.","Check service logs/stderr from the detached process for the full failure trace."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":"fn is_failure(resp: &ControlResponse) -> Option<(&str, &str)> {\n    match resp { ControlResponse::Failure { code, message } => Some((code, message)), _ => None }\n}","tryCatchPattern":"match validate_readiness(resp, &lease.access) {\n    Err(e) if e.to_string().contains(\"readiness failed [\") => {\n        // parse [code] from message, address service-side root cause, retry\n    }\n    r => r?,\n}","preventionTips":["Capture and inspect service stderr/logs from the detached process","Pre-validate the lease and mountpoint before starting the service","Ensure /dev/fuse and mount privileges are available to the service"],"tags":["fuse","readiness","service-failure"],"backgroundTag":"api-error-response","analyzedSha":"affd8760f44190dbdfbec23403f4c4b642c33112","analyzedAt":"2026-09-09T21:28:12.402Z","contentChangedAt":"2026-09-09T21:28:12.402Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}