arkgate 4.8.24 → 4.8.25
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 +85 -0
- package/README.md +2 -2
- package/bin/ark-check-runtime.mjs +17 -14
- package/bin/ark-layer-match.mjs +115 -13
- package/bin/ark-mcp-runtime.mjs +36 -31
- package/bin/ark-shared.mjs +4 -23
- package/bin/lib/adoption-stance.mjs +2 -2
- package/bin/lib/adr-path.mjs +3 -3
- package/bin/lib/agent-gates.mjs +0 -61
- package/bin/lib/agent-homes.mjs +12 -21
- package/bin/lib/agent-projection-command.mjs +4 -4
- package/bin/lib/ambient-state.mjs +9 -30
- package/bin/lib/analysis-engine.mjs +14 -14
- package/bin/lib/architecture-scan.mjs +11 -9
- package/bin/lib/ark-order-doctor.mjs +3 -28
- package/bin/lib/ark-order-facts.mjs +6 -99
- package/bin/lib/ark-order-types.mjs +1 -2
- package/bin/lib/ark-run-doctor.mjs +3 -28
- package/bin/lib/ark-run-facts.mjs +30 -40
- package/bin/lib/ark-run-sensors.mjs +1 -1
- package/bin/lib/arkrule-file-hints.mjs +2 -47
- package/bin/lib/arkrules-contract.mjs +124 -133
- package/bin/lib/arkrules-sensors.mjs +7 -5
- package/bin/lib/check-args.mjs +63 -1
- package/bin/lib/ci-and-commands.mjs +8 -72
- package/bin/lib/ci-merge-boundary.mjs +1 -1
- package/bin/lib/class-source-scan.mjs +5 -5
- package/bin/lib/clone-detection.mjs +474 -0
- package/bin/lib/codex-home.mjs +1 -1
- package/bin/lib/config-contract-slices.mjs +44 -6
- package/bin/lib/config-contract.mjs +40 -117
- package/bin/lib/config-extras.mjs +16 -22
- package/bin/lib/contract-smells.mjs +33 -15
- package/bin/lib/core-ratchet.mjs +0 -2
- package/bin/lib/dashboard-cli.mjs +2 -2
- package/bin/lib/deep-module-coach.mjs +2 -4
- package/bin/lib/deploy-path.mjs +13 -38
- package/bin/lib/design-smells.mjs +2 -2
- package/bin/lib/diagnostic-catalog.mjs +8 -1
- package/bin/lib/doctor-advisories.mjs +55 -9
- package/bin/lib/doctor-green-cite.mjs +1 -1
- package/bin/lib/doctor-human.mjs +1 -1
- package/bin/lib/doctor-next-actions.mjs +2 -2
- package/bin/lib/doctor-plan.mjs +4 -6
- package/bin/lib/duplication-io.mjs +572 -0
- package/bin/lib/effective-contract-load.mjs +181 -44
- package/bin/lib/entry-points-io.mjs +424 -0
- package/bin/lib/extra-merge-teeth.mjs +36 -0
- package/bin/lib/field-install.mjs +38 -14
- package/bin/lib/first-run-help.mjs +7 -3
- package/bin/lib/flat-parent-importers.mjs +5 -3
- package/bin/lib/gate-files.mjs +30 -89
- package/bin/lib/github-enforcement.mjs +165 -28
- package/bin/lib/golden-pattern.mjs +1 -1
- package/bin/lib/hook-templates.mjs +16 -16
- package/bin/lib/html-report-advisories.mjs +4 -0
- package/bin/lib/html-report-depth.mjs +2 -2
- package/bin/lib/html-report.mjs +2 -2
- package/bin/lib/import-graph-projection.mjs +112 -0
- package/bin/lib/improvement-compass-doctor.mjs +1 -24
- package/bin/lib/invariant-coverage-io.mjs +4 -3
- package/bin/lib/invariant-coverage.mjs +26 -0
- package/bin/lib/invariant-probe-cli.mjs +347 -0
- package/bin/lib/invariant-probe-io.mjs +165 -0
- package/bin/lib/invariant-probe-runner.mjs +268 -0
- package/bin/lib/invariant-probe-sites.mjs +174 -0
- package/bin/lib/invariant-probe-workspace.mjs +183 -0
- package/bin/lib/invariant-probe.mjs +461 -0
- package/bin/lib/invariant-tests-path.mjs +16 -22
- package/bin/lib/literal-path-drift.mjs +4 -2
- package/bin/lib/managed-upgrade.mjs +2 -8
- package/bin/lib/mcp-adoption.mjs +4 -5
- package/bin/lib/mcp-hook-payload.mjs +4 -4
- package/bin/lib/orphan-modules-io.mjs +458 -0
- package/bin/lib/orphan-modules.mjs +251 -0
- package/bin/lib/outside-importers.mjs +197 -0
- package/bin/lib/package-manager.mjs +3 -3
- package/bin/lib/parse-health.mjs +1 -1
- package/bin/lib/persistence-write-hint.mjs +33 -8
- package/bin/lib/pin-dependent-gates.mjs +2 -2
- package/bin/lib/policy-delta-io.mjs +55 -8
- package/bin/lib/post-green-path.mjs +1 -1
- package/bin/lib/prepare-change.mjs +3 -9
- package/bin/lib/prepare-write.mjs +1 -2
- package/bin/lib/presets.mjs +56 -68
- package/bin/lib/product-copy.mjs +1 -6
- package/bin/lib/project-root.mjs +31 -62
- package/bin/lib/resolved-candidate-facts.mjs +90 -62
- package/bin/lib/rules-under-contract.mjs +72 -8
- package/bin/lib/scan-files.mjs +4 -4
- package/bin/lib/schema-validation.mjs +130 -0
- package/bin/lib/sensor-promote-cli.mjs +2 -11
- package/bin/lib/sensor-promote-io.mjs +33 -22
- package/bin/lib/sensor-promotion.mjs +1 -1
- package/bin/lib/skill-catalog-apply.mjs +1 -1
- package/bin/lib/skill-install.mjs +42 -38
- package/bin/lib/snippet-analysis.mjs +1 -1
- package/bin/lib/start-install-recovery.mjs +1 -1
- package/bin/lib/start-preview.mjs +1 -1
- package/bin/lib/states-transitions-presence.mjs +3 -3
- package/bin/lib/status-command.mjs +2 -18
- package/bin/lib/status-manifest.mjs +18 -26
- package/bin/lib/status-transition-catalog.mjs +0 -6
- package/bin/lib/suggestions.mjs +3 -3
- package/bin/lib/team-parliament-io.mjs +3 -17
- package/bin/lib/team-parliament.mjs +15 -9
- package/bin/lib/upgrade-behavior-changes.mjs +2 -2
- package/bin/lib/upgrade-command.mjs +2 -24
- package/bin/lib/upgrade-outcome.mjs +1 -1
- package/bin/lib/upstream-report.mjs +21 -10
- package/bin/lib/violations.mjs +10 -9
- package/bin/lib/weakest-link.mjs +13 -0
- package/bin/lib/write-path-capabilities.mjs +2 -2
- package/dist/chunk-AHACEKSV.js +16 -0
- package/dist/chunk-UN5EH4QV.cjs +16 -0
- package/dist/{configTypes-BJbaeoj4.d.cts → configTypes-GPvvdleM.d.cts} +12 -1
- package/dist/{configTypes-BJbaeoj4.d.ts → configTypes-GPvvdleM.d.ts} +12 -1
- package/dist/eslint/index.cjs +11 -11
- package/dist/eslint/index.d.cts +10 -1
- package/dist/eslint/index.d.ts +10 -1
- package/dist/eslint/index.js +11 -11
- package/dist/index.cjs +34 -34
- package/dist/index.d.cts +587 -515
- package/dist/index.d.ts +587 -515
- package/dist/index.js +34 -34
- package/dist/nestjs/index.cjs +1 -1
- package/dist/nestjs/index.d.cts +1 -1
- package/dist/nestjs/index.d.ts +1 -1
- package/dist/nestjs/index.js +1 -1
- package/dist/order/index.cjs +1 -1
- package/dist/order/index.js +1 -1
- package/dist/runtime/index.cjs +12 -12
- package/dist/runtime/index.d.cts +174 -136
- package/dist/runtime/index.d.ts +174 -136
- package/dist/runtime/index.js +12 -12
- package/dist/{types-DRinG-vT.d.cts → types-CnauMQQL.d.cts} +33 -25
- package/dist/{types-DRinG-vT.d.ts → types-CnauMQQL.d.ts} +33 -25
- package/docs/README.md +2 -1
- package/docs/agent-guide.md +134 -2
- package/docs/ai-gates.md +15 -1
- package/docs/configuration.md +40 -11
- package/docs/diagnostics.md +118 -2
- package/docs/package-surface.md +4 -1
- package/docs/product-voice.md +7 -1
- package/package.json +11 -2
- package/schemas/ark.config.schema.json +31 -3
- package/schemas/ark.invariant-probe.schema.json +368 -0
- package/server.json +2 -2
- package/templates/agent-skills/README.md +1 -1
- package/templates/agent-skills/ark-adopt/SKILL.md +1 -0
- package/templates/agent-skills/ark-contract/SKILL.md +17 -0
- package/templates/agent-skills/ark-coverage/SKILL.md +2 -0
- package/templates/agent-skills/ark-explore/SKILL.md +7 -0
- package/templates/agent-skills/ark-fix/SKILL.md +20 -0
- package/templates/agent-skills/ark-place/SKILL.md +8 -0
- package/templates/skills/ark-adopt.md +1 -0
- package/templates/skills/ark-contract.md +17 -0
- package/templates/skills/ark-coverage.md +2 -0
- package/templates/skills/ark-explore.md +7 -0
- package/templates/skills/ark-fix.md +20 -0
- package/templates/skills/ark-place.md +8 -0
- package/bin/lib/ark-order-error.mjs +0 -18
- package/bin/lib/ark-order-invariants.mjs +0 -388
- package/bin/lib/stable-hash.mjs +0 -90
- package/dist/chunk-MBXCFLO4.js +0 -16
- package/dist/chunk-RNQHRDCQ.cjs +0 -16
|
@@ -0,0 +1,368 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://unpkg.com/arkgate@4/schemas/ark.invariant-probe.schema.json",
|
|
4
|
+
"title": "ArkGate invariant mutation probe",
|
|
5
|
+
"description": "Per-invariant evidence from arkgate-check --probe-invariants --write. Not a score. A fresh survived or not-reached row refuses promotion to enforced; every other state changes nothing.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"additionalProperties": false,
|
|
8
|
+
"required": [
|
|
9
|
+
"schemaVersion",
|
|
10
|
+
"kind",
|
|
11
|
+
"notAScore",
|
|
12
|
+
"arkgateVersion",
|
|
13
|
+
"operatorSet",
|
|
14
|
+
"runner",
|
|
15
|
+
"probedOn",
|
|
16
|
+
"invariants",
|
|
17
|
+
"totals"
|
|
18
|
+
],
|
|
19
|
+
"properties": {
|
|
20
|
+
"$schema": {
|
|
21
|
+
"type": "string"
|
|
22
|
+
},
|
|
23
|
+
"schemaVersion": {
|
|
24
|
+
"const": "1.0"
|
|
25
|
+
},
|
|
26
|
+
"kind": {
|
|
27
|
+
"const": "arkgate-invariant-probe"
|
|
28
|
+
},
|
|
29
|
+
"notAScore": {
|
|
30
|
+
"const": true
|
|
31
|
+
},
|
|
32
|
+
"arkgateVersion": {
|
|
33
|
+
"type": "string",
|
|
34
|
+
"minLength": 1
|
|
35
|
+
},
|
|
36
|
+
"operatorSet": {
|
|
37
|
+
"type": "string",
|
|
38
|
+
"minLength": 1
|
|
39
|
+
},
|
|
40
|
+
"runner": {
|
|
41
|
+
"oneOf": [
|
|
42
|
+
{
|
|
43
|
+
"type": "null"
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"type": "object",
|
|
47
|
+
"additionalProperties": false,
|
|
48
|
+
"required": [
|
|
49
|
+
"id",
|
|
50
|
+
"version"
|
|
51
|
+
],
|
|
52
|
+
"properties": {
|
|
53
|
+
"id": {
|
|
54
|
+
"enum": [
|
|
55
|
+
"vitest",
|
|
56
|
+
"jest",
|
|
57
|
+
"node"
|
|
58
|
+
]
|
|
59
|
+
},
|
|
60
|
+
"version": {
|
|
61
|
+
"type": [
|
|
62
|
+
"string",
|
|
63
|
+
"null"
|
|
64
|
+
],
|
|
65
|
+
"minLength": 1
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
]
|
|
70
|
+
},
|
|
71
|
+
"probedOn": {
|
|
72
|
+
"type": "string",
|
|
73
|
+
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
|
|
74
|
+
},
|
|
75
|
+
"invariants": {
|
|
76
|
+
"type": "array",
|
|
77
|
+
"maxItems": 500,
|
|
78
|
+
"items": {
|
|
79
|
+
"$ref": "#/$defs/row"
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
"totals": {
|
|
83
|
+
"type": "object",
|
|
84
|
+
"additionalProperties": false,
|
|
85
|
+
"required": [
|
|
86
|
+
"probed",
|
|
87
|
+
"killed",
|
|
88
|
+
"survived",
|
|
89
|
+
"notReached",
|
|
90
|
+
"inconclusive",
|
|
91
|
+
"unprobeable"
|
|
92
|
+
],
|
|
93
|
+
"properties": {
|
|
94
|
+
"probed": {
|
|
95
|
+
"type": "integer",
|
|
96
|
+
"minimum": 0
|
|
97
|
+
},
|
|
98
|
+
"killed": {
|
|
99
|
+
"type": "integer",
|
|
100
|
+
"minimum": 0
|
|
101
|
+
},
|
|
102
|
+
"survived": {
|
|
103
|
+
"type": "integer",
|
|
104
|
+
"minimum": 0
|
|
105
|
+
},
|
|
106
|
+
"notReached": {
|
|
107
|
+
"type": "integer",
|
|
108
|
+
"minimum": 0
|
|
109
|
+
},
|
|
110
|
+
"inconclusive": {
|
|
111
|
+
"type": "integer",
|
|
112
|
+
"minimum": 0
|
|
113
|
+
},
|
|
114
|
+
"unprobeable": {
|
|
115
|
+
"type": "integer",
|
|
116
|
+
"minimum": 0
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
},
|
|
121
|
+
"$defs": {
|
|
122
|
+
"row": {
|
|
123
|
+
"type": "object",
|
|
124
|
+
"additionalProperties": false,
|
|
125
|
+
"required": [
|
|
126
|
+
"invariantId",
|
|
127
|
+
"invariantHash",
|
|
128
|
+
"layer",
|
|
129
|
+
"sourceFile",
|
|
130
|
+
"mode",
|
|
131
|
+
"symbol",
|
|
132
|
+
"symbolFile",
|
|
133
|
+
"symbolFileHash",
|
|
134
|
+
"tests",
|
|
135
|
+
"baseline",
|
|
136
|
+
"wiring",
|
|
137
|
+
"mutants",
|
|
138
|
+
"verdict",
|
|
139
|
+
"reason"
|
|
140
|
+
],
|
|
141
|
+
"properties": {
|
|
142
|
+
"invariantId": {
|
|
143
|
+
"type": "string",
|
|
144
|
+
"minLength": 1
|
|
145
|
+
},
|
|
146
|
+
"invariantHash": {
|
|
147
|
+
"type": "string",
|
|
148
|
+
"minLength": 1
|
|
149
|
+
},
|
|
150
|
+
"layer": {
|
|
151
|
+
"type": [
|
|
152
|
+
"string",
|
|
153
|
+
"null"
|
|
154
|
+
],
|
|
155
|
+
"minLength": 1
|
|
156
|
+
},
|
|
157
|
+
"sourceFile": {
|
|
158
|
+
"type": [
|
|
159
|
+
"string",
|
|
160
|
+
"null"
|
|
161
|
+
],
|
|
162
|
+
"minLength": 1
|
|
163
|
+
},
|
|
164
|
+
"mode": {
|
|
165
|
+
"enum": [
|
|
166
|
+
"advisory",
|
|
167
|
+
"enforced"
|
|
168
|
+
]
|
|
169
|
+
},
|
|
170
|
+
"symbol": {
|
|
171
|
+
"type": [
|
|
172
|
+
"string",
|
|
173
|
+
"null"
|
|
174
|
+
],
|
|
175
|
+
"minLength": 1
|
|
176
|
+
},
|
|
177
|
+
"symbolFile": {
|
|
178
|
+
"type": [
|
|
179
|
+
"string",
|
|
180
|
+
"null"
|
|
181
|
+
],
|
|
182
|
+
"minLength": 1
|
|
183
|
+
},
|
|
184
|
+
"symbolFileHash": {
|
|
185
|
+
"type": [
|
|
186
|
+
"string",
|
|
187
|
+
"null"
|
|
188
|
+
],
|
|
189
|
+
"minLength": 1
|
|
190
|
+
},
|
|
191
|
+
"tests": {
|
|
192
|
+
"type": "array",
|
|
193
|
+
"maxItems": 8,
|
|
194
|
+
"items": {
|
|
195
|
+
"type": "object",
|
|
196
|
+
"additionalProperties": false,
|
|
197
|
+
"required": [
|
|
198
|
+
"path",
|
|
199
|
+
"contentHash"
|
|
200
|
+
],
|
|
201
|
+
"properties": {
|
|
202
|
+
"path": {
|
|
203
|
+
"type": "string",
|
|
204
|
+
"minLength": 1
|
|
205
|
+
},
|
|
206
|
+
"contentHash": {
|
|
207
|
+
"type": "string",
|
|
208
|
+
"minLength": 1
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
},
|
|
213
|
+
"baseline": {
|
|
214
|
+
"oneOf": [
|
|
215
|
+
{
|
|
216
|
+
"type": "null"
|
|
217
|
+
},
|
|
218
|
+
{
|
|
219
|
+
"type": "object",
|
|
220
|
+
"additionalProperties": false,
|
|
221
|
+
"required": [
|
|
222
|
+
"status",
|
|
223
|
+
"durationMs"
|
|
224
|
+
],
|
|
225
|
+
"properties": {
|
|
226
|
+
"status": {
|
|
227
|
+
"enum": [
|
|
228
|
+
"green",
|
|
229
|
+
"red",
|
|
230
|
+
"timeout",
|
|
231
|
+
"runtime-error"
|
|
232
|
+
]
|
|
233
|
+
},
|
|
234
|
+
"durationMs": {
|
|
235
|
+
"type": "integer",
|
|
236
|
+
"minimum": 0
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
]
|
|
241
|
+
},
|
|
242
|
+
"wiring": {
|
|
243
|
+
"oneOf": [
|
|
244
|
+
{
|
|
245
|
+
"type": "null"
|
|
246
|
+
},
|
|
247
|
+
{
|
|
248
|
+
"type": "object",
|
|
249
|
+
"additionalProperties": false,
|
|
250
|
+
"required": [
|
|
251
|
+
"load",
|
|
252
|
+
"reach"
|
|
253
|
+
],
|
|
254
|
+
"properties": {
|
|
255
|
+
"load": {
|
|
256
|
+
"enum": [
|
|
257
|
+
"killed",
|
|
258
|
+
"survived",
|
|
259
|
+
"timeout",
|
|
260
|
+
"runtime-error",
|
|
261
|
+
"invalid",
|
|
262
|
+
null
|
|
263
|
+
]
|
|
264
|
+
},
|
|
265
|
+
"reach": {
|
|
266
|
+
"enum": [
|
|
267
|
+
"killed",
|
|
268
|
+
"survived",
|
|
269
|
+
"timeout",
|
|
270
|
+
"runtime-error",
|
|
271
|
+
"invalid",
|
|
272
|
+
null
|
|
273
|
+
]
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
]
|
|
278
|
+
},
|
|
279
|
+
"mutants": {
|
|
280
|
+
"type": "array",
|
|
281
|
+
"maxItems": 3,
|
|
282
|
+
"items": {
|
|
283
|
+
"type": "object",
|
|
284
|
+
"additionalProperties": false,
|
|
285
|
+
"required": [
|
|
286
|
+
"id",
|
|
287
|
+
"operator",
|
|
288
|
+
"line",
|
|
289
|
+
"column",
|
|
290
|
+
"original",
|
|
291
|
+
"replacement",
|
|
292
|
+
"status",
|
|
293
|
+
"durationMs"
|
|
294
|
+
],
|
|
295
|
+
"properties": {
|
|
296
|
+
"id": {
|
|
297
|
+
"type": "string",
|
|
298
|
+
"minLength": 1
|
|
299
|
+
},
|
|
300
|
+
"operator": {
|
|
301
|
+
"enum": [
|
|
302
|
+
"negate-guard",
|
|
303
|
+
"drop-throw",
|
|
304
|
+
"flip-comparison",
|
|
305
|
+
"boundary-shift",
|
|
306
|
+
"const-shift"
|
|
307
|
+
]
|
|
308
|
+
},
|
|
309
|
+
"line": {
|
|
310
|
+
"type": "integer",
|
|
311
|
+
"minimum": 1
|
|
312
|
+
},
|
|
313
|
+
"column": {
|
|
314
|
+
"type": "integer",
|
|
315
|
+
"minimum": 1
|
|
316
|
+
},
|
|
317
|
+
"original": {
|
|
318
|
+
"type": "string"
|
|
319
|
+
},
|
|
320
|
+
"replacement": {
|
|
321
|
+
"type": "string"
|
|
322
|
+
},
|
|
323
|
+
"status": {
|
|
324
|
+
"enum": [
|
|
325
|
+
"killed",
|
|
326
|
+
"survived",
|
|
327
|
+
"timeout",
|
|
328
|
+
"runtime-error",
|
|
329
|
+
"invalid"
|
|
330
|
+
]
|
|
331
|
+
},
|
|
332
|
+
"durationMs": {
|
|
333
|
+
"type": "integer",
|
|
334
|
+
"minimum": 0
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
},
|
|
339
|
+
"verdict": {
|
|
340
|
+
"enum": [
|
|
341
|
+
"killed",
|
|
342
|
+
"survived",
|
|
343
|
+
"not-reached",
|
|
344
|
+
"inconclusive",
|
|
345
|
+
"unprobeable"
|
|
346
|
+
]
|
|
347
|
+
},
|
|
348
|
+
"reason": {
|
|
349
|
+
"enum": [
|
|
350
|
+
"all-killed",
|
|
351
|
+
"mutant-survived",
|
|
352
|
+
"reach-canary-survived",
|
|
353
|
+
"baseline-red",
|
|
354
|
+
"baseline-timeout",
|
|
355
|
+
"runner-error",
|
|
356
|
+
"file-not-loaded",
|
|
357
|
+
"mutant-runtime-error",
|
|
358
|
+
"no-symbol",
|
|
359
|
+
"declaration-only",
|
|
360
|
+
"symbol-not-found",
|
|
361
|
+
"no-covering-test",
|
|
362
|
+
"no-site"
|
|
363
|
+
]
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
}
|
package/server.json
CHANGED
|
@@ -6,12 +6,12 @@
|
|
|
6
6
|
"url": "https://github.com/pedroknigge/arkgate",
|
|
7
7
|
"source": "github"
|
|
8
8
|
},
|
|
9
|
-
"version": "4.8.
|
|
9
|
+
"version": "4.8.25",
|
|
10
10
|
"packages": [
|
|
11
11
|
{
|
|
12
12
|
"registryType": "npm",
|
|
13
13
|
"identifier": "arkgate",
|
|
14
|
-
"version": "4.8.
|
|
14
|
+
"version": "4.8.25",
|
|
15
15
|
"runtimeHint": "npx",
|
|
16
16
|
"transport": {
|
|
17
17
|
"type": "stdio"
|
|
@@ -9,7 +9,7 @@ closed `/ark-*` catalog shipped as flat templates for Ark install.
|
|
|
9
9
|
**Closed catalog** (`ARK_SKILL_NAMES`) — first-class doors plus one-release
|
|
10
10
|
redirect stubs. Add a name only with a live ROADMAP item.
|
|
11
11
|
|
|
12
|
-
Package version when last generated context: **arkgate@4.8.
|
|
12
|
+
Package version when last generated context: **arkgate@4.8.25**
|
|
13
13
|
Schema: agent-skills package contract `1.0`
|
|
14
14
|
|
|
15
15
|
## Skills (closed catalog)
|
|
@@ -241,6 +241,7 @@ ArkGate has **always-on Layers** plus opt-in extras. The user chooses extras; yo
|
|
|
241
241
|
|
|
242
242
|
|
|
243
243
|
### Adopt + ArkRules
|
|
244
|
+
- `arkRules[<Layer>]` may be one path or a list. On a child wall, `childSlices.arkRulesFile` (`arkrules.<Layer>.json`) is the slice's own file. Do not put feature rules only in the central file when that filename is set. `"pinned": true` on a slice alias keeps a framework path; `reason` does not pin.
|
|
244
245
|
- After classify: emit or refresh `arkRules` for matched layers (exact names; generic mold for unknowns).
|
|
245
246
|
- Mine rules → inventory + write advisory invariants/structure into `arkrules/<Layer>.json` **in this turn**.
|
|
246
247
|
- Empty `invariants[]` on a populated Domain while `arkRules` is on is residual (`INVARIANT_CATALOG_EMPTY`), not done. Fill 1–2 short phrases. Advisory until a domain structure rule is `enforced`.
|
|
@@ -52,6 +52,23 @@ If the host supports **parallel subagents**, fan out read-only scouts; otherwise
|
|
|
52
52
|
2. Path honest and tightening → execute **`/ark-autopilot`**.
|
|
53
53
|
3. One kernel candidate → **`/ark-runtime`**. One order-plane candidate → **`/ark-order`**.
|
|
54
54
|
|
|
55
|
+
## Promoting an invariant (advisory → enforced)
|
|
56
|
+
|
|
57
|
+
Promotion goes through one judge. Run `arkgate-check --promote [<id>] --json` first and read
|
|
58
|
+
each invariant row's `blocker`:
|
|
59
|
+
|
|
60
|
+
- `no-coverage-evidence` — no test title or declared symbol, partial scan, outside
|
|
61
|
+
`coverage.coverageRoots`, or no roots declared. Write the evidence or the roots (`/ark-adopt`).
|
|
62
|
+
- `probe-survived` — the committed `.ark/invariant-probe.json` shows, for files unchanged
|
|
63
|
+
since the run, that the covering tests still pass with the rule broken (`survived`) or never
|
|
64
|
+
call the symbol (`not-reached`). The fix is a **stronger test**, not more evidence text: add
|
|
65
|
+
the case the line names, then re-run `arkgate-check --probe-invariants=<id> --write` and
|
|
66
|
+
commit the file. Never delete or hand-edit the artifact to get past the refusal.
|
|
67
|
+
|
|
68
|
+
The probe runs the project's own tests in a temporary copy; ask the owner before you run it.
|
|
69
|
+
It is opt-in and not a score: a missing, stale, `killed` or `inconclusive` result changes
|
|
70
|
+
nothing. Only then `--promote <id> --apply`.
|
|
71
|
+
|
|
55
72
|
## Completion contract (skill incomplete if missing)
|
|
56
73
|
|
|
57
74
|
Skill incomplete if missing any field below.
|
|
@@ -97,11 +97,13 @@ ArkGate has **always-on Layers** plus opt-in extras. The user chooses extras; yo
|
|
|
97
97
|
4. Editing `arkrules/*` or promoting modes is **`/ark-adopt`**; fixing code under a structure sensor is **`/ark-autopilot`** (judgment, never invent mechanical-safe).
|
|
98
98
|
5. CLI helpers: `ark-check --rules-inventory --json`, doctor JSON `rulesUnderContract`, sensors emit `ARKRULE_*` / `INVARIANT_UNCOVERED` / `INVARIANT_CATALOG_EMPTY` with `evidence.arkruleId`.
|
|
99
99
|
5b. Invariant coverage is a **text match, never an execution**: a file walk plus the invariant id in a `describe`/`it` title. `coverage.symbol` means a declaration of that identifier in a non-test file (`symbolEvidenceFile`); imports and test calls do not count. Doctor and `--rules-inventory` print that witness path and the scan discard counts on a green run too. Never report `INVARIANT_UNCOVERED: 0`, a witness path, or a discard line as “the tests pass” or “the tests run” — ArkGate does not run tests and reads no runner config. Declaration text is not “the tests pass.” When the project declares `coverage.coverageRoots`, a covering test found outside them raises the advisory `INVARIANT_COVERAGE_OUTSIDE_ROOTS`; without that declaration ArkGate makes no claim about where tests run. Adopted + catalogued invariants without `coverage.testGlobs` or `coverage.coverageRoots` fails closed (`INVARIANT_TESTS_PATH_MISSING`) — write the path (`/ark-adopt`). When any invariant is enforced, missing `coverage.coverageRoots` fails closed (`INVARIANT_COVERAGE_ROOTS_MISSING`) — write the runner roots (`/ark-adopt`). `testGlobs` alone is not enough.
|
|
100
|
+
5c. The one exception is owner-invoked: `arkgate-check --probe-invariants` breaks each `coverage.symbol` on purpose in a temporary copy and runs only its covering tests with the project's runner (ask first — it runs their tests). When `.ark/invariant-probe.json` exists, doctor `rulesUnderContract.probe` and `--rules-inventory` `coverageEvidence.probe` show per invariant `killed` / `survived` / `not-reached` / `stale` / `not run`; `INVARIANT_PROBE_SURVIVED` means a fresh row refuses promotion. Report it as **[ArkRules]** "the test names the rule but does not pin it", name the change that went unnoticed, never as a percentage. `killed` is evidence the covering tests catch those three changes — not "the domain is correct."
|
|
100
101
|
6. Extras silent when off. Doctor `arkRun` / `arkOrder` is `notAScore`. Do not force extras. Wire one kernel candidate via `/ark-runtime`; one order-plane candidate via `/ark-order`. Do not invent `/ark-run`.
|
|
101
102
|
|
|
102
103
|
|
|
103
104
|
### Coverage + ArkRules
|
|
104
105
|
- Fitness report: governed% / gates / baseline = **[Layer]**; `rulesUnderContract` inventoried/under-contract/frozen = **[ArkRules]** (counts, never a score).
|
|
106
|
+
- Invariant probe (when the artifact exists): one row per `survived` / `not-reached` invariant with the line it names and the test to add; `stale` rows mean "re-run `--probe-invariants --write`", never "pinned".
|
|
105
107
|
- Capability gap: “no arkRules map” is optional adoption opportunity, not a failed gate.
|
|
106
108
|
|
|
107
109
|
### Coverage + extras
|
|
@@ -58,6 +58,13 @@ one bounded decision needs 2–3 enforceable options.
|
|
|
58
58
|
including when the run is green. A declaration in a non-test file is not
|
|
59
59
|
“the tests pass” — ArkGate never runs tests. Depth and byte caps stay
|
|
60
60
|
internal; the counts are what you read.
|
|
61
|
+
- When doctor JSON has `orphanModules` with files listed, map them: nothing imports
|
|
62
|
+
each file and no entry point covers it. Read `certainty` — `maybe-dynamic` and
|
|
63
|
+
`maybe-unresolved` may still be loaded (open what the evidence names). A
|
|
64
|
+
`partial` section is never a complete list. `--doctor --all` adds exports
|
|
65
|
+
nothing imports by name. Map only; deleting is `/ark-fix`, one file at a time.
|
|
66
|
+
A framework or loader ArkGate does not know goes in `.ark/entry-points.json`
|
|
67
|
+
with a reason. Never say "dead code". No new skill.
|
|
61
68
|
- A doctor green / Healthy line must name a file, config key, or test.
|
|
62
69
|
Uncited green is a lie — treat it as unfinished. No `/ark-cite`.
|
|
63
70
|
- Distinguish **missing** skills vs **stale** catalog. Installed ≠ stale.
|
|
@@ -25,6 +25,26 @@ Write an **extraction card** (`docs/brownfield-adoption.md` §6) — never mecha
|
|
|
25
25
|
never silent B apply. **Kill-switch** required. `multiPilotBatchForbidden` — never
|
|
26
26
|
multi-pilot batch. Execute that work on **`/ark-autopilot`**.
|
|
27
27
|
|
|
28
|
+
## Files nothing imports (one delete at a time)
|
|
29
|
+
|
|
30
|
+
When `doctor.orphanModules` lists a file with `certainty: no-importer`, nothing
|
|
31
|
+
imports it and no entry point covers it. Delete **one** file through the write
|
|
32
|
+
gate, run `arkgate-check` and status again, then the next. A `maybe-dynamic` or
|
|
33
|
+
`maybe-unresolved` item may still be loaded: open what its evidence names
|
|
34
|
+
first. If a framework or loader uses the file, add a glob with a reason to
|
|
35
|
+
`.ark/entry-points.json` instead — never edit `ark.config.json` for it. No batch
|
|
36
|
+
delete, no codemod.
|
|
37
|
+
|
|
38
|
+
## Copies across a wall (one move at a time)
|
|
39
|
+
|
|
40
|
+
When `doctor.crossWallDuplication` (status details, `--doctor --all`) lists a
|
|
41
|
+
family, the wall stopped the import and the code was copied. Move **one** copy to
|
|
42
|
+
the family's `destination` through the write gate (`/ark-place` names it), point
|
|
43
|
+
both sides at it, delete the other copy, run `arkgate-check` and status again,
|
|
44
|
+
then the next family. Never open the wall (`allowedCrossSlice`, a weaker rule) to
|
|
45
|
+
make the copy importable. Copies inside one slice are not listed on purpose. No
|
|
46
|
+
batch, no codemod.
|
|
47
|
+
|
|
28
48
|
## Dual engine (mandatory)
|
|
29
49
|
|
|
30
50
|
| Engine | Role |
|
|
@@ -35,6 +35,12 @@ right house. Skills never enforce — CLI / hooks / CI do.
|
|
|
35
35
|
adapter or a Domain / auth-tag policy — not another SQLite / JSON-file store
|
|
36
36
|
or admin literal in the page. Soft. Silent when those houses are absent or
|
|
37
37
|
the shortcut is already in the right house. No `/ark-prototype`.
|
|
38
|
+
- When doctor JSON `crossWallDuplication` (status details, `--doctor --all`) lists a
|
|
39
|
+
family, its `destination` is where the one shared copy goes: the declared shared
|
|
40
|
+
root, the universe common folder, or the lower layer both sides may import. Write
|
|
41
|
+
it there and import it from both sides — never a third copy, never a new
|
|
42
|
+
`allowedCrossSlice` to reach across the wall. `ask-place` means pick a home both
|
|
43
|
+
sides may import. Advisory. No `/ark-dedupe`.
|
|
38
44
|
- When the matched layer has `layers[].description`, print that caption next to the
|
|
39
45
|
layer name and globs. Omit when absent — do not invent a caption or `/ark-describe`.
|
|
40
46
|
- When the matched layer has `layers[].trustBoundary`, print `trust: <tag>` next
|
|
@@ -175,6 +181,8 @@ ArkGate has **always-on Layers** plus opt-in extras. The user chooses extras; yo
|
|
|
175
181
|
|
|
176
182
|
|
|
177
183
|
### Place + ArkRules
|
|
184
|
+
- `arkRules[<Layer>]` may be one path or a list of paths. A child wall may set `childSlices.arkRulesFile` to `arkrules.<Layer>.json`. That file lives at the slice root. Its id in findings is `<childId>#<localId>`. Doctor lists it on `rulesUnderContract.bySlice`. When `ark_place` returns `sliceRules`, those are the ids for this file's slice.
|
|
185
|
+
- A `sliceAliases` entry with `"pinned": true` stays put (a framework route). `reason` is a label only. Do not treat a pinned route as finished while another alias is still an owed move.
|
|
178
186
|
- Choose layer from contract **and** check structure sensors for that layer (private state, factory, thin adapter, writes-via-aggregate).
|
|
179
187
|
- Scaffold to satisfy **[ArkRules]** when present; state which sensors apply.
|
|
180
188
|
- Persistence **writes** (insert/update/delete against a driver) go through a Domain aggregate + persistence adapter. Application/Feature files that import Prisma/pg/Supabase and call `.insert` / `.create` are **[ArkRules]** `writes-via-aggregate`. Do not invent `Externals/` or `admission.ts`.
|
|
@@ -241,6 +241,7 @@ ArkGate has **always-on Layers** plus opt-in extras. The user chooses extras; yo
|
|
|
241
241
|
|
|
242
242
|
|
|
243
243
|
### Adopt + ArkRules
|
|
244
|
+
- `arkRules[<Layer>]` may be one path or a list. On a child wall, `childSlices.arkRulesFile` (`arkrules.<Layer>.json`) is the slice's own file. Do not put feature rules only in the central file when that filename is set. `"pinned": true` on a slice alias keeps a framework path; `reason` does not pin.
|
|
244
245
|
- After classify: emit or refresh `arkRules` for matched layers (exact names; generic mold for unknowns).
|
|
245
246
|
- Mine rules → inventory + write advisory invariants/structure into `arkrules/<Layer>.json` **in this turn**.
|
|
246
247
|
- Empty `invariants[]` on a populated Domain while `arkRules` is on is residual (`INVARIANT_CATALOG_EMPTY`), not done. Fill 1–2 short phrases. Advisory until a domain structure rule is `enforced`.
|
|
@@ -52,6 +52,23 @@ If the host supports **parallel subagents**, fan out read-only scouts; otherwise
|
|
|
52
52
|
2. Path honest and tightening → execute **`/ark-autopilot`**.
|
|
53
53
|
3. One kernel candidate → **`/ark-runtime`**. One order-plane candidate → **`/ark-order`**.
|
|
54
54
|
|
|
55
|
+
## Promoting an invariant (advisory → enforced)
|
|
56
|
+
|
|
57
|
+
Promotion goes through one judge. Run `arkgate-check --promote [<id>] --json` first and read
|
|
58
|
+
each invariant row's `blocker`:
|
|
59
|
+
|
|
60
|
+
- `no-coverage-evidence` — no test title or declared symbol, partial scan, outside
|
|
61
|
+
`coverage.coverageRoots`, or no roots declared. Write the evidence or the roots (`/ark-adopt`).
|
|
62
|
+
- `probe-survived` — the committed `.ark/invariant-probe.json` shows, for files unchanged
|
|
63
|
+
since the run, that the covering tests still pass with the rule broken (`survived`) or never
|
|
64
|
+
call the symbol (`not-reached`). The fix is a **stronger test**, not more evidence text: add
|
|
65
|
+
the case the line names, then re-run `arkgate-check --probe-invariants=<id> --write` and
|
|
66
|
+
commit the file. Never delete or hand-edit the artifact to get past the refusal.
|
|
67
|
+
|
|
68
|
+
The probe runs the project's own tests in a temporary copy; ask the owner before you run it.
|
|
69
|
+
It is opt-in and not a score: a missing, stale, `killed` or `inconclusive` result changes
|
|
70
|
+
nothing. Only then `--promote <id> --apply`.
|
|
71
|
+
|
|
55
72
|
## Completion contract (skill incomplete if missing)
|
|
56
73
|
|
|
57
74
|
Skill incomplete if missing any field below.
|
|
@@ -97,11 +97,13 @@ ArkGate has **always-on Layers** plus opt-in extras. The user chooses extras; yo
|
|
|
97
97
|
4. Editing `arkrules/*` or promoting modes is **`/ark-adopt`**; fixing code under a structure sensor is **`/ark-autopilot`** (judgment, never invent mechanical-safe).
|
|
98
98
|
5. CLI helpers: `ark-check --rules-inventory --json`, doctor JSON `rulesUnderContract`, sensors emit `ARKRULE_*` / `INVARIANT_UNCOVERED` / `INVARIANT_CATALOG_EMPTY` with `evidence.arkruleId`.
|
|
99
99
|
5b. Invariant coverage is a **text match, never an execution**: a file walk plus the invariant id in a `describe`/`it` title. `coverage.symbol` means a declaration of that identifier in a non-test file (`symbolEvidenceFile`); imports and test calls do not count. Doctor and `--rules-inventory` print that witness path and the scan discard counts on a green run too. Never report `INVARIANT_UNCOVERED: 0`, a witness path, or a discard line as “the tests pass” or “the tests run” — ArkGate does not run tests and reads no runner config. Declaration text is not “the tests pass.” When the project declares `coverage.coverageRoots`, a covering test found outside them raises the advisory `INVARIANT_COVERAGE_OUTSIDE_ROOTS`; without that declaration ArkGate makes no claim about where tests run. Adopted + catalogued invariants without `coverage.testGlobs` or `coverage.coverageRoots` fails closed (`INVARIANT_TESTS_PATH_MISSING`) — write the path (`/ark-adopt`). When any invariant is enforced, missing `coverage.coverageRoots` fails closed (`INVARIANT_COVERAGE_ROOTS_MISSING`) — write the runner roots (`/ark-adopt`). `testGlobs` alone is not enough.
|
|
100
|
+
5c. The one exception is owner-invoked: `arkgate-check --probe-invariants` breaks each `coverage.symbol` on purpose in a temporary copy and runs only its covering tests with the project's runner (ask first — it runs their tests). When `.ark/invariant-probe.json` exists, doctor `rulesUnderContract.probe` and `--rules-inventory` `coverageEvidence.probe` show per invariant `killed` / `survived` / `not-reached` / `stale` / `not run`; `INVARIANT_PROBE_SURVIVED` means a fresh row refuses promotion. Report it as **[ArkRules]** "the test names the rule but does not pin it", name the change that went unnoticed, never as a percentage. `killed` is evidence the covering tests catch those three changes — not "the domain is correct."
|
|
100
101
|
6. Extras silent when off. Doctor `arkRun` / `arkOrder` is `notAScore`. Do not force extras. Wire one kernel candidate via `/ark-runtime`; one order-plane candidate via `/ark-order`. Do not invent `/ark-run`.
|
|
101
102
|
|
|
102
103
|
|
|
103
104
|
### Coverage + ArkRules
|
|
104
105
|
- Fitness report: governed% / gates / baseline = **[Layer]**; `rulesUnderContract` inventoried/under-contract/frozen = **[ArkRules]** (counts, never a score).
|
|
106
|
+
- Invariant probe (when the artifact exists): one row per `survived` / `not-reached` invariant with the line it names and the test to add; `stale` rows mean "re-run `--probe-invariants --write`", never "pinned".
|
|
105
107
|
- Capability gap: “no arkRules map” is optional adoption opportunity, not a failed gate.
|
|
106
108
|
|
|
107
109
|
### Coverage + extras
|
|
@@ -58,6 +58,13 @@ one bounded decision needs 2–3 enforceable options.
|
|
|
58
58
|
including when the run is green. A declaration in a non-test file is not
|
|
59
59
|
“the tests pass” — ArkGate never runs tests. Depth and byte caps stay
|
|
60
60
|
internal; the counts are what you read.
|
|
61
|
+
- When doctor JSON has `orphanModules` with files listed, map them: nothing imports
|
|
62
|
+
each file and no entry point covers it. Read `certainty` — `maybe-dynamic` and
|
|
63
|
+
`maybe-unresolved` may still be loaded (open what the evidence names). A
|
|
64
|
+
`partial` section is never a complete list. `--doctor --all` adds exports
|
|
65
|
+
nothing imports by name. Map only; deleting is `/ark-fix`, one file at a time.
|
|
66
|
+
A framework or loader ArkGate does not know goes in `.ark/entry-points.json`
|
|
67
|
+
with a reason. Never say "dead code". No new skill.
|
|
61
68
|
- A doctor green / Healthy line must name a file, config key, or test.
|
|
62
69
|
Uncited green is a lie — treat it as unfinished. No `/ark-cite`.
|
|
63
70
|
- Distinguish **missing** skills vs **stale** catalog. Installed ≠ stale.
|
|
@@ -25,6 +25,26 @@ Write an **extraction card** (`docs/brownfield-adoption.md` §6) — never mecha
|
|
|
25
25
|
never silent B apply. **Kill-switch** required. `multiPilotBatchForbidden` — never
|
|
26
26
|
multi-pilot batch. Execute that work on **`/ark-autopilot`**.
|
|
27
27
|
|
|
28
|
+
## Files nothing imports (one delete at a time)
|
|
29
|
+
|
|
30
|
+
When `doctor.orphanModules` lists a file with `certainty: no-importer`, nothing
|
|
31
|
+
imports it and no entry point covers it. Delete **one** file through the write
|
|
32
|
+
gate, run `arkgate-check` and status again, then the next. A `maybe-dynamic` or
|
|
33
|
+
`maybe-unresolved` item may still be loaded: open what its evidence names
|
|
34
|
+
first. If a framework or loader uses the file, add a glob with a reason to
|
|
35
|
+
`.ark/entry-points.json` instead — never edit `ark.config.json` for it. No batch
|
|
36
|
+
delete, no codemod.
|
|
37
|
+
|
|
38
|
+
## Copies across a wall (one move at a time)
|
|
39
|
+
|
|
40
|
+
When `doctor.crossWallDuplication` (status details, `--doctor --all`) lists a
|
|
41
|
+
family, the wall stopped the import and the code was copied. Move **one** copy to
|
|
42
|
+
the family's `destination` through the write gate (`/ark-place` names it), point
|
|
43
|
+
both sides at it, delete the other copy, run `arkgate-check` and status again,
|
|
44
|
+
then the next family. Never open the wall (`allowedCrossSlice`, a weaker rule) to
|
|
45
|
+
make the copy importable. Copies inside one slice are not listed on purpose. No
|
|
46
|
+
batch, no codemod.
|
|
47
|
+
|
|
28
48
|
## Dual engine (mandatory)
|
|
29
49
|
|
|
30
50
|
| Engine | Role |
|
|
@@ -35,6 +35,12 @@ right house. Skills never enforce — CLI / hooks / CI do.
|
|
|
35
35
|
adapter or a Domain / auth-tag policy — not another SQLite / JSON-file store
|
|
36
36
|
or admin literal in the page. Soft. Silent when those houses are absent or
|
|
37
37
|
the shortcut is already in the right house. No `/ark-prototype`.
|
|
38
|
+
- When doctor JSON `crossWallDuplication` (status details, `--doctor --all`) lists a
|
|
39
|
+
family, its `destination` is where the one shared copy goes: the declared shared
|
|
40
|
+
root, the universe common folder, or the lower layer both sides may import. Write
|
|
41
|
+
it there and import it from both sides — never a third copy, never a new
|
|
42
|
+
`allowedCrossSlice` to reach across the wall. `ask-place` means pick a home both
|
|
43
|
+
sides may import. Advisory. No `/ark-dedupe`.
|
|
38
44
|
- When the matched layer has `layers[].description`, print that caption next to the
|
|
39
45
|
layer name and globs. Omit when absent — do not invent a caption or `/ark-describe`.
|
|
40
46
|
- When the matched layer has `layers[].trustBoundary`, print `trust: <tag>` next
|
|
@@ -175,6 +181,8 @@ ArkGate has **always-on Layers** plus opt-in extras. The user chooses extras; yo
|
|
|
175
181
|
|
|
176
182
|
|
|
177
183
|
### Place + ArkRules
|
|
184
|
+
- `arkRules[<Layer>]` may be one path or a list of paths. A child wall may set `childSlices.arkRulesFile` to `arkrules.<Layer>.json`. That file lives at the slice root. Its id in findings is `<childId>#<localId>`. Doctor lists it on `rulesUnderContract.bySlice`. When `ark_place` returns `sliceRules`, those are the ids for this file's slice.
|
|
185
|
+
- A `sliceAliases` entry with `"pinned": true` stays put (a framework route). `reason` is a label only. Do not treat a pinned route as finished while another alias is still an owed move.
|
|
178
186
|
- Choose layer from contract **and** check structure sensors for that layer (private state, factory, thin adapter, writes-via-aggregate).
|
|
179
187
|
- Scaffold to satisfy **[ArkRules]** when present; state which sensors apply.
|
|
180
188
|
- Persistence **writes** (insert/update/delete against a driver) go through a Domain aggregate + persistence adapter. Application/Feature files that import Prisma/pg/Supabase and call `.insert` / `.create` are **[ArkRules]** `writes-via-aggregate`. Do not invent `Externals/` or `admission.ts`.
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* GENERATED FILE — do not edit by hand.
|
|
3
|
-
*
|
|
4
|
-
* Canonical algorithm: src/domain/arkOrderError.ts
|
|
5
|
-
* Regenerate: node scripts/generate-cli-pure.mjs
|
|
6
|
-
* Drift check: node scripts/generate-cli-pure.mjs --check
|
|
7
|
-
*
|
|
8
|
-
* Pure CLI helper (bin/lib/ark-order-error.mjs). Zero Node I/O.
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
export class ArkOrderError extends Error {
|
|
12
|
-
code;
|
|
13
|
-
constructor(code, message) {
|
|
14
|
-
super(message);
|
|
15
|
-
this.name = 'ArkOrderError';
|
|
16
|
-
this.code = code;
|
|
17
|
-
}
|
|
18
|
-
}
|