@starci/eslint-canon-be 3.4.0 → 3.4.2

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,72 +3484,41 @@ 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]}
3855
- 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."
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"}
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. Type emission refuses HFS_EMIT_DB_TYPES_STALE unless the complete applied migration version set equals the SQL filename stamps; lint and check report drift without writing types."
3856
3507
  kinds: [check]
3857
3508
  gates: [land, ci]
3858
- failureCodes: ["DB_CONFIG_POLICY", "DB_TYPES_DRIFT"]
3509
+ failureCodes: ["DB_CONFIG_POLICY", "DB_TYPES_DRIFT", "HFS_EMIT_DB_TYPES_STALE"]
3859
3510
  enforcers:
3860
3511
  - {kind: hfs, id: db-config-types, at: scripts/hfs/rules/database.mjs}
3512
+ - {kind: hfs, id: db-types-emit, at: packages/hfs/emit/db-types.mjs}
3861
3513
  - id: R217
3862
3514
  code: "FE_SUPABASE_CLIENT_OWNER"
3863
3515
  editions: [lite, full]
3864
3516
  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]}
3517
+ 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
3518
  exemplifiedBy:
3870
3519
  - {path: packages/hfs/templates/fe/auth/supabase-client.ts.tpl, editions: [lite, full]}
3871
3520
  - {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]}
3521
+ 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
3522
  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
3523
  kinds: [check, design]
3884
3524
  gates: [settle, land, ci]
@@ -3891,14 +3531,10 @@ rules:
3891
3531
  editions: [lite, full]
3892
3532
  docs: [docs/lite-edition.md#r219]
3893
3533
  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]}
3534
+ 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
3535
  exemplifiedBy:
3897
3536
  - {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]}
3537
+ 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
3538
  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
3539
  kinds: [check, design]
3904
3540
  gates: [settle, land, ci]
@@ -3910,13 +3546,10 @@ rules:
3910
3546
  editions: [lite]
3911
3547
  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
3548
  docs: [docs/host-secrets.md#application-secret-rules]
3913
- proves:
3914
- - {path: tests/hfs/hfs-supabase-secrets.spec.mjs, edition: lite}
3549
+ 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
3550
  exemplifiedBy:
3916
3551
  - {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}
3552
+ 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
3553
  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
3554
  kinds: [check]
3922
3555
  gates: [settle, land, ci]
@@ -3929,14 +3562,11 @@ rules:
3929
3562
  scope: runtime
3930
3563
  editions: [lite, full]
3931
3564
  docs: [docs/git-governance.md#r221]
3932
- proves: [tests/hfs-proofs/ci-triggers-release-only.spec.mjs]
3565
+ 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
3566
  exemplifiedBy:
3934
3567
  - {path: packages/hfs/templates/app/ci-workflows-lite/github/workflows/ci.yml, edition: lite}
3935
3568
  - {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]}
3569
+ 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
3570
  kinds: [check]
3941
3571
  gates: [runtime]
3942
3572
  failureCodes: ["CI_TRIGGERS_RELEASE_ONLY"]
@@ -3949,17 +3579,14 @@ rules:
3949
3579
  editions: [lite, full]
3950
3580
  docs: [docs/git-governance.md#r222]
3951
3581
  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]}
3582
+ 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"
3583
+ 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
3584
  kinds: [check]
3959
3585
  gates: [runtime]
3960
3586
  failureCodes: ["RELEASE_NOTES"]
3961
3587
  enforcers:
3962
3588
  - {kind: runtime, id: release-notes, at: scripts/hfs/runtime-rules/release-notes.mjs}
3589
+ 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
3590
  - id: R223
3964
3591
  code: "RIGHTS_ROLE_DENIED"
3965
3592
  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 +3596,7 @@ rules:
3969
3596
  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
3597
  enforcers:
3971
3598
  - {kind: runtime, id: role-rights, at: scripts/hfs/runtime-rules/rights-policy.mjs}
3599
+ 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
3600
  - id: R224
3973
3601
  code: "RIGHTS_PROTECTED_ZONE"
3974
3602
  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 +3606,7 @@ rules:
3978
3606
  failureCodes: ["RIGHTS_PROTECTED_ZONE", "RIGHTS_OP_RUNTIME_WRITE"]
3979
3607
  enforcers:
3980
3608
  - {kind: runtime, id: protected-zone, at: scripts/hfs/runtime-rules/rights-policy.mjs}
3609
+ 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
3610
  - id: R225
3982
3611
  code: "RT_HOOK_SHAPE"
3983
3612
  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 +3616,14 @@ rules:
3987
3616
  failureCodes: ["RT_HOOK_SHAPE", "RIGHTS_PUSH_NOT_RELEASE"]
3988
3617
  enforcers:
3989
3618
  - {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]}
3619
+ 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
3620
  - id: R227
4008
3621
  code: "RT_SYNTAX_INVALID"
4009
3622
  editions: [lite, full]
4010
3623
  docs: [docs/source-process.md#r227]
4011
3624
  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]}
3625
+ 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"
3626
+ 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
3627
  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
3628
  scope: runtime
4021
3629
  kinds: [check]
@@ -4023,6 +3631,7 @@ rules:
4023
3631
  failureCodes: ["RT_SYNTAX_INVALID"]
4024
3632
  enforcers:
4025
3633
  - {kind: runtime, id: syntax, at: scripts/hfs/runtime-rules/syntax.mjs}
3634
+ 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
3635
  - id: R228
4027
3636
  code: "RT_IDENTIFIER_UNDECLARED"
4028
3637
  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 +3644,12 @@ rules:
4035
3644
  editions: [lite, full]
4036
3645
  docs: [docs/source-process.md#r228]
4037
3646
  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]}
3647
+ 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"
3648
+ 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"}
3649
+ 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
3650
  - id: R229
4044
3651
  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."
3652
+ 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
3653
  scope: runtime
4047
3654
  kinds: [check]
4048
3655
  gates: [runtime]
@@ -4052,11 +3659,9 @@ rules:
4052
3659
  editions: [lite, full]
4053
3660
  docs: [docs/source-process.md#r229]
4054
3661
  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]}
3662
+ 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"
3663
+ 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"}
3664
+ 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
3665
  - id: R230
4061
3666
  code: "RT_PROSE_COMMAND_UNKNOWN"
4062
3667
  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 +3669,14 @@ rules:
4064
3669
  editions: [lite, full]
