@starci/eslint-canon-be 3.4.0 → 3.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -52,19 +52,13 @@ rules:
52
52
  docs: [docs/architecture.md#r01]
53
53
  templateNa: "Slot ownership judges where a path sits in the tree, not what a file holds: the managed templates render files into the slots that own them, and no template exists for a path that no slot, two slots or a forbidden slot own."
54
54
  proves:
55
- - {path: tests/hfs-proofs/hfs-slot-ownership.spec.mjs, editions: [lite, full], codes: [HFS_SLOT_UNDECLARED, HFS_SLOT_AMBIGUOUS, HFS_SLOT_NOT_ENABLED, HFS_FORBIDDEN_PRESENT, HFS_TRACKED_MUST_BE_IGNORED]}
56
- - {path: tests/hfs-proofs/hfs-repository-tree-layout.spec.mjs, editions: [lite, full], codes: [HFS_ROOT_ENTRY_FORBIDDEN, HFS_ROOT_MARKDOWN_FORBIDDEN, HFS_ROOT_SRC_FORBIDDEN_FE, HFS_SRC_LAYOUT_INVALID, HFS_MODULE_TIER_INVALID, HFS_WORK_IN_FE, HFS_STACKS_IN_SIDE]}
57
55
  - {path: packages/eslint/be/slot-ownership.spec.mjs, editions: [lite, full], codes: [HFS_SLOT_UNDECLARED, HFS_SLOT_AMBIGUOUS, HFS_SLOT_NOT_ENABLED]}
58
56
  - {path: packages/eslint/fe/slot-ownership.spec.mjs, editions: [lite, full], codes: [HFS_SLOT_UNDECLARED, HFS_SLOT_AMBIGUOUS, HFS_SLOT_NOT_ENABLED]}
59
57
  exemplifiedBy:
60
58
  - {path: examples/lite-app/be/src/features/webhooks/calendar/transport/http/calendar.webhook.ts, edition: lite}
61
59
  - {path: examples/ecommerce-app/be/src/features/webhooks/sepay/transport/http/sepay.webhook.ts, edition: full}
62
- - {path: tests/hfs-proofs/hfs-slot-ownership.spec.mjs, editions: [lite, full], codes: [HFS_SLOT_UNDECLARED, HFS_SLOT_AMBIGUOUS, HFS_SLOT_NOT_ENABLED, HFS_FORBIDDEN_PRESENT, HFS_TRACKED_MUST_BE_IGNORED]}
63
- witness:
64
- - {path: tests/hfs-proofs/hfs-slot-ownership.spec.mjs, edition: lite, codes: [HFS_SLOT_UNDECLARED, HFS_SLOT_AMBIGUOUS, HFS_SLOT_NOT_ENABLED, HFS_FORBIDDEN_PRESENT, HFS_TRACKED_MUST_BE_IGNORED]}
65
- - {path: tests/hfs-proofs/hfs-slot-ownership.spec.mjs, edition: full, codes: [HFS_SLOT_UNDECLARED, HFS_SLOT_AMBIGUOUS, HFS_SLOT_NOT_ENABLED, HFS_FORBIDDEN_PRESENT, HFS_TRACKED_MUST_BE_IGNORED]}
66
- - {path: tests/hfs-proofs/hfs-repository-tree-layout.spec.mjs, edition: lite, codes: [HFS_ROOT_ENTRY_FORBIDDEN, HFS_ROOT_MARKDOWN_FORBIDDEN, HFS_ROOT_SRC_FORBIDDEN_FE, HFS_SRC_LAYOUT_INVALID, HFS_MODULE_TIER_INVALID, HFS_WORK_IN_FE, HFS_STACKS_IN_SIDE]}
67
- - {path: tests/hfs-proofs/hfs-repository-tree-layout.spec.mjs, edition: full, codes: [HFS_ROOT_ENTRY_FORBIDDEN, HFS_ROOT_MARKDOWN_FORBIDDEN, HFS_ROOT_SRC_FORBIDDEN_FE, HFS_SRC_LAYOUT_INVALID, HFS_MODULE_TIER_INVALID, HFS_WORK_IN_FE, HFS_STACKS_IN_SIDE]}
60
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
61
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; the package specs named in proves keep proving the lint enforcers, the runtime-code enforcers lost their deleted runtime spec"
68
62
  - id: R02
69
63
  code: "HFS_SLOT_REQUIRED_MISSING"
70
64
  law: "A slot is missing a required file (feature `index.ts`, app `main.ts`, FE `global-error.tsx`), or the root README breaks its standard shape (title, description, standard sections in order, Work pointer, live badges only, no private URL)."
@@ -76,17 +70,14 @@ rules:
76
70
  - {kind: machine, id: required-files, at: scripts/hfs/architecture/required-files.mjs}
77
71
  - {kind: machine, id: repository-tree-required, at: scripts/hfs/architecture/hfs.mjs}
78
72
  - {kind: runtime, id: runtime-required, at: scripts/hfs/runtime-check.mjs}
73
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
79
74
  - id: R03
80
75
  code: "HFS_UNTRACKED_ROOT_ENTRY"
81
76
  editions: [lite, full]
82
77
  docs: [docs/legacy-tree-rule-coverage.md#r03]
83
- proves:
84
- - {path: tests/hfs-proofs/hfs-untracked-root-entry.spec.mjs, editions: [lite, full]}
78
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
85
79
  templateNa: "Untracked and empty directories are filesystem states, not scaffolded files."
86
- exemplifiedBy:
87
- - {path: tests/hfs-proofs/hfs-untracked-root-entry.spec.mjs, editions: [lite, full]}
88
- witness:
89
- - {path: tests/hfs-proofs/hfs-untracked-root-entry.spec.mjs, editions: [lite, full]}
80
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
90
81
  law: "No untracked or ignored entry outside an `ignored` slot."
91
82
  kinds: [check, codemod]
92
83
  gates: [land, ci, runtime]
@@ -94,19 +85,16 @@ rules:
94
85
  enforcers:
95
86
  - {kind: hfs, id: untracked-root-entry, at: scripts/hfs/check.mjs}
96
87
  - {kind: runtime, id: runtime-untracked, at: scripts/hfs/runtime-check.mjs}
88
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
97
89
  - id: R04
98
90
  code: "HFS_GITIGNORE_BLOCK_DRIFT"
99
91
  editions: [lite, full]
100
92
  docs: [docs/legacy-managed-rule-coverage.md#r04]
101
- proves:
102
- - {path: tests/hfs-proofs/hfs-gitignore-block-drift.spec.mjs, editions: [lite, full]}
93
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
103
94
  exemplifiedBy:
104
95
  - {path: packages/hfs/templates/app/gitignore-lite, edition: lite}
105
96
  - {path: packages/hfs/templates/app/gitignore, edition: full}
106
- - {path: tests/hfs-proofs/hfs-gitignore-block-drift.spec.mjs, editions: [lite, full]}
107
- witness:
108
- - {path: tests/hfs-proofs/hfs-gitignore-block-drift.spec.mjs, edition: lite, codes: [HFS_GITIGNORE_BLOCK_DRIFT]}
109
- - {path: tests/hfs-proofs/hfs-gitignore-block-drift.spec.mjs, edition: full, codes: [HFS_GITIGNORE_BLOCK_DRIFT]}
97
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
110
98
  law: "The managed `.gitignore` block equals its render."
111
99
  kinds: [check, codemod]
112
100
  gates: [land, ci]
@@ -117,14 +105,10 @@ rules:
117
105
  code: "HFS_MANAGED_FILE_DRIFT"
118
106
  editions: [lite, full]
119
107
  docs: [docs/legacy-managed-rule-coverage.md#r05]
120
- proves:
121
- - {path: tests/hfs-proofs/hfs-managed-file-drift.spec.mjs, editions: [lite, full]}
108
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
122
109
  exemplifiedBy:
123
110
  - {path: packages/hfs/templates/app/hooks/husky/pre-push, editions: [lite, full]}
124
- - {path: tests/hfs-proofs/hfs-managed-file-drift.spec.mjs, editions: [lite, full]}
125
- witness:
126
- - {path: tests/hfs-proofs/hfs-managed-file-drift.spec.mjs, edition: lite, codes: [HFS_MANAGED_FILE_DRIFT]}
127
- - {path: tests/hfs-proofs/hfs-managed-file-drift.spec.mjs, edition: full, codes: [HFS_MANAGED_FILE_DRIFT]}
111
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
128
112
  law: "A managed file equals its template render."
129
113
  kinds: [check, codemod]
130
114
  gates: [land, ci]
@@ -143,11 +127,9 @@ rules:
143
127
  editions: [lite, full]
144
128
  docs: [docs/legacy-managed-rule-coverage.md#r06-plaintext-secrets]
145
129
  templateNa: "Encrypted secrets are supplied by the app secret command; plaintext secret files are forbidden and are never scaffolded."
146
- proves: [tests/hfs-proofs/hfs-plaintext-secret.spec.mjs]
147
- exemplifiedBy:
148
- - {path: tests/hfs-proofs/hfs-plaintext-secret.spec.mjs, editions: [lite, full]}
149
- witness:
150
- - {path: tests/hfs-proofs/hfs-plaintext-secret.spec.mjs, editions: [lite, full], codes: [HFS_PLAINTEXT_SECRET]}
130
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
131
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
132
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
151
133
  - id: R07
152
134
  code: "HFS_AGENT_DATA_TRACKED"
153
135
  law: "`.starciwork` holds product records only."
@@ -156,6 +138,7 @@ rules:
156
138
  failureCodes: ["HFS_AGENT_DATA_TRACKED"]
157
139
  enforcers:
158
140
  - {kind: work-validate, id: agent-data-tracked, at: scripts/work/validate/check-example-work.mjs}
141
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
159
142
  - id: R09
160
143
  code: "HFS_IDENTITY_CUSTODY"
161
144
  law: "An identity points its secret at `secrets/identity-<slug>.enc`; UAT chooses by role."
@@ -165,21 +148,16 @@ rules:
165
148
  enforcers:
166
149
  - {kind: work-validate, id: sealed-custody-location, at: scripts/work/validate/check-work-artifacts.mjs}
167
150
  - {kind: work-validate, id: identity-custody-role, at: scripts/work/validate/check-example-work.mjs}
151
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
168
152
  - id: R10
169
153
  code: "HFS_STACKS_SHAPE"
170
154
  editions: [lite, full]
171
155
  docs: [docs/legacy-tree-rule-coverage.md#r10]
172
- proves:
173
- - {path: tests/hfs-proofs/hfs-stacks-shape.spec.mjs, editions: [lite, full]}
174
- - {path: tests/hfs-proofs/hfs-stacks-runtime-shape.spec.mjs, editions: [lite, full]}
156
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
175
157
  exemplifiedBy:
176
158
  - {path: packages/hfs/templates/app/skeleton-lite/.starcistacks/application-stacks.yaml, edition: lite}
177
159
  - {path: packages/hfs/templates/app/skeleton/.starcistacks/application-stacks.yaml, edition: full}
178
- - {path: tests/hfs-proofs/hfs-stacks-shape.spec.mjs, editions: [lite, full]}
179
- - {path: tests/hfs-proofs/hfs-stacks-runtime-shape.spec.mjs, editions: [lite, full]}
180
- witness:
181
- - {path: tests/hfs-proofs/hfs-stacks-shape.spec.mjs, editions: [lite, full]}
182
- - {path: tests/hfs-proofs/hfs-stacks-runtime-shape.spec.mjs, editions: [lite, full]}
160
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
183
161
  law: "`.starcistacks` has the edition-aware standard shape and the host Sonar owner; Swarm stacks have digest-pinned images, healthchecks, rollout, rollback and restart policies, versioned external secrets, ingress-only published ports and declared schedulers for replicated jobs. Recurring work is app-owned; host crontab installation is forbidden. Lite declares Supabase as managed backing and runs no duplicate backing-service component."
184
162
  kinds: [check, codemod]
185
163
  gates: [settle, land, ci]
@@ -194,14 +172,10 @@ rules:
194
172
  code: "HFS_SONAR_CONFIG"
195
173
  editions: [lite, full]
196
174
  docs: [docs/legacy-managed-rule-coverage.md#r11]
197
- proves:
198
- - {path: tests/hfs-proofs/hfs-sonar-config.spec.mjs, editions: [lite, full]}
175
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
199
176
  exemplifiedBy:
200
177
  - {path: packages/hfs/templates/app/quality-config/sonar-project.properties, editions: [lite, full]}
201
- - {path: tests/hfs-proofs/hfs-sonar-config.spec.mjs, editions: [lite, full]}
202
- witness:
203
- - {path: tests/hfs-proofs/hfs-sonar-config.spec.mjs, edition: lite, codes: [HFS_SONAR_CONFIG]}
204
- - {path: tests/hfs-proofs/hfs-sonar-config.spec.mjs, edition: full, codes: [HFS_SONAR_CONFIG]}
178
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
205
179
  law: "Sonar config is generated, with no host URL, importing the be lcov with the logic of be/src/modules (the coverage scope derived from the slot manifest) as the only coverage scope."
206
180
  kinds: [check, codemod]
207
181
  gates: [land, ci]
@@ -212,13 +186,10 @@ rules:
212
186
  code: "HFS_E2E_IN_AUTOMATIC_GATE"
213
187
  editions: [lite, full]
214
188
  docs: [docs/legacy-custody-e2e-coverage.md#r12-automatic-test-execution]
215
- proves:
216
- - {path: tests/hfs-proofs/hfs-e2e-automatic-gate.spec.mjs, editions: [lite, full]}
189
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
217
190
  exemplifiedBy:
218
191
  - {path: packages/hfs/templates/app/hooks/husky/pre-push, editions: [lite, full]}
219
- - {path: tests/hfs-proofs/hfs-e2e-automatic-gate.spec.mjs, editions: [lite, full]}
220
- witness:
221
- - {path: tests/hfs-proofs/hfs-e2e-automatic-gate.spec.mjs, editions: [lite, full]}
192
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
222
193
  law: "e2e never joins husky, coverage or automatic CI."
223
194
  kinds: [check]
224
195
  gates: [land, ci]
@@ -228,15 +199,11 @@ rules:
228
199
  - id: R13
229
200
  editions: [lite, full]
230
201
  docs: [docs/hfs-legacy-tooling.md#ci-and-hooks]
231
- proves: [tests/hfs/hfs-pipeline-example.spec.mjs, tests/hfs-proofs/hfs-hooks-path-redirected.spec.mjs]
202
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
232
203
  exemplifiedBy:
233
204
  - {path: packages/hfs/templates/app/ci-workflows-lite, edition: lite}
234
205
  - {path: packages/hfs/templates/app/ci-workflows, edition: full}
235
- - {path: tests/hfs/hfs-pipeline-example.spec.mjs, editions: [lite, full]}
236
- - {path: tests/hfs-proofs/hfs-hooks-path-redirected.spec.mjs, editions: [lite, full]}
237
- witness:
238
- - {path: tests/hfs/hfs-pipeline-example.spec.mjs, editions: [lite, full], codes: [HFS_CI_MISSING_CANON]}
239
- - {path: tests/hfs-proofs/hfs-hooks-path-redirected.spec.mjs, editions: [lite, full], codes: [HFS_HOOKS_PATH_REDIRECTED]}
206
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
240
207
  code: "HFS_CI_MISSING_CANON"
241
208
  law: "CI runs the pinned `starci app lint` (`npm run lint`), and a clone never redirects `core.hooksPath` away from husky."
242
209
  kinds: [check, codemod]
@@ -251,58 +218,38 @@ rules:
251
218
  editions: [lite, full]
252
219
  docs: [docs/hfs-legacy-tooling.md#dependency-consistency]
253
220
  templateNa: "Dependency versions, root overrides and the npm packageManager field are generated programmatically by pinnedSection and packageManifest in packages/hfs/scaffold/app.mjs rather than rendered from a managed dependency template."
254
- proves:
255
- - {path: tests/hfs-proofs/hfs-dep-version-skew-coverage.spec.mjs, editions: [lite, full], codes: [HFS_DEP_VERSION_SKEW]}
256
- - {path: tests/hfs-proofs/hfs-package-manager-mixed.spec.mjs, editions: [lite, full], codes: [HFS_PACKAGE_MANAGER_MIXED]}
257
- exemplifiedBy:
258
- - {path: tests/hfs-proofs/hfs-dep-version-skew-coverage.spec.mjs, editions: [lite, full], codes: [HFS_DEP_VERSION_SKEW]}
259
- - {path: tests/hfs-proofs/hfs-package-manager-mixed.spec.mjs, editions: [lite, full], codes: [HFS_PACKAGE_MANAGER_MIXED]}
260
- witness:
261
- - {path: tests/hfs-proofs/hfs-dep-version-skew-coverage.spec.mjs, edition: lite, codes: [HFS_DEP_VERSION_SKEW]}
262
- - {path: tests/hfs-proofs/hfs-package-manager-mixed.spec.mjs, edition: lite, codes: [HFS_PACKAGE_MANAGER_MIXED]}
263
- - {path: tests/hfs-proofs/hfs-dep-version-skew-coverage.spec.mjs, edition: full, codes: [HFS_DEP_VERSION_SKEW]}
264
- - {path: tests/hfs-proofs/hfs-package-manager-mixed.spec.mjs, edition: full, codes: [HFS_PACKAGE_MANAGER_MIXED]}
221
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
222
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
265
223
  kinds: [check, codemod]
266
224
  gates: [land, ci]
267
225
  failureCodes: ["HFS_DEP_VERSION_SKEW", "HFS_PACKAGE_MANAGER_MIXED"]
268
226
  enforcers:
269
227
  - {kind: hfs, id: dep-version-skew, at: scripts/hfs/rules/deps.mjs}
270
228
  - {kind: machine, id: package-manager, at: scripts/hfs/architecture/hfs.mjs}
229
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
271
230
  - id: R15
272
231
  code: "HFS_CANON_PIN_DRIFT"
273
232
  law: "Canon packages and frameworks match `canon-pins.yaml`."
274
233
  editions: [lite, full]
275
234
  docs: [docs/hfs-legacy-tooling.md#canon-package-pins]
276
235
  templateNa: "Dependency versions are generated programmatically by pinnedSection and packageManifest in packages/hfs/scaffold/app.mjs rather than rendered from a managed dependency template."
277
- proves:
278
- - {path: tests/hfs-proofs/hfs-canon-pin-drift-checker.spec.mjs, editions: [lite, full]}
279
- - {path: tests/hfs-proofs/hfs-canon-pin-drift.spec.mjs, editions: [lite, full]}
280
- exemplifiedBy:
281
- - {path: tests/hfs-proofs/hfs-canon-pin-drift-checker.spec.mjs, edition: lite, codes: [HFS_CANON_PIN_DRIFT]}
282
- - {path: tests/hfs-proofs/hfs-canon-pin-drift-checker.spec.mjs, edition: full, codes: [HFS_CANON_PIN_DRIFT]}
283
- witness:
284
- - {path: tests/hfs-proofs/hfs-canon-pin-drift-checker.spec.mjs, edition: lite, codes: [HFS_CANON_PIN_DRIFT]}
285
- - {path: tests/hfs-proofs/hfs-canon-pin-drift-checker.spec.mjs, edition: full, codes: [HFS_CANON_PIN_DRIFT]}
236
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
237
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
286
238
  kinds: [check, codemod]
287
239
  gates: [land, ci]
288
240
  failureCodes: ["HFS_CANON_PIN_DRIFT"]
289
241
  enforcers:
290
242
  - {kind: hfs, id: canon-pin-drift, at: scripts/hfs/check.mjs}
243
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
291
244
  - id: R16
292
245
  code: "HFS_TOOL_CONFIG_LOCAL"
293
246
  editions: ["lite", "full"]
294
247
  docs: ["docs/managed-tooling-coverage.md#local-tool-configuration"]
295
- proves:
296
- - {path: "tests/hfs-proofs/hfs-tool-config-local.spec.mjs", editions: ["lite", "full"]}
297
- - {path: "tests/hfs-proofs/hfs-tool-config-forbidden.spec.mjs", editions: ["lite", "full"]}
248
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
298
249
  exemplifiedBy:
299
250
  - {path: "packages/hfs/templates/be/tool-config/eslint.config.mjs", editions: ["lite", "full"]}
300
251
  - {path: "packages/hfs/templates/fe/tool-config/eslint.config.mjs", editions: ["lite", "full"]}
301
- - {path: "tests/hfs-proofs/hfs-tool-config-local.spec.mjs", editions: ["lite", "full"]}
302
- - {path: "tests/hfs-proofs/hfs-tool-config-forbidden.spec.mjs", editions: ["lite", "full"]}
303
- witness:
304
- - {path: "tests/hfs-proofs/hfs-tool-config-local.spec.mjs", editions: ["lite", "full"], codes: ["HFS_TOOL_CONFIG_LOCAL"]}
305
- - {path: "tests/hfs-proofs/hfs-tool-config-forbidden.spec.mjs", editions: ["lite", "full"], codes: ["HFS_TOOL_CONFIG_LOCAL"]}
252
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
306
253
  law: "Configs only call the factories; no local rules."
307
254
  kinds: [check, codemod]
308
255
  gates: [land, ci]
@@ -314,15 +261,12 @@ rules:
314
261
  code: "HFS_RULE_OFF_WITHOUT_REPLACEMENT"
315
262
  editions: ["lite", "full"]
316
263
  docs: ["docs/managed-tooling-coverage.md#rendered-lint-configurations"]
317
- proves:
318
- - {path: "tests/hfs-proofs/hfs-rule-off-without-replacement.spec.mjs", editions: ["lite", "full"]}
264
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
319
265
  exemplifiedBy:
320
266
  - {path: "packages/hfs/templates/be/tool-config/eslint.config.mjs", editions: ["lite", "full"]}
321
267
  - {path: "packages/hfs/templates/fe/tool-config/eslint.config.mjs", editions: ["lite", "full"]}
322
268
  - {path: "packages/hfs/templates/fe/tool-config/stylelint.config.mjs", editions: ["lite", "full"]}
323
- - {path: "tests/hfs-proofs/hfs-rule-off-without-replacement.spec.mjs", editions: ["lite", "full"]}
324
- witness:
325
- - {path: "tests/hfs-proofs/hfs-rule-off-without-replacement.spec.mjs", editions: ["lite", "full"], codes: ["HFS_RULE_OFF_WITHOUT_REPLACEMENT"]}
269
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
326
270
  law: "The ESLint configuration (and a front end's stylelint configuration) is the rendered one-liner, so no rule is off, warned or redefined in a repository."
327
271
  kinds: [check]
328
272
  gates: [land, ci]
@@ -343,14 +287,11 @@ rules:
343
287
  code: "HFS_FORMAT"
344
288
  editions: ["lite", "full"]
345
289
  docs: ["docs/managed-tooling-coverage.md#canonical-formatting"]
346
- proves:
347
- - {path: "tests/hfs-proofs/hfs-format.spec.mjs", editions: ["lite", "full"]}
290
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
348
291
  exemplifiedBy:
349
292
  - {path: "packages/hfs/templates/app/tool-config-lite/prettierrc", edition: "lite"}
350
293
  - {path: "packages/hfs/templates/app/tool-config/prettierrc", edition: "full"}
351
- - {path: "tests/hfs-proofs/hfs-format.spec.mjs", editions: ["lite", "full"]}
352
- witness:
353
- - {path: "tests/hfs-proofs/hfs-format.spec.mjs", editions: ["lite", "full"], codes: ["HFS_FORMAT"]}
294
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
354
295
  law: "Prettier is the only formatter."
355
296
  kinds: [codemod]
356
297
  gates: [land, ci]
@@ -368,6 +309,7 @@ rules:
368
309
  - {kind: eslint-fe, id: file-size-growth}
369
310
  - {kind: sonar, id: cognitive-complexity, at: knowledge/sonar-gate.yaml}
370
311
  - {kind: runtime, id: runtime-size, at: scripts/hfs/runtime-rules/size.mjs}
312
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
371
313
  - id: R21
372
314
  code: "HFS_DUPLICATE_CODE"
373
315
  law: "No duplicated blocks or twice-defined helpers."
@@ -388,14 +330,8 @@ rules:
388
330
  exemplifiedBy:
389
331
  - {path: "packages/hfs/templates/be/tool-config/tsconfig.json", editions: ["lite", "full"]}
390
332
  - {path: "packages/hfs/templates/fe/tool-config/tsconfig.json", editions: ["lite", "full"]}
391
- - {path: "tests/hfs-proofs/hfs-ts-strict.spec.mjs", editions: ["lite", "full"], codes: ["HFS_TS_STRICT"]}
392
- - {path: "tests/hfs-proofs/hfs-ts-strict-rule-tester.spec.mjs", editions: ["lite", "full"], codes: ["FE_TYPE_ESCAPE"]}
393
- proves:
394
- - {path: "tests/hfs-proofs/hfs-ts-strict.spec.mjs", editions: ["lite", "full"], codes: ["HFS_TS_STRICT"]}
395
- - {path: "tests/hfs-proofs/hfs-ts-strict-rule-tester.spec.mjs", editions: ["lite", "full"], codes: ["FE_TYPE_ESCAPE"]}
396
- witness:
397
- - {path: "tests/hfs-proofs/hfs-ts-strict.spec.mjs", editions: ["lite", "full"], codes: ["HFS_TS_STRICT"]}
398
- - {path: "tests/hfs-proofs/hfs-ts-strict-rule-tester.spec.mjs", editions: ["lite", "full"], codes: ["FE_TYPE_ESCAPE"]}
333
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
334
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
399
335
  law: "tsconfig extends `@starci/tsconfig` and lowers no flag; no assertion, `!` or `any` in product source."
400
336
  kinds: [codemod, design, lint]
401
337
  gates: [pre-commit, settle, land, ci]
@@ -411,32 +347,24 @@ rules:
411
347
  editions: ["lite", "full"]
412
348
  docs: ["docs/hfs-contract-snapshots.md#committed-contract-snapshots"]
413
349
  templateNa: "Contract snapshots are generated from each app's composed schema and operation table, not from a scaffolded contract artifact."
414
- proves:
415
- - {path: "tests/hfs-proofs/hfs-contract-snapshot-drift-direct.spec.mjs", editions: ["lite", "full"], codes: ["HFS_CONTRACT_SNAPSHOT_DRIFT"]}
416
- exemplifiedBy:
417
- - {path: "tests/hfs-proofs/hfs-contract-snapshot-drift-direct.spec.mjs", editions: ["lite", "full"], codes: ["HFS_CONTRACT_SNAPSHOT_DRIFT"]}
418
- witness:
419
- - {path: "tests/hfs-proofs/hfs-contract-snapshot-drift-direct.spec.mjs", edition: "lite", codes: ["HFS_CONTRACT_SNAPSHOT_DRIFT"]}
420
- - {path: "tests/hfs-proofs/hfs-contract-snapshot-drift-direct.spec.mjs", edition: "full", codes: ["HFS_CONTRACT_SNAPSHOT_DRIFT"]}
350
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
351
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
421
352
  law: "The be side commits its contract snapshot and it equals the emit; the fe side reads it in place (be/contracts/)."
422
353
  kinds: [check]
423
354
  gates: [land, ci]
424
355
  failureCodes: ["HFS_CONTRACT_SNAPSHOT_DRIFT"]
425
356
  enforcers:
426
357
  - {kind: hfs, id: contract-snapshot-drift, at: scripts/hfs/rules/contract.mjs}
358
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
427
359
  - id: R24
428
360
  code: "HFS_ARCH_CONFIG_UNREAD"
429
361
  editions: ["lite", "full"]
430
362
  docs: ["docs/hfs-analysis-coverage.md#analysed-production-source"]
431
- proves:
432
- - {path: "tests/hfs-proofs/hfs-arch-config-unread.spec.mjs", editions: ["lite", "full"], codes: ["HFS_ARCH_CONFIG_UNREAD"]}
363
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
433
364
  exemplifiedBy:
434
365
  - {path: "packages/hfs/templates/be/skeleton-lite/apps/api/src/main.ts", edition: "lite"}
435
366
  - {path: "packages/hfs/templates/be/skeleton/apps/__app__/src/main.ts", edition: "full"}
436
- - {path: "tests/hfs-proofs/hfs-arch-config-unread.spec.mjs", editions: ["lite", "full"], codes: ["HFS_ARCH_CONFIG_UNREAD"]}
437
- witness:
438
- - {path: "tests/hfs-proofs/hfs-arch-config-unread.spec.mjs", edition: "lite", codes: ["HFS_ARCH_CONFIG_UNREAD"]}
439
- - {path: "tests/hfs-proofs/hfs-arch-config-unread.spec.mjs", edition: "full", codes: ["HFS_ARCH_CONFIG_UNREAD"]}
367
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
440
368
  law: "The machine reads `hfs.json`; zero files analysed is red."
441
369
  kinds: [check]
442
370
  gates: [land, ci]
@@ -447,17 +375,13 @@ rules:
447
375
  code: "HFS_UNUSED_EXPORT"
448
376
  editions: ["lite", "full"]
449
377
  docs: ["docs/hfs-export-liveness.md#export-and-file-liveness"]
450
- proves:
451
- - {path: "tests/hfs-proofs/hfs-unused-export.spec.mjs", editions: ["lite", "full"], codes: ["HFS_UNUSED_EXPORT", "HFS_UNUSED_FILE"]}
378
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
452
379
  exemplifiedBy:
453
380
  - {path: "packages/hfs/templates/be/skeleton-lite/apps/api/src/main.ts", edition: "lite"}
454
381
  - {path: "packages/hfs/templates/be/skeleton/apps/__app__/src/main.ts", edition: "full"}
455
382
  - {path: "packages/hfs/templates/fe/skeleton-lite/apps/web/src/app/[locale]/page.tsx", edition: "lite"}
456
383
  - {path: "packages/hfs/templates/fe/skeleton/apps/app/src/app/[locale]/page.tsx", edition: "full"}
457
- - {path: "tests/hfs-proofs/hfs-unused-export.spec.mjs", editions: ["lite", "full"], codes: ["HFS_UNUSED_EXPORT", "HFS_UNUSED_FILE"]}
458
- witness:
459
- - {path: "tests/hfs-proofs/hfs-unused-export.spec.mjs", edition: "lite", codes: ["HFS_UNUSED_EXPORT", "HFS_UNUSED_FILE"]}
460
- - {path: "tests/hfs-proofs/hfs-unused-export.spec.mjs", edition: "full", codes: ["HFS_UNUSED_EXPORT", "HFS_UNUSED_FILE"]}
384
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
461
385
  law: "No public export without a consumer; no source file nothing reaches."
462
386
  kinds: [lint, codemod]
463
387
  gates: [settle, land, ci]
@@ -491,7 +415,6 @@ rules:
491
415
  docs: [docs/a16-r26-r28.md#r27]
492
416
  proves:
493
417
  - {path: packages/eslint/be/legacy-owner-graph.a16.spec.mjs, editions: [lite, full]}
494
- - {path: tests/hfs-runtime-rules/legacy-owner-cycle.a16.spec.mjs, editions: [lite, full]}
495
418
  exemplifiedBy:
496
419
  - {path: packages/eslint/be/legacy-owner-graph.a16.spec.mjs, editions: [lite, full]}
497
420
  witness:
@@ -505,6 +428,7 @@ rules:
505
428
  - {kind: eslint-be, id: owner-cycle}
506
429
  - {kind: eslint-fe, id: owner-cycle}
507
430
  - {kind: runtime, id: runtime-cycles, at: scripts/hfs/runtime-rules/tier-direction.mjs}
431
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; the package specs named in proves keep proving the lint enforcers, the runtime-code enforcers lost their deleted runtime spec"
508
432
  - id: R28
509
433
  code: "BE_FEATURE_IMPORTS_FEATURE"
510
434
  editions: [lite, full]
@@ -527,14 +451,10 @@ rules:
527
451
  law: "Feature root is `index.ts`, module, `application/`, `transport/<protocol>/`; `application/` never imports `transport/` or a protocol framework."
528
452
  editions: [lite, full]
529
453
  docs: [docs/a16-r29-r31.md#r29-feature-shape]
530
- proves:
531
- - {path: tests/hfs-proofs/a16-r29-r31.spec.mjs, editions: [lite, full]}
454
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
532
455
  exemplifiedBy:
533
456
  - {path: packages/hfs/templates/be/patterns/api/feature.module.ts.tpl, editions: [lite, full]}
534
- - {path: tests/hfs-proofs/a16-r29-r31.spec.mjs, editions: [lite, full]}
535
- witness:
536
- - {path: tests/hfs-proofs/a16-r29-r31.spec.mjs, edition: lite}
537
- - {path: tests/hfs-proofs/a16-r29-r31.spec.mjs, edition: full}
457
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
538
458
  kinds: [check, codemod, design, lint]
539
459
  gates: [settle, land, ci]
540
460
  failureCodes: ["BE_FEATURE_SHAPE", "BE_FEATURE_LAYOUT_INVALID", "BE_APPLICATION_IMPORTS_TRANSPORT", "BE_APPLICATION_TRANSPORT_FRAMEWORK"]
@@ -922,14 +842,10 @@ rules:
922
842
  editions: [lite, full]
923
843
  docs: [docs/quality-bar.md#r47-test-topology]
924
844
  proves:
925
- - {path: tests/hfs-architecture/r47-test-topology-coverage.spec.mjs, editions: [lite, full], codes: ["BE_TEST_TOPOLOGY", "BE_CONTRACT_UNGUARDED"]}
926
845
  - {path: packages/eslint/be/r47-topology-coverage.spec.mjs, editions: [lite, full], codes: ["BE_TEST_TOPOLOGY"]}
927
846
  exemplifiedBy:
928
847
  - {path: packages/hfs/templates/be/inbox/service.spec.ts.tpl, editions: [lite, full]}
929
- - {path: tests/hfs-architecture/r47-test-topology-coverage.spec.mjs, editions: [lite, full], codes: ["BE_TEST_TOPOLOGY", "BE_CONTRACT_UNGUARDED"]}
930
- witness:
931
- - {path: tests/hfs-architecture/r47-test-topology-coverage.spec.mjs, edition: lite, codes: ["BE_TEST_TOPOLOGY", "BE_CONTRACT_UNGUARDED"]}
932
- - {path: tests/hfs-architecture/r47-test-topology-coverage.spec.mjs, edition: full, codes: ["BE_TEST_TOPOLOGY", "BE_CONTRACT_UNGUARDED"]}
848
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
933
849
  law: "One jest config, projects `unit`, `integration`, `e2e` and `contract`, live by folder, `diagnostics: false`; unit specs are `<name>.<role>.spec.ts` beside the file they test: required for the roles of `ruleParams.be.unitRoles` (`<name>.service.spec.ts` beside a `<name>.service.ts`, `<name>.cli.spec.ts` beside a cli command `<name>.cli.ts` of `src/features/cli`), optional for any other logic role (`ruleParams.be.logicRoles`) inside a slot whose `coverage` is required, and nowhere else but beside a webhook or realtime door that has no service of its own (`<provider>.webhook.spec.ts`, `<channel>.gateway.spec.ts`, `<x>.subscription.spec.ts`) (every unit-tested subject has exactly one; any other `*.spec.ts` outside `be/src/tests/{world,integration,e2e,contract}` is a finding, including specs in apps), and the unit project collects coverage from the logic roles of the measured roots only (the scope derived from the slot manifest, R204) with a per-file threshold of 100 on lines, branches, functions and statements (`test` runs `--coverage`; `importHelpers` and `tslib`); `be/src/tests/world/` is the ONLY test infrastructure: `global-setup.ts` starts the app's own stack (`.starcistacks/<env>`, named by `stack` in `test-world.config.ts`, the declaration of the test-world library in its one named form `export const { useTestWorld, useSandbox } = defineTestWorld({...})` (a default export is not read): every service it declares runs REAL, behind toxiproxy, images and versions read from the stack at run time, never spelled in test source) or attaches to a warm one that answers, and runs the migrations once over the cli app's connections (the runner of the cli migrate command); `global-teardown.ts` stops only what its setup started; `use-test-world.ts` exports `useTestWorld({ apps } | { modules })` (`world.apps.<name>.api`, `world.db.<connection>`, `world.infra.<service>` with `latency(ms)`, `cut()` and `restore()` on the real service, `world.fake.<provider>`, `world.waitFor`) and `fakes/<provider>/` holds the network-edge fakes (`failNext`, `replayWebhook`, `delay`, payload fixtures) of external SaaS the team does not operate ONLY: a fake of a service the stack declares is refused, except stateless compute that needs special hardware or an external model (GPU inference, a self-hosted embedding model), whose `stacks` entry in `test-world.config.ts` declares `{ fakedBy: <fake>, reason }` with a non-empty `reason` (a stateful service, or one with a persistent volume, is never accepted); it alone owns containers, DataSource, migrations and `process.env`; nothing under `be/src/tests` overrides a provider or DI token; `be/src/tests/integration/<capability>/*.integration-spec.ts` (`{ modules }`, with the real peer apps its client calls beside them as `apps`; real infrastructure, no HTTP door of ours), `be/src/tests/e2e/<area>/*.e2e-spec.ts` (`{ apps }`) and `be/src/tests/contract/<provider>/*.contract-spec.ts` (provider sandboxes, skipped without sandbox config, run only by `test:contract`, never by `test` or `test:e2e`) agree folder with suffix; an integration or e2e spec passes `useTestWorld` one object literal with plain keys (no variable, spread or computed key) and calls it; the contract layer skips only through the test-world library's `useSandbox(...)` when the sandbox config is absent (`sandbox.describe(...)`), and every `fakes/<provider>/` that serves payload fixtures (`payloads/*.json`) has a `contract/<provider>/*.contract-spec.ts` that references those fixtures and asserts `shapeOf(real)` equals `shapeOf(fixture)` (the helper `shapeOf` is named by `ruleParams.be.contractShape` of the slot manifest; fakes the test-world library provides are guarded by the library); no `.test.ts`, `int-spec` or `harness-spec`, no `live/` and no `be/src/tests/e2e/world`."
934
850
  kinds: [check, codemod, lint]
935
851
  gates: [land, ci]
@@ -943,6 +859,7 @@ rules:
943
859
  - {kind: eslint-be, id: tests-infra-only-in-world}
944
860
  - {kind: eslint-be, id: tests-no-override}
945
861
  - {kind: eslint-be, id: test-world-shape}
862
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; the package specs named in proves keep proving the lint enforcers, the runtime-code enforcers lost their deleted runtime spec"
946
863
  - id: R48
947
864
  code: "BE_SPEC_QUALITY"
948
865
  editions: [lite, full]
@@ -1060,13 +977,10 @@ rules:
1060
977
  code: "FE_WIRE_GENERATED"
1061
978
  editions: [lite, full]
1062
979
  docs: [docs/code-pattern-enforcement.md#r52]
1063
- proves: [{path: tests/hfs/r52-wire-generated.spec.mjs, editions: [lite, full], codes: ["FE_WIRE_GENERATED"]}]
980
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
1064
981
  exemplifiedBy:
1065
982
  - {path: packages/hfs/templates/fe/table/graphql/query.types.ts.tpl, editions: [lite, full]}
1066
- - {path: tests/hfs/r52-wire-generated.spec.mjs, editions: [lite, full], codes: ["FE_WIRE_GENERATED"]}
1067
- witness:
1068
- - {path: tests/hfs/r52-wire-generated.spec.mjs, edition: lite, codes: ["FE_WIRE_GENERATED"]}
1069
- - {path: tests/hfs/r52-wire-generated.spec.mjs, edition: full, codes: ["FE_WIRE_GENERATED"]}
983
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
1070
984
  law: "Wire types are generated by graphql-codegen from `be/contracts/<app>/schema.graphql`, read in place and never copied, into `modules/api/graphql/__generated__`; an operation's request and response types re-export the generated ones and are never typed by hand."
1071
985
  kinds: [lint, check, design]
1072
986
  gates: [settle, land, ci]
@@ -1078,14 +992,11 @@ rules:
1078
992
  code: "FE_ERROR_BOUNDARY_MISSING"
1079
993
  editions: [lite, full]
1080
994
  docs: [docs/code-pattern-enforcement.md#r53]
1081
- proves: [{path: tests/hfs/r53-error-boundaries.spec.mjs, editions: [lite, full], codes: ["FE_ERROR_BOUNDARY_MISSING", "FE_SUSPENSE_NULL_FALLBACK"]}]
995
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
1082
996
  exemplifiedBy:
1083
997
  - {path: packages/hfs/templates/fe/skeleton-lite/apps/web/src/app/global-error.tsx, edition: lite}
1084
998
  - {path: packages/hfs/templates/fe/skeleton/apps/app/src/app/global-error.tsx, edition: full}
1085
- - {path: tests/hfs/r53-error-boundaries.spec.mjs, editions: [lite, full], codes: ["FE_ERROR_BOUNDARY_MISSING", "FE_SUSPENSE_NULL_FALLBACK"]}
1086
- witness:
1087
- - {path: tests/hfs/r53-error-boundaries.spec.mjs, edition: lite, codes: ["FE_ERROR_BOUNDARY_MISSING", "FE_SUSPENSE_NULL_FALLBACK"]}
1088
- - {path: tests/hfs/r53-error-boundaries.spec.mjs, edition: full, codes: ["FE_ERROR_BOUNDARY_MISSING", "FE_SUSPENSE_NULL_FALLBACK"]}
999
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
1089
1000
  law: "Global, locale error, not-found and loading boundaries exist."
1090
1001
  kinds: [check, codemod, lint]
1091
1002
  gates: [settle, land, ci]
@@ -1212,15 +1123,12 @@ rules:
1212
1123
  docs: [docs/architecture.md#r59]
1213
1124
  proves:
1214
1125
  - {path: packages/eslint/fe/i18n-placement-coverage.spec.mjs, editions: [lite, full]}
1215
- - {path: tests/hfs/hfs-i18n-placement-coverage.spec.mjs, editions: [lite, full], codes: [FE_I18N_PLACEMENT]}
1216
1126
  exemplifiedBy:
1217
1127
  - {path: packages/hfs/templates/fe/skeleton-lite/apps/web/src/modules/i18n, edition: lite}
1218
1128
  - {path: packages/hfs/templates/fe/skeleton/packages/__project__-i18n/src, edition: full}
1219
1129
  - {path: packages/eslint/fe/i18n-placement-coverage.spec.mjs, editions: [lite, full]}
1220
- - {path: tests/hfs/hfs-i18n-placement-coverage.spec.mjs, editions: [lite, full], codes: [FE_I18N_PLACEMENT]}
1221
1130
  witness:
1222
1131
  - {path: packages/eslint/fe/i18n-placement-coverage.spec.mjs, editions: [lite, full]}
1223
- - {path: tests/hfs/hfs-i18n-placement-coverage.spec.mjs, editions: [lite, full], codes: [FE_I18N_PLACEMENT]}
1224
1132
  law: "`next-intl` with `[locale]`; the next-intl stack is written once per front end: `fe/packages/<family>-i18n` (`createAppI18n`) called by each app's `modules/i18n/index.ts`, or the only app's `modules/i18n/`."
1225
1133
  kinds: [check, codemod, lint]
1226
1134
  gates: [settle, land, ci]
@@ -1234,18 +1142,16 @@ rules:
1234
1142
  - {kind: eslint-fe, id: use-intl-formatter}
1235
1143
  - {kind: hfs, id: i18n-placement, at: scripts/hfs/rules/frontend-tree.mjs}
1236
1144
 
1145
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; the package specs named in proves keep proving the lint enforcers, the runtime-code enforcers lost their deleted runtime spec"
1237
1146
  - id: R60
1238
1147
  code: "FE_I18N_CATALOG"
1239
1148
  editions: [lite, full]
1240
1149
  docs: [docs/architecture.md#r60]
1241
- proves:
1242
- - {path: tests/hfs/hfs-i18n-catalog-coverage.spec.mjs, editions: [lite, full]}
1150
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
1243
1151
  exemplifiedBy:
1244
1152
  - {path: packages/hfs/templates/fe/skeleton-lite/apps/web/src/modules/i18n/messages, edition: lite}
1245
1153
  - {path: packages/hfs/templates/fe/skeleton/apps/app/src/modules/i18n/messages, edition: full}
1246
- - {path: tests/hfs/hfs-i18n-catalog-coverage.spec.mjs, editions: [lite, full]}
1247
- witness:
1248
- - {path: tests/hfs/hfs-i18n-catalog-coverage.spec.mjs, editions: [lite, full]}
1154
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
1249
1155
  law: "Same keys in every catalog, `pick` for clients."
1250
1156
  kinds: [check]
1251
1157
  gates: [land, ci]
@@ -1308,19 +1214,15 @@ rules:
1308
1214
  editions: [lite, full]
1309
1215
  docs: [docs/architecture.md#r63]
1310
1216
  templateNa: "Shared package manifests are authored by the app; the frontend scaffold creates app workspaces rather than shared package owners."
1311
- proves:
1312
- - {path: tests/repo/architecture-package-shape-coverage.spec.mjs, editions: [lite, full]}
1313
- exemplifiedBy:
1314
- - {path: tests/repo/architecture-package-shape-coverage.spec.mjs, editions: [lite, full]}
1315
- witness:
1316
- - {path: tests/repo/architecture-package-shape-coverage.spec.mjs, edition: lite, codes: [FE_PACKAGE_SHAPE]}
1317
- - {path: tests/repo/architecture-package-shape-coverage.spec.mjs, edition: full, codes: [FE_PACKAGE_SHAPE]}
1217
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
1218
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
1318
1219
  law: "Packages build to `dist` with explicit exports and no dead unit."
1319
1220
  kinds: [check, design]
1320
1221
  gates: [land, ci]
1321
1222
  failureCodes: ["FE_PACKAGE_SHAPE"]
1322
1223
  enforcers:
1323
1224
  - {kind: machine, id: package-shape, at: scripts/hfs/architecture/package-shape.mjs}
1225
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
1324
1226
  - id: R64
1325
1227
  code: "FE_APP_ISOLATION"
1326
1228
  law: "Apps never import apps; ui-screen declares `app`."
@@ -1782,9 +1684,9 @@ rules:
1782
1684
  - {kind: eslint-be, id: public-contract-form}
1783
1685
  editions: ["lite","full"]
1784
1686
  docs: ["docs/be-shape-coverage.md#r89"]
1785
- proves: [{"path":"tests/hfs-proofs/be-r89-source-form-coverage.spec.mjs","editions":["lite","full"]}]
1786
- exemplifiedBy: [{"path":"packages/hfs/templates/be/patterns/api/graphql.input.ts.tpl","editions":["lite","full"]},{"path":"tests/hfs-proofs/be-r89-source-form-coverage.spec.mjs","editions":["lite","full"]}]
1787
- witness: [{"path":"tests/hfs-proofs/be-r89-source-form-coverage.spec.mjs","edition":"lite","codes":["BE_SOURCE_FORM","BE_PUBLIC_CONTRACT_FORM"]},{"path":"tests/hfs-proofs/be-r89-source-form-coverage.spec.mjs","edition":"full","codes":["BE_SOURCE_FORM","BE_PUBLIC_CONTRACT_FORM"]}]
1687
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
1688
+ exemplifiedBy: [{"path":"packages/hfs/templates/be/patterns/api/graphql.input.ts.tpl","editions":["lite","full"]}]
1689
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
1788
1690
  gates: ["pre-commit","settle","land","ci"]
1789
1691
  - id: R90
1790
1692
  code: "BE_INFRA_OWNER"
@@ -1889,14 +1791,12 @@ rules:
1889
1791
  docs: ["docs/code-pattern-enforcement.md#r93-vendor-and-grammar-ownership"]
1890
1792
  proves:
1891
1793
  - packages/eslint/fe/r93-vendor-coverage.spec.mjs
1892
- - tests/hfs-architecture/r93-grammar-ownership.spec.mjs
1893
1794
  templateNa: "Vendor boundary violations and installed Grammar package contracts are checked against consumer ownership; no managed template scaffolds a vendor install or a forbidden import."
1894
1795
  exemplifiedBy:
1895
1796
  - {path: packages/eslint/fe/r93-vendor-coverage.spec.mjs, editions: [lite, full]}
1896
- - {path: tests/hfs-architecture/r93-grammar-ownership.spec.mjs, editions: [lite, full]}
1897
1797
  witness:
1898
1798
  - {path: packages/eslint/fe/r93-vendor-coverage.spec.mjs, editions: [lite, full], codes: [FE_VENDOR_BOUNDARY]}
1899
- - {path: tests/hfs-architecture/r93-grammar-ownership.spec.mjs, editions: [lite, full], codes: [ARCH_GRAMMAR_CONTRACT_INVALID, ARCH_GRAMMAR_EXPORT_BYPASS]}
1799
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; the package specs named in proves keep proving the lint enforcers, the runtime-code enforcers lost their deleted runtime spec"
1900
1800
  - id: R94
1901
1801
  code: "FE_SLOT_FILE_ROLE"
1902
1802
  law: "A front-end file is owned by a slot and named by it: a slot that owns a directory (route, feature, components, hooks, api module) holds only the files its `allows` list names, and holds them inside a folder of its own."
@@ -1907,9 +1807,9 @@ rules:
1907
1807
  - {kind: machine, id: fe-slot-allows, at: scripts/hfs/architecture/fe-slot-allows.mjs}
1908
1808
  editions: ["lite","full"]
1909
1809
  docs: ["docs/hfs-authored-file-boundaries.md#r94-slot-file-roles"]
1910
- proves: ["tests/hfs-architecture/r94-r96-r97-coverage.spec.mjs"]
1911
- exemplifiedBy: [{"path":"packages/hfs/templates/fe/skeleton-lite/apps/web/src/app/[locale]/page.tsx","edition":"lite"},{"path":"packages/hfs/templates/fe/skeleton/apps/app/src/app/[locale]/page.tsx","edition":"full"},{"path":"tests/hfs-architecture/r94-r96-r97-coverage.spec.mjs","editions":["lite","full"],"codes":["FE_SLOT_FILE_ROLE"]}]
1912
- witness: [{"path":"tests/hfs-architecture/r94-r96-r97-coverage.spec.mjs","editions":["lite","full"],"codes":["FE_SLOT_FILE_ROLE"]}]
1810
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
1811
+ exemplifiedBy: [{"path":"packages/hfs/templates/fe/skeleton-lite/apps/web/src/app/[locale]/page.tsx","edition":"lite"},{"path":"packages/hfs/templates/fe/skeleton/apps/app/src/app/[locale]/page.tsx","edition":"full"}]
1812
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
1913
1813
  - id: R95
1914
1814
  code: "BE_OPERATION_CONTRACT"
1915
1815
  law: "A versioned operation is declared once in the app's typed operation table (`OperationContract<Input, Output, RefusalCode>` registered by `defineOperations`): its input and output are closed types (never `any`, `unknown` or `Record<string, unknown>`), its refusal codes a closed union of string literals, and the route that serves the table takes `OperationRequest<Table>` and answers `Promise<OperationReply<Table>>` of that one table."
@@ -1936,9 +1836,9 @@ rules:
1936
1836
  editions: ["lite","full"]
1937
1837
  docs: ["docs/hfs-authored-file-boundaries.md#r96-document-language"]
1938
1838
  templateNa: "Language validation judges authored document content rather than a scaffolded file role; edition-specific spec fixtures exercise English documents and localized data."
1939
- proves: ["tests/hfs-architecture/r94-r96-r97-coverage.spec.mjs"]
1940
- exemplifiedBy: [{"path":"tests/hfs-architecture/r94-r96-r97-coverage.spec.mjs","editions":["lite","full"],"codes":["HFS_DOC_NOT_ENGLISH"]}]
1941
- witness: [{"path":"tests/hfs-architecture/r94-r96-r97-coverage.spec.mjs","editions":["lite","full"],"codes":["HFS_DOC_NOT_ENGLISH"]}]
1839
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
1840
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
1841
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
1942
1842
  - id: R97
1943
1843
  code: "FE_NO_TESTS"
1944
1844
  law: "The front end (`fe/`) has no tests by standard: no `*.spec.*`, `*.test.*` or `*-spec.*` file, no `e2e/`, `__tests__/`, `__mocks__/` or `test-support/` directory, no vitest, Playwright, jest or Cypress configuration or setup file, no test script, and no test-runner, test-environment, testing-library or axe dependency in any `package.json`; there is no exception, `scripts/` included."
@@ -1949,10 +1849,10 @@ rules:
1949
1849
  editions: ["lite","full"]
1950
1850
  docs: ["docs/hfs-authored-file-boundaries.md#r97-front-end-test-exclusion"]
1951
1851
  templateNa: "Front-end test files and test tooling are forbidden and are therefore not scaffolded; spec fixtures show permitted production files and manifests without test tooling."
1952
- proves: ["tests/hfs-architecture/r94-r96-r97-coverage.spec.mjs"]
1953
- exemplifiedBy: [{"path":"tests/hfs-architecture/r94-r96-r97-coverage.spec.mjs","editions":["lite","full"],"codes":["FE_NO_TESTS"]}]
1954
- witness: [{"path":"tests/hfs-architecture/r94-r96-r97-coverage.spec.mjs","editions":["lite","full"],"codes":["FE_NO_TESTS"]}]
1852
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
1853
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
1955
1854
  gates: ["settle","land","ci"]
1855
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
1956
1856
  - id: R98
1957
1857
  code: "BE_TEST_BUILDER_HOME"
1958
1858
  law: "A test data builder lives only in `be/src/tests/fixtures/builders/<area>.builder.ts` (slot `be.tests.fixtures.builders`, its SQL text in `<area>.sql.ts` beside it): a `*.repository.ts`, `*.factory.ts` or `*.fixture.ts` under `be/src/tests` and a `*.builder.ts` elsewhere are BE_SOURCE_FORM findings, and any other module of the test tree that exports a function creating persisted rows through an EntityManager, DataSource or QueryRunner is a builder in the wrong place."
@@ -2023,15 +1923,11 @@ rules:
2023
1923
  editions: [lite, full]
2024
1924
  docs: [docs/legacy-repo-rule-coverage.md#r102]
2025
1925
  proves:
2026
- - {path: tests/hfs/hfs-spec-placement-coverage.spec.mjs, editions: [lite, full], codes: [BE_SPEC_PLACEMENT]}
2027
1926
  - {path: packages/eslint/be/spec-placement-coverage.spec.mjs, editions: [lite, full], codes: [BE_SPEC_PLACEMENT]}
2028
1927
  exemplifiedBy:
2029
1928
  - {path: packages/hfs/templates/be/patterns/cli/group.cli.spec.ts.tpl, editions: [lite, full]}
2030
- - {path: tests/hfs/hfs-spec-placement-coverage.spec.mjs, editions: [lite, full], codes: [BE_SPEC_PLACEMENT]}
2031
1929
  - {path: packages/eslint/be/spec-placement-coverage.spec.mjs, editions: [lite, full], codes: [BE_SPEC_PLACEMENT]}
2032
1930
  witness:
2033
- - {path: tests/hfs/hfs-spec-placement-coverage.spec.mjs, edition: lite, codes: [BE_SPEC_PLACEMENT]}
2034
- - {path: tests/hfs/hfs-spec-placement-coverage.spec.mjs, edition: full, codes: [BE_SPEC_PLACEMENT]}
2035
1931
  - {path: packages/eslint/be/spec-placement-coverage.spec.mjs, edition: lite, codes: [BE_SPEC_PLACEMENT]}
2036
1932
  - {path: packages/eslint/be/spec-placement-coverage.spec.mjs, edition: full, codes: [BE_SPEC_PLACEMENT]}
2037
1933
  law: "A back-end spec or test file lives in one of the four test layers and nowhere else: a unit spec of a unit-tested role (`ruleParams.be.unitRoles`: `<name>.service.spec.ts` beside its service, `<name>.cli.spec.ts` beside its cli command), or an integration, e2e or contract spec under `be/src/tests/{integration,e2e,contract}`; a `*.spec.*`, `*.test.*` or `*-spec.*` file anywhere else, `scripts/` and `tools/` included, is a finding."
@@ -2041,17 +1937,13 @@ rules:
2041
1937
  enforcers:
2042
1938
  - {kind: hfs, id: spec-placement, at: scripts/hfs/rules/spec-placement.mjs}
2043
1939
  - {kind: eslint-be, id: spec-placement}
1940
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; the package specs named in proves keep proving the lint enforcers, the runtime-code enforcers lost their deleted runtime spec"
2044
1941
  - id: R103
2045
1942
  code: "HFS_REPO_LOCAL_CHECK"
2046
1943
  editions: [lite, full]
2047
1944
  docs: [docs/legacy-repo-rule-coverage.md#r103]
2048
- proves:
2049
- - {path: tests/hfs/hfs-repository-hygiene-coverage.spec.mjs, editions: [lite, full], codes: [HFS_REPO_LOCAL_CHECK]}
2050
- exemplifiedBy:
2051
- - {path: tests/hfs/hfs-repository-hygiene-coverage.spec.mjs, editions: [lite, full], codes: [HFS_REPO_LOCAL_CHECK]}
2052
- witness:
2053
- - {path: tests/hfs/hfs-repository-hygiene-coverage.spec.mjs, edition: lite, codes: [HFS_REPO_LOCAL_CHECK]}
2054
- - {path: tests/hfs/hfs-repository-hygiene-coverage.spec.mjs, edition: full, codes: [HFS_REPO_LOCAL_CHECK]}
1945
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
1946
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
2055
1947
  templateNa: "Repository-local checks and lint plugins are forbidden artifacts and have no managed scaffold."
2056
1948
  law: "A repository keeps no check, lint rule or lint plugin of its own: no `check-*` file in `scripts/` or `tools/`, no `eslint-local-rules*` or local eslint plugin, no script that runs one; every check lives in the `.claude` runtime and the canons."
2057
1949
  kinds: [check]
@@ -2059,17 +1951,13 @@ rules:
2059
1951
  failureCodes: ["HFS_REPO_LOCAL_CHECK"]
2060
1952
  enforcers:
2061
1953
  - {kind: hfs, id: repo-local-check, at: scripts/hfs/rules/repo-local-checks.mjs}
1954
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
2062
1955
  - id: R104
2063
1956
  code: "HFS_LINT_SUPPRESSION_FILE"
2064
1957
  editions: [lite, full]
2065
1958
  docs: [docs/legacy-repo-rule-coverage.md#r104]
2066
- proves:
2067
- - {path: tests/hfs/hfs-repository-hygiene-coverage.spec.mjs, editions: [lite, full], codes: [HFS_LINT_SUPPRESSION_FILE]}
2068
- exemplifiedBy:
2069
- - {path: tests/hfs/hfs-repository-hygiene-coverage.spec.mjs, editions: [lite, full], codes: [HFS_LINT_SUPPRESSION_FILE]}
2070
- witness:
2071
- - {path: tests/hfs/hfs-repository-hygiene-coverage.spec.mjs, edition: lite, codes: [HFS_LINT_SUPPRESSION_FILE]}
2072
- - {path: tests/hfs/hfs-repository-hygiene-coverage.spec.mjs, edition: full, codes: [HFS_LINT_SUPPRESSION_FILE]}
1959
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
1960
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
2073
1961
  templateNa: "Lint-suppression files and options are prohibited, so no suppression artifact is scaffolded."
2074
1962
  law: "A repository keeps no lint-suppression file, script or option: no `eslint.suppressions*`, no `lint:suppressions` script, no eslint `--suppress-all` or `--suppressions-location` flag and no suppressions configuration passed to eslint; a finding is fixed in the code."
2075
1963
  kinds: [check]
@@ -2077,24 +1965,21 @@ rules:
2077
1965
  failureCodes: ["HFS_LINT_SUPPRESSION_FILE"]
2078
1966
  enforcers:
2079
1967
  - {kind: hfs, id: lint-suppression, at: scripts/hfs/rules/lint-suppression.mjs}
1968
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
2080
1969
  - id: R105
2081
1970
  code: "HFS_PROOF_COMMAND_FILE_MISSING"
2082
1971
  editions: [lite, full]
2083
1972
  docs: [docs/legacy-repo-rule-coverage.md#r105]
2084
1973
  templateNa: "Proof plans name project-specific files in authored Work records; managed app scaffolds do not supply those commands or their target scripts."
2085
- proves:
2086
- - {path: tests/hfs-proofs/hfs-proof-command-file-missing.spec.mjs, editions: [lite, full]}
2087
- exemplifiedBy:
2088
- - {path: tests/hfs-proofs/hfs-proof-command-file-missing.spec.mjs, editions: [lite, full]}
2089
- witness:
2090
- - {path: tests/hfs-proofs/hfs-proof-command-file-missing.spec.mjs, edition: lite, codes: [HFS_PROOF_COMMAND_FILE_MISSING]}
2091
- - {path: tests/hfs-proofs/hfs-proof-command-file-missing.spec.mjs, edition: full, codes: [HFS_PROOF_COMMAND_FILE_MISSING]}
1974
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
1975
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
2092
1976
  law: "A proof command of a `.starciwork` record (`requiresProof.<kind>.command`) is runnable as written: every repository file it names exists."
2093
1977
  kinds: [check]
2094
1978
  gates: [land, ci]
2095
1979
  failureCodes: ["HFS_PROOF_COMMAND_FILE_MISSING"]
2096
1980
  enforcers:
2097
1981
  - {kind: hfs, id: proof-command-files, at: scripts/hfs/rules/proof-commands.mjs}
1982
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
2098
1983
  - id: R106
2099
1984
  code: "FE_I18N_KEYS"
2100
1985
  law: "The catalogs of a front-end app and its source agree both ways: a literal key read through `next-intl` (`useTranslations`, `getTranslations`, `t`, `t.rich`, `t.raw`, `t.markup`) exists in every locale, and a catalog key that no string of the app's or the shared packages' source can be reading is deleted."
@@ -2193,12 +2078,8 @@ rules:
2193
2078
  code: "HFS_PEER_INTEGRATION_MISSING"
2194
2079
  editions: [lite, full]
2195
2080
  docs: [docs/legacy-contract-rule-coverage.md#r111]
2196
- proves:
2197
- - {path: tests/hfs/hfs-peer-integrations-coverage.spec.mjs, editions: [lite, full]}
2198
- exemplifiedBy:
2199
- - {path: tests/hfs/hfs-peer-integrations-coverage.spec.mjs, editions: [lite, full]}
2200
- witness:
2201
- - {path: tests/hfs/hfs-peer-integrations-coverage.spec.mjs, editions: [lite, full], codes: [HFS_PEER_INTEGRATION_MISSING]}
2081
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
2082
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
2202
2083
  templateNa: "Optional integration dependency pairs and their runtime peers are application-specific package.json dependencies, not a managed scaffold surface."
2203
2084
  law: "An app declares the runtime peer every driver integration it uses needs: when the app root package.json depends on every package of a pair of knowledge/hfs/peer-integrations.yaml (at the named major), it declares the pair's `requires` in its dependencies (`@nestjs/apollo` on `@nestjs/platform-express` 11, Express 5, needs `@as-integrations/express5`)."
2204
2085
  kinds: [check]
@@ -2206,17 +2087,14 @@ rules:
2206
2087
  failureCodes: ["HFS_PEER_INTEGRATION_MISSING"]
2207
2088
  enforcers:
2208
2089
  - {kind: hfs, id: peer-integrations, at: scripts/hfs/rules/peer-integrations.mjs}
2090
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
2209
2091
  - id: R112
2210
2092
  code: "BE_INTEGRATION_SPEC_MISSING"
2211
2093
  editionWhy: "ruling:R212/case-3 keeps lite outside the full test world; ruling:lite-production-swarm amends hosting and ruling:lite-contract-specs permits contract specs while preserving that e2e boundary. R284 owns lite's integration proof lane; this rule judges provider module, error-code and outage proofs through the full world."
2212
2094
  docs: [docs/quality-bar.md#r112]
2213
2095
  templateNa: "Provider-specific module registration, refusal mapping and outage scenarios must be authored for each integration; the app scaffold has no provider-specific integration proof to generate."
2214
- proves:
2215
- - {path: tests/hfs/hfs-repo-scripts-rules.spec.mjs, edition: full}
2216
- exemplifiedBy:
2217
- - {path: tests/hfs/hfs-repo-scripts-rules.spec.mjs, edition: full}
2218
- witness:
2219
- - {path: tests/hfs/hfs-repo-scripts-rules.spec.mjs, edition: full}
2096
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
2097
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
2220
2098
  law: "Every integration of a back end (`src/modules/integrations/<provider>/` holding `<provider>.config.ts`) has at least one `src/tests/integration/<provider>/*.integration-spec.ts` that, read as a syntax tree, calls `useTestWorld({ modules })` with a factory registering the integration's own module (`<Provider>Module.register`, imported from the integration folder; an inline array, a local const or an exported const of another file), references the ErrorCode enum the integration exports, and drives an outage through the world (`world.infra.<service>.cut|latency|during|connection`, `world.fake.<name>.failNext`, `world.apps.<peer>.during`, `world.interruptDatabase`); the finding sits on the integration folder."
2221
2099
  kinds: [check]
2222
2100
  gates: [land, ci]
@@ -2224,17 +2102,15 @@ rules:
2224
2102
  editions: [full]
2225
2103
  enforcers:
2226
2104
  - {kind: hfs, id: integration-specs, at: scripts/hfs/rules/integration-specs.mjs}
2105
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
2227
2106
  - id: R113
2228
2107
  code: "FE_GRAPHQL_CONTRACT"
2229
2108
  editions: [lite, full]
2230
2109
  docs: [docs/legacy-contract-rule-coverage.md#r113]
2231
- proves:
2232
- - {path: tests/hfs/hfs-fe-contract-documents-coverage.spec.mjs, editions: [lite, full]}
2110
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
2233
2111
  exemplifiedBy:
2234
2112
  - {path: packages/hfs/templates/fe/table/graphql/query.ts.tpl, editions: [lite, full]}
2235
- - {path: tests/hfs/hfs-fe-contract-documents-coverage.spec.mjs, editions: [lite, full]}
2236
- witness:
2237
- - {path: tests/hfs/hfs-fe-contract-documents-coverage.spec.mjs, editions: [lite, full], codes: [FE_GRAPHQL_CONTRACT]}
2113
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
2238
2114
  law: "Every GraphQL operation a front end keeps in a `.graphql` file under `fe/` is one its back end serves: it is judged against the contract snapshot (`be/contracts/<service>/schema.graphql`) whose root type declares its first root field, and every selected field, argument and input field must be declared there, every required argument and required input field given, every variable passed with the argument's named type, every leaf selected without and every object with a selection, and every declared variable used; a root field no contract declares is a finding too."
2239
2115
  kinds: [check]
2240
2116
  gates: [land, ci]
@@ -2253,13 +2129,9 @@ rules:
2253
2129
  editions: [lite, full]
2254
2130
  docs: [docs/legacy-runtime-shape.md#external-owner]
2255
2131
  templateNa: "Runtime repository source ownership and layout are not scaffolded by managed application templates."
2256
- proves:
2257
- - {path: tests/hfs-runtime-rules/legacy-shape-coverage.spec.mjs, editions: [lite, full], codes: ["RT_EXTERNAL_OWNER"]}
2258
- exemplifiedBy:
2259
- - {path: tests/hfs-runtime-rules/legacy-shape-coverage.spec.mjs, editions: [lite, full], codes: ["RT_EXTERNAL_OWNER"]}
2260
- witness:
2261
- - {path: tests/hfs-runtime-rules/legacy-shape-coverage.spec.mjs, edition: lite, codes: ["RT_EXTERNAL_OWNER"]}
2262
- - {path: tests/hfs-runtime-rules/legacy-shape-coverage.spec.mjs, edition: full, codes: ["RT_EXTERNAL_OWNER"]}
2132
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
2133
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
2134
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
2263
2135
  - id: R115
2264
2136
  code: "RT_TIER_DIRECTION"
2265
2137
  law: "Every relative import between two runtime owners goes from a tier to a tier its mayImport lists in tiers.runtime of knowledge/hfs/runtime-slots.yaml; owner cycles are ARCH_OWNER_CYCLE."
@@ -2272,13 +2144,9 @@ rules:
2272
2144
  editions: [lite, full]
2273
2145
  docs: [docs/legacy-runtime-shape.md#tier-direction]
2274
2146
  templateNa: "Runtime repository source ownership and layout are not scaffolded by managed application templates."
2275
- proves:
2276
- - {path: tests/hfs-runtime-rules/legacy-shape-coverage.spec.mjs, editions: [lite, full], codes: ["RT_TIER_DIRECTION"]}
2277
- exemplifiedBy:
2278
- - {path: tests/hfs-runtime-rules/legacy-shape-coverage.spec.mjs, editions: [lite, full], codes: ["RT_TIER_DIRECTION"]}
2279
- witness:
2280
- - {path: tests/hfs-runtime-rules/legacy-shape-coverage.spec.mjs, edition: lite, codes: ["RT_TIER_DIRECTION"]}
2281
- - {path: tests/hfs-runtime-rules/legacy-shape-coverage.spec.mjs, edition: full, codes: ["RT_TIER_DIRECTION"]}
2147
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
2148
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
2149
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
2282
2150
  - id: R116
2283
2151
  code: "RT_BASE_IMPURE"
2284
2152
  law: "The runtime base tier (the engine foundation and scripts/lib) never writes the filesystem and reads process.env only in a declared seam of ruleParams.runtime.baseEnvSeams."
@@ -2291,13 +2159,9 @@ rules:
2291
2159
  editions: [lite, full]
2292
2160
  docs: [docs/legacy-runtime-shape.md#base-purity]
2293
2161
  templateNa: "Runtime repository source ownership and layout are not scaffolded by managed application templates."
2294
- proves:
2295
- - {path: tests/hfs-runtime-rules/legacy-shape-coverage.spec.mjs, editions: [lite, full], codes: ["RT_BASE_IMPURE"]}
2296
- exemplifiedBy:
2297
- - {path: tests/hfs-runtime-rules/legacy-shape-coverage.spec.mjs, editions: [lite, full], codes: ["RT_BASE_IMPURE"]}
2298
- witness:
2299
- - {path: tests/hfs-runtime-rules/legacy-shape-coverage.spec.mjs, edition: lite, codes: ["RT_BASE_IMPURE"]}
2300
- - {path: tests/hfs-runtime-rules/legacy-shape-coverage.spec.mjs, edition: full, codes: ["RT_BASE_IMPURE"]}
2162
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
2163
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
2164
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
2301
2165
  - id: R117
2302
2166
  code: "RT_API_SHAPE"
2303
2167
  law: "A call file of scripts/api/<system>/ exports exactly one function named in camelCase after the file; only the files of its own system import its lib.mjs; no api system imports another; a system with a calls contract has a call file only for a call id the contract declares."
@@ -2310,16 +2174,12 @@ rules:
2310
2174
  editions: [lite, full]
2311
2175
  docs: [docs/legacy-runtime-shape.md#api-shape]
2312
2176
  templateNa: "Runtime repository source ownership and layout are not scaffolded by managed application templates."
2313
- proves:
2314
- - {path: tests/hfs-runtime-rules/legacy-shape-coverage.spec.mjs, editions: [lite, full], codes: ["RT_API_SHAPE"]}
2315
- exemplifiedBy:
2316
- - {path: tests/hfs-runtime-rules/legacy-shape-coverage.spec.mjs, editions: [lite, full], codes: ["RT_API_SHAPE"]}
2317
- witness:
2318
- - {path: tests/hfs-runtime-rules/legacy-shape-coverage.spec.mjs, edition: lite, codes: ["RT_API_SHAPE"]}
2319
- - {path: tests/hfs-runtime-rules/legacy-shape-coverage.spec.mjs, edition: full, codes: ["RT_API_SHAPE"]}
2177
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
2178
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
2179
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
2320
2180
  - id: R118
2321
2181
  code: "RT_SPEC_PLACEMENT"
2322
- law: "A runtime spec is tests/<area>/<module>[.<topic>].spec.mjs, shared spec code is tests/helpers/<name>.mjs, preloads tests/setup/<name>.mjs and data tests/fixtures/**; a package spec sits beside its source as <name>.spec.*; no file uses the .test. suffix."
2182
+ law: "No runtime tests in .claude (owner ruling no-runtime-specs, 2026-10-17): a spec or test file is allowed only beside its package source as <name>.spec.* (never .test.), under examples/, or as a declared file of the scaffold e2e (slot runtime.e2e); any other tracked spec, tests/** included, is refused."
2323
2183
  scope: runtime
2324
2184
  kinds: [check]
2325
2185
  gates: [runtime]
@@ -2329,13 +2189,9 @@ rules:
2329
2189
  editions: [lite, full]
2330
2190
  docs: [docs/legacy-runtime-shape.md#spec-placement]
2331
2191
  templateNa: "Runtime repository source ownership and layout are not scaffolded by managed application templates."
2332
- proves:
2333
- - {path: tests/hfs-runtime-rules/legacy-shape-coverage.spec.mjs, editions: [lite, full], codes: ["RT_SPEC_PLACEMENT"]}
2334
- exemplifiedBy:
2335
- - {path: tests/hfs-runtime-rules/legacy-shape-coverage.spec.mjs, editions: [lite, full], codes: ["RT_SPEC_PLACEMENT"]}
2336
- witness:
2337
- - {path: tests/hfs-runtime-rules/legacy-shape-coverage.spec.mjs, edition: lite, codes: ["RT_SPEC_PLACEMENT"]}
2338
- - {path: tests/hfs-runtime-rules/legacy-shape-coverage.spec.mjs, edition: full, codes: ["RT_SPEC_PLACEMENT"]}
2192
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
2193
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
2194
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
2339
2195
  - id: R119
2340
2196
  code: "RT_SOURCE_NAME"
2341
2197
  law: "A runtime source file is named <kebab-name>.mjs, never a one-off of ruleParams.runtime.oneOffNames (_*, tmp-*, fix-*, *-backfill, migrate-*, *-old, *.bak*), and its basename is unique inside its tier except lib.mjs and index.mjs."
@@ -2348,22 +2204,15 @@ rules:
2348
2204
  editions: [lite, full]
2349
2205
  docs: [docs/legacy-runtime-shape.md#source-name]
2350
2206
  templateNa: "Runtime repository source ownership and layout are not scaffolded by managed application templates."
2351
- proves:
2352
- - {path: tests/hfs-runtime-rules/legacy-shape-coverage.spec.mjs, editions: [lite, full], codes: ["RT_SOURCE_NAME"]}
2353
- exemplifiedBy:
2354
- - {path: tests/hfs-runtime-rules/legacy-shape-coverage.spec.mjs, editions: [lite, full], codes: ["RT_SOURCE_NAME"]}
2355
- witness:
2356
- - {path: tests/hfs-runtime-rules/legacy-shape-coverage.spec.mjs, edition: lite, codes: ["RT_SOURCE_NAME"]}
2357
- - {path: tests/hfs-runtime-rules/legacy-shape-coverage.spec.mjs, edition: full, codes: ["RT_SOURCE_NAME"]}
2207
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
2208
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
2209
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
2358
2210
  - id: R121
2359
2211
  editions: [lite, full]
2360
2212
  docs: [docs/legacy-runtime-state.md#generated-runtime-output]
2361
2213
  templateNa: "Generated runtime copies and the tracked runtime repository are not application scaffold surfaces."
2362
- proves: [tests/hfs-runtime-rules/generated-state-coverage.spec.mjs]
2363
- exemplifiedBy:
2364
- - {path: tests/hfs-runtime-rules/generated-state-coverage.spec.mjs, editions: [lite, full]}
2365
- witness:
2366
- - {path: tests/hfs-runtime-rules/generated-state-coverage.spec.mjs, editions: [lite, full], codes: [RT_GENERATED_DRIFT, GENERATED_UNTRACKED]}
2214
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
2215
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
2367
2216
  code: "RT_GENERATED_DRIFT"
2368
2217
  law: "A generated root of ruleParams.runtime.generated is git-ignored output of its declared generatedBy: the repo's check regenerates every root, the runtime copies (packages/hfs/runtime, packages/eslint/be/runtime, packages/eslint/fe/runtime) are judged equal to what scripts/hfs/sync-runtime.mjs writes from the single source, and no git-tracked path lies under a generated root."
2369
2218
  scope: runtime
@@ -2373,6 +2222,7 @@ rules:
2373
2222
  enforcers:
2374
2223
  - {kind: runtime, id: generated-drift, at: scripts/hfs/sync-runtime.mjs}
2375
2224
  - {kind: runtime, id: generated-untracked, at: scripts/hfs/runtime-rules/generated-untracked.mjs}
2225
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
2376
2226
  - id: R122
2377
2227
  code: "RT_CITED_PATH_MISSING"
2378
2228
  law: "A runtime path cited by live prose or contracts (modules, docs, skills, knowledge, CONTEXT.md, README.md, CONTRIBUTING.md, init, the ui docs) exists; history (a changelog, a benchmark file) is not read."
@@ -2385,13 +2235,9 @@ rules:
2385
2235
  editions: [lite, full]
2386
2236
  docs: [docs/legacy-runtime-state.md#cited-runtime-paths]
2387
2237
  templateNa: "Runtime repository integrity is authored in the runtime manifest and source tree; application scaffolds do not contain this surface."
2388
- proves:
2389
- - {path: tests/hfs-runtime-rules/runtime-state-coverage.spec.mjs, editions: [lite, full], codes: ["RT_CITED_PATH_MISSING"]}
2390
- exemplifiedBy:
2391
- - {path: tests/hfs-runtime-rules/runtime-state-coverage.spec.mjs, editions: [lite, full], codes: ["RT_CITED_PATH_MISSING"]}
2392
- witness:
2393
- - {path: tests/hfs-runtime-rules/runtime-state-coverage.spec.mjs, edition: lite, codes: ["RT_CITED_PATH_MISSING"]}
2394
- - {path: tests/hfs-runtime-rules/runtime-state-coverage.spec.mjs, edition: full, codes: ["RT_CITED_PATH_MISSING"]}
2238
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
2239
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
2240
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
2395
2241
  - id: R124
2396
2242
  code: "RT_PINNED_PATH_MOVED"
2397
2243
  law: "A pinned path of ruleParams.runtime.pinned (persisted outside git) exists."
@@ -2404,13 +2250,9 @@ rules:
2404
2250
  editions: [lite, full]
2405
2251
  docs: [docs/legacy-runtime-state.md#pinned-runtime-paths]
2406
2252
  templateNa: "Runtime repository integrity is authored in the runtime manifest and source tree; application scaffolds do not contain this surface."
2407
- proves:
2408
- - {path: tests/hfs-runtime-rules/runtime-state-coverage.spec.mjs, editions: [lite, full], codes: ["RT_PINNED_PATH_MOVED"]}
2409
- exemplifiedBy:
2410
- - {path: tests/hfs-runtime-rules/runtime-state-coverage.spec.mjs, editions: [lite, full], codes: ["RT_PINNED_PATH_MOVED"]}
2411
- witness:
2412
- - {path: tests/hfs-runtime-rules/runtime-state-coverage.spec.mjs, edition: lite, codes: ["RT_PINNED_PATH_MOVED"]}
2413
- - {path: tests/hfs-runtime-rules/runtime-state-coverage.spec.mjs, edition: full, codes: ["RT_PINNED_PATH_MOVED"]}
2253
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
2254
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
2255
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
2414
2256
  - id: R125
2415
2257
  code: "RT_NODE_MODULES_LINK"
2416
2258
  law: "No runtime source creates a junction or a symlink for a node_modules folder, through node:fs (symlink, symlinkSync, directly or through a local wrapper) or a spawned link command (mklink /J or /D, New-Item -ItemType Junction or SymbolicLink, ln -s): every checkout installs its own dependencies with a real npm ci from the cache."
@@ -2423,13 +2265,9 @@ rules:
2423
2265
  editions: [lite, full]
2424
2266
  docs: [docs/legacy-runtime-state.md#dependency-directories]
2425
2267
  templateNa: "Runtime repository integrity is authored in the runtime manifest and source tree; application scaffolds do not contain this surface."
2426
- proves:
2427
- - {path: tests/hfs-runtime-rules/runtime-state-coverage.spec.mjs, editions: [lite, full], codes: ["RT_NODE_MODULES_LINK"]}
2428
- exemplifiedBy:
2429
- - {path: tests/hfs-runtime-rules/runtime-state-coverage.spec.mjs, editions: [lite, full], codes: ["RT_NODE_MODULES_LINK"]}
2430
- witness:
2431
- - {path: tests/hfs-runtime-rules/runtime-state-coverage.spec.mjs, edition: lite, codes: ["RT_NODE_MODULES_LINK"]}
2432
- - {path: tests/hfs-runtime-rules/runtime-state-coverage.spec.mjs, edition: full, codes: ["RT_NODE_MODULES_LINK"]}
2268
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
2269
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
2270
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
2433
2271
  - id: R126
2434
2272
  code: "RT_CONTROL_CHARACTER"
2435
2273
  law: "Tracked text source of the runtime (*.mjs, *.cjs, *.js, *.ts, *.tsx, *.yaml, *.yml, *.md, *.json outside the generated copies) holds no raw control character (U+0000 to U+001F except tab, LF and CR, and U+007F); the character is written as its escape."
@@ -2442,13 +2280,9 @@ rules:
2442
2280
  editions: [lite, full]
2443
2281
  docs: [docs/legacy-runtime-paths.md#r126]
2444
2282
  templateNa: "Runtime tracked-source hygiene is checked in the runtime repository; application scaffolds do not generate this surface."
2445
- proves:
2446
- - {path: tests/hfs-runtime-rules/legacy-path-coverage.spec.mjs, editions: [lite, full], codes: ["RT_CONTROL_CHARACTER"]}
2447
- exemplifiedBy:
2448
- - {path: tests/hfs-runtime-rules/legacy-path-coverage.spec.mjs, editions: [lite, full], codes: ["RT_CONTROL_CHARACTER"]}
2449
- witness:
2450
- - {path: tests/hfs-runtime-rules/legacy-path-coverage.spec.mjs, edition: lite, codes: ["RT_CONTROL_CHARACTER"]}
2451
- - {path: tests/hfs-runtime-rules/legacy-path-coverage.spec.mjs, edition: full, codes: ["RT_CONTROL_CHARACTER"]}
2283
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
2284
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
2285
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
2452
2286
  - id: R127
2453
2287
  code: "RT_ABSOLUTE_PATH"
2454
2288
  law: "No tracked file of the runtime holds a hard-coded absolute host path: a drive-letter path, a user-profile path (/Users/<name>/, /home/<name>/) or an expanded AppData path. Paths resolve from the runtime root, os.tmpdir(), the config or a state-root helper, and a spec builds every path and prompt fixture from its temp dir; %LOCALAPPDATA% as an unexpanded name is clean. In source the rule reads string and template literals and comments through the syntax tree (a URL and a generic drive-pattern regular expression are not paths); in yaml, json and md it reads line text."
@@ -2461,13 +2295,9 @@ rules:
2461
2295
  editions: [lite, full]
2462
2296
  docs: [docs/legacy-runtime-paths.md#r127]
2463
2297
  templateNa: "Runtime tracked-source hygiene is checked in the runtime repository; application scaffolds do not generate this surface."
2464
- proves:
2465
- - {path: tests/hfs-runtime-rules/legacy-path-coverage.spec.mjs, editions: [lite, full], codes: ["RT_ABSOLUTE_PATH"]}
2466
- exemplifiedBy:
2467
- - {path: tests/hfs-runtime-rules/legacy-path-coverage.spec.mjs, editions: [lite, full], codes: ["RT_ABSOLUTE_PATH"]}
2468
- witness:
2469
- - {path: tests/hfs-runtime-rules/legacy-path-coverage.spec.mjs, edition: lite, codes: ["RT_ABSOLUTE_PATH"]}
2470
- - {path: tests/hfs-runtime-rules/legacy-path-coverage.spec.mjs, edition: full, codes: ["RT_ABSOLUTE_PATH"]}
2298
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
2299
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
2300
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
2471
2301
  - id: R141
2472
2302
  code: "BE_COOKIE_ATTRIBUTES"
2473
2303
  law: "A cookie a back-end door writes through the response of Express or Fastify (`cookie`, `setCookie`) states `httpOnly: true`, `secure: true` and `sameSite` `lax` or `strict` in options typed with those literals, and `Set-Cookie` is never written as a header (`setHeader`, `append`, `header`); the call is recognised by where its signature is declared, never by the receiver's name."
@@ -2514,14 +2344,10 @@ rules:
2514
2344
  - {kind: hfs, id: monorepo, at: scripts/hfs/rules/monorepo.mjs}
2515
2345
  editions: [lite, full]
2516
2346
  docs: [docs/legacy-monorepo-rules.md#r143-root-workspace-manifest]
2517
- proves:
2518
- - {path: tests/hfs/legacy-monorepo-coverage.spec.mjs, editions: [lite, full], codes: ["HFS_MONO_WORKSPACES"]}
2347
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
2519
2348
  exemplifiedBy:
2520
2349
  - {path: packages/hfs/templates/app/task-graph/turbo.json, editions: [lite, full]}
2521
- - {path: tests/hfs/legacy-monorepo-coverage.spec.mjs, editions: [lite, full], codes: ["HFS_MONO_WORKSPACES"]}
2522
- witness:
2523
- - {path: tests/hfs/legacy-monorepo-coverage.spec.mjs, edition: lite, codes: ["HFS_MONO_WORKSPACES"]}
2524
- - {path: tests/hfs/legacy-monorepo-coverage.spec.mjs, edition: full, codes: ["HFS_MONO_WORKSPACES"]}
2350
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
2525
2351
  - id: R144
2526
2352
  code: "HFS_MONO_FE_WORKSPACE"
2527
2353
  law: "Every fe app `fe/apps/<app>` is an npm workspace: its `package.json` is named `@<project>/<app>`, is private, declares its own runtime dependencies and has exactly the scripts `build: next build`, `dev: next dev`, `lint: starci app lint --workspace .`, `start: next start` and `typecheck: tsc --noEmit`; every fe package `fe/packages/<pkg>` is private with `build`, `typecheck` and the same workspace `lint` script."
@@ -2532,62 +2358,46 @@ rules:
2532
2358
  - {kind: hfs, id: monorepo, at: scripts/hfs/rules/monorepo.mjs}
2533
2359
  editions: [lite, full]
2534
2360
  docs: [docs/legacy-monorepo-rules.md#r144-front-end-workspace-manifests]
2535
- proves:
2536
- - {path: tests/hfs/legacy-monorepo-coverage.spec.mjs, editions: [lite, full], codes: ["HFS_MONO_FE_WORKSPACE"]}
2361
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
2537
2362
  exemplifiedBy:
2538
2363
  - {path: packages/hfs/templates/fe/app/package.json.tpl, editions: [lite, full]}
2539
- - {path: tests/hfs/legacy-monorepo-coverage.spec.mjs, editions: [lite, full], codes: ["HFS_MONO_FE_WORKSPACE"]}
2540
- witness:
2541
- - {path: tests/hfs/legacy-monorepo-coverage.spec.mjs, edition: lite, codes: ["HFS_MONO_FE_WORKSPACE"]}
2542
- - {path: tests/hfs/legacy-monorepo-coverage.spec.mjs, edition: full, codes: ["HFS_MONO_FE_WORKSPACE"]}
2364
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
2543
2365
  - id: R145
2544
2366
  code: "HFS_MONO_NEST_PROJECTS"
2545
2367
  editions: [lite, full]
2546
2368
  docs: [docs/legacy-monorepo-rules.md#r145-nest-monorepo-projects]
2547
2369
  templateNa: "be/nest-cli.json is generated programmatically by nestCli(app) in packages/hfs/scaffold/app.mjs, rather than from a managed template file."
2548
- proves:
2549
- - {path: tests/hfs/hfs-mono-nest-projects-coverage.spec.mjs, editions: [lite, full], codes: [HFS_MONO_NEST_PROJECTS]}
2550
- exemplifiedBy:
2551
- - {path: tests/hfs/hfs-mono-nest-projects-coverage.spec.mjs, editions: [lite, full], codes: [HFS_MONO_NEST_PROJECTS]}
2552
- witness:
2553
- - {path: tests/hfs/hfs-mono-nest-projects-coverage.spec.mjs, edition: lite, codes: [HFS_MONO_NEST_PROJECTS]}
2554
- - {path: tests/hfs/hfs-mono-nest-projects-coverage.spec.mjs, edition: full, codes: [HFS_MONO_NEST_PROJECTS]}
2370
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
2371
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
2555
2372
  law: "The back end is a Nest monorepo of `be/apps/<app>`, even with one service: `be/nest-cli.json` is `\"monorepo\": true`, its default project (`root`, `sourceRoot`) is an api app, and its `projects` are exactly the be apps hfs.json declares, each `{\"type\": \"application\", \"root\": \"apps/<app>\", \"sourceRoot\": \"apps/<app>/src\"}`."
2556
2373
  kinds: [check]
2557
2374
  gates: [settle, land, ci]
2558
2375
  failureCodes: ["HFS_MONO_NEST_PROJECTS"]
2559
2376
  enforcers:
2560
2377
  - {kind: hfs, id: monorepo, at: scripts/hfs/rules/monorepo.mjs}
2378
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
2561
2379
  - id: R146
2562
2380
  code: "HFS_MONO_WORKSPACE_DEP"
2563
2381
  editions: [lite, full]
2564
2382
  docs: [docs/architecture.md#workspace-dependency-declarations]
2565
- proves:
2566
- - {path: tests/hfs/r146-workspace-version-coverage.spec.mjs, editions: [lite, full], codes: [HFS_MONO_WORKSPACE_DEP]}
2383
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
2567
2384
  templateNa: "Sibling workspace dependencies depend on the product's imports; no scaffold can declare that product-specific dependency graph."
2568
- exemplifiedBy:
2569
- - {path: tests/hfs/r146-workspace-version-coverage.spec.mjs, editions: [lite, full], codes: [HFS_MONO_WORKSPACE_DEP]}
2570
- witness:
2571
- - {path: tests/hfs/r146-workspace-version-coverage.spec.mjs, edition: lite, codes: [HFS_MONO_WORKSPACE_DEP]}
2572
- - {path: tests/hfs/r146-workspace-version-coverage.spec.mjs, edition: full, codes: [HFS_MONO_WORKSPACE_DEP]}
2385
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
2573
2386
  law: "An fe workspace declares every package its files import (read with TypeScript's import pre-processor, its tsconfig path aliases excluded) in its own `package.json`, a sibling workspace package at `\"*\"`; the app root `package.json` never declares a workspace package."
2574
2387
  kinds: [check]
2575
2388
  gates: [settle, land, ci]
2576
2389
  failureCodes: ["HFS_MONO_WORKSPACE_DEP"]
2577
2390
  enforcers:
2578
2391
  - {kind: hfs, id: monorepo, at: scripts/hfs/rules/monorepo.mjs}
2392
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
2579
2393
  - id: R147
2580
2394
  code: "BE_CLI_REQUIRED"
2581
2395
  editions: [lite, full]
2582
2396
  docs: [docs/backend-cli.md#back-end-cli-rules]
2583
- proves:
2584
- - {path: tests/hfs/hfs-cli-coverage.spec.mjs, editions: [lite, full], codes: [BE_CLI_REQUIRED]}
2397
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
2585
2398
  exemplifiedBy:
2586
2399
  - {path: packages/hfs/templates/be/image/cli/Dockerfile, editions: [lite, full]}
2587
- - {path: tests/hfs/hfs-cli-coverage.spec.mjs, editions: [lite, full], codes: [BE_CLI_REQUIRED]}
2588
- witness:
2589
- - {path: tests/hfs/hfs-cli-coverage.spec.mjs, edition: lite, codes: [BE_CLI_REQUIRED]}
2590
- - {path: tests/hfs/hfs-cli-coverage.spec.mjs, edition: full, codes: [BE_CLI_REQUIRED]}
2400
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
2591
2401
  law: "Every one-off action of a back end lives in ONE app, `be/apps/cli` (kind cli, named cli): a back end that declares a connection (its migrations run as `cli migrate run`) or tracks a command under `src/features/cli/` declares exactly that app, and tracks its image `be/apps/cli/Dockerfile` (one image, run as `cli <group> <command>`)."
2592
2402
  kinds: [check]
2593
2403
  gates: [settle, land, ci]
@@ -2655,15 +2465,11 @@ rules:
2655
2465
  code: "BE_EVENT_CLASS_CONTRACT"
2656
2466
  editions: [lite, full]
2657
2467
  docs: [docs/code-pattern-enforcement.md#backend-event-bus-rules]
2658
- proves:
2659
- - {path: tests/hfs/hfs-event-class-coverage.spec.mjs, editions: [lite, full]}
2468
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
2660
2469
  exemplifiedBy:
2661
2470
  - {path: packages/hfs/templates/be/inbox/delivery-recorded.event.ts.tpl, editions: [lite, full]}
2662
2471
  - {path: packages/hfs/templates/be/inbox/events.json.tpl, editions: [lite, full]}
2663
- - {path: tests/hfs/hfs-event-class-coverage.spec.mjs, editions: [lite, full]}
2664
- witness:
2665
- - {path: tests/hfs/hfs-event-class-coverage.spec.mjs, edition: lite, codes: [BE_EVENT_CLASS_CONTRACT]}
2666
- - {path: tests/hfs/hfs-event-class-coverage.spec.mjs, edition: full, codes: [BE_EVENT_CLASS_CONTRACT]}
2472
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
2667
2473
  law: "Every typed event class `be/src/modules/events/<service>/<event>.event.ts` (one class with literal `static readonly eventName` and `version`, in a file named after its event: dots become dashes) equals an entry of the vendored contract `be/contracts/<service>/events.json` at the same name and version, and every entry of a vendored contract has its class; a class the contract does not list, a version mismatch, a contract entry with no class or a misnamed file is a finding (pattern event-bus)."
2668
2474
  kinds: [check, codemod]
2669
2475
  gates: [settle, land, ci]
@@ -2736,25 +2542,16 @@ rules:
2736
2542
  editionWhy: "owner:gate-loosening-e77ca91cded7 approves the per-edition enforcer split; ruling:R212/case-2 (with the Work boundary amended by ruling:R212/case-4) gives lite its integration proof lane while full retains e2e or integration proofs."
2737
2543
  docs: [docs/quality-bar.md#r155]
2738
2544
  templateNa: "Pattern scenarios depend on application behavior and providers; no universal runnable scenario proof is scaffolded."
2739
- proves:
2740
- - {path: tests/hfs-proofs/hfs-pattern-spec-missing.spec.mjs, editions: [full], codes: [BE_PATTERN_SPEC_MISSING]}
2741
- - {path: tests/hfs/hfs-lite-proof-lane.spec.mjs, editions: [lite], codes: [BE_PATTERN_SPEC_MISSING]}
2742
- exemplifiedBy:
2743
- - {path: tests/hfs-proofs/hfs-pattern-spec-missing.spec.mjs, editions: [full], codes: [BE_PATTERN_SPEC_MISSING]}
2744
- - {path: tests/hfs/hfs-lite-proof-lane.spec.mjs, editions: [lite], codes: [BE_PATTERN_SPEC_MISSING]}
2745
- witness:
2746
- - {path: tests/hfs-proofs/hfs-pattern-spec-missing.spec.mjs, edition: full, codes: [BE_PATTERN_SPEC_MISSING]}
2747
- - {path: tests/hfs/hfs-lite-proof-lane.spec.mjs, edition: lite, codes: [BE_PATTERN_SPEC_MISSING]}
2545
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
2546
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
2547
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
2748
2548
  - id: R156
2749
2549
  code: "BE_KIND_ISOLATION"
2750
2550
  editions: [lite, full]
2751
2551
  docs: [docs/code-pattern-enforcement.md#r156-kind-isolation]
2752
2552
  templateNa: "Cross-kind imports are a negative architecture constraint; the spec supplies actual owner graphs in both editions."
2753
- proves: [tests/hfs-architecture/architecture-kind-isolation-coverage.spec.mjs]
2754
- exemplifiedBy:
2755
- - {path: tests/hfs-architecture/architecture-kind-isolation-coverage.spec.mjs, editions: [lite, full], codes: [BE_KIND_ISOLATION]}
2756
- witness:
2757
- - {path: tests/hfs-architecture/architecture-kind-isolation-coverage.spec.mjs, editions: [lite, full], codes: [BE_KIND_ISOLATION]}
2553
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
2554
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
2758
2555
  law: "No trigger kind imports another: a feature whose owner slot names one `trigger` (api, webhooks, realtime, saga, reactors, jobs, cli) never imports (static, dynamic, re-export or type-only) a feature of another kind; each kind imports only `modules/*` and only be/apps/* compose features. The kinds meet through the event bus: a domain service publishes `eventBus.publish(event, tx)` and the other kind consumes it. The importing and imported owners are read from the slot view (slot field `trigger`), never from a folder name; the finding replaces BE_FEATURE_IMPORTS_FEATURE when both features name different kinds."
2759
2556
  kinds: [lint, design]
2760
2557
  gates: [settle, land, ci]
@@ -2762,6 +2559,7 @@ rules:
2762
2559
  enforcers:
2763
2560
  - {kind: eslint-be, id: kind-isolation}
2764
2561
  - {kind: machine, id: tiers, at: scripts/hfs/architecture/tiers.mjs}
2562
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
2765
2563
  - id: R157
2766
2564
  code: "BE_JOB_WRITE_OUTSIDE_OWNER"
2767
2565
  editions: [lite, full]
@@ -2877,15 +2675,11 @@ rules:
2877
2675
  code: "HFS_SERVICE_PLACEMENT"
2878
2676
  editions: [lite, full]
2879
2677
  docs: [docs/microservices.md#r163]
2880
- proves:
2881
- - {path: tests/hfs/hfs-services-legacy-coverage.spec.mjs, editions: [lite, full]}
2678
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
2882
2679
  exemplifiedBy:
2883
2680
  - {path: packages/hfs/templates/be/skeleton-lite/apps/api/Dockerfile, edition: lite}
2884
2681
  - {path: packages/hfs/templates/be/image/api/Dockerfile, edition: full}
2885
- - {path: tests/hfs/hfs-services-legacy-coverage.spec.mjs, editions: [lite, full]}
2886
- witness:
2887
- - {path: tests/hfs/hfs-services-legacy-coverage.spec.mjs, edition: lite, codes: [HFS_SERVICE_PLACEMENT]}
2888
- - {path: tests/hfs/hfs-services-legacy-coverage.spec.mjs, edition: full, codes: [HFS_SERVICE_PLACEMENT]}
2682
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
2889
2683
  law: "A back-end service lives only at `be/apps/<service>/`: a folder with a `Dockerfile` of its own, or with a `package.json` other than the app root's and those of the fe workspaces (`fe/apps/<app>`, `fe/packages/<pkg>`), outside `be/apps/<service>/` (and outside a front end's `fe/apps/<app>/Dockerfile`) is a second service root and a finding; a service is a Nest app of the one repository that shares the `be/src` libraries and the one package.json, and its image is built from its own Dockerfile."
2890
2684
  kinds: [check]
2891
2685
  gates: [land, ci]
@@ -2896,15 +2690,11 @@ rules:
2896
2690
  code: "HFS_IMAGE_UNPINNED"
2897
2691
  editions: [lite, full]
2898
2692
  docs: [docs/microservices.md#r164]
2899
- proves:
2900
- - {path: tests/hfs/hfs-services-legacy-coverage.spec.mjs, editions: [lite, full]}
2693
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
2901
2694
  exemplifiedBy:
2902
2695
  - {path: packages/hfs/templates/app/skeleton-lite/.starcistacks/application-stacks.yaml, edition: lite}
2903
2696
  - {path: packages/hfs/templates/app/upgrade-full/.starcistacks/application-stacks.yaml, edition: full}
2904
- - {path: tests/hfs/hfs-services-legacy-coverage.spec.mjs, editions: [lite, full]}
2905
- witness:
2906
- - {path: tests/hfs/hfs-services-legacy-coverage.spec.mjs, edition: lite, codes: [HFS_IMAGE_UNPINNED]}
2907
- - {path: tests/hfs/hfs-services-legacy-coverage.spec.mjs, edition: full, codes: [HFS_IMAGE_UNPINNED]}
2697
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
2908
2698
  law: "In a product with more than one service (two or more be apps of kind api or worker) every component `image` of `.starcistacks/application-stacks.yaml` is pinned: a digest (`@sha256:<64 hex>`) or an exact version tag (`x.y.z`, optionally with a suffix); no tag, `latest`, a branch word or a major or minor-only tag is a finding. An own service image is `<repo>/<service>:<x.y.z>`, built from `be/apps/<service>/Dockerfile`; a service the product does not own stays a pinned third-party image."
2909
2699
  kinds: [check]
2910
2700
  gates: [land, ci]
@@ -2915,15 +2705,11 @@ rules:
2915
2705
  code: "HFS_SERVICE_STACK_DECLARATION"
2916
2706
  editions: [lite, full]
2917
2707
  docs: [docs/microservices.md#r165]
2918
- proves:
2919
- - {path: tests/hfs/hfs-services-legacy-coverage.spec.mjs, editions: [lite, full]}
2708
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
2920
2709
  exemplifiedBy:
2921
2710
  - {path: packages/hfs/templates/app/skeleton-lite/.starcistacks/application-stacks.yaml, edition: lite}
2922
2711
  - {path: packages/hfs/templates/app/skeleton/.starcistacks/application-stacks.yaml, edition: full}
2923
- - {path: tests/hfs/hfs-services-legacy-coverage.spec.mjs, editions: [lite, full]}
2924
- witness:
2925
- - {path: tests/hfs/hfs-services-legacy-coverage.spec.mjs, edition: lite, codes: [HFS_SERVICE_STACK_DECLARATION]}
2926
- - {path: tests/hfs/hfs-services-legacy-coverage.spec.mjs, edition: full, codes: [HFS_SERVICE_STACK_DECLARATION]}
2712
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
2927
2713
  law: "Every api or worker app `be/apps/<service>` of a product with more than one service is a component of the same name with `role: service` in `.starcistacks/application-stacks.yaml`."
2928
2714
  kinds: [check]
2929
2715
  gates: [land, ci]
@@ -2935,29 +2721,22 @@ rules:
2935
2721
  editions: [lite, full]
2936
2722
  docs: [docs/microservices.md#r166]
2937
2723
  templateNa: "Provider EVENTS and consumer CONSUMES tables are product-specific contracts; the app scaffold has no literal service event table to generate."
2938
- proves:
2939
- - {path: tests/hfs/hfs-event-table-contract.spec.mjs, editions: [lite, full]}
2940
- exemplifiedBy:
2941
- - {path: tests/hfs/hfs-event-table-contract.spec.mjs, editions: [lite, full]}
2942
- witness:
2943
- - {path: tests/hfs/hfs-event-table-contract.spec.mjs, editions: [lite, full], codes: ["HFS_EVENT_CONTRACT"]}
2724
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
2725
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
2944
2726
  law: "The async contract between services is vendored under `be/contracts/<service>/events.json` (`starci/event-contract@1`, emitted by `starci app emit` from the literal `EVENTS` table of `be/apps/<service>/src/events.ts`, never written by hand) and equals that table; an event that undoes the step of another declares `compensates: \"<event>\"` and the named event must exist in a contract; a consumer declares what it reads in the literal `CONSUMES` table of `be/apps/<app>/src/consumes.ts` (service, event, version), every entry must exist in the provider's vendored snapshot at the same version, and a missing or stale snapshot, an unknown event or a version mismatch is a finding."
2945
2727
  kinds: [check, codemod]
2946
2728
  gates: [land, ci]
2947
2729
  failureCodes: ["HFS_EVENT_CONTRACT"]
2948
2730
  enforcers:
2949
2731
  - {kind: hfs, id: services-event-contract, at: scripts/hfs/rules/services.mjs}
2732
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
2950
2733
  - id: R167
2951
2734
  code: "BE_ASYNC_SPEC_MISSING"
2952
2735
  editionWhy: "ruling:lite-contract-specs preserves the full-only e2e boundary. R284 owns lite's integration proof lane; this rule requires consumed-event scenarios through the full test world."
2953
2736
  docs: [docs/microservices.md#r167]
2954
2737
  templateNa: "Consumed-event and compensation scenarios depend on the product's event contracts and effects; the app scaffold has no product-specific asynchronous e2e scenario to generate."
2955
- proves:
2956
- - {path: tests/hfs/hfs-microservice-rules.spec.mjs, edition: full}
2957
- exemplifiedBy:
2958
- - {path: tests/hfs/hfs-microservice-rules.spec.mjs, edition: full}
2959
- witness:
2960
- - {path: tests/hfs/hfs-microservice-rules.spec.mjs, edition: full}
2738
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
2739
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
2961
2740
  law: "Every event an app consumes (an entry of its `consumes.ts`) is named by an e2e spec, a file `be/src/tests/e2e/<area>/*.e2e-spec.ts` that boots the apps through `useTestWorld` (it publishes the event, reads the effect back and redelivers it); when the contract of the event declares `compensates: \"<event>\"` it is a saga step, and a spec naming it also names the compensated event, so the spec drives the whole flow: the step, the failure, then the compensated state."
2962
2741
  kinds: [check]
2963
2742
  gates: [land, ci]
@@ -2965,6 +2744,7 @@ rules:
2965
2744
  editions: [full]
2966
2745
  enforcers:
2967
2746
  - {kind: hfs, id: services-async-specs, at: scripts/hfs/rules/services.mjs}
2747
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
2968
2748
  - id: R168
2969
2749
  code: "BE_SERVICE_ISOLATION"
2970
2750
  editions: [lite, full]
@@ -2987,16 +2767,12 @@ rules:
2987
2767
  code: "BE_SAGA_STEP_COMPENSATION"
2988
2768
  editions: [lite, full]
2989
2769
  docs: [docs/microservices.md#r169]
2990
- proves:
2991
- - {path: tests/hfs/hfs-saga-coverage.spec.mjs, editions: [lite, full], codes: [BE_SAGA_STEP_COMPENSATION]}
2770
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
2992
2771
  exemplifiedBy:
2993
2772
  - {path: packages/hfs/templates/be/patterns/saga/saga.service.ts.tpl, editions: [lite, full]}
2994
2773
  - {path: packages/hfs/templates/be/patterns/saga/saga.step.ts.tpl, editions: [lite, full]}
2995
2774
  - {path: packages/hfs/templates/be/patterns/saga/saga.compensation.ts.tpl, editions: [lite, full]}
2996
- - {path: tests/hfs/hfs-saga-coverage.spec.mjs, editions: [lite, full], codes: [BE_SAGA_STEP_COMPENSATION]}
2997
- witness:
2998
- - {path: tests/hfs/hfs-saga-coverage.spec.mjs, edition: lite, codes: [BE_SAGA_STEP_COMPENSATION]}
2999
- - {path: tests/hfs/hfs-saga-coverage.spec.mjs, edition: full, codes: [BE_SAGA_STEP_COMPENSATION]}
2775
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
3000
2776
  law: "In a product that declares the `saga` pattern (`patterns: [\"saga\"]` in hfs.json sides.be) a saga is the folder `be/src/features/saga/<saga>/` (`<saga>.saga.ts` the orchestrator, `steps/<step>.step.ts`, `compensations/<step>.compensation.ts`): every step has a compensation of the same name and every compensation a step, the orchestrator imports every step and every compensation of its folder, and a folder of steps or compensations has an orchestrator; the folders themselves are slots enabled only by the declared pattern, so an undeclared saga is `HFS_SLOT_NOT_ENABLED`."
3001
2777
  kinds: [check]
3002
2778
  gates: [land, ci]
@@ -3007,15 +2783,11 @@ rules:
3007
2783
  code: "BE_SAGA_STATE_VERSIONED"
3008
2784
  editions: [lite, full]
3009
2785
  docs: [docs/microservices.md#r170]
3010
- proves:
3011
- - {path: tests/hfs/hfs-saga-coverage.spec.mjs, editions: [lite, full], codes: [BE_SAGA_STATE_VERSIONED]}
2786
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
3012
2787
  exemplifiedBy:
3013
2788
  - {path: packages/hfs/templates/be/patterns/saga/saga.service.ts.tpl, editions: [lite, full]}
3014
2789
  - {path: packages/hfs/templates/be/patterns/saga/saga.state.ts.tpl, editions: [lite, full]}
3015
- - {path: tests/hfs/hfs-saga-coverage.spec.mjs, editions: [lite, full], codes: [BE_SAGA_STATE_VERSIONED]}
3016
- witness:
3017
- - {path: tests/hfs/hfs-saga-coverage.spec.mjs, edition: lite, codes: [BE_SAGA_STATE_VERSIONED]}
3018
- - {path: tests/hfs/hfs-saga-coverage.spec.mjs, edition: full, codes: [BE_SAGA_STATE_VERSIONED]}
2790
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
3019
2791
  law: "Every saga orchestrator has `<saga>.saga-state.ts` beside it, whose exported state type declares `status` and `version: number`, and imports the fenced store of `platform/saga`: the persisted state of a run moves only through the store, every transition naming the version it read, so a zombie delivery cannot move a run twice."
3020
2792
  kinds: [check]
3021
2793
  gates: [land, ci]
@@ -3026,15 +2798,11 @@ rules:
3026
2798
  code: "BE_SAGA_EVENT_CONTRACT"
3027
2799
  editions: [lite, full]
3028
2800
  docs: [docs/microservices.md#r171]
3029
- proves:
3030
- - {path: tests/hfs/hfs-saga-coverage.spec.mjs, editions: [lite, full], codes: [BE_SAGA_EVENT_CONTRACT]}
2801
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
3031
2802
  exemplifiedBy:
3032
2803
  - {path: packages/hfs/templates/be/patterns/saga/saga.step.ts.tpl, editions: [lite, full]}
3033
2804
  - {path: packages/hfs/templates/be/patterns/saga/saga.compensation.ts.tpl, editions: [lite, full]}
3034
- - {path: tests/hfs/hfs-saga-coverage.spec.mjs, editions: [lite, full], codes: [BE_SAGA_EVENT_CONTRACT]}
3035
- witness:
3036
- - {path: tests/hfs/hfs-saga-coverage.spec.mjs, edition: lite, codes: [BE_SAGA_EVENT_CONTRACT]}
3037
- - {path: tests/hfs/hfs-saga-coverage.spec.mjs, edition: full, codes: [BE_SAGA_EVENT_CONTRACT]}
2805
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
3038
2806
  law: "A saga step and a saga compensation each name their event (`readonly event = \"<name>\"`), both events are declared in a vendored contract (`be/contracts/<service>/events.json`), and the contract of the compensation's event declares `compensates: \"<event of the step of the same name>\"`."
3039
2807
  kinds: [check]
3040
2808
  gates: [land, ci]
@@ -3045,13 +2813,10 @@ rules:
3045
2813
  code: "BE_SAGA_CONSUMER_DEDUPE"
3046
2814
  editions: [lite, full]
3047
2815
  docs: [docs/microservices.md#r172]
3048
- proves:
3049
- - {path: tests/hfs/hfs-saga-consumer-dedupe.spec.mjs, editions: [lite, full]}
2816
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
3050
2817
  exemplifiedBy:
3051
- - {path: tests/hfs/hfs-saga-consumer-dedupe.spec.mjs, editions: [lite, full]}
3052
2818
  - {path: packages/hfs/templates/be/patterns/saga/saga.done.consumer.ts.tpl, editions: [lite, full]}
3053
- witness:
3054
- - {path: tests/hfs/hfs-saga-consumer-dedupe.spec.mjs, editions: [lite, full], codes: ["BE_SAGA_CONSUMER_DEDUPE"]}
2819
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
3055
2820
  law: "A consumer of a saga (`be/src/features/saga/<saga>/transport/message/<event>.consumer.ts`) passes the id of the delivery on (`message.eventId`) to the command it dispatches: the saga takes every event through the inbox (R80), so the consumer must hand it the dedupe key."
3056
2821
  kinds: [check]
3057
2822
  gates: [land, ci]
@@ -3063,12 +2828,8 @@ rules:
3063
2828
  editionWhy: "ruling:lite-contract-specs preserves the full-only e2e boundary. R284 owns lite's integration proof lane; this rule requires compensation fault scenarios through the full test world."
3064
2829
  docs: [docs/microservices.md#r173]
3065
2830
  templateNa: "Compensation events and injected-fault scenarios depend on the product's saga; the app scaffold has no product-specific compensation e2e scenario to generate."
3066
- proves:
3067
- - {path: tests/hfs/hfs-saga-rules.spec.mjs, edition: full}
3068
- exemplifiedBy:
3069
- - {path: tests/hfs/hfs-saga-rules.spec.mjs, edition: full}
3070
- witness:
3071
- - {path: tests/hfs/hfs-saga-rules.spec.mjs, edition: full}
2831
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
2832
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
3072
2833
  law: "Every compensation path of a saga has an e2e spec (`be/src/tests/e2e/<area>/*.e2e-spec.ts` through `useTestWorld`) that names the event of the compensation and injects a failure through the world (an outage of an infra service or an app with `during`, `cut` or `latency`, a fake's `failNext`, `interruptDatabase`): the compensation is proven under a fault, not only on the happy flow."
3073
2834
  kinds: [check]
3074
2835
  gates: [land, ci]
@@ -3076,6 +2837,7 @@ rules:
3076
2837
  editions: [full]
3077
2838
  enforcers:
3078
2839
  - {kind: hfs, id: saga-e2e, at: scripts/hfs/rules/saga.mjs}
2840
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
3079
2841
  - id: R174
3080
2842
  code: "BE_CONTEXT_OWNER"
3081
2843
  editions: [lite, full]
@@ -3136,13 +2898,8 @@ rules:
3136
2898
  code: "BE_CONTRACT_BREAKING"
3137
2899
  editions: [lite, full]
3138
2900
  docs: [docs/microservices.md#r177]
3139
- proves:
3140
- - {path: tests/hfs/hfs-contract-compat-coverage.spec.mjs, editions: [lite, full], codes: [BE_CONTRACT_BREAKING]}
3141
- exemplifiedBy:
3142
- - {path: tests/hfs/hfs-contract-compat-coverage.spec.mjs, editions: [lite, full], codes: [BE_CONTRACT_BREAKING]}
3143
- witness:
3144
- - {path: tests/hfs/hfs-contract-compat-coverage.spec.mjs, edition: lite, codes: [BE_CONTRACT_BREAKING]}
3145
- - {path: tests/hfs/hfs-contract-compat-coverage.spec.mjs, edition: full, codes: [BE_CONTRACT_BREAKING]}
2901
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
2902
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
3146
2903
  templateNa: "Published event-contract pins are service-owned release snapshots, not scaffolded files."
3147
2904
  law: "An event contract evolves only additively: `be/contracts/<service>/events.json` against its pinned previous copy `events.pin.json` keeps every event, stream, version, payload field and type, adds only optional fields, and a breaking change is a new `<event>.v2` key."
3148
2905
  kinds: [check]
@@ -3150,6 +2907,7 @@ rules:
3150
2907
  failureCodes: ["BE_CONTRACT_BREAKING"]
3151
2908
  enforcers:
3152
2909
  - {kind: hfs, id: contract-compat, at: scripts/hfs/rules/contract-compat.mjs}
2910
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
3153
2911
  - id: R178
3154
2912
  code: "BE_CONTEXT_PLATFORM_TABLES"
3155
2913
  editions: [lite, full]
@@ -3172,14 +2930,10 @@ rules:
3172
2930
  code: "BE_KIND_DECLARATION"
3173
2931
  editions: [lite, full]
3174
2932
  docs: [docs/microservices.md#r179]
3175
- proves:
3176
- - {path: tests/hfs/hfs-kind-coverage.spec.mjs, editions: [lite, full], codes: [BE_KIND_DECLARATION]}
2933
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
3177
2934
  exemplifiedBy:
3178
2935
  - {path: packages/hfs/templates/be/patterns/jobs/job.processor.ts.tpl, editions: [lite, full]}
3179
- - {path: tests/hfs/hfs-kind-coverage.spec.mjs, editions: [lite, full], codes: [BE_KIND_DECLARATION]}
3180
- witness:
3181
- - {path: tests/hfs/hfs-kind-coverage.spec.mjs, edition: lite, codes: [BE_KIND_DECLARATION]}
3182
- - {path: tests/hfs/hfs-kind-coverage.spec.mjs, edition: full, codes: [BE_KIND_DECLARATION]}
2936
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
3183
2937
  law: "`hfs.json` `sides.be.kinds` lists exactly the trigger kinds (api, webhooks, realtime, saga, reactors, jobs, cli) the back end uses: a kind in use that is not declared, a declared kind with no feature, a declared kind whose patterns (`ruleParams.be.kindPatterns`, e.g. jobs needs fenced-job and queue) are missing from `sides.be.patterns`, and a declared kind whose platform capabilities (the tier-platform slots naming those patterns) are not tracked are each a finding. A kind is declared only when it is used; `starci app add <noun> <name>` creates the first member, the platform capabilities it needs and the registration."
3184
2938
  kinds: [check]
3185
2939
  gates: [settle, land, ci]
@@ -3190,14 +2944,10 @@ rules:
3190
2944
  code: "BE_KIND_EMPTY"
3191
2945
  editions: [lite, full]
3192
2946
  docs: [docs/microservices.md#r180]
3193
- proves:
3194
- - {path: tests/hfs/hfs-kind-coverage.spec.mjs, editions: [lite, full], codes: [BE_KIND_EMPTY]}
2947
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
3195
2948
  exemplifiedBy:
3196
2949
  - {path: packages/hfs/templates/be/patterns/jobs/job.processor.ts.tpl, editions: [lite, full]}
3197
- - {path: tests/hfs/hfs-kind-coverage.spec.mjs, editions: [lite, full], codes: [BE_KIND_EMPTY]}
3198
- witness:
3199
- - {path: tests/hfs/hfs-kind-coverage.spec.mjs, edition: lite, codes: [BE_KIND_EMPTY]}
3200
- - {path: tests/hfs/hfs-kind-coverage.spec.mjs, edition: full, codes: [BE_KIND_EMPTY]}
2950
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
3201
2951
  law: "A kind folder `be/src/features/<kind>/` holds only instance folders `<kind>/<name>/`, and each instance holds TypeScript source: a file directly in the kind folder (a feature named like a kind, a `.gitkeep`) and an instance with no TypeScript file are findings; an empty kind folder is never kept."
3202
2952
  kinds: [check]
3203
2953
  gates: [settle, land, ci]
@@ -3316,14 +3066,11 @@ rules:
3316
3066
  code: "HFS_DOCKER_BUILD_CONTEXT"
3317
3067
  editions: [lite, full]
3318
3068
  docs: [docs/application-stacks.md#r187]
3319
- proves: [tests/hfs-proofs/docker-legacy-coverage.spec.mjs]
3069
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
3320
3070
  exemplifiedBy:
3321
3071
  - {path: packages/hfs/templates/be/image/cli/Dockerfile, editions: [lite, full]}
3322
3072
  - {path: packages/hfs/templates/fe/image/next/Dockerfile, editions: [lite, full]}
3323
- - {path: tests/hfs-proofs/docker-legacy-coverage.spec.mjs, editions: [lite, full]}
3324
- witness:
3325
- - {path: tests/hfs-proofs/docker-legacy-coverage.spec.mjs, edition: lite, codes: ["HFS_DOCKER_BUILD_CONTEXT"]}
3326
- - {path: tests/hfs-proofs/docker-legacy-coverage.spec.mjs, edition: full, codes: ["HFS_DOCKER_BUILD_CONTEXT"]}
3073
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
3327
3074
  law: "Every app image is built from the app root: the header comment of an app's Dockerfile states `starci docker build <app>` for its own path, and no COPY or ADD source leaves the build context (a `..` segment or an absolute path)."
3328
3075
  kinds: [check]
3329
3076
  gates: [settle, land, ci]
@@ -3334,14 +3081,11 @@ rules:
3334
3081
  code: "HFS_DOCKER_STAGES"
3335
3082
  editions: [lite, full]
3336
3083
  docs: [docs/application-stacks.md#r188]
3337
- proves: [tests/hfs-proofs/docker-legacy-coverage.spec.mjs]
3084
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
3338
3085
  exemplifiedBy:
3339
3086
  - {path: packages/hfs/templates/be/image/cli/Dockerfile, editions: [lite, full]}
3340
3087
  - {path: packages/hfs/templates/fe/image/next/Dockerfile, editions: [lite, full]}
3341
- - {path: tests/hfs-proofs/docker-legacy-coverage.spec.mjs, editions: [lite, full]}
3342
- witness:
3343
- - {path: tests/hfs-proofs/docker-legacy-coverage.spec.mjs, edition: lite, codes: ["HFS_DOCKER_STAGES"]}
3344
- - {path: tests/hfs-proofs/docker-legacy-coverage.spec.mjs, edition: full, codes: ["HFS_DOCKER_STAGES"]}
3088
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
3345
3089
  law: "An app Dockerfile is multi-stage: a stage named `build` and a last stage named `runtime`; the runtime stage ends as `USER node` and runs no build (`npm run build*`, tsc, next, turbo, nest); every install is `npm ci`, never `npm install`; a back-end runtime runs `npm ci --omit=dev --ignore-scripts` and a front-end runtime installs nothing."
3346
3090
  kinds: [check]
3347
3091
  gates: [settle, land, ci]
@@ -3352,14 +3096,11 @@ rules:
3352
3096
  code: "HFS_DOCKER_ENTRY"
3353
3097
  editions: [lite, full]
3354
3098
  docs: [docs/application-stacks.md#r189]
3355
- proves: [tests/hfs-proofs/docker-legacy-coverage.spec.mjs]
3099
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
3356
3100
  exemplifiedBy:
3357
3101
  - {path: packages/hfs/templates/be/image/cli/Dockerfile, editions: [lite, full]}
3358
3102
  - {path: packages/hfs/templates/fe/image/next/Dockerfile, editions: [lite, full]}
3359
- - {path: tests/hfs-proofs/docker-legacy-coverage.spec.mjs, editions: [lite, full]}
3360
- witness:
3361
- - {path: tests/hfs-proofs/docker-legacy-coverage.spec.mjs, edition: lite, codes: ["HFS_DOCKER_ENTRY"]}
3362
- - {path: tests/hfs-proofs/docker-legacy-coverage.spec.mjs, edition: full, codes: ["HFS_DOCKER_ENTRY"]}
3103
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
3363
3104
  law: "The runtime stage starts the app's own built entry in exec form (be `node be/dist/apps/<app>/src/main.js`, fe `node` on the standalone `server.js` of the app); an api or Next app sets `ENV PORT` and EXPOSEs the same port and carries a HEALTHCHECK, a worker carries a process HEALTHCHECK and exposes nothing, a cli app says `HEALTHCHECK NONE` and exposes nothing; a Next app's build stage runs `turbo run build --filter=@<project>/<app>` and its `next.config.ts` sets `output: \"standalone\"`."
3364
3105
  kinds: [check]
3365
3106
  gates: [settle, land, ci]
@@ -3370,14 +3111,11 @@ rules:
3370
3111
  code: "HFS_DOCKER_BASE_PIN"
3371
3112
  editions: [lite, full]
3372
3113
  docs: [docs/application-stacks.md#r190]
3373
- proves: [tests/hfs-proofs/docker-legacy-coverage.spec.mjs]
3114
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
3374
3115
  exemplifiedBy:
3375
3116
  - {path: packages/hfs/templates/be/image/cli/Dockerfile, editions: [lite, full]}
3376
3117
  - {path: packages/hfs/templates/fe/image/next/Dockerfile, editions: [lite, full]}
3377
- - {path: tests/hfs-proofs/docker-legacy-coverage.spec.mjs, editions: [lite, full]}
3378
- witness:
3379
- - {path: tests/hfs-proofs/docker-legacy-coverage.spec.mjs, edition: lite, codes: ["HFS_DOCKER_BASE_PIN"]}
3380
- - {path: tests/hfs-proofs/docker-legacy-coverage.spec.mjs, edition: full, codes: ["HFS_DOCKER_BASE_PIN"]}
3118
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
3381
3119
  law: "Every FROM of an app Dockerfile is a prior stage, the one node base image of the canon (an exact node version on an exact alpine release, `NODE_IMAGE` in scripts/hfs/rules/docker.mjs), or an image pinned by `@sha256` digest; never a moving tag, never an unresolved build argument."
3382
3120
  kinds: [check]
3383
3121
  gates: [settle, land, ci]
@@ -3388,14 +3126,11 @@ rules:
3388
3126
  code: "HFS_DOCKER_SECRETS"
3389
3127
  editions: [lite, full]
3390
3128
  docs: [docs/application-stacks.md#r191]
3391
- proves: [tests/hfs-proofs/docker-legacy-coverage.spec.mjs]
3129
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
3392
3130
  exemplifiedBy:
3393
3131
  - {path: packages/hfs/templates/be/image/cli/Dockerfile, editions: [lite, full]}
3394
3132
  - {path: packages/hfs/templates/fe/image/next/Dockerfile, editions: [lite, full]}
3395
- - {path: tests/hfs-proofs/docker-legacy-coverage.spec.mjs, editions: [lite, full]}
3396
- witness:
3397
- - {path: tests/hfs-proofs/docker-legacy-coverage.spec.mjs, edition: lite, codes: ["HFS_DOCKER_SECRETS"]}
3398
- - {path: tests/hfs-proofs/docker-legacy-coverage.spec.mjs, edition: full, codes: ["HFS_DOCKER_SECRETS"]}
3133
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
3399
3134
  law: "No secret enters an image: no COPY or ADD of an `.env*` file (except `.env.example`) or of a path under `.starcistacks`, `.secrets`, `.volume`, a key, certificate or kubeconfig; no ADD of a URL; no ARG or ENV whose name is a credential (PASSWORD, SECRET, TOKEN, KEY, CREDENTIAL, PRIVATE), `NEXT_PUBLIC_*` excepted because it is published by design."
3400
3135
  kinds: [check]
3401
3136
  gates: [settle, land, ci]
@@ -3409,16 +3144,14 @@ rules:
3409
3144
  editions: [lite, full]
3410
3145
  docs: [docs/knowledge-yaml.md#runtime-knowledge-evidence]
3411
3146
  templateNa: "Runtime facts are authored knowledge checks; app scaffolds do not contain this runtime surface."
3412
- proves: [tests/hfs-runtime-rules/runtime-knowledge-evidence.spec.mjs]
3413
- exemplifiedBy:
3414
- - {path: tests/hfs-runtime-rules/runtime-knowledge-evidence.spec.mjs, editions: [lite, full], codes: [RT_FACT_FALSE]}
3415
- witness:
3416
- - {path: tests/hfs-runtime-rules/runtime-knowledge-evidence.spec.mjs, editions: [lite, full], codes: [RT_FACT_FALSE]}
3147
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
3148
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
3417
3149
  kinds: [check]
3418
3150
  gates: [runtime]
3419
3151
  failureCodes: ["RT_FACT_FALSE"]
3420
3152
  enforcers:
3421
3153
  - {kind: runtime, id: facts, at: scripts/hfs/runtime-rules/facts.mjs}
3154
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
3422
3155
  - id: R193
3423
3156
  code: "RT_RULE_ID_UNKNOWN"
3424
3157
  law: "Every rule id (R<digits>) that tracked knowledge, docs, code or data names is a rule of this catalog, and rule ids are unique and well-formed (a gap between two ids is fine), and every rule of the catalog is named by the `hfsRules:` of at least one knowledge/patterns topic or carries `scope: runtime` (RT_RULE_UNCITED). History paths (changelogs, benchmark findings, .starciwork records), specs and generated copies are not read."
@@ -3426,16 +3159,14 @@ rules:
3426
3159
  editions: [lite, full]
3427
3160
  docs: [docs/knowledge-yaml.md#runtime-knowledge-evidence]
3428
3161
  templateNa: "Rule references and pattern citations belong to authored runtime knowledge, not scaffolded app files."
3429
- proves: [tests/hfs-runtime-rules/runtime-knowledge-evidence.spec.mjs]
3430
- exemplifiedBy:
3431
- - {path: tests/hfs-runtime-rules/runtime-knowledge-evidence.spec.mjs, editions: [lite, full], codes: [RT_RULE_ID_UNKNOWN, RT_RULE_UNCITED]}
3432
- witness:
3433
- - {path: tests/hfs-runtime-rules/runtime-knowledge-evidence.spec.mjs, editions: [lite, full], codes: [RT_RULE_ID_UNKNOWN, RT_RULE_UNCITED]}
3162
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
3163
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
3434
3164
  kinds: [check]
3435
3165
  gates: [runtime]
3436
3166
  failureCodes: ["RT_RULE_ID_UNKNOWN", "RT_RULE_UNCITED"]
3437
3167
  enforcers:
3438
3168
  - {kind: runtime, id: rule-ids, at: scripts/hfs/runtime-rules/rule-ids.mjs}
3169
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
3439
3170
  - id: R194
3440
3171
  code: "RT_GENERATED_BLOCK_STALE"
3441
3172
  law: "The app map (section 4), the back-end source tree (5.1), the tier matrix (5.2), the front-end source tree (6.1) and the rule catalog (12) of knowledge/hfs/README.md are generated blocks, rendered by scripts/hfs/readme-blocks.mjs from knowledge/hfs/slots.yaml and rules.yaml between hfs:generated markers and equal to the render byte for byte; the README never restates them by hand. Likewise the `verification.automated` list of a pattern rule is the failure codes of the rules its `hfsRules` names, the `slot` of a `files:` entry is the slot that owns its path, and the `code` of a why-map entry is the code of the catalog rule that lists the lint rule: scripts/hfs/derived-fields.mjs writes them and they equal the derivation byte for byte."
@@ -3443,27 +3174,21 @@ rules:
3443
3174
  editions: [lite, full]
3444
3175
  docs: [docs/knowledge-yaml.md#runtime-knowledge-evidence]
3445
3176
  templateNa: "Generated runtime knowledge and its derivations are maintained from the catalogs, not app scaffolds."
3446
- proves: [tests/hfs-runtime-rules/runtime-knowledge-evidence.spec.mjs]
3447
- exemplifiedBy:
3448
- - {path: tests/hfs-runtime-rules/runtime-knowledge-evidence.spec.mjs, editions: [lite, full], codes: [RT_GENERATED_BLOCK_STALE]}
3449
- witness:
3450
- - {path: tests/hfs-runtime-rules/runtime-knowledge-evidence.spec.mjs, editions: [lite, full], codes: [RT_GENERATED_BLOCK_STALE]}
3177
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
3178
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
3451
3179
  kinds: [check]
3452
3180
  gates: [runtime]
3453
3181
  failureCodes: ["RT_GENERATED_BLOCK_STALE"]
3454
3182
  enforcers:
3455
3183
  - {kind: runtime, id: generated-block, at: scripts/hfs/runtime-rules/generated-block.mjs}
3184
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
3456
3185
  - id: R195
3457
3186
  code: "RT_PROSE_PATH_NO_SLOT"
3458
3187
  editions: [lite, full]
3459
3188
  docs: [docs/knowledge-yaml.md#r195]
3460
3189
  templateNa: "This rule judges authored runtime prose against slot catalogs and shipped example declarations; app templates do not scaffold this runtime surface."
3461
- proves: [tests/hfs-runtime-rules/prose-path-app-placeholder.spec.mjs]
3462
- exemplifiedBy:
3463
- - {path: tests/hfs-runtime-rules/prose-path-app-placeholder.spec.mjs, editions: [lite, full]}
3464
- witness:
3465
- - {path: tests/hfs-runtime-rules/prose-path-app-placeholder.spec.mjs, edition: lite, codes: ["RT_PROSE_PATH_NO_SLOT"]}
3466
- - {path: tests/hfs-runtime-rules/prose-path-app-placeholder.spec.mjs, edition: full, codes: ["RT_PROSE_PATH_NO_SLOT"]}
3190
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
3191
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
3467
3192
  law: "Every product path the knowledge, the docs and the READMEs name (a be/ or fe/ path, whole or with placeholders, globs and braces) is owned by a slot of knowledge/hfs/slots.yaml or is a folder above one; a path no slot owns is prose that invented a place or kept one a slot no longer has. App names are free: a literal app name is one a shipped examples/*/hfs.json declares, a placeholder stands for any; a ** glob and a topic file of the knowledge are not paths."
3468
3193
  scope: runtime
3469
3194
  kinds: [check]
@@ -3471,6 +3196,7 @@ rules:
3471
3196
  failureCodes: ["RT_PROSE_PATH_NO_SLOT"]
3472
3197
  enforcers:
3473
3198
  - {kind: runtime, id: prose-path, at: scripts/hfs/runtime-rules/prose-path.mjs}
3199
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
3474
3200
  - id: R196
3475
3201
  code: "RT_PROSE_RESTATES_SLOTS"
3476
3202
  law: "Knowledge, docs and READMEs never restate knowledge/hfs/slots.yaml: no fenced block or line names three or more product paths a slot owns, and no sentence lists three or more of the root or side file names the slots declare; a slot is referenced by its id, and the only allowed copy is a generated block between hfs:generated markers. The slot and rule catalogs, the example READMEs and the templates are sources or snapshots, not prose."
@@ -3478,26 +3204,21 @@ rules:
3478
3204
  editions: [lite, full]
3479
3205
  docs: [docs/knowledge-yaml.md#runtime-knowledge-evidence]
3480
3206
  templateNa: "This checker judges prose about the runtime slot catalogs; app templates are snapshots rather than this authored prose."
3481
- proves: [tests/hfs-runtime-rules/runtime-knowledge-evidence.spec.mjs]
3482
- exemplifiedBy:
3483
- - {path: tests/hfs-runtime-rules/runtime-knowledge-evidence.spec.mjs, editions: [lite, full], codes: [RT_PROSE_RESTATES_SLOTS]}
3484
- witness:
3485
- - {path: tests/hfs-runtime-rules/runtime-knowledge-evidence.spec.mjs, editions: [lite, full], codes: [RT_PROSE_RESTATES_SLOTS]}
3207
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
3208
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
3486
3209
  kinds: [check]
3487
3210
  gates: [runtime]
3488
3211
  failureCodes: ["RT_PROSE_RESTATES_SLOTS"]
3489
3212
  enforcers:
3490
3213
  - {kind: runtime, id: prose-restates, at: scripts/hfs/runtime-rules/prose-restates.mjs}
3214
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
3491
3215
  - id: R198
3492
3216
  code: "RT_CLI_CATALOG_DRIFT"
3493
3217
  editions: [lite, full]
3494
3218
  docs: [docs/installation.md#r198-cli-catalog-drift]
3495
3219
  templateNa: "The host CLI catalog generator is runtime source governance, not an app scaffold surface."
3496
- proves: [tests/hfs-proofs/cli-catalog-drift.spec.mjs]
3497
- exemplifiedBy:
3498
- - {path: tests/hfs-proofs/cli-catalog-drift.spec.mjs, editions: [lite, full], codes: [RT_CLI_CATALOG_DRIFT]}
3499
- witness:
3500
- - {path: tests/hfs-proofs/cli-catalog-drift.spec.mjs, editions: [lite, full], codes: [RT_CLI_CATALOG_DRIFT]}
3220
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
3221
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
3501
3222
  law: "Every generated output of the unified CLI catalog (packages/cli/src/catalog.generated.mjs, docs/cli.md, packages/cli/completions/*) equals what scripts/cli/gen-catalog.mjs writes from modules/cli/commands."
3502
3223
  scope: runtime
3503
3224
  kinds: [check]
@@ -3505,16 +3226,14 @@ rules:
3505
3226
  failureCodes: ["RT_CLI_CATALOG_DRIFT"]
3506
3227
  enforcers:
3507
3228
  - {kind: runtime, id: cli-catalog-drift, at: scripts/cli/gen-catalog.mjs}
3229
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
3508
3230
  - id: R199
3509
3231
  code: "RT_CLI_VERB_PARITY"
3510
3232
  editions: [lite, full]
3511
3233
  docs: [docs/installation.md#cli-catalog-parity]
3512
3234
  templateNa: "CLI catalog and implementation parity is runtime source governance, not an app scaffold surface."
3513
- proves: [tests/hfs-proofs/cli-catalog-parity.spec.mjs]
3514
- exemplifiedBy:
3515
- - {path: tests/hfs-proofs/cli-catalog-parity.spec.mjs, editions: [lite, full]}
3516
- witness:
3517
- - {path: tests/hfs-proofs/cli-catalog-parity.spec.mjs, editions: [lite, full], codes: [RT_CLI_VERB_PARITY]}
3235
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
3236
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
3518
3237
  law: "The CLI catalog of modules/cli/commands and the implementation agree: every catalog verb has a handler and a doc, every kernel verb module and cli.mjs dispatch case has a catalog file, and every --flag a verb module names (usage, required, api-boolean-flags.txt) is a catalog flag."
3519
3238
  scope: runtime
3520
3239
  kinds: [check]
@@ -3522,16 +3241,15 @@ rules:
3522
3241
  failureCodes: ["RT_CLI_VERB_PARITY"]
3523
3242
  enforcers:
3524
3243
  - {kind: runtime, id: cli-parity, at: scripts/checks/check-cli-parity.mjs}
3244
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
3525
3245
  - id: R200
3526
3246
  code: "RT_CLI_APP_ONLY_TEMPLATES"
3527
3247
  editions: [lite, full]
3528
3248
  docs: [docs/installation.md#managed-app-command-boundary]
3529
- proves: [tests/hfs-proofs/cli-template-boundary.spec.mjs]
3249
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
3530
3250
  exemplifiedBy:
3531
3251
  - {path: packages/hfs/templates/app/hooks/husky/pre-commit, editions: [lite, full]}
3532
- - {path: tests/hfs-proofs/cli-template-boundary.spec.mjs, editions: [lite, full]}
3533
- witness:
3534
- - {path: tests/hfs-proofs/cli-template-boundary.spec.mjs, editions: [lite, full], codes: [RT_CLI_APP_ONLY_TEMPLATES]}
3252
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
3535
3253
  law: "Managed app templates and their generated runtime copies invoke product actions only through `starci app <verb>`; any other starci group is forbidden there."
3536
3254
  scope: runtime
3537
3255
  kinds: [check]
@@ -3544,11 +3262,8 @@ rules:
3544
3262
  editions: [lite, full]
3545
3263
  docs: [docs/installation.md#catalog-entry-boundary]
3546
3264
  templateNa: "The runtime tracked-action scanner governs catalog entry use; its implementation is not scaffolded into apps."
3547
- proves: [tests/hfs-proofs/cli-entry-boundary.spec.mjs]
3548
- exemplifiedBy:
3549
- - {path: tests/hfs-proofs/cli-entry-boundary.spec.mjs, editions: [lite, full]}
3550
- witness:
3551
- - {path: tests/hfs-proofs/cli-entry-boundary.spec.mjs, editions: [lite, full], codes: [CLI_ONLY_ENTRY]}
3265
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
3266
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
3552
3267
  law: "Every action enters runtime code through `starci <group> <verb>`: tracked prompts, docs, skills, knowledge files, configs, CI files, hooks and scheduled-task registrations do not bypass the catalog through direct runtime scripts or package-script wrappers; the dispatcher and the specs' own spawn helpers are the declared exceptions."
3553
3268
  scope: runtime
3554
3269
  kinds: [check]
@@ -3556,17 +3271,16 @@ rules:
3556
3271
  failureCodes: ["CLI_ONLY_ENTRY"]
3557
3272
  enforcers:
3558
3273
  - {kind: runtime, id: cli-only-entry, at: scripts/checks/check-cli-only-entry.mjs}
3274
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
3559
3275
  - id: R202
3560
3276
  code: "CI_UPLOAD_NOT_SILENT"
3561
3277
  editions: [lite, full]
3562
3278
  docs: [docs/releasing.md#r202]
3563
- proves: [tests/hfs-proofs/ci-upload-not-silent.spec.mjs]
3279
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
3564
3280
  exemplifiedBy:
3565
3281
  - {path: packages/hfs/templates/app/ci-workflows-lite/github/workflows/ci.yml, edition: lite}
3566
3282
  - {path: packages/hfs/templates/app/ci-workflows/github/workflows/ci.yml, edition: full}
3567
- - {path: tests/hfs-proofs/ci-upload-not-silent.spec.mjs, editions: [lite, full]}
3568
- witness:
3569
- - {path: tests/hfs-proofs/ci-upload-not-silent.spec.mjs, editions: [lite, full], codes: [CI_UPLOAD_NOT_SILENT]}
3283
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
3570
3284
  law: "A coverage upload of a CI workflow never skips or fails silently: every step that uses codecov/codecov-action, in a root workflow, an example workflow or a template workflow of packages/hfs, authenticates by OIDC (`use_oidc: true`, with `permissions: id-token: write` on the job or the workflow), sets `fail_ci_if_error: true`, has no `continue-on-error`, and has no `if` that reads a secret or CODECOV_TOKEN, so a missing token can never turn the upload into a skipped step."
3571
3285
  scope: runtime
3572
3286
  kinds: [check]
@@ -3596,14 +3310,10 @@ rules:
3596
3310
  code: "HFS_COVERAGE_SCOPE_DRIFT"
3597
3311
  editions: [lite, full]
3598
3312
  docs: [docs/quality-bar.md#r204-coverage-scope]
3599
- proves:
3600
- - {path: tests/hfs-proofs/coverage-scope-evidence.spec.mjs, editions: [lite, full]}
3313
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
3601
3314
  exemplifiedBy:
3602
3315
  - {path: packages/hfs/templates/app/quality-config/codecov.yml, editions: [lite, full]}
3603
- - {path: tests/hfs-proofs/coverage-scope-evidence.spec.mjs, editions: [lite, full]}
3604
- witness:
3605
- - {path: tests/hfs-proofs/coverage-scope-evidence.spec.mjs, edition: lite, codes: ["HFS_COVERAGE_SCOPE_DRIFT"]}
3606
- - {path: tests/hfs-proofs/coverage-scope-evidence.spec.mjs, edition: full, codes: ["HFS_COVERAGE_SCOPE_DRIFT"]}
3316
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
3607
3317
  law: "What a back end measures at 100 per file is derived once from the slot manifest (the `coverage: required|none` field of every be slot and ruleParams.be.logicRoles, scripts/hfs/coverage-scope.mjs), and the three files that state it are its render: be/jest.config.js (thresholds), the `sonar.coverage.exclusions` line of sonar-project.properties, and codecov.yml (paths and one component per service app plus platform, each at 100). A difference is drift; the scope is never edited by hand."
3608
3318
  kinds: [check, codemod]
3609
3319
  gates: [land, ci]
@@ -3615,11 +3325,8 @@ rules:
3615
3325
  editions: [lite, full]
3616
3326
  docs: [docs/architecture.md#r205]
3617
3327
  templateNa: "Runtime documentation ownership is checked in the authored runtime repository; application scaffolds do not generate runtime docs/*.md."
3618
- proves: [tests/hfs-proofs/rt-doc-no-owner.spec.mjs]
3619
- exemplifiedBy:
3620
- - {path: tests/hfs-proofs/rt-doc-no-owner.spec.mjs, editions: [lite, full]}
3621
- witness:
3622
- - {path: tests/hfs-proofs/rt-doc-no-owner.spec.mjs, editions: [lite, full], codes: [RT_DOC_NO_OWNER]}
3328
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
3329
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
3623
3330
  law: "Every tracked docs/*.md declares exactly one ownership header on its first line — \"Owner: <knowledge/ or modules/ path that exists>\" when the document explains a machine-owned source, \"Task: <one task>\" for a how-to — no two documents carry the same task, and two documents whose titles share two or more topic words while at least 30% of the shorter one's sentences appear in the other are one document merged, not two."
3624
3331
  scope: runtime
3625
3332
  kinds: [check]
@@ -3627,16 +3334,15 @@ rules:
3627
3334
  failureCodes: ["RT_DOC_NO_OWNER"]
3628
3335
  enforcers:
3629
3336
  - {kind: runtime, id: doc-owner, at: scripts/checks/check-doc-owner.mjs}
3337
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
3630
3338
  - id: R206
3631
3339
  code: "RT_EXAMPLE_COUPLING"
3632
3340
  editions: [lite, full]
3633
3341
  docs: [docs/architecture.md#r206]
3634
- proves: [tests/hfs-proofs/rt-example-coupling.spec.mjs]
3342
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
3635
3343
  exemplifiedBy:
3636
3344
  - {path: packages/hfs/templates/app/hooks/husky/pre-commit, editions: [lite, full]}
3637
- - {path: tests/hfs-proofs/rt-example-coupling.spec.mjs, editions: [lite, full]}
3638
- witness:
3639
- - {path: tests/hfs-proofs/rt-example-coupling.spec.mjs, editions: [lite, full], codes: [RT_EXAMPLE_COUPLING, RT_PRODUCT_NAME_IN_SOURCE, RT_HOST_PATH_IN_TEMPLATE]}
3345
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
3640
3346
  law: "Runtime source never couples to a product or its example: no tracked file under scripts/, engine/, packages/, ui/src or ui/api - and no managed template under packages/hfs/templates/ - spells a literal examples/<name>, one of the product names this runtime shipped against (the closed PRODUCT_NAMES list of scripts/lib/example-refs.mjs), an inc-<hash> a product name prefixes, or a host drive path. Specs, tests, the generated runtime copies, changelogs and .starciwork records are out of scope; a read the runtime genuinely makes at run time is declared once in scripts/lib/example-refs.mjs and every consumer names that constant."
3641
3347
  scope: runtime
3642
3348
  kinds: [check]
@@ -3656,11 +3362,9 @@ rules:
3656
3362
  editions: [lite, full]
3657
3363
  docs: [docs/source-process.md#r208]
3658
3364
  templateNa: "Runtime port ownership is repository infrastructure; app scaffolds do not contain its owner files or readers."
3659
- proves: [tests/hfs-proofs/runtime-source-checks.spec.mjs]
3660
- exemplifiedBy:
3661
- - {path: tests/hfs-proofs/runtime-source-checks.spec.mjs, editions: [lite, full], codes: [RT_PORT_RESTATED]}
3662
- witness:
3663
- - {path: tests/hfs-proofs/runtime-source-checks.spec.mjs, editions: [lite, full], codes: [RT_PORT_RESTATED]}
3365
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
3366
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
3367
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
3664
3368
  - id: R209
3665
3369
  code: "RT_CONFIG_DEFAULT_TWICE"
3666
3370
  law: "Every documented configuration default is stated once, by its owner, and read through it: a camelCase leaf or lowercase key of config.example.yaml, or a value an owner declares - scripts/machine/home.mjs DEFAULTS (supervisor workers, the land gate, frozenMinutes, pollIntervalMs), engine/config.mjs (connector, ask, UAT, spec and allocation defaults, and DEFAULT_OWNER_LANGUAGE which scripts/machine/home.mjs re-exports), engine/orca-config.mjs (worker depth), scripts/reconciler/state.mjs (the controller mode) - is never restated as a literal fallback (?? or ||, a parameter default, or a language ternary) in any other runtime source file; the reader calls the owner accessor (supervisorSettings(), configuredMode(), ownerLanguage(), ...). Specs, tests, the generated runtime copies, stories and the HFS templates are out of scope, and a bare identifier or a computed value is a read, not a restatement."
@@ -3673,11 +3377,9 @@ rules:
3673
3377
  editions: [lite, full]
3674
3378
  docs: [docs/source-process.md#r209]
3675
3379
  templateNa: "Runtime configuration defaults belong to harness owners and readers; HFS product templates are outside this check's scope."
3676
- proves: [tests/hfs-proofs/runtime-source-checks.spec.mjs]
3677
- exemplifiedBy:
3678
- - {path: tests/hfs-proofs/runtime-source-checks.spec.mjs, editions: [lite, full], codes: [RT_CONFIG_DEFAULT_TWICE]}
3679
- witness:
3680
- - {path: tests/hfs-proofs/runtime-source-checks.spec.mjs, editions: [lite, full], codes: [RT_CONFIG_DEFAULT_TWICE]}
3380
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
3381
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
3382
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
3681
3383
  - id: R210
3682
3384
  code: "RT_VERSION_RESTATED"
3683
3385
  law: "knowledge/hfs/canon-pins.yaml spells the version of every @starci package and every canon-pinned dependency once; a package.json is the declared install site and a lockfile its resolution. Anywhere else a semver literal equal to a pin - or a name@x.y.z specifier naming one - restates it, except on the declared binding keys a refresher owns and rewrites in place (canon.version of the code-pattern bindings held by check-canon-pins.mjs, provenance.version and identity.version of the grammar snapshots rewritten by scripts/work/ui/grammar-knowledge.mjs). Package manifests, lockfiles, changelogs, specs, tests, the generated runtime copies and .starciwork are out of scope; a restatement is fixed by naming the pin, never the literal."
@@ -3690,11 +3392,9 @@ rules:
3690
3392
  editions: [lite, full]
3691
3393
  docs: [docs/source-process.md#r210]
3692
3394
  templateNa: "This runtime check scans tracked references to the canon pin catalog; product package install declarations are excluded and no app scaffold owns this runtime surface."
3693
- proves: [tests/hfs-proofs/rt-version-restated.spec.mjs]
3694
- exemplifiedBy:
3695
- - {path: tests/hfs-proofs/rt-version-restated.spec.mjs, editions: [lite, full], codes: [RT_VERSION_RESTATED]}
3696
- witness:
3697
- - {path: tests/hfs-proofs/rt-version-restated.spec.mjs, editions: [lite, full], codes: [RT_VERSION_RESTATED]}
3395
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
3396
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
3397
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
3698
3398
  - id: R211
3699
3399
  code: "RT_SLOT_ID_SHAPE"
3700
3400
  law: "A slot id follows the grammar its manifest declares, read from the manifest not from a list: dot-separated lowercase kebab segments, a first segment of naming.prefixes in knowledge/hfs/slots.yaml (profiles in knowledge/hfs/runtime-slots.yaml), <side>.app.<kind> naming a kind of appKinds.<side>, and every deeper id extending a declared id - an explicit parent field, or a family at least two slots share; a lone deep orphan invents a family. The role-suffix vocabulary holds no synonym pairs: a profile's suffixes never share a word with bannedSuffixes, no naming.refusedPairs pair is live in suffixes on both sides, and naming.sameConceptPairs is the one declared exception (step + saga-step), live on both sides or dropped; naming.glossary binds the five incoming-thing names (consumer, subscription, webhook, processor, handler) to their distinct kinds."
@@ -3707,32 +3407,17 @@ rules:
3707
3407
  editions: [lite, full]
3708
3408
  docs: [docs/source-process.md#r211]
3709
3409
  templateNa: "The authored app and runtime slot manifests are canon catalogs, not files scaffolded into apps."
3710
- proves: [tests/hfs-proofs/runtime-source-checks.spec.mjs]
3711
- exemplifiedBy:
3712
- - {path: tests/hfs-proofs/runtime-source-checks.spec.mjs, editions: [lite, full], codes: [RT_SLOT_ID_SHAPE]}
3713
- witness:
3714
- - {path: tests/hfs-proofs/runtime-source-checks.spec.mjs, editions: [lite, full], codes: [RT_SLOT_ID_SHAPE]}
3410
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
3411
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
3412
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
3715
3413
  - id: R212
3716
3414
  editions: [lite, full]
3717
3415
  codeEditions: {HFS_EDITION_FORBIDDEN_PRESENT: [lite], HFS_STARCIWORK_LITE_FORBIDDEN: [lite]}
3718
3416
  editionWhy: "R212/case-3 and R212/case-4 (owner:lite-production-swarm) preserve full Work and limit the lite infrastructure and Work surfaces."
3719
3417
  docs: [docs/lite-edition.md#edition-validation]
3720
3418
  templateNa: "The hfs.json edition declaration is generated programmatically by packages/hfs/scaffold/app.mjs; no managed declaration template exists. Forbidden paths are rejected rather than scaffolded."
3721
- proves:
3722
- - tests/hfs-proofs/hfs-edition-invalid.spec.mjs
3723
- - tests/hfs-proofs/hfs-edition-forbidden-present.spec.mjs
3724
- - tests/hfs-proofs/hfs-starciwork-lite-forbidden.spec.mjs
3725
- - tests/hfs-proofs/hfs-work-boundary-coverage.spec.mjs
3726
- exemplifiedBy:
3727
- - {path: tests/hfs-proofs/hfs-edition-invalid.spec.mjs, editions: [lite, full]}
3728
- - {path: tests/hfs-proofs/hfs-edition-forbidden-present.spec.mjs, edition: lite}
3729
- - {path: tests/hfs-proofs/hfs-starciwork-lite-forbidden.spec.mjs, edition: lite}
3730
- - {path: tests/hfs-proofs/hfs-work-boundary-coverage.spec.mjs, edition: lite}
3731
- witness:
3732
- - {path: tests/hfs-proofs/hfs-edition-invalid.spec.mjs, editions: [lite, full], codes: [HFS_EDITION_INVALID]}
3733
- - {path: tests/hfs-proofs/hfs-edition-forbidden-present.spec.mjs, edition: lite, codes: [HFS_EDITION_FORBIDDEN_PRESENT]}
3734
- - {path: tests/hfs-proofs/hfs-starciwork-lite-forbidden.spec.mjs, edition: lite, codes: [HFS_STARCIWORK_LITE_FORBIDDEN]}
3735
- - {path: tests/hfs-proofs/hfs-work-boundary-coverage.spec.mjs, edition: lite, codes: [HFS_STARCIWORK_LITE_FORBIDDEN]}
3419
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
3420
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
3736
3421
  code: "HFS_EDITION_INVALID"
3737
3422
  law: "hfs.json names an edition the manifest knows (full, or lite; absent means full). Lite follows the 2026-10-13 ruling: the same monorepo, code structure, slots, patterns and back-end unit specs, with only backing infrastructure swapped for managed Supabase (Postgres, Auth, Storage, Supabase Queues/pgmq for queue and event bus, Postgres locks, pg_cron); the api and sidecars run on docker-swarm on a VPS. The realtime pattern uses the same socket.io gateway inside the be api process (one instance, no Redis adapter), and both editions share knowledge/hfs/fe-stack.yaml. Lite requires application-stacks.yaml and permits environment metadata, runbooks, infra/swarm and encrypted-secret custody, while refusing infra/compose, infra/k8s, infra/terraform and components duplicating Supabase backing services (runtime/{config,env}, seeds and the sealed secrets of its environments are allowed). Contract specs and `test:contract` are allowed (owner 2026-10-14); it has no e2e spec, `test:e2e`, `test:stack` or `test:browser` script, e2e workflow, browser journey, Work catalog, shell, features, resources, UAT or br records, test container, toxiproxy, browser-runner, BullMQ, Kafka, Redis or graphql-ws dependency, or supabase/functions. Its .starciwork is optional and admits only .gitignore, workspace.yaml and brand/**; workspace.yaml is optional and carries project identity and repo roles for the Work tools."
3738
3423
  kinds: [check]
@@ -3765,6 +3450,7 @@ rules:
3765
3450
  quote: "In a lite app, .starciwork keeps only the brand records."
3766
3451
  ruling: "Amended by the owner on 2026-10-14: under lite, .starciwork is optional when the app has no brand records and admits only .gitignore, workspace.yaml and brand/** in the existing brand tooling layout, including drawing records, references and assets. workspace.yaml is optional and keeps the project id and repo roles so Work root detection and render-proof role mapping can tie brand records to the front end. index.yaml, shell/, features/, _resources/, uat and br remain forbidden. Lite readers read workspace.yaml normally and skip the full-edition catalog, shell and feature metadata; lite scaffolding creates .gitignore and workspace.yaml, with brand/ only when present. Full edition is unchanged."
3767
3452
 
3453
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
3768
3454
  - id: R213
3769
3455
  code: "DB_MIGRATION_SHAPE"
3770
3456
  editions: [lite, full]
@@ -3772,11 +3458,8 @@ rules:
3772
3458
  templateNa: "Full apps opt into Supabase without a managed Supabase migration scaffold; their migration sequence and Git history are product-authored."
3773
3459
  exemplifiedBy:
3774
3460
  - {path: packages/hfs/templates/app/skeleton-lite/supabase/migrations/__timestamp___baseline.sql, edition: lite}
3775
- - {path: tests/hfs-proofs/db-migration-shape.spec.mjs, editions: [lite, full]}
3776
- proves:
3777
- - {path: tests/hfs-proofs/db-migration-shape.spec.mjs, editions: [lite, full]}
3778
- witness:
3779
- - {path: tests/hfs-proofs/db-migration-shape.spec.mjs, editions: [lite, full], codes: [DB_MIGRATION_SHAPE]}
3461
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
3462
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
3780
3463
  law: "A migration is `supabase/migrations/<ts14>_<kebab>.sql`; the stamp is a valid UTC instant, active stamps are unique, and a new migration sorts strictly after the committed active migrations in HEAD. Repository history includes the archive: moving an active migration to the archive retires it from ordering, so a replacement baseline may predate archived stamps and later migrations append after the baseline. Wall-clock time, commit time and remote-branch stamps do not set the ordering boundary. A migration already on the base is immutable (a diff or an unarchived removal is a finding); a file that does not parse as PostgreSQL is a shape failure."
3781
3464
  kinds: [check]
3782
3465
  gates: [settle, land, ci]
@@ -3787,22 +3470,10 @@ rules:
3787
3470
  code: "DB_RLS_REQUIRED"
3788
3471
  editions: [lite, full]
3789
3472
  docs: [docs/lite-edition.md#r214]
3790
- proves:
3791
- - {path: tests/hfs-proofs/db-rls-required.spec.mjs, editions: [lite, full], codes: [DB_RLS_REQUIRED]}
3792
- - {path: tests/hfs-proofs/db-dynamic-ddl.spec.mjs, editions: [lite, full], codes: [DB_DYNAMIC_DDL]}
3793
- - {path: tests/hfs-proofs/db-policy-shape.spec.mjs, editions: [lite, full], codes: [DB_POLICY_SHAPE]}
3473
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
3794
3474
  exemplifiedBy:
3795
3475
  - {path: packages/hfs/templates/be/table/migration.sql.tpl, editions: [lite, full]}
3796
- - {path: tests/hfs-proofs/db-rls-required.spec.mjs, editions: [lite, full]}
3797
- - {path: tests/hfs-proofs/db-dynamic-ddl.spec.mjs, editions: [lite, full]}
3798
- - {path: tests/hfs-proofs/db-policy-shape.spec.mjs, editions: [lite, full]}
3799
- witness:
3800
- - {path: tests/hfs-proofs/db-rls-required.spec.mjs, edition: lite, codes: [DB_RLS_REQUIRED]}
3801
- - {path: tests/hfs-proofs/db-dynamic-ddl.spec.mjs, edition: lite, codes: [DB_DYNAMIC_DDL]}
3802
- - {path: tests/hfs-proofs/db-policy-shape.spec.mjs, edition: lite, codes: [DB_POLICY_SHAPE]}
3803
- - {path: tests/hfs-proofs/db-rls-required.spec.mjs, edition: full, codes: [DB_RLS_REQUIRED]}
3804
- - {path: tests/hfs-proofs/db-dynamic-ddl.spec.mjs, edition: full, codes: [DB_DYNAMIC_DDL]}
3805
- - {path: tests/hfs-proofs/db-policy-shape.spec.mjs, edition: full, codes: [DB_POLICY_SHAPE]}
3476
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
3806
3477
  law: "Row level security is code a parser can read: every `create table` (or `create table as`) in an exposed schema (`public` plus the config.toml `[api] schemas`) is followed, in the same migration, by `alter table <t> enable row level security` (and `force` for a table hfs.json `supabase.forceRls` declares); no `DO` block or function runs dynamic SQL that builds DDL or grants; a write or `for all` policy never uses `(true)`, `to anon`/`to public` is legal only on a `for select` policy named `*_public_read`, every policy is named `<table>_<role>_<action>`, and `service_role` is never granted."
3807
3478
  kinds: [check, codemod]
3808
3479
  gates: [settle, land, ci]
@@ -3813,45 +3484,25 @@ rules:
3813
3484
  code: "DB_DEFINER_SAFE"
3814
3485
  editions: [lite, full]
3815
3486
  docs: [docs/lite-edition.md#r215]
3816
- proves:
3817
- - {path: tests/hfs-proofs/db-definer-safe.spec.mjs, editions: [lite, full], codes: [DB_DEFINER_SAFE]}
3818
- - {path: tests/hfs-proofs/db-storage-policy.spec.mjs, editions: [lite, full], codes: [DB_STORAGE_POLICY]}
3819
- exemplifiedBy:
3820
- - {path: tests/hfs-proofs/db-definer-safe.spec.mjs, editions: [lite, full]}
3821
- - {path: tests/hfs-proofs/db-storage-policy.spec.mjs, editions: [lite, full]}
3487
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
3822
3488
  templateNa: "Security-definer functions and storage buckets are app-owned SQL objects; neither edition scaffolds them."
3823
- witness:
3824
- - {path: tests/hfs-proofs/db-definer-safe.spec.mjs, edition: lite, codes: [DB_DEFINER_SAFE]}
3825
- - {path: tests/hfs-proofs/db-storage-policy.spec.mjs, edition: lite, codes: [DB_STORAGE_POLICY]}
3826
- - {path: tests/hfs-proofs/db-definer-safe.spec.mjs, edition: full, codes: [DB_DEFINER_SAFE]}
3827
- - {path: tests/hfs-proofs/db-storage-policy.spec.mjs, edition: full, codes: [DB_STORAGE_POLICY]}
3489
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
3828
3490
  law: "Privileged database objects are declared safely: a `security definer` function pins `search_path` (never `from current`), lives outside the exposed schemas or is `revoke execute ... from public` in the same migration, declares a return type and interpolates parameters into dynamic SQL only through `format('%I/%L')`; a bucket inserted into `storage.buckets` declares `public = false` (true only for an id ending `_public`), `file_size_limit` and `allowed_mime_types`, and has a `storage.objects` policy naming its `bucket_id` in the same migration."
3829
3491
  kinds: [check]
3830
3492
  gates: [settle, land, ci]
3831
3493
  failureCodes: ["DB_DEFINER_SAFE", "DB_STORAGE_POLICY"]
3832
3494
  enforcers:
3833
3495
  - {kind: hfs, id: db-privileged-objects, at: scripts/hfs/rules/database.mjs}
3496
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
3834
3497
  - id: R216
3835
3498
  code: "DB_CONFIG_POLICY"
3836
3499
  editions: [lite, full]
3837
3500
  docs: [docs/lite-edition.md#r216]
3838
- proves:
3839
- - {path: tests/hfs-proofs/db-types-returned-collector.spec.mjs, editions: [lite, full], codes: [DB_TYPES_DRIFT]}
3840
- - {path: tests/hfs-proofs/db-config-policy.spec.mjs, editions: [lite, full], codes: [DB_CONFIG_POLICY]}
3841
- - {path: tests/hfs-proofs/db-types-drift.spec.mjs, editions: [lite, full], codes: [DB_TYPES_DRIFT]}
3501
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
3842
3502
  exemplifiedBy:
3843
3503
  - {path: packages/hfs/templates/app/skeleton-lite/supabase/config.toml, edition: lite}
3844
- - {path: tests/hfs-proofs/db-types-returned-collector.spec.mjs, editions: [lite, full]}
3845
- - {path: tests/hfs-proofs/db-config-policy.spec.mjs, editions: [lite, full]}
3846
- - {path: tests/hfs-proofs/db-types-drift.spec.mjs, editions: [lite, full]}
3847
3504
  templateNa: "Database types are generated from each app migration set, not static templates; full-edition Supabase configuration is app-owned."
3848
- witness:
3849
- - {path: tests/hfs-proofs/db-types-returned-collector.spec.mjs, edition: lite, codes: [DB_TYPES_DRIFT]}
3850
- - {path: tests/hfs-proofs/db-types-returned-collector.spec.mjs, edition: full, codes: [DB_TYPES_DRIFT]}
3851
- - {path: tests/hfs-proofs/db-config-policy.spec.mjs, edition: lite, codes: [DB_CONFIG_POLICY]}
3852
- - {path: tests/hfs-proofs/db-types-drift.spec.mjs, edition: lite, codes: [DB_TYPES_DRIFT]}
3853
- - {path: tests/hfs-proofs/db-config-policy.spec.mjs, edition: full, codes: [DB_CONFIG_POLICY]}
3854
- - {path: tests/hfs-proofs/db-types-drift.spec.mjs, edition: full, codes: [DB_TYPES_DRIFT]}
3505
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
3855
3506
  law: "The database configuration and its types are checked facts: `supabase/config.toml` carries no literal value under a credential key (the value is `env(NAME)`), `auth.jwt_expiry` is at most 3600, and signup, site url and redirect urls equal the Supabase block of hfs.json where it declares them; `supabase/types/database.types.ts` is committed and equals the text `contract:emit` regenerates from the migrations."
3856
3507
  kinds: [check]
3857
3508
  gates: [land, ci]
@@ -3862,23 +3513,11 @@ rules:
3862
3513
  code: "FE_SUPABASE_CLIENT_OWNER"
3863
3514
  editions: [lite, full]
3864
3515
  docs: [docs/lite-edition.md#r217]
3865
- proves:
3866
- - {path: tests/hfs-proofs/fe-supabase-client-owner.spec.mjs, editions: [lite, full], codes: [FE_SUPABASE_CLIENT_OWNER]}
3867
- - {path: tests/hfs-proofs/r217-backend-client-owner.spec.mjs, editions: [lite, full], codes: [BE_SUPABASE_CLIENT_OWNER]}
3868
- - {path: tests/hfs-proofs/fe-service-role-forbidden.spec.mjs, editions: [lite, full], codes: [FE_SERVICE_ROLE_FORBIDDEN]}
3516
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
3869
3517
  exemplifiedBy:
3870
3518
  - {path: packages/hfs/templates/fe/auth/supabase-client.ts.tpl, editions: [lite, full]}
3871
3519
  - {path: packages/hfs/templates/be/skeleton-lite/src/modules/integrations/supabase/supabase.client.ts, edition: lite}
3872
- - {path: tests/hfs-proofs/fe-supabase-client-owner.spec.mjs, editions: [lite, full]}
3873
- - {path: tests/hfs-proofs/r217-backend-client-owner.spec.mjs, editions: [lite, full]}
3874
- - {path: tests/hfs-proofs/fe-service-role-forbidden.spec.mjs, editions: [lite, full]}
3875
- witness:
3876
- - {path: tests/hfs-proofs/fe-supabase-client-owner.spec.mjs, edition: lite, codes: [FE_SUPABASE_CLIENT_OWNER]}
3877
- - {path: tests/hfs-proofs/r217-backend-client-owner.spec.mjs, edition: lite, codes: [BE_SUPABASE_CLIENT_OWNER]}
3878
- - {path: tests/hfs-proofs/fe-service-role-forbidden.spec.mjs, edition: lite, codes: [FE_SERVICE_ROLE_FORBIDDEN]}
3879
- - {path: tests/hfs-proofs/fe-supabase-client-owner.spec.mjs, edition: full, codes: [FE_SUPABASE_CLIENT_OWNER]}
3880
- - {path: tests/hfs-proofs/r217-backend-client-owner.spec.mjs, edition: full, codes: [BE_SUPABASE_CLIENT_OWNER]}
3881
- - {path: tests/hfs-proofs/fe-service-role-forbidden.spec.mjs, edition: full, codes: [FE_SERVICE_ROLE_FORBIDDEN]}
3520
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
3882
3521
  law: "Supabase has one door per side: on the front end `@supabase/supabase-js` and `@supabase/ssr` are imported only by `fe.modules.auth` and only their auth API is called (sign-in, sign-out, session, access token; never `.from`, `.rpc`, `.storage` or `.channel`, so the front end reads and writes no data through Supabase), and on the back end only `be.integrations.supabase` imports them, every back-end client carrying the committed `Database` type; the front end holds no credential: `fe/` names no service-role or `*_SECRET`, `*_PRIVATE`, `*_TOKEN`, `*_PASSWORD` value (public configuration is read once by `modules/config`)."
3883
3522
  kinds: [check, design]
3884
3523
  gates: [settle, land, ci]
@@ -3891,14 +3530,10 @@ rules:
3891
3530
  editions: [lite, full]
3892
3531
  docs: [docs/lite-edition.md#r219]
3893
3532
  templateNa: "Full-edition Supabase verification is an optional integration with no managed verifier scaffold; lite has the referenced integration template."
3894
- proves:
3895
- - {path: tests/hfs-proofs/be-supabase-jwt-verified.spec.mjs, editions: [lite, full]}
3533
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
3896
3534
  exemplifiedBy:
3897
3535
  - {path: packages/hfs/templates/be/skeleton-lite/src/modules/integrations/supabase/supabase.jwks.ts, edition: lite}
3898
- - {path: tests/hfs-proofs/be-supabase-jwt-verified.spec.mjs, editions: [lite, full]}
3899
- witness:
3900
- - {path: tests/hfs-proofs/be-supabase-jwt-verified.spec.mjs, edition: lite, codes: [BE_SUPABASE_JWT_VERIFIED]}
3901
- - {path: tests/hfs-proofs/be-supabase-jwt-verified.spec.mjs, edition: full, codes: [BE_SUPABASE_JWT_VERIFIED]}
3536
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
3902
3537
  law: "The principal is verified, never trusted: a back-end principal comes only from a Supabase access token verified against the project JWKS (signature, issuer, audience, expiry, pinned algorithm), never decoded unverified and never from the request body."
3903
3538
  kinds: [check, design]
3904
3539
  gates: [settle, land, ci]
@@ -3910,13 +3545,10 @@ rules:
3910
3545
  editions: [lite]
3911
3546
  editionWhy: "ruling:lite-backing-services assigns Supabase backing to lite; R220 adds lite's reduced custody tree and Supabase/FE literal scan, while R06 governs plaintext secret material in both editions."
3912
3547
  docs: [docs/host-secrets.md#application-secret-rules]
3913
- proves:
3914
- - {path: tests/hfs/hfs-supabase-secrets.spec.mjs, edition: lite}
3548
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
3915
3549
  exemplifiedBy:
3916
3550
  - {path: packages/hfs/templates/app/skeleton-lite/.sops.yaml, edition: lite}
3917
- - {path: tests/hfs/hfs-supabase-secrets.spec.mjs, edition: lite}
3918
- witness:
3919
- - {path: tests/hfs/hfs-supabase-secrets.spec.mjs, edition: lite}
3551
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
3920
3552
  law: "A lite app holds no secret material in the tree: root `.env*`, `secrets.env`, `.secrets/` and an `.enc` file outside `.starcistacks/<env>/secrets` are forbidden, and `fe/` and `supabase/` hold no Supabase token, JWT or connection string with a password; the one custody is the sealed `.starcistacks/<env>/secrets/<slug>.enc`."
3921
3553
  kinds: [check]
3922
3554
  gates: [settle, land, ci]
@@ -3929,14 +3561,11 @@ rules:
3929
3561
  scope: runtime
3930
3562
  editions: [lite, full]
3931
3563
  docs: [docs/git-governance.md#r221]
3932
- proves: [tests/hfs-proofs/ci-triggers-release-only.spec.mjs]
3564
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
3933
3565
  exemplifiedBy:
3934
3566
  - {path: packages/hfs/templates/app/ci-workflows-lite/github/workflows/ci.yml, edition: lite}
3935
3567
  - {path: packages/hfs/templates/app/ci-workflows/github/workflows/ci.yml, edition: full}
3936
- - {path: tests/hfs-proofs/ci-triggers-release-only.spec.mjs, editions: [lite, full]}
3937
- witness:
3938
- - {path: tests/hfs-proofs/ci-triggers-release-only.spec.mjs, edition: lite, codes: [CI_TRIGGERS_RELEASE_ONLY]}
3939
- - {path: tests/hfs-proofs/ci-triggers-release-only.spec.mjs, edition: full, codes: [CI_TRIGGERS_RELEASE_ONLY]}
3568
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
3940
3569
  kinds: [check]
3941
3570
  gates: [runtime]
3942
3571
  failureCodes: ["CI_TRIGGERS_RELEASE_ONLY"]
@@ -3949,17 +3578,14 @@ rules:
3949
3578
  editions: [lite, full]
3950
3579
  docs: [docs/git-governance.md#r222]
3951
3580
  templateNa: "Release tags at HEAD and their finished changelog sections are authored release evidence, not app scaffold output."
3952
- proves: [tests/hfs-proofs/release-notes.spec.mjs]
3953
- exemplifiedBy:
3954
- - {path: tests/hfs-proofs/release-notes.spec.mjs, editions: [lite, full]}
3955
- witness:
3956
- - {path: tests/hfs-proofs/release-notes.spec.mjs, edition: lite, codes: [RELEASE_NOTES]}
3957
- - {path: tests/hfs-proofs/release-notes.spec.mjs, edition: full, codes: [RELEASE_NOTES]}
3581
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
3582
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
3958
3583
  kinds: [check]
3959
3584
  gates: [runtime]
3960
3585
  failureCodes: ["RELEASE_NOTES"]
3961
3586
  enforcers:
3962
3587
  - {kind: runtime, id: release-notes, at: scripts/hfs/runtime-rules/release-notes.mjs}
3588
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
3963
3589
  - id: R223
3964
3590
  code: "RIGHTS_ROLE_DENIED"
3965
3591
  law: "By the caller's role, the command guard refuses git push, git tag, raw git commit/add/rm/mv, raw git synchronization writes, npm publish, a whole-suite run outside the release cut and unit.verify/e2e.verify, npm ci without the host lock, a release cut, and raw side-effecting tools; modules/kernel/command-policy.yaml is the one rule table read by both the PreToolUse guard and the PATH shim."
@@ -3969,6 +3595,7 @@ rules:
3969
3595
  failureCodes: ["RIGHTS_ROLE_DENIED", "RIGHTS_GIT_PUSH", "RIGHTS_GIT_TAG", "RIGHTS_GIT_COMMIT", "RIGHTS_GIT_SYNC", "RIGHTS_NPM_PUBLISH", "RIGHTS_NPM_CI_UNLOCKED", "RIGHTS_SUITE_RUN", "RIGHTS_RELEASE_CUT", "RIGHTS_RAW_TOOL"]
3970
3596
  enforcers:
3971
3597
  - {kind: runtime, id: role-rights, at: scripts/hfs/runtime-rules/rights-policy.mjs}
3598
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
3972
3599
  - id: R224
3973
3600
  code: "RIGHTS_PROTECTED_ZONE"
3974
3601
  law: "The protected zone declared once in modules/kernel/protected-zone.yaml is edited only by the owner path; a supervisor self-upgrade files an owner proposal, and an op never writes the .claude runtime checkout."
@@ -3978,6 +3605,7 @@ rules:
3978
3605
  failureCodes: ["RIGHTS_PROTECTED_ZONE", "RIGHTS_OP_RUNTIME_WRITE"]
3979
3606
  enforcers:
3980
3607
  - {kind: runtime, id: protected-zone, at: scripts/hfs/runtime-rules/rights-policy.mjs}
3608
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
3981
3609
  - id: R225
3982
3610
  code: "RT_HOOK_SHAPE"
3983
3611
  law: "The app hook templates keep the gate model: pre-commit is L0 only (no typecheck, no test run); pre-push checks the release gate (the starci-release L4 record, refs/backup/, v[0-9] tags; the runtime's own hook is scripts/guards/release-push-gate.mjs, which judges main and v* tags against the release definition and lets every other ref through) and runs no npm test, jest, typecheck or lint."
@@ -3987,35 +3615,14 @@ rules:
3987
3615
  failureCodes: ["RT_HOOK_SHAPE", "RIGHTS_PUSH_NOT_RELEASE"]
3988
3616
  enforcers:
3989
3617
  - {kind: runtime, id: hook-shape, at: scripts/hfs/runtime-rules/hook-shape.mjs}
3990
- - id: R226
3991
- code: "RT_SPEC_OVER_BUDGET"
3992
- law: "Every recorded spec duration should stay within the shared per-file land budget in modules/kernel/spec-durations.yaml: an over-budget spec is an advisory info finding ranked by its excess (it does not fail the check stage), and every recorded spec path must still exist. An over-budget spec is repaired without removing tests or assertions: share a per-process fixture, remove per-test install or boot, inject the clock and never lengthen a timeout; stale rows are refreshed from the current land record."
3993
- scope: runtime
3994
- kinds: [check]
3995
- gates: [runtime]
3996
- failureCodes: ["RT_SPEC_OVER_BUDGET", "RT_SPEC_BUDGET_STALE"]
3997
- enforcers:
3998
- - {kind: runtime, id: spec-budget, at: scripts/checks/check-spec-budget.mjs}
3999
- editions: [lite, full]
4000
- docs: [docs/source-process.md#r226]
4001
- templateNa: "The runtime land-duration record is measured repository data, not an app scaffold surface."
4002
- proves: [tests/hfs-proofs/runtime-source-checks.spec.mjs]
4003
- exemplifiedBy:
4004
- - {path: tests/hfs-proofs/runtime-source-checks.spec.mjs, editions: [lite, full], codes: [RT_SPEC_OVER_BUDGET, RT_SPEC_BUDGET_STALE]}
4005
- witness:
4006
- - {path: tests/hfs-proofs/runtime-source-checks.spec.mjs, editions: [lite, full], codes: [RT_SPEC_OVER_BUDGET, RT_SPEC_BUDGET_STALE]}
3618
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
4007
3619
  - id: R227
4008
3620
  code: "RT_SYNTAX_INVALID"
4009
3621
  editions: [lite, full]
4010
3622
  docs: [docs/source-process.md#r227]
4011
3623
  templateNa: "The runtime syntax check judges tracked authored JavaScript, not a scaffolded application surface."
4012
- proves:
4013
- - {path: tests/hfs-runtime-rules/runtime-syntax.spec.mjs, editions: [lite, full]}
4014
- exemplifiedBy:
4015
- - {path: tests/hfs-runtime-rules/runtime-syntax.spec.mjs, editions: [lite, full]}
4016
- witness:
4017
- - {path: tests/hfs-runtime-rules/runtime-syntax.spec.mjs, edition: lite, codes: [RT_SYNTAX_INVALID]}
4018
- - {path: tests/hfs-runtime-rules/runtime-syntax.spec.mjs, edition: full, codes: [RT_SYNTAX_INVALID]}
3624
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
3625
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
4019
3626
  law: "Every git-tracked .mjs, .cjs and .js file parses as JavaScript, including tests and package sources; node_modules, generated roots of ruleParams.runtime.generated and vendored build output are outside the authored-source scope. The runtime folder's Node-exact syntax pass remains in place, while this batched in-process pass extends coverage to the whole tracked repository and reports every parser diagnostic at its file and line."
4020
3627
  scope: runtime
4021
3628
  kinds: [check]
@@ -4023,6 +3630,7 @@ rules:
4023
3630
  failureCodes: ["RT_SYNTAX_INVALID"]
4024
3631
  enforcers:
4025
3632
  - {kind: runtime, id: syntax, at: scripts/hfs/runtime-rules/syntax.mjs}
3633
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
4026
3634
  - id: R228
4027
3635
  code: "RT_IDENTIFIER_UNDECLARED"
4028
3636
  law: "Every identifier a runtime ES module (scripts/, engine/ without the vendored yaml bundle, ui/api/, packages/cli/bin and src) reads or writes resolves, by scope analysis over its TypeScript syntax tree, to a declaration, import, parameter or Node global of an enclosing scope. A re-export (export {x} from './y.mjs') binds x in no local scope; require, module, exports and __dirname are not globals of a module; browser globals resolve only inside a function that a module hands to page.evaluate, here or through an import. A name a refactor left behind is refused before the line that reads it runs."
@@ -4035,14 +3643,12 @@ rules:
4035
3643
  editions: [lite, full]
4036
3644
  docs: [docs/source-process.md#r228]
4037
3645
  templateNa: "This check scans authored runtime ES modules; app scaffolds do not contain these harness modules."
4038
- proves: [tests/hfs-proofs/runtime-source-checks.spec.mjs]
4039
- exemplifiedBy:
4040
- - {path: tests/hfs-proofs/runtime-source-checks.spec.mjs, editions: [lite, full], codes: [RT_IDENTIFIER_UNDECLARED]}
4041
- witness:
4042
- - {path: tests/hfs-proofs/runtime-source-checks.spec.mjs, editions: [lite, full], codes: [RT_IDENTIFIER_UNDECLARED]}
3646
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
3647
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
3648
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
4043
3649
  - id: R229
4044
3650
  code: "RT_REMOVED_VOCABULARY"
4045
- law: "No text an agent or the owner reads teaches a spelling the runtime refuses. The refused names - config keys, routing-bias fields, verbs, flags, codes and vocabulary - are the one list modules/kernel/removed-vocabulary.yaml, each with its replacement and the release that removed it; the config and routing-bias refusals read the same list. Every tracked file of skills/, docs/, README.md, CONTEXT.md, CONTRIBUTING.md, modules/ and knowledge/ (Markdown and yaml) is scanned line by line, and a line that spells a listed name is a finding naming file:line, the name and its replacement, (and every tests/**/*.spec.mjs, where a name is allowed only on a line or under a test title that says refuse, reject, removed, throws or unknown) unless the file is the list, CHANGELOG.md, or the line or block carries the [removed-list] marker (a marker alone on a comment line covers the lines up to the next blank one). Removing or renaming a key, flag, verb, field or code adds its entry to the list in the same commit."
3651
+ law: "No text an agent or the owner reads teaches a spelling the runtime refuses. The refused names - config keys, routing-bias fields, verbs, flags, codes and vocabulary - are the one list modules/kernel/removed-vocabulary.yaml, each with its replacement and the release that removed it; the config and routing-bias refusals read the same list. Every tracked file of skills/, docs/, README.md, CONTEXT.md, CONTRIBUTING.md, modules/ and knowledge/ (Markdown and yaml) is scanned line by line, and a line that spells a listed name is a finding naming file:line, the name and its replacement unless the file is the list, CHANGELOG.md, or the line or block carries the [removed-list] marker (a marker alone on a comment line covers the lines up to the next blank one). Removing or renaming a key, flag, verb, field or code adds its entry to the list in the same commit."
4046
3652
  scope: runtime
4047
3653
  kinds: [check]
4048
3654
  gates: [runtime]
@@ -4052,11 +3658,9 @@ rules:
4052
3658
  editions: [lite, full]
4053
3659
  docs: [docs/source-process.md#r229]
4054
3660
  templateNa: "The removed-name catalog and authored runtime instructions are maintained repository surfaces, not app scaffold output."
4055
- proves: [tests/hfs-proofs/runtime-source-checks.spec.mjs]
4056
- exemplifiedBy:
4057
- - {path: tests/hfs-proofs/runtime-source-checks.spec.mjs, editions: [lite, full], codes: [RT_REMOVED_VOCABULARY]}
4058
- witness:
4059
- - {path: tests/hfs-proofs/runtime-source-checks.spec.mjs, editions: [lite, full], codes: [RT_REMOVED_VOCABULARY]}
3661
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
3662
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
3663
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
4060
3664
  - id: R230
4061
3665
  code: "RT_PROSE_COMMAND_UNKNOWN"
4062
3666
  law: "A command an instruction shows exists as written. Every `starci <group> <verb>` in a backticked span, fenced code line or yaml example item of skills/, docs/, README.md, CONTEXT.md, CONTRIBUTING.md and modules/ names a verb of the CLI catalog (modules/cli/commands) in a catalogued group, and every --flag on it is a flag of that verb or a global flag; the text after a lone -- belongs to another program and a [removed-list] marked line is exempt. The catalog is generated into the valid set, never typed twice."
@@ -4064,16 +3668,14 @@ rules:
4064
3668
  editions: [lite, full]
4065
3669
  docs: [docs/debugging.md#r230-instruction-commands]
4066
3670
  templateNa: "Runtime instruction and contract self-checks judge authored runtime surfaces; application scaffolds do not contain this surface."
4067
- proves: [tests/checks/runtime-contracts-l14.spec.mjs]
4068
- exemplifiedBy:
4069
- - {path: tests/checks/runtime-contracts-l14.spec.mjs, editions: [lite, full]}
4070
- witness:
4071
- - {path: tests/checks/runtime-contracts-l14.spec.mjs, editions: [lite, full]}
3671
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
3672
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
4072
3673
  kinds: [check]
4073
3674
  gates: [runtime]
4074
3675
  failureCodes: ["RT_PROSE_COMMAND_UNKNOWN"]
4075
3676
  enforcers:
4076
3677
  - {kind: runtime, id: prose-commands, at: scripts/checks/check-prose-commands.mjs}
3678
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
4077
3679
  - id: R231
4078
3680
  code: "RT_DOCUMENTED_DEFAULT_DRIFT"
4079
3681
  law: "A default a document states equals the value the code reads. A document states a default by citing its key - default <value> = `<key>` - where the key is a config.yaml path (resolved through the validator's settings reader, so an absent block yields its code default) or <yaml file under modules/>:<dotted path>; the check resolves the key and compares, and a key that resolves to nothing is a finding. docs/, README.md, CONTEXT.md, config.example.yaml and modules/ prose and yaml are scanned; a bare number stated as a default without its key is not judged, so the owner of a default is cited, never retyped."
@@ -4081,16 +3683,14 @@ rules:
4081
3683
  editions: [lite, full]
4082
3684
  docs: [docs/debugging.md#r231-documented-defaults]
4083
3685
  templateNa: "Runtime instruction and contract self-checks judge authored runtime surfaces; application scaffolds do not contain this surface."
4084
- proves: [tests/checks/runtime-contracts-l14.spec.mjs]
4085
- exemplifiedBy:
4086
- - {path: tests/checks/runtime-contracts-l14.spec.mjs, editions: [lite, full]}
4087
- witness:
4088
- - {path: tests/checks/runtime-contracts-l14.spec.mjs, editions: [lite, full]}
3686
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
3687
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
4089
3688
  kinds: [check]
4090
3689
  gates: [runtime]
4091
3690
  failureCodes: ["RT_DOCUMENTED_DEFAULT_DRIFT"]
4092
3691
  enforcers:
4093
3692
  - {kind: runtime, id: documented-defaults, at: scripts/checks/check-documented-defaults.mjs}
3693
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
4094
3694
  - id: R232
4095
3695
  code: "RT_ROLES_CONTRACT_DRIFT"
4096
3696
  law: "A role is described once. modules/kernel/roles.yaml holds, per role, its scope, what it does, what it must clean up, what it never does, whom it reports to and who oversees it; a Markdown surface of the role carries the block generated from it, a yaml or script surface cites modules/kernel/roles.yaml#<role>, and no surface teaches a spelling the role's contradicts list names."
@@ -4098,45 +3698,36 @@ rules:
4098
3698
  editions: [lite, full]
4099
3699
  docs: [docs/debugging.md#r232-generated-role-contracts]
4100
3700
  templateNa: "Runtime instruction and contract self-checks judge authored runtime surfaces; application scaffolds do not contain this surface."
4101
- proves: [tests/checks/runtime-contracts-l14.spec.mjs]
4102
- exemplifiedBy:
4103
- - {path: tests/checks/runtime-contracts-l14.spec.mjs, editions: [lite, full]}
4104
- witness:
4105
- - {path: tests/checks/runtime-contracts-l14.spec.mjs, editions: [lite, full]}
3701
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
3702
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
4106
3703
  kinds: [check]
4107
3704
  gates: [runtime]
4108
3705
  failureCodes: ["RT_ROLES_CONTRACT_DRIFT"]
4109
3706
  enforcers:
4110
3707
  - {kind: runtime, id: roles-contract, at: scripts/checks/check-roles-contract.mjs}
3708
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
4111
3709
  - id: R233
4112
3710
  code: "RT_EDGE_CASE_REGISTRY"
4113
- law: "Every edge case met is a declared entry of modules/reconciler/edge-cases.yaml with its family, its real occurrence and a status of covered or open; a covered entry names the rule that handles it and the spec that reproduces it, and both exist, and an open entry says why."
3711
+ law: "Every edge case met is a declared entry of modules/reconciler/edge-cases.yaml with its family, its real occurrence and a status of covered or open; a covered entry names the rule that handles it and that file exists, a named spec is a package spec or the scaffold e2e that exists (never a runtime test, owner ruling no-runtime-specs), and an open entry says why."
4114
3712
  scope: runtime
4115
3713
  editions: [lite, full]
4116
3714
  docs: [docs/debugging.md#r233-edge-case-evidence]
4117
3715
  templateNa: "Runtime instruction and contract self-checks judge authored runtime surfaces; application scaffolds do not contain this surface."
4118
- proves: [tests/checks/runtime-contracts-l14.spec.mjs]
4119
- exemplifiedBy:
4120
- - {path: tests/checks/runtime-contracts-l14.spec.mjs, editions: [lite, full]}
4121
- witness:
4122
- - {path: tests/checks/runtime-contracts-l14.spec.mjs, editions: [lite, full]}
3716
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
3717
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
4123
3718
  kinds: [check]
4124
3719
  gates: [runtime]
4125
3720
  failureCodes: ["RT_EDGE_CASE_REGISTRY"]
4126
3721
  enforcers:
4127
3722
  - {kind: runtime, id: edge-case-registry, at: scripts/checks/check-edge-case-registry.mjs}
3723
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
4128
3724
  - id: R234
4129
3725
  code: "RT_SECRET_TRACKED"
4130
3726
  editions: [lite, full]
4131
3727
  docs: [docs/application-stacks.md#where-a-secret-may-live]
4132
3728
  templateNa: "The public runtime repository secret policy judges Git-tracked custody paths; application scaffolds do not contain runtime host secrets."
4133
- proves:
4134
- - {path: tests/checks/secret-tracked.spec.mjs, editions: [lite, full]}
4135
- exemplifiedBy:
4136
- - {path: tests/checks/secret-tracked.spec.mjs, editions: [lite, full]}
4137
- witness:
4138
- - {path: tests/checks/secret-tracked.spec.mjs, edition: lite}
4139
- - {path: tests/checks/secret-tracked.spec.mjs, edition: full}
3729
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
3730
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
4140
3731
  law: "The runtime repository is public and tracks no secret material, not even ciphertext: no tracked *.enc member and no tracked secret.env or .env file, except the paths ruleParams.runtime.heldSecrets names with their reason (a list that only shrinks). Every secret the host needs lives in the one untracked .claude/secret.env, read only through engine/secrets.mjs, its names listed in the tracked secret.env.example; a product repository keeps its own custody in its own repository. Two Sonar servers, no overlap: SonarCloud serves everything that lives in the runtime repository (the runtime and the example apps, token SONAR_TOKEN), the self-hosted ext/sonar serves product repositories only."
4141
3732
  scope: runtime
4142
3733
  kinds: [check]
@@ -4144,6 +3735,7 @@ rules:
4144
3735
  failureCodes: ["RT_SECRET_TRACKED"]
4145
3736
  enforcers:
4146
3737
  - {kind: runtime, id: secret-tracked, at: scripts/hfs/runtime-rules/secret-tracked.mjs}
3738
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
4147
3739
  - id: R235
4148
3740
  code: "SCAN_SMELL"
4149
3741
  editions: [lite, full]
@@ -4185,13 +3777,8 @@ rules:
4185
3777
  editions: [lite, full]
4186
3778
  docs: [docs/debugging.md#r236]
4187
3779
  templateNa: "Runtime release-history approval is checked against committed gates and owner rulings; product scaffolding has no runtime release history to generate."
4188
- proves:
4189
- - {path: tests/supervisor/gate-loosening.spec.mjs, editions: [lite, full]}
4190
- exemplifiedBy:
4191
- - {path: tests/supervisor/gate-loosening.spec.mjs, editions: [lite, full]}
4192
- witness:
4193
- - {path: tests/supervisor/gate-loosening.spec.mjs, edition: lite}
4194
- - {path: tests/supervisor/gate-loosening.spec.mjs, edition: full}
3780
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
3781
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
4195
3782
  law: "A change that loosens a gate or check is owner-class: a check removed from a gate file's list, a floor lowered or a ceiling raised there, an allowlist entry added, a spec deleted or weakened or skipped together with product code (modules/kernel/gate-loosening.yaml). It lands, and passes the check, only when the tree it is judged against already holds the owner's approval of exactly that loosening, an owner-rulings entry gate-loosening-<fingerprint>."
4196
3783
  scope: runtime
4197
3784
  kinds: [check]
@@ -4199,18 +3786,14 @@ rules:
4199
3786
  failureCodes: ["RT_GATE_LOOSENING"]
4200
3787
  enforcers:
4201
3788
  - {kind: runtime, id: gate-loosening, at: scripts/checks/check-gate-loosening.mjs}
3789
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
4202
3790
  - id: R237
4203
3791
  code: "RT_REVISION_SCOPE"
4204
3792
  editions: [lite, full]
4205
3793
  docs: [docs/debugging.md#r237]
4206
3794
  templateNa: "The runtime revision-scope table and derived engine import graph are runtime authoring surfaces, not generated application files."
4207
- proves:
4208
- - {path: tests/reconciler/revision-scope.spec.mjs, editions: [lite, full]}
4209
- exemplifiedBy:
4210
- - {path: tests/reconciler/revision-scope.spec.mjs, editions: [lite, full]}
4211
- witness:
4212
- - {path: tests/reconciler/revision-scope.spec.mjs, edition: lite}
4213
- - {path: tests/reconciler/revision-scope.spec.mjs, edition: full}
3795
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
3796
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
4214
3797
  law: "What a change of the runtime tree asks of each role is declared once, in modules/kernel/revision-scope.yaml: every tracked path matches a row, the engine-loaded files are derived from the import graph of the engine's entries and never hand-listed, the files each seat's launch prompt is built from are the files its generator reads, and a wording-only declaration holds only for an edit that keeps the file's structure."
4215
3798
  scope: runtime
4216
3799
  kinds: [check]
@@ -4218,6 +3801,7 @@ rules:
4218
3801
  failureCodes: ["RT_REVISION_SCOPE"]
4219
3802
  enforcers:
4220
3803
  - {kind: runtime, id: revision-scope, at: scripts/checks/check-revision-scope.mjs}
3804
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
4221
3805
  - id: R238
4222
3806
  code: "RT_EVENT_SPILL_BYPASS"
4223
3807
  law: "A ledger event payload that grows with its input (a file list, a manifest, a digest, a report, a critique, a menu) goes to the blob store through the one path of appendEvent: engine/db/event-compact.mjs eventPayloadRecord keeps a bounded inline view of at most 16 KiB and the whole payload behind events.payload_sha, and readers resolve it through engine/db/event-payload.mjs. No runtime source file other than engine/db/ledger.mjs and engine/db/event-compact.mjs passes a payloadSha to a write, catches the payload-too-large refusal to spill by hand, or inserts into the events table directly. Specs, tests, node_modules, the generated runtime copies and packages are out of scope."
@@ -4225,16 +3809,14 @@ rules:
4225
3809
  editions: [lite, full]
4226
3810
  docs: [docs/ledger-db.md#the-storage-convention-owner-ruling-2026-10-09]
4227
3811
  templateNa: "These runtime checker inputs are maintained in the runtime repository, not scaffolded in a product app."
4228
- proves: [tests/checks/runtime-integrity-coverage.spec.mjs]
4229
- exemplifiedBy:
4230
- - {path: tests/checks/runtime-integrity-coverage.spec.mjs, editions: [lite, full], codes: [RT_EVENT_SPILL_BYPASS]}
4231
- witness:
4232
- - {path: tests/checks/runtime-integrity-coverage.spec.mjs, editions: [lite, full], codes: [RT_EVENT_SPILL_BYPASS]}
3812
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
3813
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
4233
3814
  kinds: [check]
4234
3815
  gates: [runtime]
4235
3816
  failureCodes: ["RT_EVENT_SPILL_BYPASS"]
4236
3817
  enforcers:
4237
3818
  - {kind: runtime, id: event-spill, at: scripts/checks/check-event-spill.mjs}
3819
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
4238
3820
  - id: R239
4239
3821
  code: "RT_STORAGE_UNDECLARED"
4240
3822
  law: "Content lives as a file in the content-addressed blob store under the runtime state dir (<runtime root>/.runtime/artifacts, engine/db/blob.mjs) and a database row holds only the reference (the sha) plus the small scalars it is queried by (owner ruling 2026-10-09). Always content, whatever its size: a report, a critique or verdict, a prompt or dispatch contract, a read manifest, a list of files, a log or command output, a menu or digest snapshot, an image or render, a diff. What may stay inline: ids, states, timestamps, counts, short codes and one-line reasons up to 256 bytes; any other free text up to 1024 bytes; a payload of any size is class spill (appendEvent and supEvent keep the whole payload behind the sha and a small inline form). Every text column of the product ledger and of machine.sqlite is declared in modules/schemas/storage-convention.yaml with its class (scalar, bounded, reference, spill, migrate), so a new table or column cannot appear without one; a column that holds content inline today is class migrate with its measured size, and the migration to a reference is a proposed runtime step, idempotent and journalled, never a hand rewrite of a live store."
@@ -4242,16 +3824,14 @@ rules:
4242
3824
  editions: [lite, full]
4243
3825
  docs: [docs/ledger-db.md#the-storage-convention-owner-ruling-2026-10-09]
4244
3826
  templateNa: "These runtime checker inputs are maintained in the runtime repository, not scaffolded in a product app."
4245
- proves: [tests/checks/runtime-integrity-coverage.spec.mjs]
4246
- exemplifiedBy:
4247
- - {path: tests/checks/runtime-integrity-coverage.spec.mjs, editions: [lite, full], codes: [RT_STORAGE_UNDECLARED]}
4248
- witness:
4249
- - {path: tests/checks/runtime-integrity-coverage.spec.mjs, editions: [lite, full], codes: [RT_STORAGE_UNDECLARED]}
3827
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
3828
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
4250
3829
  kinds: [check]
4251
3830
  gates: [runtime]
4252
3831
  failureCodes: ["RT_STORAGE_UNDECLARED"]
4253
3832
  enforcers:
4254
3833
  - {kind: runtime, id: storage-convention, at: scripts/checks/check-storage-convention.mjs}
3834
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
4255
3835
  - id: R240
4256
3836
  code: "RT_ROOT_ADHOC"
4257
3837
  law: "Which directory a component reads or writes is decided in one module, scripts/lib/roots.mjs: the runtime tree, its state directory, the temp root, the invocation directory, the Work directory name, the order in which two trees that can hold the same record are tried (the tree the work happens in first, then the product's main checkout: workDirHolding, workRecordPath) and the order a tool is looked up (the tree the work happens in, then the project, the runtime's own install last: toolSearchDirs). A runtime source file does not resolve a root by itself: it neither spells process.cwd() nor the Work directory name as a literal outside that module more often than the tree the check landed on held it: a file keeps the count it had and only loses it as it is converted, and a new file starts at none. Four times in two days a component read or wrote the wrong tree because it resolved the directory itself."
@@ -4259,16 +3839,14 @@ rules:
4259
3839
  editions: [lite, full]
4260
3840
  docs: [docs/architecture.md#r240]
4261
3841
  templateNa: "These runtime checker inputs are maintained in the runtime repository, not scaffolded in a product app."
4262
- proves: [tests/checks/runtime-integrity-coverage.spec.mjs]
4263
- exemplifiedBy:
4264
- - {path: tests/checks/runtime-integrity-coverage.spec.mjs, editions: [lite, full], codes: [RT_ROOT_ADHOC]}
4265
- witness:
4266
- - {path: tests/checks/runtime-integrity-coverage.spec.mjs, editions: [lite, full], codes: [RT_ROOT_ADHOC]}
3842
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
3843
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
4267
3844
  kinds: [check]
4268
3845
  gates: [runtime]
4269
3846
  failureCodes: ["RT_ROOT_ADHOC"]
4270
3847
  enforcers:
4271
3848
  - {kind: runtime, id: root-adhoc, at: scripts/checks/check-root-adhoc.mjs}
3849
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
4272
3850
  - id: R241
4273
3851
  code: "RT_HELD_UNSURFACED"
4274
3852
  law: "A failure code the catalogue gives to the Supervisor or the owner as a runtime fault is a state that role must be able to learn of; a stop that nobody is told of stands for hours until someone reads source. Each such entry of modules/kernel/failure-codes.yaml names the house mechanism that reaches its owner (surfacedBy: decision-item, sla-clock, incident, digest, notifier, caller or open) with surfacedAs (the item kind, clock code, incident kind, digest problem line or urgent class) and surfacedAt (the file that does it), and the check proves the mechanism exists and is wired in that file: the kind is a Decision Item kind and the file opens items naming it, the code is an SLA code with an owner and the file sets its clock, the problem line is a departure of the operating standard, a caller is a verb the owning role ran itself and never a reconciler file (a loop is no owner). An entry nothing reaches is surfacedBy open and names an open edge-case registry entry with the exact reason; it is never exempted silently."
@@ -4276,16 +3854,14 @@ rules:
4276
3854
  editions: [lite, full]
4277
3855
  docs: [docs/debugging.md#r241]
4278
3856
  templateNa: "These runtime checker inputs are maintained in the runtime repository, not scaffolded in a product app."
4279
- proves: [tests/checks/runtime-integrity-coverage.spec.mjs]
4280
- exemplifiedBy:
4281
- - {path: tests/checks/runtime-integrity-coverage.spec.mjs, editions: [lite, full], codes: [RT_HELD_UNSURFACED]}
4282
- witness:
4283
- - {path: tests/checks/runtime-integrity-coverage.spec.mjs, editions: [lite, full], codes: [RT_HELD_UNSURFACED]}
3857
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
3858
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
4284
3859
  kinds: [check]
4285
3860
  gates: [runtime]
4286
3861
  failureCodes: ["RT_HELD_UNSURFACED"]
4287
3862
  enforcers:
4288
3863
  - {kind: runtime, id: held-surfacing, at: scripts/checks/check-held-surfacing.mjs}
3864
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
4289
3865
  - id: R242
4290
3866
  code: "RT_OP_JUDGE_UNDECLARED"
4291
3867
  law: "Every op declares who judges its product (principle P2: the maker never judges its own work). The contract of each op (modules/ops/ops/<op>.yaml) carries the required field `judge`, a list of at least one entry, each with a one-line why: machine (independent measures the runtime owns or re-runs at settle, named from modules/kernel/op-judges.yaml, and the contract proofs they rely on; a test file the same attempt wrote is never one by itself), critic (the independent Critic and its rubric, declared exactly for the op kinds that modules/kernel/critic.yaml coverage marks covered), owner (only where modules/kernel/op-judges.yaml ownerGates holds an owner gate) and next-leg (a registered reviewing leg whose contract is to review this product). Nobody cannot be declared. The registry and the contracts are checked against the runtime's own tables (op-gate and sonar-gate enforcedOps, opProofs, proof media, the Critic coverage), so the declarations and what the runtime does cannot drift apart. Surfaced in the full status text of a leg and in the op prompt."
@@ -4293,29 +3869,24 @@ rules:
4293
3869
  editions: [lite, full]
4294
3870
  docs: [docs/ops.md#r242]
4295
3871
  templateNa: "These runtime checker inputs are maintained in the runtime repository, not scaffolded in a product app."
4296
- proves: [tests/checks/runtime-integrity-coverage.spec.mjs]
4297
- exemplifiedBy:
4298
- - {path: tests/checks/runtime-integrity-coverage.spec.mjs, editions: [lite, full], codes: [RT_OP_JUDGE_UNDECLARED]}
4299
- witness:
4300
- - {path: tests/checks/runtime-integrity-coverage.spec.mjs, editions: [lite, full], codes: [RT_OP_JUDGE_UNDECLARED]}
3872
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
3873
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
4301
3874
  kinds: [check]
4302
3875
  gates: [runtime]
4303
3876
  failureCodes: ["RT_OP_JUDGE_UNDECLARED"]
4304
3877
  enforcers:
4305
3878
  - {kind: runtime, id: op-judge, at: scripts/checks/check-op-judge.mjs}
3879
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
4306
3880
  - id: R243
4307
3881
  code: "FE_SERVER_ACTION_FORBIDDEN"
4308
3882
  editions: [lite, full]
4309
3883
  docs: [docs/code-pattern-enforcement.md#r243]
4310
3884
  proves:
4311
- - {path: tests/hfs/frontend-boundary-coverage.spec.mjs, editions: [lite, full]}
4312
3885
  - {path: packages/eslint/fe/frontend-boundary-coverage.spec.mjs, editions: [lite, full], codes: [FE_SERVER_ACTION_FORBIDDEN]}
4313
3886
  exemplifiedBy:
4314
3887
  - {path: packages/hfs/templates/fe/skeleton-lite/apps/web/src/app/health/live/route.ts, edition: lite}
4315
3888
  - {path: packages/hfs/templates/fe/skeleton/apps/app/src/app/health/live/route.ts, edition: full}
4316
- - {path: tests/hfs/frontend-boundary-coverage.spec.mjs, editions: [lite, full]}
4317
- witness:
4318
- - {path: tests/hfs/frontend-boundary-coverage.spec.mjs, editions: [lite, full], codes: [FE_SERVER_ACTION_FORBIDDEN, FE_ROUTE_HANDLER_FORBIDDEN]}
3889
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
4319
3890
  law: "The front end serves no API, in every app and edition (R212 case-2 (owner:lite-production-swarm), with the Work boundary amended by ruling:R212/case-4): no file under `fe/` carries a `\"use server\"` directive (module or function level), and the only route handlers are `app/health/live/route.ts` and the auth callback of the `fe.route.callback` slot; reads and writes reach the back end through `modules/api` and the SWR hooks, and a webhook, cron, public API or third-party callback is a back-end feature."
4320
3891
  kinds: [check, lint]
4321
3892
  gates: [pre-commit, settle, land, ci]
@@ -4323,19 +3894,17 @@ rules:
4323
3894
  enforcers:
4324
3895
  - {kind: machine, id: server-action-forbidden, at: scripts/hfs/architecture/server-action.mjs}
4325
3896
  - {kind: eslint-fe, id: no-server-action}
3897
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; the package specs named in proves keep proving the lint enforcers, the runtime-code enforcers lost their deleted runtime spec"
4326
3898
  - id: R244
4327
3899
  code: "FE_STACK_FORBIDDEN"
4328
3900
  editions: [lite, full]
4329
3901
  docs: [docs/code-pattern-enforcement.md#r244]
4330
3902
  proves:
4331
- - {path: tests/hfs/frontend-boundary-coverage.spec.mjs, editions: [lite, full], codes: [FE_STACK_FORBIDDEN]}
4332
3903
  - {path: packages/eslint/fe/frontend-boundary-coverage.spec.mjs, editions: [lite, full], codes: [FE_STACK_FORBIDDEN]}
4333
3904
  exemplifiedBy:
4334
3905
  - {path: packages/hfs/templates/fe/skeleton-lite/apps/web/src/proxy.ts, edition: lite}
4335
3906
  - {path: packages/hfs/templates/fe/skeleton/apps/app/src/proxy.ts, edition: full}
4336
- - {path: tests/hfs/frontend-boundary-coverage.spec.mjs, editions: [lite, full], codes: [FE_STACK_FORBIDDEN]}
4337
- witness:
4338
- - {path: tests/hfs/frontend-boundary-coverage.spec.mjs, editions: [lite, full], codes: [FE_STACK_FORBIDDEN]}
3907
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
4339
3908
  law: "A front end uses the one canonical library of each concern of knowledge/hfs/fe-stack.yaml: no front-end package.json (an app or a `fe/packages/*` package) depends on, and no source file under `fe/` imports, a package that the catalog lists under a concern's `forbids`; a missing concern is added to the catalog (with its pin in canon-pins.yaml), never installed beside it."
4340
3909
  kinds: [check, lint]
4341
3910
  gates: [pre-commit, settle, land, ci]
@@ -4343,6 +3912,7 @@ rules:
4343
3912
  enforcers:
4344
3913
  - {kind: hfs, id: fe-stack, at: scripts/hfs/rules/fe-stack.mjs}
4345
3914
  - {kind: eslint-fe, id: fe-stack-import}
3915
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; the package specs named in proves keep proving the lint enforcers, the runtime-code enforcers lost their deleted runtime spec"
4346
3916
  - id: R245
4347
3917
  code: "BE_APP_OPTIONS_COMPOSITION"
4348
3918
  amendedBy: R289
@@ -4387,125 +3957,108 @@ rules:
4387
3957
  editions: [lite, full]
4388
3958
  docs: [docs/quality-bar.md#coverage-matrix]
4389
3959
  templateNa: "The runtime coverage checker judges authored catalogs and proof metadata; app scaffolds do not contain this runtime surface."
4390
- proves: [tests/checks/hfs-coverage.spec.mjs]
4391
- exemplifiedBy:
4392
- - {path: tests/checks/hfs-coverage.spec.mjs, edition: lite}
4393
- - {path: tests/checks/hfs-coverage.spec.mjs, edition: full}
4394
- witness:
4395
- - {path: tests/checks/hfs-coverage.spec.mjs, edition: lite}
4396
- - {path: tests/checks/hfs-coverage.spec.mjs, edition: full}
3960
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
3961
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
4397
3962
  kinds: [check]
4398
3963
  gates: [runtime]
4399
3964
  failureCodes: ["RT_COVERAGE_MATRIX", "RT_COVERAGE_NO_ENFORCER", "RT_COVERAGE_NO_SPEC", "RT_COVERAGE_NO_WITNESS", "RT_COVERAGE_NO_DOC", "RT_COVERAGE_NO_TEMPLATE", "RT_COVERAGE_NO_EXAMPLE", "RT_COVERAGE_EDITION_ASYMMETRY", "RT_COVERAGE_SCHEMA_NO_RECORD", "RT_COVERAGE_GATE_LIE", "RT_COVERAGE_SUPERSEDED_CITE", "RT_COVERAGE_SURFACE_UNMAPPED", "RT_COVERAGE_REQUIREMENT_UNLEDGERED", "RT_COVERAGE_PROOF_VACUOUS", "RT_COVERAGE_CODE_UNROUTED"]
4400
3965
  enforcers:
4401
3966
  - {kind: runtime, id: hfs-coverage, at: scripts/checks/check-hfs-coverage.mjs}
3967
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
4402
3968
  - id: R248
4403
3969
  code: "ENV_REQUIRED_UNSET"
4404
3970
  editions: [lite, full]
4405
3971
  docs: [docs/host-secrets.md#r248]
4406
- proves:
4407
- - {path: tests/hfs/hfs-env-parity.spec.mjs, editions: [lite, full]}
3972
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
4408
3973
  exemplifiedBy:
4409
3974
  - {path: packages/hfs/templates/be/skeleton-lite/apps/api/src/api.env.ts, edition: lite}
4410
3975
  - {path: packages/hfs/templates/be/skeleton/apps/__app__/src/__app__.env.ts, edition: full}
4411
- - {path: tests/hfs/hfs-env-parity.spec.mjs, editions: [lite, full]}
4412
- witness:
4413
- - {path: tests/hfs/hfs-env-parity.spec.mjs, editions: [lite, full]}
3976
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
4414
3977
  law: "The environment keys a back end reads through its typed `EnvSource` (`<app>.env.ts` and the capability `*.config.ts` parse helpers, resolved by a static TypeScript walk that substitutes the literal arguments of a reader's call sites into a template key such as `${prefix}_WEBHOOK_SECRET`), the key names sealed in `.starcistacks/<env>/secrets/*.enc` and the keys the stack declares or passes (`KEYS.md`, `environment:`/`env:` entries, `runtimeSecrets`, `vars[].name`) are one set, compared by name only in both editions: a required read is sealed or declared (ENV_REQUIRED_UNSET), a sealed key is read or has a declared consumer (ENV_SEALED_UNREAD), one key lives in one member (ENV_DUPLICATE), no `NEXT_PUBLIC_*` key is sealed (ENV_PUBLIC_SEALED) and every `*.env.example` key is read (ENV_EXAMPLE_DRIFT)."
4415
3978
  kinds: [check]
4416
3979
  gates: [settle, land, ci]
4417
3980
  failureCodes: ["ENV_REQUIRED_UNSET", "ENV_SEALED_UNREAD", "ENV_DUPLICATE", "ENV_PUBLIC_SEALED", "ENV_EXAMPLE_DRIFT"]
4418
3981
  enforcers:
4419
3982
  - {kind: hfs, id: env-parity, at: scripts/hfs/rules/env-parity.mjs}
3983
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
4420
3984
  - id: R249
4421
3985
  code: "ENV_VALUE_SHAPE"
4422
3986
  editions: [lite, full]
4423
3987
  docs: [docs/host-secrets.md#r249]
4424
- proves:
4425
- - {path: tests/hfs/hfs-env-parity.spec.mjs, editions: [lite, full]}
3988
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
4426
3989
  exemplifiedBy:
4427
3990
  - {path: packages/hfs/templates/be/skeleton-lite/apps/api/src/api.env.ts, edition: lite}
4428
3991
  - {path: packages/hfs/templates/be/skeleton/apps/__app__/src/__app__.env.ts, edition: full}
4429
- - {path: tests/hfs/hfs-env-parity.spec.mjs, editions: [lite, full]}
4430
- witness:
4431
- - {path: tests/hfs/hfs-env-parity.spec.mjs, editions: [lite, full]}
3992
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
4432
3993
  law: "A stored environment value parses as the type its `EnvSource` reader declares (an integer, `true`/`false`, an absolute URL, a duration `250`/`30s`/`5m`/`2h`, a member of the declared enum, a nonempty string or secret): `starci app secret verify <env>` decrypts every member in memory and reports each key and its violated shape, never a value, and a concrete (non-placeholder) value of a `*.env.example` parses the same way."
4433
3994
  kinds: [check]
4434
3995
  gates: [settle, land, ci]
4435
3996
  failureCodes: ["ENV_VALUE_SHAPE"]
4436
3997
  enforcers:
4437
3998
  - {kind: hfs, id: env-value-shape, at: scripts/hfs/rules/env-value-shape.mjs}
3999
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
4438
4000
 
4439
4001
  - id: R250
4440
4002
  code: "HFS_HOST_CRON"
4441
4003
  editions: [lite, full]
4442
4004
  docs:
4443
4005
  - {path: docs/application-stacks.md#r250-deploy-scan, editions: [lite, full]}
4444
- proves:
4445
- - {path: tests/hfs/hfs-deploy-scan.spec.mjs, editions: [lite, full]}
4006
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
4446
4007
  exemplifiedBy:
4447
4008
  - {path: packages/hfs/templates/app/ci-workflows-lite/github/workflows/ci.yml, edition: lite}
4448
4009
  - {path: packages/hfs/templates/app/ci-workflows/github/workflows/ci.yml, edition: full}
4449
- - {path: tests/hfs/hfs-deploy-scan.spec.mjs, editions: [lite, full]}
4450
- witness:
4451
- - {path: tests/hfs/hfs-deploy-scan.spec.mjs, editions: [lite, full]}
4010
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
4452
4011
  law: "In lite and full apps, scheduled work belongs to the back-end scheduler, pgmq/pg_cron or a declared replicated-job. Deployment files, scripts, workflows, compose files and Dockerfiles install no host crontab, cron.d entry, systemd timer, @reboot job or at job; a workflow does not schedule app work. Docker compose up, down and pull run only against an explicitly dev environment. Deploy shell scripts delegate to docker, starci or the app CLI, and contain no node -e, psql, inline SQL or downloaded shell logic."
4453
4012
  kinds: [check]
4454
4013
  gates: [settle, land, ci]
4455
4014
  failureCodes: ["HFS_HOST_CRON", "HFS_DEPLOY_NO_LOGIC", "HFS_DEPLOY_COMPOSE_ON_VPS", "HFS_DEPLOY_SCHEDULER"]
4456
4015
  enforcers:
4457
4016
  - {kind: hfs, id: deploy-scan, at: scripts/hfs/rules/deploy-scan.mjs}
4017
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
4458
4018
  - id: R251
4459
4019
  code: "HFS_DEPLOY_WORKFLOW"
4460
4020
  editions: [lite, full]
4461
4021
  docs:
4462
4022
  - {path: docs/application-stacks.md#r251-deploy-workflow, editions: [lite, full]}
4463
- proves:
4464
- - {path: tests/hfs/hfs-deploy-workflow.spec.mjs, editions: [lite, full]}
4023
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
4465
4024
  exemplifiedBy:
4466
4025
  - {path: packages/hfs/templates/app/ci-workflows-lite/github/workflows/db-deploy.yml, edition: lite}
4467
4026
  - {path: packages/hfs/templates/app/ci-workflows/github/workflows/ci.yml, edition: full}
4468
- - {path: tests/hfs/hfs-deploy-workflow.spec.mjs, editions: [lite, full]}
4469
- witness:
4470
- - {path: tests/hfs/hfs-deploy-workflow.spec.mjs, editions: [lite, full]}
4027
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
4471
4028
  law: "In lite and full apps, deployment jobs declare a protected environment, explicit permissions and concurrency, materialize sealed secrets through SOPS_AGE_KEY or starci app secret materialize, and reference only the age key and transport SSH key/known_hosts secrets. They never embed a dotenv blob or write a dotenv file. Every remote workflow action uses a 40-hex commit SHA; installed tools are checksum or digest verified, or supplied by a pinned action. App workflows start only on release tags [v*] or workflow_dispatch, never on a branch push."
4472
4029
  kinds: [check]
4473
4030
  gates: [settle, land, ci]
4474
4031
  failureCodes: ["HFS_DEPLOY_WORKFLOW", "HFS_WORKFLOW_PIN", "HFS_CI_TOOL_INSTALL", "HFS_APP_WORKFLOW_TRIGGER"]
4475
4032
  enforcers:
4476
4033
  - {kind: hfs, id: deploy-workflow, at: scripts/hfs/rules/deploy-workflow.mjs}
4034
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
4477
4035
  - id: R252
4478
4036
  code: "HFS_SCRIPT_PLAINTEXT_LOAD"
4479
4037
  editions: [lite, full]
4480
4038
  docs:
4481
4039
  - {path: docs/application-stacks.md#r252-script-hygiene, editions: [lite, full]}
4482
- proves:
4483
- - {path: tests/hfs/hfs-script-hygiene.spec.mjs, editions: [lite, full]}
4040
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
4484
4041
  exemplifiedBy:
4485
4042
  - {path: packages/hfs/templates/app/ci-workflows-lite/github/workflows/db-deploy.yml, edition: lite}
4486
4043
  - {path: packages/hfs/templates/app/ci-workflows/github/workflows/ci.yml, edition: full}
4487
- - {path: tests/hfs/hfs-script-hygiene.spec.mjs, editions: [lite, full]}
4488
- witness:
4489
- - {path: tests/hfs/hfs-script-hygiene.spec.mjs, editions: [lite, full]}
4044
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
4490
4045
  law: "In lite and full apps, executable scripts and workflow commands never load plaintext secrets.env, secret.env, .env secret files or a home-directory credential file, enable shell xtrace or request --reveal. Service-role references belong only to the back-end Supabase integration; deployment scripts and source outside that integration never use the service role. Scanners inspect source references and report paths without reading secret files or printing their values."
4491
4046
  kinds: [check]
4492
4047
  gates: [settle, land, ci]
4493
4048
  failureCodes: ["HFS_SCRIPT_PLAINTEXT_LOAD", "HFS_SCRIPT_XTRACE", "HFS_SERVICE_ROLE_SCOPE"]
4494
4049
  enforcers:
4495
4050
  - {kind: hfs, id: script-hygiene, at: scripts/hfs/rules/script-hygiene.mjs}
4051
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
4496
4052
  - id: R253
4497
4053
  code: "HFS_AGE_KEY_CUSTODY"
4498
4054
  editions: [lite, full]
4499
4055
  docs: [docs/host-secrets.md#application-secret-rules]
4500
- proves:
4501
- - {path: tests/hfs/hfs-secret-custody.spec.mjs, editions: [lite, full]}
4056
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
4502
4057
  exemplifiedBy:
4503
4058
  - {path: packages/hfs/templates/be/skeleton/src/modules/platform/config/env-source.config.ts, editions: [lite, full]}
4504
4059
  - {path: packages/hfs/templates/be/skeleton/src/modules/platform/http-security/origin.guard.ts, editions: [lite, full]}
4505
4060
  - {path: packages/hfs/templates/be/skeleton/src/modules/platform/http-security/webhook-signature.service.ts, editions: [lite, full]}
4506
- - {path: tests/hfs/hfs-secret-custody.spec.mjs, editions: [lite, full]}
4507
- witness:
4508
- - {path: tests/hfs/hfs-secret-custody.spec.mjs, editions: [lite, full]}
4061
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
4509
4062
  law: "The age identity that seals and opens an app's `.starcistacks/<env>/secrets/*.enc` is host-local custody only: it lives in the untracked `.claude/secret.env` (as `SOPS_AGE_KEY`, which wins over the legacy `keys.txt` and is handed to sops through the `SOPS_AGE_KEY` child environment, never as an argument and never printed) or in the sops config dir's `keys.txt`; a tracked `.claude/secret.env`, `keys.txt` or `*.agekey` is the identity committed. The three files the secret custody depends on - `src/modules/platform/config/env-source.config.ts`, `src/modules/platform/http-security/origin.guard.ts` and `src/modules/platform/http-security/webhook-signature.service.ts` - are hash-sensitive canon, not files to edit: their bytes equal the `be/skeleton` template they were scaffolded from, judged by sha256."
4510
4063
  kinds: [check]
4511
4064
  gates: [settle, land, ci]
@@ -4513,57 +4066,45 @@ rules:
4513
4066
  enforcers:
4514
4067
  - {kind: hfs, id: secret-age-key-custody, at: scripts/hfs/rules/secrets.mjs}
4515
4068
  - {kind: hfs, id: canon-copy-drift, at: scripts/hfs/rules/canon-copy-drift.mjs}
4069
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
4516
4070
  - id: R254
4517
4071
  code: "DB_BE_ONLY_ACCESS"
4518
4072
  editions: [lite]
4519
4073
  editionWhy: "owner:lite-backing-services makes Supabase lite's database backing; these SQL access requirements apply to that backing."
4520
4074
  docs: [docs/microservices.md#r254]
4521
4075
  templateNa: "Browser grants, policies and publication membership belong to product-authored Supabase migrations, rather than a scaffolded SQL surface."
4522
- exemplifiedBy:
4523
- - {path: tests/hfs/hfs-database-access.spec.mjs, edition: lite, codes: [DB_BE_ONLY_ACCESS, DB_REALTIME_UNLISTED]}
4524
- proves:
4525
- - {path: tests/hfs/hfs-database-access.spec.mjs, edition: lite, codes: [DB_BE_ONLY_ACCESS, DB_REALTIME_UNLISTED]}
4526
- witness:
4527
- - {path: tests/hfs/hfs-database-access.spec.mjs, edition: lite, codes: [DB_BE_ONLY_ACCESS, DB_REALTIME_UNLISTED]}
4076
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
4077
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
4528
4078
  law: "In lite and full, browser data access stays closed on exposed schemas: authenticated receives neither table or sequence privileges nor data policies, and anon reads only through a select policy named *_public_read. A table listed in hfs.json supabase.directAccess is an explicit exception. A table joins supabase_realtime only when that direct access is declared. The front end uses Supabase for Auth and reaches product data through the back end."
4529
4079
  kinds: [check]
4530
4080
  gates: [settle, land, ci]
4531
4081
  failureCodes: ["DB_BE_ONLY_ACCESS", "DB_REALTIME_UNLISTED"]
4532
4082
  enforcers:
4533
4083
  - {kind: hfs, id: db-be-only-access, at: scripts/hfs/rules/database-access.mjs}
4084
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
4534
4085
  - id: R255
4535
4086
  code: "DB_APP_ROLE"
4536
4087
  editions: [lite]
4537
4088
  editionWhy: "owner:lite-backing-services makes Supabase lite's database backing; application-role and forced-RLS requirements apply to that backing."
4538
4089
  docs: [docs/microservices.md#r255]
4539
4090
  templateNa: "Application roles and table ownership are product-authored Supabase migration content, rather than a scaffolded SQL surface."
4540
- exemplifiedBy:
4541
- - {path: tests/hfs/hfs-database-access.spec.mjs, edition: lite, codes: [DB_APP_ROLE, DB_FORCE_RLS_DEFAULT]}
4542
- proves:
4543
- - {path: tests/hfs/hfs-database-access.spec.mjs, edition: lite, codes: [DB_APP_ROLE, DB_FORCE_RLS_DEFAULT]}
4544
- witness:
4545
- - {path: tests/hfs/hfs-database-access.spec.mjs, edition: lite, codes: [DB_APP_ROLE, DB_FORCE_RLS_DEFAULT]}
4091
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
4092
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
4546
4093
  law: "The declared back-end database role (hfs.json supabase.appRole, app_be by default) has only the privileges it needs: role declarations refuse superuser and bypassrls, require noinherit and nobypassrls, and never grant all schema or table privileges. Tables owned by that role enable and force row level security by default; a forceRls exemption identifies the table and carries a nonempty reason. This applies to every edition that declares Supabase."
4547
4094
  kinds: [check]
4548
4095
  gates: [settle, land, ci]
4549
4096
  failureCodes: ["DB_APP_ROLE", "DB_FORCE_RLS_DEFAULT"]
4550
4097
  enforcers:
4551
4098
  - {kind: hfs, id: db-app-role, at: scripts/hfs/rules/database-access.mjs}
4099
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
4552
4100
  - id: R256
4553
4101
  code: "DB_POLICY_TAUTOLOGY"
4554
4102
  editions: [lite]
4555
4103
  editionWhy: "owner:lite-backing-services makes Supabase lite's database backing; access-policy, view, definer and storage SQL requirements apply to that backing."
4556
4104
  docs: [docs/microservices.md#r256]
4557
4105
  templateNa: "Access policies, views, definers and storage policies belong to product-authored Supabase migrations, rather than a scaffolded SQL surface."
4558
- exemplifiedBy:
4559
- - {path: tests/hfs/hfs-database-access.spec.mjs, edition: lite, codes: [DB_POLICY_TAUTOLOGY, DB_VIEW_UNSAFE, DB_STORAGE_PREFIX]}
4560
- - {path: tests/hfs/hfs-database-rules.spec.mjs, edition: lite, codes: [DB_DEFINER_REVOKE]}
4561
- proves:
4562
- - {path: tests/hfs/hfs-database-access.spec.mjs, edition: lite, codes: [DB_POLICY_TAUTOLOGY, DB_VIEW_UNSAFE, DB_STORAGE_PREFIX]}
4563
- - {path: tests/hfs/hfs-database-rules.spec.mjs, edition: lite, codes: [DB_DEFINER_REVOKE]}
4564
- witness:
4565
- - {path: tests/hfs/hfs-database-access.spec.mjs, edition: lite, codes: [DB_POLICY_TAUTOLOGY, DB_VIEW_UNSAFE, DB_STORAGE_PREFIX]}
4566
- - {path: tests/hfs/hfs-database-rules.spec.mjs, edition: lite, codes: [DB_DEFINER_REVOKE]}
4106
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
4107
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
4567
4108
  law: "Exposed database objects keep their access boundaries in lite and full. Policies refuse tautological true, is-not-null and self-equality predicates; policies for browser roles prove a principal predicate. An exposed view or materialized view uses security_invoker or the migration set ends with access revoked from anon and authenticated. Disabling RLS or moving a table into an exposed schema preserves the R214 RLS obligation. A security definer declaration, including alter function, preserves R215 safety checks and the migration set ends with execute revoked from authenticated when exposed, in addition to R215's public and anon revocation. A storage.objects policy scopes an ownership prefix to the principal unless its bucket id ends _public."
4568
4109
  kinds: [check]
4569
4110
  gates: [settle, land, ci]
@@ -4572,54 +4113,45 @@ rules:
4572
4113
  - {kind: hfs, id: db-policy-hardening, at: scripts/hfs/rules/database-access.mjs}
4573
4114
  - {kind: hfs, id: db-definer-revoke, at: scripts/hfs/rules/database-plpgsql.mjs}
4574
4115
 
4116
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
4575
4117
  - id: R257
4576
4118
  code: "DB_BASELINE_SHAPE"
4577
4119
  editions: [lite]
4578
4120
  editionWhy: "owner:lite-backing-services makes Supabase lite's database backing; baseline and archive requirements apply to its migration history."
4579
4121
  docs: [docs/microservices.md#r257]
4580
4122
  templateNa: "A baseline is derived from a product's existing Supabase migration history and cannot be supplied by a scaffold template."
4581
- exemplifiedBy:
4582
- - {path: tests/hfs/hfs-database-baseline.spec.mjs, edition: lite, codes: [DB_BASELINE_SHAPE, DB_ARCHIVE_MUTATED]}
4583
- proves:
4584
- - {path: tests/hfs/hfs-database-baseline.spec.mjs, edition: lite, codes: [DB_BASELINE_SHAPE, DB_ARCHIVE_MUTATED]}
4585
- witness:
4586
- - {path: tests/hfs/hfs-database-baseline.spec.mjs, edition: lite, codes: [DB_BASELINE_SHAPE, DB_ARCHIVE_MUTATED]}
4123
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
4124
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
4587
4125
  law: "An archived migration chain has exactly one active baseline marked -- starci:baseline <archived-last-stamp>, with a later valid stamp or an explicit restamp. Archived files only need the digits-stamp_name.sql shape, whatever the stamp value (they are immutable history and never applied); the baseline and active migrations keep the real-instant stamp check. Archive contents are immutable against repository history; an active migration enters the archive unchanged only in the same diff that adds the replacement baseline. The app db baseline, restamp and plan verbs are read-only unless --apply is explicit."
4588
4126
  kinds: [check]
4589
4127
  gates: [settle, land, ci]
4590
4128
  failureCodes: ["DB_BASELINE_SHAPE", "DB_ARCHIVE_MUTATED"]
4591
4129
  enforcers:
4592
4130
  - {kind: hfs, id: db-baseline-shape, at: scripts/hfs/rules/database-baseline.mjs}
4131
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
4593
4132
  - id: R258
4594
4133
  code: "DB_PGMQ_DECLARED"
4595
4134
  editions: [lite]
4596
4135
  editionWhy: "owner:lite-backing-services makes Supabase lite's database backing; pgmq and pg_cron ownership requirements apply to that backing."
4597
4136
  docs: [docs/microservices.md#r258]
4598
4137
  templateNa: "Queue declarations and enqueue-only cron commands depend on product-owned work and are authored in its Supabase migrations."
4599
- exemplifiedBy:
4600
- - {path: tests/hfs/hfs-database-queues.spec.mjs, edition: lite, codes: [DB_PGMQ_DECLARED, DB_CRON_OWNED]}
4601
- proves:
4602
- - {path: tests/hfs/hfs-database-queues.spec.mjs, edition: lite, codes: [DB_PGMQ_DECLARED, DB_CRON_OWNED]}
4603
- witness:
4604
- - {path: tests/hfs/hfs-database-queues.spec.mjs, edition: lite, codes: [DB_PGMQ_DECLARED, DB_CRON_OWNED]}
4138
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
4139
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
4605
4140
  law: "DB_QUEUE_CRON: every pgmq queue constant has an active migration creating the queue and every created queue has a constant. Queue objects are granted only to the application role. A uniquely named pg_cron job belongs to a migration and only enqueues to an existing queue directly or through one enqueue-only *_tick function; it executes no business DML or HTTP request and shares no tick with an app scheduler. Removing a tick unschedules its job."
4606
4141
  kinds: [check]
4607
4142
  gates: [settle, land, ci]
4608
4143
  failureCodes: ["DB_PGMQ_DECLARED", "DB_CRON_OWNED"]
4609
4144
  enforcers:
4610
4145
  - {kind: hfs, id: db-queue-cron, at: scripts/hfs/rules/database-queues.mjs}
4146
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
4611
4147
  - id: R259
4612
4148
  code: "DB_EXTENSION_ALLOWED"
4613
4149
  editions: [lite]
4614
4150
  editionWhy: "owner:lite-backing-services makes Supabase lite's database backing; database configuration, extension, migration and seed requirements apply to that backing."
4615
4151
  docs: [docs/microservices.md#r259]
4616
4152
  templateNa: "Extension use, contract migrations, vault operations and seed literals are product-authored Supabase content, rather than a scaffolded SQL surface."
4617
- exemplifiedBy:
4618
- - {path: tests/hfs/hfs-database-config.spec.mjs, edition: lite, codes: [DB_EXTENSION_ALLOWED, DB_API_EXPOSED, DB_MIGRATION_DESTRUCTIVE, HFS_SEED_PII, DB_VAULT_WRITE]}
4619
- proves:
4620
- - {path: tests/hfs/hfs-database-config.spec.mjs, edition: lite, codes: [DB_EXTENSION_ALLOWED, DB_API_EXPOSED, DB_MIGRATION_DESTRUCTIVE, HFS_SEED_PII, DB_VAULT_WRITE]}
4621
- witness:
4622
- - {path: tests/hfs/hfs-database-config.spec.mjs, edition: lite, codes: [DB_EXTENSION_ALLOWED, DB_API_EXPOSED, DB_MIGRATION_DESTRUCTIVE, HFS_SEED_PII, DB_VAULT_WRITE]}
4153
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
4154
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
4623
4155
  law: "DB_CONFIG_EXT: extensions belong to the database allowlist, vault writes and migration role passwords are refused, pgmq schemas are never exposed through the API, and lite API access is closed except for explicit public-read policies. R216 DB_CONFIG_POLICY also checks API schema allowlisting, existing seed paths, anonymous sign-ins, disabled edge runtime, bounded storage uploads and the database major-version pin. Destructive DDL belongs only to *_contract_* migrations whose targets are no longer referenced by back-end SQL or entities. Seeds contain no real email or phone literals."
4624
4156
  kinds: [check]
4625
4157
  gates: [settle, land, ci]
@@ -4628,6 +4160,7 @@ rules:
4628
4160
  - {kind: hfs, id: db-config-ext, at: scripts/hfs/rules/database-config.mjs}
4629
4161
  - {kind: hfs, id: db-migration-destructive, at: scripts/hfs/rules/database-migrations.mjs}
4630
4162
 
4163
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
4631
4164
  - id: R260
4632
4165
  code: "BE_JWT_ALG_PINNED"
4633
4166
  law: "A back-end JWT verifier pins a nonempty literal subset of ES256, RS256 and EdDSA and obtains its issuer from configuration. A Supabase principal is built only after verification and rejection of every role other than authenticated, in lite and full."
@@ -4647,10 +4180,9 @@ rules:
4647
4180
  - {"path":"packages/eslint/be/jwt-alg.spec.mjs","edition":"full","codes":["BE_JWT_ALG_PINNED"]}
4648
4181
  proves:
4649
4182
  - "packages/eslint/be/jwt-alg.spec.mjs"
4650
- - "tests/hfs-architecture/architecture-jwt-policy.spec.mjs"
4651
4183
  witness:
4652
4184
  - {"path":"packages/eslint/be/jwt-alg.spec.mjs","editions":["lite","full"],"codes":["BE_JWT_ALG_PINNED"]}
4653
- - {"path":"tests/hfs-architecture/architecture-jwt-policy.spec.mjs","editions":["lite","full"],"codes":["BE_JWT_ALG_PINNED"]}
4185
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; the package specs named in proves keep proving the lint enforcers, the runtime-code enforcers lost their deleted runtime spec"
4654
4186
  - id: R261
4655
4187
  code: "BE_CORS_ALLOWLIST"
4656
4188
  law: "Every back-end API declares an exact browser origin allowlist, applies the platform/http-security response middleware, disables x-powered-by and states a nonnegative integer trust proxy hop count. Wildcard or missing CORS and blanket proxy trust are refused in lite and full."
@@ -4692,14 +4224,12 @@ rules:
4692
4224
  - {"path":"packages/hfs/templates/be/skeleton/src/modules/platform/http-security/readiness.service.ts","editions":["lite","full"]}
4693
4225
  - {"path":"packages/hfs/templates/be/image/api/Dockerfile","editions":["lite","full"]}
4694
4226
  - {"path":"packages/eslint/be/health-ready.spec.mjs","editions":["lite","full"],"codes":["BE_READY_REAL","BE_HEALTH_SIGNALS"]}
4695
- - {"path":"tests/hfs-proofs/be-docker-health.spec.mjs","editions":["lite","full"],"codes":["HFS_DOCKER_HEALTHCHECK_FAKE"]}
4696
4227
  proves:
4697
4228
  - {"path":"packages/eslint/be/health-ready.spec.mjs","editions":["lite","full"],"codes":["BE_READY_REAL","BE_HEALTH_SIGNALS"]}
4698
- - {"path":"tests/hfs-proofs/be-docker-health.spec.mjs","editions":["lite","full"],"codes":["HFS_DOCKER_HEALTHCHECK_FAKE"]}
4699
4229
  witness:
4700
4230
  - {"path":"packages/eslint/be/health-ready.spec.mjs","editions":["lite","full"],"codes":["BE_READY_REAL","BE_HEALTH_SIGNALS"]}
4701
- - {"path":"tests/hfs-proofs/be-docker-health.spec.mjs","editions":["lite","full"],"codes":["HFS_DOCKER_HEALTHCHECK_FAKE"]}
4702
4231
 
4232
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; the package specs named in proves keep proving the lint enforcers, the runtime-code enforcers lost their deleted runtime spec"
4703
4233
  - id: R263
4704
4234
  code: "BE_WEBHOOK_SCOPE"
4705
4235
  amendedBy: [owner:oauth-redirect-not-webhook, owner:webhook-receipt-port]
@@ -4787,17 +4317,10 @@ rules:
4787
4317
  exemplifiedBy:
4788
4318
  - {"path":"packages/hfs/templates/app/skeleton-lite/.starcistacks","edition":"lite"}
4789
4319
  - {"path":"packages/hfs/templates/app/skeleton/.starcistacks","edition":"full"}
4790
- - {"path":"tests/hfs/hfs-stacks-swarm.spec.mjs","edition":"lite"}
4791
- - {"path":"tests/fixtures/hfs-stacks-full/passing.json","edition":"full"}
4792
- - {"path":"tests/fixtures/hfs-stacks-full/violating.json","edition":"full"}
4793
- proves:
4794
- - {path: tests/hfs/hfs-stacks-full-fixtures.spec.mjs, edition: full}
4795
- - "tests/hfs/hfs-stacks-swarm.spec.mjs"
4796
- - "tests/hfs/hfs-stacks-ingress.spec.mjs"
4797
- witness:
4798
- - {"path":"tests/hfs/hfs-stacks-swarm.spec.mjs","edition":"lite"}
4799
- - {"path":"tests/fixtures/hfs-stacks-full/violating.json","edition":"full"}
4320
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
4800
4321
 
4322
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
4323
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
4801
4324
  - id: R267
4802
4325
  code: "STACKS_RELEASE_UNDECLARED"
4803
4326
  law: "Each Swarm environment declares an immutable images lock, active and previous release pointers and nonempty health assertions. Every stateful component and declared managed backing dependency declares backup target, retention and owner with a tracked restore proof. The rendered deployment model must be available and valid; an unavailable model is a finding, never a skipped check."
@@ -4812,18 +4335,10 @@ rules:
4812
4335
  exemplifiedBy:
4813
4336
  - {"path":"packages/hfs/templates/app/skeleton-lite/.starcistacks","edition":"lite"}
4814
4337
  - {"path":"packages/hfs/templates/app/skeleton/.starcistacks","edition":"full"}
4815
- - {"path":"tests/hfs/hfs-stacks-release.spec.mjs","edition":"lite"}
4816
- - {"path":"tests/fixtures/hfs-stacks-full/passing.json","edition":"full"}
4817
- - {"path":"tests/fixtures/hfs-stacks-full/violating.json","edition":"full"}
4818
- - {"path":"tests/fixtures/hfs-stacks-full/model-unavailable.json","edition":"full"}
4819
- proves:
4820
- - {path: tests/hfs/hfs-stacks-full-fixtures.spec.mjs, edition: full}
4821
- - "tests/hfs/hfs-stacks-release.spec.mjs"
4822
- witness:
4823
- - {"path":"tests/hfs/hfs-stacks-release.spec.mjs","edition":"lite"}
4824
- - {"path":"tests/fixtures/hfs-stacks-full/violating.json","edition":"full"}
4825
- - {"path":"tests/fixtures/hfs-stacks-full/model-unavailable.json","edition":"full"}
4338
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
4826
4339
 
4340
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
4341
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
4827
4342
  - id: R268
4828
4343
  code: "HFS_SCHEDULE_UNDECLARED"
4829
4344
  law: "Every app scheduler, active pg_cron schedule, selected scheduled component and rendered replicated-job has a matching top-level jobs declaration with its schedule and invocation of a named back-end CLI action. A rendered replicated-job uses the same declared CLI invocation; inline JavaScript and shell chaining are refused. Scheduling is app-owned; a manifest entry never grants host crontab or deployment business logic."
@@ -4838,16 +4353,10 @@ rules:
4838
4353
  exemplifiedBy:
4839
4354
  - {"path":"packages/hfs/templates/app/skeleton-lite/.starcistacks/application-stacks.yaml","edition":"lite"}
4840
4355
  - {"path":"packages/hfs/templates/app/skeleton/.starcistacks/application-stacks.yaml","edition":"full"}
4841
- - {"path":"tests/hfs/hfs-stacks-release.spec.mjs","edition":"lite"}
4842
- - {"path":"tests/fixtures/hfs-stacks-full/passing.json","edition":"full"}
4843
- - {"path":"tests/fixtures/hfs-stacks-full/violating.json","edition":"full"}
4844
- proves:
4845
- - {path: tests/hfs/hfs-stacks-full-fixtures.spec.mjs, edition: full}
4846
- - "tests/hfs/hfs-stacks-release.spec.mjs"
4847
- witness:
4848
- - {"path":"tests/hfs/hfs-stacks-release.spec.mjs","edition":"lite"}
4849
- - {"path":"tests/fixtures/hfs-stacks-full/violating.json","edition":"full"}
4356
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
4850
4357
 
4358
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
4359
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
4851
4360
  - id: R269
4852
4361
  code: "HFS_DEPENDABOT_MISSING"
4853
4362
  law: "In lite and full apps, .github/dependabot.yml declares scheduled npm, github-actions and docker updates. The CI workflow runs npm audit --omit=dev as an enabled gate whose failure stops the job. The images workflow generates an SBOM and provenance for release images; a disabled step, comment or label is not evidence."
@@ -4860,20 +4369,16 @@ rules:
4860
4369
  docs:
4861
4370
  - "docs/application-stacks.md#r269"
4862
4371
  exemplifiedBy:
4863
- - {"path":"tests/hfs/hfs-supply-chain.spec.mjs","edition":"lite"}
4864
- - {"path":"tests/hfs/hfs-supply-chain.spec.mjs","edition":"full"}
4865
4372
  - {"path":"packages/hfs/templates/app/skeleton-lite/.github/dependabot.yml","edition":"lite"}
4866
4373
  - {"path":"packages/hfs/templates/app/ci-workflows-lite/github/workflows/ci.yml","edition":"lite"}
4867
4374
  - {"path":"packages/hfs/templates/app/ci-workflows-lite/github/workflows/images.yml","edition":"lite"}
4868
4375
  - {"path":"packages/hfs/templates/app/skeleton/.github/dependabot.yml","edition":"full"}
4869
4376
  - {"path":"packages/hfs/templates/app/ci-workflows/github/workflows/ci.yml","edition":"full"}
4870
4377
  - {"path":"packages/hfs/templates/app/ci-workflows/github/workflows/images.yml","edition":"full"}
4871
- proves:
4872
- - {"path":"tests/hfs/hfs-supply-chain.spec.mjs","editions":["lite","full"]}
4873
- witness:
4874
- - {"path":"tests/hfs/hfs-supply-chain.spec.mjs","edition":"lite"}
4875
- - {"path":"tests/hfs/hfs-supply-chain.spec.mjs","edition":"full"}
4378
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
4876
4379
 
4380
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
4381
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
4877
4382
  - id: R270
4878
4383
  code: "HFS_DOC_PATH_MISSING"
4879
4384
  law: "In lite and full products, READMEs, docs and stack READMEs cite existing repository paths, npm scripts, starci app verbs, environment keys declared by typed readers or KEYS.md, and rule ids from the HFS catalog. Documentation changes with the product it describes."
@@ -4886,15 +4391,11 @@ rules:
4886
4391
  docs:
4887
4392
  - "docs/quality-bar.md#r270"
4888
4393
  exemplifiedBy:
4889
- - {"path":"tests/hfs/hfs-doc-fresh.spec.mjs","edition":"lite"}
4890
- - {"path":"tests/hfs/hfs-doc-fresh.spec.mjs","edition":"full"}
4891
4394
  - {"path":"packages/hfs/templates/app/skeleton-lite/README.md","edition":"lite"}
4892
4395
  - {"path":"packages/hfs/templates/app/skeleton/README.md","edition":"full"}
4893
- proves:
4894
- - {"path":"tests/hfs/hfs-doc-fresh.spec.mjs","editions":["lite","full"]}
4895
- witness:
4896
- - {"path":"tests/hfs/hfs-doc-fresh.spec.mjs","edition":"lite"}
4897
- - {"path":"tests/hfs/hfs-doc-fresh.spec.mjs","edition":"full"}
4396
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
4397
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
4398
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
4898
4399
  - id: R271
4899
4400
  code: "HFS_RELEASE_TAG_MISMATCH"
4900
4401
  law: "A lite or full product release uses a v-prefixed semantic version tag equal to package.json version; images.yml publishes images under that release tag, and every database deployment refuses a non-tag ref before migration."
@@ -4907,17 +4408,13 @@ rules:
4907
4408
  docs:
4908
4409
  - "docs/application-stacks.md#r271"
4909
4410
  exemplifiedBy:
4910
- - {"path":"tests/hfs/hfs-release-provenance.spec.mjs","edition":"lite"}
4911
- - {"path":"tests/hfs/hfs-release-provenance.spec.mjs","edition":"full"}
4912
4411
  - {"path":"packages/hfs/templates/app/ci-workflows-lite/github/workflows/images.yml","edition":"lite"}
4913
4412
  - {"path":"packages/hfs/templates/app/ci-workflows/github/workflows/images.yml","edition":"full"}
4914
4413
  - {"path":"packages/hfs/templates/app/ci-workflows-lite/github/workflows/db-deploy.yml","edition":"lite"}
4915
- proves:
4916
- - {"path":"tests/hfs/hfs-release-provenance.spec.mjs","editions":["lite","full"]}
4917
- witness:
4918
- - {"path":"tests/hfs/hfs-release-provenance.spec.mjs","edition":"lite"}
4919
- - {"path":"tests/hfs/hfs-release-provenance.spec.mjs","edition":"full"}
4414
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
4920
4415
 
4416
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
4417
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
4921
4418
  - id: R272
4922
4419
  code: "BE_APP_BOOT_PROOF_MISSING"
4923
4420
  law: "Every lite back-end app proves its real Nest AppModule composition by compiling the dependency graph with explicit fixture options and infrastructure doubles; unresolved providers, circular dependencies and a missing or failed proof are refused. The app check wiring verb uses the same proof. Full retains its existing e2e boot proof."
@@ -4931,13 +4428,11 @@ rules:
4931
4428
  docs:
4932
4429
  - "docs/quality-bar.md#r272"
4933
4430
  exemplifiedBy:
4934
- - {"path":"tests/hfs/hfs-boot-proof.spec.mjs","edition":"lite"}
4935
4431
  - {"path":"packages/hfs/templates/be/skeleton-lite/src/tests/fixtures/builders/api.builder.ts","edition":"lite"}
4936
4432
  - {"path":"examples/lite-app/be/src/tests/fixtures/builders/api.builder.ts","edition":"lite"}
4937
- proves:
4938
- - {"path":"tests/hfs/hfs-boot-proof.spec.mjs","editions":["lite"]}
4939
- witness:
4940
- - {"path":"tests/hfs/hfs-boot-proof.spec.mjs","edition":"lite"}
4433
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
4434
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
4435
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
4941
4436
  - id: R273
4942
4437
  code: "HFS_COVERAGE_BELOW"
4943
4438
  law: "An app check supplied with a coverage-from lcov report proves 100 percent lines, functions and branches per tracked back-end logic file in the edition's slot-derived measured scope; a missing source record or unavailable metric is refused. The unit runner also enforces statement coverage. Reports list the measured scope and the source files outside it, including features, cli and webhooks."
@@ -4950,17 +4445,12 @@ rules:
4950
4445
  docs:
4951
4446
  - "docs/quality-bar.md#r273"
4952
4447
  exemplifiedBy:
4953
- - {"path":"tests/hfs/hfs-coverage-below.spec.mjs","edition":"lite"}
4954
- - {"path":"tests/hfs/hfs-coverage-below.spec.mjs","edition":"full"}
4955
4448
  - {"path":"packages/hfs/templates/be/tool-config/jest.config.js","editions":["lite","full"]}
4956
4449
  - {"path":"examples/lite-app/be/jest.config.js","edition":"lite"}
4957
4450
  - {"path":"examples/ecommerce-app/be/jest.config.js","edition":"full"}
4958
- proves:
4959
- - {"path":"tests/hfs/hfs-coverage-below.spec.mjs","editions":["lite","full"]}
4960
- witness:
4961
- - {"path":"tests/hfs/hfs-coverage-below.spec.mjs","edition":"lite"}
4962
- - {"path":"tests/hfs/hfs-coverage-below.spec.mjs","edition":"full"}
4451
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
4963
4452
 
4453
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
4964
4454
  - id: R274
4965
4455
  code: "RT_RULING_STALE_CITE"
4966
4456
  law: "Live prose, source comments and spec titles cite current owner rulings using ruling:R212/case-4 or a stable owner id. A superseded or amended ruling needs its live successor in the same paragraph; staleWhen statements outside historical case text and CHANGELOGs are refused, and a bare owner ruling date must match a catalog case or owner ruling."
@@ -4974,15 +4464,10 @@ rules:
4974
4464
  templateNa: "Runtime owner-ruling citation metadata has no product scaffold surface; passing and stale authored-source fixtures live in the ruling-cites spec."
4975
4465
  docs:
4976
4466
  - "docs/quality-bar.md#r274"
4977
- exemplifiedBy:
4978
- - {"path":"tests/checks/ruling-cites.spec.mjs","edition":"lite"}
4979
- - {"path":"tests/checks/ruling-cites.spec.mjs","edition":"full"}
4980
- proves:
4981
- - {"path":"tests/checks/ruling-cites.spec.mjs","editions":["lite","full"]}
4982
- witness:
4983
- - {"path":"tests/checks/ruling-cites.spec.mjs","edition":"lite"}
4984
- - {"path":"tests/checks/ruling-cites.spec.mjs","edition":"full"}
4467
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
4985
4468
 
4469
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
4470
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
4986
4471
  - id: R275
4987
4472
  code: "STACKS_INGRESS_UNDECLARED"
4988
4473
  law: "Every Swarm environment declares its one ingress component and hosts. The named component has role ingress and a digest-pinned supported ingress image; Traefik and Caddy are both accepted without a preferred product. An absent declaration, unknown component or unsupported image is refused."
@@ -4997,16 +4482,10 @@ rules:
4997
4482
  exemplifiedBy:
4998
4483
  - {"path":"packages/hfs/templates/app/skeleton-lite/.starcistacks","edition":"lite"}
4999
4484
  - {"path":"packages/hfs/templates/app/skeleton/.starcistacks","edition":"full"}
5000
- - {"path":"tests/hfs/hfs-stacks-ingress.spec.mjs","edition":"lite"}
5001
- - {"path":"tests/fixtures/hfs-stacks-full/passing.json","edition":"full"}
5002
- - {"path":"tests/fixtures/hfs-stacks-full/violating.json","edition":"full"}
5003
- proves:
5004
- - {path: tests/hfs/hfs-stacks-full-fixtures.spec.mjs, edition: full}
5005
- - "tests/hfs/hfs-stacks-ingress.spec.mjs"
5006
- witness:
5007
- - {"path":"tests/hfs/hfs-stacks-ingress.spec.mjs","edition":"lite"}
5008
- - {"path":"tests/fixtures/hfs-stacks-full/violating.json","edition":"full"}
4485
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
5009
4486
 
4487
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
4488
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
5010
4489
  - id: R276
5011
4490
  code: "STACKS_LITE_SELFHOSTED_DB"
5012
4491
  law: "Lite uses managed Supabase and runs no PostgreSQL, Redis or MongoDB backing image. A sidecar that needs a database uses SQLite on a named persistent volume declared by its component and mounted in the rendered model; a sidecar requiring another database is refused. Full retains its declared backing topology."
@@ -5021,12 +4500,10 @@ rules:
5021
4500
  - "docs/application-stacks.md#r276"
5022
4501
  exemplifiedBy:
5023
4502
  - {"path":"packages/hfs/templates/app/skeleton-lite/.starcistacks","edition":"lite"}
5024
- - {"path":"tests/hfs/hfs-stacks-lite-backing.spec.mjs","edition":"lite"}
5025
- proves:
5026
- - "tests/hfs/hfs-stacks-lite-backing.spec.mjs"
5027
- witness:
5028
- - {"path":"tests/hfs/hfs-stacks-lite-backing.spec.mjs","edition":"lite"}
4503
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
5029
4504
 
4505
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
4506
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
5030
4507
  - id: R277
5031
4508
  code: "HFS_SECRET_PLAINTEXT_FILE"
5032
4509
  law: "In every edition the only custody a tracked secret may take is a sops envelope at `.starcistacks/<env>/secrets/**.enc`. A tracked plaintext secret file is refused by being: `secrets.env` or `.secret(s).env` at any depth, a non-dot `*.env` or `*.env.<profile>` holding secret keys (deploy-side dotenv included), and a plaintext member of a `secrets/` directory; a sealed `.enc` outside the one sealed home is refused too (for lite it is already `HFS_LITE_SECRET_CUSTODY`)."
@@ -5039,16 +4516,10 @@ rules:
5039
4516
  codeEditions: {HFS_SECRET_OUTSIDE_ENC: [full]}
5040
4517
  docs: [docs/host-secrets.md#r277]
5041
4518
  templateNa: "Sealed secret members are owner-created through starci app secret set after custody initialization; the scaffolder does not generate committed secret material."
5042
- exemplifiedBy:
5043
- - {path: tests/hfs/hfs-secret-custody.spec.mjs, editions: [lite, full], codes: [HFS_SECRET_PLAINTEXT_FILE]}
5044
- - {path: tests/hfs/hfs-secret-custody.spec.mjs, editions: [full], codes: [HFS_SECRET_OUTSIDE_ENC]}
5045
- proves:
5046
- - {path: tests/hfs/hfs-secret-custody.spec.mjs, editions: [lite, full], codes: [HFS_SECRET_PLAINTEXT_FILE]}
5047
- - {path: tests/hfs/hfs-secret-custody.spec.mjs, editions: [full], codes: [HFS_SECRET_OUTSIDE_ENC]}
5048
- witness:
5049
- - {path: tests/hfs/hfs-secret-custody.spec.mjs, editions: [lite, full], codes: [HFS_SECRET_PLAINTEXT_FILE]}
5050
- - {path: tests/hfs/hfs-secret-custody.spec.mjs, editions: [full], codes: [HFS_SECRET_OUTSIDE_ENC]}
4519
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
5051
4520
 
4521
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
4522
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
5052
4523
  - id: R278
5053
4524
  code: "BE_REST_DOOR_EVIDENCE"
5054
4525
  amendedBy: [owner:credential-guarded-rest-door]
@@ -5102,16 +4573,12 @@ rules:
5102
4573
  editions: [lite, full]
5103
4574
  docs: [docs/quality-bar.md#r280, docs/quality-bar.md#r280-ledger]
5104
4575
  exemplifiedBy:
5105
- - {path: tests/hfs/hfs-unused-symbol.spec.mjs, editions: [lite, full], codes: [HFS_UNUSED_SYMBOL]}
5106
- - {path: tests/hfs/hfs-unused-symbol-ledger.spec.mjs, editions: [lite, full], codes: [HFS_UNUSED_SYMBOL]}
5107
4576
  - {path: packages/hfs/templates/be/skeleton/src/modules/domain/identity/errors/identity.error.ts, editions: [lite, full]}
5108
4577
  - {path: packages/hfs/templates/be/skeleton/src/modules/domain/identity/admission.policy.ts, editions: [lite, full]}
5109
- proves:
5110
- - {path: tests/hfs/hfs-unused-symbol.spec.mjs, editions: [lite, full], codes: [HFS_UNUSED_SYMBOL]}
5111
- - {path: tests/hfs/hfs-unused-symbol-ledger.spec.mjs, editions: [lite, full], codes: [HFS_UNUSED_SYMBOL]}
5112
- witness:
5113
- - {path: tests/hfs/hfs-unused-symbol.spec.mjs, editions: [lite, full], codes: [HFS_UNUSED_SYMBOL]}
4578
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
5114
4579
 
4580
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
4581
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
5115
4582
  - id: R281
5116
4583
  code: "BE_SPEC_FORM_ALL_ROLES"
5117
4584
  law: "Unit spec form applies to every declared logic role, including policies, mappers, guards and integration clients. A spec obtains its subject from a compiled Nest testing module with explicit providers, never constructs the subject or mocks an own module or third-party library, and asserts behavior or state rather than only toBeDefined existence checks."
@@ -5147,13 +4614,10 @@ rules:
5147
4614
  editions: [lite, full]
5148
4615
  docs: [docs/quality-bar.md#r282]
5149
4616
  templateNa: "Build assets are supplied by each application; the scaffolder does not generate binary assets, model weights or datasets."
5150
- exemplifiedBy:
5151
- - {path: tests/hfs/hfs-assets.spec.mjs, editions: [lite, full], codes: [HFS_ASSET_OVERSIZE, HFS_ASSET_KIND]}
5152
- proves:
5153
- - {path: tests/hfs/hfs-assets.spec.mjs, editions: [lite, full], codes: [HFS_ASSET_OVERSIZE, HFS_ASSET_KIND]}
5154
- witness:
5155
- - {path: tests/hfs/hfs-assets.spec.mjs, editions: [lite, full], codes: [HFS_ASSET_OVERSIZE, HFS_ASSET_KIND]}
4617
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
5156
4618
 
4619
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
4620
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
5157
4621
  - id: R283
5158
4622
  code: "HFS_APP_LEXICON"
5159
4623
  law: "An app's source and documentation use the current product vocabulary: a word declared in hfs.json lexicon.removed is refused as a whole word or identifier segment, in both editions."
@@ -5165,13 +4629,10 @@ rules:
5165
4629
  editions: [lite, full]
5166
4630
  docs: [docs/quality-bar.md#r283]
5167
4631
  templateNa: "Removed product vocabulary is application-specific hfs.json content; there is no canonical product lexicon to scaffold."
5168
- exemplifiedBy:
5169
- - {path: tests/hfs/hfs-lexicon.spec.mjs, editions: [lite, full], codes: [HFS_APP_LEXICON]}
5170
- proves:
5171
- - {path: tests/hfs/hfs-lexicon.spec.mjs, editions: [lite, full], codes: [HFS_APP_LEXICON]}
5172
- witness:
5173
- - {path: tests/hfs/hfs-lexicon.spec.mjs, editions: [lite, full], codes: [HFS_APP_LEXICON]}
4632
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
5174
4633
 
4634
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
4635
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
5175
4636
  - id: R284
5176
4637
  code: "BE_LITE_PROOF_LANE_MISSING"
5177
4638
  law: "A lite back end declaring event-bus, queue, webhooks, realtime, fenced-job, projection or saga proves each declared pattern through integration specs under src/tests/integration: runnable tests carry titles `<pattern>/<scenario>: ...` for every required scenario of that pattern. A missing integration lane is refused; missing scenario proofs use R155's BE_PATTERN_SPEC_MISSING. Full-edition pattern proof behavior is unchanged."
@@ -5184,13 +4645,10 @@ rules:
5184
4645
  editionWhy: "ruling:R212/case-2 (owner:lite-production-swarm) (with the Work boundary amended by ruling:R212/case-4): lite has no e2e world and proves declared patterns in its integration lane; R284 owns only the lite lane code while full retains its existing pattern-proof rules."
5185
4646
  docs: [docs/quality-bar.md#r284]
5186
4647
  templateNa: "Integration scenarios depend on the application patterns and providers; no universal runnable scenario lane is scaffolded."
5187
- exemplifiedBy:
5188
- - {path: tests/hfs/hfs-lite-proof-lane.spec.mjs, editions: [lite], codes: [BE_LITE_PROOF_LANE_MISSING]}
5189
- proves:
5190
- - {path: tests/hfs/hfs-lite-proof-lane.spec.mjs, editions: [lite], codes: [BE_LITE_PROOF_LANE_MISSING]}
5191
- witness:
5192
- - {path: tests/hfs/hfs-lite-proof-lane.spec.mjs, editions: [lite], codes: [BE_LITE_PROOF_LANE_MISSING]}
4648
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
5193
4649
 
4650
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
4651
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
5194
4652
  - id: R285
5195
4653
  code: "FE_SWR_OUTSIDE_FAMILY"
5196
4654
  law: "SWR runtime calls belong to the declared SWR hook family. A component, feature or domain hook consumes its wrapper hook instead of importing an API operation or calling SWR itself; each back-end operation is imported and invoked only by its SWR wrapper under hooks/swr, regardless of whether the tier matrix still permits a direct transport edge."
@@ -5265,13 +4723,11 @@ rules:
5265
4723
  editions: [lite, full]
5266
4724
  docs: [docs/quality-bar.md#r288]
5267
4725
  exemplifiedBy:
5268
- - {path: tests/hfs/hfs-fe-stack.spec.mjs, editions: [lite, full], codes: [FE_STACK_UNLISTED, FE_STACK_CORE_MISSING]}
5269
4726
  - {path: packages/hfs/templates/fe/app/package.json.tpl, editions: [lite, full]}
5270
- proves:
5271
- - {path: tests/hfs/hfs-fe-stack.spec.mjs, editions: [lite, full], codes: [FE_STACK_UNLISTED, FE_STACK_CORE_MISSING]}
5272
- witness:
5273
- - {path: tests/hfs/hfs-fe-stack.spec.mjs, editions: [lite, full], codes: [FE_STACK_UNLISTED, FE_STACK_CORE_MISSING]}
4727
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
5274
4728
 
4729
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
4730
+ exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
5275
4731
  - id: R289
5276
4732
  code: "BE_APP_ENV_REQUIRED"
5277
4733
  law: "Every declared back-end app owns a tracked apps/<app>/src/<app>.env.ts exporting its typed environment interface and read<App>Env(env: EnvSource). main.ts constructs EnvSource once and delegates its reads to that reader, with no inline parsing. app.module.ts composes module lists only by spreading compose/<area>.ts groups; its own providers are limited to app-wide guards and filters."
@@ -5285,19 +4741,17 @@ rules:
5285
4741
  editions: [lite, full]
5286
4742
  docs: [docs/microservices.md#r289]
5287
4743
  exemplifiedBy:
5288
- - {path: tests/hfs/hfs-app-env-required.spec.mjs, editions: [lite, full], codes: [BE_APP_ENV_REQUIRED]}
5289
4744
  - {path: packages/eslint/be/app-composition.spec.mjs, editions: [lite, full], codes: [BE_APP_ENV_REQUIRED, BE_APP_MODULE_LIST_INLINE]}
5290
4745
  - {path: packages/hfs/templates/be/skeleton/apps/__app__/src/__app__.env.ts, editions: [full]}
5291
4746
  - {path: packages/hfs/templates/be/skeleton/apps/__app__/src/app.module.ts, editions: [full]}
5292
4747
  - {path: packages/hfs/templates/be/skeleton-lite/apps/api/src/api.env.ts, editions: [lite]}
5293
4748
  - {path: packages/hfs/templates/be/skeleton-lite/apps/api/src/app.module.ts, editions: [lite]}
5294
4749
  proves:
5295
- - {path: tests/hfs/hfs-app-env-required.spec.mjs, editions: [lite, full], codes: [BE_APP_ENV_REQUIRED]}
5296
4750
  - {path: packages/eslint/be/app-composition.spec.mjs, editions: [lite, full], codes: [BE_APP_ENV_REQUIRED, BE_APP_MODULE_LIST_INLINE]}
5297
4751
  witness:
5298
- - {path: tests/hfs/hfs-app-env-required.spec.mjs, editions: [lite, full], codes: [BE_APP_ENV_REQUIRED]}
5299
4752
  - {path: packages/eslint/be/app-composition.spec.mjs, editions: [lite, full], codes: [BE_APP_ENV_REQUIRED, BE_APP_MODULE_LIST_INLINE]}
5300
4753
 
4754
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; the package specs named in proves keep proving the lint enforcers, the runtime-code enforcers lost their deleted runtime spec"
5301
4755
  - id: R290
5302
4756
  code: "BE_PUBLIC_REASON_CLOSED"
5303
4757
  amendedBy: [owner:credential-guarded-rest-door]
@@ -5353,15 +4807,12 @@ rules:
5353
4807
  editions: [lite, full]
5354
4808
  docs: [docs/quality-bar.md#r292]
5355
4809
  exemplifiedBy:
5356
- - {path: tests/hfs/hfs-feature-files.spec.mjs, editions: [lite, full], codes: [HFS_FEATURE_FILE_BUDGET]}
5357
4810
  - {path: packages/hfs/templates/be/patterns/api, editions: [lite, full]}
5358
4811
  - {path: examples/lite-app/be/src/features/api/bookings, editions: [lite]}
5359
4812
  - {path: examples/ecommerce-app/be/src/features/api/checkout, editions: [full]}
5360
- proves:
5361
- - {path: tests/hfs/hfs-feature-files.spec.mjs, editions: [lite, full], codes: [HFS_FEATURE_FILE_BUDGET]}
5362
- witness:
5363
- - {path: tests/hfs/hfs-feature-files.spec.mjs, editions: [lite, full], codes: [HFS_FEATURE_FILE_BUDGET]}
4813
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
5364
4814
 
4815
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
5365
4816
  - id: R293
5366
4817
  code: "STACK_TOOLING_REIMPLEMENTED"
5367
4818
  law: "In lite and full apps, an app does not re-implement the Swarm deploy tooling the canon ships as `starci app stack <verb>`. Tracked deploy sources (files under deploy/ and scripts/, the scripts of package.json and every workflow except the managed stack-deploy.yml) never call a docker command a verb owns (docker stack deploy and config, docker secret and config create and rm, docker service ls, ps, inspect and update, docker swarm init, docker volume create, docker node ls), and deploy/ holds no render, provision, converge, verify, prune, rollback, release, backup, prepare, doctor, jobs or public script. A finding names the file and the replacing verb, never a snippet; docker stack rm, ls, ps and services, docker compose, docker run, exec, ps and logs, comments, documents and `starci app stack ...` command lines are not judged."
@@ -5379,14 +4830,9 @@ rules:
5379
4830
  - {path: packages/hfs/templates/app/ci-workflows-lite/github/workflows/ci.yml, edition: lite}
5380
4831
  - {path: packages/hfs/templates/app/ci-workflows/github/workflows/ci.yml, edition: full}
5381
4832
  - {path: examples/lite-app/.github/workflows/stack-deploy.yml, edition: lite}
5382
- - {path: tests/fixtures/hfs-stack-tooling/passing.json, edition: lite}
5383
- - {path: tests/fixtures/hfs-stack-tooling/passing.json, edition: full}
5384
- proves:
5385
- - {path: tests/hfs/hfs-stack-tooling.spec.mjs, editions: [lite, full]}
5386
- witness:
5387
- - {path: tests/fixtures/hfs-stack-tooling/violating.json, edition: lite}
5388
- - {path: tests/fixtures/hfs-stack-tooling/violating.json, edition: full}
4833
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
5389
4834
 
4835
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
5390
4836
  - id: R294
5391
4837
  code: "STACKS_DEPLOY_CONFIG_INVALID"
5392
4838
  law: "In lite and full apps, every docker-swarm environment of .starcistacks/application-stacks.yaml that declares environments.<env>.deploy declares a coherent block: it is judged by the same normalizeDeploy the `starci app stack` verbs use, against the real tree. Unknown fields are refused, names, keys, volumes, hosts, URLs and commands match their patterns, the config and public environment files exist below .starcistacks/<env>/, every service names a service of the first stack source, every sealed member has a secrets/<member>.enc file, verify entries and configs are well formed with unique config names, and the backup helper image is pinned by a real sha256 digest (no placeholder). Each problem is one finding at environments.<env>.<field>; an environment without a deploy block is not a finding."
@@ -5402,12 +4848,9 @@ rules:
5402
4848
  exemplifiedBy:
5403
4849
  - {path: packages/hfs/templates/app/skeleton-lite/.starcistacks, edition: lite}
5404
4850
  - {path: packages/hfs/templates/app/skeleton/.starcistacks, edition: full}
5405
- - {path: tests/hfs/hfs-stacks-deploy.spec.mjs, editions: [lite, full]}
5406
- proves:
5407
- - {path: tests/hfs/hfs-stacks-deploy.spec.mjs, editions: [lite, full]}
5408
- witness:
5409
- - {path: tests/hfs/hfs-stacks-deploy.spec.mjs, editions: [lite, full]}
4851
+ specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
5410
4852
 
4853
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
5411
4854
  - id: R295
5412
4855
  code: "BE_MODULE_DEFINITION_MISSING"
5413
4856
  law: "Every NestJS module of the product has a module definition (owner ruling 2026-10-15, owner:module-definition-everywhere): capability modules, sub-modules, features, transport modules and cli groups alike. For a module `<x>` the folder holds `<x>.module-definition.ts` (`export const { ConfigurableModuleClass, MODULE_OPTIONS_TOKEN, OPTIONS_TYPE } = new ConfigurableModuleBuilder<XOptions>().setClassMethodName(\"register\").build()`; the representative module of a capability keeps `.setExtras({ isGlobal: false }, ...)`), `<x>.options.ts` (`export type XOptions`, `Record<string, never>` with a one-line doc when it takes nothing yet) and `<x>.module.ts` (`@Module({...}) export class XModule extends ConfigurableModuleClass {}`, no `register` override except the capability representative's). A module appears in an `imports` array or in an app composition group only as `XModule.register({...})`, never as a bare class. The `AppModule` of an app root and the test world are composition roots and are not judged."