@deksden-com/dd-flow-cli 0.2.0 → 0.3.1

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 (47) hide show
  1. package/CHANGELOG.md +43 -0
  2. package/README.md +76 -5
  3. package/dist/build-info.json +10 -6
  4. package/dist/cli/help.js +165 -20
  5. package/dist/cli/run-cli.js +427 -17
  6. package/dist/schemas/compatibility.schema.json +105 -0
  7. package/dist/schemas/engine-manifest.schema.json +61 -0
  8. package/dist/schemas/flow-guidance.schema.json +90 -0
  9. package/dist/schemas/flow-run-index.schema.json +30 -4
  10. package/dist/schemas/global-dashboard-data.schema.json +126 -0
  11. package/dist/schemas/mb-sdlc-review-report.schema.json +242 -0
  12. package/dist/schemas/mb-upgrade-migration-report.schema.json +93 -0
  13. package/dist/schemas/plan-stage-report.schema.json +83 -0
  14. package/dist/schemas/project-dashboard-data.schema.json +122 -0
  15. package/dist/schemas/project-flow-pack-manifest.schema.json +5 -1
  16. package/dist/schemas/project-summary.schema.json +73 -0
  17. package/dist/schemas/protocol-dashboard-data.schema.json +112 -0
  18. package/dist/schemas/status-report.schema.json +38 -2
  19. package/dist/schemas/version-report.schema.json +22 -0
  20. package/dist/services/build-info.js +26 -3
  21. package/dist/services/canon.js +93 -22
  22. package/dist/services/cleanup.js +45 -1
  23. package/dist/services/cli-operation-classifier.js +104 -0
  24. package/dist/services/compatibility-preflight.js +124 -0
  25. package/dist/services/config.js +31 -0
  26. package/dist/services/dashboard-targets.js +95 -0
  27. package/dist/services/dashboard.js +972 -10
  28. package/dist/services/engines.js +532 -0
  29. package/dist/services/flow-guidance.js +221 -0
  30. package/dist/services/hooks.js +1 -1
  31. package/dist/services/ids.js +106 -0
  32. package/dist/services/lanes.js +333 -1
  33. package/dist/services/merge-queue.js +106 -16
  34. package/dist/services/merge-worker.js +67 -4
  35. package/dist/services/migrations.js +231 -0
  36. package/dist/services/project-summary.js +122 -0
  37. package/dist/services/projects.js +44 -3
  38. package/dist/services/protocol-lifecycle.js +144 -0
  39. package/dist/services/protocols.js +660 -7
  40. package/dist/services/runs.js +98 -21
  41. package/dist/services/schema-validation.js +84 -4
  42. package/dist/services/sessions.js +21 -4
  43. package/dist/services/status.js +199 -1
  44. package/dist/services/version-status.js +59 -9
  45. package/dist/storage/database.js +31 -0
  46. package/dist/storage/paths.js +33 -0
  47. package/package.json +3 -2