4065
3670
  docs: [docs/debugging.md#r230-instruction-commands]
4066
3671
  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]}
3672
+ 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"
3673
+ 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
3674
  kinds: [check]
4073
3675
  gates: [runtime]
4074
3676
  failureCodes: ["RT_PROSE_COMMAND_UNKNOWN"]
4075
3677
  enforcers:
4076
3678
  - {kind: runtime, id: prose-commands, at: scripts/checks/check-prose-commands.mjs}
3679
+ 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
3680
  - id: R231
4078
3681
  code: "RT_DOCUMENTED_DEFAULT_DRIFT"
4079
3682
  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 +3684,14 @@ rules:
4081
3684
  editions: [lite, full]
4082
3685
  docs: [docs/debugging.md#r231-documented-defaults]
4083
3686
  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]}
3687
+ 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"
3688
+ 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
3689
  kinds: [check]
4090
3690
  gates: [runtime]
4091
3691
  failureCodes: ["RT_DOCUMENTED_DEFAULT_DRIFT"]
4092
3692
  enforcers:
4093
3693
  - {kind: runtime, id: documented-defaults, at: scripts/checks/check-documented-defaults.mjs}
3694
+ 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
3695
  - id: R232
4095
3696
  code: "RT_ROLES_CONTRACT_DRIFT"
4096
3697
  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 +3699,36 @@ rules:
4098
3699
  editions: [lite, full]
4099
3700
  docs: [docs/debugging.md#r232-generated-role-contracts]
4100
3701
  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]}
3702
+ 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"
3703
+ 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
3704
  kinds: [check]
4107
3705
  gates: [runtime]
4108
3706
  failureCodes: ["RT_ROLES_CONTRACT_DRIFT"]
4109
3707
  enforcers:
4110
3708
  - {kind: runtime, id: roles-contract, at: scripts/checks/check-roles-contract.mjs}
3709
+ 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
3710
  - id: R233
4112
3711
  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."
3712
+ 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
3713
  scope: runtime
4115
3714
  editions: [lite, full]
4116
3715
  docs: [docs/debugging.md#r233-edge-case-evidence]
4117
3716
  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]}
3717
+ 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"
3718
+ 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
3719
  kinds: [check]
4124
3720
  gates: [runtime]
4125
3721
  failureCodes: ["RT_EDGE_CASE_REGISTRY"]
4126
3722
  enforcers:
4127
3723
  - {kind: runtime, id: edge-case-registry, at: scripts/checks/check-edge-case-registry.mjs}
3724
+ 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
3725
  - id: R234
4129
3726
  code: "RT_SECRET_TRACKED"
4130
3727
  editions: [lite, full]
4131
3728
  docs: [docs/application-stacks.md#where-a-secret-may-live]
4132
3729
  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}
3730
+ 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"
3731
+ 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
3732
  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
3733
  scope: runtime
4142
3734
  kinds: [check]
@@ -4144,6 +3736,7 @@ rules:
4144
3736
  failureCodes: ["RT_SECRET_TRACKED"]
4145
3737
  enforcers:
4146
3738
  - {kind: runtime, id: secret-tracked, at: scripts/hfs/runtime-rules/secret-tracked.mjs}
3739
+ 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
3740
  - id: R235
4148
3741
  code: "SCAN_SMELL"
4149
3742
  editions: [lite, full]
@@ -4185,13 +3778,8 @@ rules:
4185
3778
  editions: [lite, full]
4186
3779
  docs: [docs/debugging.md#r236]
4187
3780
  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}
3781
+ 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"
3782
+ 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
3783
  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
3784
  scope: runtime
4197
3785
  kinds: [check]
@@ -4199,18 +3787,14 @@ rules:
4199
3787
  failureCodes: ["RT_GATE_LOOSENING"]
4200
3788
  enforcers:
4201
3789
  - {kind: runtime, id: gate-loosening, at: scripts/checks/check-gate-loosening.mjs}
3790
+ 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
3791
  - id: R237
4203
3792
  code: "RT_REVISION_SCOPE"
4204
3793
  editions: [lite, full]
4205
3794
  docs: [docs/debugging.md#r237]
4206
3795
  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}
3796
+ 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"
3797
+ 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
3798
  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
3799
  scope: runtime
4216
3800
  kinds: [check]
@@ -4218,6 +3802,7 @@ rules:
4218
3802
  failureCodes: ["RT_REVISION_SCOPE"]
4219
3803
  enforcers:
4220
3804
  - {kind: runtime, id: revision-scope, at: scripts/checks/check-revision-scope.mjs}
3805
+ 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
3806
  - id: R238
4222
3807
  code: "RT_EVENT_SPILL_BYPASS"
4223
3808
  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 +3810,14 @@ rules:
4225
3810
  editions: [lite, full]
4226
3811
  docs: [docs/ledger-db.md#the-storage-convention-owner-ruling-2026-10-09]
4227
3812
  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]}
3813
+ 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"
3814
+ 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
3815
  kinds: [check]
4234
3816
  gates: [runtime]
4235
3817
  failureCodes: ["RT_EVENT_SPILL_BYPASS"]
4236
3818
  enforcers:
4237
3819
  - {kind: runtime, id: event-spill, at: scripts/checks/check-event-spill.mjs}
3820
+ 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
3821
  - id: R239
4239
3822
  code: "RT_STORAGE_UNDECLARED"
4240
3823
  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 +3825,14 @@ rules:
4242
3825
  editions: [lite, full]
4243
3826
  docs: [docs/ledger-db.md#the-storage-convention-owner-ruling-2026-10-09]
4244
3827
  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]}
3828
+ 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"
3829
+ 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
3830
  kinds: [check]
4251
3831
  gates: [runtime]
4252
3832
  failureCodes: ["RT_STORAGE_UNDECLARED"]
4253
3833
  enforcers:
4254
3834
  - {kind: runtime, id: storage-convention, at: scripts/checks/check-storage-convention.mjs}
3835
+ 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
3836
  - id: R240
4256
3837
  code: "RT_ROOT_ADHOC"
4257
3838
  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 +3840,14 @@ rules:
4259
3840
  editions: [lite, full]
4260
3841
  docs: [docs/architecture.md#r240]
4261
3842
  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]}
3843
+ 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"
3844
+ 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
3845
  kinds: [check]
4268
3846
  gates: [runtime]
4269
3847
  failureCodes: ["RT_ROOT_ADHOC"]
