@deksden-com/dd-flow-cli 0.1.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 (35) hide show
  1. package/README.md +274 -0
  2. package/dist/cli/help.js +308 -0
  3. package/dist/cli/run-cli.js +945 -0
  4. package/dist/cli.js +4 -0
  5. package/dist/domain/contracts.js +57 -0
  6. package/dist/domain/entity-ids.js +47 -0
  7. package/dist/domain/flow-contract.js +233 -0
  8. package/dist/domain/validation.js +91 -0
  9. package/dist/protocol/local-files.js +141 -0
  10. package/dist/runtime/context.js +11 -0
  11. package/dist/schemas/code-stage-report.schema.json +181 -0
  12. package/dist/schemas/flow-run-index.schema.json +129 -0
  13. package/dist/schemas/mb-upgrade-review-data.schema.json +813 -0
  14. package/dist/schemas/memorybank-permissions-preflight.schema.json +154 -0
  15. package/dist/schemas/merge-stage-report.schema.json +135 -0
  16. package/dist/services/audit.js +19 -0
  17. package/dist/services/cleanup.js +310 -0
  18. package/dist/services/config.js +143 -0
  19. package/dist/services/dashboard.js +436 -0
  20. package/dist/services/hooks.js +929 -0
  21. package/dist/services/lanes.js +327 -0
  22. package/dist/services/memory-permissions.js +344 -0
  23. package/dist/services/merge-queue.js +333 -0
  24. package/dist/services/plans.js +149 -0
  25. package/dist/services/projects.js +286 -0
  26. package/dist/services/protocols.js +606 -0
  27. package/dist/services/runs.js +359 -0
  28. package/dist/services/schema-validation.js +185 -0
  29. package/dist/services/sessions.js +365 -0
  30. package/dist/services/worktrees.js +204 -0
  31. package/dist/shared/errors.js +14 -0
  32. package/dist/shared/json.js +17 -0
  33. package/dist/storage/database.js +325 -0
  34. package/dist/storage/paths.js +56 -0
  35. package/package.json +44 -0
