@mmerterden/multi-agent-pipeline 20.30.0 → 20.34.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 (195) hide show
  1. package/CHANGELOG.md +123 -0
  2. package/README.md +47 -1
  3. package/README.tr.md +61 -1
  4. package/docs/adr/0018-cross-repo-links-not-a-global-graph.md +43 -0
  5. package/docs/adr/README.md +2 -1
  6. package/docs/facts.json +6 -5
  7. package/docs/features.md +1 -1
  8. package/install/_dev-only-files.mjs +1 -0
  9. package/install/_unattended-profile.mjs +61 -0
  10. package/install/catalog-history.json +1 -1
  11. package/install/claude.mjs +16 -2
  12. package/install/index.mjs +10 -1
  13. package/install/templates/claude-hooks.json +23 -1
  14. package/manifest.json +198 -134
  15. package/package.json +4 -1
  16. package/pipeline/agents/code-reviewer.md +9 -0
  17. package/pipeline/agents/explorer.md +4 -0
  18. package/pipeline/agents/plan-critic.md +4 -2
  19. package/pipeline/commands/multi-agent/SKILL.md +17 -136
  20. package/pipeline/commands/multi-agent/analysis/SKILL.md +4 -4
  21. package/pipeline/commands/multi-agent/channels/SKILL.md +15 -297
  22. package/pipeline/commands/multi-agent/graph/SKILL.md +5 -2
  23. package/pipeline/commands/multi-agent/language/SKILL.md +3 -3
  24. package/pipeline/commands/multi-agent/office-on/SKILL.md +8 -7
  25. package/pipeline/commands/multi-agent/office-status/SKILL.md +1 -1
  26. package/pipeline/commands/multi-agent/prune-logs/SKILL.md +4 -1
  27. package/pipeline/commands/multi-agent/resume/SKILL.md +8 -22
  28. package/pipeline/commands/multi-agent/review/SKILL.md +11 -134
  29. package/pipeline/commands/multi-agent/scenario-audit/SKILL.md +4 -2
  30. package/pipeline/commands/multi-agent/setup/SKILL.md +19 -224
  31. package/pipeline/commands/multi-agent/sync/SKILL.md +12 -0
  32. package/pipeline/commands/multi-agent/test-gen/SKILL.md +29 -3
  33. package/pipeline/contract/CHANGELOG.md +46 -0
  34. package/pipeline/contract/README.md +27 -10
  35. package/pipeline/contract/fixtures/error-invalid-request.json +1 -1
  36. package/pipeline/contract/fixtures/error-unauthorized.json +1 -1
  37. package/pipeline/contract/fixtures/error-unsigned.json +1 -1
  38. package/pipeline/contract/fixtures/launch-plan.json +1 -1
  39. package/pipeline/contract/fixtures/runs-awaiting-question.json +6 -1
  40. package/pipeline/contract/fixtures/runs-empty.json +1 -1
  41. package/pipeline/contract/fixtures/runs-failed.json +6 -1
  42. package/pipeline/contract/fixtures/runs-old-schema.json +6 -1
  43. package/pipeline/contract/fixtures/runs-pr-opened-redacted.json +5 -1
  44. package/pipeline/contract/fixtures/runs-pr-opened.json +6 -1
  45. package/pipeline/contract/fixtures/runs-running.json +6 -1
  46. package/pipeline/contract/manifest.json +153 -19
  47. package/pipeline/contract/types/index.d.ts +304 -6
  48. package/pipeline/lib/bg-launch.mjs +106 -0
  49. package/pipeline/lib/code-digest.mjs +49 -0
  50. package/pipeline/lib/credential-resolve.mjs +42 -2
  51. package/pipeline/multi-agent-refs/channels/generator.md +146 -0
  52. package/pipeline/multi-agent-refs/channels/menu.md +55 -0
  53. package/pipeline/multi-agent-refs/channels/multi-repo.md +6 -0
  54. package/pipeline/multi-agent-refs/channels/preview.md +25 -0
  55. package/pipeline/multi-agent-refs/channels/reference.md +98 -0
  56. package/pipeline/multi-agent-refs/features/autopilot-circuit-breaker.md +1 -1
  57. package/pipeline/multi-agent-refs/features/code-graph.md +27 -0
  58. package/pipeline/multi-agent-refs/features/office-threat-model.md +24 -6
  59. package/pipeline/multi-agent-refs/features/plan-critic.md +5 -2
  60. package/pipeline/multi-agent-refs/features/review-delta.md +4 -1
  61. package/pipeline/multi-agent-refs/features/scope-check.md +10 -1
  62. package/pipeline/multi-agent-refs/features/unattended-security.md +1 -1
  63. package/pipeline/multi-agent-refs/help/en.md +2 -2
  64. package/pipeline/multi-agent-refs/help/tr.md +2 -2
  65. package/pipeline/multi-agent-refs/knowledge.md +9 -0
  66. package/pipeline/multi-agent-refs/orchestrator/dispatcher.md +163 -0
  67. package/pipeline/multi-agent-refs/phases/modes.md +7 -7
  68. package/pipeline/multi-agent-refs/phases/phase-1-plan.md +4 -4
  69. package/pipeline/multi-agent-refs/phases/phase-2-dev.md +9 -8
  70. package/pipeline/multi-agent-refs/phases/phase-3-review.md +12 -7
  71. package/pipeline/multi-agent-refs/phases/phase-4-commit.md +7 -3
  72. package/pipeline/multi-agent-refs/phases/phase-5-report.md +19 -10
  73. package/pipeline/multi-agent-refs/picker-contract.md +1 -1
  74. package/pipeline/multi-agent-refs/resume/details.md +35 -0
  75. package/pipeline/multi-agent-refs/review/inputs.md +87 -0
  76. package/pipeline/multi-agent-refs/review/module-guides.md +25 -0
  77. package/pipeline/multi-agent-refs/review/valven.md +42 -0
  78. package/pipeline/multi-agent-refs/review-standalone-tracker.md +37 -0
  79. package/pipeline/multi-agent-refs/setup/accounts.md +27 -0
  80. package/pipeline/multi-agent-refs/setup/app-store-connect.md +5 -0
  81. package/pipeline/multi-agent-refs/setup/firebase.md +5 -0
  82. package/pipeline/multi-agent-refs/setup/google-play.md +4 -0
  83. package/pipeline/multi-agent-refs/setup/hooks-and-plugins.md +21 -0
  84. package/pipeline/multi-agent-refs/setup/language.md +46 -0
  85. package/pipeline/multi-agent-refs/setup/multi-repo-group.md +51 -0
  86. package/pipeline/multi-agent-refs/setup/summaries.md +63 -0
  87. package/pipeline/multi-agent-refs/setup/token-save-flow.md +51 -0
  88. package/pipeline/multi-agent-refs/tracker-contract.md +8 -3
  89. package/pipeline/office/NOTICE.md +4 -1
  90. package/pipeline/office/assets/ARCHIVE_BOXES.png +0 -0
  91. package/pipeline/office/assets/COFFEE_MACHINE.png +0 -0
  92. package/pipeline/office/assets/COUNTER_SINK.png +0 -0
  93. package/pipeline/office/assets/DEVICE_STAND.png +0 -0
  94. package/pipeline/office/assets/FILING_CABINET.png +0 -0
  95. package/pipeline/office/assets/FRIDGE.png +0 -0
  96. package/pipeline/office/assets/MAILBOX.png +0 -0
  97. package/pipeline/office/assets/MOP_BUCKET.png +0 -0
  98. package/pipeline/office/assets/PRINTER.png +0 -0
  99. package/pipeline/office/assets/RECEPTION_DESK.png +0 -0
  100. package/pipeline/office/assets/SERVER_RACK.png +0 -0
  101. package/pipeline/office/assets/SERVER_RACK_2.png +0 -0
  102. package/pipeline/office/assets/TOILET_STALL.png +0 -0
  103. package/pipeline/office/assets/VENDING.png +0 -0
  104. package/pipeline/office/assets/WASHBASIN.png +0 -0
  105. package/pipeline/office/assets/WATER_COOLER.png +0 -0
  106. package/pipeline/office/index.html +3936 -819
  107. package/pipeline/office/toolkit.json +3 -0
  108. package/pipeline/rules/response-shape.md +6 -7
  109. package/pipeline/schemas/activity.schema.json +188 -4
  110. package/pipeline/schemas/agent-state.schema.json +511 -115
  111. package/pipeline/schemas/contract-error.schema.json +12 -1
  112. package/pipeline/schemas/job-change.schema.json +72 -0
  113. package/pipeline/schemas/job-request.schema.json +38 -0
  114. package/pipeline/schemas/launch.json +4 -4
  115. package/pipeline/schemas/office-credentials.schema.json +71 -0
  116. package/pipeline/schemas/office-jobs.json +253 -0
  117. package/pipeline/schemas/office-jobs.schema.json +62 -0
  118. package/pipeline/schemas/office-memory.schema.json +105 -0
  119. package/pipeline/schemas/office-settings-request.schema.json +30 -0
  120. package/pipeline/schemas/office-settings.schema.json +67 -0
  121. package/pipeline/schemas/phases.json +14 -6
  122. package/pipeline/schemas/phases.schema.json +86 -19
  123. package/pipeline/schemas/plan-critique.schema.json +9 -2
  124. package/pipeline/schemas/planning-output.schema.json +25 -2
  125. package/pipeline/schemas/prefs.schema.json +24 -1
  126. package/pipeline/schemas/prs.schema.json +5 -0
  127. package/pipeline/schemas/prune-logs-request.schema.json +26 -0
  128. package/pipeline/schemas/prune-logs.schema.json +52 -0
  129. package/pipeline/schemas/repo-change.schema.json +54 -0
  130. package/pipeline/schemas/repo-request.schema.json +29 -0
  131. package/pipeline/schemas/repos.schema.json +49 -1
  132. package/pipeline/schemas/reviewer-output.schema.json +20 -2
  133. package/pipeline/schemas/runs-index.schema.json +257 -46
  134. package/pipeline/schemas/system-status.schema.json +111 -0
  135. package/pipeline/schemas/token-budget.json +4 -4
  136. package/pipeline/schemas/tools.schema.json +5 -0
  137. package/pipeline/schemas/triage-output.schema.json +20 -2
  138. package/pipeline/schemas/unattended-profile.json +7 -2
  139. package/pipeline/scripts/_active-run.mjs +2 -1
  140. package/pipeline/scripts/_graph-analysis.mjs +270 -0
  141. package/pipeline/scripts/_memory-policy.mjs +165 -0
  142. package/pipeline/scripts/_secret-scan.mjs +105 -0
  143. package/pipeline/scripts/_spawn-async.mjs +9 -5
  144. package/pipeline/scripts/_unified-diff.mjs +2 -2
  145. package/pipeline/scripts/activity-snapshot.mjs +219 -23
  146. package/pipeline/scripts/autopilot-runner.mjs +7 -5
  147. package/pipeline/scripts/capture-flush.sh +12 -2
  148. package/pipeline/scripts/check-read-size.sh +9 -0
  149. package/pipeline/scripts/code-graph-rules/android.json +8 -3
  150. package/pipeline/scripts/contract-server.mjs +575 -28
  151. package/pipeline/scripts/debt-ledger.mjs +323 -0
  152. package/pipeline/scripts/file-context.mjs +261 -0
  153. package/pipeline/scripts/file-context.sh +20 -0
  154. package/pipeline/scripts/gen-mode-dispatch.mjs +3 -1
  155. package/pipeline/scripts/graph-links.mjs +230 -0
  156. package/pipeline/scripts/graph-query.mjs +133 -1
  157. package/pipeline/scripts/graph-report.mjs +65 -0
  158. package/pipeline/scripts/job-launch.mjs +477 -0
  159. package/pipeline/scripts/launch-request.mjs +94 -9
  160. package/pipeline/scripts/learn-from-transcripts.mjs +12 -48
  161. package/pipeline/scripts/learnings-ledger.mjs +143 -24
  162. package/pipeline/scripts/office-build.mjs +148 -11
  163. package/pipeline/scripts/office-control.mjs +34 -7
  164. package/pipeline/scripts/office-credentials.mjs +106 -0
  165. package/pipeline/scripts/office-memory.mjs +200 -0
  166. package/pipeline/scripts/office-prune.mjs +125 -0
  167. package/pipeline/scripts/office-settings.mjs +145 -0
  168. package/pipeline/scripts/phase-tracker.sh +12 -5
  169. package/pipeline/scripts/plan-critique-gate.mjs +11 -2
  170. package/pipeline/scripts/prune-logs.sh +53 -2
  171. package/pipeline/scripts/rework-rulings.mjs +106 -0
  172. package/pipeline/scripts/runs-index.mjs +62 -2
  173. package/pipeline/scripts/scope-check-gate.mjs +149 -2
  174. package/pipeline/scripts/system-status.mjs +196 -0
  175. package/pipeline/scripts/task-mirror.mjs +150 -0
  176. package/pipeline/scripts/task-mirror.sh +20 -0
  177. package/pipeline/scripts/toolkit-tools.mjs +33 -7
  178. package/pipeline/scripts/transcript-index.mjs +4 -1
  179. package/pipeline/scripts/triage-memory.mjs +64 -37
  180. package/pipeline/scripts/validate-planning.mjs +68 -4
  181. package/pipeline/scripts/validate-reviewer.mjs +20 -0
  182. package/pipeline/scripts/validate-triage.mjs +107 -2
  183. package/pipeline/scripts/work-items.mjs +191 -22
  184. package/pipeline/skills/.skill-manifest.json +9 -9
  185. package/pipeline/skills/.skills-index.json +1 -1
  186. package/pipeline/skills/shared/README.md +1 -1
  187. package/pipeline/skills/shared/core/multi-agent-graph/SKILL.md +5 -2
  188. package/pipeline/skills/shared/core/multi-agent-language/SKILL.md +4 -4
  189. package/pipeline/skills/shared/core/multi-agent-office-on/SKILL.md +3 -4
  190. package/pipeline/skills/shared/core/multi-agent-prune-logs/SKILL.md +4 -1
  191. package/pipeline/skills/shared/core/multi-agent-review/SKILL.md +21 -0
  192. package/pipeline/skills/shared/core/multi-agent-scenario-audit/SKILL.md +4 -2
  193. package/pipeline/skills/shared/core/multi-agent-setup/SKILL.md +4 -4
  194. package/pipeline/skills/shared/core/multi-agent-test-gen/SKILL.md +26 -3
  195. package/pipeline/skills/skills-index.md +1 -1