4270
3848
  enforcers:
4271
3849
  - {kind: runtime, id: root-adhoc, at: scripts/checks/check-root-adhoc.mjs}
3850
+ 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
3851
  - id: R241
4273
3852
  code: "RT_HELD_UNSURFACED"
4274
3853
  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 +3855,14 @@ rules:
4276
3855
  editions: [lite, full]
4277
3856
  docs: [docs/debugging.md#r241]
4278
3857
  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]}
3858
+ 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"
3859
+ 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
3860
  kinds: [check]
4285
3861
  gates: [runtime]
4286
3862
  failureCodes: ["RT_HELD_UNSURFACED"]
4287
3863
  enforcers:
4288
3864
  - {kind: runtime, id: held-surfacing, at: scripts/checks/check-held-surfacing.mjs}
3865
+ 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
3866
  - id: R242
4290
3867
  code: "RT_OP_JUDGE_UNDECLARED"
4291
3868
  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 +3870,24 @@ rules:
4293
3870
  editions: [lite, full]
4294
3871
  docs: [docs/ops.md#r242]
4295
3872
  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]}
3873
+ 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"
3874
+ 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
3875
  kinds: [check]
4302
3876
  gates: [runtime]
4303
3877
  failureCodes: ["RT_OP_JUDGE_UNDECLARED"]
4304
3878
  enforcers:
4305
3879
  - {kind: runtime, id: op-judge, at: scripts/checks/check-op-judge.mjs}
3880
+ 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
3881
  - id: R243
4307
3882
  code: "FE_SERVER_ACTION_FORBIDDEN"
4308
3883
  editions: [lite, full]
4309
3884
  docs: [docs/code-pattern-enforcement.md#r243]
4310
3885
  proves:
4311
- - {path: tests/hfs/frontend-boundary-coverage.spec.mjs, editions: [lite, full]}
4312
3886
  - {path: packages/eslint/fe/frontend-boundary-coverage.spec.mjs, editions: [lite, full], codes: [FE_SERVER_ACTION_FORBIDDEN]}
4313
3887
  exemplifiedBy:
4314
3888
  - {path: packages/hfs/templates/fe/skeleton-lite/apps/web/src/app/health/live/route.ts, edition: lite}
4315
3889
  - {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]}
3890
+ 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
3891
  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
3892
  kinds: [check, lint]
4321
3893
  gates: [pre-commit, settle, land, ci]
@@ -4323,19 +3895,17 @@ rules:
4323
3895
  enforcers:
4324
3896
  - {kind: machine, id: server-action-forbidden, at: scripts/hfs/architecture/server-action.mjs}
4325
3897
  - {kind: eslint-fe, id: no-server-action}
3898
+ 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
3899
  - id: R244
4327
3900
  code: "FE_STACK_FORBIDDEN"
4328
3901
  editions: [lite, full]
4329
3902
  docs: [docs/code-pattern-enforcement.md#r244]
4330
3903
  proves:
4331
- - {path: tests/hfs/frontend-boundary-coverage.spec.mjs, editions: [lite, full], codes: [FE_STACK_FORBIDDEN]}
4332
3904
  - {path: packages/eslint/fe/frontend-boundary-coverage.spec.mjs, editions: [lite, full], codes: [FE_STACK_FORBIDDEN]}
4333
3905
  exemplifiedBy:
4334
3906
  - {path: packages/hfs/templates/fe/skeleton-lite/apps/web/src/proxy.ts, edition: lite}
4335
3907
  - {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]}
3908
+ 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
3909
  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
3910
  kinds: [check, lint]
4341
3911
  gates: [pre-commit, settle, land, ci]
@@ -4343,6 +3913,7 @@ rules:
4343
3913
  enforcers:
4344
3914
  - {kind: hfs, id: fe-stack, at: scripts/hfs/rules/fe-stack.mjs}
4345
3915
  - {kind: eslint-fe, id: fe-stack-import}
3916
+ 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
3917
  - id: R245
4347
3918
  code: "BE_APP_OPTIONS_COMPOSITION"
4348
3919
  amendedBy: R289
@@ -4387,125 +3958,109 @@ rules:
4387
3958
  editions: [lite, full]
4388
3959
  docs: [docs/quality-bar.md#coverage-matrix]
4389
3960
  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}
3961
+ 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"
3962
+ 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
3963
  kinds: [check]
4398
3964
  gates: [runtime]
4399
3965
  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
3966
  enforcers:
4401
3967
  - {kind: runtime, id: hfs-coverage, at: scripts/checks/check-hfs-coverage.mjs}
3968
+ 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
3969
  - id: R248
4403
3970
  code: "ENV_REQUIRED_UNSET"
4404
3971
  editions: [lite, full]
4405
3972
  docs: [docs/host-secrets.md#r248]
4406
- proves:
4407
- - {path: tests/hfs/hfs-env-parity.spec.mjs, editions: [lite, full]}
3973
+ 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
3974
  exemplifiedBy:
4409
3975
  - {path: packages/hfs/templates/be/skeleton-lite/apps/api/src/api.env.ts, edition: lite}
4410
3976
  - {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]}
3977
+ 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
3978
  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
3979
  kinds: [check]
4416
3980
  gates: [settle, land, ci]
4417
3981
  failureCodes: ["ENV_REQUIRED_UNSET", "ENV_SEALED_UNREAD", "ENV_DUPLICATE", "ENV_PUBLIC_SEALED", "ENV_EXAMPLE_DRIFT"]
4418
3982
  enforcers:
4419
3983
  - {kind: hfs, id: env-parity, at: scripts/hfs/rules/env-parity.mjs}
3984
+ 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
3985
  - id: R249
4421
3986
  code: "ENV_VALUE_SHAPE"
4422
3987
  editions: [lite, full]
4423
3988
  docs: [docs/host-secrets.md#r249]
4424
- proves:
4425
- - {path: tests/hfs/hfs-env-parity.spec.mjs, editions: [lite, full]}
3989
+ 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
3990
  exemplifiedBy:
4427
3991
  - {path: packages/hfs/templates/be/skeleton-lite/apps/api/src/api.env.ts, edition: lite}
4428
3992
  - {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]}
3993
+ 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
3994
  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
3995
  kinds: [check]
4434
3996
  gates: [settle, land, ci]
4435
3997
  failureCodes: ["ENV_VALUE_SHAPE"]
4436
3998
  enforcers:
