@deksden-com/dd-flow-cli 0.1.0 → 0.3.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 (37) hide show
  1. package/README.md +13 -0
  2. package/dist/build-info.json +15 -0
  3. package/dist/cli/help.js +133 -14
  4. package/dist/cli/run-cli.js +242 -8
  5. package/dist/schemas/archived-flow-manifest.schema.json +112 -0
  6. package/dist/schemas/compatibility.schema.json +26 -0
  7. package/dist/schemas/flow-guidance.schema.json +73 -0
  8. package/dist/schemas/flow-run-index.schema.json +30 -4
  9. package/dist/schemas/global-dashboard-data.schema.json +68 -0
  10. package/dist/schemas/mb-sdlc-review-report.schema.json +242 -0
  11. package/dist/schemas/merge-stage-report.schema.json +61 -1
  12. package/dist/schemas/plan-stage-report.schema.json +255 -0
  13. package/dist/schemas/project-dashboard-data.schema.json +98 -0
  14. package/dist/schemas/project-flow-pack-manifest.schema.json +127 -0
  15. package/dist/schemas/protocol-dashboard-data.schema.json +89 -0
  16. package/dist/schemas/status-report.schema.json +186 -0
  17. package/dist/schemas/version-report.schema.json +22 -0
  18. package/dist/services/build-info.js +114 -0
  19. package/dist/services/canon.js +298 -0
  20. package/dist/services/cleanup.js +14 -1
  21. package/dist/services/config.js +25 -0
  22. package/dist/services/dashboard.js +655 -10
  23. package/dist/services/flow-guidance.js +214 -0
  24. package/dist/services/ids.js +106 -0
  25. package/dist/services/lanes.js +6 -2
  26. package/dist/services/merge-queue.js +68 -4
  27. package/dist/services/merge-worker.js +177 -0
  28. package/dist/services/projects.js +7 -1
  29. package/dist/services/protocols.js +648 -17
  30. package/dist/services/runs.js +98 -21
  31. package/dist/services/schema-validation.js +88 -9
  32. package/dist/services/sessions.js +3 -2
  33. package/dist/services/status.js +306 -0
  34. package/dist/services/version-status.js +284 -0
  35. package/dist/storage/database.js +13 -0
  36. package/dist/storage/paths.js +21 -0
  37. package/package.json +2 -2