@@ -301,19 +301,30 @@
301
301
  "required": ["contractVersion", "mode", "answered", "resolvedAt"],
302
302
  "description": "Present only when Phase 0 Step 0.1 applied a launch request (launch-request.mjs resolve). Records which pickers the request answered, so a reader can tell a pre-filled answer from one the user gave in the session. Absent on every run started without MA_LAUNCH_REQUEST.",
303
303
  "properties": {
304
- "contractVersion": { "type": "string" },
305
- "mode": { "enum": ["interactive", "autopilot", "background"] },
306
- "kind": { "enum": ["analysis", "development"] },
304
+ "contractVersion": {
305
+ "type": "string"
306
+ },
307
+ "mode": {
308
+ "enum": ["interactive", "autopilot", "background"]
309
+ },
310
+ "kind": {
311
+ "enum": ["analysis", "development"]
312
+ },
307
313
  "input": {
308
314
  "type": "string",
309
315
  "description": "The request's input, kept so the runs index can title a run launched from free text."
310
316
  },
311
317
  "answered": {
312
318
  "type": "array",
313
- "items": { "type": "string" },
319
+ "items": {
320
+ "type": "string"
321
+ },
314
322
  "description": "Question ids from run-questions.json."
315
323
  },
316
- "resolvedAt": { "type": "string", "format": "date-time" }
324
+ "resolvedAt": {
325
+ "type": "string",
326
+ "format": "date-time"
327
+ }
317
328
  }
