{"record":{"id":"88f0761d2eea2445","repo":"astrid-runtime/astrid","slug":"winfsp-callback-probe-failed-code-message","errorCode":null,"errorMessage":"WinFsp callback probe failed [{code}]: {message}","messagePattern":"WinFsp callback probe failed \\[(.+?)\\]: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/astrid-storage-provider-winfsp/src/win.rs","lineNumber":374,"sourceCode":"    stream.read_exact(&mut response_length).await?;\n    let length = u32::from_be_bytes(response_length) as usize;\n    if length == 0 || length > SERVICE_MAX_CALLBACK_BYTES {\n        bail!(\"WinFsp callback response exceeds limit\");\n    }\n    let mut response_bytes = vec![0_u8; length];\n    stream.read_exact(&mut response_bytes).await?;\n    let response: StorageFilesystemResponseV2 =\n        serde_json::from_slice(&response_bytes).context(\"decode WinFsp callback probe\")?;\n    if response.protocol_version != STORAGE_FILESYSTEM_PROTOCOL_V2 {\n        bail!(\"WinFsp callback probe protocol mismatch\");\n    }\n    if response.request_id != request.request_id {\n        bail!(\"WinFsp callback probe correlation mismatch\");\n    }\n    match response.outcome {\n        StorageFilesystemOutcomeV2::Success(_) => Ok(()),\n        StorageFilesystemOutcomeV2::Failure(StorageFilesystemFailureV1 { code, message }) => {\n            bail!(\"WinFsp callback probe failed [{code}]: {message}\")\n        },\n    }\n}\n\nasync fn private_service_loop(\n    filesystem: FileSystem,\n    listener: local_transport::LocalListener,\n    launch: &StorageProviderServiceLaunchV1,\n) -> Result<()> {\n    let mut filesystem = Some(filesystem);\n    let mut poll = tokio::time::interval(SERVICE_POLL);\n    loop {\n        tokio::select! {\n            accepted = local_transport::accept(&listener) => {\n                let mut stream = accepted.context(\"accept WinFsp service control\")?;\n                let request = read_service_control(&mut stream).await?;\n                let (response, stop) = match request {\n                    ServiceControlRequest::Status { token } if token == launch.parent.token => {","sourceCodeStart":356,"sourceCodeEnd":392,"githubUrl":"https://github.com/astrid-runtime/astrid/blob/affd8760f44190dbdfbec23403f4c4b642c33112/crates/astrid-storage-provider-winfsp/src/win.rs#L356-L392","documentation":"When the callback responder reports a Failure outcome, probe_callback surfaces it as a bail formatted as 'WinFsp callback probe failed [{code}]: {message}'. This is the propagated error from the storage filesystem side of the probe — the daemon itself worked, but the operation it validated failed.","triggerScenarios":"run_private_service -> probe_callback where the StorageFilesystemResponseV2.outcome is Failure(StorageFilesystemFailureV1 { code, message }); code and message come from the responder (e.g. auth failure, missing resource, backend error).","commonSituations":"Backend storage unavailable or credentials expired when the WinFsp mount validated its filesystem; the probed resource was deleted between lease creation and probe; responder-side permission denial on the mount root.","solutions":["Read the interpolated code and message in the final error text and fix the underlying responder-side cause (credentials, resource existence, permissions).","Retry after resolving the backend condition (e.g. re-authenticate, restore the resource).","Check responder logs for the original failure stack, since this error only forwards code/message.","Ensure the lease resource_path still exists and is accessible before launching the service."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"match probe_callback(&launch, &request).await {\n    Err(e) => {\n        let msg = e.to_string();\n        if let Some(inner) = msg.strip_prefix(\"WinFsp callback probe failed [\") {\n            let (code, detail) = inner.split_once(\"]\").map(|(c, d)| (c, &d[2..])).unwrap();\n            log::error!(\"backend probe failure code={code}: {detail}\");\n        }\n        Err(e)\n    },\n    Ok(()) => Ok(()),\n}","preventionTips":["Validate storage credentials and resource existence before starting the WinFsp mount.","Retry the launch after transient backend failures instead of crashing the service.","Log the full error chain: code and message identify the exact responder-side cause."],"tags":["propagated-error","remote-failure","winfsp"],"backgroundTag":"upstream-api-error","analyzedSha":"affd8760f44190dbdfbec23403f4c4b642c33112","analyzedAt":"2026-09-09T21:28:12.402Z","contentChangedAt":"2026-09-09T21:28:12.402Z","schemaVersion":2},"datasetVersion":"2026-09-17T15:17:12.973Z"}