@@ -0,0 +1,242 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "dd-flow/mb-sdlc-review-report@1",
4
+ "title": "mb-sdlc-review report",
5
+ "description": "Canonical data contract for project-level mb-sdlc-review stage-report.json.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": [
9
+ "schema_version",
10
+ "schema_id",
11
+ "run",
12
+ "review_focus",
13
+ "source_map",
14
+ "aspect_coverage",
15
+ "critic_pass",
16
+ "findings_register",
17
+ "conformance_summary",
18
+ "review_fix_recommendation",
19
+ "deferrals",
20
+ "dashboard_links"
21
+ ],
22
+ "properties": {
23
+ "schema_version": { "const": "1.0.0" },
24
+ "schema_id": { "const": "dd-flow/mb-sdlc-review-report@1" },
25
+ "run": { "$ref": "#/definitions/run" },
26
+ "review_focus": { "$ref": "#/definitions/reviewFocus" },
27
+ "source_map": { "$ref": "#/definitions/sourceMap" },
28
+ "aspect_coverage": {
29
+ "type": "array",
30
+ "minItems": 12,
31
+ "items": { "$ref": "#/definitions/aspectCoverage" }
32
+ },
33
+ "critic_pass": { "$ref": "#/definitions/criticPass" },
34
+ "findings_register": {
35
+ "type": "array",
36
+ "items": { "$ref": "#/definitions/finding" }
37
+ },
38
+ "conformance_summary": { "$ref": "#/definitions/conformanceSummary" },
39
+ "review_fix_recommendation": { "$ref": "#/definitions/reviewFixRecommendation" },
40
+ "deferrals": {
41
+ "type": "array",
42
+ "items": { "$ref": "#/definitions/deferral" }
43
+ },
44
+ "dashboard_links": {
45
+ "type": "object",
46
+ "additionalProperties": { "$ref": "#/definitions/link" }
47
+ }
48
+ },
49
+ "definitions": {
50
+ "nonEmptyString": { "type": "string", "minLength": 1 },
51
+ "run": {
52
+ "type": "object",
53
+ "additionalProperties": false,
54
+ "required": ["run_id", "project_id", "project_root", "generated_at", "report_dir", "stage_report_path", "html_report_path", "final_report_path"],
55
+ "properties": {
56
+ "run_id": { "$ref": "#/definitions/nonEmptyString" },
57
+ "project_id": { "$ref": "#/definitions/nonEmptyString" },
58
+ "project_root": { "$ref": "#/definitions/nonEmptyString" },
59
+ "generated_at": { "type": "string", "format": "date-time" },
60
+ "report_dir": { "$ref": "#/definitions/nonEmptyString" },
61
+ "stage_report_path": { "$ref": "#/definitions/nonEmptyString" },
62
+ "html_report_path": { "$ref": "#/definitions/nonEmptyString" },
63
+ "final_report_path": { "$ref": "#/definitions/nonEmptyString" },
64
+ "target_language": { "type": "string" }
65
+ }
66
+ },
67
+ "reviewFocus": {
68
+ "type": "object",
69
+ "additionalProperties": false,
70
+ "required": ["mode", "target", "title", "summary"],
71
+ "properties": {
72
+ "mode": {
73
+ "enum": ["whole_project", "latest_protocol", "specific_protocol", "protocol_set", "subsystem_or_spec_area", "feature_or_epic", "diff_or_commit_range"]
74
+ },
75
+ "target": { "$ref": "#/definitions/nonEmptyString" },
76
+ "title": { "$ref": "#/definitions/nonEmptyString" },
77
+ "summary": { "$ref": "#/definitions/nonEmptyString" },
78
+ "related_protocol_id": { "type": "string" },
79
+ "related_protocol_set": { "type": "string" }
80
+ }
81
+ },
82
+ "sourceMap": {
83
+ "type": "object",
84
+ "additionalProperties": false,
85
+ "required": ["sources", "missing_expected_sources", "notes"],
86
+ "properties": {
87
+ "sources": { "type": "array", "items": { "$ref": "#/definitions/source" } },
88
+ "missing_expected_sources": { "type": "array", "items": { "$ref": "#/definitions/source" } },
89
+ "notes": { "type": "array", "items": { "type": "string" } }
90
+ }
91
+ },
92
+ "source": {
93
+ "type": "object",
94
+ "additionalProperties": false,
95
+ "required": ["kind", "path", "status"],
96
+ "properties": {
97
+ "kind": { "enum": ["spec", "feature", "epic", "adr", "scenario", "protocol", "protocol_set", "evidence", "code", "test", "policy", "def", "dashboard", "run", "other"] },
98
+ "path": { "$ref": "#/definitions/nonEmptyString" },
99
+ "status": { "enum": ["available", "missing", "not_applicable", "degraded"] },
100
+ "summary": { "type": "string" }
101
+ }
102
+ },
103
+ "aspectCoverage": {
104
+ "type": "object",
105
+ "additionalProperties": false,
106
+ "required": ["aspect_id", "applicability", "coverage_mode", "status", "verdict", "reason", "task_packet_path", "report_path", "findings"],
107
+ "properties": {
108
+ "aspect_id": { "$ref": "#/definitions/aspectId" },
109
+ "applicability": { "enum": ["applicable", "not_applicable", "blocked"] },
110
+ "coverage_mode": { "enum": ["self_review", "focused_subagent", "multi_subagent", "external_tool", "degraded"] },
111
+ "status": { "enum": ["selected", "reviewed", "not_applicable", "blocked", "degraded"] },
112
+ "verdict": { "enum": ["pass", "watch", "fail", "blocked", "not_applicable", "degraded"] },
113
+ "reason": { "$ref": "#/definitions/nonEmptyString" },
114
+ "task_packet_path": { "type": "string" },
115
+ "report_path": { "type": "string" },
116
+ "findings": { "type": "array", "items": { "type": "string" } }
117
+ }
118
+ },
119
+ "aspectId": {
120
+ "enum": [
121
+ "structure_navigation_review",
122
+ "feature_epic_layer_review",
123
+ "spec_conformance_review",
124
+ "architecture_harmonization_review",
125
+ "adr_decision_review",
126
+ "scenario_evidence_review",
127
+ "contract_traceability_review",
128
+ "frontmatter_crosslink_review",
129
+ "engineering_standards_review",
130
+ "operations_policy_review",
131
+ "protocol_delivery_trace_review",
132
+ "def_followup_review"
133
+ ]
134
+ },
135
+ "criticPass": {
136
+ "type": "object",
137
+ "additionalProperties": false,
138
+ "required": ["candidate_count", "accepted_count", "rejected_count", "critics", "decisions"],
139
+ "properties": {
140
+ "candidate_count": { "type": "integer", "minimum": 0 },
141
+ "accepted_count": { "type": "integer", "minimum": 0 },
142
+ "rejected_count": { "type": "integer", "minimum": 0 },
143
+ "critics": { "type": "array", "items": { "$ref": "#/definitions/critic" } },
144
+ "decisions": { "type": "array", "items": { "$ref": "#/definitions/criticDecision" } }
145
+ }
146
+ },
147
+ "critic": {
148
+ "type": "object",
149
+ "additionalProperties": false,
150
+ "required": ["id", "mode", "verdict", "summary"],
151
+ "properties": {
152
+ "id": { "$ref": "#/definitions/nonEmptyString" },
153
+ "mode": { "enum": ["universal", "architectural_harmonization", "focused"] },
154
+ "verdict": { "enum": ["accepted", "accepted_with_downgrades", "degraded", "blocked"] },
155
+ "summary": { "$ref": "#/definitions/nonEmptyString" }
156
+ }
157
+ },
158
+ "criticDecision": {
159
+ "type": "object",
160
+ "additionalProperties": false,
161
+ "required": ["candidate_id", "disposition", "rationale"],
162
+ "properties": {
163
+ "candidate_id": { "$ref": "#/definitions/nonEmptyString" },
164
+ "finding_id": { "type": "string" },
165
+ "disposition": { "enum": ["accepted", "downgraded", "rejected", "duplicate", "def_candidate", "review_fix_candidate"] },
166
+ "rationale": { "$ref": "#/definitions/nonEmptyString" }
167
+ }
168
+ },
169
+ "finding": {
170
+ "type": "object",
171
+ "additionalProperties": false,
172
+ "required": ["id", "type", "severity", "confidence", "title", "problem", "impact", "recommended_action", "affected_objects", "evidence"],
173
+ "properties": {
174
+ "id": { "pattern": "^FIND-SDLC-REVIEW-[0-9]{3}$" },
175
+ "type": { "enum": ["project_defect", "spec_drift", "code_drift", "memory_bank_gap", "frontmatter_crosslink_gap", "coding_standards_gap", "policy_process_gap", "evidence_gap", "observation", "rejected_noise"] },
176
+ "severity": { "enum": ["blocking", "major", "minor", "informational"] },
177
+ "confidence": { "enum": ["high", "medium", "low"] },
178
+ "title": { "$ref": "#/definitions/nonEmptyString" },
179
+ "problem": { "$ref": "#/definitions/nonEmptyString" },
180
+ "impact": { "$ref": "#/definitions/nonEmptyString" },
181
+ "recommended_action": { "$ref": "#/definitions/nonEmptyString" },
182
+ "disposition": { "enum": ["fix_now", "create_protocol", "create_protocol_set", "create_DEF", "report_only", "reject"] },
183
+ "affected_objects": { "type": "array", "items": { "$ref": "#/definitions/source" } },
184
+ "evidence": { "type": "array", "items": { "$ref": "#/definitions/source" } }
185
+ }
186
+ },
187
+ "conformanceSummary": {
188
+ "type": "object",
189
+ "additionalProperties": false,
190
+ "required": ["overall_verdict", "summary", "items"],
191
+ "properties": {
192
+ "overall_verdict": { "enum": ["accepted", "accepted_with_findings", "failed", "blocked", "degraded"] },
193
+ "summary": { "$ref": "#/definitions/nonEmptyString" },
194
+ "items": {
195
+ "type": "array",
196
+ "items": {
197
+ "type": "object",
198
+ "additionalProperties": false,
199
+ "required": ["id", "label", "status", "summary"],
200
+ "properties": {
201
+ "id": { "$ref": "#/definitions/nonEmptyString" },
202
+ "label": { "$ref": "#/definitions/nonEmptyString" },
203
+ "status": { "enum": ["pass", "watch", "fail", "blocked", "not_applicable", "degraded"] },
204
+ "summary": { "$ref": "#/definitions/nonEmptyString" }
205
+ }
206
+ }
207
+ }
208
+ }
209
+ },
210
+ "reviewFixRecommendation": {
211
+ "type": "object",
212
+ "additionalProperties": false,
213
+ "required": ["required", "strategy", "next_action", "candidate_protocols"],
214
+ "properties": {
215
+ "required": { "type": "boolean" },
216
+ "strategy": { "enum": ["none", "single_protocol", "protocol_set", "DEF", "user_decision_required"] },
217
+ "next_action": { "$ref": "#/definitions/nonEmptyString" },
218
+ "candidate_protocols": { "type": "array", "items": { "type": "string" } }
219
+ }
220
+ },
221
+ "deferral": {
222
+ "type": "object",
223
+ "additionalProperties": false,
224
+ "required": ["id", "reason", "next_gate"],
225
+ "properties": {
226
+ "id": { "$ref": "#/definitions/nonEmptyString" },
227
+ "reason": { "$ref": "#/definitions/nonEmptyString" },
228
+ "next_gate": { "$ref": "#/definitions/nonEmptyString" }
229
+ }
230
+ },
231
+ "link": {
232
+ "type": "object",
233
+ "additionalProperties": false,
234
+ "required": ["label", "href", "status"],
235
+ "properties": {
236
+ "label": { "$ref": "#/definitions/nonEmptyString" },
237
+ "href": { "type": "string" },
238
+ "status": { "enum": ["available", "pending", "missing", "not_applicable"] }
239
+ }
240
+ }
241
+ }
242
+ }
@@ -0,0 +1,93 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "dd-flow/mb-upgrade-migration-report@1",
4
+ "title": "mb-upgrade runtime/home migration report",
5
+ "type": "object",
6
+ "additionalProperties": true,
7
+ "required": [
8
+ "ok",
9
+ "schema_id",
10
+ "generated_at",
11
+ "project",
12
+ "migration",
13
+ "backup",
14
+ "active_state",
15
+ "primary_data",
16
+ "derived_artifacts",
17
+ "verification"
18
+ ],
19
+ "properties": {
20
+ "ok": { "const": true },
21
+ "schema_id": { "const": "dd-flow/mb-upgrade-migration-report@1" },
22
+ "generated_at": { "type": "string", "minLength": 1 },
23
+ "project": {
24
+ "type": "object",
25
+ "required": ["id", "root", "memory_bank_version"],
26
+ "additionalProperties": true,
27
+ "properties": {
28
+ "id": { "type": "string", "minLength": 1 },
29
+ "root": { "type": "string", "minLength": 1 },
30
+ "memory_bank_version": { "type": ["string", "null"] }
31
+ }
32
+ },
33
+ "migration": {
34
+ "type": "object",
35
+ "required": [
36
+ "mode",
37
+ "status",
38
+ "source_memory_bank_version",
39
+ "target_memory_bank_version",
40
+ "adjacent_only",
41
+ "chain",
42
+ "blocked_reasons"
43
+ ],
44
+ "additionalProperties": true,
45
+ "properties": {
46
+ "mode": { "const": "mb-upgrade-only" },
47
+ "status": { "enum": ["ready", "blocked", "noop", "completed", "failed", "degraded"] },
48
+ "source_memory_bank_version": { "type": "string", "minLength": 1 },
49
+ "target_memory_bank_version": { "type": "string", "minLength": 1 },
50
+ "adjacent_only": { "const": true },
51
+ "chain": {
52
+ "type": "array",
53
+ "items": {
54
+ "type": "object",
55
+ "required": ["id", "from", "to", "status"],
56
+ "additionalProperties": true,
57
+ "properties": {
58
+ "id": { "type": "string", "minLength": 1 },
59
+ "from": { "type": "string", "minLength": 1 },
60
+ "to": { "type": "string", "minLength": 1 },
61
+ "status": { "enum": ["planned", "applied", "skipped", "failed", "blocked"] }
62
+ }
63
+ }
64
+ },
65
+ "blocked_reasons": {
66
+ "type": "array",
67
+ "items": { "type": "string", "minLength": 1 }
68
+ }
69
+ }
70
+ },
71
+ "backup": {
72
+ "type": "object",
73
+ "required": ["status", "path", "created_at", "rollback_route"],
74
+ "additionalProperties": true,
75
+ "properties": {
76
+ "status": { "enum": ["present", "planned", "missing"] },
77
+ "path": { "type": ["string", "null"] },
78
+ "created_at": { "type": ["string", "null"] },
79
+ "rollback_route": { "type": "string", "minLength": 1 }
80
+ }
81
+ },
82
+ "active_state": { "type": "object", "additionalProperties": true },
83
+ "primary_data": {
84
+ "type": "array",
85
+ "items": { "type": "string", "minLength": 1 }
86
+ },
87
+ "derived_artifacts": {
88
+ "type": "array",
89
+ "items": { "type": "string", "minLength": 1 }
90
+ },
91
+ "verification": { "type": "object", "additionalProperties": true }
92
+ }
93
+ }
@@ -65,6 +65,29 @@
65
65
  }