318
329
  },
319
330
  "pendingQuestion": {
@@ -338,7 +349,9 @@
338
349
  "maxLength": 2000,
339
350
  "description": "The question as the step would have asked it, in outputLanguage."
340
351
  },
341
- "kind": { "enum": ["single-select", "multi-select"] },
352
+ "kind": {
353
+ "enum": ["single-select", "multi-select"]
354
+ },
342
355
  "options": {
343
356
  "type": "array",
344
357
  "minItems": 2,
@@ -347,12 +360,21 @@
347
360
  "additionalProperties": false,
348
361
  "required": ["id", "label"],
349
362
  "properties": {
350
- "id": { "type": "string", "pattern": "^[a-z0-9][a-z0-9+_-]*$" },
351
- "label": { "type": "string", "minLength": 1 }
363
+ "id": {
364
+ "type": "string",
365
+ "pattern": "^[a-z0-9][a-z0-9+_-]*$"
366
+ },
367
+ "label": {
368
+ "type": "string",
369
+ "minLength": 1
370
+ }
352
371
  }
353
372
  }
354
373
  },
355
- "askedAt": { "type": "string", "format": "date-time" }
374
+ "askedAt": {
375
+ "type": "string",
376
+ "format": "date-time"
377
+ }
356
378
  }
357
379
  },
358
380
  "research": {
@@ -366,10 +388,19 @@
366
388
  "minimum": 1,
367
389
  "description": "Passes applied to this run so far. The runner's own ceiling across runs of one item is autopilot config maxAskRounds, counted from attempted.jsonl."
368
390
  },
