mustflow 1.31.0 → 2.16.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 (66) hide show
  1. package/README.md +23 -9
  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 +77 -2
  5. package/dist/cli/commands/explain-verify.js +11 -1
  6. package/dist/cli/commands/index.js +14 -0
  7. package/dist/cli/commands/run.js +4 -1
  8. package/dist/cli/commands/verify.js +986 -43
  9. package/dist/cli/i18n/en.js +61 -10
  10. package/dist/cli/i18n/es.js +61 -10
  11. package/dist/cli/i18n/fr.js +61 -10
  12. package/dist/cli/i18n/hi.js +61 -10
  13. package/dist/cli/i18n/ko.js +61 -10
  14. package/dist/cli/i18n/zh.js +61 -10
  15. package/dist/cli/lib/dashboard-export.js +62 -12
  16. package/dist/cli/lib/dashboard-html/client-script.js +1936 -0
  17. package/dist/cli/lib/dashboard-html/locale-bootstrap.js +8 -0
  18. package/dist/cli/lib/dashboard-html/styles.js +572 -0
  19. package/dist/cli/lib/dashboard-html/template.js +134 -0
  20. package/dist/cli/lib/dashboard-html/types.js +1 -0
  21. package/dist/cli/lib/dashboard-html.js +1 -1907
  22. package/dist/cli/lib/dashboard-locale.js +37 -0
  23. package/dist/cli/lib/local-index/constants.js +48 -0
  24. package/dist/cli/lib/local-index/index.js +2951 -0
  25. package/dist/cli/lib/local-index/sql.js +15 -0
  26. package/dist/cli/lib/local-index/types.js +1 -0
  27. package/dist/cli/lib/local-index.js +1 -1911
  28. package/dist/cli/lib/run-plan.js +76 -1
  29. package/dist/cli/lib/templates.js +18 -1
  30. package/dist/cli/lib/validation/command-intents.js +11 -0
  31. package/dist/cli/lib/validation/constants.js +238 -0
  32. package/dist/cli/lib/validation/index.js +1384 -0
  33. package/dist/cli/lib/validation/primitives.js +198 -0
  34. package/dist/cli/lib/validation/test-selection.js +95 -0
  35. package/dist/cli/lib/validation/types.js +1 -0
  36. package/dist/cli/lib/validation.js +1 -1770
  37. package/dist/core/check-issues.js +6 -0
  38. package/dist/core/completion-verdict.js +341 -0
  39. package/dist/core/contract-lint.js +221 -6
  40. package/dist/core/external-evidence.js +9 -0
  41. package/dist/core/public-json-contracts.js +21 -0
  42. package/dist/core/repeated-failure.js +179 -0
  43. package/dist/core/repro-evidence.js +134 -0
  44. package/dist/core/scope-risk.js +64 -0
  45. package/dist/core/skill-route-alignment.js +20 -0
  46. package/dist/core/source-anchor-status.js +4 -1
  47. package/dist/core/test-selection.js +3 -0
  48. package/dist/core/validation-ratchet.js +196 -0
  49. package/dist/core/verification-evidence.js +249 -0
  50. package/examples/README.md +12 -4
  51. package/package.json +3 -3
  52. package/schemas/README.md +13 -3
  53. package/schemas/change-verification-report.schema.json +16 -2
  54. package/schemas/commands.schema.json +4 -0
  55. package/schemas/contract-lint-report.schema.json +29 -0
  56. package/schemas/dashboard-export.schema.json +310 -0
  57. package/schemas/explain-report.schema.json +173 -1
  58. package/schemas/latest-run-pointer.schema.json +601 -0
  59. package/schemas/run-receipt.schema.json +4 -0
  60. package/schemas/test-selection.schema.json +81 -0
  61. package/schemas/verify-report.schema.json +578 -1
  62. package/schemas/verify-run-manifest.schema.json +627 -0
  63. package/templates/default/i18n.toml +1 -1
  64. package/templates/default/locales/en/.mustflow/skills/INDEX.md +124 -29
  65. package/templates/default/locales/en/.mustflow/skills/routes.toml +289 -0
  66. package/templates/default/manifest.toml +29 -2