66
66
  }
67
67
  },
68
+ "task_profile": {
69
+ "type": "object",
70
+ "additionalProperties": true,
71
+ "properties": {
72
+ "size": {"type": "string"},
73
+ "risk": {"type": "string"},
74
+ "planning_route_hint": {"type": "string"},
75
+ "execution_mode_hint": {"type": "string"},
76
+ "verification_mode": {"type": "string"}
77
+ }
78
+ },
79
+ "route_decision": {
80
+ "type": "object",
81
+ "additionalProperties": true,
82
+ "properties": {
83
+ "selected_planning_route": {"type": "string"},
84
+ "selected_execution_mode": {"type": "string"},
85
+ "selected_git_route": {"type": "string"},
86
+ "selected_verification_depth": {"type": "string"},
87
+ "selected_evidence_level": {"type": "string"},
88
+ "reason": {"type": "string"}
89
+ }
90
+ },
68
91
  "graph": {
69
92
  "type": "object",
70
93
  "additionalProperties": false,
@@ -130,6 +153,51 @@
130
153
  }
131
154
  }
132
155
  },
156
+ "sdlc_contours": {
157
+ "type": "object",
158
+ "additionalProperties": true,
159
+ "properties": {
160
+ "summary": {"type": "string"},
161
+ "contours": {
162
+ "type": "array",
163
+ "items": {
164
+ "type": "object",
165
+ "additionalProperties": true,
166
+ "required": ["name", "applicability_status", "gate_status", "summary"],
167
+ "properties": {
168
+ "name": {"type": "string", "minLength": 1},
169
+ "applicability_status": {"type": "string", "minLength": 1},
170
+ "verification_state": {"type": "string"},
171
+ "closure_state": {"type": "string"},
172
+ "gate_status": {"type": "string", "minLength": 1},
173
+ "target_stage": {"type": "string"},
174
+ "delivery_target": {"type": "string"},
175
+ "summary": {"type": "string", "minLength": 1},
176
+ "reason": {"type": "string"},
177
+ "evidence": {"type": "string"},
178
+ "next_action": {"type": "string"}
179
+ }
180
+ }
181
+ },
182
+ "policy_migration": {"type": "string"},
183
+ "next_delivery_action": {"type": "string"}
184
+ }
185
+ },
186
+ "links": {
187
+ "type": "object",
188
+ "additionalProperties": { "$ref": "#/definitions/link" },
189
+ "properties": {
190
+ "global_dashboard": { "$ref": "#/definitions/link" },
191
+ "project_dashboard": { "$ref": "#/definitions/link" },
192
+ "protocol_page": { "$ref": "#/definitions/link" },
193
+ "run_index": { "$ref": "#/definitions/link" },
194
+ "run_summary": { "$ref": "#/definitions/link" },
195
+ "protocol_source": { "$ref": "#/definitions/link" },
196
+ "protocol_summary": { "$ref": "#/definitions/link" },
197
+ "previous_stage_report": { "$ref": "#/definitions/link" },
198
+ "next_stage_report": { "$ref": "#/definitions/link" }
199
+ }
200
+ },
133
201
  "plan_items": {
134
202
  "type": "array",
135
203
  "minItems": 1,
@@ -168,5 +236,20 @@
168
236
  "next_gate": {"type": "string", "minLength": 1}
169
237
  }