369
- "kind": { "enum": ["maturity", "open-questions"] },
370
- "decision": { "enum": ["proceed", "ask"] },
371
- "reason": { "type": "string" },
372
- "dir": { "type": "string", "minLength": 1 },
391
+ "kind": {
392
+ "enum": ["maturity", "open-questions"]
393
+ },
394
+ "decision": {
395
+ "enum": ["proceed", "ask"]
396
+ },
397
+ "reason": {
398
+ "type": "string"
399
+ },
400
+ "dir": {
401
+ "type": "string",
402
+ "minLength": 1
403
+ },
373
404
  "json": {
374
405
  "type": "string",
375
406
  "minLength": 1,
@@ -391,19 +422,47 @@
391
422
  "additionalProperties": false,
392
423
  "required": ["id", "category", "status"],
393
424
  "properties": {
394
- "id": { "type": "string" },
395
- "category": { "type": "string" },
396
- "status": { "enum": ["closed", "candidate", "open"] },
397
- "sources": { "type": "array", "items": { "type": "object" } }
425
+ "id": {
426
+ "type": "string"
427
+ },
428
+ "category": {
429
+ "type": "string"
430
+ },
431
+ "status": {
432
+ "enum": ["closed", "candidate", "open"]
433
+ },
434
+ "sources": {
435
+ "type": "array",
436
+ "items": {
437
+ "type": "object"
438
+ }
439
+ }
398
440
  }
399
441
  }
400
442
  },
401
- "closed": { "type": "array", "items": { "type": "string" } },
402
- "candidates": { "type": "array", "items": { "type": "string" } },
403
- "open": { "type": "array", "items": { "type": "string" } },
443
+ "closed": {
444
+ "type": "array",
445
+ "items": {
446
+ "type": "string"
447
+ }
448
+ },
449
+ "candidates": {
450
+ "type": "array",
451
+ "items": {
452
+ "type": "string"
453
+ }
454
+ },
455
+ "open": {
456
+ "type": "array",
457
+ "items": {
458
+ "type": "string"
459
+ }
460
+ },
404
461
  "ignored": {
405
462
  "type": "array",
406
- "items": { "type": "string" },
463
+ "items": {
464
+ "type": "string"
465
+ },
407
466
  "description": "Finding gap ids the run does not have."
408
467
  },
409
468
  "resolved": {
@@ -414,16 +473,34 @@
414
473
  "additionalProperties": false,
415
474
  "required": ["id", "question", "answer", "sources"],
416
475
  "properties": {
417
- "id": { "type": "string" },
418
- "question": { "type": "string" },
419
- "answer": { "type": "string" },
420
- "sources": { "type": "array", "items": { "type": "object" } }
476
+ "id": {
477
+ "type": "string"
478
+ },
479
+ "question": {
480
+ "type": "string"
481
+ },
482
+ "answer": {
483
+ "type": "string"
484
+ },
485
+ "sources": {
486
+ "type": "array",
487
+ "items": {
488
+ "type": "object"
489
+ }
490
+ }
421
491
  }
422
492
  }
423
493
  },
424
- "maturityBefore": { "type": ["object", "null"] },
425
- "maturityAfter": { "type": ["object", "null"] },
426
- "at": { "type": "string", "format": "date-time" }
494
+ "maturityBefore": {
495
+ "type": ["object", "null"]
496
+ },
497
+ "maturityAfter": {
498
+ "type": ["object", "null"]
499
+ },
500
+ "at": {
501
+ "type": "string",
502
+ "format": "date-time"
503
+ }
427
504
  }
428
505
  },
429
506
  "lastAnswer": {
@@ -432,10 +509,23 @@
432
509
  "required": ["questionId", "stepId", "optionIds", "answeredAt"],
433
510
  "description": "The answer answer-question.mjs recorded when it cleared pendingQuestion. The re-entered step reads it instead of asking again, then leaves it as a trace; the next answer overwrites it.",
434
511
  "properties": {
435
- "questionId": { "type": "string" },
436
- "stepId": { "type": "string" },
437
- "optionIds": { "type": "array", "minItems": 1, "items": { "type": "string" } },
438
- "answeredAt": { "type": "string", "format": "date-time" }
512
+ "questionId": {
513
+ "type": "string"
514
+ },
515
+ "stepId": {
516
+ "type": "string"
517
+ },
518
+ "optionIds": {
519
+ "type": "array",
520
+ "minItems": 1,
521
+ "items": {
522
+ "type": "string"
523
+ }
524
+ },
525
+ "answeredAt": {
526
+ "type": "string",
527
+ "format": "date-time"
528
+ }
439
529
  }
440
530
  },
441
531
  "remoteType": {
@@ -459,7 +549,9 @@
459
549
  },
460
550
  "instructionFiles": {
461
551
  "type": "object",
462
- "additionalProperties": { "type": "string" },
552
+ "additionalProperties": {
553
+ "type": "string"
554
+ },
463
555
  "description": "Instruction files steering an instruction-driven run, keyed by the step they replace (start, validate, dev, commit). Empty when instructionDriven is false."
464
556
  },
465
557
  "contextLinks": {
@@ -482,8 +574,12 @@
482
574
  "generic-doc"
483
575
  ]
484
576
  },
485
- "url": { "type": ["string", "null"] },
486
- "metadata": { "type": "object" }
577
+ "url": {
578
+ "type": ["string", "null"]
579
+ },
580
+ "metadata": {
581
+ "type": "object"
582
+ }
487
583
  }
488
584
  }
489
585
  },
@@ -570,23 +666,45 @@
570
666
  "type": "object",
571
667
  "required": ["remote", "slug"],
