Publish Clusterflux 45bbc21

This commit is contained in:
Michel Paulissen 2026-07-20 11:08:26 +02:00
parent eb1077f380
commit 3f88254c70
28 changed files with 896 additions and 167 deletions

View file

@ -159,6 +159,11 @@ function staleEvidence(file, currentSourceCommit) {
assert(fs.existsSync(manifestPath), `missing public release manifest: ${manifestPath}`);
const manifest = readJson(manifestPath);
for (const asset of manifest.assets ?? []) {
asset.file = path.isAbsolute(asset.file)
? asset.file
: path.resolve(path.dirname(manifestPath), asset.file);
}
const currentSourceCommit = expectedSourceCommit();
const currentTreeStatus = commandOutput("git", ["status", "--short"]) || "";
assert.strictEqual(
@ -233,6 +238,20 @@ assert(
manifest.final_evidence && manifest.final_evidence.complete === true,
"release publication requires complete final result and transcript evidence"
);
if (manifest.candidate_configuration_identity) {
assert.strictEqual(
finalResult.release_binding.configuration.evidence_identity,
manifest.candidate_configuration_identity,
"live configuration identity differs from the candidate binding"
);
}
if (manifest.candidate_proxy_configuration_identity) {
assert.strictEqual(
finalResult.release_binding.proxy_configuration.evidence_identity,
manifest.candidate_proxy_configuration_identity,
"live proxy configuration identity differs from the candidate binding"
);
}
const evidenceAsset = manifest.assets.find((asset) =>
asset.name.startsWith("clusterflux-public-evidence-")
);
@ -289,11 +308,17 @@ assert.deepStrictEqual(
);
assert.strictEqual(finalResult.acceptance_result, "passed");
assert.deepStrictEqual(finalResult.scenario_skips, []);
assert(
finalResult.release_binding?.deployment &&
finalResult.release_binding?.configuration &&
finalResult.release_binding?.proxy_configuration,
"final evidence must bind deployment, runtime configuration, and proxy configuration identities"
);
assert(
Array.isArray(finalResult.named_scenarios) &&
finalResult.named_scenarios.length === 16 &&
finalResult.named_scenarios.length === 25 &&
finalResult.named_scenarios.every((scenario) => scenario.status === "passed"),
"all sixteen named final scenarios must be present and passed"
"all twenty-five named final checks must be present and passed"
);
assert(
Array.isArray(finalResult.strict_requirement_ledger) &&