@@ -151,6 +151,312 @@
151
151
  "paths": { "$ref": "#/$defs/stringArray" }
152
152
  }
153
153
  },
154
+ "evidenceModel": {
155
+ "type": "object",
156
+ "additionalProperties": false,
157
+ "required": [
158
+ "schema_version",
159
+ "source",
160
+ "verification_plan_id",
161
+ "requirements",
162
+ "coverage_matrix",
163
+ "receipts",
164
+ "skipped_checks",
165
+ "gaps",
166
+ "remaining_risks",
167
+ "explanation"
168
+ ],
169
+ "properties": {
170
+ "schema_version": { "const": "1" },
171
+ "source": { "enum": ["mf_verify", "dashboard_export"] },
172
+ "verification_plan_id": {
173
+ "type": ["string", "null"],
174
+ "pattern": "^sha256:[0-9a-f]{64}$"
175
+ },
176
+ "requirements": {
177
+ "type": "array",
178
+ "items": { "$ref": "#/$defs/evidenceRequirement" }
179
+ },
180
+ "coverage_matrix": {
181
+ "type": "array",
182
+ "items": { "$ref": "#/$defs/evidenceCoverageCriterion" }
183
+ },
184
+ "receipts": {
185
+ "type": "array",
186
+ "items": { "$ref": "#/$defs/evidenceReceipt" }
187
+ },
188
+ "skipped_checks": {
189
+ "type": "array",
190
+ "items": { "$ref": "#/$defs/evidenceSkippedCheck" }
191
+ },
192
+ "gaps": {
193
+ "type": "array",
194
+ "items": { "$ref": "#/$defs/evidenceGap" }
195
+ },
196
+ "remaining_risks": {
197
+ "type": "array",
198
+ "items": { "$ref": "#/$defs/evidenceRemainingRisk" }
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": { "$ref": "#/$defs/stringArray" },
219
+ "surfaces": { "$ref": "#/$defs/stringArray" },
220
+ "candidate_intents": { "$ref": "#/$defs/stringArray" },
221
+ "selected_intents": { "$ref": "#/$defs/stringArray" },
222
+ "skipped_intents": { "$ref": "#/$defs/stringArray" },
223
+ "gap_count": { "type": "integer" },
224
+ "outcome": { "enum": ["verified", "partially_verified", "unverified", "blocked", "contradicted"] }
225
+ }
226
+ },
227
+ "evidenceCoverageCriterion": {
228
+ "type": "object",
229
+ "additionalProperties": false,
230
+ "required": ["criterion_id", "source", "statement", "status", "requirement_reason", "evidence"],
231
+ "properties": {
232
+ "criterion_id": { "type": "string" },
233
+ "source": { "enum": ["verification_requirement", "dashboard_snapshot"] },
234
+ "statement": { "type": "string" },
235
+ "status": { "enum": ["covered", "partially_covered", "uncovered", "blocked", "contradicted"] },
236
+ "requirement_reason": { "type": ["string", "null"] },
237
+ "evidence": { "$ref": "#/$defs/evidenceCoverageLinks" }
238
+ }
239
+ },
240
+ "evidenceCoverageLinks": {
241
+ "type": "object",
242
+ "additionalProperties": false,
243
+ "required": ["intents", "receipt_paths", "gap_reasons", "source_anchor_ids"],
244
+ "properties": {
245
+ "intents": { "$ref": "#/$defs/stringArray" },
246
+ "receipt_paths": { "$ref": "#/$defs/stringArray" },
247
+ "gap_reasons": { "$ref": "#/$defs/stringArray" },
248
+ "source_anchor_ids": { "$ref": "#/$defs/stringArray" }
249
+ }
250
+ },
251
+ "evidenceReceipt": {
252
+ "type": "object",
253
+ "additionalProperties": false,
254
+ "required": ["intent", "status", "skipped", "verification_plan_id", "receipt_path", "receipt_sha256"],
255
+ "properties": {
256
+ "intent": { "type": ["string", "null"] },
257
+ "status": { "type": "string" },
258
+ "skipped": { "type": "boolean" },
259
+ "verification_plan_id": {
260
+ "type": ["string", "null"],
261
+ "pattern": "^sha256:[0-9a-f]{64}$"
262
+ },
263
+ "receipt_path": { "type": ["string", "null"] },
264
+ "receipt_sha256": {
265
+ "type": ["string", "null"],
266
+ "pattern": "^sha256:[0-9a-f]{64}$"
267
+ }
268
+ }
269
+ },
270
+ "evidenceSkippedCheck": {
271
+ "type": "object",
272
+ "additionalProperties": false,
273
+ "required": ["intent", "reason", "detail"],
274
+ "properties": {
275
+ "intent": { "type": ["string", "null"] },
276
+ "reason": { "type": ["string", "null"] },
277
+ "detail": { "type": ["string", "null"] }
278
+ }
279
+ },
280
+ "evidenceGap": {
281
+ "type": "object",
282
+ "additionalProperties": false,
283
+ "required": ["reason", "intent", "status", "detail", "files", "surfaces"],
284
+ "properties": {
285
+ "reason": { "type": ["string", "null"] },
286
+ "intent": { "type": ["string", "null"] },
287
+ "status": { "type": ["string", "null"] },
288
+ "detail": { "type": ["string", "null"] },
289
+ "files": { "$ref": "#/$defs/stringArray" },
290
+ "surfaces": { "$ref": "#/$defs/stringArray" }
291
+ }
292
+ },
293
+ "evidenceRemainingRisk": {
294
+ "type": "object",
295
+ "additionalProperties": false,
296
+ "required": ["code", "severity", "detail"],
297
+ "properties": {
298
+ "code": { "type": "string" },
299
+ "severity": { "type": "string" },
300
+ "detail": { "type": "string" }
301
+ }
302
+ },
303
+ "evidenceExplanation": {
304
+ "type": "object",
305
+ "additionalProperties": false,
306
+ "required": ["verified_by", "downgraded_by", "blocked_by", "contradicted_by"],
307
+ "properties": {
308
+ "verified_by": { "$ref": "#/$defs/stringArray" },
309
+ "downgraded_by": { "$ref": "#/$defs/stringArray" },
310
+ "blocked_by": { "$ref": "#/$defs/stringArray" },
311
+ "contradicted_by": { "$ref": "#/$defs/stringArray" }
312
+ }
313
+ },
314
+ "completionVerdict": {
315
+ "type": "object",
316
+ "additionalProperties": false,
317
+ "required": ["schema_version", "status", "primary_reason", "evidence", "blockers", "contradictions", "limitations"],
318
+ "properties": {
319
+ "schema_version": { "const": "1" },
320
+ "status": { "enum": ["verified", "partially_verified", "unverified", "blocked", "contradicted"] },
321
+ "primary_reason": { "type": "string" },
322
+ "evidence": {
323
+ "type": "object",
324
+ "additionalProperties": false,
325
+ "required": [
326
+ "source",
327
+ "verification_plan_id",
328
+ "changed_file_count",
329
+ "criteria",
330
+ "matched_intents",
331
+ "ran_intents",
332
+ "passed_intents",
333
+ "failed_intents",
334
+ "skipped_intents",
335
+ "receipt_count",
336
+ "gap_count",
337
+ "source_anchor_risk_count",
338
+ "scope_diff_risk_count",
339
+ "repeated_failure_count",
340
+ "validation_ratchet_risk_count",
341
+ "repro_evidence_risk_count",
342
+ "external_evidence_risk_count",
343
+ "write_drift_risk_count",
344
+ "receipt_binding_risk_count",
345
+ "stale_receipt_count",
346
+ "plan_mismatch_count",
347
+ "risks",
348
+ "receipt_binding",
349
+ "latest_run_status"
350
+ ],
351
+ "properties": {
352
+ "source": { "enum": ["mf_verify", "dashboard_export"] },
353
+ "verification_plan_id": {
354
+ "type": ["string", "null"],
355
+ "pattern": "^sha256:[0-9a-f]{64}$"
356
+ },
357
+ "changed_file_count": { "type": ["integer", "null"] },
358
+ "criteria": { "$ref": "#/$defs/completionVerdictCriteria" },
359
+ "matched_intents": { "type": "integer" },
360
+ "ran_intents": { "type": "integer" },
361
+ "passed_intents": { "type": "integer" },
362
+ "failed_intents": { "type": "integer" },
363
+ "skipped_intents": { "type": "integer" },
364
+ "receipt_count": { "type": "integer" },
365
+ "gap_count": { "type": "integer" },
366
+ "source_anchor_risk_count": { "type": "integer" },
367
+ "scope_diff_risk_count": { "type": "integer" },
368
+ "repeated_failure_count": { "type": "integer" },
369
+ "validation_ratchet_risk_count": { "type": "integer" },
370
+ "repro_evidence_risk_count": { "type": "integer" },
371
+ "external_evidence_risk_count": { "type": "integer" },
372
+ "write_drift_risk_count": { "type": "integer" },
373
+ "receipt_binding_risk_count": { "type": "integer" },
374
+ "stale_receipt_count": { "type": "integer" },
375
+ "plan_mismatch_count": { "type": "integer" },
376
+ "risks": { "$ref": "#/$defs/completionVerdictRisks" },
377
+ "receipt_binding": { "$ref": "#/$defs/completionVerdictReceiptBinding" },
378
+ "latest_run_status": { "type": ["string", "null"] }
379
+ }
380
+ },
381
+ "blockers": {
382
+ "type": "array",
383
+ "items": { "type": "string" }
384
+ },
385
+ "contradictions": {
386
+ "type": "array",
387
+ "items": { "type": "string" }
388
+ },
389
+ "limitations": {
390
+ "type": "array",
391
+ "items": { "type": "string" }
392
+ }
393
+ }
394
+ },
395
+ "completionVerdictCriteria": {
396
+ "type": "object",
397
+ "additionalProperties": false,
398
+ "required": ["total", "covered", "partially_covered", "uncovered", "blocked", "contradicted"],
399
+ "properties": {
400
+ "total": { "type": "integer" },
401
+ "covered": { "type": "integer" },
402
+ "partially_covered": { "type": "integer" },
403
+ "uncovered": { "type": "integer" },
404
+ "blocked": { "type": "integer" },
405
+ "contradicted": { "type": "integer" }
406
+ }
407
+ },
408
+ "completionVerdictRisks": {
409
+ "type": "object",
410
+ "additionalProperties": false,
411
+ "required": [
412
+ "source_anchor",
413
+ "scope_diff",
414
+ "repeated_failure",
415
+ "validation_ratchet",
416
+ "repro_evidence",
417
+ "external_evidence",
418
+ "write_drift",
419
+ "receipt_binding",
420
+ "stale_receipt",
421
+ "plan_mismatch"
422
+ ],
423
+ "properties": {
424
+ "source_anchor": { "type": "integer" },
425
+ "scope_diff": { "type": "integer" },
426
+ "repeated_failure": { "type": "integer" },
427
+ "validation_ratchet": { "type": "integer" },
428
+ "repro_evidence": { "type": "integer" },
429
+ "external_evidence": { "type": "integer" },
430
+ "write_drift": { "type": "integer" },
431
+ "receipt_binding": { "type": "integer" },
432
+ "stale_receipt": { "type": "integer" },
433
+ "plan_mismatch": { "type": "integer" }
434
+ }
435
+ },
436
+ "completionVerdictReceiptBinding": {
437
+ "type": "object",
438
+ "additionalProperties": false,
439
+ "required": [
440
+ "plan_bound_count",
441
+ "plan_unbound_count",
442
+ "fingerprint_bound_count",
443
+ "fingerprint_unbound_count",
444
+ "current_state_bound_count",
445
+ "current_state_unavailable_count",
446
+ "stale_count",
447
+ "plan_mismatch_count"
448
+ ],
449
+ "properties": {
450
+ "plan_bound_count": { "type": "integer" },
451
+ "plan_unbound_count": { "type": "integer" },
452
+ "fingerprint_bound_count": { "type": "integer" },
453
+ "fingerprint_unbound_count": { "type": "integer" },
454
+ "current_state_bound_count": { "type": "integer" },
455
+ "current_state_unavailable_count": { "type": "integer" },
456
+ "stale_count": { "type": "integer" },
457
+ "plan_mismatch_count": { "type": "integer" }
458
+ }
459
+ },
154
460
  "harnessReport": {
155
461
  "type": "object",
156
462
  "additionalProperties": false,
@@ -183,6 +489,8 @@
183
489
  "type": "object",
184
490
  "additionalProperties": false,
185
491
  "required": [
492
+ "completion_verdict",
493
+ "evidence_model",
186
494
  "changed_file_count",
187
495
  "changed_surfaces",
188
496
  "decision_graph_summary",
@@ -191,6 +499,8 @@
191
499
  "gaps"
192
500
  ],
193
501
  "properties": {
502
+ "completion_verdict": { "$ref": "#/$defs/completionVerdict" },
503
+ "evidence_model": { "$ref": "#/$defs/evidenceModel" },
194
504
  "changed_file_count": { "type": "integer" },
195
505
  "changed_surfaces": { "$ref": "#/$defs/stringArray" },
196
506
  "decision_graph_summary": {
@@ -506,7 +506,8 @@
506
506
  "runnableCount",
507
507
  "skippedCount",
508
508
  "requirements",
509
- "decisionGraph"
509
+ "decisionGraph",
510
+ "readModel"
510
511
  ],
511
512
  "properties": {
512
513
  "planSource": { "type": ["string", "null"] },
@@ -523,11 +524,182 @@
523
524
  },
524
525
  "decisionGraph": {
525
526
  "$ref": "#/$defs/verificationDecisionGraph"
527
+ },
528
+ "readModel": {
529
+ "$ref": "#/$defs/localVerificationReadModel"
526
530
  }
527
531
  }
528
532
  }
529
533
  }