572
668
  "properties": {
573
- "remote": { "type": "string" },
574
- "slug": { "type": "string" },
575
- "stack": { "type": "string" },
576
- "branch": { "type": "string" },
577
- "sha": { "type": "string" },
578
- "stale": { "type": "boolean" },
579
- "error": { "type": "string" },
669
+ "remote": {
670
+ "type": "string"
671
+ },
672
+ "slug": {
673
+ "type": "string"
674
+ },
675
+ "stack": {
676
+ "type": "string"
677
+ },
678
+ "branch": {
679
+ "type": "string"
680
+ },
681
+ "sha": {
682
+ "type": "string"
683
+ },
684
+ "stale": {
685
+ "type": "boolean"
686
+ },
687
+ "error": {
688
+ "type": "string"
689
+ },
580
690
  "keys": {
581
691
  "type": "array",
582
692
  "items": {
583
693
  "type": "object",
584
694
  "required": ["key", "status"],
585
695
  "properties": {
586
- "key": { "type": "string" },
587
- "status": { "enum": ["implemented", "not-yet-implemented", "diverges", "error"] },
588
- "hits": { "type": "array" },
589
- "note": { "type": "string" }
696
+ "key": {
697
+ "type": "string"
698
+ },
699
+ "status": {
700
+ "enum": ["implemented", "not-yet-implemented", "diverges", "error"]
701
+ },
702
+ "hits": {
703
+ "type": "array"
704
+ },
705
+ "note": {
706
+ "type": "string"
707
+ }
590
708
  }
591
709
  }
592
710
  }
@@ -698,22 +816,30 @@
698
816
  },
699
817
  "toolkits": {
700
818
  "type": "array",
701
- "items": { "type": "object" },
819
+ "items": {
820
+ "type": "object"
821
+ },
702
822
  "description": "Kept toolkits with name, version, source and reason."
703
823
  },
704
824
  "excluded": {
705
825
  "type": "array",
706
- "items": { "type": "object" },
826
+ "items": {
827
+ "type": "object"
828
+ },
707
829
  "description": "Inherited toolkits dropped for contradicting the detected stack, each with its reason."
708
830
  },
709
831
  "hints": {
710
832
  "type": "array",
711
- "items": { "type": "object" },
833
+ "items": {
834
+ "type": "object"
835
+ },
712
836
  "description": "Detected stacks with no enabled toolkit, each with the /multi-agent:stack line to enable one."
713
837
  },
714
838
  "fallbacks": {
715
839
  "type": "array",
716
- "items": { "type": "object" },
840
+ "items": {
841
+ "type": "object"
842
+ },
717
843
  "description": "Unattended and autopilot runs only: toolkits read read-only from a marketplace clone (with reportLine), or the recorded gap when no clone carries one."
718
844
  }
719
845
  }
@@ -822,7 +948,9 @@
822
948
  "openQuestions": {
823
949
  "type": "array",
824
950
  "description": "Section 20 rows Phase 1 Step 5 deferred. open-questions-gate.mjs parks a gated run on a non-empty list and passes on an empty one; absent means no analysis recorded any.",
825
- "items": { "type": ["string", "object"] }
951
+ "items": {
952
+ "type": ["string", "object"]
953
+ }
826
954
  },
827
955
  "assumptions": {
828
956
  "type": "array",
@@ -832,9 +960,16 @@
832
960
  "additionalProperties": false,
833
961
  "required": ["question", "source", "assumedAt"],
834
962
  "properties": {
835
- "question": { "type": "string" },
836
- "source": { "type": "string" },
837
- "assumedAt": { "type": "string", "format": "date-time" }
963
+ "question": {
964
+ "type": "string"
965
+ },
966
+ "source": {
967
+ "type": "string"
968
+ },
969
+ "assumedAt": {
970
+ "type": "string",
971
+ "format": "date-time"
972
+ }
838
973
  }
839
974
  }
840
975
  }
@@ -883,18 +1018,34 @@
883
1018
  "additionalProperties": false,
884
1019
  "description": "Outcome of `repo-profile.mjs ensure` at Phase 1: where the per-repo profile lives and how this run treated it. The profile itself stays at the path, outside the repo (multi-agent-refs/features/repo-profile.md).",
885
1020
  "properties": {
886
- "path": { "type": "string" },
887
- "action": { "type": "string", "enum": ["loaded", "derived", "rederived"] },
888
- "mode": { "type": "string", "enum": ["attended", "unattended"] },
1021
+ "path": {
1022
+ "type": "string"
1023
+ },
1024
+ "action": {
1025
+ "type": "string",
1026
+ "enum": ["loaded", "derived", "rederived"]
1027
+ },
1028
+ "mode": {
1029
+ "type": "string",
1030
+ "enum": ["attended", "unattended"]
1031
+ },
889
1032
  "confirmed": {
890
1033
  "type": "boolean",
891
1034
  "description": "The profile carried confirmedAt when the run used it."
892
1035
  },
893
- "staleReasons": { "type": "array", "items": { "type": "string" } },
1036
+ "staleReasons": {
1037
+ "type": "array",
1038
+ "items": {
1039
+ "type": "string"
1040
+ }
1041
+ },
894
1042
  "ignored": {
895
1043
  "type": "array",
896
1044
  "description": "Fields the run did not act on, with the confidence policy's reason.",
897
- "items": { "type": "object", "additionalProperties": true }
1045
+ "items": {
1046
+ "type": "object",
1047
+ "additionalProperties": true
1048
+ }
898
1049
  }
899
1050
  }
900
1051
  },
@@ -1257,18 +1408,49 @@
1257
1408
  "type": "string",
1258
1409
  "enum": ["fix", "accept", "escalate"]
1259
1410
  },