4437
3999
  - {kind: hfs, id: env-value-shape, at: scripts/hfs/rules/env-value-shape.mjs}
4000
+ 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
4001
 
4439
4002
  - id: R250
4440
4003
  code: "HFS_HOST_CRON"
4441
4004
  editions: [lite, full]
4442
4005
  docs:
4443
4006
  - {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]}
4007
+ 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
4008
  exemplifiedBy:
4447
4009
  - {path: packages/hfs/templates/app/ci-workflows-lite/github/workflows/ci.yml, edition: lite}
4448
4010
  - {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]}
4011
+ 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
4012
  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
4013
  kinds: [check]
4454
4014
  gates: [settle, land, ci]
4455
4015
  failureCodes: ["HFS_HOST_CRON", "HFS_DEPLOY_NO_LOGIC", "HFS_DEPLOY_COMPOSE_ON_VPS", "HFS_DEPLOY_SCHEDULER"]
4456
4016
  enforcers:
4457
4017
  - {kind: hfs, id: deploy-scan, at: scripts/hfs/rules/deploy-scan.mjs}
4018
+ 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
4019
  - id: R251
4459
4020
  code: "HFS_DEPLOY_WORKFLOW"
4460
4021
  editions: [lite, full]
4461
4022
  docs:
4462
4023
  - {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]}
4024
+ 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
4025
  exemplifiedBy:
4466
4026
  - {path: packages/hfs/templates/app/ci-workflows-lite/github/workflows/db-deploy.yml, edition: lite}
4467
4027
  - {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]}
4471
- 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."
4028
+ 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"}
4029
+ 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 (local actions are allowed and container actions require a full sha256 digest); supply-chain reports each unpinned uses reference at its source line, including disabled jobs and steps; 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
4030
  kinds: [check]
4473
4031
  gates: [settle, land, ci]
4474
4032
  failureCodes: ["HFS_DEPLOY_WORKFLOW", "HFS_WORKFLOW_PIN", "HFS_CI_TOOL_INSTALL", "HFS_APP_WORKFLOW_TRIGGER"]
4475
4033
  enforcers:
4476
4034
  - {kind: hfs, id: deploy-workflow, at: scripts/hfs/rules/deploy-workflow.mjs}
4035
+ - {kind: hfs, id: supply-chain, at: scripts/hfs/rules/supply-chain.mjs}
4036
+ 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
4037
  - id: R252
4478
4038
  code: "HFS_SCRIPT_PLAINTEXT_LOAD"
4479
4039
  editions: [lite, full]
4480
4040
  docs:
4481
4041
  - {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]}
4042
+ 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
4043
  exemplifiedBy:
4485
4044
  - {path: packages/hfs/templates/app/ci-workflows-lite/github/workflows/db-deploy.yml, edition: lite}
4486
4045
  - {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]}
4046
+ 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
4047
  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
4048
  kinds: [check]
4492
4049
  gates: [settle, land, ci]
4493
4050
  failureCodes: ["HFS_SCRIPT_PLAINTEXT_LOAD", "HFS_SCRIPT_XTRACE", "HFS_SERVICE_ROLE_SCOPE"]
4494
4051
  enforcers:
4495
4052
  - {kind: hfs, id: script-hygiene, at: scripts/hfs/rules/script-hygiene.mjs}
4053
+ 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
4054
  - id: R253
4497
4055
  code: "HFS_AGE_KEY_CUSTODY"
4498
4056
  editions: [lite, full]
4499
4057
  docs: [docs/host-secrets.md#application-secret-rules]
4500
- proves:
4501
- - {path: tests/hfs/hfs-secret-custody.spec.mjs, editions: [lite, full]}
4058
+ 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
4059
  exemplifiedBy:
4503
4060
  - {path: packages/hfs/templates/be/skeleton/src/modules/platform/config/env-source.config.ts, editions: [lite, full]}
4504
4061
  - {path: packages/hfs/templates/be/skeleton/src/modules/platform/http-security/origin.guard.ts, editions: [lite, full]}
4505
4062
  - {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]}
4063
+ 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
4064
  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
4065
  kinds: [check]
4511
4066
  gates: [settle, land, ci]
@@ -4513,57 +4068,45 @@ rules:
4513
4068
  enforcers:
4514
4069
  - {kind: hfs, id: secret-age-key-custody, at: scripts/hfs/rules/secrets.mjs}
4515
4070
  - {kind: hfs, id: canon-copy-drift, at: scripts/hfs/rules/canon-copy-drift.mjs}
4071
+ 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
4072
  - id: R254
4517
4073
  code: "DB_BE_ONLY_ACCESS"
4518
4074
  editions: [lite]
4519
4075
  editionWhy: "owner:lite-backing-services makes Supabase lite's database backing; these SQL access requirements apply to that backing."
4520
4076
  docs: [docs/microservices.md#r254]
4521
4077
  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]}
4078
+ 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"
4079
+ 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
4080
  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
4081
  kinds: [check]
4530
4082
  gates: [settle, land, ci]
4531
4083
  failureCodes: ["DB_BE_ONLY_ACCESS", "DB_REALTIME_UNLISTED"]
4532
4084
  enforcers:
4533
4085
  - {kind: hfs, id: db-be-only-access, at: scripts/hfs/rules/database-access.mjs}
4086
+ 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
4087
  - id: R255
4535
4088
  code: "DB_APP_ROLE"
4536
4089
  editions: [lite]
4537
4090
  editionWhy: "owner:lite-backing-services makes Supabase lite's database backing; application-role and forced-RLS requirements apply to that backing."
4538
4091
  docs: [docs/microservices.md#r255]
4539
4092
  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]}
4093
+ 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"
4094
+ 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
4095
  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
4096
  kinds: [check]
4548
4097
  gates: [settle, land, ci]
4549
4098
  failureCodes: ["DB_APP_ROLE", "DB_FORCE_RLS_DEFAULT"]
4550
4099
  enforcers:
4551
4100
  - {kind: hfs, id: db-app-role, at: scripts/hfs/rules/database-access.mjs}
4101
+ 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
4102
  - id: R256
4553
4103
  code: "DB_POLICY_TAUTOLOGY"
4554
4104
  editions: [lite]
4555
4105
  editionWhy: "owner:lite-backing-services makes Supabase lite's database backing; access-policy, view, definer and storage SQL requirements apply to that backing."
