astrid-runtime/astrid · error
{label} target set is incomplete
Error message
{label} target set is incomplete What it means
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.
Source
Thrown at crates/astrid-cli/src/commands/update_channel.rs:369
"{label} target set is invalid"
);
let expected_asset = format!("astrid-{version}-{}.tar.gz", target.triple);
ensure!(
target.asset == expected_asset
&& target.sigstore_bundle == format!("{expected_asset}.sigstore.json"),
"signed metadata asset identity is invalid for {}",
target.triple
);
ensure!(
target.size > 0,
"signed metadata target size must be positive"
);
ensure!(
is_lower_hex_64(&target.blake3) && is_lower_hex_64(&target.sha256),
"signed metadata target digest is invalid"
);
}
ensure!(
seen.len() == expected_targets.len(),
"{label} target set is incomplete"
);
Ok(())
}
fn validate_targets(targets: &[TargetMetadata], version: &str) -> anyhow::Result<()> {
validate_targets_for(targets, TARGETS, version, "signed metadata")
}
fn musl_metadata_asset(version: &str) -> String {
format!("astrid-{version}-musl-release.toml")
}
fn windows_metadata_asset(version: &str) -> String {
format!("astrid-{version}-windows-release.toml")
}
View on GitHub (pinned to affd8760f4)
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.
Example fix
// before: darwin target missing
"targets": [ { "triple": "x86_64-unknown-linux-gnu", ... } ]
// after: full expected set
"targets": [
{ "triple": "x86_64-unknown-linux-gnu", ... },
{ "triple": "aarch64-apple-darwin", ... }
] Defensive patterns
Strategy: validation
Validate before calling
// shell: assert all expected triples present before publishing jq -e --argjson expected "$EXPECTED_TRIPLES" \ '(.targets | map(.triple) | sort) == ($expected | sort)' channel.json
Type guard
null
Try / catch
null
Prevention
- 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.
When it happens
Trigger: `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).
Common situations: 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.
Understand the failure class
Background: Schema validation failed / invalid input schema: payload rejected because its shape doesn't match the expected schema — this error's family across 28 libraries.
Related errors
- {label} target set is invalid
- signed metadata asset identity is invalid for {}
- signed metadata target size must be positive
- signed metadata target digest is invalid
- WASM capsule has no BLAKE3 hash in meta.json
AI-assisted analysis of astrid-runtime/astrid@affd8760f4 (2026-09-09).
Data as JSON: /api/errors/b929f56131972570.
Report an issue: GitHub.