@jterrats/open-orchestra 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 (208) hide show
  1. package/AGENTS.md +90 -0
  2. package/CHANGELOG.md +104 -0
  3. package/CLAUDE.md +103 -0
  4. package/README.md +173 -22
  5. package/dist/assets/web-console.js +743 -0
  6. package/dist/autonomous-workflow.d.ts +45 -0
  7. package/dist/autonomous-workflow.js +386 -0
  8. package/dist/autonomous-workflow.js.map +1 -0
  9. package/dist/benchmark.d.ts +8 -0
  10. package/dist/benchmark.js +193 -0
  11. package/dist/benchmark.js.map +1 -0
  12. package/dist/burndown.d.ts +3 -0
  13. package/dist/burndown.js +141 -0
  14. package/dist/burndown.js.map +1 -0
  15. package/dist/clarification.d.ts +6 -0
  16. package/dist/clarification.js +88 -0
  17. package/dist/clarification.js.map +1 -0
  18. package/dist/cli.js +221 -4
  19. package/dist/cli.js.map +1 -1
  20. package/dist/collaboration-flows.d.ts +5 -0
  21. package/dist/collaboration-flows.js +256 -0
  22. package/dist/collaboration-flows.js.map +1 -0
  23. package/dist/command-manifest.d.ts +11 -0
  24. package/dist/command-manifest.js +52 -0
  25. package/dist/command-manifest.js.map +1 -0
  26. package/dist/commands.d.ts +39 -0
  27. package/dist/commands.js +1069 -2
  28. package/dist/commands.js.map +1 -1
  29. package/dist/constants.d.ts +4 -0
  30. package/dist/constants.js +22 -0
  31. package/dist/constants.js.map +1 -1
  32. package/dist/defaults.d.ts +7 -11
  33. package/dist/defaults.js +7 -625
  34. package/dist/defaults.js.map +1 -1
  35. package/dist/delegation-decision.d.ts +14 -0
  36. package/dist/delegation-decision.js +391 -0
  37. package/dist/delegation-decision.js.map +1 -0
  38. package/dist/detect-commands.d.ts +3 -0
  39. package/dist/detect-commands.js +28 -0
  40. package/dist/detect-commands.js.map +1 -0
  41. package/dist/diagram-validation.d.ts +36 -0
  42. package/dist/diagram-validation.js +118 -0
  43. package/dist/diagram-validation.js.map +1 -0
  44. package/dist/fs-utils.d.ts +2 -0
  45. package/dist/fs-utils.js +75 -6
  46. package/dist/fs-utils.js.map +1 -1
  47. package/dist/github.d.ts +11 -0
  48. package/dist/github.js +48 -0
  49. package/dist/github.js.map +1 -0
  50. package/dist/health-checks.d.ts +28 -0
  51. package/dist/health-checks.js +219 -0
  52. package/dist/health-checks.js.map +1 -0
  53. package/dist/health-commands.d.ts +2 -0
  54. package/dist/health-commands.js +18 -0
  55. package/dist/health-commands.js.map +1 -0
  56. package/dist/instruction-apply.d.ts +34 -0
  57. package/dist/instruction-apply.js +150 -0
  58. package/dist/instruction-apply.js.map +1 -0
  59. package/dist/instruction-blocks.d.ts +22 -0
  60. package/dist/instruction-blocks.js +120 -0
  61. package/dist/instruction-blocks.js.map +1 -0
  62. package/dist/instruction-imports.d.ts +12 -0
  63. package/dist/instruction-imports.js +45 -0
  64. package/dist/instruction-imports.js.map +1 -0
  65. package/dist/instruction-stale.d.ts +9 -0
  66. package/dist/instruction-stale.js +106 -0
  67. package/dist/instruction-stale.js.map +1 -0
  68. package/dist/instruction-types.d.ts +66 -0
  69. package/dist/instruction-types.js +2 -0
  70. package/dist/instruction-types.js.map +1 -0
  71. package/dist/instruction-updates.d.ts +4 -0
  72. package/dist/instruction-updates.js +5 -0
  73. package/dist/instruction-updates.js.map +1 -0
  74. package/dist/knowledge-base.d.ts +10 -0
  75. package/dist/knowledge-base.js +117 -0
  76. package/dist/knowledge-base.js.map +1 -0
  77. package/dist/mcp-oauth-proxy.d.ts +39 -0
  78. package/dist/mcp-oauth-proxy.js +80 -0
  79. package/dist/mcp-oauth-proxy.js.map +1 -0
  80. package/dist/pr-review.d.ts +20 -0
  81. package/dist/pr-review.js +142 -0
  82. package/dist/pr-review.js.map +1 -0
  83. package/dist/project-detection.d.ts +22 -0
  84. package/dist/project-detection.js +174 -0
  85. package/dist/project-detection.js.map +1 -0
  86. package/dist/prompt-registry.d.ts +56 -0
  87. package/dist/prompt-registry.js +163 -0
  88. package/dist/prompt-registry.js.map +1 -0
  89. package/dist/release-candidate.d.ts +41 -0
  90. package/dist/release-candidate.js +196 -0
  91. package/dist/release-candidate.js.map +1 -0
  92. package/dist/release-commands.d.ts +4 -0
  93. package/dist/release-commands.js +50 -0
  94. package/dist/release-commands.js.map +1 -0
  95. package/dist/roles/ai-support-roles.d.ts +11 -0
  96. package/dist/roles/ai-support-roles.js +67 -0
  97. package/dist/roles/ai-support-roles.js.map +1 -0
  98. package/dist/roles/core-roles.d.ts +11 -0
  99. package/dist/roles/core-roles.js +144 -0
  100. package/dist/roles/core-roles.js.map +1 -0
  101. package/dist/roles/engineering-roles.d.ts +11 -0
  102. package/dist/roles/engineering-roles.js +176 -0
  103. package/dist/roles/engineering-roles.js.map +1 -0
  104. package/dist/roles/governance-roles.d.ts +11 -0
  105. package/dist/roles/governance-roles.js +117 -0
  106. package/dist/roles/governance-roles.js.map +1 -0
  107. package/dist/roles/index.d.ts +11 -0
  108. package/dist/roles/index.js +17 -0
  109. package/dist/roles/index.js.map +1 -0
  110. package/dist/roles/platform-ops-roles.d.ts +11 -0
  111. package/dist/roles/platform-ops-roles.js +158 -0
  112. package/dist/roles/platform-ops-roles.js.map +1 -0
  113. package/dist/roles/qa-ux-roles.d.ts +11 -0
  114. package/dist/roles/qa-ux-roles.js +193 -0
  115. package/dist/roles/qa-ux-roles.js.map +1 -0
  116. package/dist/roles/release-ops-roles.d.ts +11 -0
  117. package/dist/roles/release-ops-roles.js +109 -0
  118. package/dist/roles/release-ops-roles.js.map +1 -0
  119. package/dist/runtime-adapters.d.ts +6 -0
  120. package/dist/runtime-adapters.js +88 -0
  121. package/dist/runtime-adapters.js.map +1 -0
  122. package/dist/runtime-bootstrap.d.ts +12 -0
  123. package/dist/runtime-bootstrap.js +136 -0
  124. package/dist/runtime-bootstrap.js.map +1 -0
  125. package/dist/skills.d.ts +36 -0
  126. package/dist/skills.js +665 -0
  127. package/dist/skills.js.map +1 -0
  128. package/dist/subagent-protocol.d.ts +41 -0
  129. package/dist/subagent-protocol.js +179 -0
  130. package/dist/subagent-protocol.js.map +1 -0
  131. package/dist/telemetry-consent.d.ts +24 -0
  132. package/dist/telemetry-consent.js +95 -0
  133. package/dist/telemetry-consent.js.map +1 -0
  134. package/dist/telemetry-export.d.ts +14 -0
  135. package/dist/telemetry-export.js +126 -0
  136. package/dist/telemetry-export.js.map +1 -0
  137. package/dist/telemetry-records.d.ts +3 -0
  138. package/dist/telemetry-records.js +96 -0
  139. package/dist/telemetry-records.js.map +1 -0
  140. package/dist/telemetry-redaction.d.ts +9 -0
  141. package/dist/telemetry-redaction.js +55 -0
  142. package/dist/telemetry-redaction.js.map +1 -0
  143. package/dist/telemetry-types.d.ts +52 -0
  144. package/dist/telemetry-types.js +2 -0
  145. package/dist/telemetry-types.js.map +1 -0
  146. package/dist/telemetry.d.ts +4 -0
  147. package/dist/telemetry.js +4 -0
  148. package/dist/telemetry.js.map +1 -0
  149. package/dist/types.d.ts +304 -1
  150. package/dist/types.js +1 -1
  151. package/dist/types.js.map +1 -1
  152. package/dist/validation.d.ts +3 -1
  153. package/dist/validation.js +28 -5
  154. package/dist/validation.js.map +1 -1
  155. package/dist/web-api.js +167 -3
  156. package/dist/web-api.js.map +1 -1
  157. package/dist/web-console.js +6 -160
  158. package/dist/web-console.js.map +1 -1
  159. package/dist/workflow-gates.js +4 -2
  160. package/dist/workflow-gates.js.map +1 -1
  161. package/dist/workflow-services.js +143 -67
  162. package/dist/workflow-services.js.map +1 -1
  163. package/dist/workflow-templates.d.ts +10 -0
  164. package/dist/workflow-templates.js +141 -0
  165. package/dist/workflow-templates.js.map +1 -0
  166. package/dist/workspace-classification.d.ts +5 -0
  167. package/dist/workspace-classification.js +127 -0
  168. package/dist/workspace-classification.js.map +1 -0
  169. package/dist/workspace-validator.js +11 -1
  170. package/dist/workspace-validator.js.map +1 -1
  171. package/dist/workspace.d.ts +8 -4
  172. package/dist/workspace.js +111 -4
  173. package/dist/workspace.js.map +1 -1
  174. package/docs/autonomous-workflow.md +165 -0
  175. package/docs/benchmark.md +219 -0
  176. package/docs/dev-team-specialist-role-profiles.md +171 -0
  177. package/docs/mcp-oauth-proxy-evaluation.md +44 -0
  178. package/docs/multi-agent-orchestrator-backlog.md +413 -1
  179. package/docs/open-orchestra-dogfooding-findings.md +66 -0
  180. package/docs/orchestra-mvp.md +161 -3
  181. package/docs/runtime-adapters.md +86 -0
  182. package/docs/runtime-llm-flow.md +124 -0
  183. package/docs/setup-agents-dogfooding-findings.md +101 -0
  184. package/docs/skill-loading-strategy.md +114 -0
  185. package/docs/source-of-truth-and-agent-learning.md +83 -0
  186. package/package.json +9 -5
  187. package/rules/agent-roles.mdc +30 -0
  188. package/rules/ai-assisted-development.mdc +22 -0
  189. package/skills/agent-learning/SKILL.md +24 -0
  190. package/skills/agent-learning/manifest.json +40 -0
  191. package/skills/backlog-sync/SKILL.md +24 -0
  192. package/skills/backlog-sync/manifest.json +41 -0
  193. package/skills/diagram-export/SKILL.md +35 -0
  194. package/skills/diagram-export/manifest.json +40 -0
  195. package/skills/model-evaluation/SKILL.md +25 -0
  196. package/skills/model-evaluation/manifest.json +41 -0
  197. package/skills/playwright-evidence/SKILL.md +28 -0
  198. package/skills/playwright-evidence/manifest.json +46 -0
  199. package/skills/pr-review/SKILL.md +23 -0
  200. package/skills/pr-review/manifest.json +43 -0
  201. package/skills/prompt-registry/SKILL.md +24 -0
  202. package/skills/prompt-registry/manifest.json +45 -0
  203. package/skills/release-readiness/SKILL.md +25 -0
  204. package/skills/release-readiness/manifest.json +45 -0
  205. package/skills/source-of-truth/SKILL.md +24 -0
  206. package/skills/source-of-truth/manifest.json +47 -0
  207. package/skills/static-analysis/SKILL.md +26 -0
  208. package/skills/static-analysis/manifest.json +46 -0