4556
4106
  docs: [docs/microservices.md#r256]
4557
4107
  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]}
4108
+ 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"
4109
+ 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
4110
  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
4111
  kinds: [check]
4569
4112
  gates: [settle, land, ci]
@@ -4572,54 +4115,45 @@ rules:
4572
4115
  - {kind: hfs, id: db-policy-hardening, at: scripts/hfs/rules/database-access.mjs}
4573
4116
  - {kind: hfs, id: db-definer-revoke, at: scripts/hfs/rules/database-plpgsql.mjs}
4574
4117
 
4118
+ 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
4119
  - id: R257
4576
4120
  code: "DB_BASELINE_SHAPE"
4577
4121
  editions: [lite]
4578
4122
  editionWhy: "owner:lite-backing-services makes Supabase lite's database backing; baseline and archive requirements apply to its migration history."
4579
4123
  docs: [docs/microservices.md#r257]
4580
4124
  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]}
4125
+ 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"
4126
+ 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
4127
  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
4128
  kinds: [check]
4589
4129
  gates: [settle, land, ci]
4590
4130
  failureCodes: ["DB_BASELINE_SHAPE", "DB_ARCHIVE_MUTATED"]
4591
4131
  enforcers:
4592
4132
  - {kind: hfs, id: db-baseline-shape, at: scripts/hfs/rules/database-baseline.mjs}
4133
+ 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
4134
  - id: R258
4594
4135
  code: "DB_PGMQ_DECLARED"
4595
4136
  editions: [lite]
4596
4137
  editionWhy: "owner:lite-backing-services makes Supabase lite's database backing; pgmq and pg_cron ownership requirements apply to that backing."
4597
4138
  docs: [docs/microservices.md#r258]
4598
4139
  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]}
4140
+ 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"
4141
+ 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
4142
  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
4143
  kinds: [check]
4607
4144
  gates: [settle, land, ci]
4608
4145
  failureCodes: ["DB_PGMQ_DECLARED", "DB_CRON_OWNED"]
4609
4146
  enforcers:
4610
4147
  - {kind: hfs, id: db-queue-cron, at: scripts/hfs/rules/database-queues.mjs}
4148
+ 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
4149
  - id: R259
4612
4150
  code: "DB_EXTENSION_ALLOWED"
4613
4151
  editions: [lite]
4614
4152
  editionWhy: "owner:lite-backing-services makes Supabase lite's database backing; database configuration, extension, migration and seed requirements apply to that backing."
4615
4153
  docs: [docs/microservices.md#r259]
4616
4154
  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]}
4155
+ 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"
4156
+ 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
4157
  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
4158
  kinds: [check]
4625
4159
  gates: [settle, land, ci]
@@ -4628,6 +4162,7 @@ rules:
4628
4162
  - {kind: hfs, id: db-config-ext, at: scripts/hfs/rules/database-config.mjs}
4629
4163
  - {kind: hfs, id: db-migration-destructive, at: scripts/hfs/rules/database-migrations.mjs}
4630
4164
 
4165
+ 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
4166
  - id: R260
4632
4167
  code: "BE_JWT_ALG_PINNED"
4633
4168
  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 +4182,9 @@ rules:
4647
4182
  - {"path":"packages/eslint/be/jwt-alg.spec.mjs","edition":"full","codes":["BE_JWT_ALG_PINNED"]}
4648
4183
  proves:
4649
4184
  - "packages/eslint/be/jwt-alg.spec.mjs"
4650
- - "tests/hfs-architecture/architecture-jwt-policy.spec.mjs"
4651
4185
  witness:
4652
4186
  - {"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"]}
4187
+ 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
4188
  - id: R261
4655
4189
  code: "BE_CORS_ALLOWLIST"
4656
4190
  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 +4226,12 @@ rules:
4692
4226
  - {"path":"packages/hfs/templates/be/skeleton/src/modules/platform/http-security/readiness.service.ts","editions":["lite","full"]}
4693
4227
  - {"path":"packages/hfs/templates/be/image/api/Dockerfile","editions":["lite","full"]}
