test: gate the dev release manifest against the compiled contract set
Nothing in the gate set read `public/*.json`. Every static gate passed and the whole suite passed while `pnpm dev` rendered the boot-error screen instead of the app, which is the only reason the drift survived two contract changes. `check:dev-release-manifest` compares the fixture's `setAlgorithm`, `setDigest` and package set against what `generate-contract-set.ts` composes, and is registered on FE-GATE-010 next to `check-tech-log-contract` so CI executes it. Unlike the refresh wired into contract generation, this observes the composed set directly, so it also catches a contribution added to or removed from `installed-contract-contributions.ts`. `CANONICAL_GATE_SHAPE_SHA256` recomputed by hand, as always: the committed constant 98d19911... was first reproduced from the committed `gates.json` with an independent transcription of `canonicalGateShapeSha256`, and only then was b4096244... hashed from the new one. Command counts move 84/96 -> 85/97; artifacts stay at 130 because the gate publishes no evidence file, matching `check-tech-log-contract`. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
b75c9d0956
commit
4090c8681d
@@ -456,7 +456,10 @@ const CANONICAL_GATE_SHAPE_SHA256 =
|
||||
// `test-tech-log` and its junit evidence, by the same method — the previous
|
||||
// constant f3cc9075… was reproduced from the previous gates.json first, so
|
||||
// the transcription that produced this value is known to be the real one.
|
||||
"98d19911c37a18f579fe51b3e3b8164ff0515579557512bc4040b407d4399be9";
|
||||
// Dev release manifest drift fix, item 2: recomputed again after FE-GATE-010
|
||||
// gained `check-dev-release-manifest`. Same method — 98d19911… was first
|
||||
// reproduced from the previous gates.json before this value was hashed.
|
||||
"b40962448e617883060e09eb7183837cfea6833519f435f11713efd083210dbe";
|
||||
|
||||
function canonicalGateShapeSha256(gates: CiGateContract["gates"]): string {
|
||||
const normalized = gates.map(
|
||||
@@ -497,9 +500,13 @@ function canonicalAuthorityBaselineFailures(contract: CiGateContract): string[]
|
||||
// already ran inside `test:coverage`'s combined vitest invocation, so a
|
||||
// TechLog failure was reported as a coverage-gate failure with no junit of
|
||||
// its own to name it.
|
||||
if (contract.commands.length !== 84 || commandReferenceCount !== 96) {
|
||||
// Dev release manifest drift fix, item 2: FE-GATE-010 gained
|
||||
// `check-dev-release-manifest`. No gate read `public/*.json` at all, so a
|
||||
// fixture that did not declare the compiled contract set broke `pnpm dev`
|
||||
// outright while every static gate stayed green.
|
||||
if (contract.commands.length !== 85 || commandReferenceCount !== 97) {
|
||||
failures.push(
|
||||
`command authority baseline must contain exactly 84 definitions and 96 references; received ${contract.commands.length} definitions and ${commandReferenceCount} references`,
|
||||
`command authority baseline must contain exactly 85 definitions and 97 references; received ${contract.commands.length} definitions and ${commandReferenceCount} references`,
|
||||
);
|
||||
}
|
||||
// Template merge. 126 product artifacts plus the two the template added.
|
||||
|
||||
Reference in New Issue
Block a user