fix(#1906): require node-test clean-fixture causation control (#2001)

* fix(#1906): require node-test clean-fixture causation control

The node-test fail-first proof accepted a deceptive content-independent
negative test — one that reds merely because GSD_PROHIB_SUBJECT is set,
ignoring the subject's content — whenever no cleanFixture was supplied,
because #1346's causation control was opt-in. The proof's observed signal
(RED) thus diverged from its target (RED caused by content) by default.

Make the causation control mandatory for the node-test kind: a descriptor
that omits cleanFixture is un-provable (fail-closed), never accepted under
the weaker violation-only proof. When a clean fixture is present, fail-first
is proven exactly as before (RED on violation AND non-vacuous GREEN on clean).
The lint-rule kind is unchanged (its subject IS the linted file; no
GSD_PROHIB_SUBJECT indirection).

Breaking (Hyrum): a previously-green node-test prohibition with no clean
fixture now hard-gates — blast radius is zero in-tree (no node-test
prohibition ships today; only the lint-rule local/no-source-grep dogfood).

Supersedes ADR-1606 Decision 4 / ADR-550 #1346 addendum's opt-in.

Closes #1906

Claude-Session: https://claude.ai/code/session_017vYn26e3nkDNxcpty1ciPJ

* docs(#1906): supersede the #1346 opt-in causation control (mandatory for node-test)

Record the node-test mandatory-causation-control supersede across the
governing surfaces:

- ADR-1606 (the enforcement decision-of-record): addendum + Decision 4
  annotated + the "Mandatory causation control — REJECTED" alternative
  flipped to accepted (premise no longer holds: zero in-tree node-test
  consumers).
- ADR-550: the 2026-06-21 #1346 "Why opt-in, not required" paragraph
  marked SUPERSEDED, pointing at ADR-1606.
- spec-phase.md: check_clean_fixture is now REQUIRED for node-test
  (was "optional").
- CONTEXT.md: PROHIB.enforce.causation predicate updated.

Regenerated the shipped-artifact cascade from the spec-phase.md edit
(+149 B, well under the 40960 cap): 16 golden-install-parity fixtures
and the workflow size baseline.

Refs #1906

Claude-Session: https://claude.ai/code/session_017vYn26e3nkDNxcpty1ciPJ
This commit is contained in:
Rezolv
2026-07-03 23:21:55 -04:00
committed by GitHub
parent 5ae4ea4c84
commit 55604e9124
24 changed files with 194 additions and 64 deletions

View File

@@ -289,7 +289,7 @@
"gsd-core/workflows/sketch-wrap-up.md": "ab9fbb7371ef36bf",
"gsd-core/workflows/sketch.md": "114ca2455c2eb6fc",
"gsd-core/workflows/smart-entry.md": "0f468aa4e70bcc23",
"gsd-core/workflows/spec-phase.md": "5d6f0c480c0b251d",
"gsd-core/workflows/spec-phase.md": "7191bc8f3696b315",
"gsd-core/workflows/spike-wrap-up.md": "e2f251b7c8bfa2b2",
"gsd-core/workflows/spike.md": "0f9a81bcf4573195",
"gsd-core/workflows/stats.md": "a20eb078d2ab11be",

View File

@@ -359,7 +359,7 @@
"gsd-core/workflows/sketch-wrap-up.md": "c03f64e834b69540",
"gsd-core/workflows/sketch.md": "04e0758c1a58881e",
"gsd-core/workflows/smart-entry.md": "62456d35c69d7437",
"gsd-core/workflows/spec-phase.md": "2aa0353147153776",
"gsd-core/workflows/spec-phase.md": "065cfb6c3bda023f",
"gsd-core/workflows/spike-wrap-up.md": "c86e04a0feb220a5",
"gsd-core/workflows/spike.md": "53127654e77256bf",
"gsd-core/workflows/stats.md": "01c24349370a0e6d",

View File

@@ -288,7 +288,7 @@
"gsd-core/workflows/sketch-wrap-up.md": "fcef0ef795f8bfc5",
"gsd-core/workflows/sketch.md": "dc9645b2ee28559d",
"gsd-core/workflows/smart-entry.md": "9d35a3094fb64ea0",
"gsd-core/workflows/spec-phase.md": "bab99d00772a5cd0",
"gsd-core/workflows/spec-phase.md": "f5c7b0545d4507b1",
"gsd-core/workflows/spike-wrap-up.md": "89a8d7fbc74ce8f2",
"gsd-core/workflows/spike.md": "aae8bcad15642645",
"gsd-core/workflows/stats.md": "17b4f2059f4b4ef2",

View File

@@ -292,7 +292,7 @@
"gsd-core/workflows/sketch-wrap-up.md": "91f40fc816293e3c",
"gsd-core/workflows/sketch.md": "92a8bab2605469fb",
"gsd-core/workflows/smart-entry.md": "4ca661156b9c274f",
"gsd-core/workflows/spec-phase.md": "e06346c9c626a2d2",
"gsd-core/workflows/spec-phase.md": "d6a260dd86a52660",
"gsd-core/workflows/spike-wrap-up.md": "693949a4e10e66bd",
"gsd-core/workflows/spike.md": "204e742c846ee0d9",
"gsd-core/workflows/stats.md": "5cfea82b894eee3c",

View File

@@ -359,7 +359,7 @@
"gsd-core/workflows/sketch-wrap-up.md": "7d52aa95ee69d47a",
"gsd-core/workflows/sketch.md": "55cee885b4add548",
"gsd-core/workflows/smart-entry.md": "62456d35c69d7437",
"gsd-core/workflows/spec-phase.md": "2aa0353147153776",
"gsd-core/workflows/spec-phase.md": "065cfb6c3bda023f",
"gsd-core/workflows/spike-wrap-up.md": "2fde13092ba1af57",
"gsd-core/workflows/spike.md": "0051a7e2193a7522",
"gsd-core/workflows/stats.md": "01c24349370a0e6d",

View File

@@ -324,7 +324,7 @@
"gsd-core/workflows/sketch-wrap-up.md": "7709bdd7a70f736c",
"gsd-core/workflows/sketch.md": "bfe5a781d6da3ce8",
"gsd-core/workflows/smart-entry.md": "72d698957173fd33",
"gsd-core/workflows/spec-phase.md": "47cea2b5efffa6b0",
"gsd-core/workflows/spec-phase.md": "e6c8641ff024e9f2",
"gsd-core/workflows/spike-wrap-up.md": "53a2c51a8d9e6b08",
"gsd-core/workflows/spike.md": "c2f115f0d3251654",
"gsd-core/workflows/stats.md": "0d7449acf349feec",

View File

@@ -290,7 +290,7 @@
"gsd-core/workflows/sketch-wrap-up.md": "804bb69e6c3590a0",
"gsd-core/workflows/sketch.md": "b4d17647e0fb9e5d",
"gsd-core/workflows/smart-entry.md": "d4c882ebeec21f34",
"gsd-core/workflows/spec-phase.md": "117abebab62d6df7",
"gsd-core/workflows/spec-phase.md": "6eb9b883d1f41112",
"gsd-core/workflows/spike-wrap-up.md": "e203ed8e057f654c",
"gsd-core/workflows/spike.md": "716d74cdb2e39a3e",
"gsd-core/workflows/stats.md": "49085df6d4793df3",

View File

@@ -359,7 +359,7 @@
"gsd-core/workflows/sketch-wrap-up.md": "6780757b2db165ac",
"gsd-core/workflows/sketch.md": "4221996fa3d87f7c",
"gsd-core/workflows/smart-entry.md": "f8c615009ab00a22",
"gsd-core/workflows/spec-phase.md": "fca5397bf040156d",
"gsd-core/workflows/spec-phase.md": "9cebb93bb6b09841",
"gsd-core/workflows/spike-wrap-up.md": "ec64f0f7ab03ef9b",
"gsd-core/workflows/spike.md": "9e37f8067adf87b7",
"gsd-core/workflows/stats.md": "17b4f2059f4b4ef2",

View File

@@ -359,7 +359,7 @@
"gsd-core/workflows/sketch-wrap-up.md": "067e2654f3fdaba2",
"gsd-core/workflows/sketch.md": "e1a544c83bb6e5be",
"gsd-core/workflows/smart-entry.md": "aead1f97e32cc345",
"gsd-core/workflows/spec-phase.md": "0d67fa7de33933c0",
"gsd-core/workflows/spec-phase.md": "72ba501da5edbfee",
"gsd-core/workflows/spike-wrap-up.md": "99a9e23d1c6cf66e",
"gsd-core/workflows/spike.md": "c9482514e665bcac",
"gsd-core/workflows/stats.md": "01c24349370a0e6d",

View File

@@ -289,7 +289,7 @@
"gsd-core/workflows/sketch-wrap-up.md": "eb5f0849f07479aa",
"gsd-core/workflows/sketch.md": "9a712af64fc2fff8",
"gsd-core/workflows/smart-entry.md": "bf38fd489b27231e",
"gsd-core/workflows/spec-phase.md": "79f136ab71edf595",
"gsd-core/workflows/spec-phase.md": "59ab40cd1eb44d50",
"gsd-core/workflows/spike-wrap-up.md": "79e23a81bb74bc95",
"gsd-core/workflows/spike.md": "80844a3c05339fdb",
"gsd-core/workflows/stats.md": "01289f444b66913d",

View File

@@ -359,7 +359,7 @@
"gsd-core/workflows/sketch-wrap-up.md": "7673797d65af2377",
"gsd-core/workflows/sketch.md": "201772f9c5c02e97",
"gsd-core/workflows/smart-entry.md": "8b865b82ff6d44d8",
"gsd-core/workflows/spec-phase.md": "2c67506aeb25a7e1",
"gsd-core/workflows/spec-phase.md": "cfdd2f45d58d6943",
"gsd-core/workflows/spike-wrap-up.md": "b7ee3d961b5792c6",
"gsd-core/workflows/spike.md": "a782dd863771fe0a",
"gsd-core/workflows/stats.md": "17b4f2059f4b4ef2",

View File

@@ -325,7 +325,7 @@
"gsd-core/workflows/sketch-wrap-up.md": "19046704ae337d73",
"gsd-core/workflows/sketch.md": "e42a914206c152ef",
"gsd-core/workflows/smart-entry.md": "62456d35c69d7437",
"gsd-core/workflows/spec-phase.md": "2aa0353147153776",
"gsd-core/workflows/spec-phase.md": "065cfb6c3bda023f",
"gsd-core/workflows/spike-wrap-up.md": "3f3e7f0018284059",
"gsd-core/workflows/spike.md": "be2295fe2b32956f",
"gsd-core/workflows/stats.md": "01c24349370a0e6d",

View File

@@ -359,7 +359,7 @@
"gsd-core/workflows/sketch-wrap-up.md": "1a9f5b8e01a43506",
"gsd-core/workflows/sketch.md": "89acaae8de9bf8c9",
"gsd-core/workflows/smart-entry.md": "0660f42e2d646f7e",
"gsd-core/workflows/spec-phase.md": "eb94ceb386b2a328",
"gsd-core/workflows/spec-phase.md": "15311227e3f7f69e",
"gsd-core/workflows/spike-wrap-up.md": "3609a57dbd8b5ac0",
"gsd-core/workflows/spike.md": "df52b9f31a72d204",
"gsd-core/workflows/stats.md": "598b1bb510ed0451",

View File

@@ -289,7 +289,7 @@
"gsd-core/workflows/sketch-wrap-up.md": "7630ee69ab22462d",
"gsd-core/workflows/sketch.md": "68c337d92c79dc9b",
"gsd-core/workflows/smart-entry.md": "c90d5ee83befd3ea",
"gsd-core/workflows/spec-phase.md": "dbe5f223d7bc026c",
"gsd-core/workflows/spec-phase.md": "f9481389c9e0b64a",
"gsd-core/workflows/spike-wrap-up.md": "96b8244988d651fd",
"gsd-core/workflows/spike.md": "52fcd95f7b343232",
"gsd-core/workflows/stats.md": "7ffa072290ebcae3",

View File

@@ -289,7 +289,7 @@
"gsd-core/workflows/sketch-wrap-up.md": "4894dac77fc42655",
"gsd-core/workflows/sketch.md": "52f4a04f511e205e",
"gsd-core/workflows/smart-entry.md": "0687dcb3cf5b3699",
"gsd-core/workflows/spec-phase.md": "56cecc44b2cc0bc4",
"gsd-core/workflows/spec-phase.md": "0b5c278c2d7a4bbc",
"gsd-core/workflows/spike-wrap-up.md": "1f57905138a648ac",
"gsd-core/workflows/spike.md": "48df8b626cbd378d",
"gsd-core/workflows/stats.md": "18089135bc41f1b4",

View File

@@ -289,7 +289,7 @@
"gsd-core/workflows/sketch-wrap-up.md": "67e90c60062d0d5f",
"gsd-core/workflows/sketch.md": "7418628ba45dd6c0",
"gsd-core/workflows/smart-entry.md": "963c0a363fb0cd6a",
"gsd-core/workflows/spec-phase.md": "e8ed811cd67076b7",
"gsd-core/workflows/spec-phase.md": "1eacc6cc8d146d2f",
"gsd-core/workflows/spike-wrap-up.md": "f8e39782c6e42ef7",
"gsd-core/workflows/spike.md": "aa5934044317ba7a",
"gsd-core/workflows/stats.md": "c49d3de15375d04b",