4694
4228
  - {"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
4229
  proves:
4697
4230
  - {"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
4231
  witness:
4700
4232
  - {"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
4233
 
4234
+ 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
4235
  - id: R263
4704
4236
  code: "BE_WEBHOOK_SCOPE"
4705
4237
  amendedBy: [owner:oauth-redirect-not-webhook, owner:webhook-receipt-port]
@@ -4787,17 +4319,10 @@ rules:
4787
4319
  exemplifiedBy:
4788
4320
  - {"path":"packages/hfs/templates/app/skeleton-lite/.starcistacks","edition":"lite"}
4789
4321
  - {"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"}
4322
+ 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
4323
 
4324
+ 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"}
4325
+ 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
4326
  - id: R267
4802
4327
  code: "STACKS_RELEASE_UNDECLARED"
4803
4328
  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 +4337,10 @@ rules:
4812
4337
  exemplifiedBy:
4813
4338
  - {"path":"packages/hfs/templates/app/skeleton-lite/.starcistacks","edition":"lite"}
4814
4339
  - {"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"}
4340
+ 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
4341
 
4342
+ 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"}
4343
+ 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
4344
  - id: R268
4828
4345
  code: "HFS_SCHEDULE_UNDECLARED"
4829
4346
  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,19 +4355,13 @@ rules:
4838
4355
  exemplifiedBy:
4839
4356
  - {"path":"packages/hfs/templates/app/skeleton-lite/.starcistacks/application-stacks.yaml","edition":"lite"}
4840
4357
  - {"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"}
4358
+ 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
4359
 
4360
+ 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"}
4361
+ 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
4362
  - id: R269
4852
4363
  code: "HFS_DEPENDABOT_MISSING"
4853
- 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."
4364
+ law: "In lite and full apps, .github/dependabot.yml declares scheduled npm, github-actions and docker updates. Every npm entry declares a minor-and-patch version group and a security-updates group; every group explicitly restricts update-types to minor and patch, leaving majors per package, and npm entries ignore @starci/* without version or update-type restrictions. 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."
4854
4365
  kinds: [check]
4855
4366
  gates: ["settle","land","ci"]
4856
4367
  failureCodes: ["HFS_DEPENDABOT_MISSING", "HFS_AUDIT_STEP_MISSING", "HFS_SBOM_MISSING"]
@@ -4860,20 +4371,16 @@ rules:
4860
4371
  docs:
4861
4372
  - "docs/application-stacks.md#r269"
4862
4373
  exemplifiedBy:
4863
- - {"path":"tests/hfs/hfs-supply-chain.spec.mjs","edition":"lite"}
4864
- - {"path":"tests/hfs/hfs-supply-chain.spec.mjs","edition":"full"}
4865
4374
  - {"path":"packages/hfs/templates/app/skeleton-lite/.github/dependabot.yml","edition":"lite"}
4866
4375
  - {"path":"packages/hfs/templates/app/ci-workflows-lite/github/workflows/ci.yml","edition":"lite"}
4867
4376
  - {"path":"packages/hfs/templates/app/ci-workflows-lite/github/workflows/images.yml","edition":"lite"}
4868
4377
  - {"path":"packages/hfs/templates/app/skeleton/.github/dependabot.yml","edition":"full"}
4869
4378
  - {"path":"packages/hfs/templates/app/ci-workflows/github/workflows/ci.yml","edition":"full"}
4870
4379
  - {"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"}
4380
+ 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
4381
 
4382
+ 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"}
4383
+ 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
4384
  - id: R270
4878
4385
  code: "HFS_DOC_PATH_MISSING"
4879
4386
  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 +4393,11 @@ rules:
4886
4393
  docs:
4887
4394
  - "docs/quality-bar.md#r270"
4888
4395
  exemplifiedBy:
4889
- - {"path":"tests/hfs/hfs-doc-fresh.spec.mjs","edition":"lite"}
4890
- - {"path":"tests/hfs/hfs-doc-fresh.spec.mjs","edition":"full"}
4891
4396
  - {"path":"packages/hfs/templates/app/skeleton-lite/README.md","edition":"lite"}
4892
4397
  - {"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"}
4398
+ 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"
4399
+ 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"}
4400
+ 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
4401
  - id: R271
4899
4402
  code: "HFS_RELEASE_TAG_MISMATCH"
4900
4403
  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 +4410,13 @@ rules:
4907
4410
  docs:
4908
4411
  - "docs/application-stacks.md#r271"
4909
4412
  exemplifiedBy:
4910
- - {"path":"tests/hfs/hfs-release-provenance.spec.mjs","edition":"lite"}
4911
- - {"path":"tests/hfs/hfs-release-provenance.spec.mjs","edition":"full"}
4912
4413
  - {"path":"packages/hfs/templates/app/ci-workflows-lite/github/workflows/images.yml","edition":"lite"}
4913
4414
  - {"path":"packages/hfs/templates/app/ci-workflows/github/workflows/images.yml","edition":"full"}
4914
4415
  - {"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"}
4416
+ 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
4417
 
4418
+ 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"}
4419
+ 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
4420
  - id: R272
4922
4421
  code: "BE_APP_BOOT_PROOF_MISSING"
4923
4422
  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 +4430,11 @@ rules:
4931
4430
  docs:
4932
4431
  - "docs/quality-bar.md#r272"
4933
4432
  exemplifiedBy:
4934
- - {"path":"tests/hfs/hfs-boot-proof.spec.mjs","edition":"lite"}
4935
4433
  - {"path":"packages/hfs/templates/be/skeleton-lite/src/tests/fixtures/builders/api.builder.ts","edition":"lite"}
4936
4434
  - {"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"}
4435
+ 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"
4436
+ 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"}
4437
+ 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
4438
  - id: R273
4942
4439
  code: "HFS_COVERAGE_BELOW"
4943
4440
  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 +4447,12 @@ rules:
4950
4447
  docs:
4951
4448
  - "docs/quality-bar.md#r273"
4952
4449
  exemplifiedBy:
4953
- - {"path":"tests/hfs/hfs-coverage-below.spec.mjs","edition":"lite"}
4954
- - {"path":"tests/hfs/hfs-coverage-below.spec.mjs","edition":"full"}
4955
4450
  - {"path":"packages/hfs/templates/be/tool-config/jest.config.js","editions":["lite","full"]}
4956
4451
  - {"path":"examples/lite-app/be/jest.config.js","edition":"lite"}
4957
4452
  - {"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"}
4453
+ 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
4454
 
4455
+ 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
4456
  - id: R274
4965
4457
  code: "RT_RULING_STALE_CITE"
4966
4458
  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 +4466,10 @@ rules:
4974
4466
  templateNa: "Runtime owner-ruling citation metadata has no product scaffold surface; passing and stale authored-source fixtures live in the ruling-cites spec."
4975
4467
  docs:
4976
4468
  - "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"}
4469
+ 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
4470
 
4471
+ 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"}
4472
+ 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
4473
  - id: R275
4987
4474
  code: "STACKS_INGRESS_UNDECLARED"
4988
4475
  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 +4484,10 @@ rules:
4997
4484
  exemplifiedBy:
4998
4485
  - {"path":"packages/hfs/templates/app/skeleton-lite/.starcistacks","edition":"lite"}
4999
4486
  - {"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"}
4487
+ 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
4488
 
4489
+ 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
+ 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
4491
  - id: R276
5011
4492
  code: "STACKS_LITE_SELFHOSTED_DB"
5012
4493
  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 +4502,10 @@ rules:
5021
4502
  - "docs/application-stacks.md#r276"
5022
4503
  exemplifiedBy:
5023
4504
  - {"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"}
4505
+ 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
4506
 
4507
+ 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"}
4508
+ 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
4509
  - id: R277
5031
4510
  code: "HFS_SECRET_PLAINTEXT_FILE"
5032
4511
  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 +4518,10 @@ rules:
5039
4518
  codeEditions: {HFS_SECRET_OUTSIDE_ENC: [full]}
5040
4519
  docs: [docs/host-secrets.md#r277]
5041
4520
  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]}
4521
+ 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
4522
 
4523
+ 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"}
4524
+ 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
4525
  - id: R278
5053
4526
  code: "BE_REST_DOOR_EVIDENCE"
5054
4527
  amendedBy: [owner:credential-guarded-rest-door]
@@ -5102,16 +4575,12 @@ rules:
5102
4575
  editions: [lite, full]
5103
4576
  docs: [docs/quality-bar.md#r280, docs/quality-bar.md#r280-ledger]
5104
4577
  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
4578
  - {path: packages/hfs/templates/be/skeleton/src/modules/domain/identity/errors/identity.error.ts, editions: [lite, full]}
5108
4579
  - {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]}
4580
+ 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
4581
 
4582
+ 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"}
4583
+ 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
4584
  - id: R281
5116
4585
  code: "BE_SPEC_FORM_ALL_ROLES"
5117
4586
  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 +4616,10 @@ rules:
5147
4616
  editions: [lite, full]
5148
4617
  docs: [docs/quality-bar.md#r282]
5149
4618
  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]}