1411
+ "rulings": {
1412
+ "type": "array",
1413
+ "description": "Written by rework-rulings.mjs when the rework cap is reached: one ruling per accepted finding still open. escalate stops the run for the user; parked carries the finding into Phase 4 Step 0b and the PR follow-ups.",
1414
+ "items": {
1415
+ "type": "object",
1416
+ "additionalProperties": false,
1417
+ "required": ["ruling", "reason"],
1418
+ "properties": {
1419
+ "fingerprint": { "type": ["string", "null"] },
1420
+ "file": { "type": ["string", "null"] },
1421
+ "line": { "type": ["integer", "null"] },
1422
+ "severity": { "type": ["string", "null"] },
1423
+ "ruling": { "enum": ["escalate", "parked"] },
1424
+ "reason": { "type": "string" },
1425
+ "issue": { "type": "string" }
1426
+ }
1427
+ }
1428
+ },
1260
1429
  "reworkEscalation": {
1261
1430
  "type": "object",
1262
1431
  "additionalProperties": false,
1263
1432
  "required": ["escalate", "fromTier", "toTier", "trigger", "reason"],
1264
1433
  "description": "Written by rework-escalation.mjs --state before the rework dispatch this review sent back: the rung it ran on and why, a refusal included (multi-agent-refs/features/rework-escalation.md).",
1265
1434
  "properties": {
1266
- "escalate": { "type": "boolean" },
1267
- "fromTier": { "type": "string" },
1268
- "toTier": { "type": "string" },
1269
- "trigger": { "enum": ["last-round", "still-present", null] },
1270
- "reason": { "type": "string" },
1271
- "at": { "type": "string", "format": "date-time" }
1435
+ "escalate": {
1436
+ "type": "boolean"
1437
+ },
1438
+ "fromTier": {
1439
+ "type": "string"
1440
+ },
1441
+ "toTier": {
1442
+ "type": "string"
1443
+ },
1444
+ "trigger": {
1445
+ "enum": ["last-round", "still-present", null]
1446
+ },
1447
+ "reason": {
1448
+ "type": "string"
1449
+ },
1450
+ "at": {
1451
+ "type": "string",
1452
+ "format": "date-time"
1453
+ }
1272
1454
  }
1273
1455
  },
1274
1456
  "delta": {
@@ -1537,13 +1719,28 @@
1537
1719
  "additionalProperties": true,
1538
1720
  "description": "valven-rules delivery gate. Phase 2 Gate 6 sets splitRequired when a size or scope rule fails; Phase 4 Step 2.95 records the stacked PRs it opened.",
1539
1721
  "properties": {
1540
- "splitRequired": { "type": "boolean" },
1722
+ "splitRequired": {
1723
+ "type": "boolean"
1724
+ },
1541
1725
  "split": {
1542
1726
  "type": "object",
1543
1727
  "properties": {
1544
- "sliceCount": { "type": "integer", "minimum": 1 },
1545
- "branches": { "type": "array", "items": { "type": "string" } },
1546
- "prs": { "type": "array", "items": { "type": "string" } }
1728
+ "sliceCount": {
1729
+ "type": "integer",
1730
+ "minimum": 1
1731
+ },
1732
+ "branches": {
1733
+ "type": "array",
1734
+ "items": {
1735
+ "type": "string"
1736
+ }
1737
+ },
1738
+ "prs": {
1739
+ "type": "array",
1740
+ "items": {
1741
+ "type": "string"
1742
+ }
1743
+ }
1547
1744
  }
1548
1745
  }
1549
1746
  }
@@ -1881,7 +2078,10 @@
1881
2078
  "flowRuns": {
1882
2079
  "type": "array",
1883
2080
  "description": "Flow-runner run ids (the runId in <RUN_ROOT>/history.jsonl) of the UI scenario runs that verify this task. Channels renders their Xray Test Execution in the 'Test Koşumu (Xray)' block; empty means channels discovers candidate runs instead.",
1884
- "items": { "type": "string", "minLength": 1 }
2081
+ "items": {
2082
+ "type": "string",
2083
+ "minLength": 1
2084
+ }
1885
2085
  }
1886
2086
  }
1887
2087
  },
@@ -2025,8 +2225,12 @@
2025
2225
  "type": "object",
2026
2226
  "additionalProperties": true,
