@mmerterden/multi-agent-pipeline 13.5.1 → 14.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.
- package/CHANGELOG.md +317 -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/log/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/resume/SKILL.md +2 -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/status/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/sync/SKILL.md +2 -2
- 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/stack-skill-routing.md +72 -0
- package/pipeline/multi-agent-refs/features/verify-by-test.md +1 -1
- package/pipeline/multi-agent-refs/features/worktree-finalize.md +66 -0
- 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 +29 -14
- 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 +25 -12
- package/pipeline/multi-agent-refs/phases/phase-7-report.md +12 -9
- 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 +9 -2
- package/pipeline/rules/figma-pipeline.md +2 -2
- package/pipeline/schemas/agent-state.schema.json +346 -79
- package/pipeline/schemas/criteria-manifest.schema.json +398 -0
- package/pipeline/schemas/migrations/prefs-2.4.0-to-2.5.0.mjs +64 -0
- package/pipeline/schemas/prefs.schema.json +123 -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 +3 -2
- package/pipeline/scripts/gen-mode-dispatch.mjs +6 -6
- package/pipeline/scripts/match-skills.mjs +37 -4
- package/pipeline/scripts/migrate-prefs.mjs +89 -17
- package/pipeline/scripts/phase-tracker.sh +14 -3
- package/pipeline/scripts/pre-commit-check.sh +49 -2
- package/pipeline/scripts/render-work-summary.sh +51 -3
- package/pipeline/scripts/skill-conformance.mjs +970 -0
- package/pipeline/scripts/smoke-schema-validation.sh +17 -4
- package/pipeline/scripts/test-integrity-gate.mjs +10 -2
- package/pipeline/scripts/uninstall.mjs +35 -9
- package/pipeline/scripts/validate-reviewer.mjs +108 -1
- package/pipeline/scripts/worktree-finalize.sh +299 -0
- 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/core/multi-agent-sync/SKILL.md +2 -2
- 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/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,60 @@
|
|
|
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
|
+
},
|
|
166
|
+
"routedBy": {
|
|
167
|
+
"type": "string",
|
|
168
|
+
"description": "Set when a stack toolkit's own index skill chose this skill, as '<toolkit>:index@<version>'. Recorded so a finding can be traced to the index version that selected it - the skill set differs between plugin versions. Phase 4 Step 1.78 surfaces these separately in the manifest ledger; it does NOT grant them extra trust, because the resolver stays primary either way."
|
|
169
|
+
}
|
|
111
170
|
}
|
|
112
171
|
}
|
|
113
172
|
}
|
|
114
173
|
}
|
|
115
174
|
},
|
|
116
|
-
"autopilot": {
|
|
175
|
+
"autopilot": {
|
|
176
|
+
"type": "boolean",
|
|
177
|
+
"default": false
|
|
178
|
+
},
|
|
117
179
|
"onlyDevelop": {
|
|
118
180
|
"type": "boolean",
|
|
119
181
|
"default": false,
|
|
120
|
-
"description": "--dev flag - phases 1
|
|
182
|
+
"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
183
|
},
|
|
122
184
|
"localMode": {
|
|
123
185
|
"type": "boolean",
|
|
@@ -133,22 +195,62 @@
|
|
|
133
195
|
"type": ["string", "null"],
|
|
134
196
|
"description": "Pipeline mode for this run (e.g. 'dev', 'local', 'design-check'). Absent = full pipeline."
|
|
135
197
|
},
|
|
198
|
+
"figmaAccess": {
|
|
199
|
+
"type": ["object", "null"],
|
|
200
|
+
"additionalProperties": true,
|
|
201
|
+
"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.",
|
|
202
|
+
"properties": {
|
|
203
|
+
"tier": {
|
|
204
|
+
"type": "integer",
|
|
205
|
+
"minimum": 1,
|
|
206
|
+
"maximum": 3,
|
|
207
|
+
"description": "1 = Figma MCP, 2 = Figma REST with the `figma` PAT, 3 = user-attached screenshot."
|
|
208
|
+
},
|
|
209
|
+
"tier1Unavailable": {
|
|
210
|
+
"type": ["string", "null"],
|
|
211
|
+
"enum": ["host", "auth", null],
|
|
212
|
+
"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."
|
|
213
|
+
},
|
|
214
|
+
"reviewBlocking": {
|
|
215
|
+
"type": "boolean",
|
|
216
|
+
"default": false,
|
|
217
|
+
"description": "Set with tier 3. Phase 4 holds the run at review_blocking until a human signs off on the component choice."
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
},
|
|
136
221
|
"designCheck": {
|
|
137
222
|
"type": ["object", "null"],
|
|
138
223
|
"additionalProperties": true,
|
|
139
224
|
"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
225
|
"properties": {
|
|
141
|
-
"module": {
|
|
142
|
-
|
|
226
|
+
"module": {
|
|
227
|
+
"type": "string",
|
|
228
|
+
"description": "Module / submodule path being audited."
|
|
229
|
+
},
|
|
230
|
+
"platform": {
|
|
231
|
+
"type": "string",
|
|
232
|
+
"enum": ["ios", "android"]
|
|
233
|
+
},
|
|
143
234
|
"mock": {
|
|
144
235
|
"type": "object",
|
|
145
236
|
"additionalProperties": true,
|
|
146
237
|
"description": "design_mock_detect result.",
|
|
147
238
|
"properties": {
|
|
148
|
-
"supported": {
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
"
|
|
239
|
+
"supported": {
|
|
240
|
+
"description": "true | false | 'debug-only'"
|
|
241
|
+
},
|
|
242
|
+
"mechanism": {
|
|
243
|
+
"type": ["string", "null"]
|
|
244
|
+
},
|
|
245
|
+
"activation": {
|
|
246
|
+
"type": ["object", "null"]
|
|
247
|
+
},
|
|
248
|
+
"variantsHint": {
|
|
249
|
+
"type": "array",
|
|
250
|
+
"items": {
|
|
251
|
+
"type": "string"
|
|
252
|
+
}
|
|
253
|
+
}
|
|
152
254
|
}
|
|
153
255
|
},
|
|
154
256
|
"inventory": {
|
|
@@ -156,18 +258,31 @@
|
|
|
156
258
|
"additionalProperties": true,
|
|
157
259
|
"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
260
|
"properties": {
|
|
159
|
-
"targetCount": {
|
|
261
|
+
"targetCount": {
|
|
262
|
+
"type": "integer"
|
|
263
|
+
},
|
|
160
264
|
"targets": {
|
|
161
265
|
"type": "array",
|
|
162
|
-
"items": {
|
|
266
|
+
"items": {
|
|
267
|
+
"type": "object",
|
|
268
|
+
"additionalProperties": true
|
|
269
|
+
},
|
|
163
270
|
"description": "{ id, kind, label, screen, driver, evidence } per state driver (launch-arg / scenario-case / code-scenario / fixture / deep-link)."
|
|
164
271
|
},
|
|
165
272
|
"groups": {
|
|
166
273
|
"type": "array",
|
|
167
|
-
"items": {
|
|
274
|
+
"items": {
|
|
275
|
+
"type": "object",
|
|
276
|
+
"additionalProperties": true
|
|
277
|
+
}
|
|
278
|
+
},
|
|
279
|
+
"byKind": {
|
|
280
|
+
"type": "object",
|
|
281
|
+
"additionalProperties": true
|
|
168
282
|
},
|
|
169
|
-
"
|
|
170
|
-
|
|
283
|
+
"truncated": {
|
|
284
|
+
"type": "boolean"
|
|
285
|
+
}
|
|
171
286
|
}
|
|
172
287
|
},
|
|
173
288
|
"scope": {
|
|
@@ -179,23 +294,36 @@
|
|
|
179
294
|
"type": ["string", "null"],
|
|
180
295
|
"description": "Raw $ARGUMENTS as given (empty = whole module, '--resume' = remainder of the last run)."
|
|
181
296
|
},
|
|
182
|
-
"targetIds": {
|
|
297
|
+
"targetIds": {
|
|
298
|
+
"type": "array",
|
|
299
|
+
"items": {
|
|
300
|
+
"type": "string"
|
|
301
|
+
}
|
|
302
|
+
},
|
|
183
303
|
"resumedFrom": {
|
|
184
304
|
"type": ["string", "null"],
|
|
185
305
|
"description": "Report dir of the run this scope resumes, when --resume was used."
|
|
186
306
|
}
|
|
187
307
|
}
|
|
188
308
|
},
|
|
189
|
-
"figmaUrl": {
|
|
309
|
+
"figmaUrl": {
|
|
310
|
+
"type": ["string", "null"]
|
|
311
|
+
},
|
|
190
312
|
"variants": {
|
|
191
313
|
"type": "array",
|
|
192
314
|
"description": "Mapped variants with their Figma spec, capture, and findings.",
|
|
193
|
-
"items": {
|
|
315
|
+
"items": {
|
|
316
|
+
"type": "object",
|
|
317
|
+
"additionalProperties": true
|
|
318
|
+
}
|
|
194
319
|
},
|
|
195
320
|
"captured": {
|
|
196
321
|
"type": "array",
|
|
197
322
|
"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": {
|
|
323
|
+
"items": {
|
|
324
|
+
"type": "object",
|
|
325
|
+
"additionalProperties": true
|
|
326
|
+
}
|
|
199
327
|
},
|
|
200
328
|
"skipped": {
|
|
201
329
|
"type": "array",
|
|
@@ -205,9 +333,16 @@
|
|
|
205
333
|
"additionalProperties": true,
|
|
206
334
|
"required": ["id", "reason"],
|
|
207
335
|
"properties": {
|
|
208
|
-
"id": {
|
|
209
|
-
|
|
210
|
-
|
|
336
|
+
"id": {
|
|
337
|
+
"type": "string"
|
|
338
|
+
},
|
|
339
|
+
"group": {
|
|
340
|
+
"type": ["string", "null"]
|
|
341
|
+
},
|
|
342
|
+
"reason": {
|
|
343
|
+
"type": "string",
|
|
344
|
+
"minLength": 1
|
|
345
|
+
}
|
|
211
346
|
}
|
|
212
347
|
}
|
|
213
348
|
},
|
|
@@ -216,13 +351,31 @@
|
|
|
216
351
|
"additionalProperties": true,
|
|
217
352
|
"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
353
|
"properties": {
|
|
219
|
-
"gate": {
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
"
|
|
224
|
-
|
|
225
|
-
|
|
354
|
+
"gate": {
|
|
355
|
+
"type": "string",
|
|
356
|
+
"enum": ["pass", "fail"]
|
|
357
|
+
},
|
|
358
|
+
"audited": {
|
|
359
|
+
"type": "integer"
|
|
360
|
+
},
|
|
361
|
+
"target": {
|
|
362
|
+
"type": "integer"
|
|
363
|
+
},
|
|
364
|
+
"pct": {
|
|
365
|
+
"type": "number"
|
|
366
|
+
},
|
|
367
|
+
"skippedWithReason": {
|
|
368
|
+
"type": "integer"
|
|
369
|
+
},
|
|
370
|
+
"unaccounted": {
|
|
371
|
+
"type": "integer"
|
|
372
|
+
},
|
|
373
|
+
"unaccountedIds": {
|
|
374
|
+
"type": "array",
|
|
375
|
+
"items": {
|
|
376
|
+
"type": "string"
|
|
377
|
+
}
|
|
378
|
+
}
|
|
226
379
|
}
|
|
227
380
|
},
|
|
228
381
|
"reportDir": {
|
|
@@ -236,8 +389,13 @@
|
|
|
236
389
|
"additionalProperties": false,
|
|
237
390
|
"required": ["name", "email"],
|
|
238
391
|
"properties": {
|
|
239
|
-
"name": {
|
|
240
|
-
|
|
392
|
+
"name": {
|
|
393
|
+
"type": "string"
|
|
394
|
+
},
|
|
395
|
+
"email": {
|
|
396
|
+
"type": "string",
|
|
397
|
+
"format": "email"
|
|
398
|
+
},
|
|
241
399
|
"username": {
|
|
242
400
|
"type": "string",
|
|
243
401
|
"description": "SCM username (GitHub/Bitbucket). Used to filter out PR author from reviewer list."
|
|
@@ -256,20 +414,36 @@
|
|
|
256
414
|
"type": "string",
|
|
257
415
|
"enum": ["pending", "in_progress", "done", "skipped", "failed"]
|
|
258
416
|
},
|
|
259
|
-
"startedAt": {
|
|
260
|
-
|
|
261
|
-
|
|
417
|
+
"startedAt": {
|
|
418
|
+
"type": "string",
|
|
419
|
+
"format": "date-time"
|
|
420
|
+
},
|
|
421
|
+
"finishedAt": {
|
|
422
|
+
"type": "string",
|
|
423
|
+
"format": "date-time"
|
|
424
|
+
},
|
|
425
|
+
"model": {
|
|
426
|
+
"type": "string"
|
|
427
|
+
},
|
|
262
428
|
"files": {
|
|
263
429
|
"type": "array",
|
|
264
|
-
"items": {
|
|
430
|
+
"items": {
|
|
431
|
+
"type": "string"
|
|
432
|
+
},
|
|
265
433
|
"description": "Files produced or modified by this phase. Used for semantic revert."
|
|
266
434
|
},
|
|
267
|
-
"retryCount": {
|
|
435
|
+
"retryCount": {
|
|
436
|
+
"type": "integer",
|
|
437
|
+
"minimum": 0,
|
|
438
|
+
"maximum": 3
|
|
439
|
+
},
|
|
268
440
|
"subStep": {
|
|
269
441
|
"type": "string",
|
|
270
442
|
"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
443
|
},
|
|
272
|
-
"notes": {
|
|
444
|
+
"notes": {
|
|
445
|
+
"type": "string"
|
|
446
|
+
},
|
|
273
447
|
"clarificationRounds": {
|
|
274
448
|
"type": "integer",
|
|
275
449
|
"minimum": 0,
|
|
@@ -278,12 +452,16 @@
|
|
|
278
452
|
},
|
|
279
453
|
"clarificationQuestions": {
|
|
280
454
|
"type": "array",
|
|
281
|
-
"items": {
|
|
455
|
+
"items": {
|
|
456
|
+
"type": "string"
|
|
457
|
+
},
|
|
282
458
|
"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
459
|
},
|
|
284
460
|
"clarificationAnswers": {
|
|
285
461
|
"type": "array",
|
|
286
|
-
"items": {
|
|
462
|
+
"items": {
|
|
463
|
+
"type": "string"
|
|
464
|
+
},
|
|
287
465
|
"description": "v5.3.0 Phase 2 - ordered log of user answers aligned with clarificationQuestions (same length)."
|
|
288
466
|
},
|
|
289
467
|
"planIterations": {
|
|
@@ -298,7 +476,9 @@
|
|
|
298
476
|
},
|
|
299
477
|
"planEditRequests": {
|
|
300
478
|
"type": "array",
|
|
301
|
-
"items": {
|
|
479
|
+
"items": {
|
|
480
|
+
"type": "string"
|
|
481
|
+
},
|
|
302
482
|
"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
483
|
}
|
|
304
484
|
}
|
|
@@ -312,14 +492,35 @@
|
|
|
312
492
|
"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
493
|
"additionalProperties": true,
|
|
314
494
|
"properties": {
|
|
315
|
-
"iteration": {
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
"
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
495
|
+
"iteration": {
|
|
496
|
+
"type": "integer",
|
|
497
|
+
"minimum": 1
|
|
498
|
+
},
|
|
499
|
+
"blocking": {
|
|
500
|
+
"type": "integer",
|
|
501
|
+
"minimum": 0
|
|
502
|
+
},
|
|
503
|
+
"important": {
|
|
504
|
+
"type": "integer",
|
|
505
|
+
"minimum": 0
|
|
506
|
+
},
|
|
507
|
+
"suggestion": {
|
|
508
|
+
"type": "integer",
|
|
509
|
+
"minimum": 0
|
|
510
|
+
},
|
|
511
|
+
"decision": {
|
|
512
|
+
"type": "string",
|
|
513
|
+
"enum": ["fix", "accept", "escalate"]
|
|
514
|
+
},
|
|
515
|
+
"reviewers": {
|
|
516
|
+
"type": "array"
|
|
517
|
+
},
|
|
518
|
+
"triage": {
|
|
519
|
+
"type": "object"
|
|
520
|
+
},
|
|
521
|
+
"accepted": {
|
|
522
|
+
"type": "array"
|
|
523
|
+
},
|
|
323
524
|
"validatorResult": {}
|
|
324
525
|
}
|
|
325
526
|
}
|
|
@@ -336,17 +537,27 @@
|
|
|
336
537
|
"type": ["object", "null"],
|
|
337
538
|
"additionalProperties": false,
|
|
338
539
|
"properties": {
|
|
339
|
-
"number": {
|
|
340
|
-
|
|
540
|
+
"number": {
|
|
541
|
+
"type": "integer",
|
|
542
|
+
"minimum": 1
|
|
543
|
+
},
|
|
544
|
+
"url": {
|
|
545
|
+
"type": "string",
|
|
546
|
+
"format": "uri"
|
|
547
|
+
},
|
|
341
548
|
"version": {
|
|
342
549
|
"type": "integer",
|
|
343
550
|
"minimum": 0,
|
|
344
551
|
"description": "Bitbucket PR version - must increment by 1 per PUT."
|
|
345
552
|
},
|
|
346
|
-
"draft": {
|
|
553
|
+
"draft": {
|
|
554
|
+
"type": "boolean"
|
|
555
|
+
},
|
|
347
556
|
"reviewers": {
|
|
348
557
|
"type": "array",
|
|
349
|
-
"items": {
|
|
558
|
+
"items": {
|
|
559
|
+
"type": "string"
|
|
560
|
+
}
|
|
350
561
|
}
|
|
351
562
|
}
|
|
352
563
|
},
|
|
@@ -354,8 +565,13 @@
|
|
|
354
565
|
"type": ["object", "null"],
|
|
355
566
|
"additionalProperties": false,
|
|
356
567
|
"properties": {
|
|
357
|
-
"sha": {
|
|
358
|
-
|
|
568
|
+
"sha": {
|
|
569
|
+
"type": "string",
|
|
570
|
+
"minLength": 7
|
|
571
|
+
},
|
|
572
|
+
"message": {
|
|
573
|
+
"type": "string"
|
|
574
|
+
}
|
|
359
575
|
}
|
|
360
576
|
},
|
|
361
577
|
"projects": {
|
|
@@ -368,11 +584,21 @@
|
|
|
368
584
|
"additionalProperties": false,
|
|
369
585
|
"required": ["project", "projectRoot", "branch", "baseBranch", "identity"],
|
|
370
586
|
"properties": {
|
|
371
|
-
"project": {
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
"
|
|
375
|
-
|
|
587
|
+
"project": {
|
|
588
|
+
"type": "string"
|
|
589
|
+
},
|
|
590
|
+
"projectRoot": {
|
|
591
|
+
"type": "string"
|
|
592
|
+
},
|
|
593
|
+
"worktreePath": {
|
|
594
|
+
"type": ["string", "null"]
|
|
595
|
+
},
|
|
596
|
+
"branch": {
|
|
597
|
+
"type": "string"
|
|
598
|
+
},
|
|
599
|
+
"baseBranch": {
|
|
600
|
+
"type": "string"
|
|
601
|
+
},
|
|
376
602
|
"remoteType": {
|
|
377
603
|
"type": "string",
|
|
378
604
|
"enum": ["github", "bitbucket", "gitlab", "generic-git"]
|
|
@@ -382,9 +608,16 @@
|
|
|
382
608
|
"additionalProperties": false,
|
|
383
609
|
"required": ["name", "email"],
|
|
384
610
|
"properties": {
|
|
385
|
-
"name": {
|
|
386
|
-
|
|
387
|
-
|
|
611
|
+
"name": {
|
|
612
|
+
"type": "string"
|
|
613
|
+
},
|
|
614
|
+
"email": {
|
|
615
|
+
"type": "string",
|
|
616
|
+
"format": "email"
|
|
617
|
+
},
|
|
618
|
+
"username": {
|
|
619
|
+
"type": "string"
|
|
620
|
+
}
|
|
388
621
|
}
|
|
389
622
|
},
|
|
390
623
|
"platform": {
|
|
@@ -396,17 +629,30 @@
|
|
|
396
629
|
"type": ["object", "null"],
|
|
397
630
|
"additionalProperties": false,
|
|
398
631
|
"properties": {
|
|
399
|
-
"sha": {
|
|
400
|
-
|
|
632
|
+
"sha": {
|
|
633
|
+
"type": "string",
|
|
634
|
+
"minLength": 7
|
|
635
|
+
},
|
|
636
|
+
"message": {
|
|
637
|
+
"type": "string"
|
|
638
|
+
}
|
|
401
639
|
}
|
|
402
640
|
},
|
|
403
641
|
"pr": {
|
|
404
642
|
"type": ["object", "null"],
|
|
405
643
|
"additionalProperties": false,
|
|
406
644
|
"properties": {
|
|
407
|
-
"number": {
|
|
408
|
-
|
|
409
|
-
|
|
645
|
+
"number": {
|
|
646
|
+
"type": "integer",
|
|
647
|
+
"minimum": 1
|
|
648
|
+
},
|
|
649
|
+
"url": {
|
|
650
|
+
"type": "string",
|
|
651
|
+
"format": "uri"
|
|
652
|
+
},
|
|
653
|
+
"draft": {
|
|
654
|
+
"type": "boolean"
|
|
655
|
+
}
|
|
410
656
|
}
|
|
411
657
|
},
|
|
412
658
|
"pushAttempts": {
|
|
@@ -417,20 +663,41 @@
|
|
|
417
663
|
"buildStatus": {
|
|
418
664
|
"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
665
|
"anyOf": [
|
|
420
|
-
{
|
|
421
|
-
|
|
666
|
+
{
|
|
667
|
+
"type": "string",
|
|
668
|
+
"enum": ["pending", "passed", "failed", "green"]
|
|
669
|
+
},
|
|
670
|
+
{
|
|
671
|
+
"type": "null"
|
|
672
|
+
},
|
|
422
673
|
{
|
|
423
674
|
"type": "object",
|
|
424
675
|
"properties": {
|
|
425
|
-
"ok": {
|
|
426
|
-
|
|
427
|
-
|
|
676
|
+
"ok": {
|
|
677
|
+
"type": "boolean"
|
|
678
|
+
},
|
|
679
|
+
"attempts": {
|
|
680
|
+
"type": "integer",
|
|
681
|
+
"minimum": 0
|
|
682
|
+
},
|
|
683
|
+
"lastError": {
|
|
684
|
+
"type": ["string", "null"]
|
|
685
|
+
}
|
|
428
686
|
}
|
|
429
687
|
}
|
|
430
688
|
]
|
|
431
689
|
}
|
|
432
690
|
}
|
|
433
691
|
}
|
|
692
|
+
},
|
|
693
|
+
"worktreeRemovedAt": {
|
|
694
|
+
"type": ["string", "null"],
|
|
695
|
+
"format": "date-time",
|
|
696
|
+
"description": "Set when Phase 6 removed the worktree after opening the PR. Its presence is what tells :resume, :status and :log that a worktree-less task is finished-and-tidied rather than broken - without it a missing worktree is indistinguishable from a killed run."
|
|
697
|
+
},
|
|
698
|
+
"artifactsPath": {
|
|
699
|
+
"type": ["string", "null"],
|
|
700
|
+
"description": "Directory the worktree's artefacts were salvaged into before removal (agent-state, phase-tracker, triage-output, .pipeline/, build+test logs, review diff). Phase 7 and :resume read from here when worktreePath is gone."
|
|
434
701
|
}
|
|
435
702
|
}
|
|
436
703
|
}
|