4619
+ 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
4620
 
4621
+ 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"}
4622
+ 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
4623
  - id: R283
5158
4624
  code: "HFS_APP_LEXICON"
5159
4625
  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 +4631,10 @@ rules:
5165
4631
  editions: [lite, full]
5166
4632
  docs: [docs/quality-bar.md#r283]
5167
4633
  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]}
4634
+ 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
4635
 
4636
+ 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"}
4637
+ 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
4638
  - id: R284
5176
4639
  code: "BE_LITE_PROOF_LANE_MISSING"
5177
4640
  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 +4647,10 @@ rules:
5184
4647
  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
4648
  docs: [docs/quality-bar.md#r284]
5186
4649
  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]}
4650
+ 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
4651
 
4652
+ 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"}
4653
+ 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
4654
  - id: R285
5195
4655
  code: "FE_SWR_OUTSIDE_FAMILY"
5196
4656
  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 +4725,11 @@ rules:
5265
4725
  editions: [lite, full]
5266
4726
  docs: [docs/quality-bar.md#r288]
5267
4727
  exemplifiedBy:
5268
- - {path: tests/hfs/hfs-fe-stack.spec.mjs, editions: [lite, full], codes: [FE_STACK_UNLISTED, FE_STACK_CORE_MISSING]}
5269
4728
  - {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]}
4729
+ 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
4730
 
4731
+ 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"}
4732
+ 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
4733
  - id: R289
5276
4734
  code: "BE_APP_ENV_REQUIRED"
5277
4735
  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 +4743,17 @@ rules:
5285
4743
  editions: [lite, full]
5286
4744
  docs: [docs/microservices.md#r289]
5287
4745
  exemplifiedBy:
5288
- - {path: tests/hfs/hfs-app-env-required.spec.mjs, editions: [lite, full], codes: [BE_APP_ENV_REQUIRED]}
5289
4746
  - {path: packages/eslint/be/app-composition.spec.mjs, editions: [lite, full], codes: [BE_APP_ENV_REQUIRED, BE_APP_MODULE_LIST_INLINE]}
5290
4747
  - {path: packages/hfs/templates/be/skeleton/apps/__app__/src/__app__.env.ts, editions: [full]}
5291
4748
  - {path: packages/hfs/templates/be/skeleton/apps/__app__/src/app.module.ts, editions: [full]}
5292
4749
  - {path: packages/hfs/templates/be/skeleton-lite/apps/api/src/api.env.ts, editions: [lite]}
5293
4750
  - {path: packages/hfs/templates/be/skeleton-lite/apps/api/src/app.module.ts, editions: [lite]}
5294
4751
  proves:
5295
- - {path: tests/hfs/hfs-app-env-required.spec.mjs, editions: [lite, full], codes: [BE_APP_ENV_REQUIRED]}
5296
4752
  - {path: packages/eslint/be/app-composition.spec.mjs, editions: [lite, full], codes: [BE_APP_ENV_REQUIRED, BE_APP_MODULE_LIST_INLINE]}
5297
4753
  witness:
5298
- - {path: tests/hfs/hfs-app-env-required.spec.mjs, editions: [lite, full], codes: [BE_APP_ENV_REQUIRED]}
5299
4754
  - {path: packages/eslint/be/app-composition.spec.mjs, editions: [lite, full], codes: [BE_APP_ENV_REQUIRED, BE_APP_MODULE_LIST_INLINE]}
5300
4755
 
4756
+ 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
4757
  - id: R290
5302
4758
  code: "BE_PUBLIC_REASON_CLOSED"
5303
4759
  amendedBy: [owner:credential-guarded-rest-door]
@@ -5353,15 +4809,12 @@ rules:
5353
4809
  editions: [lite, full]
5354
4810
  docs: [docs/quality-bar.md#r292]
5355
4811
  exemplifiedBy:
5356
- - {path: tests/hfs/hfs-feature-files.spec.mjs, editions: [lite, full], codes: [HFS_FEATURE_FILE_BUDGET]}
5357
4812
  - {path: packages/hfs/templates/be/patterns/api, editions: [lite, full]}
5358
4813
  - {path: examples/lite-app/be/src/features/api/bookings, editions: [lite]}
5359
4814
  - {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]}
4815
+ 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
4816
 
4817
+ 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
4818
  - id: R293
5366
4819
  code: "STACK_TOOLING_REIMPLEMENTED"
5367
4820
  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 +4832,9 @@ rules:
5379
4832
  - {path: packages/hfs/templates/app/ci-workflows-lite/github/workflows/ci.yml, edition: lite}
5380
4833
  - {path: packages/hfs/templates/app/ci-workflows/github/workflows/ci.yml, edition: full}
5381
4834
  - {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}
4835
+ 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
4836
 
4837
+ 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
4838
  - id: R294
5391
4839
  code: "STACKS_DEPLOY_CONFIG_INVALID"
5392
4840
  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 +4850,9 @@ rules:
5402
4850
  exemplifiedBy:
5403
4851
  - {path: packages/hfs/templates/app/skeleton-lite/.starcistacks, edition: lite}
5404
4852
  - {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]}
4853
+ 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
4854
 
4855
+ 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
4856
  - id: R295
5412
4857
  code: "BE_MODULE_DEFINITION_MISSING"
5413
4858
  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."
@@ -5433,3 +4878,92 @@ rules:
5433
4878
  - {path: packages/eslint/be/module-shape.spec.mjs, editions: [lite, full], codes: [BE_MODULE_DEFINITION_MISSING]}
5434
4879
  witness:
5435
4880
  - {path: packages/eslint/be/module-shape.spec.mjs, editions: [lite, full], codes: [BE_MODULE_DEFINITION_MISSING]}