2027
2227
  "properties": {
2028
- "file": { "type": "string" },
2029
- "jiraFilename": { "type": "string" },
2228
+ "file": {
2229
+ "type": "string"
2230
+ },
2231
+ "jiraFilename": {
2232
+ "type": "string"
2233
+ },
2030
2234
  "url": {
2031
2235
  "type": "string",
2032
2236
  "description": "Jira attachment content URL, as jira-attach.sh printed it."
@@ -2037,8 +2241,12 @@
2037
2241
  "type": "object",
2038
2242
  "additionalProperties": true,
2039
2243
  "properties": {
2040
- "file": { "type": "string" },
2041
- "jiraFilename": { "type": "string" },
2244
+ "file": {
2245
+ "type": "string"
2246
+ },
2247
+ "jiraFilename": {
2248
+ "type": "string"
2249
+ },
2042
2250
  "url": {
2043
2251
  "type": "string",
2044
2252
  "description": "Jira attachment content URL, as jira-attach.sh printed it."
@@ -2110,12 +2318,28 @@
2110
2318
  "required": ["round", "digest", "verdict", "at"],
2111
2319
  "description": "The one plan-critique round of this run (refs/features/plan-critic.md), written by plan-critique-gate.mjs and by nothing else while the quality gates are active. digest is the sha256 of the judged critique with its replies; a later invocation with a different digest is refused as a second round. advisory is what Phase 1 carries into the plan and Phase 4 into the PR summary.",
2112
2320
  "properties": {
2113
- "round": { "type": "integer", "const": 1 },
2114
- "path": { "type": "string" },
2115
- "digest": { "type": "string", "pattern": "^[0-9a-f]{64}$" },
2116
- "objectionsDigest": { "type": "string", "pattern": "^[0-9a-f]{64}$" },
2117
- "verdict": { "enum": ["pass", "fail"] },
2118
- "objections": { "type": "integer", "minimum": 0 },
2321
+ "round": {
2322
+ "type": "integer",
2323
+ "const": 1
2324
+ },
2325
+ "path": {
2326
+ "type": "string"
2327
+ },
2328
+ "digest": {
2329
+ "type": "string",
2330
+ "pattern": "^[0-9a-f]{64}$"
2331
+ },
2332
+ "objectionsDigest": {
2333
+ "type": "string",
2334
+ "pattern": "^[0-9a-f]{64}$"
2335
+ },
2336
+ "verdict": {
2337
+ "enum": ["pass", "fail"]
2338
+ },
2339
+ "objections": {
2340
+ "type": "integer",
2341
+ "minimum": 0
2342
+ },
2119
2343
  "blocking": {
2120
2344
  "type": "array",
2121
2345
  "items": {
@@ -2123,9 +2347,15 @@
2123
2347
  "additionalProperties": false,
2124
2348
  "required": ["objection", "rule", "reason"],
2125
2349
  "properties": {
2126
- "objection": { "type": "string" },
2127
- "rule": { "type": "string" },
2128
- "reason": { "type": "string" }
2350
+ "objection": {
2351
+ "type": "string"
2352
+ },
2353
+ "rule": {
2354
+ "type": "string"
2355
+ },
2356
+ "reason": {
2357
+ "type": "string"
2358
+ }
2129
2359
  }
2130
2360
  }
2131
2361
  },
@@ -2136,17 +2366,34 @@
2136
2366
  "additionalProperties": false,
2137
2367
  "required": ["objection", "lens", "claim", "label", "reply"],
2138
2368
  "properties": {
2139
- "objection": { "type": "string" },
2140
- "lens": { "enum": ["scope", "feasibility", "security", "alternative"] },
2141
- "claim": { "type": "string" },
2142
- "label": { "enum": ["anchored", "inference"] },
2143
- "rule": { "type": "string" },
2144
- "ruleStatus": { "enum": ["binding", "proposed", "unknown", "unchecked"] },
2145
- "reply": { "enum": ["accept", "rebut", null] }
2369
+ "objection": {
2370
+ "type": "string"
2371
+ },
2372
+ "lens": {
2373
+ "enum": ["scope", "feasibility", "security", "alternative"]
2374
+ },
2375
+ "claim": {
2376
+ "type": "string"
2377
+ },
2378
+ "label": {
2379
+ "enum": ["anchored", "inference"]
2380
+ },
2381
+ "rule": {
2382
+ "type": "string"
2383
+ },
2384
+ "ruleStatus": {
2385
+ "enum": ["binding", "proposed", "unknown", "unchecked"]
2386
+ },
2387
+ "reply": {
2388
+ "enum": ["accept", "rebut", null]
2389
+ }
2146
2390
  }
2147
2391
  }
2148
2392
  },
2149
- "at": { "type": "string", "format": "date-time" }
2393
+ "at": {
2394
+ "type": "string",
2395
+ "format": "date-time"
2396
+ }
2150
2397
  }
2151
2398
  },
2152
2399
  "publish": {
@@ -2155,12 +2402,25 @@
2155
2402
  "required": ["outcome", "at"],
2156
2403
  "description": "Written by the autopilot runner's publish step (autopilot-publish.mjs) when it pushed a verified branch to a host with no draft PR. The runner reports it as pushed-awaiting-pr. A GitHub publish writes `pr` instead; a refused one writes `verificationFailed` with a `publish/<gate>` gate.",
2157
2404
  "properties": {
2158
- "outcome": { "const": "pushed-awaiting-pr" },
2159
- "at": { "type": "string", "format": "date-time" },
2160
- "host": { "type": "string" },
2161
- "branch": { "type": "string" },
2162
- "base": { "type": "string" },
2163
- "sha": { "type": "string" }
2405
+ "outcome": {
2406
+ "const": "pushed-awaiting-pr"
2407
+ },
2408
+ "at": {
2409
+ "type": "string",
2410
+ "format": "date-time"
2411
+ },
2412
+ "host": {
2413
+ "type": "string"
2414
+ },
2415
+ "branch": {
2416
+ "type": "string"
2417
+ },
2418
+ "base": {
2419
+ "type": "string"
2420
+ },
2421
+ "sha": {
2422
+ "type": "string"
2423
+ }
2164
2424
  }
2165
2425
  },
2166
2426
  "jiraFamily": {
@@ -2168,19 +2428,46 @@
2168
2428
  "additionalProperties": false,
2169
2429
  "description": "The issue family of a run that started from a Jira story or sub-task (multi-agent-refs/features/jira-family.md), written by Phase 0 from scripts/jira-family.mjs resolve and read by the channels Jira adapter. writes[] is the outcome of lib/jira-family-write.sh apply.",
2170
2430
  "properties": {
2171
- "inputKey": { "type": ["string", "null"] },
2172
- "inputRole": { "enum": ["subtask", "story"] },
2173
- "storyKey": { "type": ["string", "null"] },
2174
- "devTaskKey": { "type": ["string", "null"] },
2175
- "devCandidates": { "type": "array", "items": { "type": "string" } },
2176
- "testTaskKey": { "type": ["string", "null"] },
2177
- "testCandidates": { "type": "array", "items": { "type": "string" } },
2431
+ "inputKey": {
2432
+ "type": ["string", "null"]
2433
+ },
2434
+ "inputRole": {
2435
+ "enum": ["subtask", "story"]
2436
+ },
2437
+ "storyKey": {
2438
+ "type": ["string", "null"]
2439
+ },
2440
+ "devTaskKey": {
2441
+ "type": ["string", "null"]
2442
+ },
2443
+ "devCandidates": {
2444
+ "type": "array",
2445
+ "items": {
2446
+ "type": "string"
2447
+ }
2448
+ },
2449
+ "testTaskKey": {
2450
+ "type": ["string", "null"]
2451
+ },
2452
+ "testCandidates": {
2453
+ "type": "array",
2454
+ "items": {
2455
+ "type": "string"
2456
+ }
2457
+ },
2178
2458
  "storyFormat": {
2179
2459
  "type": "object",
2180
2460
  "additionalProperties": false,
2181
2461
  "properties": {
2182
- "status": { "enum": ["conforms", "nonconforming", "empty", "unknown", "not-a-story"] },
2183
- "reasons": { "type": "array", "items": { "type": "string" } }
2462
+ "status": {
2463
+ "enum": ["conforms", "nonconforming", "empty", "unknown", "not-a-story"]
2464
+ },
2465
+ "reasons": {
2466
+ "type": "array",
2467
+ "items": {
2468
+ "type": "string"
2469
+ }
2470
+ }
2184
2471
  }
2185
2472
  },
2186
2473
  "writes": {
@@ -2190,10 +2477,18 @@
2190
2477
  "additionalProperties": false,
2191
2478
  "required": ["id", "issue", "status"],
2192
2479
  "properties": {
2193
- "id": { "enum": ["story", "dev", "test", "story-tests"] },
2194
- "issue": { "type": "string" },
2195
- "status": { "enum": ["written", "exists", "skipped", "failed", "dry-run"] },
2196
- "reason": { "type": "string" }
2480
+ "id": {
2481
+ "enum": ["story", "dev", "test", "story-tests"]
2482
+ },
2483
+ "issue": {
2484
+ "type": "string"
2485
+ },
2486
+ "status": {
2487
+ "enum": ["written", "exists", "skipped", "failed", "dry-run"]
2488
+ },
2489
+ "reason": {
2490
+ "type": "string"
2491
+ }
2197
2492
  }
2198
2493
  }
2199
2494
  }
@@ -2207,11 +2502,30 @@
2207
2502
  "additionalProperties": false,
2208
2503
  "required": ["what", "why", "costIfWrong", "at", "phase"],
2209
2504
  "properties": {
2210
- "what": { "type": "string", "minLength": 1, "maxLength": 200 },
2211
- "why": { "type": "string", "minLength": 1, "maxLength": 500 },
2212
- "costIfWrong": { "type": "string", "minLength": 1, "maxLength": 300 },
2213
- "at": { "type": "string", "format": "date-time" },
2214
- "phase": { "type": "integer", "minimum": 0, "maximum": 5 }
2505
+ "what": {
2506
+ "type": "string",
2507
+ "minLength": 1,
2508
+ "maxLength": 200
2509
+ },
2510
+ "why": {
2511
+ "type": "string",
2512
+ "minLength": 1,
2513
+ "maxLength": 500
2514
+ },
2515
+ "costIfWrong": {
2516
+ "type": "string",
2517
+ "minLength": 1,
2518
+ "maxLength": 300
2519
+ },
2520
+ "at": {
2521
+ "type": "string",
2522
+ "format": "date-time"
2523
+ },
2524
+ "phase": {
2525
+ "type": "integer",
2526
+ "minimum": 0,
2527
+ "maximum": 5
2528
+ }
2215
2529
  }
2216
2530
  }
2217
2531
  },
