ci: run the TechLog contract drift gate in CI and test:all
`check:tech-log-contract` existed and worked but nothing ran it. No gate in `config/ci/gates.json` referenced it and `test:all` did not chain it, so a hand-edit of the vendored canonical yaml or of `generated.ts` passed every gate the repository actually executes -- the exact regression the digest pin exists to prevent. FE-GATE-010 (architecture/contract governance) now owns the command, beside `check-registries` and `check-ci`, and `test:all` runs it in front of `test:tech-log`. The canonical authority baseline moves to 83 command definitions / 95 references and the gate-shape SHA-256 is recomputed with `canonicalGateShapeSha256`; the recomputation was first verified by reproducing the previous constant from the previous gates.json. `tests/features/tech-log/contract-generation.test.ts` now fails if either wiring is removed again. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
5c997f3a7e
commit
f19be639a3
@@ -448,7 +448,11 @@ const CANONICAL_GATE_SHAPE_SHA256 =
|
||||
// describes the merged one. Recomputed from the merged config/ci/gates.json.
|
||||
// Task 11: recomputed again after FE-GATE-009 gained the
|
||||
// TECH_LOG_STUDIO_ASSETS manual accessibility evidence artifact.
|
||||
"3dda8421822eb094ceb06693ed8143cd9298947fa86681bbd941726a0d9674a9";
|
||||
// Final fix wave item 1: recomputed again after FE-GATE-010 gained
|
||||
// `check-tech-log-contract`. Recomputed with `canonicalGateShapeSha256`
|
||||
// below, verified by first reproducing the previous constant from the
|
||||
// previous `config/ci/gates.json` before hashing the new one.
|
||||
"f3cc90758084e16757e71a8a3fe772d8e408f0c51b044294f329309027ce6563";
|
||||
|
||||
function canonicalGateShapeSha256(gates: CiGateContract["gates"]): string {
|
||||
const normalized = gates.map(
|
||||
@@ -482,9 +486,12 @@ function canonicalAuthorityBaselineFailures(contract: CiGateContract): string[]
|
||||
if (contract.gates.length !== 27) {
|
||||
failures.push(`gate authority baseline must contain exactly 27 gates; received ${contract.gates.length}`);
|
||||
}
|
||||
if (contract.commands.length !== 82 || commandReferenceCount !== 94) {
|
||||
// Final fix wave, item 1: FE-GATE-010 gained `check-tech-log-contract`, the
|
||||
// drift gate that pins the vendored canonical Studio contract to its digest.
|
||||
// Until it was referenced by a gate it ran only when typed by hand.
|
||||
if (contract.commands.length !== 83 || commandReferenceCount !== 95) {
|
||||
failures.push(
|
||||
`command authority baseline must contain exactly 82 definitions and 94 references; received ${contract.commands.length} definitions and ${commandReferenceCount} references`,
|
||||
`command authority baseline must contain exactly 83 definitions and 95 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