4881
+ - id: R296
4882
+ code: "CI_SECRET_SEALED"
4883
+ law: "A name declared in ci.secrets or ci.dependabot.secrets never names a key stored inside an app sealed .starcistacks/<env>/secrets/<member>.enc member. App runtime and CI custody are separate; checks inspect key names without decrypting or printing values."
4884
+ kinds: [check]
4885
+ gates: [settle, land, ci]
4886
+ failureCodes: ["CI_SECRET_SEALED"]
4887
+ enforcers:
4888
+ - {kind: hfs, id: ci-custody, at: scripts/hfs/rules/ci-custody.mjs}
4889
+ editions: [lite, full]
4890
+ docs:
4891
+ - {path: docs/application-stacks.md#r296, editions: [lite, full]}
4892
+ exemplifiedBy:
4893
+ - {path: examples/lite-app/.starcistacks/application-stacks.yaml, edition: lite}
4894
+ - {path: examples/ecommerce-app/.starcistacks/application-stacks.yaml, edition: full}
4895
+ - {path: examples/shape-slot/.starcistacks/application-stacks.yaml, edition: full}
4896
+ - {path: packages/hfs/templates/app/skeleton-lite/.starcistacks/application-stacks.yaml, edition: lite}
4897
+ - {path: packages/hfs/templates/app/skeleton/.starcistacks/application-stacks.yaml, edition: full}
4898
+ 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"
4899
+ 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"}
4900
+ - id: R297
4901
+ code: "APP_SECRET_IN_CI"
4902
+ law: "A sealed member key granted to an app container by a deploy grant never appears in ci.secrets or ci.vars. The grant environment, member and selected key determine app custody; online GitHub custody is verified by starci app ci verify."
4903
+ kinds: [check]
4904
+ gates: [settle, land, ci]
4905
+ failureCodes: ["APP_SECRET_IN_CI"]
4906
+ enforcers:
4907
+ - {kind: hfs, id: ci-custody, at: scripts/hfs/rules/ci-custody.mjs}
4908
+ editions: [lite, full]
4909
+ docs:
4910
+ - {path: docs/application-stacks.md#r297, editions: [lite, full]}
4911
+ exemplifiedBy:
4912
+ - {path: examples/lite-app/.starcistacks/application-stacks.yaml, edition: lite}
4913
+ - {path: examples/ecommerce-app/.starcistacks/application-stacks.yaml, edition: full}
4914
+ - {path: examples/shape-slot/.starcistacks/application-stacks.yaml, edition: full}
4915
+ - {path: packages/hfs/templates/app/skeleton-lite/.starcistacks/application-stacks.yaml, edition: lite}
4916
+ - {path: packages/hfs/templates/app/skeleton/.starcistacks/application-stacks.yaml, edition: full}
4917
+ 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"
4918
+ 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"}
4919
+ - id: R298
4920
+ code: "CI_DECLARATION_DRIFT"
4921
+ law: "Workflow secrets and vars references are declared in their matching top-level ci class, except automatic GITHUB_TOKEN. Non-optional Actions declarations are consumed by a workflow; Dependabot secrets need no Actions read. Service token and variable bindings name declarations in the matching class. Missing declarations produce migration findings; a tree with neither ci declarations nor references stays quiet."
4922
+ kinds: [check]
4923
+ gates: [settle, land, ci]
4924
+ failureCodes: ["CI_DECLARATION_DRIFT"]
4925
+ enforcers:
4926
+ - {kind: hfs, id: ci-custody, at: scripts/hfs/rules/ci-custody.mjs}
4927
+ editions: [lite, full]
4928
+ docs:
4929
+ - {path: docs/application-stacks.md#r298, editions: [lite, full]}
4930
+ exemplifiedBy:
4931
+ - {path: examples/lite-app/.starcistacks/application-stacks.yaml, edition: lite}
4932
+ - {path: examples/ecommerce-app/.starcistacks/application-stacks.yaml, edition: full}
4933
+ - {path: examples/shape-slot/.starcistacks/application-stacks.yaml, edition: full}
4934
+ - {path: packages/hfs/templates/app/skeleton-lite/.starcistacks/application-stacks.yaml, edition: lite}
4935
+ - {path: packages/hfs/templates/app/skeleton/.starcistacks/application-stacks.yaml, edition: full}
4936
+ 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"
4937
+ 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"}
4938
+ - id: R299
4939
+ code: "HFS_WORKFLOW_CONTEXT"
4940
+ law: "GitHub Actions expressions use only contexts available at their workflow key. Job env cannot read runner, job, steps or env; runner-local data paths belong to step env or shell RUNNER_TEMP. Every tracked workflow is checked in both app editions."
4941
+ kinds: [check]
4942
+ gates: [settle, land, ci]
4943
+ failureCodes: ["HFS_WORKFLOW_CONTEXT"]
4944
+ enforcers:
4945
+ - {kind: hfs, id: workflow-contexts, at: scripts/hfs/rules/workflow-contexts.mjs}
4946
+ editions: [lite, full]
4947
+ docs:
4948
+ - {path: docs/application-stacks.md#r299, editions: [lite, full]}
4949
+ exemplifiedBy:
4950
+ - {path: packages/hfs/templates/app/skeleton-lite/.starcistacks, edition: lite}
4951
+ - {path: packages/hfs/templates/app/skeleton/.starcistacks, edition: full}
4952
+ 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"
4953
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): no runtime spec retained", date: "2026-10-17"}
4954
+ - id: R300
4955
+ code: "FE_PUBLIC_BUILD_ARG_MISSING"
4956
+ law: "Every front-end app with a Dockerfile supplies each required NEXT_PUBLIC_* source/config/schema name through a Dockerfile ARG default or through that image's buildArgs.values/buildArgs.sealed.keys in every environment deploying the image. Source reads with literal string ?? or || fallbacks are optional. The finding names missing keys and environments at the Dockerfile; sealed values are never opened. CI release images use the same starci app stack build-args verb and environment as deployment."
4957
+ kinds: [check]
4958
+ gates: [settle, land, ci]
4959
+ failureCodes: ["FE_PUBLIC_BUILD_ARG_MISSING"]
4960
+ enforcers:
4961
+ - {kind: hfs, id: fe-build-args, at: scripts/hfs/rules/fe-build-args.mjs}
4962
+ editions: [lite, full]
4963
+ docs:
4964
+ - {path: docs/application-stacks.md#r300, editions: [lite, full]}
4965
+ exemplifiedBy:
4966
+ - {path: packages/hfs/templates/app/skeleton-lite/.starcistacks, edition: lite}
4967
+ - {path: packages/hfs/templates/app/skeleton/.starcistacks, edition: full}
4968
+ 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"
4969
+ witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): external smoke fixtures", date: "2026-10-17"}