@@ -2330,6 +2644,88 @@
2330
2644
  "type": ["object", "null"],
2331
2645
  "additionalProperties": true,
2332
2646
  "description": "Answers and progress of a /multi-agent:complaint-analysis run. Shape: complaint-analysis-spec.schema.json."
2647
+ },
2648
+ "channelResults": {
2649
+ "type": ["object", "null"],
2650
+ "additionalProperties": false,
2651
+ "description": "What Phase 5's channels dispatch did, per adapter: posted, skipped or failed, and the address of what was posted. Written once the dispatch returns, so readers outside the session (the office, status) can show where the report went.",
2652
+ "properties": {
2653
+ "pr": {
2654
+ "type": "object",
2655
+ "additionalProperties": false,
2656
+ "required": ["status"],
2657
+ "properties": {
2658
+ "status": {
2659
+ "enum": ["posted", "skipped", "failed"]
2660
+ },
2661
+ "url": {
2662
+ "type": "string",
2663
+ "format": "uri",
2664
+ "pattern": "^https://"
2665
+ }
2666
+ }
2667
+ },
2668
+ "jira": {
2669
+ "type": "object",
2670
+ "additionalProperties": false,
2671
+ "required": ["status"],
2672
+ "properties": {
2673
+ "status": {
2674
+ "enum": ["posted", "skipped", "failed"]
2675
+ },
2676
+ "url": {
2677
+ "type": "string",
2678
+ "format": "uri",
2679
+ "pattern": "^https://"
2680
+ }
2681
+ }
2682
+ },
2683
+ "confluence": {
2684
+ "type": "object",
2685
+ "additionalProperties": false,
2686
+ "required": ["status"],
2687
+ "properties": {
2688
+ "status": {
2689
+ "enum": ["posted", "skipped", "failed"]
2690
+ },
2691
+ "url": {
2692
+ "type": "string",
2693
+ "format": "uri",
2694
+ "pattern": "^https://"
2695
+ }
2696
+ }
2697
+ },
2698
+ "wiki": {
2699
+ "type": "object",
2700
+ "additionalProperties": false,
2701
+ "required": ["status"],
2702
+ "properties": {
2703
+ "status": {
2704
+ "enum": ["posted", "skipped", "failed"]
2705
+ },
2706
+ "url": {
2707
+ "type": "string",
2708
+ "format": "uri",
2709
+ "pattern": "^https://"
2710
+ }
2711
+ }
2712
+ },
2713
+ "issue": {
2714
+ "type": "object",
2715
+ "additionalProperties": false,
2716
+ "required": ["status"],
2717
+ "properties": {
2718
+ "status": {
2719
+ "enum": ["posted", "skipped", "failed"]
2720
+ },
2721
+ "url": {
2722
+ "type": "string",
2723
+ "format": "uri",
2724
+ "pattern": "^https://"
2725
+ }
2726
+ }
2727
+ }
2728
+ }
2333
2729
  }
2334
2730
  }
2335
2731
  }