@@ -0,0 +1,112 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "dd-flow/archived-flow-manifest@1",
4
+ "title": "Archived flow manifest",
5
+ "description": "Manifest for dd-flow files archived from an active project flow pack during Memory Bank upgrade.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": [
9
+ "schema_id",
10
+ "archive_id",
11
+ "created_at",
12
+ "target_project_root",
13
+ "source_flow_root",
14
+ "archive_root",
15
+ "items"
16
+ ],
17
+ "properties": {
18
+ "schema_id": {
19
+ "const": "dd-flow/archived-flow-manifest@1"
20
+ },
21
+ "archive_id": {
22
+ "type": "string",
23
+ "minLength": 1
24
+ },
25
+ "created_at": {
26
+ "type": "string",
27
+ "minLength": 1
28
+ },
29
+ "target_project_root": {
30
+ "type": "string",
31
+ "minLength": 1
32
+ },
33
+ "source_flow_root": {
34
+ "type": "string",
35
+ "minLength": 1
36
+ },
37
+ "archive_root": {
38
+ "type": "string",
39
+ "minLength": 1
40
+ },
41
+ "items": {
42
+ "type": "array",
43
+ "minItems": 1,
44
+ "items": {
45
+ "$ref": "#/definitions/item"
46
+ }
47
+ },
48
+ "notes": {
49
+ "type": "string"
50
+ }
51
+ },
52
+ "definitions": {
53
+ "item": {
54
+ "type": "object",
55
+ "additionalProperties": false,
56
+ "required": [
57
+ "original_path",
58
+ "archive_path",
59
+ "classification",
60
+ "reason",
61
+ "manual_review_required",
62
+ "replacement"
63
+ ],
64
+ "properties": {
65
+ "original_path": {
66
+ "type": "string",
67
+ "minLength": 1,
68
+ "pattern": "^(?!/)(?!.*(?:^|/)\\.\\.(?:/|$))(?!.*//)[A-Za-z0-9._-]+(?:/[A-Za-z0-9._-]+)*$"
69
+ },
70
+ "archive_path": {
71
+ "type": "string",
72
+ "minLength": 1,
73
+ "pattern": "^(?!/)(?!.*(?:^|/)\\.\\.(?:/|$))(?!.*//)[A-Za-z0-9._-]+(?:/[A-Za-z0-9._-]+)*$"
74
+ },
75
+ "classification": {
76
+ "type": "string",
77
+ "enum": ["canonical_only_obsolete", "old_full_canonical_copy", "project_customization", "unknown_extra", "generated_or_runtime"]
78
+ },
79
+ "reason": {
80
+ "type": "string",
81
+ "minLength": 1
82
+ },
83
+ "manual_review_required": {
84
+ "type": "boolean"
85
+ },
86
+ "replacement": {
87
+ "type": "object",
88
+ "additionalProperties": false,
89
+ "required": ["kind", "hint"],
90
+ "properties": {
91
+ "kind": {
92
+ "type": "string",
93
+ "enum": ["canonical_only_flow", "project_flow_pack_file", "removed", "needs_decision"]
94
+ },
95
+ "hint": {
96
+ "type": "string",
97
+ "minLength": 1
98
+ }
99
+ }
100
+ },
101
+ "source_commit": {
102
+ "type": "string",
103
+ "minLength": 7
104
+ },
105
+ "source_hash": {
106
+ "type": "string",
107
+ "minLength": 1
108
+ }
109
+ }
110
+ }
111
+ }
112
+ }
@@ -0,0 +1,26 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "dd-flow/compatibility@1",
4
+ "title": "dd-flow compatibility manifest",
5
+ "description": "Canonical compatibility map between a Memory Bank release and the dd-flow CLI package required by that release.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": ["schema_id", "memory_bank_version", "dd_flow_cli"],
9
+ "properties": {
10
+ "schema_id": { "const": "dd-flow/compatibility@1" },
11
+ "memory_bank_version": { "type": "string", "minLength": 1 },
12
+ "dd_flow_cli": {
13
+ "type": "object",
14
+ "additionalProperties": false,
15
+ "required": ["package_name", "min_version", "recommended_version", "status_contract", "version_contract", "flow_contract"],
16
+ "properties": {
17
+ "package_name": { "type": "string", "minLength": 1 },
18
+ "min_version": { "type": "string", "minLength": 1 },
19
+ "recommended_version": { "type": "string", "minLength": 1 },
20
+ "status_contract": { "type": "string", "minLength": 1 },
21
+ "version_contract": { "type": "string", "minLength": 1 },
22
+ "flow_contract": { "type": "string", "minLength": 1 }
23
+ }
24
+ }
25
+ }
26
+ }
@@ -0,0 +1,73 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "dd-flow/flow-guidance@1",
4
+ "title": "dd-flow CLI flow guidance block",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": [
8
+ "current_stage",
9
+ "allowed_next_stages",
10
+ "recommended_next_action",
11
+ "recommended_prompt",
12
+ "required_predecessor_evidence",
13
+ "guards",
14
+ "blocked_if_missing"
15
+ ],
16
+ "properties": {
17
+ "current_stage": {
18
+ "type": "string",
19
+ "minLength": 1
20
+ },
21
+ "allowed_next_stages": {
22
+ "type": "array",
23
+ "items": {
24
+ "type": "string",
25
+ "minLength": 1
26
+ }
27
+ },
28
+ "recommended_next_action": {
29
+ "type": "string",
30
+ "minLength": 1
31
+ },
32
+ "recommended_prompt": {
33
+ "type": "string",
34
+ "minLength": 1
35
+ },
36
+ "required_predecessor_evidence": {
37
+ "type": "array",
38
+ "items": {
39
+ "type": "string",
40
+ "minLength": 1
41
+ }
42
+ },
43
+ "guards": {
44
+ "type": "array",
45
+ "items": {
46
+ "type": "object",
47
+ "additionalProperties": false,
48
+ "required": ["id", "status", "summary"],
49
+ "properties": {
50
+ "id": {
51
+ "type": "string",
52
+ "minLength": 1
53
+ },
54
+ "status": {
55
+ "type": "string",
56
+ "enum": ["pass", "fail", "unknown", "not_applicable", "degraded"]
57
+ },
58
+ "summary": {
59
+ "type": "string",
60
+ "minLength": 1
61
+ }
62
+ }
63
+ }
64
+ },
65
+ "blocked_if_missing": {
66
+ "type": "array",
67
+ "items": {
68
+ "type": "string",
69
+ "minLength": 1
70
+ }
71
+ }
72
+ }
73
+ }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-07/schema#",
3
- "$id": "dd-flow/flow-run-index@1",
3
+ "$id": "dd-flow/flow-run-index@2",
4
4
  "title": "dd-flow run index",
5
5
  "description": "Navigation and artifact discovery contract for one concrete dd-flow execution.",
6
6
  "type": "object",
@@ -24,7 +24,7 @@
24
24
  ],