170
238
  }
239
+ },
240
+ "definitions": {
241
+ "link": {
242
+ "type": "object",
243
+ "additionalProperties": true,
244
+ "required": ["href", "label", "path_kind", "status"],
245
+ "properties": {
246
+ "href": { "type": "string" },
247
+ "label": { "type": "string", "minLength": 1 },
248
+ "path_kind": { "type": "string", "enum": ["relative", "absolute"] },
249
+ "status": { "type": "string", "enum": ["available", "pending", "missing", "not_applicable"] },
250
+ "degraded_reason": { "type": "string" },
251
+ "source": { "type": "string" }
252
+ }
253
+ }
171
254
  }
172
255
  }
@@ -0,0 +1,122 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "dd-flow/project-dashboard-data@1",
4
+ "title": "dd-flow project dashboard data",
5
+ "type": "object",
6
+ "additionalProperties": true,
7
+ "required": ["schema_id", "generated_at", "target_language", "page", "project", "metrics", "lifecycle_summary", "resource_summary", "protocol_cards", "warnings"],
8
+ "properties": {
9
+ "schema_id": { "const": "dd-flow/project-dashboard-data@1" },
10
+ "generated_at": { "type": "string", "format": "date-time" },
11
+ "target_language": { "type": "string", "minLength": 2 },
12
+ "page": { "$ref": "#/definitions/page" },
13
+ "project": {
14
+ "type": "object",
15
+ "additionalProperties": true,
16
+ "required": ["id", "title", "root", "status", "updated_at"],
17
+ "properties": {
18
+ "id": { "type": "string", "minLength": 1 },
19
+ "title": { "type": "string", "minLength": 1 },
20
+ "root": { "type": "string", "minLength": 1 },
21
+ "status": { "type": "string", "minLength": 1 },
22
+ "updated_at": { "type": "string", "minLength": 1 }
23
+ }
24
+ },
25
+ "links": { "type": "object", "additionalProperties": { "$ref": "#/definitions/link" } },
26
+ "metrics": { "type": "array", "items": { "$ref": "#/definitions/metric" } },
27
+ "lifecycle_summary": { "type": "object", "additionalProperties": true },
28
+ "resource_summary": { "type": "object", "additionalProperties": true },
29
+ "protocol_cards": { "type": "array", "items": { "$ref": "#/definitions/protocolCard" } },
30
+ "review_runs": { "type": "array", "items": { "$ref": "#/definitions/reviewRun" } },
31
+ "queued_protocols": { "type": "array" },
32
+ "merge_queue": { "type": "array" },
33
+ "sessions": { "type": "array" },
34
+ "locks": { "type": "array" },
35
+ "warnings": { "type": "array" }
36
+ },
37
+ "definitions": {
38
+ "page": {
39
+ "type": "object",
40
+ "additionalProperties": true,
41
+ "required": ["kind", "screen_id", "title", "html_path", "json_path"],
42
+ "properties": {
43
+ "kind": { "const": "project" },
44
+ "screen_id": { "const": "SCR-DD-FLOW-PROJECT-DASHBOARD" },
45
+ "title": { "type": "string", "minLength": 1 },
46
+ "html_path": { "type": "string", "minLength": 1 },
47
+ "json_path": { "type": "string", "minLength": 1 }
48
+ }
49
+ },
50
+ "metric": {
51
+ "type": "object",
52
+ "additionalProperties": true,
53
+ "required": ["id", "label", "value", "status", "source"],
54
+ "properties": {
55
+ "id": { "type": "string", "minLength": 1 },
56
+ "label": { "type": "string", "minLength": 1 },
57
+ "value": { "type": ["number", "null"] },
58
+ "status": { "type": "string", "enum": ["known", "unknown", "degraded", "not_applicable"] },
59
+ "source": { "type": "string", "minLength": 1 }
60
+ }
61
+ },
62
+ "link": {
63
+ "type": "object",
64
+ "additionalProperties": true,
65
+ "required": ["label", "href", "path_kind", "status"],
66
+ "properties": {
67
+ "label": { "type": "string", "minLength": 1 },
68
+ "href": { "type": "string" },
69
+ "path_kind": { "type": "string", "enum": ["absolute", "relative"] },
70
+ "status": { "type": "string", "enum": ["available", "pending", "missing", "not_applicable"] },
71
+ "degraded_reason": { "type": "string" }
72
+ }
73
+ },
74
+ "protocolCard": {
75
+ "type": "object",
76
+ "additionalProperties": true,
77
+ "required": ["id", "short_id", "display_status", "action_level", "lifecycle", "current_stage", "href"],
78
+ "properties": {
79
+ "id": { "type": "string", "minLength": 1 },
80
+ "short_id": { "type": "string", "minLength": 1 },
81
+ "display_status": { "type": "string", "minLength": 1 },
82
+ "action_level": { "type": "string", "enum": ["none", "watch", "actionable", "blocked"] },
83
+ "lifecycle": { "$ref": "#/definitions/lifecycle" },
84
+ "lifecycle_stage": { "type": "string" },
85
+ "lifecycle_status": { "type": "string" },
86
+ "resource": { "type": "object", "additionalProperties": true },
87
+ "current_stage": { "type": "string", "minLength": 1 },
88
+ "href": { "type": "string", "minLength": 1 }
89
+ }
90
+ },
91
+ "lifecycle": {
92
+ "type": "object",
93
+ "additionalProperties": true,
94
+ "required": ["flow", "stage", "status", "terminal", "raw_stage", "raw_status"],
95
+ "properties": {
96
+ "flow": { "type": "string", "minLength": 1 },
97
+ "stage": { "type": "string", "minLength": 1 },
98
+ "substage": { "type": ["string", "null"] },
99
+ "status": { "type": "string", "minLength": 1 },
100
+ "terminal": { "type": "boolean" },
101
+ "legacy_stage": { "type": ["string", "null"] },
102
+ "legacy_status": { "type": ["string", "null"] },
103
+ "raw_stage": { "type": "string", "minLength": 1 },
104
+ "raw_status": { "type": "string", "minLength": 1 },
105
+ "queue_status": { "type": ["string", "null"] }
106
+ }
107
+ },
108
+ "reviewRun": {
109
+ "type": "object",
110
+ "additionalProperties": true,
111
+ "required": ["id", "short_id", "flow_kind", "status", "display_status"],
112
+ "properties": {
113
+ "id": { "type": "string", "minLength": 1 },
114
+ "short_id": { "type": "string", "minLength": 1 },
115
+ "flow_kind": { "type": "string", "minLength": 1 },
116
+ "status": { "type": "string", "minLength": 1 },
117
+ "display_status": { "type": "string", "minLength": 1 },
118
+ "subject_id": { "type": "string" }
119
+ }
120
+ }
121
+ }
122
+ }
@@ -32,6 +32,10 @@
32
32
  "type": "string",
