mustflow 1.30.0 → 2.11.0

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.
Files changed (82) hide show
  1. package/README.md +35 -11
  2. package/dist/cli/commands/classify.js +61 -6
  3. package/dist/cli/commands/contract-lint.js +13 -4
  4. package/dist/cli/commands/dashboard.js +6 -0
  5. package/dist/cli/commands/index.js +5 -0
  6. package/dist/cli/commands/run.js +224 -48
  7. package/dist/cli/commands/upgrade.js +65 -0
  8. package/dist/cli/commands/verify.js +550 -33
  9. package/dist/cli/i18n/en.js +73 -10
  10. package/dist/cli/i18n/es.js +73 -10
  11. package/dist/cli/i18n/fr.js +73 -10
  12. package/dist/cli/i18n/hi.js +73 -10
  13. package/dist/cli/i18n/ko.js +73 -10
  14. package/dist/cli/i18n/zh.js +73 -10
  15. package/dist/cli/index.js +27 -46
  16. package/dist/cli/lib/command-registry.js +5 -0
  17. package/dist/cli/lib/dashboard-export.js +62 -12
  18. package/dist/cli/lib/dashboard-html/client-script.js +1936 -0
  19. package/dist/cli/lib/dashboard-html/locale-bootstrap.js +8 -0
  20. package/dist/cli/lib/dashboard-html/styles.js +572 -0
  21. package/dist/cli/lib/dashboard-html/template.js +134 -0
  22. package/dist/cli/lib/dashboard-html/types.js +1 -0
  23. package/dist/cli/lib/dashboard-html.js +1 -1907
  24. package/dist/cli/lib/dashboard-locale.js +37 -0
  25. package/dist/cli/lib/local-index/constants.js +48 -0
  26. package/dist/cli/lib/local-index/index.js +2256 -0
  27. package/dist/cli/lib/local-index/sql.js +15 -0
  28. package/dist/cli/lib/local-index/types.js +1 -0
  29. package/dist/cli/lib/local-index.js +1 -1908
  30. package/dist/cli/lib/reporter.js +6 -0
  31. package/dist/cli/lib/run-plan.js +96 -4
  32. package/dist/cli/lib/templates.js +18 -1
  33. package/dist/cli/lib/validation/command-intents.js +11 -0
  34. package/dist/cli/lib/validation/constants.js +238 -0
  35. package/dist/cli/lib/validation/index.js +1384 -0
  36. package/dist/cli/lib/validation/primitives.js +198 -0
  37. package/dist/cli/lib/validation/test-selection.js +95 -0
  38. package/dist/cli/lib/validation/types.js +1 -0
  39. package/dist/cli/lib/validation.js +1 -1661
  40. package/dist/core/bounded-output.js +38 -0
  41. package/dist/core/change-classification.js +6 -2
  42. package/dist/core/change-verification.js +240 -6
  43. package/dist/core/check-issues.js +12 -0
  44. package/dist/core/command-contract-validation.js +20 -0
  45. package/dist/core/command-effects.js +13 -0
  46. package/dist/core/completion-verdict.js +209 -0
  47. package/dist/core/contract-lint.js +316 -7
  48. package/dist/core/dashboard-verification.js +8 -0
  49. package/dist/core/external-evidence.js +9 -0
  50. package/dist/core/public-json-contracts.js +28 -0
  51. package/dist/core/repeated-failure.js +17 -0
  52. package/dist/core/repro-evidence.js +53 -0
  53. package/dist/core/run-performance-history.js +307 -0
  54. package/dist/core/run-profile.js +87 -0
  55. package/dist/core/run-receipt.js +171 -4
  56. package/dist/core/run-write-drift.js +18 -2
  57. package/dist/core/scope-risk.js +64 -0
  58. package/dist/core/skill-route-alignment.js +110 -0
  59. package/dist/core/source-anchor-status.js +4 -1
  60. package/dist/core/test-selection.js +227 -0
  61. package/dist/core/validation-ratchet.js +52 -0
  62. package/dist/core/verification-decision-graph.js +67 -0
  63. package/dist/core/verification-evidence.js +249 -0
  64. package/dist/core/verification-scheduler.js +96 -2
  65. package/examples/README.md +12 -4
  66. package/package.json +1 -1
  67. package/schemas/README.md +18 -4
  68. package/schemas/change-verification-report.schema.json +169 -5
  69. package/schemas/commands.schema.json +51 -1
  70. package/schemas/contract-lint-report.schema.json +80 -0
  71. package/schemas/dashboard-export.schema.json +500 -0
  72. package/schemas/explain-report.schema.json +2 -0
  73. package/schemas/latest-run-pointer.schema.json +384 -0
  74. package/schemas/run-receipt.schema.json +113 -0
  75. package/schemas/test-selection.schema.json +81 -0
  76. package/schemas/verify-report.schema.json +361 -1
  77. package/schemas/verify-run-manifest.schema.json +410 -0
  78. package/templates/default/common/.mustflow/config/commands.toml +1 -1
  79. package/templates/default/i18n.toml +1 -1
  80. package/templates/default/locales/en/.mustflow/skills/INDEX.md +124 -29
  81. package/templates/default/locales/en/.mustflow/skills/routes.toml +289 -0
  82. package/templates/default/manifest.toml +29 -2
