astrid-runtime/astrid · error

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.

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.

Appendix: 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)