@mmerterden/multi-agent-pipeline 13.5.0 → 14.0.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.
- package/CHANGELOG.md +243 -0
- package/README.md +3 -3
- package/docs/features.md +1 -1
- package/install/_common.mjs +73 -0
- package/install/_mcp-register.mjs +70 -31
- package/install/_plugin-skills.mjs +73 -14
- package/install/claude.mjs +28 -4
- package/install/codex.mjs +33 -2
- package/install/copilot.mjs +145 -9
- package/install/index.mjs +10 -6
- package/install/templates/copilot-instructions.md +1 -1
- package/package.json +1 -1
- package/pipeline/agents/code-reviewer.md +58 -1
- package/pipeline/commands/multi-agent/SKILL.md +7 -5
- package/pipeline/commands/multi-agent/analysis/SKILL.md +7 -7
- package/pipeline/commands/multi-agent/analysis-resolve/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/build-optimize/SKILL.md +7 -7
- package/pipeline/commands/multi-agent/channels/SKILL.md +5 -5
- package/pipeline/commands/multi-agent/dev/SKILL.md +23 -18
- package/pipeline/commands/multi-agent/dev-autopilot/SKILL.md +19 -13
- package/pipeline/commands/multi-agent/dev-local/SKILL.md +14 -12
- package/pipeline/commands/multi-agent/dev-local-autopilot/SKILL.md +17 -12
- package/pipeline/commands/multi-agent/garbage-collect/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/help/SKILL.md +4 -4
- package/pipeline/commands/multi-agent/ios-coding-standard/SKILL.md +2 -2
- package/pipeline/commands/multi-agent/local-autopilot/SKILL.md +4 -4
- package/pipeline/commands/multi-agent/resume/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/review/SKILL.md +5 -5
- package/pipeline/commands/multi-agent/scan/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/search/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/setup/SKILL.md +6 -6
- package/pipeline/commands/multi-agent/{finish → ship}/SKILL.md +12 -12
- package/pipeline/commands/multi-agent/testflight-validation/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/update/SKILL.md +5 -2
- package/pipeline/commands/sim-test.md +2 -2
- package/pipeline/lib/credential-store-resolver.sh +16 -0
- package/pipeline/lib/credential-store.sh +47 -4
- package/pipeline/lib/fetch-figma-annotations.sh +26 -28
- package/pipeline/lib/figma-screenshot.sh +28 -39
- package/pipeline/lib/figma-token.sh +63 -0
- package/pipeline/multi-agent-refs/analysis-template.md +1 -1
- package/pipeline/multi-agent-refs/android-guide.md +1 -1
- package/pipeline/multi-agent-refs/channels/issue-comment.md +1 -1
- package/pipeline/multi-agent-refs/component-dispatch.md +2 -2
- package/pipeline/multi-agent-refs/cross-cli-contract.md +4 -4
- package/pipeline/multi-agent-refs/features/dev-critic.md +2 -2
- package/pipeline/multi-agent-refs/features/model-fallback.md +35 -2
- package/pipeline/multi-agent-refs/features/plan-todos.md +1 -1
- package/pipeline/multi-agent-refs/features/repo-map.md +1 -1
- package/pipeline/multi-agent-refs/features/review-multi-repo.md +3 -3
- package/pipeline/multi-agent-refs/features/shadow-git.md +1 -1
- package/pipeline/multi-agent-refs/features/skill-conformance.md +116 -0
- package/pipeline/multi-agent-refs/features/verify-by-test.md +1 -1
- package/pipeline/multi-agent-refs/generate-issue.md +1 -1
- package/pipeline/multi-agent-refs/multi-repo-integration-build.md +1 -1
- package/pipeline/multi-agent-refs/phases/log-format.md +4 -4
- package/pipeline/multi-agent-refs/phases/modes.md +7 -7
- package/pipeline/multi-agent-refs/phases/phase-0-init.md +13 -11
- package/pipeline/multi-agent-refs/phases/phase-1-analysis.md +17 -15
- package/pipeline/multi-agent-refs/phases/phase-2-planning.md +7 -7
- package/pipeline/multi-agent-refs/phases/phase-3-dev.md +28 -13
- package/pipeline/multi-agent-refs/phases/phase-4-review.md +90 -58
- package/pipeline/multi-agent-refs/phases/phase-5-test.md +7 -7
- package/pipeline/multi-agent-refs/phases/phase-6-commit.md +8 -8
- package/pipeline/multi-agent-refs/phases/phase-7-report.md +8 -8
- package/pipeline/multi-agent-refs/phases.md +13 -13
- package/pipeline/multi-agent-refs/progress-contract.md +2 -2
- package/pipeline/multi-agent-refs/rules.md +7 -5
- package/pipeline/multi-agent-refs/swiftui-guide.md +1 -1
- package/pipeline/multi-agent-refs/tracker-contract.md +16 -15
- package/pipeline/preferences-template.json +7 -1
- package/pipeline/rules/figma-pipeline.md +2 -2
- package/pipeline/schemas/agent-state.schema.json +333 -79
- package/pipeline/schemas/criteria-manifest.schema.json +228 -0
- package/pipeline/schemas/migrations/prefs-2.4.0-to-2.5.0.mjs +64 -0
- package/pipeline/schemas/prefs.schema.json +118 -262
- package/pipeline/schemas/reviewer-output.schema.json +48 -3
- package/pipeline/schemas/token-budget.json +34 -10
- package/pipeline/schemas/triage-output.schema.json +112 -27
- package/pipeline/scripts/cost-table.json +7 -4
- package/pipeline/scripts/gc-worktrees.sh +1 -1
- package/pipeline/scripts/gen-mode-dispatch.mjs +6 -6
- package/pipeline/scripts/match-skills.mjs +37 -4
- package/pipeline/scripts/migrate-prefs.mjs +88 -17
- package/pipeline/scripts/phase-tracker.sh +14 -3
- package/pipeline/scripts/pre-commit-check.sh +49 -2
- package/pipeline/scripts/skill-conformance.mjs +960 -0
- package/pipeline/scripts/smoke-schema-validation.sh +17 -4
- package/pipeline/scripts/uninstall.mjs +35 -9
- package/pipeline/scripts/validate-reviewer.mjs +108 -1
- package/pipeline/skills/.skill-manifest.json +1 -1
- package/pipeline/skills/.skills-index.json +36 -9
- package/pipeline/skills/shared/README.md +15 -12
- package/pipeline/skills/shared/core/apple-archive-compliance/SKILL.md +1 -0
- package/pipeline/skills/shared/core/apple-archive-compliance/references/rules.yml +167 -0
- package/pipeline/skills/shared/core/google-play-compliance/SKILL.md +1 -0
- package/pipeline/skills/shared/core/google-play-compliance/references/rules.yml +184 -0
- package/pipeline/skills/shared/core/multi-agent/SKILL.md +10 -10
- package/pipeline/skills/shared/core/multi-agent-analysis/SKILL.md +4 -4
- package/pipeline/skills/shared/core/multi-agent-analysis-resolve/SKILL.md +3 -3
- package/pipeline/skills/shared/core/multi-agent-build-optimize/SKILL.md +2 -2
- package/pipeline/skills/shared/core/multi-agent-create-jira/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-dev/SKILL.md +6 -5
- package/pipeline/skills/shared/core/multi-agent-dev-autopilot/SKILL.md +7 -6
- package/pipeline/skills/shared/core/multi-agent-dev-local/SKILL.md +4 -3
- package/pipeline/skills/shared/core/multi-agent-dev-local-autopilot/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-help/SKILL.md +2 -2
- package/pipeline/skills/shared/core/multi-agent-ios-coding-standard/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-local-autopilot/SKILL.md +4 -4
- package/pipeline/skills/shared/core/multi-agent-review/SKILL.md +5 -5
- package/pipeline/skills/shared/core/multi-agent-scan/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-search/SKILL.md +1 -1
- package/pipeline/skills/shared/core/{multi-agent-finish → multi-agent-ship}/SKILL.md +8 -8
- package/pipeline/skills/shared/external/ios-coding-standard/SKILL.md +44 -5
- package/pipeline/skills/shared/external/ios-coding-standard/modules/_TEMPLATE.yml +82 -0
- package/pipeline/skills/shared/external/ios-coding-standard/references/STANDARD.md +169 -10
- package/pipeline/skills/shared/external/ios-coding-standard/references/lint-local.sh +13 -1
- package/pipeline/skills/shared/external/ios-coding-standard/references/rules.yml +335 -16
- package/pipeline/skills/skills-index.md +11 -8
|
@@ -42,9 +42,16 @@
|
|
|
42
42
|
"type": ["object", "null"],
|
|
43
43
|
"additionalProperties": false,
|
|
44
44
|
"properties": {
|
|
45
|
-
"owner": {
|
|
46
|
-
|
|
47
|
-
|
|
45
|
+
"owner": {
|
|
46
|
+
"type": "string"
|
|
47
|
+
},
|
|
48
|
+
"repo": {
|
|
49
|
+
"type": "string"
|
|
50
|
+
},
|
|
51
|
+
"number": {
|
|
52
|
+
"type": "integer",
|
|
53
|
+
"minimum": 1
|
|
54
|
+
}
|
|
48
55
|
},
|
|
49
56
|
"required": ["owner", "repo", "number"],
|
|
50
57
|
"description": "GitHub issue coordinates if the task originated from GitHub, else null."
|
|
@@ -61,8 +68,14 @@
|
|
|
61
68
|
"type": ["string", "null"],
|
|
62
69
|
"description": "Absolute path to the task worktree. Null in --local mode."
|
|
63
70
|
},
|
|
64
|
-
"branch": {
|
|
65
|
-
|
|
71
|
+
"branch": {
|
|
72
|
+
"type": "string",
|
|
73
|
+
"description": "Working branch for this task."
|
|
74
|
+
},
|
|
75
|
+
"baseBranch": {
|
|
76
|
+
"type": "string",
|
|
77
|
+
"description": "PR target branch (e.g. develop, main)."
|
|
78
|
+
},
|
|
66
79
|
"remoteType": {
|
|
67
80
|
"type": "string",
|
|
68
81
|
"enum": ["github", "bitbucket"],
|
|
@@ -79,8 +92,14 @@
|
|
|
79
92
|
"enum": ["in_progress", "paused", "complete", "failed"],
|
|
80
93
|
"description": "Overall task status."
|
|
81
94
|
},
|
|
82
|
-
"startedAt": {
|
|
83
|
-
|
|
95
|
+
"startedAt": {
|
|
96
|
+
"type": "string",
|
|
97
|
+
"format": "date-time"
|
|
98
|
+
},
|
|
99
|
+
"finishedAt": {
|
|
100
|
+
"type": ["string", "null"],
|
|
101
|
+
"format": "date-time"
|
|
102
|
+
},
|
|
84
103
|
"haltReason": {
|
|
85
104
|
"type": ["string", "null"],
|
|
86
105
|
"description": "Set when a phase halts on a hard error (validator failed twice, no subagent returned, dispatch error past fallback, lock irrecoverable). Format '<phase>:<cause>'. Surfaced to the user and cleared on successful resume. See operations.md 'Halt visibility'."
|
|
@@ -88,7 +107,7 @@
|
|
|
88
107
|
"telemetry": {
|
|
89
108
|
"type": "object",
|
|
90
109
|
"additionalProperties": true,
|
|
91
|
-
"description": "Run telemetry. mcpCalls[] is consumed by smoke-no-mcp-in-dev-phases.sh to enforce the 'no MCP outside analysis' contract - every mcp__* invocation MUST append an entry tagged with the phase it ran in.",
|
|
110
|
+
"description": "Run telemetry. mcpCalls[] is consumed by smoke-no-mcp-in-dev-phases.sh to enforce the 'no MCP outside analysis' contract - every mcp__* invocation MUST append an entry tagged with the phase it ran in. skillCalls[] is Phase 3's self-report of which skills, plugin skills and guides it consulted; Phase 4 Step 1.78 reads it as CORROBORATING evidence only and never computes coverage from it.",
|
|
92
111
|
"properties": {
|
|
93
112
|
"mcpCalls": {
|
|
94
113
|
"type": "array",
|
|
@@ -107,17 +126,56 @@
|
|
|
107
126
|
"maximum": 7,
|
|
108
127
|
"description": "Pipeline phase the call ran in. Only 0 (init) and 1 (analysis) are permitted."
|
|
109
128
|
},
|
|
110
|
-
"timestamp": {
|
|
129
|
+
"timestamp": {
|
|
130
|
+
"type": "string",
|
|
131
|
+
"description": "ISO-8601 time of the call."
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
},
|
|
136
|
+
"skillCalls": {
|
|
137
|
+
"type": "array",
|
|
138
|
+
"description": "One entry per skill / plugin skill / stack guide consulted while writing code. Append at the moment of consultation, not retrospectively. This is a self-report and shares the known weakness of mcpCalls[]: an unrecorded consultation and no consultation are byte-identical here, so Step 1.78 treats the deterministic resolver as primary, defaults ledger.source to 'derived', and flags a declared skill it cannot bind to a changed file. Recording it still earns its keep - it is the only signal that distinguishes 'the dev phase applied X to the wrong files' from 'X was never opened'.",
|
|
139
|
+
"items": {
|
|
140
|
+
"type": "object",
|
|
141
|
+
"required": ["skill", "phase", "targetFiles"],
|
|
142
|
+
"additionalProperties": true,
|
|
143
|
+
"properties": {
|
|
144
|
+
"skill": {
|
|
145
|
+
"type": "string",
|
|
146
|
+
"minLength": 1,
|
|
147
|
+
"description": "Skill name as invoked, e.g. ios-coding-standard, ai-ios-engineering-toolkit:create-component, or a guide path for a stack guide."
|
|
148
|
+
},
|
|
149
|
+
"phase": {
|
|
150
|
+
"type": "integer",
|
|
151
|
+
"minimum": 0,
|
|
152
|
+
"maximum": 7,
|
|
153
|
+
"description": "Phase the consultation happened in. Normally 3."
|
|
154
|
+
},
|
|
155
|
+
"targetFiles": {
|
|
156
|
+
"type": "array",
|
|
157
|
+
"items": {
|
|
158
|
+
"type": "string"
|
|
159
|
+
},
|
|
160
|
+
"description": "Files the skill was actually applied to. REQUIRED: without it coverage cannot be attributed, because a skill applied to the wrong files still reads as 'applied'."
|
|
161
|
+
},
|
|
162
|
+
"timestamp": {
|
|
163
|
+
"type": "string",
|
|
164
|
+
"description": "ISO-8601 time of the consultation."
|
|
165
|
+
}
|
|
111
166
|
}
|
|
112
167
|
}
|
|
113
168
|
}
|
|
114
169
|
}
|
|
115
170
|
},
|
|
116
|
-
"autopilot": {
|
|
171
|
+
"autopilot": {
|
|
172
|
+
"type": "boolean",
|
|
173
|
+
"default": false
|
|
174
|
+
},
|
|
117
175
|
"onlyDevelop": {
|
|
118
176
|
"type": "boolean",
|
|
119
177
|
"default": false,
|
|
120
|
-
"description": "--dev flag - phases 1
|
|
178
|
+
"description": "--dev flag - phases 1 and 2 are skipped. Phase 4 Review runs (v14.0.0+); Phase 5 is skipped only in the autopilot/local variants, which drop the interactive test gate."
|
|
121
179
|
},
|
|
122
180
|
"localMode": {
|
|
123
181
|
"type": "boolean",
|
|
@@ -133,22 +191,62 @@
|
|
|
133
191
|
"type": ["string", "null"],
|
|
134
192
|
"description": "Pipeline mode for this run (e.g. 'dev', 'local', 'design-check'). Absent = full pipeline."
|
|
135
193
|
},
|
|
194
|
+
"figmaAccess": {
|
|
195
|
+
"type": ["object", "null"],
|
|
196
|
+
"additionalProperties": true,
|
|
197
|
+
"description": "Resolved Figma ground-truth tier for this run, established in Phase 0 and read by every phase that consumes or verifies a design reference (see the Figma Access Tier rule in multi-agent-refs/rules.md). Absent when the task references no Figma frame.",
|
|
198
|
+
"properties": {
|
|
199
|
+
"tier": {
|
|
200
|
+
"type": "integer",
|
|
201
|
+
"minimum": 1,
|
|
202
|
+
"maximum": 3,
|
|
203
|
+
"description": "1 = Figma MCP, 2 = Figma REST with the `figma` PAT, 3 = user-attached screenshot."
|
|
204
|
+
},
|
|
205
|
+
"tier1Unavailable": {
|
|
206
|
+
"type": ["string", "null"],
|
|
207
|
+
"enum": ["host", "auth", null],
|
|
208
|
+
"description": "Why Tier 1 was not used, when it was not. 'host' = this CLI does not serve the mcp__claude_ai_Figma__* tools (the normal case on Copilot CLI and Codex CLI, since the installer registers only dev-toolkit) and no re-auth was attempted. 'auth' = the tools were served but authentication failed after one retry. The distinction matters downstream: Tier 2 on Codex is routine, Tier 2 on Claude Code points at a dead figma_mcp token worth surfacing."
|
|
209
|
+
},
|
|
210
|
+
"reviewBlocking": {
|
|
211
|
+
"type": "boolean",
|
|
212
|
+
"default": false,
|
|
213
|
+
"description": "Set with tier 3. Phase 4 holds the run at review_blocking until a human signs off on the component choice."
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
},
|
|
136
217
|
"designCheck": {
|
|
137
218
|
"type": ["object", "null"],
|
|
138
219
|
"additionalProperties": true,
|
|
139
220
|
"description": "State for a /multi-agent:design-check run. Populated in Phase 0 (mock feasibility, scenario inventory, scope), Phase 2 (Figma variants) and Phase 3 (captures, skips, findings).",
|
|
140
221
|
"properties": {
|
|
141
|
-
"module": {
|
|
142
|
-
|
|
222
|
+
"module": {
|
|
223
|
+
"type": "string",
|
|
224
|
+
"description": "Module / submodule path being audited."
|
|
225
|
+
},
|
|
226
|
+
"platform": {
|
|
227
|
+
"type": "string",
|
|
228
|
+
"enum": ["ios", "android"]
|
|
229
|
+
},
|
|
143
230
|
"mock": {
|
|
144
231
|
"type": "object",
|
|
145
232
|
"additionalProperties": true,
|
|
146
233
|
"description": "design_mock_detect result.",
|
|
147
234
|
"properties": {
|
|
148
|
-
"supported": {
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
"
|
|
235
|
+
"supported": {
|
|
236
|
+
"description": "true | false | 'debug-only'"
|
|
237
|
+
},
|
|
238
|
+
"mechanism": {
|
|
239
|
+
"type": ["string", "null"]
|
|
240
|
+
},
|
|
241
|
+
"activation": {
|
|
242
|
+
"type": ["object", "null"]
|
|
243
|
+
},
|
|
244
|
+
"variantsHint": {
|
|
245
|
+
"type": "array",
|
|
246
|
+
"items": {
|
|
247
|
+
"type": "string"
|
|
248
|
+
}
|
|
249
|
+
}
|
|
152
250
|
}
|
|
153
251
|
},
|
|
154
252
|
"inventory": {
|
|
@@ -156,18 +254,31 @@
|
|
|
156
254
|
"additionalProperties": true,
|
|
157
255
|
"description": "design_scenario_inventory result, persisted verbatim. THIS is the audit's target set - Phase 3 iterates it and Phase 4 gates on it. Never re-derive it by reading the repo.",
|
|
158
256
|
"properties": {
|
|
159
|
-
"targetCount": {
|
|
257
|
+
"targetCount": {
|
|
258
|
+
"type": "integer"
|
|
259
|
+
},
|
|
160
260
|
"targets": {
|
|
161
261
|
"type": "array",
|
|
162
|
-
"items": {
|
|
262
|
+
"items": {
|
|
263
|
+
"type": "object",
|
|
264
|
+
"additionalProperties": true
|
|
265
|
+
},
|
|
163
266
|
"description": "{ id, kind, label, screen, driver, evidence } per state driver (launch-arg / scenario-case / code-scenario / fixture / deep-link)."
|
|
164
267
|
},
|
|
165
268
|
"groups": {
|
|
166
269
|
"type": "array",
|
|
167
|
-
"items": {
|
|
270
|
+
"items": {
|
|
271
|
+
"type": "object",
|
|
272
|
+
"additionalProperties": true
|
|
273
|
+
}
|
|
274
|
+
},
|
|
275
|
+
"byKind": {
|
|
276
|
+
"type": "object",
|
|
277
|
+
"additionalProperties": true
|
|
168
278
|
},
|
|
169
|
-
"
|
|
170
|
-
|
|
279
|
+
"truncated": {
|
|
280
|
+
"type": "boolean"
|
|
281
|
+
}
|
|
171
282
|
}
|
|
172
283
|
},
|
|
173
284
|
"scope": {
|
|
@@ -179,23 +290,36 @@
|
|
|
179
290
|
"type": ["string", "null"],
|
|
180
291
|
"description": "Raw $ARGUMENTS as given (empty = whole module, '--resume' = remainder of the last run)."
|
|
181
292
|
},
|
|
182
|
-
"targetIds": {
|
|
293
|
+
"targetIds": {
|
|
294
|
+
"type": "array",
|
|
295
|
+
"items": {
|
|
296
|
+
"type": "string"
|
|
297
|
+
}
|
|
298
|
+
},
|
|
183
299
|
"resumedFrom": {
|
|
184
300
|
"type": ["string", "null"],
|
|
185
301
|
"description": "Report dir of the run this scope resumes, when --resume was used."
|
|
186
302
|
}
|
|
187
303
|
}
|
|
188
304
|
},
|
|
189
|
-
"figmaUrl": {
|
|
305
|
+
"figmaUrl": {
|
|
306
|
+
"type": ["string", "null"]
|
|
307
|
+
},
|
|
190
308
|
"variants": {
|
|
191
309
|
"type": "array",
|
|
192
310
|
"description": "Mapped variants with their Figma spec, capture, and findings.",
|
|
193
|
-
"items": {
|
|
311
|
+
"items": {
|
|
312
|
+
"type": "object",
|
|
313
|
+
"additionalProperties": true
|
|
314
|
+
}
|
|
194
315
|
},
|
|
195
316
|
"captured": {
|
|
196
317
|
"type": "array",
|
|
197
318
|
"description": "Every capture taken, appended and persisted as it happens so a dying run is resumable. One entry per screenshot, keyed to the target that produced it ('<targetId>', or '<targetId>#<sub-label>' for tap-reachable sub-states).",
|
|
198
|
-
"items": {
|
|
319
|
+
"items": {
|
|
320
|
+
"type": "object",
|
|
321
|
+
"additionalProperties": true
|
|
322
|
+
}
|
|
199
323
|
},
|
|
200
324
|
"skipped": {
|
|
201
325
|
"type": "array",
|
|
@@ -205,9 +329,16 @@
|
|
|
205
329
|
"additionalProperties": true,
|
|
206
330
|
"required": ["id", "reason"],
|
|
207
331
|
"properties": {
|
|
208
|
-
"id": {
|
|
209
|
-
|
|
210
|
-
|
|
332
|
+
"id": {
|
|
333
|
+
"type": "string"
|
|
334
|
+
},
|
|
335
|
+
"group": {
|
|
336
|
+
"type": ["string", "null"]
|
|
337
|
+
},
|
|
338
|
+
"reason": {
|
|
339
|
+
"type": "string",
|
|
340
|
+
"minLength": 1
|
|
341
|
+
}
|
|
211
342
|
}
|
|
212
343
|
}
|
|
213
344
|
},
|
|
@@ -216,13 +347,31 @@
|
|
|
216
347
|
"additionalProperties": true,
|
|
217
348
|
"description": "design_report coverage verdict for this run. gate='fail' means the run is INCOMPLETE and must be reported as such, with the unaccounted ids and the --resume command.",
|
|
218
349
|
"properties": {
|
|
219
|
-
"gate": {
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
"
|
|
224
|
-
|
|
225
|
-
|
|
350
|
+
"gate": {
|
|
351
|
+
"type": "string",
|
|
352
|
+
"enum": ["pass", "fail"]
|
|
353
|
+
},
|
|
354
|
+
"audited": {
|
|
355
|
+
"type": "integer"
|
|
356
|
+
},
|
|
357
|
+
"target": {
|
|
358
|
+
"type": "integer"
|
|
359
|
+
},
|
|
360
|
+
"pct": {
|
|
361
|
+
"type": "number"
|
|
362
|
+
},
|
|
363
|
+
"skippedWithReason": {
|
|
364
|
+
"type": "integer"
|
|
365
|
+
},
|
|
366
|
+
"unaccounted": {
|
|
367
|
+
"type": "integer"
|
|
368
|
+
},
|
|
369
|
+
"unaccountedIds": {
|
|
370
|
+
"type": "array",
|
|
371
|
+
"items": {
|
|
372
|
+
"type": "string"
|
|
373
|
+
}
|
|
374
|
+
}
|
|
226
375
|
}
|
|
227
376
|
},
|
|
228
377
|
"reportDir": {
|
|
@@ -236,8 +385,13 @@
|
|
|
236
385
|
"additionalProperties": false,
|
|
237
386
|
"required": ["name", "email"],
|
|
238
387
|
"properties": {
|
|
239
|
-
"name": {
|
|
240
|
-
|
|
388
|
+
"name": {
|
|
389
|
+
"type": "string"
|
|
390
|
+
},
|
|
391
|
+
"email": {
|
|
392
|
+
"type": "string",
|
|
393
|
+
"format": "email"
|
|
394
|
+
},
|
|
241
395
|
"username": {
|
|
242
396
|
"type": "string",
|
|
243
397
|
"description": "SCM username (GitHub/Bitbucket). Used to filter out PR author from reviewer list."
|
|
@@ -256,20 +410,36 @@
|
|
|
256
410
|
"type": "string",
|
|
257
411
|
"enum": ["pending", "in_progress", "done", "skipped", "failed"]
|
|
258
412
|
},
|
|
259
|
-
"startedAt": {
|
|
260
|
-
|
|
261
|
-
|
|
413
|
+
"startedAt": {
|
|
414
|
+
"type": "string",
|
|
415
|
+
"format": "date-time"
|
|
416
|
+
},
|
|
417
|
+
"finishedAt": {
|
|
418
|
+
"type": "string",
|
|
419
|
+
"format": "date-time"
|
|
420
|
+
},
|
|
421
|
+
"model": {
|
|
422
|
+
"type": "string"
|
|
423
|
+
},
|
|
262
424
|
"files": {
|
|
263
425
|
"type": "array",
|
|
264
|
-
"items": {
|
|
426
|
+
"items": {
|
|
427
|
+
"type": "string"
|
|
428
|
+
},
|
|
265
429
|
"description": "Files produced or modified by this phase. Used for semantic revert."
|
|
266
430
|
},
|
|
267
|
-
"retryCount": {
|
|
431
|
+
"retryCount": {
|
|
432
|
+
"type": "integer",
|
|
433
|
+
"minimum": 0,
|
|
434
|
+
"maximum": 3
|
|
435
|
+
},
|
|
268
436
|
"subStep": {
|
|
269
437
|
"type": "string",
|
|
270
438
|
"description": "Sub-step checkpoint for long phases (3, 7) so resume re-does only the unfinished tail instead of the whole phase. Short token, e.g. 'red'|'green'|'build'|'pr-opened'|'confluence-synced'. See operations.md 'Sub-step checkpoints'."
|
|
271
439
|
},
|
|
272
|
-
"notes": {
|
|
440
|
+
"notes": {
|
|
441
|
+
"type": "string"
|
|
442
|
+
},
|
|
273
443
|
"clarificationRounds": {
|
|
274
444
|
"type": "integer",
|
|
275
445
|
"minimum": 0,
|
|
@@ -278,12 +448,16 @@
|
|
|
278
448
|
},
|
|
279
449
|
"clarificationQuestions": {
|
|
280
450
|
"type": "array",
|
|
281
|
-
"items": {
|
|
451
|
+
"items": {
|
|
452
|
+
"type": "string"
|
|
453
|
+
},
|
|
282
454
|
"description": "v5.3.0 Phase 2 - ordered log of questions the orchestrator asked the user when the issue description was ambiguous (missing acceptance criteria, vague language, missing Figma/endpoint links, unclear scope vs. parent story)."
|
|
283
455
|
},
|
|
284
456
|
"clarificationAnswers": {
|
|
285
457
|
"type": "array",
|
|
286
|
-
"items": {
|
|
458
|
+
"items": {
|
|
459
|
+
"type": "string"
|
|
460
|
+
},
|
|
287
461
|
"description": "v5.3.0 Phase 2 - ordered log of user answers aligned with clarificationQuestions (same length)."
|
|
288
462
|
},
|
|
289
463
|
"planIterations": {
|
|
@@ -298,7 +472,9 @@
|
|
|
298
472
|
},
|
|
299
473
|
"planEditRequests": {
|
|
300
474
|
"type": "array",
|
|
301
|
-
"items": {
|
|
475
|
+
"items": {
|
|
476
|
+
"type": "string"
|
|
477
|
+
},
|
|
302
478
|
"description": "v5.3.0 Phase 2 - free-text edit instructions the user typed between plan renders. Preserved verbatim for audit; the planning model (Fable top tier) parses them conversationally to revise the plan."
|
|
303
479
|
}
|
|
304
480
|
}
|
|
@@ -312,14 +488,35 @@
|
|
|
312
488
|
"description": "Per-iteration review record. It accretes fields across phases - summary counts in Phase 4, plus the merged reviewers[] and triage{} detail and validatorResult that run-metrics.mjs and Phase 7 read - so extra keys are allowed.",
|
|
313
489
|
"additionalProperties": true,
|
|
314
490
|
"properties": {
|
|
315
|
-
"iteration": {
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
"
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
491
|
+
"iteration": {
|
|
492
|
+
"type": "integer",
|
|
493
|
+
"minimum": 1
|
|
494
|
+
},
|
|
495
|
+
"blocking": {
|
|
496
|
+
"type": "integer",
|
|
497
|
+
"minimum": 0
|
|
498
|
+
},
|
|
499
|
+
"important": {
|
|
500
|
+
"type": "integer",
|
|
501
|
+
"minimum": 0
|
|
502
|
+
},
|
|
503
|
+
"suggestion": {
|
|
504
|
+
"type": "integer",
|
|
505
|
+
"minimum": 0
|
|
506
|
+
},
|
|
507
|
+
"decision": {
|
|
508
|
+
"type": "string",
|
|
509
|
+
"enum": ["fix", "accept", "escalate"]
|
|
510
|
+
},
|
|
511
|
+
"reviewers": {
|
|
512
|
+
"type": "array"
|
|
513
|
+
},
|
|
514
|
+
"triage": {
|
|
515
|
+
"type": "object"
|
|
516
|
+
},
|
|
517
|
+
"accepted": {
|
|
518
|
+
"type": "array"
|
|
519
|
+
},
|
|
323
520
|
"validatorResult": {}
|
|
324
521
|
}
|
|
325
522
|
}
|
|
@@ -336,17 +533,27 @@
|
|
|
336
533
|
"type": ["object", "null"],
|
|
337
534
|
"additionalProperties": false,
|
|
338
535
|
"properties": {
|
|
339
|
-
"number": {
|
|
340
|
-
|
|
536
|
+
"number": {
|
|
537
|
+
"type": "integer",
|
|
538
|
+
"minimum": 1
|
|
539
|
+
},
|
|
540
|
+
"url": {
|
|
541
|
+
"type": "string",
|
|
542
|
+
"format": "uri"
|
|
543
|
+
},
|
|
341
544
|
"version": {
|
|
342
545
|
"type": "integer",
|
|
343
546
|
"minimum": 0,
|
|
344
547
|
"description": "Bitbucket PR version - must increment by 1 per PUT."
|
|
345
548
|
},
|
|
346
|
-
"draft": {
|
|
549
|
+
"draft": {
|
|
550
|
+
"type": "boolean"
|
|
551
|
+
},
|
|
347
552
|
"reviewers": {
|
|
348
553
|
"type": "array",
|
|
349
|
-
"items": {
|
|
554
|
+
"items": {
|
|
555
|
+
"type": "string"
|
|
556
|
+
}
|
|
350
557
|
}
|
|
351
558
|
}
|
|
352
559
|
},
|
|
@@ -354,8 +561,13 @@
|
|
|
354
561
|
"type": ["object", "null"],
|
|
355
562
|
"additionalProperties": false,
|
|
356
563
|
"properties": {
|
|
357
|
-
"sha": {
|
|
358
|
-
|
|
564
|
+
"sha": {
|
|
565
|
+
"type": "string",
|
|
566
|
+
"minLength": 7
|
|
567
|
+
},
|
|
568
|
+
"message": {
|
|
569
|
+
"type": "string"
|
|
570
|
+
}
|
|
359
571
|
}
|
|
360
572
|
},
|
|
361
573
|
"projects": {
|
|
@@ -368,11 +580,21 @@
|
|
|
368
580
|
"additionalProperties": false,
|
|
369
581
|
"required": ["project", "projectRoot", "branch", "baseBranch", "identity"],
|
|
370
582
|
"properties": {
|
|
371
|
-
"project": {
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
"
|
|
375
|
-
|
|
583
|
+
"project": {
|
|
584
|
+
"type": "string"
|
|
585
|
+
},
|
|
586
|
+
"projectRoot": {
|
|
587
|
+
"type": "string"
|
|
588
|
+
},
|
|
589
|
+
"worktreePath": {
|
|
590
|
+
"type": ["string", "null"]
|
|
591
|
+
},
|
|
592
|
+
"branch": {
|
|
593
|
+
"type": "string"
|
|
594
|
+
},
|
|
595
|
+
"baseBranch": {
|
|
596
|
+
"type": "string"
|
|
597
|
+
},
|
|
376
598
|
"remoteType": {
|
|
377
599
|
"type": "string",
|
|
378
600
|
"enum": ["github", "bitbucket", "gitlab", "generic-git"]
|
|
@@ -382,9 +604,16 @@
|
|
|
382
604
|
"additionalProperties": false,
|
|
383
605
|
"required": ["name", "email"],
|
|
384
606
|
"properties": {
|
|
385
|
-
"name": {
|
|
386
|
-
|
|
387
|
-
|
|
607
|
+
"name": {
|
|
608
|
+
"type": "string"
|
|
609
|
+
},
|
|
610
|
+
"email": {
|
|
611
|
+
"type": "string",
|
|
612
|
+
"format": "email"
|
|
613
|
+
},
|
|
614
|
+
"username": {
|
|
615
|
+
"type": "string"
|
|
616
|
+
}
|
|
388
617
|
}
|
|
389
618
|
},
|
|
390
619
|
"platform": {
|
|
@@ -396,17 +625,30 @@
|
|
|
396
625
|
"type": ["object", "null"],
|
|
397
626
|
"additionalProperties": false,
|
|
398
627
|
"properties": {
|
|
399
|
-
"sha": {
|
|
400
|
-
|
|
628
|
+
"sha": {
|
|
629
|
+
"type": "string",
|
|
630
|
+
"minLength": 7
|
|
631
|
+
},
|
|
632
|
+
"message": {
|
|
633
|
+
"type": "string"
|
|
634
|
+
}
|
|
401
635
|
}
|
|
402
636
|
},
|
|
403
637
|
"pr": {
|
|
404
638
|
"type": ["object", "null"],
|
|
405
639
|
"additionalProperties": false,
|
|
406
640
|
"properties": {
|
|
407
|
-
"number": {
|
|
408
|
-
|
|
409
|
-
|
|
641
|
+
"number": {
|
|
642
|
+
"type": "integer",
|
|
643
|
+
"minimum": 1
|
|
644
|
+
},
|
|
645
|
+
"url": {
|
|
646
|
+
"type": "string",
|
|
647
|
+
"format": "uri"
|
|
648
|
+
},
|
|
649
|
+
"draft": {
|
|
650
|
+
"type": "boolean"
|
|
651
|
+
}
|
|
410
652
|
}
|
|
411
653
|
},
|
|
412
654
|
"pushAttempts": {
|
|
@@ -417,14 +659,26 @@
|
|
|
417
659
|
"buildStatus": {
|
|
418
660
|
"description": "Latest Phase 3 build outcome for this repo. A string in early phases ('pending'/'green'/'passed'/'failed') or null before any attempt; once Phase 3 runs a build it becomes a {ok, attempts, lastError} object (see phase-3-dev.md). run-metrics.mjs reads both the string and object forms.",
|
|
419
661
|
"anyOf": [
|
|
420
|
-
{
|
|
421
|
-
|
|
662
|
+
{
|
|
663
|
+
"type": "string",
|
|
664
|
+
"enum": ["pending", "passed", "failed", "green"]
|
|
665
|
+
},
|
|
666
|
+
{
|
|
667
|
+
"type": "null"
|
|
668
|
+
},
|
|
422
669
|
{
|
|
423
670
|
"type": "object",
|
|
424
671
|
"properties": {
|
|
425
|
-
"ok": {
|
|
426
|
-
|
|
427
|
-
|
|
672
|
+
"ok": {
|
|
673
|
+
"type": "boolean"
|
|
674
|
+
},
|
|
675
|
+
"attempts": {
|
|
676
|
+
"type": "integer",
|
|
677
|
+
"minimum": 0
|
|
678
|
+
},
|
|
679
|
+
"lastError": {
|
|
680
|
+
"type": ["string", "null"]
|
|
681
|
+
}
|
|
428
682
|
}
|
|
429
683
|
}
|
|
430
684
|
]
|