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:
DongHyeonka
2026-08-18 09:03:14 +09:00
co-authored by Claude Opus 5
parent 5c997f3a7e
commit f19be639a3
6 changed files with 55 additions and 8 deletions
+3 -2
View File
@@ -189,8 +189,9 @@ describe("CI gate contract", () => {
),
);
expect(contract.jobs).toHaveLength(9);
expect(contract.commands).toHaveLength(82);
expect(contract.gates.reduce((total, gate) => total + gate.commandIds.length, 0)).toBe(94);
// Final fix wave item 1: FE-GATE-010 gained `check-tech-log-contract`.
expect(contract.commands).toHaveLength(83);
expect(contract.gates.reduce((total, gate) => total + gate.commandIds.length, 0)).toBe(95);
expect(contract.commands.filter(({ expect }) => expect === "fail")).toHaveLength(23);
// Template merge. Recounted from the merged config/ci/gates.json rather
// than taking either side's number.
@@ -185,9 +185,10 @@ describe("selective Task 3 contract closure", () => {
// product's 26/81; the artifact set is the product's 126 plus the
// template's 2. Task 11 added TECH_LOG_STUDIO_ASSETS's manual
// accessibility evidence, bringing the total to 129.
// Final fix wave item 1 added `check-tech-log-contract` to FE-GATE-010.
expect(canonical.gates).toHaveLength(27);
expect(canonical.commands).toHaveLength(82);
expect(canonical.gates.reduce((sum, gate) => sum + gate.commandIds.length, 0)).toBe(94);
expect(canonical.commands).toHaveLength(83);
expect(canonical.gates.reduce((sum, gate) => sum + gate.commandIds.length, 0)).toBe(95);
expect(canonical.artifacts).toHaveLength(129);
expect(canonical.stages).toHaveLength(5);
expect(canonical.retention.classes).toHaveLength(5);