@starci/eslint-canon-be 3.4.0 → 3.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +3 -0
- package/package.json +1 -1
- package/runtime/config.example.yaml +7 -6
- package/runtime/engine/config.mjs +10 -18
- package/runtime/engine/removed-vocabulary.mjs +0 -2
- package/runtime/knowledge/hfs/canon-pins.yaml +4 -4
- package/runtime/knowledge/hfs/rules.yaml +410 -967
- package/runtime/knowledge/hfs/slots.yaml +13 -24
- package/runtime/modules/kernel/removed-vocabulary.yaml +30 -0
- package/runtime/modules/models/runtimes.yaml +4 -6
- package/runtime/scripts/api/git/lib.mjs +3 -3
- package/runtime/scripts/hfs/architecture/config.mjs +1 -1
- package/runtime/scripts/hfs/architecture/index.mjs +1 -1
- package/runtime/scripts/hfs/architecture/supabase.mjs +1 -1
- package/runtime/scripts/hfs/architecture/tiers.mjs +1 -1
- package/runtime/scripts/hfs/manifest-shape.mjs +3 -3
- package/runtime/scripts/hfs/param-names.mjs +1 -1
- package/runtime/scripts/hfs/rule-catalog.mjs +3 -1
- package/runtime/scripts/hfs/slots.mjs +2 -2
- package/runtime/scripts/hfs/typescript-programs.mjs +0 -8
- package/runtime/scripts/lib/env.mjs +2 -2
- package/runtime/scripts/lib/git.mjs +1 -1
- package/runtime/scripts/lib/i18n.mjs +0 -2
- package/runtime/scripts/lib/language.mjs +1 -1
|
@@ -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
|
-
|
|
63
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
147
|
-
|
|
148
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
255
|
-
|
|
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
|
-
|
|
278
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
392
|
-
|
|
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
|
-
|
|
415
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
1312
|
-
|
|
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
|
-
|
|
1786
|
-
exemplifiedBy: [{"path":"packages/hfs/templates/be/patterns/api/graphql.input.ts.tpl","editions":["lite","full"]}
|
|
1787
|
-
witness:
|
|
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
|
-
|
|
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
|
-
|
|
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"}
|
|
1912
|
-
witness:
|
|
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
|
-
|
|
1940
|
-
|
|
1941
|
-
|
|
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
|
-
|
|
1953
|
-
|
|
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
|
-
|
|
2049
|
-
|
|
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
|
-
|
|
2067
|
-
|
|
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
|
-
|
|
2086
|
-
|
|
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
|
-
|
|
2197
|
-
|
|
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
|
-
|
|
2215
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
2257
|
-
|
|
2258
|
-
|
|
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
|
-
|
|
2276
|
-
|
|
2277
|
-
|
|
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
|
-
|
|
2295
|
-
|
|
2296
|
-
|
|
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
|
-
|
|
2314
|
-
|
|
2315
|
-
|
|
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: "
|
|
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
|
-
|
|
2333
|
-
|
|
2334
|
-
|
|
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
|
-
|
|
2352
|
-
|
|
2353
|
-
|
|
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
|
-
|
|
2363
|
-
|
|
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
|
-
|
|
2389
|
-
|
|
2390
|
-
|
|
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
|
-
|
|
2408
|
-
|
|
2409
|
-
|
|
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
|
-
|
|
2427
|
-
|
|
2428
|
-
|
|
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
|
-
|
|
2446
|
-
|
|
2447
|
-
|
|
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
|
-
|
|
2465
|
-
|
|
2466
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
2549
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
2740
|
-
|
|
2741
|
-
|
|
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
|
-
|
|
2754
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
2939
|
-
|
|
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
|
-
|
|
2956
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
3067
|
-
|
|
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
|
-
|
|
3140
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
3413
|
-
|
|
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
|
-
|
|
3430
|
-
|
|
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
|
-
|
|
3447
|
-
|
|
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
|
-
|
|
3462
|
-
|
|
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
|
-
|
|
3482
|
-
|
|
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
|
-
|
|
3497
|
-
|
|
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
|
-
|
|
3514
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
3548
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
3619
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
3660
|
-
|
|
3661
|
-
|
|
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
|
-
|
|
3677
|
-
|
|
3678
|
-
|
|
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
|
-
|
|
3694
|
-
|
|
3695
|
-
|
|
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
|
-
|
|
3711
|
-
|
|
3712
|
-
|
|
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
|
-
|
|
3722
|
-
|
|
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
|
-
|
|
3776
|
-
|
|
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
|
-
|
|
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
|
-
|
|
3797
|
-
- {path: tests/hfs-proofs/db-dynamic-ddl.spec.mjs, editions: [lite, full]}
|
|
3798
|
-
- {path: tests/hfs-proofs/db-policy-shape.spec.mjs, editions: [lite, full]}
|
|
3799
|
-
witness:
|
|
3800
|
-
- {path: tests/hfs-proofs/db-rls-required.spec.mjs, edition: lite, codes: [DB_RLS_REQUIRED]}
|
|
3801
|
-
- {path: tests/hfs-proofs/db-dynamic-ddl.spec.mjs, edition: lite, codes: [DB_DYNAMIC_DDL]}
|
|
3802
|
-
- {path: tests/hfs-proofs/db-policy-shape.spec.mjs, edition: lite, codes: [DB_POLICY_SHAPE]}
|
|
3803
|
-
- {path: tests/hfs-proofs/db-rls-required.spec.mjs, edition: full, codes: [DB_RLS_REQUIRED]}
|
|
3804
|
-
- {path: tests/hfs-proofs/db-dynamic-ddl.spec.mjs, edition: full, codes: [DB_DYNAMIC_DDL]}
|
|
3805
|
-
- {path: tests/hfs-proofs/db-policy-shape.spec.mjs, edition: full, codes: [DB_POLICY_SHAPE]}
|
|
3476
|
+
witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
|
|
3806
3477
|
law: "Row level security is code a parser can read: every `create table` (or `create table as`) in an exposed schema (`public` plus the config.toml `[api] schemas`) is followed, in the same migration, by `alter table <t> enable row level security` (and `force` for a table hfs.json `supabase.forceRls` declares); no `DO` block or function runs dynamic SQL that builds DDL or grants; a write or `for all` policy never uses `(true)`, `to anon`/`to public` is legal only on a `for select` policy named `*_public_read`, every policy is named `<table>_<role>_<action>`, and `service_role` is never granted."
|
|
3807
3478
|
kinds: [check, codemod]
|
|
3808
3479
|
gates: [settle, land, ci]
|
|
@@ -3813,45 +3484,25 @@ rules:
|
|
|
3813
3484
|
code: "DB_DEFINER_SAFE"
|
|
3814
3485
|
editions: [lite, full]
|
|
3815
3486
|
docs: [docs/lite-edition.md#r215]
|
|
3816
|
-
|
|
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
|
-
|
|
3839
|
-
- {path: tests/hfs-proofs/db-types-returned-collector.spec.mjs, editions: [lite, full], codes: [DB_TYPES_DRIFT]}
|
|
3840
|
-
- {path: tests/hfs-proofs/db-config-policy.spec.mjs, editions: [lite, full], codes: [DB_CONFIG_POLICY]}
|
|
3841
|
-
- {path: tests/hfs-proofs/db-types-drift.spec.mjs, editions: [lite, full], codes: [DB_TYPES_DRIFT]}
|
|
3501
|
+
specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
|
|
3842
3502
|
exemplifiedBy:
|
|
3843
3503
|
- {path: packages/hfs/templates/app/skeleton-lite/supabase/config.toml, edition: lite}
|
|
3844
|
-
- {path: tests/hfs-proofs/db-types-returned-collector.spec.mjs, editions: [lite, full]}
|
|
3845
|
-
- {path: tests/hfs-proofs/db-config-policy.spec.mjs, editions: [lite, full]}
|
|
3846
|
-
- {path: tests/hfs-proofs/db-types-drift.spec.mjs, editions: [lite, full]}
|
|
3847
3504
|
templateNa: "Database types are generated from each app migration set, not static templates; full-edition Supabase configuration is app-owned."
|
|
3848
|
-
witness:
|
|
3849
|
-
- {path: tests/hfs-proofs/db-types-returned-collector.spec.mjs, edition: lite, codes: [DB_TYPES_DRIFT]}
|
|
3850
|
-
- {path: tests/hfs-proofs/db-types-returned-collector.spec.mjs, edition: full, codes: [DB_TYPES_DRIFT]}
|
|
3851
|
-
- {path: tests/hfs-proofs/db-config-policy.spec.mjs, edition: lite, codes: [DB_CONFIG_POLICY]}
|
|
3852
|
-
- {path: tests/hfs-proofs/db-types-drift.spec.mjs, edition: lite, codes: [DB_TYPES_DRIFT]}
|
|
3853
|
-
- {path: tests/hfs-proofs/db-config-policy.spec.mjs, edition: full, codes: [DB_CONFIG_POLICY]}
|
|
3854
|
-
- {path: tests/hfs-proofs/db-types-drift.spec.mjs, edition: full, codes: [DB_TYPES_DRIFT]}
|
|
3505
|
+
witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
|
|
3855
3506
|
law: "The database configuration and its types are checked facts: `supabase/config.toml` carries no literal value under a credential key (the value is `env(NAME)`), `auth.jwt_expiry` is at most 3600, and signup, site url and redirect urls equal the Supabase block of hfs.json where it declares them; `supabase/types/database.types.ts` is committed and equals the text `contract:emit` regenerates from the migrations."
|
|
3856
3507
|
kinds: [check]
|
|
3857
3508
|
gates: [land, ci]
|
|
@@ -3862,23 +3513,11 @@ rules:
|
|
|
3862
3513
|
code: "FE_SUPABASE_CLIENT_OWNER"
|
|
3863
3514
|
editions: [lite, full]
|
|
3864
3515
|
docs: [docs/lite-edition.md#r217]
|
|
3865
|
-
|
|
3866
|
-
- {path: tests/hfs-proofs/fe-supabase-client-owner.spec.mjs, editions: [lite, full], codes: [FE_SUPABASE_CLIENT_OWNER]}
|
|
3867
|
-
- {path: tests/hfs-proofs/r217-backend-client-owner.spec.mjs, editions: [lite, full], codes: [BE_SUPABASE_CLIENT_OWNER]}
|
|
3868
|
-
- {path: tests/hfs-proofs/fe-service-role-forbidden.spec.mjs, editions: [lite, full], codes: [FE_SERVICE_ROLE_FORBIDDEN]}
|
|
3516
|
+
specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
|
|
3869
3517
|
exemplifiedBy:
|
|
3870
3518
|
- {path: packages/hfs/templates/fe/auth/supabase-client.ts.tpl, editions: [lite, full]}
|
|
3871
3519
|
- {path: packages/hfs/templates/be/skeleton-lite/src/modules/integrations/supabase/supabase.client.ts, edition: lite}
|
|
3872
|
-
|
|
3873
|
-
- {path: tests/hfs-proofs/r217-backend-client-owner.spec.mjs, editions: [lite, full]}
|
|
3874
|
-
- {path: tests/hfs-proofs/fe-service-role-forbidden.spec.mjs, editions: [lite, full]}
|
|
3875
|
-
witness:
|
|
3876
|
-
- {path: tests/hfs-proofs/fe-supabase-client-owner.spec.mjs, edition: lite, codes: [FE_SUPABASE_CLIENT_OWNER]}
|
|
3877
|
-
- {path: tests/hfs-proofs/r217-backend-client-owner.spec.mjs, edition: lite, codes: [BE_SUPABASE_CLIENT_OWNER]}
|
|
3878
|
-
- {path: tests/hfs-proofs/fe-service-role-forbidden.spec.mjs, edition: lite, codes: [FE_SERVICE_ROLE_FORBIDDEN]}
|
|
3879
|
-
- {path: tests/hfs-proofs/fe-supabase-client-owner.spec.mjs, edition: full, codes: [FE_SUPABASE_CLIENT_OWNER]}
|
|
3880
|
-
- {path: tests/hfs-proofs/r217-backend-client-owner.spec.mjs, edition: full, codes: [BE_SUPABASE_CLIENT_OWNER]}
|
|
3881
|
-
- {path: tests/hfs-proofs/fe-service-role-forbidden.spec.mjs, edition: full, codes: [FE_SERVICE_ROLE_FORBIDDEN]}
|
|
3520
|
+
witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
|
|
3882
3521
|
law: "Supabase has one door per side: on the front end `@supabase/supabase-js` and `@supabase/ssr` are imported only by `fe.modules.auth` and only their auth API is called (sign-in, sign-out, session, access token; never `.from`, `.rpc`, `.storage` or `.channel`, so the front end reads and writes no data through Supabase), and on the back end only `be.integrations.supabase` imports them, every back-end client carrying the committed `Database` type; the front end holds no credential: `fe/` names no service-role or `*_SECRET`, `*_PRIVATE`, `*_TOKEN`, `*_PASSWORD` value (public configuration is read once by `modules/config`)."
|
|
3883
3522
|
kinds: [check, design]
|
|
3884
3523
|
gates: [settle, land, ci]
|
|
@@ -3891,14 +3530,10 @@ rules:
|
|
|
3891
3530
|
editions: [lite, full]
|
|
3892
3531
|
docs: [docs/lite-edition.md#r219]
|
|
3893
3532
|
templateNa: "Full-edition Supabase verification is an optional integration with no managed verifier scaffold; lite has the referenced integration template."
|
|
3894
|
-
|
|
3895
|
-
- {path: tests/hfs-proofs/be-supabase-jwt-verified.spec.mjs, editions: [lite, full]}
|
|
3533
|
+
specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
|
|
3896
3534
|
exemplifiedBy:
|
|
3897
3535
|
- {path: packages/hfs/templates/be/skeleton-lite/src/modules/integrations/supabase/supabase.jwks.ts, edition: lite}
|
|
3898
|
-
|
|
3899
|
-
witness:
|
|
3900
|
-
- {path: tests/hfs-proofs/be-supabase-jwt-verified.spec.mjs, edition: lite, codes: [BE_SUPABASE_JWT_VERIFIED]}
|
|
3901
|
-
- {path: tests/hfs-proofs/be-supabase-jwt-verified.spec.mjs, edition: full, codes: [BE_SUPABASE_JWT_VERIFIED]}
|
|
3536
|
+
witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
|
|
3902
3537
|
law: "The principal is verified, never trusted: a back-end principal comes only from a Supabase access token verified against the project JWKS (signature, issuer, audience, expiry, pinned algorithm), never decoded unverified and never from the request body."
|
|
3903
3538
|
kinds: [check, design]
|
|
3904
3539
|
gates: [settle, land, ci]
|
|
@@ -3910,13 +3545,10 @@ rules:
|
|
|
3910
3545
|
editions: [lite]
|
|
3911
3546
|
editionWhy: "ruling:lite-backing-services assigns Supabase backing to lite; R220 adds lite's reduced custody tree and Supabase/FE literal scan, while R06 governs plaintext secret material in both editions."
|
|
3912
3547
|
docs: [docs/host-secrets.md#application-secret-rules]
|
|
3913
|
-
|
|
3914
|
-
- {path: tests/hfs/hfs-supabase-secrets.spec.mjs, edition: lite}
|
|
3548
|
+
specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
|
|
3915
3549
|
exemplifiedBy:
|
|
3916
3550
|
- {path: packages/hfs/templates/app/skeleton-lite/.sops.yaml, edition: lite}
|
|
3917
|
-
|
|
3918
|
-
witness:
|
|
3919
|
-
- {path: tests/hfs/hfs-supabase-secrets.spec.mjs, edition: lite}
|
|
3551
|
+
witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
|
|
3920
3552
|
law: "A lite app holds no secret material in the tree: root `.env*`, `secrets.env`, `.secrets/` and an `.enc` file outside `.starcistacks/<env>/secrets` are forbidden, and `fe/` and `supabase/` hold no Supabase token, JWT or connection string with a password; the one custody is the sealed `.starcistacks/<env>/secrets/<slug>.enc`."
|
|
3921
3553
|
kinds: [check]
|
|
3922
3554
|
gates: [settle, land, ci]
|
|
@@ -3929,14 +3561,11 @@ rules:
|
|
|
3929
3561
|
scope: runtime
|
|
3930
3562
|
editions: [lite, full]
|
|
3931
3563
|
docs: [docs/git-governance.md#r221]
|
|
3932
|
-
|
|
3564
|
+
specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
|
|
3933
3565
|
exemplifiedBy:
|
|
3934
3566
|
- {path: packages/hfs/templates/app/ci-workflows-lite/github/workflows/ci.yml, edition: lite}
|
|
3935
3567
|
- {path: packages/hfs/templates/app/ci-workflows/github/workflows/ci.yml, edition: full}
|
|
3936
|
-
|
|
3937
|
-
witness:
|
|
3938
|
-
- {path: tests/hfs-proofs/ci-triggers-release-only.spec.mjs, edition: lite, codes: [CI_TRIGGERS_RELEASE_ONLY]}
|
|
3939
|
-
- {path: tests/hfs-proofs/ci-triggers-release-only.spec.mjs, edition: full, codes: [CI_TRIGGERS_RELEASE_ONLY]}
|
|
3568
|
+
witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
|
|
3940
3569
|
kinds: [check]
|
|
3941
3570
|
gates: [runtime]
|
|
3942
3571
|
failureCodes: ["CI_TRIGGERS_RELEASE_ONLY"]
|
|
@@ -3949,17 +3578,14 @@ rules:
|
|
|
3949
3578
|
editions: [lite, full]
|
|
3950
3579
|
docs: [docs/git-governance.md#r222]
|
|
3951
3580
|
templateNa: "Release tags at HEAD and their finished changelog sections are authored release evidence, not app scaffold output."
|
|
3952
|
-
|
|
3953
|
-
|
|
3954
|
-
- {path: tests/hfs-proofs/release-notes.spec.mjs, editions: [lite, full]}
|
|
3955
|
-
witness:
|
|
3956
|
-
- {path: tests/hfs-proofs/release-notes.spec.mjs, edition: lite, codes: [RELEASE_NOTES]}
|
|
3957
|
-
- {path: tests/hfs-proofs/release-notes.spec.mjs, edition: full, codes: [RELEASE_NOTES]}
|
|
3581
|
+
specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
|
|
3582
|
+
witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
|
|
3958
3583
|
kinds: [check]
|
|
3959
3584
|
gates: [runtime]
|
|
3960
3585
|
failureCodes: ["RELEASE_NOTES"]
|
|
3961
3586
|
enforcers:
|
|
3962
3587
|
- {kind: runtime, id: release-notes, at: scripts/hfs/runtime-rules/release-notes.mjs}
|
|
3588
|
+
exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
|
|
3963
3589
|
- id: R223
|
|
3964
3590
|
code: "RIGHTS_ROLE_DENIED"
|
|
3965
3591
|
law: "By the caller's role, the command guard refuses git push, git tag, raw git commit/add/rm/mv, raw git synchronization writes, npm publish, a whole-suite run outside the release cut and unit.verify/e2e.verify, npm ci without the host lock, a release cut, and raw side-effecting tools; modules/kernel/command-policy.yaml is the one rule table read by both the PreToolUse guard and the PATH shim."
|
|
@@ -3969,6 +3595,7 @@ rules:
|
|
|
3969
3595
|
failureCodes: ["RIGHTS_ROLE_DENIED", "RIGHTS_GIT_PUSH", "RIGHTS_GIT_TAG", "RIGHTS_GIT_COMMIT", "RIGHTS_GIT_SYNC", "RIGHTS_NPM_PUBLISH", "RIGHTS_NPM_CI_UNLOCKED", "RIGHTS_SUITE_RUN", "RIGHTS_RELEASE_CUT", "RIGHTS_RAW_TOOL"]
|
|
3970
3596
|
enforcers:
|
|
3971
3597
|
- {kind: runtime, id: role-rights, at: scripts/hfs/runtime-rules/rights-policy.mjs}
|
|
3598
|
+
specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
|
|
3972
3599
|
- id: R224
|
|
3973
3600
|
code: "RIGHTS_PROTECTED_ZONE"
|
|
3974
3601
|
law: "The protected zone declared once in modules/kernel/protected-zone.yaml is edited only by the owner path; a supervisor self-upgrade files an owner proposal, and an op never writes the .claude runtime checkout."
|
|
@@ -3978,6 +3605,7 @@ rules:
|
|
|
3978
3605
|
failureCodes: ["RIGHTS_PROTECTED_ZONE", "RIGHTS_OP_RUNTIME_WRITE"]
|
|
3979
3606
|
enforcers:
|
|
3980
3607
|
- {kind: runtime, id: protected-zone, at: scripts/hfs/runtime-rules/rights-policy.mjs}
|
|
3608
|
+
specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
|
|
3981
3609
|
- id: R225
|
|
3982
3610
|
code: "RT_HOOK_SHAPE"
|
|
3983
3611
|
law: "The app hook templates keep the gate model: pre-commit is L0 only (no typecheck, no test run); pre-push checks the release gate (the starci-release L4 record, refs/backup/, v[0-9] tags; the runtime's own hook is scripts/guards/release-push-gate.mjs, which judges main and v* tags against the release definition and lets every other ref through) and runs no npm test, jest, typecheck or lint."
|
|
@@ -3987,35 +3615,14 @@ rules:
|
|
|
3987
3615
|
failureCodes: ["RT_HOOK_SHAPE", "RIGHTS_PUSH_NOT_RELEASE"]
|
|
3988
3616
|
enforcers:
|
|
3989
3617
|
- {kind: runtime, id: hook-shape, at: scripts/hfs/runtime-rules/hook-shape.mjs}
|
|
3990
|
-
|
|
3991
|
-
code: "RT_SPEC_OVER_BUDGET"
|
|
3992
|
-
law: "Every recorded spec duration should stay within the shared per-file land budget in modules/kernel/spec-durations.yaml: an over-budget spec is an advisory info finding ranked by its excess (it does not fail the check stage), and every recorded spec path must still exist. An over-budget spec is repaired without removing tests or assertions: share a per-process fixture, remove per-test install or boot, inject the clock and never lengthen a timeout; stale rows are refreshed from the current land record."
|
|
3993
|
-
scope: runtime
|
|
3994
|
-
kinds: [check]
|
|
3995
|
-
gates: [runtime]
|
|
3996
|
-
failureCodes: ["RT_SPEC_OVER_BUDGET", "RT_SPEC_BUDGET_STALE"]
|
|
3997
|
-
enforcers:
|
|
3998
|
-
- {kind: runtime, id: spec-budget, at: scripts/checks/check-spec-budget.mjs}
|
|
3999
|
-
editions: [lite, full]
|
|
4000
|
-
docs: [docs/source-process.md#r226]
|
|
4001
|
-
templateNa: "The runtime land-duration record is measured repository data, not an app scaffold surface."
|
|
4002
|
-
proves: [tests/hfs-proofs/runtime-source-checks.spec.mjs]
|
|
4003
|
-
exemplifiedBy:
|
|
4004
|
-
- {path: tests/hfs-proofs/runtime-source-checks.spec.mjs, editions: [lite, full], codes: [RT_SPEC_OVER_BUDGET, RT_SPEC_BUDGET_STALE]}
|
|
4005
|
-
witness:
|
|
4006
|
-
- {path: tests/hfs-proofs/runtime-source-checks.spec.mjs, editions: [lite, full], codes: [RT_SPEC_OVER_BUDGET, RT_SPEC_BUDGET_STALE]}
|
|
3618
|
+
specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
|
|
4007
3619
|
- id: R227
|
|
4008
3620
|
code: "RT_SYNTAX_INVALID"
|
|
4009
3621
|
editions: [lite, full]
|
|
4010
3622
|
docs: [docs/source-process.md#r227]
|
|
4011
3623
|
templateNa: "The runtime syntax check judges tracked authored JavaScript, not a scaffolded application surface."
|
|
4012
|
-
|
|
4013
|
-
|
|
4014
|
-
exemplifiedBy:
|
|
4015
|
-
- {path: tests/hfs-runtime-rules/runtime-syntax.spec.mjs, editions: [lite, full]}
|
|
4016
|
-
witness:
|
|
4017
|
-
- {path: tests/hfs-runtime-rules/runtime-syntax.spec.mjs, edition: lite, codes: [RT_SYNTAX_INVALID]}
|
|
4018
|
-
- {path: tests/hfs-runtime-rules/runtime-syntax.spec.mjs, edition: full, codes: [RT_SYNTAX_INVALID]}
|
|
3624
|
+
specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
|
|
3625
|
+
witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
|
|
4019
3626
|
law: "Every git-tracked .mjs, .cjs and .js file parses as JavaScript, including tests and package sources; node_modules, generated roots of ruleParams.runtime.generated and vendored build output are outside the authored-source scope. The runtime folder's Node-exact syntax pass remains in place, while this batched in-process pass extends coverage to the whole tracked repository and reports every parser diagnostic at its file and line."
|
|
4020
3627
|
scope: runtime
|
|
4021
3628
|
kinds: [check]
|
|
@@ -4023,6 +3630,7 @@ rules:
|
|
|
4023
3630
|
failureCodes: ["RT_SYNTAX_INVALID"]
|
|
4024
3631
|
enforcers:
|
|
4025
3632
|
- {kind: runtime, id: syntax, at: scripts/hfs/runtime-rules/syntax.mjs}
|
|
3633
|
+
exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
|
|
4026
3634
|
- id: R228
|
|
4027
3635
|
code: "RT_IDENTIFIER_UNDECLARED"
|
|
4028
3636
|
law: "Every identifier a runtime ES module (scripts/, engine/ without the vendored yaml bundle, ui/api/, packages/cli/bin and src) reads or writes resolves, by scope analysis over its TypeScript syntax tree, to a declaration, import, parameter or Node global of an enclosing scope. A re-export (export {x} from './y.mjs') binds x in no local scope; require, module, exports and __dirname are not globals of a module; browser globals resolve only inside a function that a module hands to page.evaluate, here or through an import. A name a refactor left behind is refused before the line that reads it runs."
|
|
@@ -4035,14 +3643,12 @@ rules:
|
|
|
4035
3643
|
editions: [lite, full]
|
|
4036
3644
|
docs: [docs/source-process.md#r228]
|
|
4037
3645
|
templateNa: "This check scans authored runtime ES modules; app scaffolds do not contain these harness modules."
|
|
4038
|
-
|
|
4039
|
-
|
|
4040
|
-
|
|
4041
|
-
witness:
|
|
4042
|
-
- {path: tests/hfs-proofs/runtime-source-checks.spec.mjs, editions: [lite, full], codes: [RT_IDENTIFIER_UNDECLARED]}
|
|
3646
|
+
specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
|
|
3647
|
+
witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
|
|
3648
|
+
exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
|
|
4043
3649
|
- id: R229
|
|
4044
3650
|
code: "RT_REMOVED_VOCABULARY"
|
|
4045
|
-
law: "No text an agent or the owner reads teaches a spelling the runtime refuses. The refused names - config keys, routing-bias fields, verbs, flags, codes and vocabulary - are the one list modules/kernel/removed-vocabulary.yaml, each with its replacement and the release that removed it; the config and routing-bias refusals read the same list. Every tracked file of skills/, docs/, README.md, CONTEXT.md, CONTRIBUTING.md, modules/ and knowledge/ (Markdown and yaml) is scanned line by line, and a line that spells a listed name is a finding naming file:line, the name and its replacement
|
|
3651
|
+
law: "No text an agent or the owner reads teaches a spelling the runtime refuses. The refused names - config keys, routing-bias fields, verbs, flags, codes and vocabulary - are the one list modules/kernel/removed-vocabulary.yaml, each with its replacement and the release that removed it; the config and routing-bias refusals read the same list. Every tracked file of skills/, docs/, README.md, CONTEXT.md, CONTRIBUTING.md, modules/ and knowledge/ (Markdown and yaml) is scanned line by line, and a line that spells a listed name is a finding naming file:line, the name and its replacement unless the file is the list, CHANGELOG.md, or the line or block carries the [removed-list] marker (a marker alone on a comment line covers the lines up to the next blank one). Removing or renaming a key, flag, verb, field or code adds its entry to the list in the same commit."
|
|
4046
3652
|
scope: runtime
|
|
4047
3653
|
kinds: [check]
|
|
4048
3654
|
gates: [runtime]
|
|
@@ -4052,11 +3658,9 @@ rules:
|
|
|
4052
3658
|
editions: [lite, full]
|
|
4053
3659
|
docs: [docs/source-process.md#r229]
|
|
4054
3660
|
templateNa: "The removed-name catalog and authored runtime instructions are maintained repository surfaces, not app scaffold output."
|
|
4055
|
-
|
|
4056
|
-
|
|
4057
|
-
|
|
4058
|
-
witness:
|
|
4059
|
-
- {path: tests/hfs-proofs/runtime-source-checks.spec.mjs, editions: [lite, full], codes: [RT_REMOVED_VOCABULARY]}
|
|
3661
|
+
specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
|
|
3662
|
+
witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
|
|
3663
|
+
exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
|
|
4060
3664
|
- id: R230
|
|
4061
3665
|
code: "RT_PROSE_COMMAND_UNKNOWN"
|
|
4062
3666
|
law: "A command an instruction shows exists as written. Every `starci <group> <verb>` in a backticked span, fenced code line or yaml example item of skills/, docs/, README.md, CONTEXT.md, CONTRIBUTING.md and modules/ names a verb of the CLI catalog (modules/cli/commands) in a catalogued group, and every --flag on it is a flag of that verb or a global flag; the text after a lone -- belongs to another program and a [removed-list] marked line is exempt. The catalog is generated into the valid set, never typed twice."
|
|
@@ -4064,16 +3668,14 @@ rules:
|
|
|
4064
3668
|
editions: [lite, full]
|
|
4065
3669
|
docs: [docs/debugging.md#r230-instruction-commands]
|
|
4066
3670
|
templateNa: "Runtime instruction and contract self-checks judge authored runtime surfaces; application scaffolds do not contain this surface."
|
|
4067
|
-
|
|
4068
|
-
|
|
4069
|
-
- {path: tests/checks/runtime-contracts-l14.spec.mjs, editions: [lite, full]}
|
|
4070
|
-
witness:
|
|
4071
|
-
- {path: tests/checks/runtime-contracts-l14.spec.mjs, editions: [lite, full]}
|
|
3671
|
+
specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
|
|
3672
|
+
witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
|
|
4072
3673
|
kinds: [check]
|
|
4073
3674
|
gates: [runtime]
|
|
4074
3675
|
failureCodes: ["RT_PROSE_COMMAND_UNKNOWN"]
|
|
4075
3676
|
enforcers:
|
|
4076
3677
|
- {kind: runtime, id: prose-commands, at: scripts/checks/check-prose-commands.mjs}
|
|
3678
|
+
exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
|
|
4077
3679
|
- id: R231
|
|
4078
3680
|
code: "RT_DOCUMENTED_DEFAULT_DRIFT"
|
|
4079
3681
|
law: "A default a document states equals the value the code reads. A document states a default by citing its key - default <value> = `<key>` - where the key is a config.yaml path (resolved through the validator's settings reader, so an absent block yields its code default) or <yaml file under modules/>:<dotted path>; the check resolves the key and compares, and a key that resolves to nothing is a finding. docs/, README.md, CONTEXT.md, config.example.yaml and modules/ prose and yaml are scanned; a bare number stated as a default without its key is not judged, so the owner of a default is cited, never retyped."
|
|
@@ -4081,16 +3683,14 @@ rules:
|
|
|
4081
3683
|
editions: [lite, full]
|
|
4082
3684
|
docs: [docs/debugging.md#r231-documented-defaults]
|
|
4083
3685
|
templateNa: "Runtime instruction and contract self-checks judge authored runtime surfaces; application scaffolds do not contain this surface."
|
|
4084
|
-
|
|
4085
|
-
|
|
4086
|
-
- {path: tests/checks/runtime-contracts-l14.spec.mjs, editions: [lite, full]}
|
|
4087
|
-
witness:
|
|
4088
|
-
- {path: tests/checks/runtime-contracts-l14.spec.mjs, editions: [lite, full]}
|
|
3686
|
+
specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
|
|
3687
|
+
witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
|
|
4089
3688
|
kinds: [check]
|
|
4090
3689
|
gates: [runtime]
|
|
4091
3690
|
failureCodes: ["RT_DOCUMENTED_DEFAULT_DRIFT"]
|
|
4092
3691
|
enforcers:
|
|
4093
3692
|
- {kind: runtime, id: documented-defaults, at: scripts/checks/check-documented-defaults.mjs}
|
|
3693
|
+
exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
|
|
4094
3694
|
- id: R232
|
|
4095
3695
|
code: "RT_ROLES_CONTRACT_DRIFT"
|
|
4096
3696
|
law: "A role is described once. modules/kernel/roles.yaml holds, per role, its scope, what it does, what it must clean up, what it never does, whom it reports to and who oversees it; a Markdown surface of the role carries the block generated from it, a yaml or script surface cites modules/kernel/roles.yaml#<role>, and no surface teaches a spelling the role's contradicts list names."
|
|
@@ -4098,45 +3698,36 @@ rules:
|
|
|
4098
3698
|
editions: [lite, full]
|
|
4099
3699
|
docs: [docs/debugging.md#r232-generated-role-contracts]
|
|
4100
3700
|
templateNa: "Runtime instruction and contract self-checks judge authored runtime surfaces; application scaffolds do not contain this surface."
|
|
4101
|
-
|
|
4102
|
-
|
|
4103
|
-
- {path: tests/checks/runtime-contracts-l14.spec.mjs, editions: [lite, full]}
|
|
4104
|
-
witness:
|
|
4105
|
-
- {path: tests/checks/runtime-contracts-l14.spec.mjs, editions: [lite, full]}
|
|
3701
|
+
specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
|
|
3702
|
+
witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
|
|
4106
3703
|
kinds: [check]
|
|
4107
3704
|
gates: [runtime]
|
|
4108
3705
|
failureCodes: ["RT_ROLES_CONTRACT_DRIFT"]
|
|
4109
3706
|
enforcers:
|
|
4110
3707
|
- {kind: runtime, id: roles-contract, at: scripts/checks/check-roles-contract.mjs}
|
|
3708
|
+
exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
|
|
4111
3709
|
- id: R233
|
|
4112
3710
|
code: "RT_EDGE_CASE_REGISTRY"
|
|
4113
|
-
law: "Every edge case met is a declared entry of modules/reconciler/edge-cases.yaml with its family, its real occurrence and a status of covered or open; a covered entry names the rule that handles it and
|
|
3711
|
+
law: "Every edge case met is a declared entry of modules/reconciler/edge-cases.yaml with its family, its real occurrence and a status of covered or open; a covered entry names the rule that handles it and that file exists, a named spec is a package spec or the scaffold e2e that exists (never a runtime test, owner ruling no-runtime-specs), and an open entry says why."
|
|
4114
3712
|
scope: runtime
|
|
4115
3713
|
editions: [lite, full]
|
|
4116
3714
|
docs: [docs/debugging.md#r233-edge-case-evidence]
|
|
4117
3715
|
templateNa: "Runtime instruction and contract self-checks judge authored runtime surfaces; application scaffolds do not contain this surface."
|
|
4118
|
-
|
|
4119
|
-
|
|
4120
|
-
- {path: tests/checks/runtime-contracts-l14.spec.mjs, editions: [lite, full]}
|
|
4121
|
-
witness:
|
|
4122
|
-
- {path: tests/checks/runtime-contracts-l14.spec.mjs, editions: [lite, full]}
|
|
3716
|
+
specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
|
|
3717
|
+
witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
|
|
4123
3718
|
kinds: [check]
|
|
4124
3719
|
gates: [runtime]
|
|
4125
3720
|
failureCodes: ["RT_EDGE_CASE_REGISTRY"]
|
|
4126
3721
|
enforcers:
|
|
4127
3722
|
- {kind: runtime, id: edge-case-registry, at: scripts/checks/check-edge-case-registry.mjs}
|
|
3723
|
+
exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
|
|
4128
3724
|
- id: R234
|
|
4129
3725
|
code: "RT_SECRET_TRACKED"
|
|
4130
3726
|
editions: [lite, full]
|
|
4131
3727
|
docs: [docs/application-stacks.md#where-a-secret-may-live]
|
|
4132
3728
|
templateNa: "The public runtime repository secret policy judges Git-tracked custody paths; application scaffolds do not contain runtime host secrets."
|
|
4133
|
-
|
|
4134
|
-
|
|
4135
|
-
exemplifiedBy:
|
|
4136
|
-
- {path: tests/checks/secret-tracked.spec.mjs, editions: [lite, full]}
|
|
4137
|
-
witness:
|
|
4138
|
-
- {path: tests/checks/secret-tracked.spec.mjs, edition: lite}
|
|
4139
|
-
- {path: tests/checks/secret-tracked.spec.mjs, edition: full}
|
|
3729
|
+
specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
|
|
3730
|
+
witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
|
|
4140
3731
|
law: "The runtime repository is public and tracks no secret material, not even ciphertext: no tracked *.enc member and no tracked secret.env or .env file, except the paths ruleParams.runtime.heldSecrets names with their reason (a list that only shrinks). Every secret the host needs lives in the one untracked .claude/secret.env, read only through engine/secrets.mjs, its names listed in the tracked secret.env.example; a product repository keeps its own custody in its own repository. Two Sonar servers, no overlap: SonarCloud serves everything that lives in the runtime repository (the runtime and the example apps, token SONAR_TOKEN), the self-hosted ext/sonar serves product repositories only."
|
|
4141
3732
|
scope: runtime
|
|
4142
3733
|
kinds: [check]
|
|
@@ -4144,6 +3735,7 @@ rules:
|
|
|
4144
3735
|
failureCodes: ["RT_SECRET_TRACKED"]
|
|
4145
3736
|
enforcers:
|
|
4146
3737
|
- {kind: runtime, id: secret-tracked, at: scripts/hfs/runtime-rules/secret-tracked.mjs}
|
|
3738
|
+
exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
|
|
4147
3739
|
- id: R235
|
|
4148
3740
|
code: "SCAN_SMELL"
|
|
4149
3741
|
editions: [lite, full]
|
|
@@ -4185,13 +3777,8 @@ rules:
|
|
|
4185
3777
|
editions: [lite, full]
|
|
4186
3778
|
docs: [docs/debugging.md#r236]
|
|
4187
3779
|
templateNa: "Runtime release-history approval is checked against committed gates and owner rulings; product scaffolding has no runtime release history to generate."
|
|
4188
|
-
|
|
4189
|
-
|
|
4190
|
-
exemplifiedBy:
|
|
4191
|
-
- {path: tests/supervisor/gate-loosening.spec.mjs, editions: [lite, full]}
|
|
4192
|
-
witness:
|
|
4193
|
-
- {path: tests/supervisor/gate-loosening.spec.mjs, edition: lite}
|
|
4194
|
-
- {path: tests/supervisor/gate-loosening.spec.mjs, edition: full}
|
|
3780
|
+
specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
|
|
3781
|
+
witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
|
|
4195
3782
|
law: "A change that loosens a gate or check is owner-class: a check removed from a gate file's list, a floor lowered or a ceiling raised there, an allowlist entry added, a spec deleted or weakened or skipped together with product code (modules/kernel/gate-loosening.yaml). It lands, and passes the check, only when the tree it is judged against already holds the owner's approval of exactly that loosening, an owner-rulings entry gate-loosening-<fingerprint>."
|
|
4196
3783
|
scope: runtime
|
|
4197
3784
|
kinds: [check]
|
|
@@ -4199,18 +3786,14 @@ rules:
|
|
|
4199
3786
|
failureCodes: ["RT_GATE_LOOSENING"]
|
|
4200
3787
|
enforcers:
|
|
4201
3788
|
- {kind: runtime, id: gate-loosening, at: scripts/checks/check-gate-loosening.mjs}
|
|
3789
|
+
exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
|
|
4202
3790
|
- id: R237
|
|
4203
3791
|
code: "RT_REVISION_SCOPE"
|
|
4204
3792
|
editions: [lite, full]
|
|
4205
3793
|
docs: [docs/debugging.md#r237]
|
|
4206
3794
|
templateNa: "The runtime revision-scope table and derived engine import graph are runtime authoring surfaces, not generated application files."
|
|
4207
|
-
|
|
4208
|
-
|
|
4209
|
-
exemplifiedBy:
|
|
4210
|
-
- {path: tests/reconciler/revision-scope.spec.mjs, editions: [lite, full]}
|
|
4211
|
-
witness:
|
|
4212
|
-
- {path: tests/reconciler/revision-scope.spec.mjs, edition: lite}
|
|
4213
|
-
- {path: tests/reconciler/revision-scope.spec.mjs, edition: full}
|
|
3795
|
+
specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
|
|
3796
|
+
witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
|
|
4214
3797
|
law: "What a change of the runtime tree asks of each role is declared once, in modules/kernel/revision-scope.yaml: every tracked path matches a row, the engine-loaded files are derived from the import graph of the engine's entries and never hand-listed, the files each seat's launch prompt is built from are the files its generator reads, and a wording-only declaration holds only for an edit that keeps the file's structure."
|
|
4215
3798
|
scope: runtime
|
|
4216
3799
|
kinds: [check]
|
|
@@ -4218,6 +3801,7 @@ rules:
|
|
|
4218
3801
|
failureCodes: ["RT_REVISION_SCOPE"]
|
|
4219
3802
|
enforcers:
|
|
4220
3803
|
- {kind: runtime, id: revision-scope, at: scripts/checks/check-revision-scope.mjs}
|
|
3804
|
+
exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
|
|
4221
3805
|
- id: R238
|
|
4222
3806
|
code: "RT_EVENT_SPILL_BYPASS"
|
|
4223
3807
|
law: "A ledger event payload that grows with its input (a file list, a manifest, a digest, a report, a critique, a menu) goes to the blob store through the one path of appendEvent: engine/db/event-compact.mjs eventPayloadRecord keeps a bounded inline view of at most 16 KiB and the whole payload behind events.payload_sha, and readers resolve it through engine/db/event-payload.mjs. No runtime source file other than engine/db/ledger.mjs and engine/db/event-compact.mjs passes a payloadSha to a write, catches the payload-too-large refusal to spill by hand, or inserts into the events table directly. Specs, tests, node_modules, the generated runtime copies and packages are out of scope."
|
|
@@ -4225,16 +3809,14 @@ rules:
|
|
|
4225
3809
|
editions: [lite, full]
|
|
4226
3810
|
docs: [docs/ledger-db.md#the-storage-convention-owner-ruling-2026-10-09]
|
|
4227
3811
|
templateNa: "These runtime checker inputs are maintained in the runtime repository, not scaffolded in a product app."
|
|
4228
|
-
|
|
4229
|
-
|
|
4230
|
-
- {path: tests/checks/runtime-integrity-coverage.spec.mjs, editions: [lite, full], codes: [RT_EVENT_SPILL_BYPASS]}
|
|
4231
|
-
witness:
|
|
4232
|
-
- {path: tests/checks/runtime-integrity-coverage.spec.mjs, editions: [lite, full], codes: [RT_EVENT_SPILL_BYPASS]}
|
|
3812
|
+
specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
|
|
3813
|
+
witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
|
|
4233
3814
|
kinds: [check]
|
|
4234
3815
|
gates: [runtime]
|
|
4235
3816
|
failureCodes: ["RT_EVENT_SPILL_BYPASS"]
|
|
4236
3817
|
enforcers:
|
|
4237
3818
|
- {kind: runtime, id: event-spill, at: scripts/checks/check-event-spill.mjs}
|
|
3819
|
+
exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
|
|
4238
3820
|
- id: R239
|
|
4239
3821
|
code: "RT_STORAGE_UNDECLARED"
|
|
4240
3822
|
law: "Content lives as a file in the content-addressed blob store under the runtime state dir (<runtime root>/.runtime/artifacts, engine/db/blob.mjs) and a database row holds only the reference (the sha) plus the small scalars it is queried by (owner ruling 2026-10-09). Always content, whatever its size: a report, a critique or verdict, a prompt or dispatch contract, a read manifest, a list of files, a log or command output, a menu or digest snapshot, an image or render, a diff. What may stay inline: ids, states, timestamps, counts, short codes and one-line reasons up to 256 bytes; any other free text up to 1024 bytes; a payload of any size is class spill (appendEvent and supEvent keep the whole payload behind the sha and a small inline form). Every text column of the product ledger and of machine.sqlite is declared in modules/schemas/storage-convention.yaml with its class (scalar, bounded, reference, spill, migrate), so a new table or column cannot appear without one; a column that holds content inline today is class migrate with its measured size, and the migration to a reference is a proposed runtime step, idempotent and journalled, never a hand rewrite of a live store."
|
|
@@ -4242,16 +3824,14 @@ rules:
|
|
|
4242
3824
|
editions: [lite, full]
|
|
4243
3825
|
docs: [docs/ledger-db.md#the-storage-convention-owner-ruling-2026-10-09]
|
|
4244
3826
|
templateNa: "These runtime checker inputs are maintained in the runtime repository, not scaffolded in a product app."
|
|
4245
|
-
|
|
4246
|
-
|
|
4247
|
-
- {path: tests/checks/runtime-integrity-coverage.spec.mjs, editions: [lite, full], codes: [RT_STORAGE_UNDECLARED]}
|
|
4248
|
-
witness:
|
|
4249
|
-
- {path: tests/checks/runtime-integrity-coverage.spec.mjs, editions: [lite, full], codes: [RT_STORAGE_UNDECLARED]}
|
|
3827
|
+
specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
|
|
3828
|
+
witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
|
|
4250
3829
|
kinds: [check]
|
|
4251
3830
|
gates: [runtime]
|
|
4252
3831
|
failureCodes: ["RT_STORAGE_UNDECLARED"]
|
|
4253
3832
|
enforcers:
|
|
4254
3833
|
- {kind: runtime, id: storage-convention, at: scripts/checks/check-storage-convention.mjs}
|
|
3834
|
+
exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
|
|
4255
3835
|
- id: R240
|
|
4256
3836
|
code: "RT_ROOT_ADHOC"
|
|
4257
3837
|
law: "Which directory a component reads or writes is decided in one module, scripts/lib/roots.mjs: the runtime tree, its state directory, the temp root, the invocation directory, the Work directory name, the order in which two trees that can hold the same record are tried (the tree the work happens in first, then the product's main checkout: workDirHolding, workRecordPath) and the order a tool is looked up (the tree the work happens in, then the project, the runtime's own install last: toolSearchDirs). A runtime source file does not resolve a root by itself: it neither spells process.cwd() nor the Work directory name as a literal outside that module more often than the tree the check landed on held it: a file keeps the count it had and only loses it as it is converted, and a new file starts at none. Four times in two days a component read or wrote the wrong tree because it resolved the directory itself."
|
|
@@ -4259,16 +3839,14 @@ rules:
|
|
|
4259
3839
|
editions: [lite, full]
|
|
4260
3840
|
docs: [docs/architecture.md#r240]
|
|
4261
3841
|
templateNa: "These runtime checker inputs are maintained in the runtime repository, not scaffolded in a product app."
|
|
4262
|
-
|
|
4263
|
-
|
|
4264
|
-
- {path: tests/checks/runtime-integrity-coverage.spec.mjs, editions: [lite, full], codes: [RT_ROOT_ADHOC]}
|
|
4265
|
-
witness:
|
|
4266
|
-
- {path: tests/checks/runtime-integrity-coverage.spec.mjs, editions: [lite, full], codes: [RT_ROOT_ADHOC]}
|
|
3842
|
+
specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
|
|
3843
|
+
witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
|
|
4267
3844
|
kinds: [check]
|
|
4268
3845
|
gates: [runtime]
|
|
4269
3846
|
failureCodes: ["RT_ROOT_ADHOC"]
|
|
4270
3847
|
enforcers:
|
|
4271
3848
|
- {kind: runtime, id: root-adhoc, at: scripts/checks/check-root-adhoc.mjs}
|
|
3849
|
+
exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
|
|
4272
3850
|
- id: R241
|
|
4273
3851
|
code: "RT_HELD_UNSURFACED"
|
|
4274
3852
|
law: "A failure code the catalogue gives to the Supervisor or the owner as a runtime fault is a state that role must be able to learn of; a stop that nobody is told of stands for hours until someone reads source. Each such entry of modules/kernel/failure-codes.yaml names the house mechanism that reaches its owner (surfacedBy: decision-item, sla-clock, incident, digest, notifier, caller or open) with surfacedAs (the item kind, clock code, incident kind, digest problem line or urgent class) and surfacedAt (the file that does it), and the check proves the mechanism exists and is wired in that file: the kind is a Decision Item kind and the file opens items naming it, the code is an SLA code with an owner and the file sets its clock, the problem line is a departure of the operating standard, a caller is a verb the owning role ran itself and never a reconciler file (a loop is no owner). An entry nothing reaches is surfacedBy open and names an open edge-case registry entry with the exact reason; it is never exempted silently."
|
|
@@ -4276,16 +3854,14 @@ rules:
|
|
|
4276
3854
|
editions: [lite, full]
|
|
4277
3855
|
docs: [docs/debugging.md#r241]
|
|
4278
3856
|
templateNa: "These runtime checker inputs are maintained in the runtime repository, not scaffolded in a product app."
|
|
4279
|
-
|
|
4280
|
-
|
|
4281
|
-
- {path: tests/checks/runtime-integrity-coverage.spec.mjs, editions: [lite, full], codes: [RT_HELD_UNSURFACED]}
|
|
4282
|
-
witness:
|
|
4283
|
-
- {path: tests/checks/runtime-integrity-coverage.spec.mjs, editions: [lite, full], codes: [RT_HELD_UNSURFACED]}
|
|
3857
|
+
specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
|
|
3858
|
+
witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
|
|
4284
3859
|
kinds: [check]
|
|
4285
3860
|
gates: [runtime]
|
|
4286
3861
|
failureCodes: ["RT_HELD_UNSURFACED"]
|
|
4287
3862
|
enforcers:
|
|
4288
3863
|
- {kind: runtime, id: held-surfacing, at: scripts/checks/check-held-surfacing.mjs}
|
|
3864
|
+
exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
|
|
4289
3865
|
- id: R242
|
|
4290
3866
|
code: "RT_OP_JUDGE_UNDECLARED"
|
|
4291
3867
|
law: "Every op declares who judges its product (principle P2: the maker never judges its own work). The contract of each op (modules/ops/ops/<op>.yaml) carries the required field `judge`, a list of at least one entry, each with a one-line why: machine (independent measures the runtime owns or re-runs at settle, named from modules/kernel/op-judges.yaml, and the contract proofs they rely on; a test file the same attempt wrote is never one by itself), critic (the independent Critic and its rubric, declared exactly for the op kinds that modules/kernel/critic.yaml coverage marks covered), owner (only where modules/kernel/op-judges.yaml ownerGates holds an owner gate) and next-leg (a registered reviewing leg whose contract is to review this product). Nobody cannot be declared. The registry and the contracts are checked against the runtime's own tables (op-gate and sonar-gate enforcedOps, opProofs, proof media, the Critic coverage), so the declarations and what the runtime does cannot drift apart. Surfaced in the full status text of a leg and in the op prompt."
|
|
@@ -4293,29 +3869,24 @@ rules:
|
|
|
4293
3869
|
editions: [lite, full]
|
|
4294
3870
|
docs: [docs/ops.md#r242]
|
|
4295
3871
|
templateNa: "These runtime checker inputs are maintained in the runtime repository, not scaffolded in a product app."
|
|
4296
|
-
|
|
4297
|
-
|
|
4298
|
-
- {path: tests/checks/runtime-integrity-coverage.spec.mjs, editions: [lite, full], codes: [RT_OP_JUDGE_UNDECLARED]}
|
|
4299
|
-
witness:
|
|
4300
|
-
- {path: tests/checks/runtime-integrity-coverage.spec.mjs, editions: [lite, full], codes: [RT_OP_JUDGE_UNDECLARED]}
|
|
3872
|
+
specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
|
|
3873
|
+
witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
|
|
4301
3874
|
kinds: [check]
|
|
4302
3875
|
gates: [runtime]
|
|
4303
3876
|
failureCodes: ["RT_OP_JUDGE_UNDECLARED"]
|
|
4304
3877
|
enforcers:
|
|
4305
3878
|
- {kind: runtime, id: op-judge, at: scripts/checks/check-op-judge.mjs}
|
|
3879
|
+
exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
|
|
4306
3880
|
- id: R243
|
|
4307
3881
|
code: "FE_SERVER_ACTION_FORBIDDEN"
|
|
4308
3882
|
editions: [lite, full]
|
|
4309
3883
|
docs: [docs/code-pattern-enforcement.md#r243]
|
|
4310
3884
|
proves:
|
|
4311
|
-
- {path: tests/hfs/frontend-boundary-coverage.spec.mjs, editions: [lite, full]}
|
|
4312
3885
|
- {path: packages/eslint/fe/frontend-boundary-coverage.spec.mjs, editions: [lite, full], codes: [FE_SERVER_ACTION_FORBIDDEN]}
|
|
4313
3886
|
exemplifiedBy:
|
|
4314
3887
|
- {path: packages/hfs/templates/fe/skeleton-lite/apps/web/src/app/health/live/route.ts, edition: lite}
|
|
4315
3888
|
- {path: packages/hfs/templates/fe/skeleton/apps/app/src/app/health/live/route.ts, edition: full}
|
|
4316
|
-
|
|
4317
|
-
witness:
|
|
4318
|
-
- {path: tests/hfs/frontend-boundary-coverage.spec.mjs, editions: [lite, full], codes: [FE_SERVER_ACTION_FORBIDDEN, FE_ROUTE_HANDLER_FORBIDDEN]}
|
|
3889
|
+
witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
|
|
4319
3890
|
law: "The front end serves no API, in every app and edition (R212 case-2 (owner:lite-production-swarm), with the Work boundary amended by ruling:R212/case-4): no file under `fe/` carries a `\"use server\"` directive (module or function level), and the only route handlers are `app/health/live/route.ts` and the auth callback of the `fe.route.callback` slot; reads and writes reach the back end through `modules/api` and the SWR hooks, and a webhook, cron, public API or third-party callback is a back-end feature."
|
|
4320
3891
|
kinds: [check, lint]
|
|
4321
3892
|
gates: [pre-commit, settle, land, ci]
|
|
@@ -4323,19 +3894,17 @@ rules:
|
|
|
4323
3894
|
enforcers:
|
|
4324
3895
|
- {kind: machine, id: server-action-forbidden, at: scripts/hfs/architecture/server-action.mjs}
|
|
4325
3896
|
- {kind: eslint-fe, id: no-server-action}
|
|
3897
|
+
specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; the package specs named in proves keep proving the lint enforcers, the runtime-code enforcers lost their deleted runtime spec"
|
|
4326
3898
|
- id: R244
|
|
4327
3899
|
code: "FE_STACK_FORBIDDEN"
|
|
4328
3900
|
editions: [lite, full]
|
|
4329
3901
|
docs: [docs/code-pattern-enforcement.md#r244]
|
|
4330
3902
|
proves:
|
|
4331
|
-
- {path: tests/hfs/frontend-boundary-coverage.spec.mjs, editions: [lite, full], codes: [FE_STACK_FORBIDDEN]}
|
|
4332
3903
|
- {path: packages/eslint/fe/frontend-boundary-coverage.spec.mjs, editions: [lite, full], codes: [FE_STACK_FORBIDDEN]}
|
|
4333
3904
|
exemplifiedBy:
|
|
4334
3905
|
- {path: packages/hfs/templates/fe/skeleton-lite/apps/web/src/proxy.ts, edition: lite}
|
|
4335
3906
|
- {path: packages/hfs/templates/fe/skeleton/apps/app/src/proxy.ts, edition: full}
|
|
4336
|
-
|
|
4337
|
-
witness:
|
|
4338
|
-
- {path: tests/hfs/frontend-boundary-coverage.spec.mjs, editions: [lite, full], codes: [FE_STACK_FORBIDDEN]}
|
|
3907
|
+
witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
|
|
4339
3908
|
law: "A front end uses the one canonical library of each concern of knowledge/hfs/fe-stack.yaml: no front-end package.json (an app or a `fe/packages/*` package) depends on, and no source file under `fe/` imports, a package that the catalog lists under a concern's `forbids`; a missing concern is added to the catalog (with its pin in canon-pins.yaml), never installed beside it."
|
|
4340
3909
|
kinds: [check, lint]
|
|
4341
3910
|
gates: [pre-commit, settle, land, ci]
|
|
@@ -4343,6 +3912,7 @@ rules:
|
|
|
4343
3912
|
enforcers:
|
|
4344
3913
|
- {kind: hfs, id: fe-stack, at: scripts/hfs/rules/fe-stack.mjs}
|
|
4345
3914
|
- {kind: eslint-fe, id: fe-stack-import}
|
|
3915
|
+
specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; the package specs named in proves keep proving the lint enforcers, the runtime-code enforcers lost their deleted runtime spec"
|
|
4346
3916
|
- id: R245
|
|
4347
3917
|
code: "BE_APP_OPTIONS_COMPOSITION"
|
|
4348
3918
|
amendedBy: R289
|
|
@@ -4387,125 +3957,108 @@ rules:
|
|
|
4387
3957
|
editions: [lite, full]
|
|
4388
3958
|
docs: [docs/quality-bar.md#coverage-matrix]
|
|
4389
3959
|
templateNa: "The runtime coverage checker judges authored catalogs and proof metadata; app scaffolds do not contain this runtime surface."
|
|
4390
|
-
|
|
4391
|
-
|
|
4392
|
-
- {path: tests/checks/hfs-coverage.spec.mjs, edition: lite}
|
|
4393
|
-
- {path: tests/checks/hfs-coverage.spec.mjs, edition: full}
|
|
4394
|
-
witness:
|
|
4395
|
-
- {path: tests/checks/hfs-coverage.spec.mjs, edition: lite}
|
|
4396
|
-
- {path: tests/checks/hfs-coverage.spec.mjs, edition: full}
|
|
3960
|
+
specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
|
|
3961
|
+
witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
|
|
4397
3962
|
kinds: [check]
|
|
4398
3963
|
gates: [runtime]
|
|
4399
3964
|
failureCodes: ["RT_COVERAGE_MATRIX", "RT_COVERAGE_NO_ENFORCER", "RT_COVERAGE_NO_SPEC", "RT_COVERAGE_NO_WITNESS", "RT_COVERAGE_NO_DOC", "RT_COVERAGE_NO_TEMPLATE", "RT_COVERAGE_NO_EXAMPLE", "RT_COVERAGE_EDITION_ASYMMETRY", "RT_COVERAGE_SCHEMA_NO_RECORD", "RT_COVERAGE_GATE_LIE", "RT_COVERAGE_SUPERSEDED_CITE", "RT_COVERAGE_SURFACE_UNMAPPED", "RT_COVERAGE_REQUIREMENT_UNLEDGERED", "RT_COVERAGE_PROOF_VACUOUS", "RT_COVERAGE_CODE_UNROUTED"]
|
|
4400
3965
|
enforcers:
|
|
4401
3966
|
- {kind: runtime, id: hfs-coverage, at: scripts/checks/check-hfs-coverage.mjs}
|
|
3967
|
+
exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
|
|
4402
3968
|
- id: R248
|
|
4403
3969
|
code: "ENV_REQUIRED_UNSET"
|
|
4404
3970
|
editions: [lite, full]
|
|
4405
3971
|
docs: [docs/host-secrets.md#r248]
|
|
4406
|
-
|
|
4407
|
-
- {path: tests/hfs/hfs-env-parity.spec.mjs, editions: [lite, full]}
|
|
3972
|
+
specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
|
|
4408
3973
|
exemplifiedBy:
|
|
4409
3974
|
- {path: packages/hfs/templates/be/skeleton-lite/apps/api/src/api.env.ts, edition: lite}
|
|
4410
3975
|
- {path: packages/hfs/templates/be/skeleton/apps/__app__/src/__app__.env.ts, edition: full}
|
|
4411
|
-
|
|
4412
|
-
witness:
|
|
4413
|
-
- {path: tests/hfs/hfs-env-parity.spec.mjs, editions: [lite, full]}
|
|
3976
|
+
witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
|
|
4414
3977
|
law: "The environment keys a back end reads through its typed `EnvSource` (`<app>.env.ts` and the capability `*.config.ts` parse helpers, resolved by a static TypeScript walk that substitutes the literal arguments of a reader's call sites into a template key such as `${prefix}_WEBHOOK_SECRET`), the key names sealed in `.starcistacks/<env>/secrets/*.enc` and the keys the stack declares or passes (`KEYS.md`, `environment:`/`env:` entries, `runtimeSecrets`, `vars[].name`) are one set, compared by name only in both editions: a required read is sealed or declared (ENV_REQUIRED_UNSET), a sealed key is read or has a declared consumer (ENV_SEALED_UNREAD), one key lives in one member (ENV_DUPLICATE), no `NEXT_PUBLIC_*` key is sealed (ENV_PUBLIC_SEALED) and every `*.env.example` key is read (ENV_EXAMPLE_DRIFT)."
|
|
4415
3978
|
kinds: [check]
|
|
4416
3979
|
gates: [settle, land, ci]
|
|
4417
3980
|
failureCodes: ["ENV_REQUIRED_UNSET", "ENV_SEALED_UNREAD", "ENV_DUPLICATE", "ENV_PUBLIC_SEALED", "ENV_EXAMPLE_DRIFT"]
|
|
4418
3981
|
enforcers:
|
|
4419
3982
|
- {kind: hfs, id: env-parity, at: scripts/hfs/rules/env-parity.mjs}
|
|
3983
|
+
exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
|
|
4420
3984
|
- id: R249
|
|
4421
3985
|
code: "ENV_VALUE_SHAPE"
|
|
4422
3986
|
editions: [lite, full]
|
|
4423
3987
|
docs: [docs/host-secrets.md#r249]
|
|
4424
|
-
|
|
4425
|
-
- {path: tests/hfs/hfs-env-parity.spec.mjs, editions: [lite, full]}
|
|
3988
|
+
specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
|
|
4426
3989
|
exemplifiedBy:
|
|
4427
3990
|
- {path: packages/hfs/templates/be/skeleton-lite/apps/api/src/api.env.ts, edition: lite}
|
|
4428
3991
|
- {path: packages/hfs/templates/be/skeleton/apps/__app__/src/__app__.env.ts, edition: full}
|
|
4429
|
-
|
|
4430
|
-
witness:
|
|
4431
|
-
- {path: tests/hfs/hfs-env-parity.spec.mjs, editions: [lite, full]}
|
|
3992
|
+
witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
|
|
4432
3993
|
law: "A stored environment value parses as the type its `EnvSource` reader declares (an integer, `true`/`false`, an absolute URL, a duration `250`/`30s`/`5m`/`2h`, a member of the declared enum, a nonempty string or secret): `starci app secret verify <env>` decrypts every member in memory and reports each key and its violated shape, never a value, and a concrete (non-placeholder) value of a `*.env.example` parses the same way."
|
|
4433
3994
|
kinds: [check]
|
|
4434
3995
|
gates: [settle, land, ci]
|
|
4435
3996
|
failureCodes: ["ENV_VALUE_SHAPE"]
|
|
4436
3997
|
enforcers:
|
|
4437
3998
|
- {kind: hfs, id: env-value-shape, at: scripts/hfs/rules/env-value-shape.mjs}
|
|
3999
|
+
exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
|
|
4438
4000
|
|
|
4439
4001
|
- id: R250
|
|
4440
4002
|
code: "HFS_HOST_CRON"
|
|
4441
4003
|
editions: [lite, full]
|
|
4442
4004
|
docs:
|
|
4443
4005
|
- {path: docs/application-stacks.md#r250-deploy-scan, editions: [lite, full]}
|
|
4444
|
-
|
|
4445
|
-
- {path: tests/hfs/hfs-deploy-scan.spec.mjs, editions: [lite, full]}
|
|
4006
|
+
specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
|
|
4446
4007
|
exemplifiedBy:
|
|
4447
4008
|
- {path: packages/hfs/templates/app/ci-workflows-lite/github/workflows/ci.yml, edition: lite}
|
|
4448
4009
|
- {path: packages/hfs/templates/app/ci-workflows/github/workflows/ci.yml, edition: full}
|
|
4449
|
-
|
|
4450
|
-
witness:
|
|
4451
|
-
- {path: tests/hfs/hfs-deploy-scan.spec.mjs, editions: [lite, full]}
|
|
4010
|
+
witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
|
|
4452
4011
|
law: "In lite and full apps, scheduled work belongs to the back-end scheduler, pgmq/pg_cron or a declared replicated-job. Deployment files, scripts, workflows, compose files and Dockerfiles install no host crontab, cron.d entry, systemd timer, @reboot job or at job; a workflow does not schedule app work. Docker compose up, down and pull run only against an explicitly dev environment. Deploy shell scripts delegate to docker, starci or the app CLI, and contain no node -e, psql, inline SQL or downloaded shell logic."
|
|
4453
4012
|
kinds: [check]
|
|
4454
4013
|
gates: [settle, land, ci]
|
|
4455
4014
|
failureCodes: ["HFS_HOST_CRON", "HFS_DEPLOY_NO_LOGIC", "HFS_DEPLOY_COMPOSE_ON_VPS", "HFS_DEPLOY_SCHEDULER"]
|
|
4456
4015
|
enforcers:
|
|
4457
4016
|
- {kind: hfs, id: deploy-scan, at: scripts/hfs/rules/deploy-scan.mjs}
|
|
4017
|
+
exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
|
|
4458
4018
|
- id: R251
|
|
4459
4019
|
code: "HFS_DEPLOY_WORKFLOW"
|
|
4460
4020
|
editions: [lite, full]
|
|
4461
4021
|
docs:
|
|
4462
4022
|
- {path: docs/application-stacks.md#r251-deploy-workflow, editions: [lite, full]}
|
|
4463
|
-
|
|
4464
|
-
- {path: tests/hfs/hfs-deploy-workflow.spec.mjs, editions: [lite, full]}
|
|
4023
|
+
specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
|
|
4465
4024
|
exemplifiedBy:
|
|
4466
4025
|
- {path: packages/hfs/templates/app/ci-workflows-lite/github/workflows/db-deploy.yml, edition: lite}
|
|
4467
4026
|
- {path: packages/hfs/templates/app/ci-workflows/github/workflows/ci.yml, edition: full}
|
|
4468
|
-
|
|
4469
|
-
witness:
|
|
4470
|
-
- {path: tests/hfs/hfs-deploy-workflow.spec.mjs, editions: [lite, full]}
|
|
4027
|
+
witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
|
|
4471
4028
|
law: "In lite and full apps, deployment jobs declare a protected environment, explicit permissions and concurrency, materialize sealed secrets through SOPS_AGE_KEY or starci app secret materialize, and reference only the age key and transport SSH key/known_hosts secrets. They never embed a dotenv blob or write a dotenv file. Every remote workflow action uses a 40-hex commit SHA; installed tools are checksum or digest verified, or supplied by a pinned action. App workflows start only on release tags [v*] or workflow_dispatch, never on a branch push."
|
|
4472
4029
|
kinds: [check]
|
|
4473
4030
|
gates: [settle, land, ci]
|
|
4474
4031
|
failureCodes: ["HFS_DEPLOY_WORKFLOW", "HFS_WORKFLOW_PIN", "HFS_CI_TOOL_INSTALL", "HFS_APP_WORKFLOW_TRIGGER"]
|
|
4475
4032
|
enforcers:
|
|
4476
4033
|
- {kind: hfs, id: deploy-workflow, at: scripts/hfs/rules/deploy-workflow.mjs}
|
|
4034
|
+
exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
|
|
4477
4035
|
- id: R252
|
|
4478
4036
|
code: "HFS_SCRIPT_PLAINTEXT_LOAD"
|
|
4479
4037
|
editions: [lite, full]
|
|
4480
4038
|
docs:
|
|
4481
4039
|
- {path: docs/application-stacks.md#r252-script-hygiene, editions: [lite, full]}
|
|
4482
|
-
|
|
4483
|
-
- {path: tests/hfs/hfs-script-hygiene.spec.mjs, editions: [lite, full]}
|
|
4040
|
+
specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
|
|
4484
4041
|
exemplifiedBy:
|
|
4485
4042
|
- {path: packages/hfs/templates/app/ci-workflows-lite/github/workflows/db-deploy.yml, edition: lite}
|
|
4486
4043
|
- {path: packages/hfs/templates/app/ci-workflows/github/workflows/ci.yml, edition: full}
|
|
4487
|
-
|
|
4488
|
-
witness:
|
|
4489
|
-
- {path: tests/hfs/hfs-script-hygiene.spec.mjs, editions: [lite, full]}
|
|
4044
|
+
witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
|
|
4490
4045
|
law: "In lite and full apps, executable scripts and workflow commands never load plaintext secrets.env, secret.env, .env secret files or a home-directory credential file, enable shell xtrace or request --reveal. Service-role references belong only to the back-end Supabase integration; deployment scripts and source outside that integration never use the service role. Scanners inspect source references and report paths without reading secret files or printing their values."
|
|
4491
4046
|
kinds: [check]
|
|
4492
4047
|
gates: [settle, land, ci]
|
|
4493
4048
|
failureCodes: ["HFS_SCRIPT_PLAINTEXT_LOAD", "HFS_SCRIPT_XTRACE", "HFS_SERVICE_ROLE_SCOPE"]
|
|
4494
4049
|
enforcers:
|
|
4495
4050
|
- {kind: hfs, id: script-hygiene, at: scripts/hfs/rules/script-hygiene.mjs}
|
|
4051
|
+
exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
|
|
4496
4052
|
- id: R253
|
|
4497
4053
|
code: "HFS_AGE_KEY_CUSTODY"
|
|
4498
4054
|
editions: [lite, full]
|
|
4499
4055
|
docs: [docs/host-secrets.md#application-secret-rules]
|
|
4500
|
-
|
|
4501
|
-
- {path: tests/hfs/hfs-secret-custody.spec.mjs, editions: [lite, full]}
|
|
4056
|
+
specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
|
|
4502
4057
|
exemplifiedBy:
|
|
4503
4058
|
- {path: packages/hfs/templates/be/skeleton/src/modules/platform/config/env-source.config.ts, editions: [lite, full]}
|
|
4504
4059
|
- {path: packages/hfs/templates/be/skeleton/src/modules/platform/http-security/origin.guard.ts, editions: [lite, full]}
|
|
4505
4060
|
- {path: packages/hfs/templates/be/skeleton/src/modules/platform/http-security/webhook-signature.service.ts, editions: [lite, full]}
|
|
4506
|
-
|
|
4507
|
-
witness:
|
|
4508
|
-
- {path: tests/hfs/hfs-secret-custody.spec.mjs, editions: [lite, full]}
|
|
4061
|
+
witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
|
|
4509
4062
|
law: "The age identity that seals and opens an app's `.starcistacks/<env>/secrets/*.enc` is host-local custody only: it lives in the untracked `.claude/secret.env` (as `SOPS_AGE_KEY`, which wins over the legacy `keys.txt` and is handed to sops through the `SOPS_AGE_KEY` child environment, never as an argument and never printed) or in the sops config dir's `keys.txt`; a tracked `.claude/secret.env`, `keys.txt` or `*.agekey` is the identity committed. The three files the secret custody depends on - `src/modules/platform/config/env-source.config.ts`, `src/modules/platform/http-security/origin.guard.ts` and `src/modules/platform/http-security/webhook-signature.service.ts` - are hash-sensitive canon, not files to edit: their bytes equal the `be/skeleton` template they were scaffolded from, judged by sha256."
|
|
4510
4063
|
kinds: [check]
|
|
4511
4064
|
gates: [settle, land, ci]
|
|
@@ -4513,57 +4066,45 @@ rules:
|
|
|
4513
4066
|
enforcers:
|
|
4514
4067
|
- {kind: hfs, id: secret-age-key-custody, at: scripts/hfs/rules/secrets.mjs}
|
|
4515
4068
|
- {kind: hfs, id: canon-copy-drift, at: scripts/hfs/rules/canon-copy-drift.mjs}
|
|
4069
|
+
exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
|
|
4516
4070
|
- id: R254
|
|
4517
4071
|
code: "DB_BE_ONLY_ACCESS"
|
|
4518
4072
|
editions: [lite]
|
|
4519
4073
|
editionWhy: "owner:lite-backing-services makes Supabase lite's database backing; these SQL access requirements apply to that backing."
|
|
4520
4074
|
docs: [docs/microservices.md#r254]
|
|
4521
4075
|
templateNa: "Browser grants, policies and publication membership belong to product-authored Supabase migrations, rather than a scaffolded SQL surface."
|
|
4522
|
-
|
|
4523
|
-
|
|
4524
|
-
proves:
|
|
4525
|
-
- {path: tests/hfs/hfs-database-access.spec.mjs, edition: lite, codes: [DB_BE_ONLY_ACCESS, DB_REALTIME_UNLISTED]}
|
|
4526
|
-
witness:
|
|
4527
|
-
- {path: tests/hfs/hfs-database-access.spec.mjs, edition: lite, codes: [DB_BE_ONLY_ACCESS, DB_REALTIME_UNLISTED]}
|
|
4076
|
+
specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
|
|
4077
|
+
witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
|
|
4528
4078
|
law: "In lite and full, browser data access stays closed on exposed schemas: authenticated receives neither table or sequence privileges nor data policies, and anon reads only through a select policy named *_public_read. A table listed in hfs.json supabase.directAccess is an explicit exception. A table joins supabase_realtime only when that direct access is declared. The front end uses Supabase for Auth and reaches product data through the back end."
|
|
4529
4079
|
kinds: [check]
|
|
4530
4080
|
gates: [settle, land, ci]
|
|
4531
4081
|
failureCodes: ["DB_BE_ONLY_ACCESS", "DB_REALTIME_UNLISTED"]
|
|
4532
4082
|
enforcers:
|
|
4533
4083
|
- {kind: hfs, id: db-be-only-access, at: scripts/hfs/rules/database-access.mjs}
|
|
4084
|
+
exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
|
|
4534
4085
|
- id: R255
|
|
4535
4086
|
code: "DB_APP_ROLE"
|
|
4536
4087
|
editions: [lite]
|
|
4537
4088
|
editionWhy: "owner:lite-backing-services makes Supabase lite's database backing; application-role and forced-RLS requirements apply to that backing."
|
|
4538
4089
|
docs: [docs/microservices.md#r255]
|
|
4539
4090
|
templateNa: "Application roles and table ownership are product-authored Supabase migration content, rather than a scaffolded SQL surface."
|
|
4540
|
-
|
|
4541
|
-
|
|
4542
|
-
proves:
|
|
4543
|
-
- {path: tests/hfs/hfs-database-access.spec.mjs, edition: lite, codes: [DB_APP_ROLE, DB_FORCE_RLS_DEFAULT]}
|
|
4544
|
-
witness:
|
|
4545
|
-
- {path: tests/hfs/hfs-database-access.spec.mjs, edition: lite, codes: [DB_APP_ROLE, DB_FORCE_RLS_DEFAULT]}
|
|
4091
|
+
specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
|
|
4092
|
+
witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
|
|
4546
4093
|
law: "The declared back-end database role (hfs.json supabase.appRole, app_be by default) has only the privileges it needs: role declarations refuse superuser and bypassrls, require noinherit and nobypassrls, and never grant all schema or table privileges. Tables owned by that role enable and force row level security by default; a forceRls exemption identifies the table and carries a nonempty reason. This applies to every edition that declares Supabase."
|
|
4547
4094
|
kinds: [check]
|
|
4548
4095
|
gates: [settle, land, ci]
|
|
4549
4096
|
failureCodes: ["DB_APP_ROLE", "DB_FORCE_RLS_DEFAULT"]
|
|
4550
4097
|
enforcers:
|
|
4551
4098
|
- {kind: hfs, id: db-app-role, at: scripts/hfs/rules/database-access.mjs}
|
|
4099
|
+
exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
|
|
4552
4100
|
- id: R256
|
|
4553
4101
|
code: "DB_POLICY_TAUTOLOGY"
|
|
4554
4102
|
editions: [lite]
|
|
4555
4103
|
editionWhy: "owner:lite-backing-services makes Supabase lite's database backing; access-policy, view, definer and storage SQL requirements apply to that backing."
|
|
4556
4104
|
docs: [docs/microservices.md#r256]
|
|
4557
4105
|
templateNa: "Access policies, views, definers and storage policies belong to product-authored Supabase migrations, rather than a scaffolded SQL surface."
|
|
4558
|
-
|
|
4559
|
-
|
|
4560
|
-
- {path: tests/hfs/hfs-database-rules.spec.mjs, edition: lite, codes: [DB_DEFINER_REVOKE]}
|
|
4561
|
-
proves:
|
|
4562
|
-
- {path: tests/hfs/hfs-database-access.spec.mjs, edition: lite, codes: [DB_POLICY_TAUTOLOGY, DB_VIEW_UNSAFE, DB_STORAGE_PREFIX]}
|
|
4563
|
-
- {path: tests/hfs/hfs-database-rules.spec.mjs, edition: lite, codes: [DB_DEFINER_REVOKE]}
|
|
4564
|
-
witness:
|
|
4565
|
-
- {path: tests/hfs/hfs-database-access.spec.mjs, edition: lite, codes: [DB_POLICY_TAUTOLOGY, DB_VIEW_UNSAFE, DB_STORAGE_PREFIX]}
|
|
4566
|
-
- {path: tests/hfs/hfs-database-rules.spec.mjs, edition: lite, codes: [DB_DEFINER_REVOKE]}
|
|
4106
|
+
specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
|
|
4107
|
+
witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
|
|
4567
4108
|
law: "Exposed database objects keep their access boundaries in lite and full. Policies refuse tautological true, is-not-null and self-equality predicates; policies for browser roles prove a principal predicate. An exposed view or materialized view uses security_invoker or the migration set ends with access revoked from anon and authenticated. Disabling RLS or moving a table into an exposed schema preserves the R214 RLS obligation. A security definer declaration, including alter function, preserves R215 safety checks and the migration set ends with execute revoked from authenticated when exposed, in addition to R215's public and anon revocation. A storage.objects policy scopes an ownership prefix to the principal unless its bucket id ends _public."
|
|
4568
4109
|
kinds: [check]
|
|
4569
4110
|
gates: [settle, land, ci]
|
|
@@ -4572,54 +4113,45 @@ rules:
|
|
|
4572
4113
|
- {kind: hfs, id: db-policy-hardening, at: scripts/hfs/rules/database-access.mjs}
|
|
4573
4114
|
- {kind: hfs, id: db-definer-revoke, at: scripts/hfs/rules/database-plpgsql.mjs}
|
|
4574
4115
|
|
|
4116
|
+
exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
|
|
4575
4117
|
- id: R257
|
|
4576
4118
|
code: "DB_BASELINE_SHAPE"
|
|
4577
4119
|
editions: [lite]
|
|
4578
4120
|
editionWhy: "owner:lite-backing-services makes Supabase lite's database backing; baseline and archive requirements apply to its migration history."
|
|
4579
4121
|
docs: [docs/microservices.md#r257]
|
|
4580
4122
|
templateNa: "A baseline is derived from a product's existing Supabase migration history and cannot be supplied by a scaffold template."
|
|
4581
|
-
|
|
4582
|
-
|
|
4583
|
-
proves:
|
|
4584
|
-
- {path: tests/hfs/hfs-database-baseline.spec.mjs, edition: lite, codes: [DB_BASELINE_SHAPE, DB_ARCHIVE_MUTATED]}
|
|
4585
|
-
witness:
|
|
4586
|
-
- {path: tests/hfs/hfs-database-baseline.spec.mjs, edition: lite, codes: [DB_BASELINE_SHAPE, DB_ARCHIVE_MUTATED]}
|
|
4123
|
+
specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
|
|
4124
|
+
witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
|
|
4587
4125
|
law: "An archived migration chain has exactly one active baseline marked -- starci:baseline <archived-last-stamp>, with a later valid stamp or an explicit restamp. Archived files only need the digits-stamp_name.sql shape, whatever the stamp value (they are immutable history and never applied); the baseline and active migrations keep the real-instant stamp check. Archive contents are immutable against repository history; an active migration enters the archive unchanged only in the same diff that adds the replacement baseline. The app db baseline, restamp and plan verbs are read-only unless --apply is explicit."
|
|
4588
4126
|
kinds: [check]
|
|
4589
4127
|
gates: [settle, land, ci]
|
|
4590
4128
|
failureCodes: ["DB_BASELINE_SHAPE", "DB_ARCHIVE_MUTATED"]
|
|
4591
4129
|
enforcers:
|
|
4592
4130
|
- {kind: hfs, id: db-baseline-shape, at: scripts/hfs/rules/database-baseline.mjs}
|
|
4131
|
+
exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
|
|
4593
4132
|
- id: R258
|
|
4594
4133
|
code: "DB_PGMQ_DECLARED"
|
|
4595
4134
|
editions: [lite]
|
|
4596
4135
|
editionWhy: "owner:lite-backing-services makes Supabase lite's database backing; pgmq and pg_cron ownership requirements apply to that backing."
|
|
4597
4136
|
docs: [docs/microservices.md#r258]
|
|
4598
4137
|
templateNa: "Queue declarations and enqueue-only cron commands depend on product-owned work and are authored in its Supabase migrations."
|
|
4599
|
-
|
|
4600
|
-
|
|
4601
|
-
proves:
|
|
4602
|
-
- {path: tests/hfs/hfs-database-queues.spec.mjs, edition: lite, codes: [DB_PGMQ_DECLARED, DB_CRON_OWNED]}
|
|
4603
|
-
witness:
|
|
4604
|
-
- {path: tests/hfs/hfs-database-queues.spec.mjs, edition: lite, codes: [DB_PGMQ_DECLARED, DB_CRON_OWNED]}
|
|
4138
|
+
specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
|
|
4139
|
+
witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
|
|
4605
4140
|
law: "DB_QUEUE_CRON: every pgmq queue constant has an active migration creating the queue and every created queue has a constant. Queue objects are granted only to the application role. A uniquely named pg_cron job belongs to a migration and only enqueues to an existing queue directly or through one enqueue-only *_tick function; it executes no business DML or HTTP request and shares no tick with an app scheduler. Removing a tick unschedules its job."
|
|
4606
4141
|
kinds: [check]
|
|
4607
4142
|
gates: [settle, land, ci]
|
|
4608
4143
|
failureCodes: ["DB_PGMQ_DECLARED", "DB_CRON_OWNED"]
|
|
4609
4144
|
enforcers:
|
|
4610
4145
|
- {kind: hfs, id: db-queue-cron, at: scripts/hfs/rules/database-queues.mjs}
|
|
4146
|
+
exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
|
|
4611
4147
|
- id: R259
|
|
4612
4148
|
code: "DB_EXTENSION_ALLOWED"
|
|
4613
4149
|
editions: [lite]
|
|
4614
4150
|
editionWhy: "owner:lite-backing-services makes Supabase lite's database backing; database configuration, extension, migration and seed requirements apply to that backing."
|
|
4615
4151
|
docs: [docs/microservices.md#r259]
|
|
4616
4152
|
templateNa: "Extension use, contract migrations, vault operations and seed literals are product-authored Supabase content, rather than a scaffolded SQL surface."
|
|
4617
|
-
|
|
4618
|
-
|
|
4619
|
-
proves:
|
|
4620
|
-
- {path: tests/hfs/hfs-database-config.spec.mjs, edition: lite, codes: [DB_EXTENSION_ALLOWED, DB_API_EXPOSED, DB_MIGRATION_DESTRUCTIVE, HFS_SEED_PII, DB_VAULT_WRITE]}
|
|
4621
|
-
witness:
|
|
4622
|
-
- {path: tests/hfs/hfs-database-config.spec.mjs, edition: lite, codes: [DB_EXTENSION_ALLOWED, DB_API_EXPOSED, DB_MIGRATION_DESTRUCTIVE, HFS_SEED_PII, DB_VAULT_WRITE]}
|
|
4153
|
+
specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
|
|
4154
|
+
witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
|
|
4623
4155
|
law: "DB_CONFIG_EXT: extensions belong to the database allowlist, vault writes and migration role passwords are refused, pgmq schemas are never exposed through the API, and lite API access is closed except for explicit public-read policies. R216 DB_CONFIG_POLICY also checks API schema allowlisting, existing seed paths, anonymous sign-ins, disabled edge runtime, bounded storage uploads and the database major-version pin. Destructive DDL belongs only to *_contract_* migrations whose targets are no longer referenced by back-end SQL or entities. Seeds contain no real email or phone literals."
|
|
4624
4156
|
kinds: [check]
|
|
4625
4157
|
gates: [settle, land, ci]
|
|
@@ -4628,6 +4160,7 @@ rules:
|
|
|
4628
4160
|
- {kind: hfs, id: db-config-ext, at: scripts/hfs/rules/database-config.mjs}
|
|
4629
4161
|
- {kind: hfs, id: db-migration-destructive, at: scripts/hfs/rules/database-migrations.mjs}
|
|
4630
4162
|
|
|
4163
|
+
exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
|
|
4631
4164
|
- id: R260
|
|
4632
4165
|
code: "BE_JWT_ALG_PINNED"
|
|
4633
4166
|
law: "A back-end JWT verifier pins a nonempty literal subset of ES256, RS256 and EdDSA and obtains its issuer from configuration. A Supabase principal is built only after verification and rejection of every role other than authenticated, in lite and full."
|
|
@@ -4647,10 +4180,9 @@ rules:
|
|
|
4647
4180
|
- {"path":"packages/eslint/be/jwt-alg.spec.mjs","edition":"full","codes":["BE_JWT_ALG_PINNED"]}
|
|
4648
4181
|
proves:
|
|
4649
4182
|
- "packages/eslint/be/jwt-alg.spec.mjs"
|
|
4650
|
-
- "tests/hfs-architecture/architecture-jwt-policy.spec.mjs"
|
|
4651
4183
|
witness:
|
|
4652
4184
|
- {"path":"packages/eslint/be/jwt-alg.spec.mjs","editions":["lite","full"],"codes":["BE_JWT_ALG_PINNED"]}
|
|
4653
|
-
|
|
4185
|
+
specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; the package specs named in proves keep proving the lint enforcers, the runtime-code enforcers lost their deleted runtime spec"
|
|
4654
4186
|
- id: R261
|
|
4655
4187
|
code: "BE_CORS_ALLOWLIST"
|
|
4656
4188
|
law: "Every back-end API declares an exact browser origin allowlist, applies the platform/http-security response middleware, disables x-powered-by and states a nonnegative integer trust proxy hop count. Wildcard or missing CORS and blanket proxy trust are refused in lite and full."
|
|
@@ -4692,14 +4224,12 @@ rules:
|
|
|
4692
4224
|
- {"path":"packages/hfs/templates/be/skeleton/src/modules/platform/http-security/readiness.service.ts","editions":["lite","full"]}
|
|
4693
4225
|
- {"path":"packages/hfs/templates/be/image/api/Dockerfile","editions":["lite","full"]}
|
|
4694
4226
|
- {"path":"packages/eslint/be/health-ready.spec.mjs","editions":["lite","full"],"codes":["BE_READY_REAL","BE_HEALTH_SIGNALS"]}
|
|
4695
|
-
- {"path":"tests/hfs-proofs/be-docker-health.spec.mjs","editions":["lite","full"],"codes":["HFS_DOCKER_HEALTHCHECK_FAKE"]}
|
|
4696
4227
|
proves:
|
|
4697
4228
|
- {"path":"packages/eslint/be/health-ready.spec.mjs","editions":["lite","full"],"codes":["BE_READY_REAL","BE_HEALTH_SIGNALS"]}
|
|
4698
|
-
- {"path":"tests/hfs-proofs/be-docker-health.spec.mjs","editions":["lite","full"],"codes":["HFS_DOCKER_HEALTHCHECK_FAKE"]}
|
|
4699
4229
|
witness:
|
|
4700
4230
|
- {"path":"packages/eslint/be/health-ready.spec.mjs","editions":["lite","full"],"codes":["BE_READY_REAL","BE_HEALTH_SIGNALS"]}
|
|
4701
|
-
- {"path":"tests/hfs-proofs/be-docker-health.spec.mjs","editions":["lite","full"],"codes":["HFS_DOCKER_HEALTHCHECK_FAKE"]}
|
|
4702
4231
|
|
|
4232
|
+
specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; the package specs named in proves keep proving the lint enforcers, the runtime-code enforcers lost their deleted runtime spec"
|
|
4703
4233
|
- id: R263
|
|
4704
4234
|
code: "BE_WEBHOOK_SCOPE"
|
|
4705
4235
|
amendedBy: [owner:oauth-redirect-not-webhook, owner:webhook-receipt-port]
|
|
@@ -4787,17 +4317,10 @@ rules:
|
|
|
4787
4317
|
exemplifiedBy:
|
|
4788
4318
|
- {"path":"packages/hfs/templates/app/skeleton-lite/.starcistacks","edition":"lite"}
|
|
4789
4319
|
- {"path":"packages/hfs/templates/app/skeleton/.starcistacks","edition":"full"}
|
|
4790
|
-
|
|
4791
|
-
- {"path":"tests/fixtures/hfs-stacks-full/passing.json","edition":"full"}
|
|
4792
|
-
- {"path":"tests/fixtures/hfs-stacks-full/violating.json","edition":"full"}
|
|
4793
|
-
proves:
|
|
4794
|
-
- {path: tests/hfs/hfs-stacks-full-fixtures.spec.mjs, edition: full}
|
|
4795
|
-
- "tests/hfs/hfs-stacks-swarm.spec.mjs"
|
|
4796
|
-
- "tests/hfs/hfs-stacks-ingress.spec.mjs"
|
|
4797
|
-
witness:
|
|
4798
|
-
- {"path":"tests/hfs/hfs-stacks-swarm.spec.mjs","edition":"lite"}
|
|
4799
|
-
- {"path":"tests/fixtures/hfs-stacks-full/violating.json","edition":"full"}
|
|
4320
|
+
specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
|
|
4800
4321
|
|
|
4322
|
+
witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
|
|
4323
|
+
exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
|
|
4801
4324
|
- id: R267
|
|
4802
4325
|
code: "STACKS_RELEASE_UNDECLARED"
|
|
4803
4326
|
law: "Each Swarm environment declares an immutable images lock, active and previous release pointers and nonempty health assertions. Every stateful component and declared managed backing dependency declares backup target, retention and owner with a tracked restore proof. The rendered deployment model must be available and valid; an unavailable model is a finding, never a skipped check."
|
|
@@ -4812,18 +4335,10 @@ rules:
|
|
|
4812
4335
|
exemplifiedBy:
|
|
4813
4336
|
- {"path":"packages/hfs/templates/app/skeleton-lite/.starcistacks","edition":"lite"}
|
|
4814
4337
|
- {"path":"packages/hfs/templates/app/skeleton/.starcistacks","edition":"full"}
|
|
4815
|
-
|
|
4816
|
-
- {"path":"tests/fixtures/hfs-stacks-full/passing.json","edition":"full"}
|
|
4817
|
-
- {"path":"tests/fixtures/hfs-stacks-full/violating.json","edition":"full"}
|
|
4818
|
-
- {"path":"tests/fixtures/hfs-stacks-full/model-unavailable.json","edition":"full"}
|
|
4819
|
-
proves:
|
|
4820
|
-
- {path: tests/hfs/hfs-stacks-full-fixtures.spec.mjs, edition: full}
|
|
4821
|
-
- "tests/hfs/hfs-stacks-release.spec.mjs"
|
|
4822
|
-
witness:
|
|
4823
|
-
- {"path":"tests/hfs/hfs-stacks-release.spec.mjs","edition":"lite"}
|
|
4824
|
-
- {"path":"tests/fixtures/hfs-stacks-full/violating.json","edition":"full"}
|
|
4825
|
-
- {"path":"tests/fixtures/hfs-stacks-full/model-unavailable.json","edition":"full"}
|
|
4338
|
+
specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
|
|
4826
4339
|
|
|
4340
|
+
witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
|
|
4341
|
+
exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
|
|
4827
4342
|
- id: R268
|
|
4828
4343
|
code: "HFS_SCHEDULE_UNDECLARED"
|
|
4829
4344
|
law: "Every app scheduler, active pg_cron schedule, selected scheduled component and rendered replicated-job has a matching top-level jobs declaration with its schedule and invocation of a named back-end CLI action. A rendered replicated-job uses the same declared CLI invocation; inline JavaScript and shell chaining are refused. Scheduling is app-owned; a manifest entry never grants host crontab or deployment business logic."
|
|
@@ -4838,16 +4353,10 @@ rules:
|
|
|
4838
4353
|
exemplifiedBy:
|
|
4839
4354
|
- {"path":"packages/hfs/templates/app/skeleton-lite/.starcistacks/application-stacks.yaml","edition":"lite"}
|
|
4840
4355
|
- {"path":"packages/hfs/templates/app/skeleton/.starcistacks/application-stacks.yaml","edition":"full"}
|
|
4841
|
-
|
|
4842
|
-
- {"path":"tests/fixtures/hfs-stacks-full/passing.json","edition":"full"}
|
|
4843
|
-
- {"path":"tests/fixtures/hfs-stacks-full/violating.json","edition":"full"}
|
|
4844
|
-
proves:
|
|
4845
|
-
- {path: tests/hfs/hfs-stacks-full-fixtures.spec.mjs, edition: full}
|
|
4846
|
-
- "tests/hfs/hfs-stacks-release.spec.mjs"
|
|
4847
|
-
witness:
|
|
4848
|
-
- {"path":"tests/hfs/hfs-stacks-release.spec.mjs","edition":"lite"}
|
|
4849
|
-
- {"path":"tests/fixtures/hfs-stacks-full/violating.json","edition":"full"}
|
|
4356
|
+
specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
|
|
4850
4357
|
|
|
4358
|
+
witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
|
|
4359
|
+
exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
|
|
4851
4360
|
- id: R269
|
|
4852
4361
|
code: "HFS_DEPENDABOT_MISSING"
|
|
4853
4362
|
law: "In lite and full apps, .github/dependabot.yml declares scheduled npm, github-actions and docker updates. The CI workflow runs npm audit --omit=dev as an enabled gate whose failure stops the job. The images workflow generates an SBOM and provenance for release images; a disabled step, comment or label is not evidence."
|
|
@@ -4860,20 +4369,16 @@ rules:
|
|
|
4860
4369
|
docs:
|
|
4861
4370
|
- "docs/application-stacks.md#r269"
|
|
4862
4371
|
exemplifiedBy:
|
|
4863
|
-
- {"path":"tests/hfs/hfs-supply-chain.spec.mjs","edition":"lite"}
|
|
4864
|
-
- {"path":"tests/hfs/hfs-supply-chain.spec.mjs","edition":"full"}
|
|
4865
4372
|
- {"path":"packages/hfs/templates/app/skeleton-lite/.github/dependabot.yml","edition":"lite"}
|
|
4866
4373
|
- {"path":"packages/hfs/templates/app/ci-workflows-lite/github/workflows/ci.yml","edition":"lite"}
|
|
4867
4374
|
- {"path":"packages/hfs/templates/app/ci-workflows-lite/github/workflows/images.yml","edition":"lite"}
|
|
4868
4375
|
- {"path":"packages/hfs/templates/app/skeleton/.github/dependabot.yml","edition":"full"}
|
|
4869
4376
|
- {"path":"packages/hfs/templates/app/ci-workflows/github/workflows/ci.yml","edition":"full"}
|
|
4870
4377
|
- {"path":"packages/hfs/templates/app/ci-workflows/github/workflows/images.yml","edition":"full"}
|
|
4871
|
-
|
|
4872
|
-
- {"path":"tests/hfs/hfs-supply-chain.spec.mjs","editions":["lite","full"]}
|
|
4873
|
-
witness:
|
|
4874
|
-
- {"path":"tests/hfs/hfs-supply-chain.spec.mjs","edition":"lite"}
|
|
4875
|
-
- {"path":"tests/hfs/hfs-supply-chain.spec.mjs","edition":"full"}
|
|
4378
|
+
specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
|
|
4876
4379
|
|
|
4380
|
+
witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
|
|
4381
|
+
exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
|
|
4877
4382
|
- id: R270
|
|
4878
4383
|
code: "HFS_DOC_PATH_MISSING"
|
|
4879
4384
|
law: "In lite and full products, READMEs, docs and stack READMEs cite existing repository paths, npm scripts, starci app verbs, environment keys declared by typed readers or KEYS.md, and rule ids from the HFS catalog. Documentation changes with the product it describes."
|
|
@@ -4886,15 +4391,11 @@ rules:
|
|
|
4886
4391
|
docs:
|
|
4887
4392
|
- "docs/quality-bar.md#r270"
|
|
4888
4393
|
exemplifiedBy:
|
|
4889
|
-
- {"path":"tests/hfs/hfs-doc-fresh.spec.mjs","edition":"lite"}
|
|
4890
|
-
- {"path":"tests/hfs/hfs-doc-fresh.spec.mjs","edition":"full"}
|
|
4891
4394
|
- {"path":"packages/hfs/templates/app/skeleton-lite/README.md","edition":"lite"}
|
|
4892
4395
|
- {"path":"packages/hfs/templates/app/skeleton/README.md","edition":"full"}
|
|
4893
|
-
|
|
4894
|
-
|
|
4895
|
-
|
|
4896
|
-
- {"path":"tests/hfs/hfs-doc-fresh.spec.mjs","edition":"lite"}
|
|
4897
|
-
- {"path":"tests/hfs/hfs-doc-fresh.spec.mjs","edition":"full"}
|
|
4396
|
+
specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
|
|
4397
|
+
witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
|
|
4398
|
+
exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
|
|
4898
4399
|
- id: R271
|
|
4899
4400
|
code: "HFS_RELEASE_TAG_MISMATCH"
|
|
4900
4401
|
law: "A lite or full product release uses a v-prefixed semantic version tag equal to package.json version; images.yml publishes images under that release tag, and every database deployment refuses a non-tag ref before migration."
|
|
@@ -4907,17 +4408,13 @@ rules:
|
|
|
4907
4408
|
docs:
|
|
4908
4409
|
- "docs/application-stacks.md#r271"
|
|
4909
4410
|
exemplifiedBy:
|
|
4910
|
-
- {"path":"tests/hfs/hfs-release-provenance.spec.mjs","edition":"lite"}
|
|
4911
|
-
- {"path":"tests/hfs/hfs-release-provenance.spec.mjs","edition":"full"}
|
|
4912
4411
|
- {"path":"packages/hfs/templates/app/ci-workflows-lite/github/workflows/images.yml","edition":"lite"}
|
|
4913
4412
|
- {"path":"packages/hfs/templates/app/ci-workflows/github/workflows/images.yml","edition":"full"}
|
|
4914
4413
|
- {"path":"packages/hfs/templates/app/ci-workflows-lite/github/workflows/db-deploy.yml","edition":"lite"}
|
|
4915
|
-
|
|
4916
|
-
- {"path":"tests/hfs/hfs-release-provenance.spec.mjs","editions":["lite","full"]}
|
|
4917
|
-
witness:
|
|
4918
|
-
- {"path":"tests/hfs/hfs-release-provenance.spec.mjs","edition":"lite"}
|
|
4919
|
-
- {"path":"tests/hfs/hfs-release-provenance.spec.mjs","edition":"full"}
|
|
4414
|
+
specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
|
|
4920
4415
|
|
|
4416
|
+
witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
|
|
4417
|
+
exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
|
|
4921
4418
|
- id: R272
|
|
4922
4419
|
code: "BE_APP_BOOT_PROOF_MISSING"
|
|
4923
4420
|
law: "Every lite back-end app proves its real Nest AppModule composition by compiling the dependency graph with explicit fixture options and infrastructure doubles; unresolved providers, circular dependencies and a missing or failed proof are refused. The app check wiring verb uses the same proof. Full retains its existing e2e boot proof."
|
|
@@ -4931,13 +4428,11 @@ rules:
|
|
|
4931
4428
|
docs:
|
|
4932
4429
|
- "docs/quality-bar.md#r272"
|
|
4933
4430
|
exemplifiedBy:
|
|
4934
|
-
- {"path":"tests/hfs/hfs-boot-proof.spec.mjs","edition":"lite"}
|
|
4935
4431
|
- {"path":"packages/hfs/templates/be/skeleton-lite/src/tests/fixtures/builders/api.builder.ts","edition":"lite"}
|
|
4936
4432
|
- {"path":"examples/lite-app/be/src/tests/fixtures/builders/api.builder.ts","edition":"lite"}
|
|
4937
|
-
|
|
4938
|
-
|
|
4939
|
-
|
|
4940
|
-
- {"path":"tests/hfs/hfs-boot-proof.spec.mjs","edition":"lite"}
|
|
4433
|
+
specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
|
|
4434
|
+
witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
|
|
4435
|
+
exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
|
|
4941
4436
|
- id: R273
|
|
4942
4437
|
code: "HFS_COVERAGE_BELOW"
|
|
4943
4438
|
law: "An app check supplied with a coverage-from lcov report proves 100 percent lines, functions and branches per tracked back-end logic file in the edition's slot-derived measured scope; a missing source record or unavailable metric is refused. The unit runner also enforces statement coverage. Reports list the measured scope and the source files outside it, including features, cli and webhooks."
|
|
@@ -4950,17 +4445,12 @@ rules:
|
|
|
4950
4445
|
docs:
|
|
4951
4446
|
- "docs/quality-bar.md#r273"
|
|
4952
4447
|
exemplifiedBy:
|
|
4953
|
-
- {"path":"tests/hfs/hfs-coverage-below.spec.mjs","edition":"lite"}
|
|
4954
|
-
- {"path":"tests/hfs/hfs-coverage-below.spec.mjs","edition":"full"}
|
|
4955
4448
|
- {"path":"packages/hfs/templates/be/tool-config/jest.config.js","editions":["lite","full"]}
|
|
4956
4449
|
- {"path":"examples/lite-app/be/jest.config.js","edition":"lite"}
|
|
4957
4450
|
- {"path":"examples/ecommerce-app/be/jest.config.js","edition":"full"}
|
|
4958
|
-
|
|
4959
|
-
- {"path":"tests/hfs/hfs-coverage-below.spec.mjs","editions":["lite","full"]}
|
|
4960
|
-
witness:
|
|
4961
|
-
- {"path":"tests/hfs/hfs-coverage-below.spec.mjs","edition":"lite"}
|
|
4962
|
-
- {"path":"tests/hfs/hfs-coverage-below.spec.mjs","edition":"full"}
|
|
4451
|
+
specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
|
|
4963
4452
|
|
|
4453
|
+
witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
|
|
4964
4454
|
- id: R274
|
|
4965
4455
|
code: "RT_RULING_STALE_CITE"
|
|
4966
4456
|
law: "Live prose, source comments and spec titles cite current owner rulings using ruling:R212/case-4 or a stable owner id. A superseded or amended ruling needs its live successor in the same paragraph; staleWhen statements outside historical case text and CHANGELOGs are refused, and a bare owner ruling date must match a catalog case or owner ruling."
|
|
@@ -4974,15 +4464,10 @@ rules:
|
|
|
4974
4464
|
templateNa: "Runtime owner-ruling citation metadata has no product scaffold surface; passing and stale authored-source fixtures live in the ruling-cites spec."
|
|
4975
4465
|
docs:
|
|
4976
4466
|
- "docs/quality-bar.md#r274"
|
|
4977
|
-
|
|
4978
|
-
- {"path":"tests/checks/ruling-cites.spec.mjs","edition":"lite"}
|
|
4979
|
-
- {"path":"tests/checks/ruling-cites.spec.mjs","edition":"full"}
|
|
4980
|
-
proves:
|
|
4981
|
-
- {"path":"tests/checks/ruling-cites.spec.mjs","editions":["lite","full"]}
|
|
4982
|
-
witness:
|
|
4983
|
-
- {"path":"tests/checks/ruling-cites.spec.mjs","edition":"lite"}
|
|
4984
|
-
- {"path":"tests/checks/ruling-cites.spec.mjs","edition":"full"}
|
|
4467
|
+
specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
|
|
4985
4468
|
|
|
4469
|
+
witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
|
|
4470
|
+
exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
|
|
4986
4471
|
- id: R275
|
|
4987
4472
|
code: "STACKS_INGRESS_UNDECLARED"
|
|
4988
4473
|
law: "Every Swarm environment declares its one ingress component and hosts. The named component has role ingress and a digest-pinned supported ingress image; Traefik and Caddy are both accepted without a preferred product. An absent declaration, unknown component or unsupported image is refused."
|
|
@@ -4997,16 +4482,10 @@ rules:
|
|
|
4997
4482
|
exemplifiedBy:
|
|
4998
4483
|
- {"path":"packages/hfs/templates/app/skeleton-lite/.starcistacks","edition":"lite"}
|
|
4999
4484
|
- {"path":"packages/hfs/templates/app/skeleton/.starcistacks","edition":"full"}
|
|
5000
|
-
|
|
5001
|
-
- {"path":"tests/fixtures/hfs-stacks-full/passing.json","edition":"full"}
|
|
5002
|
-
- {"path":"tests/fixtures/hfs-stacks-full/violating.json","edition":"full"}
|
|
5003
|
-
proves:
|
|
5004
|
-
- {path: tests/hfs/hfs-stacks-full-fixtures.spec.mjs, edition: full}
|
|
5005
|
-
- "tests/hfs/hfs-stacks-ingress.spec.mjs"
|
|
5006
|
-
witness:
|
|
5007
|
-
- {"path":"tests/hfs/hfs-stacks-ingress.spec.mjs","edition":"lite"}
|
|
5008
|
-
- {"path":"tests/fixtures/hfs-stacks-full/violating.json","edition":"full"}
|
|
4485
|
+
specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
|
|
5009
4486
|
|
|
4487
|
+
witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
|
|
4488
|
+
exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
|
|
5010
4489
|
- id: R276
|
|
5011
4490
|
code: "STACKS_LITE_SELFHOSTED_DB"
|
|
5012
4491
|
law: "Lite uses managed Supabase and runs no PostgreSQL, Redis or MongoDB backing image. A sidecar that needs a database uses SQLite on a named persistent volume declared by its component and mounted in the rendered model; a sidecar requiring another database is refused. Full retains its declared backing topology."
|
|
@@ -5021,12 +4500,10 @@ rules:
|
|
|
5021
4500
|
- "docs/application-stacks.md#r276"
|
|
5022
4501
|
exemplifiedBy:
|
|
5023
4502
|
- {"path":"packages/hfs/templates/app/skeleton-lite/.starcistacks","edition":"lite"}
|
|
5024
|
-
|
|
5025
|
-
proves:
|
|
5026
|
-
- "tests/hfs/hfs-stacks-lite-backing.spec.mjs"
|
|
5027
|
-
witness:
|
|
5028
|
-
- {"path":"tests/hfs/hfs-stacks-lite-backing.spec.mjs","edition":"lite"}
|
|
4503
|
+
specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
|
|
5029
4504
|
|
|
4505
|
+
witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
|
|
4506
|
+
exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
|
|
5030
4507
|
- id: R277
|
|
5031
4508
|
code: "HFS_SECRET_PLAINTEXT_FILE"
|
|
5032
4509
|
law: "In every edition the only custody a tracked secret may take is a sops envelope at `.starcistacks/<env>/secrets/**.enc`. A tracked plaintext secret file is refused by being: `secrets.env` or `.secret(s).env` at any depth, a non-dot `*.env` or `*.env.<profile>` holding secret keys (deploy-side dotenv included), and a plaintext member of a `secrets/` directory; a sealed `.enc` outside the one sealed home is refused too (for lite it is already `HFS_LITE_SECRET_CUSTODY`)."
|
|
@@ -5039,16 +4516,10 @@ rules:
|
|
|
5039
4516
|
codeEditions: {HFS_SECRET_OUTSIDE_ENC: [full]}
|
|
5040
4517
|
docs: [docs/host-secrets.md#r277]
|
|
5041
4518
|
templateNa: "Sealed secret members are owner-created through starci app secret set after custody initialization; the scaffolder does not generate committed secret material."
|
|
5042
|
-
|
|
5043
|
-
- {path: tests/hfs/hfs-secret-custody.spec.mjs, editions: [lite, full], codes: [HFS_SECRET_PLAINTEXT_FILE]}
|
|
5044
|
-
- {path: tests/hfs/hfs-secret-custody.spec.mjs, editions: [full], codes: [HFS_SECRET_OUTSIDE_ENC]}
|
|
5045
|
-
proves:
|
|
5046
|
-
- {path: tests/hfs/hfs-secret-custody.spec.mjs, editions: [lite, full], codes: [HFS_SECRET_PLAINTEXT_FILE]}
|
|
5047
|
-
- {path: tests/hfs/hfs-secret-custody.spec.mjs, editions: [full], codes: [HFS_SECRET_OUTSIDE_ENC]}
|
|
5048
|
-
witness:
|
|
5049
|
-
- {path: tests/hfs/hfs-secret-custody.spec.mjs, editions: [lite, full], codes: [HFS_SECRET_PLAINTEXT_FILE]}
|
|
5050
|
-
- {path: tests/hfs/hfs-secret-custody.spec.mjs, editions: [full], codes: [HFS_SECRET_OUTSIDE_ENC]}
|
|
4519
|
+
specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
|
|
5051
4520
|
|
|
4521
|
+
witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
|
|
4522
|
+
exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
|
|
5052
4523
|
- id: R278
|
|
5053
4524
|
code: "BE_REST_DOOR_EVIDENCE"
|
|
5054
4525
|
amendedBy: [owner:credential-guarded-rest-door]
|
|
@@ -5102,16 +4573,12 @@ rules:
|
|
|
5102
4573
|
editions: [lite, full]
|
|
5103
4574
|
docs: [docs/quality-bar.md#r280, docs/quality-bar.md#r280-ledger]
|
|
5104
4575
|
exemplifiedBy:
|
|
5105
|
-
- {path: tests/hfs/hfs-unused-symbol.spec.mjs, editions: [lite, full], codes: [HFS_UNUSED_SYMBOL]}
|
|
5106
|
-
- {path: tests/hfs/hfs-unused-symbol-ledger.spec.mjs, editions: [lite, full], codes: [HFS_UNUSED_SYMBOL]}
|
|
5107
4576
|
- {path: packages/hfs/templates/be/skeleton/src/modules/domain/identity/errors/identity.error.ts, editions: [lite, full]}
|
|
5108
4577
|
- {path: packages/hfs/templates/be/skeleton/src/modules/domain/identity/admission.policy.ts, editions: [lite, full]}
|
|
5109
|
-
|
|
5110
|
-
- {path: tests/hfs/hfs-unused-symbol.spec.mjs, editions: [lite, full], codes: [HFS_UNUSED_SYMBOL]}
|
|
5111
|
-
- {path: tests/hfs/hfs-unused-symbol-ledger.spec.mjs, editions: [lite, full], codes: [HFS_UNUSED_SYMBOL]}
|
|
5112
|
-
witness:
|
|
5113
|
-
- {path: tests/hfs/hfs-unused-symbol.spec.mjs, editions: [lite, full], codes: [HFS_UNUSED_SYMBOL]}
|
|
4578
|
+
specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
|
|
5114
4579
|
|
|
4580
|
+
witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
|
|
4581
|
+
exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
|
|
5115
4582
|
- id: R281
|
|
5116
4583
|
code: "BE_SPEC_FORM_ALL_ROLES"
|
|
5117
4584
|
law: "Unit spec form applies to every declared logic role, including policies, mappers, guards and integration clients. A spec obtains its subject from a compiled Nest testing module with explicit providers, never constructs the subject or mocks an own module or third-party library, and asserts behavior or state rather than only toBeDefined existence checks."
|
|
@@ -5147,13 +4614,10 @@ rules:
|
|
|
5147
4614
|
editions: [lite, full]
|
|
5148
4615
|
docs: [docs/quality-bar.md#r282]
|
|
5149
4616
|
templateNa: "Build assets are supplied by each application; the scaffolder does not generate binary assets, model weights or datasets."
|
|
5150
|
-
|
|
5151
|
-
- {path: tests/hfs/hfs-assets.spec.mjs, editions: [lite, full], codes: [HFS_ASSET_OVERSIZE, HFS_ASSET_KIND]}
|
|
5152
|
-
proves:
|
|
5153
|
-
- {path: tests/hfs/hfs-assets.spec.mjs, editions: [lite, full], codes: [HFS_ASSET_OVERSIZE, HFS_ASSET_KIND]}
|
|
5154
|
-
witness:
|
|
5155
|
-
- {path: tests/hfs/hfs-assets.spec.mjs, editions: [lite, full], codes: [HFS_ASSET_OVERSIZE, HFS_ASSET_KIND]}
|
|
4617
|
+
specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
|
|
5156
4618
|
|
|
4619
|
+
witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
|
|
4620
|
+
exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
|
|
5157
4621
|
- id: R283
|
|
5158
4622
|
code: "HFS_APP_LEXICON"
|
|
5159
4623
|
law: "An app's source and documentation use the current product vocabulary: a word declared in hfs.json lexicon.removed is refused as a whole word or identifier segment, in both editions."
|
|
@@ -5165,13 +4629,10 @@ rules:
|
|
|
5165
4629
|
editions: [lite, full]
|
|
5166
4630
|
docs: [docs/quality-bar.md#r283]
|
|
5167
4631
|
templateNa: "Removed product vocabulary is application-specific hfs.json content; there is no canonical product lexicon to scaffold."
|
|
5168
|
-
|
|
5169
|
-
- {path: tests/hfs/hfs-lexicon.spec.mjs, editions: [lite, full], codes: [HFS_APP_LEXICON]}
|
|
5170
|
-
proves:
|
|
5171
|
-
- {path: tests/hfs/hfs-lexicon.spec.mjs, editions: [lite, full], codes: [HFS_APP_LEXICON]}
|
|
5172
|
-
witness:
|
|
5173
|
-
- {path: tests/hfs/hfs-lexicon.spec.mjs, editions: [lite, full], codes: [HFS_APP_LEXICON]}
|
|
4632
|
+
specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
|
|
5174
4633
|
|
|
4634
|
+
witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
|
|
4635
|
+
exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
|
|
5175
4636
|
- id: R284
|
|
5176
4637
|
code: "BE_LITE_PROOF_LANE_MISSING"
|
|
5177
4638
|
law: "A lite back end declaring event-bus, queue, webhooks, realtime, fenced-job, projection or saga proves each declared pattern through integration specs under src/tests/integration: runnable tests carry titles `<pattern>/<scenario>: ...` for every required scenario of that pattern. A missing integration lane is refused; missing scenario proofs use R155's BE_PATTERN_SPEC_MISSING. Full-edition pattern proof behavior is unchanged."
|
|
@@ -5184,13 +4645,10 @@ rules:
|
|
|
5184
4645
|
editionWhy: "ruling:R212/case-2 (owner:lite-production-swarm) (with the Work boundary amended by ruling:R212/case-4): lite has no e2e world and proves declared patterns in its integration lane; R284 owns only the lite lane code while full retains its existing pattern-proof rules."
|
|
5185
4646
|
docs: [docs/quality-bar.md#r284]
|
|
5186
4647
|
templateNa: "Integration scenarios depend on the application patterns and providers; no universal runnable scenario lane is scaffolded."
|
|
5187
|
-
|
|
5188
|
-
- {path: tests/hfs/hfs-lite-proof-lane.spec.mjs, editions: [lite], codes: [BE_LITE_PROOF_LANE_MISSING]}
|
|
5189
|
-
proves:
|
|
5190
|
-
- {path: tests/hfs/hfs-lite-proof-lane.spec.mjs, editions: [lite], codes: [BE_LITE_PROOF_LANE_MISSING]}
|
|
5191
|
-
witness:
|
|
5192
|
-
- {path: tests/hfs/hfs-lite-proof-lane.spec.mjs, editions: [lite], codes: [BE_LITE_PROOF_LANE_MISSING]}
|
|
4648
|
+
specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
|
|
5193
4649
|
|
|
4650
|
+
witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
|
|
4651
|
+
exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
|
|
5194
4652
|
- id: R285
|
|
5195
4653
|
code: "FE_SWR_OUTSIDE_FAMILY"
|
|
5196
4654
|
law: "SWR runtime calls belong to the declared SWR hook family. A component, feature or domain hook consumes its wrapper hook instead of importing an API operation or calling SWR itself; each back-end operation is imported and invoked only by its SWR wrapper under hooks/swr, regardless of whether the tier matrix still permits a direct transport edge."
|
|
@@ -5265,13 +4723,11 @@ rules:
|
|
|
5265
4723
|
editions: [lite, full]
|
|
5266
4724
|
docs: [docs/quality-bar.md#r288]
|
|
5267
4725
|
exemplifiedBy:
|
|
5268
|
-
- {path: tests/hfs/hfs-fe-stack.spec.mjs, editions: [lite, full], codes: [FE_STACK_UNLISTED, FE_STACK_CORE_MISSING]}
|
|
5269
4726
|
- {path: packages/hfs/templates/fe/app/package.json.tpl, editions: [lite, full]}
|
|
5270
|
-
|
|
5271
|
-
- {path: tests/hfs/hfs-fe-stack.spec.mjs, editions: [lite, full], codes: [FE_STACK_UNLISTED, FE_STACK_CORE_MISSING]}
|
|
5272
|
-
witness:
|
|
5273
|
-
- {path: tests/hfs/hfs-fe-stack.spec.mjs, editions: [lite, full], codes: [FE_STACK_UNLISTED, FE_STACK_CORE_MISSING]}
|
|
4727
|
+
specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
|
|
5274
4728
|
|
|
4729
|
+
witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
|
|
4730
|
+
exampleNa: "owner:no-runtime-specs (2026-10-17): the only example was a deleted runtime spec or fixture; the rule judges the runtime or the scaffold, which the scaffold e2e exercises"
|
|
5275
4731
|
- id: R289
|
|
5276
4732
|
code: "BE_APP_ENV_REQUIRED"
|
|
5277
4733
|
law: "Every declared back-end app owns a tracked apps/<app>/src/<app>.env.ts exporting its typed environment interface and read<App>Env(env: EnvSource). main.ts constructs EnvSource once and delegates its reads to that reader, with no inline parsing. app.module.ts composes module lists only by spreading compose/<area>.ts groups; its own providers are limited to app-wide guards and filters."
|
|
@@ -5285,19 +4741,17 @@ rules:
|
|
|
5285
4741
|
editions: [lite, full]
|
|
5286
4742
|
docs: [docs/microservices.md#r289]
|
|
5287
4743
|
exemplifiedBy:
|
|
5288
|
-
- {path: tests/hfs/hfs-app-env-required.spec.mjs, editions: [lite, full], codes: [BE_APP_ENV_REQUIRED]}
|
|
5289
4744
|
- {path: packages/eslint/be/app-composition.spec.mjs, editions: [lite, full], codes: [BE_APP_ENV_REQUIRED, BE_APP_MODULE_LIST_INLINE]}
|
|
5290
4745
|
- {path: packages/hfs/templates/be/skeleton/apps/__app__/src/__app__.env.ts, editions: [full]}
|
|
5291
4746
|
- {path: packages/hfs/templates/be/skeleton/apps/__app__/src/app.module.ts, editions: [full]}
|
|
5292
4747
|
- {path: packages/hfs/templates/be/skeleton-lite/apps/api/src/api.env.ts, editions: [lite]}
|
|
5293
4748
|
- {path: packages/hfs/templates/be/skeleton-lite/apps/api/src/app.module.ts, editions: [lite]}
|
|
5294
4749
|
proves:
|
|
5295
|
-
- {path: tests/hfs/hfs-app-env-required.spec.mjs, editions: [lite, full], codes: [BE_APP_ENV_REQUIRED]}
|
|
5296
4750
|
- {path: packages/eslint/be/app-composition.spec.mjs, editions: [lite, full], codes: [BE_APP_ENV_REQUIRED, BE_APP_MODULE_LIST_INLINE]}
|
|
5297
4751
|
witness:
|
|
5298
|
-
- {path: tests/hfs/hfs-app-env-required.spec.mjs, editions: [lite, full], codes: [BE_APP_ENV_REQUIRED]}
|
|
5299
4752
|
- {path: packages/eslint/be/app-composition.spec.mjs, editions: [lite, full], codes: [BE_APP_ENV_REQUIRED, BE_APP_MODULE_LIST_INLINE]}
|
|
5300
4753
|
|
|
4754
|
+
specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; the package specs named in proves keep proving the lint enforcers, the runtime-code enforcers lost their deleted runtime spec"
|
|
5301
4755
|
- id: R290
|
|
5302
4756
|
code: "BE_PUBLIC_REASON_CLOSED"
|
|
5303
4757
|
amendedBy: [owner:credential-guarded-rest-door]
|
|
@@ -5353,15 +4807,12 @@ rules:
|
|
|
5353
4807
|
editions: [lite, full]
|
|
5354
4808
|
docs: [docs/quality-bar.md#r292]
|
|
5355
4809
|
exemplifiedBy:
|
|
5356
|
-
- {path: tests/hfs/hfs-feature-files.spec.mjs, editions: [lite, full], codes: [HFS_FEATURE_FILE_BUDGET]}
|
|
5357
4810
|
- {path: packages/hfs/templates/be/patterns/api, editions: [lite, full]}
|
|
5358
4811
|
- {path: examples/lite-app/be/src/features/api/bookings, editions: [lite]}
|
|
5359
4812
|
- {path: examples/ecommerce-app/be/src/features/api/checkout, editions: [full]}
|
|
5360
|
-
|
|
5361
|
-
- {path: tests/hfs/hfs-feature-files.spec.mjs, editions: [lite, full], codes: [HFS_FEATURE_FILE_BUDGET]}
|
|
5362
|
-
witness:
|
|
5363
|
-
- {path: tests/hfs/hfs-feature-files.spec.mjs, editions: [lite, full], codes: [HFS_FEATURE_FILE_BUDGET]}
|
|
4813
|
+
specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
|
|
5364
4814
|
|
|
4815
|
+
witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
|
|
5365
4816
|
- id: R293
|
|
5366
4817
|
code: "STACK_TOOLING_REIMPLEMENTED"
|
|
5367
4818
|
law: "In lite and full apps, an app does not re-implement the Swarm deploy tooling the canon ships as `starci app stack <verb>`. Tracked deploy sources (files under deploy/ and scripts/, the scripts of package.json and every workflow except the managed stack-deploy.yml) never call a docker command a verb owns (docker stack deploy and config, docker secret and config create and rm, docker service ls, ps, inspect and update, docker swarm init, docker volume create, docker node ls), and deploy/ holds no render, provision, converge, verify, prune, rollback, release, backup, prepare, doctor, jobs or public script. A finding names the file and the replacing verb, never a snippet; docker stack rm, ls, ps and services, docker compose, docker run, exec, ps and logs, comments, documents and `starci app stack ...` command lines are not judged."
|
|
@@ -5379,14 +4830,9 @@ rules:
|
|
|
5379
4830
|
- {path: packages/hfs/templates/app/ci-workflows-lite/github/workflows/ci.yml, edition: lite}
|
|
5380
4831
|
- {path: packages/hfs/templates/app/ci-workflows/github/workflows/ci.yml, edition: full}
|
|
5381
4832
|
- {path: examples/lite-app/.github/workflows/stack-deploy.yml, edition: lite}
|
|
5382
|
-
|
|
5383
|
-
- {path: tests/fixtures/hfs-stack-tooling/passing.json, edition: full}
|
|
5384
|
-
proves:
|
|
5385
|
-
- {path: tests/hfs/hfs-stack-tooling.spec.mjs, editions: [lite, full]}
|
|
5386
|
-
witness:
|
|
5387
|
-
- {path: tests/fixtures/hfs-stack-tooling/violating.json, edition: lite}
|
|
5388
|
-
- {path: tests/fixtures/hfs-stack-tooling/violating.json, edition: full}
|
|
4833
|
+
specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
|
|
5389
4834
|
|
|
4835
|
+
witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
|
|
5390
4836
|
- id: R294
|
|
5391
4837
|
code: "STACKS_DEPLOY_CONFIG_INVALID"
|
|
5392
4838
|
law: "In lite and full apps, every docker-swarm environment of .starcistacks/application-stacks.yaml that declares environments.<env>.deploy declares a coherent block: it is judged by the same normalizeDeploy the `starci app stack` verbs use, against the real tree. Unknown fields are refused, names, keys, volumes, hosts, URLs and commands match their patterns, the config and public environment files exist below .starcistacks/<env>/, every service names a service of the first stack source, every sealed member has a secrets/<member>.enc file, verify entries and configs are well formed with unique config names, and the backup helper image is pinned by a real sha256 digest (no placeholder). Each problem is one finding at environments.<env>.<field>; an environment without a deploy block is not a finding."
|
|
@@ -5402,12 +4848,9 @@ rules:
|
|
|
5402
4848
|
exemplifiedBy:
|
|
5403
4849
|
- {path: packages/hfs/templates/app/skeleton-lite/.starcistacks, edition: lite}
|
|
5404
4850
|
- {path: packages/hfs/templates/app/skeleton/.starcistacks, edition: full}
|
|
5405
|
-
|
|
5406
|
-
proves:
|
|
5407
|
-
- {path: tests/hfs/hfs-stacks-deploy.spec.mjs, editions: [lite, full]}
|
|
5408
|
-
witness:
|
|
5409
|
-
- {path: tests/hfs/hfs-stacks-deploy.spec.mjs, editions: [lite, full]}
|
|
4851
|
+
specNa: "owner:no-runtime-specs (2026-10-17): the runtime has no specs of its own; this code is enforced by runtime code and its spec proof was a deleted runtime spec"
|
|
5410
4852
|
|
|
4853
|
+
witness: {status: unreachable, reason: "owner:no-runtime-specs (2026-10-17): the mutation witness was a deleted runtime spec or fixture", date: "2026-10-17"}
|
|
5411
4854
|
- id: R295
|
|
5412
4855
|
code: "BE_MODULE_DEFINITION_MISSING"
|
|
5413
4856
|
law: "Every NestJS module of the product has a module definition (owner ruling 2026-10-15, owner:module-definition-everywhere): capability modules, sub-modules, features, transport modules and cli groups alike. For a module `<x>` the folder holds `<x>.module-definition.ts` (`export const { ConfigurableModuleClass, MODULE_OPTIONS_TOKEN, OPTIONS_TYPE } = new ConfigurableModuleBuilder<XOptions>().setClassMethodName(\"register\").build()`; the representative module of a capability keeps `.setExtras({ isGlobal: false }, ...)`), `<x>.options.ts` (`export type XOptions`, `Record<string, never>` with a one-line doc when it takes nothing yet) and `<x>.module.ts` (`@Module({...}) export class XModule extends ConfigurableModuleClass {}`, no `register` override except the capability representative's). A module appears in an `imports` array or in an app composition group only as `XModule.register({...})`, never as a bare class. The `AppModule` of an app root and the test world are composition roots and are not judged."
|