@@ -1 +1 @@
1
- {"version":3,"file":"workflow-gates.js","sourceRoot":"","sources":["../src/workflow-gates.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"workflow-gates.js","sourceRoot":"","sources":["../src/workflow-gates.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,19 @@
1
+ import { randomUUID } from "node:crypto";
1
2
  import path from "node:path";
2
3
  import { readdir, readFile } from "node:fs/promises";
3
4
  import { FILES } from "./constants.js";
4
- import { exists, ensureDir, readJson, resolveWorkflowPath, writeJson, } from "./fs-utils.js";
5
+ import { exists, ensureDir, readJson, resolveWorkflowPath, updateJsonFile, writeJson, } from "./fs-utils.js";
5
6
  import { FakeModelProvider, InMemoryModelProviderRegistry, summarizeConfiguredProviders, } from "./model-providers.js";
6
7
  import { appendEvent, loadWorkspace, readEvents, writeArtifact, } from "./workspace.js";
7
- import { validateEvidenceInput, validateReadiness, validateReviewInput, } from "./validation.js";
8
+ import { normalizeEvidenceType, normalizeReviewRole, validateEvidenceInput, validateReadiness, validateReviewInput, } from "./validation.js";
8
9
  import { getWorkflowGate } from "./workflow-gates.js";
10
+ import { analyzePullRequestReview } from "./pr-review.js";
11
+ import { planSkillsForTask } from "./skills.js";
12
+ import { getTelemetryConsent } from "./telemetry.js";
13
+ import { latestDelegationDecision } from "./delegation-decision.js";
14
+ import { handoffFlowRequirements, recommendCollaborationFlow, } from "./collaboration-flows.js";
15
+ import { selectWorkflowTemplates } from "./workflow-templates.js";
16
+ import { SIZING_LABELS } from "./types.js";
9
17
  export async function getWorkflowStatus(root = process.cwd()) {
10
18
  const workspace = await loadWorkspace(root);
11
19
  const counts = Object.create(null);
@@ -36,9 +44,6 @@ export async function addTask(input, root = process.cwd()) {
36
44
  if (!workspace.roleIds.has(input.ownerRole)) {
37
45
  throw new Error(`unknown owner role: ${input.ownerRole}`);
38
46
  }
39
- if (workspace.tasks.some((task) => task.id === input.id)) {
40
- throw new Error(`task already exists: ${input.id}`);
41
- }
42
47
  const now = new Date().toISOString();
43
48
  const task = removeUndefined({
44
49
  ...input,
@@ -46,7 +51,12 @@ export async function addTask(input, root = process.cwd()) {
46
51
  createdAt: now,
47
52
  updatedAt: now,
48
53
  });
49
- await writeTasks(workspace.base, [...workspace.tasks, task]);
54
+ await mutateTasks(workspace.base, (tasks) => {
55
+ if (tasks.some((candidate) => candidate.id === input.id)) {
56
+ throw new Error(`task already exists: ${input.id}`);
57
+ }
58
+ return [...tasks, task];
59
+ });
50
60
  await appendEvent(root, {
51
61
  type: "TASK_ASSIGNED",
52
62
  taskId: input.id,
@@ -66,23 +76,29 @@ export async function listRoles(root = process.cwd()) {
66
76
  }
67
77
  export async function updateTask(input, root = process.cwd()) {
68
78
  const workspace = await loadWorkspace(root);
69
- const taskIndex = workspace.tasks.findIndex((task) => task.id === input.id);
70
- if (taskIndex < 0) {
71
- throw new Error(`unknown task: ${input.id}`);
72
- }
73
- const current = workspace.tasks[taskIndex];
74
- if (!current) {
79
+ let updated;
80
+ await mutateTasks(workspace.base, (tasks) => {
81
+ const taskIndex = tasks.findIndex((task) => task.id === input.id);
82
+ if (taskIndex < 0) {
83
+ throw new Error(`unknown task: ${input.id}`);
84
+ }
85
+ const current = tasks[taskIndex];
86
+ if (!current) {
87
+ throw new Error(`unknown task: ${input.id}`);
88
+ }
89
+ updated = removeUndefined({
90
+ ...current,
91
+ status: input.status,
92
+ blockedReason: input.blockedReason,
93
+ updatedAt: new Date().toISOString(),
94
+ });
95
+ const nextTasks = [...tasks];
96
+ nextTasks[taskIndex] = updated;
97
+ return nextTasks;
98
+ });
99
+ if (!updated) {
75
100
  throw new Error(`unknown task: ${input.id}`);
76
101
  }
77
- const updated = removeUndefined({
78
- ...current,
79
- status: input.status,
80
- blockedReason: input.blockedReason,
81
- updatedAt: new Date().toISOString(),
82
- });
83
- const tasks = [...workspace.tasks];
84
- tasks[taskIndex] = updated;
85
- await writeTasks(workspace.base, tasks);
86
102
  await appendEvent(root, {
87
103
  type: "TASK_UPDATED",
88
104
  taskId: input.id,
@@ -98,7 +114,7 @@ export async function checkTaskDependencies(taskId, root = process.cwd()) {
98
114
  if (!task) {
99
115
  throw new Error(`unknown task: ${taskId}`);
100
116
  }
101
- const dependencies = task.dependencies.map((dependencyId) => {
117
+ const dependencies = (task.dependencies ?? []).map((dependencyId) => {
102
118
  const dependency = workspace.tasks.find((candidate) => candidate.id === dependencyId);
103
119
  if (!dependency) {
104
120
  throw new Error(`task ${taskId} has unknown dependency: ${dependencyId}`);
@@ -206,13 +222,9 @@ export async function claimLock(input, root = process.cwd()) {
206
222
  if (!workspace.roleIds.has(input.ownerRole)) {
207
223
  throw new Error(`unknown owner role: ${input.ownerRole}`);
208
224
  }
209
- const conflictingLock = workspace.locks.find((lock) => lock.path === input.path);
210
- if (conflictingLock) {
211
- throw new Error(`path already locked by ${conflictingLock.id}`);
212
- }
213
225
  const now = new Date().toISOString();
214
226
  const lock = removeUndefined({
215
- id: input.id ?? `lock-${Date.now()}`,
227
+ id: input.id ?? createLockId(),
216
228
  taskId: input.taskId,
217
229
  ownerRole: input.ownerRole,
218
230
  path: input.path,
@@ -220,7 +232,16 @@ export async function claimLock(input, root = process.cwd()) {
220
232
  createdAt: now,
221
233
  expiresAt: input.expiresAt,
222
234
  });
223
- await writeLocks(workspace.base, [...workspace.locks, lock]);
235
+ await mutateLocks(workspace.base, (locks) => {
236
+ const conflictingLock = locks.find((candidate) => candidate.path === input.path);
237
+ if (conflictingLock) {
238
+ throw new Error(`path already locked by ${conflictingLock.id}`);
239
+ }
240
+ if (locks.some((candidate) => candidate.id === lock.id)) {
241
+ throw new Error(`lock id already exists: ${lock.id}`);
242
+ }
243
+ return [...locks, lock];
244
+ });
224
245
  await appendEvent(root, {
225
246
  type: "LOCK_CLAIMED",
226
247
  taskId: input.taskId,
@@ -232,11 +253,17 @@ export async function claimLock(input, root = process.cwd()) {
232
253
  }
233
254
  export async function releaseLock(id, root = process.cwd()) {
234
255
  const workspace = await loadWorkspace(root);
235
- const lock = workspace.locks.find((candidate) => candidate.id === id);
256
+ let lock;
257
+ await mutateLocks(workspace.base, (locks) => {
258
+ lock = locks.find((candidate) => candidate.id === id);
259
+ if (!lock) {
260
+ throw new Error(`unknown lock: ${id}`);
261
+ }
262
+ return locks.filter((candidate) => candidate.id !== id);
263
+ });
236
264
  if (!lock) {
237
265
  throw new Error(`unknown lock: ${id}`);
238
266
  }
239
- await writeLocks(workspace.base, workspace.locks.filter((candidate) => candidate.id !== id));
240
267
  await appendEvent(root, {
241
268
  type: "LOCK_RELEASED",
242
269
  taskId: lock.taskId,
@@ -308,6 +335,9 @@ export async function createHandoff(input, root = process.cwd()) {
308
335
  `- Risks: ${input.risks ?? "none"}`,
309
336
  `- Recommended Playwright coverage: ${input.playwright ?? "not applicable"}`,
310
337
  "",
338
+ "## Flow-specific required context",
339
+ ...flowRequirementLines(handoffFlowRequirements(input)),
340
+ "",
311
341
  ].join("\n");
312
342
  const artifact = await writeArtifact(root, "handoffs", fileName, content);
313
343
  await appendEvent(root, {
@@ -345,6 +375,22 @@ export async function recordDecision(input, root = process.cwd()) {
345
375
  "",
346
376
  ].join("\n");
347
377
  const artifact = await writeArtifact(root, "decisions", fileName, content);
378
+ // Extract sizing/points from decision text when owner is architect
379
+ // Expected format: "<sizing> [N points]" e.g. "m [5 points]" or just "m"
380
+ const sizingMetadata = {};
381
+ if (input.owner === "architect") {
382
+ const sizingMatch = /^\s*(xs|s|m|l|xl)\b/i.exec(input.decision);
383
+ if (sizingMatch) {
384
+ const sizing = sizingMatch[1].toLowerCase();
385
+ if (SIZING_LABELS.includes(sizing)) {
386
+ sizingMetadata.sizing = sizing;
387
+ const pointsMatch = /\[(\d+)\s*points?\]/i.exec(input.decision);
388
+ if (pointsMatch) {
389
+ sizingMetadata.points = parseInt(pointsMatch[1], 10);
390
+ }
391
+ }
392
+ }
393
+ }
348
394
  await appendEvent(root, {
349
395
  type: "DECISION_RECORDED",
350
396
  taskId: input.task,
@@ -354,6 +400,7 @@ export async function recordDecision(input, root = process.cwd()) {
354
400
  metadata: {
355
401
  status: input.status,
356
402
  title: input.title,
403
+ ...sizingMetadata,
357
404
  },
358
405
  });
359
406
  return { ...input, artifact };
@@ -369,7 +416,7 @@ export async function getTaskContext(taskId, root = process.cwd()) {
369
416
  }
370
417
  const events = await readEvents(root);
371
418
  const taskEvents = events.filter((event) => event.taskId === taskId);
372
- return {
419
+ return removeUndefined({
373
420
  task,
374
421
  dependencies: await checkTaskDependencies(taskId, root),
375
422
  locks: workspace.locks.filter((lock) => lock.taskId === taskId),
@@ -379,8 +426,13 @@ export async function getTaskContext(taskId, root = process.cwd()) {
379
426
  evidence: taskEvents.filter((event) => event.type === "EVIDENCE_ADDED"),
380
427
  gates: taskEvents.filter((event) => event.type === "GATE_PASSED" || event.type === "GATE_BLOCKED"),
381
428
  modelProvenance: await listModelProvenance(taskId, root),
429
+ skills: await planSkillsForTask(taskId, root),
430
+ telemetry: await getTelemetryConsent(root),
382
431
  risks: task.risks ?? [],
383
- };
432
+ delegation: latestDelegationDecision(taskEvents),
433
+ collaborationFlow: recommendCollaborationFlow(task, taskEvents),
434
+ workflowTemplates: selectWorkflowTemplates(task, taskEvents),
435
+ });
384
436
  }
385
437
  export async function generateExecutionPlan(taskId, root = process.cwd()) {
386
438
  const context = await getTaskContext(taskId, root);
@@ -694,25 +746,29 @@ export async function rejectApproval(input, root = process.cwd()) {
694
746
  }
695
747
  export async function recordReview(input, root = process.cwd()) {
696
748
  const workspace = await loadWorkspace(root);
697
- validateReviewInput(input, workspace.roleIds);
698
- const fileName = `${input.task}-${input.role}-review.md`;
749
+ const reviewInput = removeUndefined({
750
+ ...input,
751
+ role: normalizeReviewRole(input.role, workspace.roleIds) ?? input.role,
752
+ });
753
+ validateReviewInput(reviewInput, workspace.roleIds);
754
+ const fileName = `${reviewInput.task}-${reviewInput.role}-review.md`;
699
755
  const content = [
700
- `# Review ${input.task}: ${input.role}`,
756
+ `# Review ${reviewInput.task}: ${reviewInput.role}`,
701
757
  "",
702
- `- Result: ${input.result}`,
703
- `- Severity: ${input.severity}`,
704
- `- Findings: ${input.findings}`,
705
- `- Recommendation: ${input.recommendation}`,
758
+ `- Result: ${reviewInput.result}`,
759
+ `- Severity: ${reviewInput.severity}`,
760
+ `- Findings: ${reviewInput.findings}`,
761
+ `- Recommendation: ${reviewInput.recommendation}`,
706
762
  "",
707
763
  ].join("\n");
708
764
  const artifact = await writeArtifact(root, "reviews", fileName, content);
709
765
  await appendEvent(root, {
710
766
  type: "REVIEW_RECORDED",
711
- taskId: input.task,
712
- actor: input.role,
713
- summary: `Review recorded: ${input.result}`,
767
+ taskId: reviewInput.task,
768
+ actor: reviewInput.role,
769
+ summary: `Review recorded: ${reviewInput.result}`,
714
770
  artifacts: [artifact],
715
- metadata: { result: input.result, severity: input.severity },
771
+ metadata: { result: reviewInput.result, severity: reviewInput.severity },
716
772
  });
717
773
  return { artifact, content };
718
774
  }
@@ -721,8 +777,10 @@ function riskReviewSteps(impactAreas) {
721
777
  security: "security",
722
778
  sre: "sre",
723
779
  dba: "dba",
780
+ data: "data_engineer",
724
781
  devops: "devops",
725
782
  compliance: "compliance_privacy",
783
+ accessibility: "accessibility_reviewer",
726
784
  ux: "ux_ui_designer",
727
785
  };
728
786
  const roles = impactAreas
@@ -786,31 +844,35 @@ export async function listReviews(taskId, root = process.cwd()) {
786
844
  return filterEvents("REVIEW_RECORDED", taskId, root);
787
845
  }
788
846
  export async function addEvidence(input, root = process.cwd()) {
847
+ const evidenceInput = removeUndefined({
848
+ ...input,
849
+ type: normalizeEvidenceType(input.type) ?? input.type,
850
+ });
789
851
  const workspace = await loadWorkspace(root);
790
- validateEvidenceInput(input, workspace.roleIds);
791
- if (typeof input.path === "string" &&
792
- !(await exists(path.resolve(root, input.path)))) {
793
- throw new Error(`evidence path does not exist: ${input.path}`);
852
+ validateEvidenceInput(evidenceInput, workspace.roleIds);
853
+ if (typeof evidenceInput.path === "string" &&
854
+ !(await exists(path.resolve(root, evidenceInput.path)))) {
855
+ throw new Error(`evidence path does not exist: ${evidenceInput.path}`);
794
856
  }
795
- const fileName = `${input.task}-${Date.now()}-${input.type}.md`;
857
+ const fileName = `${evidenceInput.task}-${Date.now()}-${randomUUID()}-${evidenceInput.type}.md`;
796
858
  const content = [
797
- `# Evidence ${input.task}: ${input.type}`,
859
+ `# Evidence ${evidenceInput.task}: ${evidenceInput.type}`,
798
860
  "",
799
- `- Role: ${input.role}`,
800
- `- Summary: ${input.summary}`,
801
- `- Path: ${input.path ?? "not applicable"}`,
802
- `- Command: ${input.command ?? "not applicable"}`,
803
- `- Exit code: ${input.exitCode ?? "not applicable"}`,
861
+ `- Role: ${evidenceInput.role}`,
862
+ `- Summary: ${evidenceInput.summary}`,
863
+ `- Path: ${evidenceInput.path ?? "not applicable"}`,
864
+ `- Command: ${evidenceInput.command ?? "not applicable"}`,
865
+ `- Exit code: ${evidenceInput.exitCode ?? "not applicable"}`,
804
866
  "",
805
867
  ].join("\n");
806
868
  const artifact = await writeArtifact(root, "evidence", fileName, content);
807
869
  await appendEvent(root, {
808
870
  type: "EVIDENCE_ADDED",
809
- taskId: input.task,
810
- actor: input.role,
811
- summary: input.summary,
871
+ taskId: evidenceInput.task,
872
+ actor: evidenceInput.role,
873
+ summary: evidenceInput.summary,
812
874
  artifacts: [artifact],
813
- metadata: { type: input.type },
875
+ metadata: { type: evidenceInput.type },
814
876
  });
815
877
  return { artifact, content };
816
878
  }
@@ -837,16 +899,22 @@ export async function generatePullRequestSummary(taskId, root = process.cwd()) {
837
899
  }
838
900
  const events = await readEvents(root);
839
901
  const taskEvents = events.filter((event) => event.taskId === taskId);
902
+ const handoffs = taskEvents.filter((event) => event.type === "HANDOFF_READY");
903
+ const reviews = taskEvents.filter((event) => event.type === "REVIEW_RECORDED");
904
+ const evidence = taskEvents.filter((event) => event.type === "EVIDENCE_ADDED");
905
+ const gates = taskEvents.filter((event) => event.type === "GATE_PASSED" || event.type === "GATE_BLOCKED");
906
+ const locks = workspace.locks.filter((lock) => lock.taskId === taskId);
840
907
  return {
841
908
  task,
842
- handoffs: taskEvents.filter((event) => event.type === "HANDOFF_READY"),
843
- reviews: taskEvents.filter((event) => event.type === "REVIEW_RECORDED"),
844
- evidence: taskEvents.filter((event) => event.type === "EVIDENCE_ADDED"),
845
- gates: taskEvents.filter((event) => event.type === "GATE_PASSED" || event.type === "GATE_BLOCKED"),
846
- locks: workspace.locks.filter((lock) => lock.taskId === taskId),
909
+ handoffs,
910
+ reviews,
911
+ evidence,
912
+ gates,
913
+ locks,
847
914
  risks: task.risks ?? [],
848
915
  rollout: "Use the project release process after required gates pass.",
849
916
  rollback: "Revert the related commit or disable the changed behavior.",
917
+ review: analyzePullRequestReview({ task, reviews, evidence, gates, locks }),
850
918
  };
851
919
  }
852
920
  export async function generatePlaywrightTestPlan(taskId, root = process.cwd()) {
@@ -1221,11 +1289,19 @@ async function filterEvents(type, taskId, root) {
1221
1289
  const events = (await readEvents(root)).filter((event) => event.type === type);
1222
1290
  return taskId ? events.filter((event) => event.taskId === taskId) : events;
1223
1291
  }
1224
- async function writeTasks(base, tasks) {
1225
- await writeJson(path.join(base, FILES.tasks), tasks);
1292
+ async function mutateTasks(base, update) {
1293
+ return updateJsonFile(path.join(base, FILES.tasks), [], update);
1294
+ }
1295
+ async function mutateLocks(base, update) {
1296
+ return updateJsonFile(path.join(base, FILES.locks), [], update);
1297
+ }
1298
+ function flowRequirementLines(requirements) {
1299
+ return requirements.length > 0
1300
+ ? requirements.map((requirement) => `- ${requirement}`)
1301
+ : ["- none"];
1226
1302
  }
1227
- async function writeLocks(base, locks) {
1228
- await writeJson(path.join(base, FILES.locks), locks);
1303
+ function createLockId() {
1304
+ return `lock-${Date.now()}-${randomUUID()}`;
1229
1305
  }
1230
1306
  function removeUndefined(value) {
1231
1307
  return Object.fromEntries(Object.entries(value).filter(([, entry]) => entry !== undefined));