33
33
  "minLength": 1
34
34
  },
35
+ "canon_memory_bank_root": {
36
+ "type": "string",
37
+ "minLength": 1
38
+ },
35
39
  "canon_flow_root": {
36
40
  "type": "string",
37
41
  "minLength": 1
@@ -101,7 +105,7 @@
101
105
  }
102
106
  },
103
107
  "then": {
104
- "required": ["canon_version_at_source_commit", "flow_contract"]
108
+ "required": ["canon_memory_bank_root", "canon_flow_root", "canon_version_at_source_commit", "flow_contract"]
105
109
  }
106
110
  }
107
111
  ],
@@ -0,0 +1,73 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "dd-flow/project-summary@1",
4
+ "title": "dd-flow project summary",
5
+ "type": "object",
6
+ "additionalProperties": true,
7
+ "required": [
8
+ "schema_id",
9
+ "schema_version",
10
+ "generated_at",
11
+ "project_id",
12
+ "name",
13
+ "root",
14
+ "root_exists",
15
+ "status",
16
+ "memorybank_version",
17
+ "cli_version",
18
+ "engine_version",
19
+ "summary_path",
20
+ "protocol_counts",
21
+ "active_protocols",
22
+ "waiting_items",
23
+ "resource_summary",
24
+ "warnings",
25
+ "last_activity_at"
26
+ ],
27
+ "properties": {
28
+ "schema_id": { "const": "dd-flow/project-summary@1" },
29
+ "schema_version": { "const": "1.0.0" },
30
+ "generated_at": { "type": "string", "minLength": 1 },
31
+ "project_id": { "type": "string", "minLength": 1 },
32
+ "name": { "type": "string", "minLength": 1 },
33
+ "root": { "type": "string", "minLength": 1 },
34
+ "root_exists": { "type": "boolean" },
35
+ "status": { "type": "string", "minLength": 1 },
36
+ "memorybank_version": { "type": ["string", "null"] },
37
+ "memorybank_status": { "type": "string" },
38
+ "flow_pack_status": { "type": "string" },
39
+ "required_engine_range": { "type": ["string", "null"] },
40
+ "cli_version": { "type": "string", "minLength": 1 },
41
+ "engine_version": { "type": ["string", "null"] },
42
+ "engine_status": { "type": "string" },
43
+ "summary_path": { "type": "string", "minLength": 1 },
44
+ "dashboard_path": { "type": "string" },
45
+ "protocol_counts": {
46
+ "type": "object",
47
+ "required": ["active", "waiting", "done", "total"],
48
+ "additionalProperties": true,
49
+ "properties": {
50
+ "active": { "type": "integer", "minimum": 0 },
51
+ "waiting": { "type": "integer", "minimum": 0 },
52
+ "done": { "type": "integer", "minimum": 0 },
53
+ "total": { "type": "integer", "minimum": 0 }
54
+ }
55
+ },
56
+ "active_protocols": { "type": "array" },
57
+ "waiting_items": { "type": "array" },
58
+ "resource_summary": {
59
+ "type": "object",
60
+ "required": ["queue", "locks", "waiters", "sessions", "open_defs"],
61
+ "additionalProperties": true,
62
+ "properties": {
63
+ "queue": { "type": "integer", "minimum": 0 },
64
+ "locks": { "type": "integer", "minimum": 0 },
65
+ "waiters": { "type": "integer", "minimum": 0 },
66
+ "sessions": { "type": "integer", "minimum": 0 },
67
+ "open_defs": { "type": "integer", "minimum": 0 }
68
+ }
69
+ },
70
+ "warnings": { "type": "array" },
71
+ "last_activity_at": { "type": "string", "minLength": 1 }
72
+ }
73
+ }