{"record":{"id":"b929f56131972570","repo":"astrid-runtime/astrid","slug":"label-target-set-is-incomplete","errorCode":null,"errorMessage":"{label} target set is incomplete","messagePattern":"(.+?) target set is incomplete","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/astrid-cli/src/commands/update_channel.rs","lineNumber":369,"sourceCode":"            \"{label} target set is invalid\"\n        );\n        let expected_asset = format!(\"astrid-{version}-{}.tar.gz\", target.triple);\n        ensure!(\n            target.asset == expected_asset\n                && target.sigstore_bundle == format!(\"{expected_asset}.sigstore.json\"),\n            \"signed metadata asset identity is invalid for {}\",\n            target.triple\n        );\n        ensure!(\n            target.size > 0,\n            \"signed metadata target size must be positive\"\n        );\n        ensure!(\n            is_lower_hex_64(&target.blake3) && is_lower_hex_64(&target.sha256),\n            \"signed metadata target digest is invalid\"\n        );\n    }\n    ensure!(\n        seen.len() == expected_targets.len(),\n        \"{label} target set is incomplete\"\n    );\n    Ok(())\n}\n\nfn validate_targets(targets: &[TargetMetadata], version: &str) -> anyhow::Result<()> {\n    validate_targets_for(targets, TARGETS, version, \"signed metadata\")\n}\n\nfn musl_metadata_asset(version: &str) -> String {\n    format!(\"astrid-{version}-musl-release.toml\")\n}\n\nfn windows_metadata_asset(version: &str) -> String {\n    format!(\"astrid-{version}-windows-release.toml\")\n}\n","sourceCodeStart":351,"sourceCodeEnd":387,"githubUrl":"https://github.com/astrid-runtime/astrid/blob/affd8760f44190dbdfbec23403f4c4b642c33112/crates/astrid-cli/src/commands/update_channel.rs#L351-L387","documentation":"After iterating all targets, `validate_targets_for` asserts that the number of distinct triples seen equals the size of `expected_targets`. This error means the metadata is missing one or more required platform targets — the set is well-formed per entry but not complete, so the channel would not provide an update for every supported platform.","triggerScenarios":"`validate_targets` / `verify_release_extension` receiving a targets array that omits one of the expected platform triples (e.g. metadata listing only linux targets when darwin/windows targets are also required for this channel version).","commonSituations":"A partial release where some platform builds failed but metadata was published anyway; a metadata generator configured with a reduced target list; manual trimming of targets during an incident; older metadata checked against a newer channel definition that added platforms.","solutions":["Regenerate the signed metadata including all expected platform targets once their artifacts are built, then re-sign.","Identify the missing triple(s) (diff the metadata targets against `expected_targets`) and add complete entries: asset, sigstore bundle, size, blake3, sha256.","Re-run the failed platform builds in the release pipeline before publishing the channel pointer.","If a platform was intentionally dropped, update the channel's expected-target definition rather than shipping incomplete metadata."],"exampleFix":"// before: darwin target missing\n\"targets\": [ { \"triple\": \"x86_64-unknown-linux-gnu\", ... } ]\n\n// after: full expected set\n\"targets\": [\n  { \"triple\": \"x86_64-unknown-linux-gnu\", ... },\n  { \"triple\": \"aarch64-apple-darwin\", ... }\n]","handlingStrategy":"validation","validationCode":"// shell: assert all expected triples present before publishing\njq -e --argjson expected \"$EXPECTED_TRIPLES\" \\\n  '(.targets | map(.triple) | sort) == ($expected | sort)' channel.json","typeGuard":"null","tryCatchPattern":"null","preventionTips":["Gate channel publication on every expected platform build succeeding.","Diff the metadata target list against expected_targets in CI before signing.","Keep the expected-target list versioned next to the release tooling.","If dropping a platform, update the expected-target definition in the same change."],"tags":["schema-validation","update-channel","metadata","rust"],"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-14T05:17:10.506Z"}