{"record":{"id":"af2cfefe1b2fefe9","repo":"astrid-runtime/astrid","slug":"unsupported-fskit-service-launch-schema","errorCode":null,"errorMessage":"unsupported FSKit service launch schema {}","messagePattern":"unsupported FSKit service launch schema (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/astrid-storage-provider-fskit/src/service.rs","lineNumber":125,"sourceCode":"    result\n}\n\nfn read_launch() -> Result<StorageProviderServiceLaunchV1> {\n    let mut bytes = Vec::new();\n    std::io::stdin()\n        .lock()\n        .take(MAX_LAUNCH_BYTES + 1)\n        .read_to_end(&mut bytes)\n        .context(\"read FSKit service launch\")?;\n    if bytes.len() as u64 > MAX_LAUNCH_BYTES {\n        bail!(\"FSKit service launch exceeds limit\");\n    }\n    serde_json::from_slice(&bytes).context(\"decode FSKit service launch\")\n}\n\nfn validate_launch(launch: &StorageProviderServiceLaunchV1) -> Result<()> {\n    if launch.schema != STORAGE_FILESYSTEM_SERVICE_LAUNCH_SCHEMA_V1 {\n        bail!(\"unsupported FSKit service launch schema {}\", launch.schema);\n    }\n    validate_launch_parent(&launch.parent)?;\n    validate_lease(&launch.lease)?;\n    crate::validate_mountpoint_layout(&launch.mountpoint)?;\n    if launch.mountpoint == launch.lease.resource_path\n        || launch.mountpoint.starts_with(&launch.lease.resource_path)\n        || launch.lease.resource_path.starts_with(&launch.mountpoint)\n    {\n        bail!(\"FSKit service mountpoint overlaps the lease resource\");\n    }\n    crate::validate_mountpoint_ancestors(&launch.mountpoint)?;\n    crate::validate_unmounted_mountpoint(&launch.mountpoint)?;\n    validate_control_path(&launch.control_path, &launch.lease.resource_path)?;\n    Ok(())\n}\n\nfn validate_lease(lease: &astrid_core::storage_filesystem::StorageMountLeaseV1) -> Result<()> {\n    if lease.lease_token.len() < 16 || lease.lease_token.len() > 4096 {","sourceCodeStart":107,"sourceCodeEnd":143,"githubUrl":"https://github.com/astrid-runtime/astrid/blob/affd8760f44190dbdfbec23403f4c4b642c33112/crates/astrid-storage-provider-fskit/src/service.rs#L107-L143","documentation":"validate_launch checks that the schema field of StorageProviderServiceLaunchV1 equals STORAGE_FILESYSTEM_SERVICE_LAUNCH_SCHEMA_V1 and bails with the received schema value otherwise. This is a version handshake: the service refuses launch payloads produced by an incompatible parent version.","triggerScenarios":"A parent built against a different schema constant (older or newer) launches the service; the launch JSON was edited or generated with a wrong schema string; version skew between installed provider components.","commonSituations":"Partial upgrade where the FSKit extension binary is old but the CLI is new (or vice versa); hand-crafted test payloads using a guessed schema name; a schema bump in a PR where one side wasn't rebuilt.","solutions":["Rebuild/reinstall both the parent (CLI) and the FSKit service so they share the same schema constant","Update the launch payload's schema field to STORAGE_FILESYSTEM_SERVICE_LAUNCH_SCHEMA_V1","Check installed component versions and align them; clear cached/stale binaries"],"exampleFix":"// before\nlaunch.schema = \"astrid.filesystem.launch.v2\";\n// after\nlaunch.schema = STORAGE_FILESYSTEM_SERVICE_LAUNCH_SCHEMA_V1; // \"...launch.v1\"","handlingStrategy":"validation","validationCode":"anyhow::ensure!(\n    launch.schema == STORAGE_FILESYSTEM_SERVICE_LAUNCH_SCHEMA_V1,\n    \"unsupported launch schema: {}\",\n    launch.schema\n);","typeGuard":"fn has_current_schema(l: &StorageProviderServiceLaunchV1) -> bool {\n    l.schema == STORAGE_FILESYSTEM_SERVICE_LAUNCH_SCHEMA_V1\n}","tryCatchPattern":null,"preventionTips":["Always build launch payloads via the shared constant, not string literals","Upgrade/reinstall parent and service binaries together after schema bumps","Add a schema compatibility check to CI for cross-version launches","Reject stale cached binaries during deployment"],"tags":["schema-version","ipc","fskit","version-skew"],"backgroundTag":"schema-validation-failed","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"}