530
534
  },
535
+ "localVerificationReadModel": {
536
+ "type": "object",
537
+ "additionalProperties": false,
538
+ "required": [
539
+ "source",
540
+ "authority",
541
+ "commandAuthority",
542
+ "grantsCommandAuthority",
543
+ "status",
544
+ "databasePath",
545
+ "indexFresh",
546
+ "stalePaths",
547
+ "planId",
548
+ "uncoveredCriteria",
549
+ "severeRisks",
550
+ "nonPassingReceipts",
551
+ "repeatedFailureFingerprints",
552
+ "validationWeakeningSignals",
553
+ "refreshHint"
554
+ ],
555
+ "properties": {
556
+ "source": { "const": "local_index" },
557
+ "authority": { "const": "evidence_only" },
558
+ "commandAuthority": { "const": ".mustflow/config/commands.toml" },
559
+ "grantsCommandAuthority": { "const": false },
560
+ "status": { "enum": ["fresh", "missing", "stale", "unreadable"] },
561
+ "databasePath": { "type": "string" },
562
+ "indexFresh": { "type": "boolean" },
563
+ "stalePaths": {
564
+ "type": "array",
565
+ "items": { "type": "string" }
566
+ },
567
+ "planId": {
568
+ "type": ["string", "null"],
569
+ "pattern": "^sha256:[0-9a-f]{64}$"
570
+ },
571
+ "uncoveredCriteria": {
572
+ "type": "array",
573
+ "items": { "$ref": "#/$defs/localUncoveredCriterion" }
574
+ },
575
+ "severeRisks": {
576
+ "type": "array",
577
+ "items": { "$ref": "#/$defs/localSevereVerificationRisk" }
578
+ },
579
+ "nonPassingReceipts": {
580
+ "type": "array",
581
+ "items": { "$ref": "#/$defs/localNonPassingVerificationReceipt" }
582
+ },
583
+ "repeatedFailureFingerprints": {
584
+ "type": "array",
585
+ "items": { "$ref": "#/$defs/localRepeatedFailureFingerprint" }
586
+ },
587
+ "validationWeakeningSignals": {
588
+ "type": "array",
589
+ "items": { "$ref": "#/$defs/localValidationWeakeningSignal" }
590
+ },
591
+ "refreshHint": { "type": ["string", "null"] }
592
+ }
593
+ },
594
+ "localUncoveredCriterion": {
595
+ "type": "object",
596
+ "additionalProperties": false,
597
+ "required": [
598
+ "criterionId",
599
+ "source",
600
+ "reason",
601
+ "surface",
602
+ "pathHash",
603
+ "coverageStatus",
604
+ "receiptCount",
605
+ "gapCount",
606
+ "riskCount"
607
+ ],
608
+ "properties": {
609
+ "criterionId": { "type": "string" },
610
+ "source": { "type": "string" },
611
+ "reason": { "type": ["string", "null"] },
612
+ "surface": { "type": ["string", "null"] },
613
+ "pathHash": { "type": ["string", "null"] },
614
+ "coverageStatus": { "type": ["string", "null"] },
615
+ "receiptCount": { "type": "integer" },
616
+ "gapCount": { "type": "integer" },
617
+ "riskCount": { "type": "integer" }
618
+ }
619
+ },
620
+ "localSevereVerificationRisk": {
621
+ "type": "object",
622
+ "additionalProperties": false,
623
+ "required": ["sourcePath", "ordinal", "code", "severity", "detailHash"],
624
+ "properties": {
625
+ "sourcePath": { "type": "string" },
626
+ "ordinal": { "type": "integer" },
627
+ "code": { "type": "string" },
628
+ "severity": { "type": "string" },
629
+ "detailHash": { "type": "string" }
630
+ }
631
+ },
632
+ "localNonPassingVerificationReceipt": {
633
+ "type": "object",
634
+ "additionalProperties": false,
635
+ "required": [
636
+ "receiptHash",
637
+ "planId",
638
+ "intent",
639
+ "status",
640
+ "commandFingerprint",
641
+ "contractFingerprint",
642
+ "currentStateHash",
643
+ "writeDriftStatus"
644
+ ],
645
+ "properties": {
646
+ "receiptHash": { "type": "string" },
647
+ "planId": { "type": "string" },
648
+ "intent": { "type": ["string", "null"] },
649
+ "status": { "type": "string" },
650
+ "commandFingerprint": { "type": ["string", "null"] },
651
+ "contractFingerprint": { "type": ["string", "null"] },
652
+ "currentStateHash": { "type": ["string", "null"] },
653
+ "writeDriftStatus": { "type": ["string", "null"] }
654
+ }
655
+ },
656
+ "localRepeatedFailureFingerprint": {
657
+ "type": "object",
658
+ "additionalProperties": false,
659
+ "required": [
660
+ "sourcePath",
661
+ "fingerprint",
662
+ "verificationPlanId",
663
+ "status",
664
+ "failedIntents",
665
+ "primaryReason",
666
+ "failedIntentsHash",
667
+ "riskCodesHash",
668
+ "affectedSurfacesHash",
669
+ "seenCount",
670
+ "requiresNewEvidence"
671
+ ],
672
+ "properties": {
673
+ "sourcePath": { "type": "string" },
674
+ "fingerprint": { "type": "string" },
675
+ "verificationPlanId": { "type": ["string", "null"] },
676
+ "status": { "type": "string" },
677
+ "failedIntents": {
678
+ "type": "array",
679
+ "items": { "type": "string" }
680
+ },
681
+ "primaryReason": { "type": ["string", "null"] },
682
+ "failedIntentsHash": { "type": ["string", "null"] },
683
+ "riskCodesHash": { "type": ["string", "null"] },
684
+ "affectedSurfacesHash": { "type": ["string", "null"] },
685
+ "seenCount": { "type": "integer" },
686
+ "requiresNewEvidence": { "type": "boolean" }
687
+ }
688
+ },
689
+ "localValidationWeakeningSignal": {
690
+ "type": "object",
691
+ "additionalProperties": false,
692
+ "required": ["signalId", "planId", "code", "severity", "pathHash", "beforeHash", "afterHash"],
693
+ "properties": {
694
+ "signalId": { "type": "string" },
695
+ "planId": { "type": ["string", "null"] },
696
+ "code": { "type": "string" },
697
+ "severity": { "type": "string" },
698
+ "pathHash": { "type": "string" },
699
+ "beforeHash": { "type": ["string", "null"] },
700
+ "afterHash": { "type": ["string", "null"] }
701
+ }
702
+ },
531
703
  "verificationDecisionGraph": {
532
704
  "type": "object",
533
705
  "additionalProperties": false,