@@ -0,0 +1,813 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "dd-flow/mb-upgrade-review-data@1",
4
+ "title": "mb-upgrade-review data",
5
+ "description": "Canonical data contract for mb-upgrade-review review-data.json.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": [
9
+ "schema_version",
10
+ "schema_id",
11
+ "review",
12
+ "overall",
13
+ "aspects",
14
+ "findings",
15
+ "evidence",
16
+ "defs",
17
+ "verification",
18
+ "dashboard"
19
+ ],
20
+ "properties": {
21
+ "schema_version": {
22
+ "const": "1.0.0"
23
+ },
24
+ "schema_id": {
25
+ "const": "dd-flow/mb-upgrade-review-data@1"
26
+ },
27
+ "review": {
28
+ "$ref": "#/definitions/review"
29
+ },
30
+ "overall": {
31
+ "$ref": "#/definitions/overall"
32
+ },
33
+ "aspects": {
34
+ "type": "array",
35
+ "minItems": 10,
36
+ "maxItems": 10,
37
+ "items": {
38
+ "$ref": "#/definitions/aspect"
39
+ }
40
+ },
41
+ "findings": {
42
+ "type": "array",
43
+ "items": {
44
+ "$ref": "#/definitions/finding"
45
+ }
46
+ },
47
+ "evidence": {
48
+ "type": "array",
49
+ "items": {
50
+ "$ref": "#/definitions/evidence"
51
+ }
52
+ },
53
+ "defs": {
54
+ "$ref": "#/definitions/defs"
55
+ },
56
+ "verification": {
57
+ "type": "array",
58
+ "items": {
59
+ "$ref": "#/definitions/verification"
60
+ }
61
+ },
62
+ "dashboard": {
63
+ "$ref": "#/definitions/dashboard"
64
+ }
65
+ },
66
+ "definitions": {
67
+ "nonEmptyString": {
68
+ "type": "string",
69
+ "minLength": 1
70
+ },
71
+ "optionalString": {
72
+ "type": "string"
73
+ },
74
+ "path": {
75
+ "type": "string",
76
+ "minLength": 1
77
+ },
78
+ "review": {
79
+ "type": "object",
80
+ "additionalProperties": false,
81
+ "required": [
82
+ "run_id",
83
+ "generated_at",
84
+ "target_project",
85
+ "target_language",
86
+ "reviewed_upgrade_path",
87
+ "reviewed_branch",
88
+ "reviewed_commit",
89
+ "integration_branch",
90
+ "source_integrated_review_path",
91
+ "final_report_path",
92
+ "aspect_coverage_path",
93
+ "dashboard_template"
94
+ ],
95
+ "properties": {
96
+ "run_id": {
97
+ "$ref": "#/definitions/nonEmptyString"
98
+ },
99
+ "generated_at": {
100
+ "type": "string",
101
+ "format": "date-time"
102
+ },
103
+ "target_project": {
104
+ "$ref": "#/definitions/nonEmptyString"
105
+ },
106
+ "target_language": {
107
+ "$ref": "#/definitions/nonEmptyString"
108
+ },
109
+ "reviewed_upgrade_path": {
110
+ "$ref": "#/definitions/path"
111
+ },
112
+ "reviewed_branch": {
113
+ "$ref": "#/definitions/nonEmptyString"
114
+ },
115
+ "reviewed_commit": {
116
+ "$ref": "#/definitions/nonEmptyString"
117
+ },
118
+ "integration_branch": {
119
+ "$ref": "#/definitions/nonEmptyString"
120
+ },
121
+ "source_integrated_review_path": {
122
+ "$ref": "#/definitions/path"
123
+ },
124
+ "final_report_path": {
125
+ "$ref": "#/definitions/path"
126
+ },
127
+ "aspect_coverage_path": {
128
+ "$ref": "#/definitions/path"
129
+ },
130
+ "dashboard_template": {
131
+ "$ref": "#/definitions/path"
132
+ },
133
+ "active_def_index_path": {
134
+ "$ref": "#/definitions/optionalString"
135
+ },
136
+ "active_def_index_note": {
137
+ "$ref": "#/definitions/optionalString"
138
+ }
139
+ }
140
+ },
141
+ "overall": {
142
+ "type": "object",
143
+ "additionalProperties": false,
144
+ "required": [
145
+ "verdict",
146
+ "verdict_label",
147
+ "verdict_note",
148
+ "score_total",
149
+ "score_max",
150
+ "score_label",
151
+ "blockers",
152
+ "blocker_summary",
153
+ "delivery_state",
154
+ "next_action"
155
+ ],
156
+ "properties": {
157
+ "verdict": {
158
+ "enum": [
159
+ "accepted",
160
+ "accepted_with_deferrals",
161
+ "failed",
162
+ "blocked"
163
+ ]
164
+ },
165
+ "verdict_label": {
166
+ "$ref": "#/definitions/nonEmptyString"
167
+ },
168
+ "verdict_note": {
169
+ "$ref": "#/definitions/nonEmptyString"
170
+ },
171
+ "score_total": {
172
+ "type": "integer",
173
+ "minimum": 0
174
+ },
175
+ "score_max": {
176
+ "type": "integer",
177
+ "minimum": 1
178
+ },
179
+ "score_label": {
180
+ "$ref": "#/definitions/nonEmptyString"
181
+ },
182
+ "blockers": {
183
+ "type": "integer",
184
+ "minimum": 0
185
+ },
186
+ "blocker_summary": {
187
+ "$ref": "#/definitions/optionalString"
188
+ },
189
+ "delivery_state": {
190
+ "$ref": "#/definitions/nonEmptyString"
191
+ },
192
+ "next_action": {
193
+ "$ref": "#/definitions/nonEmptyString"
194
+ }
195
+ }
196
+ },
197
+ "aspectId": {
198
+ "enum": [
199
+ "01-goal-and-delivery",
200
+ "02-knowledge-preservation",
201
+ "03-canonical-structure",
202
+ "04-target-coverage",
203
+ "05-path-traceability",
204
+ "06-def-settlement",
205
+ "07-verification-quality",
206
+ "08-git-merge-delivery",
207
+ "09-report-quality",
208
+ "10-agent-process-quality"
209
+ ]
210
+ },
211
+ "aspect": {
212
+ "type": "object",
213
+ "additionalProperties": false,
214
+ "required": [
215
+ "id",
216
+ "order",
217
+ "label",
218
+ "reviewer",
219
+ "score",
220
+ "verdict",
221
+ "report_path",
222
+ "short_summary",
223
+ "primary_finding",
224
+ "finding_preview",
225
+ "detail_tooltip",
226
+ "def_badges",
227
+ "severity_counts",
228
+ "evidence_summary",
229
+ "findings"
230
+ ],
231
+ "properties": {
232
+ "id": {
233
+ "$ref": "#/definitions/aspectId"
234
+ },
235
+ "order": {
236
+ "type": "integer",
237
+ "minimum": 1,
238
+ "maximum": 10
239
+ },
240
+ "label": {
241
+ "$ref": "#/definitions/nonEmptyString"
242
+ },
243
+ "reviewer": {
244
+ "$ref": "#/definitions/nonEmptyString"
245
+ },
246
+ "score": {
247
+ "type": "integer",
248
+ "minimum": 0,
249
+ "maximum": 5
250
+ },
251
+ "verdict": {
252
+ "enum": [
253
+ "strong_pass",
254
+ "pass",
255
+ "weak_pass",
256
+ "fail",
257
+ "blocked",
258
+ "not_applicable"
259
+ ]
260
+ },
261
+ "report_path": {
262
+ "$ref": "#/definitions/path"
263
+ },
264
+ "short_summary": {
265
+ "$ref": "#/definitions/nonEmptyString"
266
+ },
267
+ "primary_finding": {
268
+ "$ref": "#/definitions/nonEmptyString"
269
+ },
270
+ "finding_preview": {
271
+ "$ref": "#/definitions/nonEmptyString"
272
+ },
273
+ "detail_tooltip": {
274
+ "$ref": "#/definitions/nonEmptyString"
275
+ },
276
+ "def_badges": {
277
+ "type": "array",
278
+ "items": {
279
+ "$ref": "#/definitions/defBadge"
280
+ }
281
+ },
282
+ "severity_counts": {
283
+ "$ref": "#/definitions/severityCounts"
284
+ },
285
+ "evidence_summary": {
286
+ "type": "array",
287
+ "items": {
288
+ "$ref": "#/definitions/nonEmptyString"
289
+ }
290
+ },
291
+ "findings": {
292
+ "type": "array",
293
+ "items": {
294
+ "type": "string",
295
+ "pattern": "^FIND-MBU-REVIEW-[0-9]{3}$"
296
+ }
297
+ }
298
+ }
299
+ },
300
+ "severityCounts": {
301
+ "type": "object",
302
+ "additionalProperties": false,
303
+ "required": [
304
+ "blocking",
305
+ "major",
306
+ "minor",
307
+ "informational"
308
+ ],
309
+ "properties": {
310
+ "blocking": {
311
+ "type": "integer",
312
+ "minimum": 0
313
+ },
314
+ "major": {
315
+ "type": "integer",
316
+ "minimum": 0
317
+ },
318
+ "minor": {
319
+ "type": "integer",
320
+ "minimum": 0
321
+ },
322
+ "informational": {
323
+ "type": "integer",
324
+ "minimum": 0
325
+ }
326
+ }
327
+ },
328
+ "finding": {
329
+ "type": "object",
330
+ "additionalProperties": false,
331
+ "required": [
332
+ "id",
333
+ "display_order",
334
+ "aspect_id",
335
+ "severity",
336
+ "severity_label",
337
+ "title",
338
+ "problem",
339
+ "impact",
340
+ "next_action",
341
+ "status_label",
342
+ "evidence",
343
+ "tracking"
344
+ ],
345
+ "properties": {
346
+ "id": {
347
+ "type": "string",
348
+ "pattern": "^FIND-MBU-REVIEW-[0-9]{3}$"
349
+ },
350
+ "display_order": {
351
+ "type": "integer",
352
+ "minimum": 1
353
+ },
354
+ "aspect_id": {
355
+ "$ref": "#/definitions/aspectId"
356
+ },
357
+ "severity": {
358
+ "enum": [
359
+ "blocking",
360
+ "major",
361
+ "minor",
362
+ "informational"
363
+ ]
364
+ },
365
+ "severity_label": {
366
+ "$ref": "#/definitions/nonEmptyString"
367
+ },
368
+ "title": {
369
+ "$ref": "#/definitions/nonEmptyString"
370
+ },
371
+ "problem": {
372
+ "$ref": "#/definitions/nonEmptyString"
373
+ },
374
+ "impact": {
375
+ "$ref": "#/definitions/nonEmptyString"
376
+ },
377
+ "next_action": {
378
+ "$ref": "#/definitions/nonEmptyString"
379
+ },
380
+ "status_label": {
381
+ "$ref": "#/definitions/nonEmptyString"
382
+ },
383
+ "evidence": {
384
+ "type": "array",
385
+ "minItems": 1,
386
+ "items": {
387
+ "$ref": "#/definitions/evidence"
388
+ }
389
+ },
390
+ "tracking": {
391
+ "$ref": "#/definitions/tracking"
392
+ }
393
+ },
394
+ "allOf": [
395
+ {
396
+ "if": {
397
+ "properties": {
398
+ "severity": {
399
+ "enum": [
400
+ "blocking",
401
+ "major"
402
+ ]
403
+ }
404
+ },
405
+ "required": [
406
+ "severity"
407
+ ]
408
+ },
409
+ "then": {
410
+ "properties": {
411
+ "tracking": {
412
+ "properties": {
413
+ "status": {
414
+ "not": {
415
+ "const": "report_only"
416
+ }
417
+ }
418
+ }
419
+ }
420
+ }
421
+ }
422
+ }
423
+ ]
424
+ },
425
+ "tracking": {
426
+ "type": "object",
427
+ "additionalProperties": false,
428
+ "required": [
429
+ "status",
430
+ "label",
431
+ "badge_kind",
432
+ "def_id",
433
+ "def_path",
434
+ "reason"
435
+ ],
436
+ "properties": {
437
+ "status": {
438
+ "enum": [
439
+ "created_def",
440
+ "updated_def",
441
+ "existing_def",
442
+ "fixed_before_report",
443
+ "explicitly_not_tracked",
444
+ "report_only"
445
+ ]
446
+ },
447
+ "label": {
448
+ "$ref": "#/definitions/nonEmptyString"
449
+ },
450
+ "badge_kind": {
451
+ "enum": [
452
+ "created",
453
+ "updated",
454
+ "existing",
455
+ "fixed",
456
+ "not_tracked",
457
+ "report"
458
+ ]
459
+ },
460
+ "def_id": {
461
+ "type": "string"
462
+ },
463
+ "def_path": {
464
+ "type": "string"
465
+ },
466
+ "reason": {
467
+ "type": "string"
468
+ },
469
+ "reason_code": {
470
+ "enum": [
471
+ "non_target",
472
+ "superseded",
473
+ "false_positive",
474
+ "already_fixed"
475
+ ]
476
+ }
477
+ },
478
+ "allOf": [
479
+ {
480
+ "if": {
481
+ "properties": {
482
+ "status": {
483
+ "enum": [
484
+ "created_def",
485
+ "updated_def",
486
+ "existing_def"
487
+ ]
488
+ }
489
+ },
490
+ "required": [
491
+ "status"
492
+ ]
493
+ },
494
+ "then": {
495
+ "properties": {
496
+ "def_id": {
497
+ "pattern": "^DEF-[A-Z0-9-]+$"
498
+ },
499
+ "def_path": {
500
+ "minLength": 1
501
+ }
502
+ },
503
+ "required": [
504
+ "def_id",
505
+ "def_path"
506
+ ]
507
+ }
508
+ },
509
+ {
510
+ "if": {
511
+ "properties": {
512
+ "status": {
513
+ "const": "explicitly_not_tracked"
514
+ }
515
+ },
516
+ "required": [
517
+ "status"
518
+ ]
519
+ },
520
+ "then": {
521
+ "properties": {
522
+ "reason": {
523
+ "minLength": 1
524
+ }
525
+ },
526
+ "required": [
527
+ "reason",
528
+ "reason_code"
529
+ ]
530
+ }
531
+ }
532
+ ]
533
+ },
534
+ "evidence": {
535
+ "type": "object",
536
+ "additionalProperties": false,
537
+ "required": [
538
+ "kind",
539
+ "label",
540
+ "path",
541
+ "summary"
542
+ ],
543
+ "properties": {
544
+ "kind": {
545
+ "enum": [
546
+ "file",
547
+ "command",
548
+ "git",
549
+ "dashboard",
550
+ "schema",
551
+ "note"
552
+ ]
553
+ },
554
+ "label": {
555
+ "$ref": "#/definitions/nonEmptyString"
556
+ },
557
+ "path": {
558
+ "$ref": "#/definitions/optionalString"
559
+ },
560
+ "summary": {
561
+ "$ref": "#/definitions/nonEmptyString"
562
+ }
563
+ }
564
+ },
565
+ "defBadge": {
566
+ "type": "object",
567
+ "additionalProperties": false,
568
+ "required": [
569
+ "label",
570
+ "kind"
571
+ ],
572
+ "properties": {
573
+ "label": {
574
+ "$ref": "#/definitions/nonEmptyString"
575
+ },
576
+ "kind": {
577
+ "enum": [
578
+ "created",
579
+ "updated",
580
+ "existing",
581
+ "fixed",
582
+ "not_tracked",
583
+ "report"
584
+ ]
585
+ }
586
+ }
587
+ },
588
+ "defs": {
589
+ "type": "object",
590
+ "additionalProperties": false,
591
+ "required": [
592
+ "created",
593
+ "updated",
594
+ "existing"
595
+ ],
596
+ "properties": {
597
+ "created": {
598
+ "type": "array",
599
+ "items": {
600
+ "$ref": "#/definitions/defRef"
601
+ }
602
+ },
603
+ "updated": {
604
+ "type": "array",
605
+ "items": {
606
+ "$ref": "#/definitions/defRef"
607
+ }
608
+ },
609
+ "existing": {
610
+ "type": "array",
611
+ "items": {
612
+ "$ref": "#/definitions/defRef"
613
+ }
614
+ }
615
+ }
616
+ },
617
+ "defRef": {
618
+ "type": "object",
619
+ "additionalProperties": false,
620
+ "required": [
621
+ "id",
622
+ "path",
623
+ "finding_ids",
624
+ "summary",
625
+ "discoverability"
626
+ ],
627
+ "properties": {
628
+ "id": {
629
+ "type": "string",
630
+ "pattern": "^DEF-[A-Z0-9-]+$"
631
+ },
632
+ "path": {
633
+ "$ref": "#/definitions/path"
634
+ },
635
+ "finding_ids": {
636
+ "type": "array",
637
+ "minItems": 1,
638
+ "items": {
639
+ "type": "string",
640
+ "pattern": "^FIND-MBU-REVIEW-[0-9]{3}$"
641
+ }
642
+ },
643
+ "summary": {
644
+ "$ref": "#/definitions/nonEmptyString"
645
+ },
646
+ "discoverability": {
647
+ "$ref": "#/definitions/nonEmptyString"
648
+ }
649
+ }
650
+ },
651
+ "verification": {
652
+ "type": "object",
653
+ "additionalProperties": false,
654
+ "required": [
655
+ "label",
656
+ "status",
657
+ "summary"
658
+ ],
659
+ "properties": {
660
+ "label": {
661
+ "$ref": "#/definitions/nonEmptyString"
662
+ },
663
+ "status": {
664
+ "enum": [
665
+ "passed",
666
+ "failed",
667
+ "blocked",
668
+ "not_run"
669
+ ]
670
+ },
671
+ "summary": {
672
+ "$ref": "#/definitions/nonEmptyString"
673
+ },
674
+ "command": {
675
+ "$ref": "#/definitions/optionalString"
676
+ },
677
+ "path": {
678
+ "$ref": "#/definitions/optionalString"
679
+ }
680
+ }
681
+ },
682
+ "dashboard": {
683
+ "type": "object",
684
+ "additionalProperties": false,
685
+ "required": [
686
+ "kicker",
687
+ "title",
688
+ "lead",
689
+ "meta",
690
+ "top_signals",
691
+ "tooltips",
692
+ "timeline"
693
+ ],
694
+ "properties": {
695
+ "kicker": {
696
+ "$ref": "#/definitions/nonEmptyString"
697
+ },
698
+ "title": {
699
+ "$ref": "#/definitions/nonEmptyString"
700
+ },
701
+ "lead": {
702
+ "$ref": "#/definitions/nonEmptyString"
703
+ },
704
+ "meta": {
705
+ "type": "array",
706
+ "items": {
707
+ "$ref": "#/definitions/metaItem"
708
+ }
709
+ },
710
+ "top_signals": {
711
+ "type": "array",
712
+ "items": {
713
+ "$ref": "#/definitions/topSignal"
714
+ }
715
+ },
716
+ "tooltips": {
717
+ "type": "object",
718
+ "additionalProperties": false,
719
+ "required": [
720
+ "quality_profile",
721
+ "aspect_review",
722
+ "timeline",
723
+ "verification"
724
+ ],
725
+ "properties": {
726
+ "quality_profile": {
727
+ "$ref": "#/definitions/nonEmptyString"
728
+ },
729
+ "aspect_review": {
730
+ "$ref": "#/definitions/nonEmptyString"
731
+ },
732
+ "timeline": {
733
+ "$ref": "#/definitions/nonEmptyString"
734
+ },
735
+ "verification": {
736
+ "$ref": "#/definitions/nonEmptyString"
737
+ }
738
+ }
739
+ },
740
+ "timeline": {
741
+ "type": "array",
742
+ "items": {
743
+ "$ref": "#/definitions/timelineItem"
744
+ }
745
+ }
746
+ }
747
+ },
748
+ "metaItem": {
749
+ "type": "object",
750
+ "additionalProperties": false,
751
+ "required": [
752
+ "label",
753
+ "value"
754
+ ],
755
+ "properties": {
756
+ "label": {
757
+ "$ref": "#/definitions/nonEmptyString"
758
+ },
759
+ "value": {
760
+ "$ref": "#/definitions/nonEmptyString"
761
+ }
762
+ }
763
+ },
764
+ "topSignal": {
765
+ "type": "object",
766
+ "additionalProperties": false,
767
+ "required": [
768
+ "kind",
769
+ "label",
770
+ "text"
771
+ ],
772
+ "properties": {
773
+ "kind": {
774
+ "enum": [
775
+ "good",
776
+ "warn",
777
+ "bad"
778
+ ]
779
+ },
780
+ "label": {
781
+ "$ref": "#/definitions/nonEmptyString"
782
+ },
783
+ "text": {
784
+ "$ref": "#/definitions/nonEmptyString"
785
+ }
786
+ }
787
+ },
788
+ "timelineItem": {
789
+ "type": "object",
790
+ "additionalProperties": false,
791
+ "required": [
792
+ "label",
793
+ "text"
794
+ ],
795
+ "properties": {
796
+ "label": {
797
+ "$ref": "#/definitions/nonEmptyString"
798
+ },
799
+ "text": {
800
+ "$ref": "#/definitions/nonEmptyString"
801
+ }
802
+ }
803
+ }
804
+ },
805
+ "x-dd-flow-semantic-checks": [
806
+ "aspects must contain each mandatory aspect id exactly once",
807
+ "aspect findings must reference existing finding ids",
808
+ "finding aspect_id must reference an existing aspect id",
809
+ "accepted verdict cannot coexist with unresolved blocking findings",
810
+ "major explicitly_not_tracked reason_code must be one of non_target, superseded, false_positive, already_fixed",
811
+ "created/updated DEFs must be discoverable by active DEF preflight or documented active_def_index_note"
812
+ ]
813
+ }