@@ -0,0 +1,410 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://mustflow.github.io/schemas/verify-run-manifest.schema.json",
4
+ "title": "mustflow verify run manifest",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": [
8
+ "schema_version",
9
+ "command",
10
+ "reason",
11
+ "reasons",
12
+ "plan_source",
13
+ "verification_plan_id",
14
+ "status",
15
+ "completion_verdict",
16
+ "evidence_model",
17
+ "summary",
18
+ "receipts"
19
+ ],
20
+ "properties": {
21
+ "schema_version": { "const": "1" },
22
+ "command": { "const": "verify" },
23
+ "reason": { "type": "string" },
24
+ "reasons": {
25
+ "type": "array",
26
+ "items": { "type": "string" }
27
+ },
28
+ "plan_source": { "type": ["string", "null"] },
29
+ "verification_plan_id": {
30
+ "type": "string",
31
+ "pattern": "^sha256:[0-9a-f]{64}$"
32
+ },
33
+ "status": { "enum": ["passed", "partial", "failed", "blocked"] },
34
+ "completion_verdict": { "$ref": "#/$defs/completionVerdict" },
35
+ "evidence_model": { "$ref": "#/$defs/evidenceModel" },
36
+ "summary": { "$ref": "#/$defs/summary" },
37
+ "repro_evidence": { "$ref": "#/$defs/reproEvidence" },
38
+ "external_checks": {
39
+ "type": "array",
40
+ "items": { "$ref": "#/$defs/externalCheck" }
41
+ },
42
+ "receipts": {
43
+ "type": "array",
44
+ "items": { "$ref": "#/$defs/receiptEntry" }
45
+ }
46
+ },
47
+ "$defs": {
48
+ "completionVerdict": {
49
+ "type": "object",
50
+ "additionalProperties": false,
51
+ "required": ["schema_version", "status", "primary_reason", "evidence", "blockers", "contradictions", "limitations"],
52
+ "properties": {
53
+ "schema_version": { "const": "1" },
54
+ "status": { "enum": ["verified", "partially_verified", "unverified", "blocked", "contradicted"] },
55
+ "primary_reason": { "type": "string" },
56
+ "evidence": {
57
+ "type": "object",
58
+ "additionalProperties": false,
59
+ "required": [
60
+ "source",
61
+ "verification_plan_id",
62
+ "changed_file_count",
63
+ "matched_intents",
64
+ "ran_intents",
65
+ "passed_intents",
66
+ "failed_intents",
67
+ "skipped_intents",
68
+ "receipt_count",
69
+ "gap_count",
70
+ "source_anchor_risk_count",
71
+ "scope_diff_risk_count",
72
+ "repeated_failure_count",
73
+ "validation_ratchet_risk_count",
74
+ "latest_run_status"
75
+ ],
76
+ "properties": {
77
+ "source": { "enum": ["mf_verify", "dashboard_export"] },
78
+ "verification_plan_id": {
79
+ "type": ["string", "null"],
80
+ "pattern": "^sha256:[0-9a-f]{64}$"
81
+ },
82
+ "changed_file_count": { "type": ["integer", "null"] },
83
+ "matched_intents": { "type": "integer" },
84
+ "ran_intents": { "type": "integer" },
85
+ "passed_intents": { "type": "integer" },
86
+ "failed_intents": { "type": "integer" },
87
+ "skipped_intents": { "type": "integer" },
88
+ "receipt_count": { "type": "integer" },
89
+ "gap_count": { "type": "integer" },
90
+ "source_anchor_risk_count": { "type": "integer" },
91
+ "scope_diff_risk_count": { "type": "integer" },
92
+ "repeated_failure_count": { "type": "integer" },
93
+ "validation_ratchet_risk_count": { "type": "integer" },
94
+ "latest_run_status": { "type": ["string", "null"] }
95
+ }
96
+ },
97
+ "blockers": {
98
+ "type": "array",
99
+ "items": { "type": "string" }
100
+ },
101
+ "contradictions": {
102
+ "type": "array",
103
+ "items": { "type": "string" }
104
+ },
105
+ "limitations": {
106
+ "type": "array",
107
+ "items": { "type": "string" }
108
+ }
109
+ }
110
+ },
111
+ "summary": {
112
+ "type": "object",
113
+ "additionalProperties": false,
114
+ "required": ["matched", "ran", "passed", "failed", "skipped"],
115
+ "properties": {
116
+ "matched": { "type": "integer" },
117
+ "ran": { "type": "integer" },
118
+ "passed": { "type": "integer" },
119
+ "failed": { "type": "integer" },
120
+ "skipped": { "type": "integer" }
121
+ }
122
+ },
123
+ "receiptEntry": {
124
+ "type": "object",
125
+ "additionalProperties": false,
126
+ "required": [
127
+ "intent",
128
+ "status",
129
+ "skipped",
130
+ "verification_plan_id",
131
+ "receipt_path",
132
+ "receipt_sha256"
133
+ ],
134
+ "properties": {
135
+ "intent": { "type": ["string", "null"] },
136
+ "status": { "enum": ["passed", "failed", "timed_out", "start_failed", "skipped"] },
137
+ "skipped": { "type": "boolean" },
138
+ "verification_plan_id": {
139
+ "type": ["string", "null"],
140
+ "pattern": "^sha256:[0-9a-f]{64}$"
141
+ },
142
+ "receipt_path": { "type": ["string", "null"] },
143
+ "receipt_sha256": {
144
+ "type": ["string", "null"],
145
+ "pattern": "^sha256:[0-9a-f]{64}$"
146
+ }
147
+ }
148
+ },
149
+ "evidenceModel": {
150
+ "type": "object",
151
+ "additionalProperties": false,
152
+ "required": [
153
+ "schema_version",
154
+ "source",
155
+ "verification_plan_id",
156
+ "requirements",
157
+ "coverage_matrix",
158
+ "receipts",
159
+ "skipped_checks",
160
+ "gaps",
161
+ "remaining_risks",
162
+ "explanation"
163
+ ],
164
+ "properties": {
165
+ "schema_version": { "const": "1" },
166
+ "source": { "enum": ["mf_verify", "dashboard_export"] },
167
+ "verification_plan_id": {
168
+ "type": ["string", "null"],
169
+ "pattern": "^sha256:[0-9a-f]{64}$"
170
+ },
171
+ "requirements": {
172
+ "type": "array",
173
+ "items": { "$ref": "#/$defs/evidenceRequirement" }
174
+ },
175
+ "coverage_matrix": {
176
+ "type": "array",
177
+ "items": { "$ref": "#/$defs/evidenceCoverageCriterion" }
178
+ },
179
+ "receipts": {
180
+ "type": "array",
181
+ "items": { "$ref": "#/$defs/evidenceReceipt" }
182
+ },
183
+ "skipped_checks": {
184
+ "type": "array",
185
+ "items": { "$ref": "#/$defs/evidenceSkippedCheck" }
186
+ },
187
+ "gaps": {
188
+ "type": "array",
189
+ "items": { "$ref": "#/$defs/evidenceGap" }
190
+ },
191
+ "remaining_risks": {
192
+ "type": "array",
193
+ "items": { "$ref": "#/$defs/evidenceRemainingRisk" }
194
+ },
195
+ "repro_evidence": { "$ref": "#/$defs/reproEvidence" },
196
+ "external_checks": {
197
+ "type": "array",
198
+ "items": { "$ref": "#/$defs/externalCheck" }
199
+ },
200
+ "explanation": { "$ref": "#/$defs/evidenceExplanation" }
201
+ }
202
+ },
203
+ "evidenceRequirement": {
204
+ "type": "object",
205
+ "additionalProperties": false,
206
+ "required": [
207
+ "reason",
208
+ "files",
209
+ "surfaces",
210
+ "candidate_intents",
211
+ "selected_intents",
212
+ "skipped_intents",
213
+ "gap_count",
214
+ "outcome"
215
+ ],
216
+ "properties": {
217
+ "reason": { "type": "string" },
218
+ "files": {
219
+ "type": "array",
220
+ "items": { "type": "string" }
221
+ },
222
+ "surfaces": {
223
+ "type": "array",
224
+ "items": { "type": "string" }
225
+ },
226
+ "candidate_intents": {
227
+ "type": "array",
228
+ "items": { "type": "string" }
229
+ },
230
+ "selected_intents": {
231
+ "type": "array",
232
+ "items": { "type": "string" }
233
+ },
234
+ "skipped_intents": {
235
+ "type": "array",
236
+ "items": { "type": "string" }
237
+ },
238
+ "gap_count": { "type": "integer" },
239
+ "outcome": { "enum": ["verified", "partially_verified", "unverified", "blocked", "contradicted"] }
240
+ }
241
+ },
242
+ "evidenceCoverageCriterion": {
243
+ "type": "object",
244
+ "additionalProperties": false,
245
+ "required": ["criterion_id", "source", "statement", "status", "requirement_reason", "evidence"],
246
+ "properties": {
247
+ "criterion_id": { "type": "string" },
248
+ "source": { "enum": ["verification_requirement", "dashboard_snapshot"] },
249
+ "statement": { "type": "string" },
250
+ "status": { "enum": ["covered", "partially_covered", "uncovered", "blocked", "contradicted"] },
251
+ "requirement_reason": { "type": ["string", "null"] },
252
+ "evidence": { "$ref": "#/$defs/evidenceCoverageLinks" }
253
+ }
254
+ },
255
+ "evidenceCoverageLinks": {
256
+ "type": "object",
257
+ "additionalProperties": false,
258
+ "required": ["intents", "receipt_paths", "gap_reasons", "source_anchor_ids"],
259
+ "properties": {
260
+ "intents": {
261
+ "type": "array",
262
+ "items": { "type": "string" }
263
+ },
264
+ "receipt_paths": {
265
+ "type": "array",
266
+ "items": { "type": "string" }
267
+ },
268
+ "gap_reasons": {
269
+ "type": "array",
270
+ "items": { "type": "string" }
271
+ },
272
+ "source_anchor_ids": {
273
+ "type": "array",
274
+ "items": { "type": "string" }
275
+ }
276
+ }
277
+ },
278
+ "evidenceReceipt": {
279
+ "type": "object",
280
+ "additionalProperties": false,
281
+ "required": ["intent", "status", "skipped", "verification_plan_id", "receipt_path", "receipt_sha256"],
282
+ "properties": {
283
+ "intent": { "type": ["string", "null"] },
284
+ "status": { "type": "string" },
285
+ "skipped": { "type": "boolean" },
286
+ "verification_plan_id": {
287
+ "type": ["string", "null"],
288
+ "pattern": "^sha256:[0-9a-f]{64}$"
289
+ },
290
+ "receipt_path": { "type": ["string", "null"] },
291
+ "receipt_sha256": {
292
+ "type": ["string", "null"],
293
+ "pattern": "^sha256:[0-9a-f]{64}$"
294
+ }
295
+ }
296
+ },
297
+ "evidenceSkippedCheck": {
298
+ "type": "object",
299
+ "additionalProperties": false,
300
+ "required": ["intent", "reason", "detail"],
301
+ "properties": {
302
+ "intent": { "type": ["string", "null"] },
303
+ "reason": { "type": ["string", "null"] },
304
+ "detail": { "type": ["string", "null"] }
305
+ }
306
+ },
307
+ "evidenceGap": {
308
+ "type": "object",
309
+ "additionalProperties": false,
310
+ "required": ["reason", "intent", "status", "detail", "files", "surfaces"],
311
+ "properties": {
312
+ "reason": { "type": ["string", "null"] },
313
+ "intent": { "type": ["string", "null"] },
314
+ "status": { "type": ["string", "null"] },
315
+ "detail": { "type": ["string", "null"] },
316
+ "files": {
317
+ "type": "array",
318
+ "items": { "type": "string" }
319
+ },
320
+ "surfaces": {
321
+ "type": "array",
322
+ "items": { "type": "string" }
323
+ }
324
+ }
325
+ },
326
+ "evidenceRemainingRisk": {
327
+ "type": "object",
328
+ "additionalProperties": false,
329
+ "required": ["code", "severity", "detail"],
330
+ "properties": {
331
+ "code": { "type": "string" },
332
+ "severity": { "type": "string" },
333
+ "detail": { "type": "string" }
334
+ }
335
+ },
336
+ "reproEvidence": {
337
+ "type": "object",
338
+ "additionalProperties": false,
339
+ "required": [
340
+ "source",
341
+ "authority",
342
+ "reported_symptom",
343
+ "expected_behavior",
344
+ "observed_behavior",
345
+ "original_reproduction",
346
+ "evidence_before_fix",
347
+ "evidence_after_fix",
348
+ "regression_guard"
349
+ ],
350
+ "properties": {
351
+ "source": { "const": "repro_first_debug" },
352
+ "authority": { "const": "claim_evidence" },
353
+ "reported_symptom": { "type": ["string", "null"] },
354
+ "expected_behavior": { "type": ["string", "null"] },
355
+ "observed_behavior": { "type": ["string", "null"] },
356
+ "original_reproduction": { "$ref": "#/$defs/reproEvidenceItem" },
357
+ "evidence_before_fix": { "$ref": "#/$defs/reproEvidenceItem" },
358
+ "evidence_after_fix": { "$ref": "#/$defs/reproEvidenceItem" },
359
+ "regression_guard": { "$ref": "#/$defs/reproEvidenceItem" }
360
+ }
361
+ },
362
+ "reproEvidenceItem": {
363
+ "type": "object",
364
+ "additionalProperties": false,
365
+ "required": ["status", "summary", "reason"],
366
+ "properties": {
367
+ "status": { "enum": ["present", "unavailable", "missing"] },
368
+ "summary": { "type": ["string", "null"] },
369
+ "reason": { "type": ["string", "null"] }
370
+ }
371
+ },
372
+ "externalCheck": {
373
+ "type": "object",
374
+ "additionalProperties": false,
375
+ "required": ["source", "authority", "provider", "name", "status", "url", "summary"],
376
+ "properties": {
377
+ "source": { "const": "external_ci" },
378
+ "authority": { "const": "supporting_only" },
379
+ "provider": { "type": "string", "minLength": 1 },
380
+ "name": { "type": "string", "minLength": 1 },
381
+ "status": { "enum": ["passed", "failed", "cancelled", "unknown"] },
382
+ "url": { "type": ["string", "null"] },
383
+ "summary": { "type": ["string", "null"] }
384
+ }
385
+ },
386
+ "evidenceExplanation": {
387
+ "type": "object",
388
+ "additionalProperties": false,
389
+ "required": ["verified_by", "downgraded_by", "blocked_by", "contradicted_by"],
390
+ "properties": {
391
+ "verified_by": {
392
+ "type": "array",
393
+ "items": { "type": "string" }
394
+ },
395
+ "downgraded_by": {
396
+ "type": "array",
397
+ "items": { "type": "string" }
398
+ },
399
+ "blocked_by": {
400
+ "type": "array",
401
+ "items": { "type": "string" }
402
+ },
403
+ "contradicted_by": {
404
+ "type": "array",
405
+ "items": { "type": "string" }
406
+ }
407
+ }
408
+ }
409
+ }
410
+ }
@@ -38,7 +38,7 @@ status = "unknown"
38
38
  description = "Run the fast test baseline."
39
39
  reason = "This repository has not declared its fast-test command yet."
40
40
  agent_action = "do_not_guess_report_missing"
41
- required_after = ["low_risk_code_change", "copy_change", "i18n_change"]
41
+ required_after = ["low_risk_code_change", "copy_change", "i18n_change", "unknown_change"]
42
42
 
43
43
  [intents.test_coverage]
44
44
  status = "manual_only"
@@ -56,7 +56,7 @@ translations = {}
56
56
  [documents."skills.index"]
57
57
  source = "locales/en/.mustflow/skills/INDEX.md"
58
58
  source_locale = "en"
59
- revision = 50
59
+ revision = 54
60
60
  translations = {}
61
61
 
62
62
  [documents."skill.adapter-boundary"]