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