25
25
  "properties": {
26
26
  "schema_id": {
27
- "const": "dd-flow/flow-run-index@1"
27
+ "enum": ["dd-flow/flow-run-index@1", "dd-flow/flow-run-index@2"]
28
28
  },
29
29
  "run_id": {
30
30
  "type": "string",
@@ -36,7 +36,7 @@
36
36
  },
37
37
  "flow_kind": {
38
38
  "type": "string",
39
- "enum": ["coding", "experiment", "mb-init", "mb-upgrade", "mb-audit", "mb-distill", "mb-upgrade-review", "custom"]
39
+ "enum": ["mb_sdlc", "coding", "experiment", "mb-init", "mb-upgrade", "mb-audit", "mb-distill", "mb-upgrade-review", "mb-sdlc-review", "review", "custom"]
40
40
  },
41
41
  "subject": {
42
42
  "type": "object",
@@ -62,7 +62,33 @@
62
62
  "required": ["root", "run_dir"],
63
63
  "properties": {
64
64
  "root": { "type": "string", "minLength": 1 },
65
- "run_dir": { "type": "string", "pattern": "^\\.tasks/dd-flow-runs/RUN-[0-9]{3}-[a-z0-9]+(?:-[a-z0-9]+)*$" }
65
+ "run_dir": { "type": "string", "minLength": 1 }
66
+ }
67
+ },
68
+ "run_home": {
69
+ "type": "object",
70
+ "additionalProperties": false,
71
+ "required": ["storage", "path"],
72
+ "properties": {
73
+ "storage": { "type": "string", "enum": ["dd_flow_home", "workspace_tasks_legacy", "project_projection"] },
74
+ "path": { "type": "string", "minLength": 1 },
75
+ "relative_path": { "type": "string", "minLength": 1 }
76
+ }
77
+ },
78
+ "execution": {
79
+ "type": "object",
80
+ "additionalProperties": false,
81
+ "required": ["project_root", "workspace_root"],
82
+ "properties": {
83
+ "project_root": { "type": "string", "minLength": 1 },
84
+ "workspace_root": { "type": "string", "minLength": 1 }
85
+ }
86
+ },
87
+ "legacy": {
88
+ "type": "object",
89
+ "additionalProperties": false,
90
+ "properties": {
91
+ "project_tasks_run_dir": { "type": ["string", "null"] }
66
92
  }
67
93
  },
68
94
  "stage_runs": {
@@ -0,0 +1,68 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "dd-flow/global-dashboard-data@1",
4
+ "title": "dd-flow global dashboard data",
5
+ "type": "object",
6
+ "additionalProperties": true,
7
+ "required": ["schema_id", "generated_at", "target_language", "page", "metrics", "project_cards", "warnings"],
8
+ "properties": {
9
+ "schema_id": { "const": "dd-flow/global-dashboard-data@1" },
10
+ "generated_at": { "type": "string", "format": "date-time" },
11
+ "target_language": { "type": "string", "minLength": 2 },
12
+ "page": { "$ref": "#/definitions/page" },
13
+ "links": { "type": "object", "additionalProperties": { "$ref": "#/definitions/link" } },
14
+ "metrics": { "type": "array", "items": { "$ref": "#/definitions/metric" } },
15
+ "project_cards": { "type": "array", "items": { "$ref": "#/definitions/card" } },
16
+ "warnings": { "type": "array" }
17
+ },
18
+ "definitions": {
19
+ "page": {
20
+ "type": "object",
21
+ "additionalProperties": true,
22
+ "required": ["kind", "screen_id", "title", "html_path", "json_path"],
23
+ "properties": {
24
+ "kind": { "const": "global" },
25
+ "screen_id": { "const": "SCR-DD-FLOW-GLOBAL-DASHBOARD" },
26
+ "title": { "type": "string", "minLength": 1 },
27
+ "html_path": { "type": "string", "minLength": 1 },
28
+ "json_path": { "type": "string", "minLength": 1 }
29
+ }
30
+ },
31
+ "metric": {
32
+ "type": "object",
33
+ "additionalProperties": true,
34
+ "required": ["id", "label", "value", "status", "source"],
35
+ "properties": {
36
+ "id": { "type": "string", "minLength": 1 },
37
+ "label": { "type": "string", "minLength": 1 },
38
+ "value": { "type": ["number", "null"] },
39
+ "status": { "type": "string", "enum": ["known", "unknown", "degraded", "not_applicable"] },
40
+ "source": { "type": "string", "minLength": 1 }
41
+ }
42
+ },
43
+ "link": {
44
+ "type": "object",
45
+ "additionalProperties": true,
46
+ "required": ["label", "href", "path_kind", "status"],
47
+ "properties": {
48
+ "label": { "type": "string", "minLength": 1 },
49
+ "href": { "type": "string" },
50
+ "path_kind": { "type": "string", "enum": ["absolute", "relative"] },
51
+ "status": { "type": "string", "enum": ["available", "pending", "missing", "not_applicable"] },
52
+ "degraded_reason": { "type": "string" }
53
+ }
54
+ },
55
+ "card": {
56
+ "type": "object",
57
+ "additionalProperties": true,
58
+ "required": ["id", "title", "display_status", "action_level", "metrics"],
59
+ "properties": {
60
+ "id": { "type": "string", "minLength": 1 },
61
+ "title": { "type": "string", "minLength": 1 },
62
+ "display_status": { "type": "string", "minLength": 1 },
63
+ "action_level": { "type": "string", "enum": ["none", "watch", "actionable", "blocked"] },
64
+ "metrics": { "type": "object" }
65
+ }
66
+ }
67
+ }
68
+ }
@@ -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
+ }