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

  1. Regenerate the signed metadata including all expected platform targets once their artifacts are built, then re-sign.
  2. Identify the missing triple(s) (diff the metadata targets against `expected_targets`) and add complete entries: asset, sigstore bundle, size, blake3, sha256.
  3. Re-run the failed platform builds in the release pipeline before publishing the channel pointer.
  4. 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

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


AI-assisted analysis of astrid-runtime/astrid@affd8760f4 (2026-09-09). Data as JSON: /api/errors/b929f56131972570. Report an issue: GitHub.