@mmerterden/multi-agent-pipeline 12.6.0 → 12.8.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 (481) hide show
  1. package/CHANGELOG.md +209 -0
  2. package/README.md +18 -18
  3. package/docs/FIGMA_PIPELINE.md +34 -34
  4. package/docs/adr/0001-three-model-triage.md +12 -12
  5. package/docs/adr/0002-instruction-driven-flag.md +5 -5
  6. package/docs/adr/0003-unified-shared-skills.md +5 -5
  7. package/docs/adr/0004-zero-dependency-philosophy.md +5 -5
  8. package/docs/adr/0005-lazy-phase-docs.md +2 -2
  9. package/docs/adr/0006-skills-core-external-split.md +6 -6
  10. package/docs/adr/0007-multi-tool-adapter-framework.md +19 -19
  11. package/docs/adr/0008-installer-modularization-and-secret-leak-defense.md +19 -19
  12. package/docs/adr/README.md +1 -1
  13. package/docs/best-practices.md +3 -3
  14. package/docs/features.md +28 -28
  15. package/docs/performance.md +16 -16
  16. package/docs/recovery-guide.md +39 -39
  17. package/index.js +4 -4
  18. package/install/_common.mjs +53 -11
  19. package/install/_copilot-instructions.mjs +2 -2
  20. package/install/_dev-only-files.mjs +126 -6
  21. package/install/_platform-filter.mjs +1 -1
  22. package/install/_telemetry.mjs +1 -1
  23. package/install/claude.mjs +20 -13
  24. package/install/copilot.mjs +11 -23
  25. package/install/index.mjs +7 -15
  26. package/install/templates/copilot-instructions.md +54 -54
  27. package/install.js +1 -1
  28. package/package.json +29 -11
  29. package/pipeline/commands/multi-agent/SKILL.md +1 -1
  30. package/pipeline/commands/multi-agent/analysis/SKILL.md +2 -2
  31. package/pipeline/commands/multi-agent/analysis-resolve/SKILL.md +1 -1
  32. package/pipeline/commands/multi-agent/autopilot/SKILL.md +1 -1
  33. package/pipeline/commands/multi-agent/build-optimize/SKILL.md +1 -1
  34. package/pipeline/commands/multi-agent/create-jira/SKILL.md +1 -1
  35. package/pipeline/commands/multi-agent/design-check/SKILL.md +1 -1
  36. package/pipeline/commands/multi-agent/dev/SKILL.md +1 -1
  37. package/pipeline/commands/multi-agent/dev-autopilot/SKILL.md +1 -1
  38. package/pipeline/commands/multi-agent/dev-local/SKILL.md +1 -1
  39. package/pipeline/commands/multi-agent/dev-local-autopilot/SKILL.md +1 -1
  40. package/pipeline/commands/multi-agent/diff-explain/SKILL.md +1 -1
  41. package/pipeline/commands/multi-agent/finish/SKILL.md +6 -6
  42. package/pipeline/commands/multi-agent/forget/SKILL.md +1 -1
  43. package/pipeline/commands/multi-agent/garbage-collect/SKILL.md +1 -1
  44. package/pipeline/commands/multi-agent/help/SKILL.md +3 -3
  45. package/pipeline/commands/multi-agent/issue/SKILL.md +1 -1
  46. package/pipeline/commands/multi-agent/jira/SKILL.md +1 -1
  47. package/pipeline/commands/multi-agent/kill/SKILL.md +1 -1
  48. package/pipeline/commands/multi-agent/language/SKILL.md +1 -1
  49. package/pipeline/commands/multi-agent/local/SKILL.md +1 -1
  50. package/pipeline/commands/multi-agent/local-autopilot/SKILL.md +1 -1
  51. package/pipeline/commands/multi-agent/log/SKILL.md +1 -1
  52. package/pipeline/commands/multi-agent/manual-test/SKILL.md +1 -1
  53. package/pipeline/commands/multi-agent/prune-logs/SKILL.md +1 -1
  54. package/pipeline/commands/multi-agent/purge/SKILL.md +1 -1
  55. package/pipeline/commands/multi-agent/refactor/SKILL.md +16 -8
  56. package/pipeline/commands/multi-agent/resume/SKILL.md +2 -2
  57. package/pipeline/commands/multi-agent/review/SKILL.md +1 -1
  58. package/pipeline/commands/multi-agent/review-issue/SKILL.md +1 -1
  59. package/pipeline/commands/multi-agent/review-jira/SKILL.md +1 -1
  60. package/pipeline/commands/multi-agent/routines/SKILL.md +1 -1
  61. package/pipeline/commands/multi-agent/save/SKILL.md +1 -1
  62. package/pipeline/commands/multi-agent/scan/SKILL.md +1 -1
  63. package/pipeline/commands/multi-agent/search/SKILL.md +1 -1
  64. package/pipeline/commands/multi-agent/setup/SKILL.md +2 -2
  65. package/pipeline/commands/multi-agent/stack/SKILL.md +3 -3
  66. package/pipeline/commands/multi-agent/status/SKILL.md +1 -1
  67. package/pipeline/commands/multi-agent/sync/SKILL.md +5 -5
  68. package/pipeline/commands/multi-agent/test/SKILL.md +1 -1
  69. package/pipeline/commands/multi-agent/uninstall/SKILL.md +1 -1
  70. package/pipeline/commands/multi-agent/update/SKILL.md +3 -3
  71. package/pipeline/lib/account-resolver.sh +1 -1
  72. package/pipeline/lib/channels-multi-repo.sh +1 -1
  73. package/pipeline/lib/context-link-extractor.sh +1 -1
  74. package/pipeline/lib/credential-store.sh +21 -1
  75. package/pipeline/lib/fetch-confluence.sh +1 -1
  76. package/pipeline/lib/fetch-crashlytics.sh +1 -1
  77. package/pipeline/lib/fetch-fortify.sh +1 -1
  78. package/pipeline/lib/fetch-graylog.sh +1 -1
  79. package/pipeline/lib/fetch-swagger.sh +1 -1
  80. package/pipeline/lib/issue-fetcher.sh +1 -1
  81. package/pipeline/lib/multi-repo-pipeline.sh +1 -1
  82. package/pipeline/lib/repo-cache.sh +1 -1
  83. package/pipeline/lib/submodule-detector.sh +1 -1
  84. package/pipeline/multi-agent-refs/_account-picker.md +1 -1
  85. package/pipeline/multi-agent-refs/_dev-context.md +1 -1
  86. package/pipeline/multi-agent-refs/_repo-picker.md +1 -1
  87. package/pipeline/multi-agent-refs/component-dispatch.md +1 -1
  88. package/pipeline/multi-agent-refs/component-generation.md +121 -0
  89. package/pipeline/multi-agent-refs/cross-cli-contract.md +1 -1
  90. package/pipeline/multi-agent-refs/features/model-fallback.md +2 -2
  91. package/pipeline/multi-agent-refs/phases/operations.md +28 -0
  92. package/pipeline/multi-agent-refs/phases/phase-0-init.md +1 -0
  93. package/pipeline/multi-agent-refs/phases/phase-2-planning.md +1 -1
  94. package/pipeline/multi-agent-refs/phases/phase-3-dev.md +1 -2
  95. package/pipeline/multi-agent-refs/phases/phase-4-review.md +50 -5
  96. package/pipeline/preferences-template.json +5 -11
  97. package/pipeline/schemas/agent-state.schema.json +39 -9
  98. package/pipeline/schemas/analysis-output.schema.json +18 -4
  99. package/pipeline/schemas/analysis-spec.schema.json +120 -32
  100. package/pipeline/schemas/clarify-output.schema.json +15 -5
  101. package/pipeline/schemas/design-check-config.schema.json +32 -11
  102. package/pipeline/schemas/dev-critic-output.schema.json +20 -5
  103. package/pipeline/schemas/figma-project-config.schema.json +42 -10
  104. package/pipeline/schemas/learnings-ledger.schema.json +10 -2
  105. package/pipeline/schemas/migrations/figma-config-1.0.0-to-2.0.0.mjs +1 -4
  106. package/pipeline/schemas/migrations/prefs-2.0.0-to-2.1.0.mjs +24 -7
  107. package/pipeline/schemas/plan-todos.schema.json +6 -3
  108. package/pipeline/schemas/planning-output.schema.json +5 -1
  109. package/pipeline/schemas/prefs.schema.json +97 -229
  110. package/pipeline/schemas/test-gap.schema.json +5 -5
  111. package/pipeline/schemas/token-budget.json +8 -8
  112. package/pipeline/schemas/triage-corpus.schema.json +1 -1
  113. package/pipeline/scripts/_smoke-root.sh +61 -0
  114. package/pipeline/scripts/aggregate-metrics.mjs +18 -6
  115. package/pipeline/scripts/audit-log.sh +25 -0
  116. package/pipeline/scripts/build-skills-index.mjs +6 -2
  117. package/pipeline/scripts/build-stack-plugins.mjs +142 -39
  118. package/pipeline/scripts/check-derived-drift.mjs +196 -0
  119. package/pipeline/scripts/classify-plan-safety.mjs +20 -7
  120. package/pipeline/scripts/cost-budget-check.mjs +2 -1
  121. package/pipeline/scripts/cost-table.json +1 -1
  122. package/pipeline/scripts/diff-explain.mjs +7 -3
  123. package/pipeline/scripts/diff-risk-score.mjs +13 -3
  124. package/pipeline/scripts/evidence-gate.mjs +7 -2
  125. package/pipeline/scripts/gen-mode-dispatch.mjs +38 -21
  126. package/pipeline/scripts/gen-skills-index.mjs +18 -3
  127. package/pipeline/scripts/learning-curve.mjs +13 -3
  128. package/pipeline/scripts/learnings-ledger.mjs +103 -36
  129. package/pipeline/scripts/localize-commands.mjs +6 -1
  130. package/pipeline/scripts/match-skills.mjs +15 -4
  131. package/pipeline/scripts/migrate-prefs.mjs +33 -16
  132. package/pipeline/scripts/phase-tracker.sh +3 -1
  133. package/pipeline/scripts/repo-map.mjs +110 -64
  134. package/pipeline/scripts/review-scope.mjs +7 -1
  135. package/pipeline/scripts/routine-registry.mjs +4 -9
  136. package/pipeline/scripts/run-aggregator.mjs +11 -5
  137. package/pipeline/scripts/run-metrics.mjs +13 -8
  138. package/pipeline/scripts/smoke-cross-cli-behavior.sh +21 -7
  139. package/pipeline/scripts/test-gap-scan.mjs +44 -12
  140. package/pipeline/scripts/test-integrity-gate.mjs +5 -1
  141. package/pipeline/scripts/token-budget-report.mjs +44 -21
  142. package/pipeline/scripts/triage-memory.mjs +126 -34
  143. package/pipeline/scripts/uninstall.mjs +74 -30
  144. package/pipeline/scripts/validate-analysis-doc.mjs +15 -5
  145. package/pipeline/scripts/validate-diff-risk.mjs +32 -18
  146. package/pipeline/scripts/validate-test-gap.mjs +17 -7
  147. package/pipeline/scripts/validate-triage.mjs +17 -5
  148. package/pipeline/scripts/write-state.mjs +32 -9
  149. package/pipeline/skills/.skills-index.json +91 -91
  150. package/pipeline/skills/shared/README.md +57 -57
  151. package/pipeline/skills/shared/core/apple-archive-compliance/SKILL.md +1 -1
  152. package/pipeline/skills/shared/core/google-play-compliance/SKILL.md +1 -1
  153. package/pipeline/skills/shared/core/multi-agent/SKILL.md +26 -279
  154. package/pipeline/skills/shared/core/multi-agent-analysis/SKILL.md +1 -1
  155. package/pipeline/skills/shared/core/multi-agent-analysis-resolve/SKILL.md +1 -1
  156. package/pipeline/skills/shared/core/multi-agent-autopilot/SKILL.md +1 -1
  157. package/pipeline/skills/shared/core/multi-agent-build-optimize/SKILL.md +1 -1
  158. package/pipeline/skills/shared/core/multi-agent-create-jira/SKILL.md +1 -1
  159. package/pipeline/skills/shared/core/multi-agent-design-check/SKILL.md +1 -1
  160. package/pipeline/skills/shared/core/multi-agent-dev/SKILL.md +1 -1
  161. package/pipeline/skills/shared/core/multi-agent-dev-autopilot/SKILL.md +1 -1
  162. package/pipeline/skills/shared/core/multi-agent-dev-local/SKILL.md +1 -1
  163. package/pipeline/skills/shared/core/multi-agent-dev-local-autopilot/SKILL.md +1 -1
  164. package/pipeline/skills/shared/core/multi-agent-diff-explain/SKILL.md +1 -1
  165. package/pipeline/skills/shared/core/multi-agent-finish/SKILL.md +1 -1
  166. package/pipeline/skills/shared/core/multi-agent-forget/SKILL.md +1 -1
  167. package/pipeline/skills/shared/core/multi-agent-garbage-collect/SKILL.md +1 -1
  168. package/pipeline/skills/shared/core/multi-agent-help/SKILL.md +1 -1
  169. package/pipeline/skills/shared/core/multi-agent-issue/SKILL.md +1 -1
  170. package/pipeline/skills/shared/core/multi-agent-jira/SKILL.md +1 -1
  171. package/pipeline/skills/shared/core/multi-agent-kill/SKILL.md +1 -1
  172. package/pipeline/skills/shared/core/multi-agent-language/SKILL.md +1 -1
  173. package/pipeline/skills/shared/core/multi-agent-local/SKILL.md +1 -1
  174. package/pipeline/skills/shared/core/multi-agent-local-autopilot/SKILL.md +1 -1
  175. package/pipeline/skills/shared/core/multi-agent-log/SKILL.md +1 -1
  176. package/pipeline/skills/shared/core/multi-agent-manual-test/SKILL.md +1 -1
  177. package/pipeline/skills/shared/core/multi-agent-prune-logs/SKILL.md +1 -1
  178. package/pipeline/skills/shared/core/multi-agent-purge/SKILL.md +1 -1
  179. package/pipeline/skills/shared/core/multi-agent-refactor/SKILL.md +16 -8
  180. package/pipeline/skills/shared/core/multi-agent-resume/SKILL.md +1 -1
  181. package/pipeline/skills/shared/core/multi-agent-review/SKILL.md +1 -1
  182. package/pipeline/skills/shared/core/multi-agent-review-issue/SKILL.md +1 -1
  183. package/pipeline/skills/shared/core/multi-agent-review-jira/SKILL.md +1 -1
  184. package/pipeline/skills/shared/core/multi-agent-routines/SKILL.md +1 -1
  185. package/pipeline/skills/shared/core/multi-agent-save/SKILL.md +1 -1
  186. package/pipeline/skills/shared/core/multi-agent-scan/SKILL.md +1 -1
  187. package/pipeline/skills/shared/core/multi-agent-search/SKILL.md +1 -1
  188. package/pipeline/skills/shared/core/multi-agent-setup/SKILL.md +1 -1
  189. package/pipeline/skills/shared/core/multi-agent-stack/SKILL.md +3 -3
  190. package/pipeline/skills/shared/core/multi-agent-status/SKILL.md +1 -1
  191. package/pipeline/skills/shared/core/multi-agent-sync/SKILL.md +1 -1
  192. package/pipeline/skills/shared/core/multi-agent-test/SKILL.md +1 -1
  193. package/pipeline/skills/shared/core/multi-agent-uninstall/SKILL.md +1 -1
  194. package/pipeline/skills/shared/core/multi-agent-update/SKILL.md +1 -1
  195. package/pipeline/skills/shared/external/accessibility-compliance-accessibility-audit/SKILL.md +1 -1
  196. package/pipeline/skills/shared/external/agent-introspection-debugging/SKILL.md +4 -4
  197. package/pipeline/skills/shared/external/agentflow/SKILL.md +1 -1
  198. package/pipeline/skills/shared/external/android-jetpack-compose-expert/SKILL.md +1 -1
  199. package/pipeline/skills/shared/external/android_ui_verification/SKILL.md +1 -1
  200. package/pipeline/skills/shared/external/api-patterns/SKILL.md +1 -1
  201. package/pipeline/skills/shared/external/api-security-best-practices/SKILL.md +1 -1
  202. package/pipeline/skills/shared/external/app-store-changelog/SKILL.md +1 -1
  203. package/pipeline/skills/shared/external/backlog/BACKLOG.md +1 -1
  204. package/pipeline/skills/shared/external/backlog/SKILL.md +12 -12
  205. package/pipeline/skills/shared/external/ci-cd-pipelines/SKILL.md +1 -1
  206. package/pipeline/skills/shared/external/context-compression/SKILL.md +1 -1
  207. package/pipeline/skills/shared/external/council/SKILL.md +3 -3
  208. package/pipeline/skills/shared/external/css-modern/SKILL.md +1 -1
  209. package/pipeline/skills/shared/external/database-patterns/SKILL.md +1 -1
  210. package/pipeline/skills/shared/external/debugging-strategies/SKILL.md +1 -1
  211. package/pipeline/skills/shared/external/docker-expert/SKILL.md +1 -1
  212. package/pipeline/skills/shared/external/fastapi-pro/SKILL.md +1 -1
  213. package/pipeline/skills/shared/external/firebase/SKILL.md +1 -1
  214. package/pipeline/skills/shared/external/github-actions-templates/SKILL.md +1 -1
  215. package/pipeline/skills/shared/external/help-skills/SKILL.md +1 -1
  216. package/pipeline/skills/shared/external/hig-components-content/SKILL.md +1 -1
  217. package/pipeline/skills/shared/external/hig-components-layout/SKILL.md +1 -1
  218. package/pipeline/skills/shared/external/hig-components-status/SKILL.md +1 -1
  219. package/pipeline/skills/shared/external/hig-components-system/SKILL.md +1 -1
  220. package/pipeline/skills/shared/external/hig-foundations/SKILL.md +1 -1
  221. package/pipeline/skills/shared/external/hig-inputs/SKILL.md +1 -1
  222. package/pipeline/skills/shared/external/hig-patterns/SKILL.md +1 -1
  223. package/pipeline/skills/shared/external/hig-platforms/SKILL.md +1 -1
  224. package/pipeline/skills/shared/external/hig-technologies/SKILL.md +1 -1
  225. package/pipeline/skills/shared/external/html-semantic/SKILL.md +1 -1
  226. package/pipeline/skills/shared/external/humanizer/SKILL.md +1 -1
  227. package/pipeline/skills/shared/external/ios-debugger-agent/SKILL.md +1 -1
  228. package/pipeline/skills/shared/external/ios-developer/SKILL.md +1 -1
  229. package/pipeline/skills/shared/external/kotlin-coroutines-expert/SKILL.md +1 -1
  230. package/pipeline/skills/shared/external/macos-menubar-tuist-app/SKILL.md +1 -1
  231. package/pipeline/skills/shared/external/macos-spm-app-packaging/SKILL.md +1 -1
  232. package/pipeline/skills/shared/external/monorepo-architect/SKILL.md +1 -1
  233. package/pipeline/skills/shared/external/nextjs-app-router/SKILL.md +1 -1
  234. package/pipeline/skills/shared/external/nodejs-backend-patterns/SKILL.md +1 -1
  235. package/pipeline/skills/shared/external/observability-engineer/SKILL.md +1 -1
  236. package/pipeline/skills/shared/external/python-patterns/SKILL.md +1 -1
  237. package/pipeline/skills/shared/external/react-best-practices/SKILL.md +1 -1
  238. package/pipeline/skills/shared/external/rest-api-design/SKILL.md +1 -1
  239. package/pipeline/skills/shared/external/search-first/SKILL.md +2 -2
  240. package/pipeline/skills/shared/external/skill-creator/SKILL.md +12 -12
  241. package/pipeline/skills/shared/external/skill-creator/audit.md +21 -21
  242. package/pipeline/skills/shared/external/skill-creator/checklist.md +3 -3
  243. package/pipeline/skills/shared/external/skill-creator/examples.md +10 -10
  244. package/pipeline/skills/shared/external/skill-creator/label-check.md +17 -17
  245. package/pipeline/skills/shared/external/skill-creator/scripts/audit-panel.js +86 -50
  246. package/pipeline/skills/shared/external/skill-creator/template.md +9 -9
  247. package/pipeline/skills/shared/external/swift-concurrency-expert/SKILL.md +1 -1
  248. package/pipeline/skills/shared/external/swiftui-performance-audit/SKILL.md +1 -1
  249. package/pipeline/skills/shared/external/swiftui-ui-patterns/SKILL.md +1 -1
  250. package/pipeline/skills/shared/external/swiftui-view-refactor/SKILL.md +1 -1
  251. package/pipeline/skills/shared/external/tailwind-css/SKILL.md +1 -1
  252. package/pipeline/skills/shared/external/testing-backend/SKILL.md +1 -1
  253. package/pipeline/skills/shared/external/typescript-patterns/SKILL.md +1 -1
  254. package/pipeline/skills/shared/external/vue-composition/SKILL.md +1 -1
  255. package/pipeline/skills/shared/external/web-accessibility/SKILL.md +1 -1
  256. package/pipeline/skills/shared/external/web-performance/SKILL.md +1 -1
  257. package/pipeline/skills/shared/external/web-testing/SKILL.md +1 -1
  258. package/pipeline/skills/shared/external/xcode-build-benchmark/schemas/build-benchmark.schema.json +9 -49
  259. package/pipeline/skills/skills-index.md +57 -57
  260. package/pipeline/eval/golden-tasks/01-ios-bugfix-darkmode/expected/phase-1-analysis.json +0 -25
  261. package/pipeline/eval/golden-tasks/01-ios-bugfix-darkmode/expected/phase-2-plan.json +0 -30
  262. package/pipeline/eval/golden-tasks/01-ios-bugfix-darkmode/expected/phase-4-review.json +0 -20
  263. package/pipeline/eval/golden-tasks/01-ios-bugfix-darkmode/expected/phase-4-triage.json +0 -15
  264. package/pipeline/eval/golden-tasks/01-ios-bugfix-darkmode/metadata.json +0 -14
  265. package/pipeline/eval/golden-tasks/01-ios-bugfix-darkmode/task.json +0 -12
  266. package/pipeline/eval/golden-tasks/02-android-feature-compose/expected/phase-1-analysis.json +0 -29
  267. package/pipeline/eval/golden-tasks/02-android-feature-compose/expected/phase-2-plan.json +0 -43
  268. package/pipeline/eval/golden-tasks/02-android-feature-compose/expected/phase-4-review.json +0 -35
  269. package/pipeline/eval/golden-tasks/02-android-feature-compose/expected/phase-4-triage.json +0 -35
  270. package/pipeline/eval/golden-tasks/02-android-feature-compose/metadata.json +0 -14
  271. package/pipeline/eval/golden-tasks/02-android-feature-compose/task.json +0 -12
  272. package/pipeline/eval/golden-tasks/03-backend-python-ratelimit/expected/phase-1-analysis.json +0 -29
  273. package/pipeline/eval/golden-tasks/03-backend-python-ratelimit/expected/phase-2-plan.json +0 -42
  274. package/pipeline/eval/golden-tasks/03-backend-python-ratelimit/expected/phase-4-review.json +0 -20
  275. package/pipeline/eval/golden-tasks/03-backend-python-ratelimit/expected/phase-4-triage.json +0 -15
  276. package/pipeline/eval/golden-tasks/03-backend-python-ratelimit/metadata.json +0 -14
  277. package/pipeline/eval/golden-tasks/03-backend-python-ratelimit/task.json +0 -12
  278. package/pipeline/eval/golden-tasks/04-frontend-next-hydration/expected/phase-1-analysis.json +0 -29
  279. package/pipeline/eval/golden-tasks/04-frontend-next-hydration/expected/phase-2-plan.json +0 -40
  280. package/pipeline/eval/golden-tasks/04-frontend-next-hydration/expected/phase-4-review.json +0 -20
  281. package/pipeline/eval/golden-tasks/04-frontend-next-hydration/expected/phase-4-triage.json +0 -15
  282. package/pipeline/eval/golden-tasks/04-frontend-next-hydration/metadata.json +0 -14
  283. package/pipeline/eval/golden-tasks/04-frontend-next-hydration/task.json +0 -12
  284. package/pipeline/eval/golden-tasks/05-ios-security-keychain/expected/phase-1-analysis.json +0 -29
  285. package/pipeline/eval/golden-tasks/05-ios-security-keychain/expected/phase-2-plan.json +0 -42
  286. package/pipeline/eval/golden-tasks/05-ios-security-keychain/expected/phase-4-review.json +0 -28
  287. package/pipeline/eval/golden-tasks/05-ios-security-keychain/expected/phase-4-triage.json +0 -27
  288. package/pipeline/eval/golden-tasks/05-ios-security-keychain/metadata.json +0 -14
  289. package/pipeline/eval/golden-tasks/05-ios-security-keychain/task.json +0 -12
  290. package/pipeline/eval/golden-tasks/06-android-refactor-usecase/expected/phase-1-analysis.json +0 -29
  291. package/pipeline/eval/golden-tasks/06-android-refactor-usecase/expected/phase-2-plan.json +0 -41
  292. package/pipeline/eval/golden-tasks/06-android-refactor-usecase/expected/phase-4-review.json +0 -12
  293. package/pipeline/eval/golden-tasks/06-android-refactor-usecase/expected/phase-4-triage.json +0 -6
  294. package/pipeline/eval/golden-tasks/06-android-refactor-usecase/metadata.json +0 -14
  295. package/pipeline/eval/golden-tasks/06-android-refactor-usecase/task.json +0 -12
  296. package/pipeline/eval/golden-tasks/07-backend-node-idempotency/expected/phase-1-analysis.json +0 -29
  297. package/pipeline/eval/golden-tasks/07-backend-node-idempotency/expected/phase-2-plan.json +0 -42
  298. package/pipeline/eval/golden-tasks/07-backend-node-idempotency/expected/phase-4-review.json +0 -28
  299. package/pipeline/eval/golden-tasks/07-backend-node-idempotency/expected/phase-4-triage.json +0 -27
  300. package/pipeline/eval/golden-tasks/07-backend-node-idempotency/metadata.json +0 -14
  301. package/pipeline/eval/golden-tasks/07-backend-node-idempotency/task.json +0 -12
  302. package/pipeline/eval/golden-tasks/08-ios-auth-consensus-unverified/expected/phase-1-analysis.json +0 -25
  303. package/pipeline/eval/golden-tasks/08-ios-auth-consensus-unverified/expected/phase-2-plan.json +0 -31
  304. package/pipeline/eval/golden-tasks/08-ios-auth-consensus-unverified/expected/phase-4-review.json +0 -12
  305. package/pipeline/eval/golden-tasks/08-ios-auth-consensus-unverified/expected/phase-4-triage.json +0 -18
  306. package/pipeline/eval/golden-tasks/08-ios-auth-consensus-unverified/metadata.json +0 -14
  307. package/pipeline/eval/golden-tasks/08-ios-auth-consensus-unverified/task.json +0 -12
  308. package/pipeline/eval/golden-tasks/README.md +0 -65
  309. package/pipeline/eval/intent-cases.json +0 -40
  310. package/pipeline/eval/run-metrics-fixture.json +0 -46
  311. package/pipeline/eval/triage/01-empty-findings/expected.json +0 -6
  312. package/pipeline/eval/triage/01-empty-findings/input.json +0 -5
  313. package/pipeline/eval/triage/01-empty-findings/notes.md +0 -7
  314. package/pipeline/eval/triage/02-real-blocker/expected.json +0 -15
  315. package/pipeline/eval/triage/02-real-blocker/input.json +0 -14
  316. package/pipeline/eval/triage/02-real-blocker/notes.md +0 -7
  317. package/pipeline/eval/triage/03-out-of-scope-defer/expected.json +0 -18
  318. package/pipeline/eval/triage/03-out-of-scope-defer/input.json +0 -14
  319. package/pipeline/eval/triage/03-out-of-scope-defer/notes.md +0 -10
  320. package/pipeline/eval/triage/04-false-positive-reject/expected.json +0 -18
  321. package/pipeline/eval/triage/04-false-positive-reject/input.json +0 -14
  322. package/pipeline/eval/triage/04-false-positive-reject/notes.md +0 -10
  323. package/pipeline/eval/triage/05-mixed-classification/expected.json +0 -43
  324. package/pipeline/eval/triage/05-mixed-classification/input.json +0 -38
  325. package/pipeline/eval/triage/05-mixed-classification/notes.md +0 -17
  326. package/pipeline/eval/triage/06-severity-mismatch/expected.json +0 -15
  327. package/pipeline/eval/triage/06-severity-mismatch/input.json +0 -14
  328. package/pipeline/eval/triage/06-severity-mismatch/notes.md +0 -9
  329. package/pipeline/eval/triage/07-duplicate-reviewers/expected.json +0 -27
  330. package/pipeline/eval/triage/07-duplicate-reviewers/input.json +0 -22
  331. package/pipeline/eval/triage/07-duplicate-reviewers/notes.md +0 -9
  332. package/pipeline/eval/triage/08-style-misclassified/expected.json +0 -18
  333. package/pipeline/eval/triage/08-style-misclassified/input.json +0 -14
  334. package/pipeline/eval/triage/08-style-misclassified/notes.md +0 -9
  335. package/pipeline/eval/triage/09-cascading-finding/expected.json +0 -23
  336. package/pipeline/eval/triage/09-cascading-finding/input.json +0 -22
  337. package/pipeline/eval/triage/09-cascading-finding/notes.md +0 -9
  338. package/pipeline/eval/triage/10-deferred-crossref/expected.json +0 -18
  339. package/pipeline/eval/triage/10-deferred-crossref/input.json +0 -14
  340. package/pipeline/eval/triage/10-deferred-crossref/notes.md +0 -9
  341. package/pipeline/eval/triage/11-vercel-token-leak-blocker/expected.json +0 -27
  342. package/pipeline/eval/triage/11-vercel-token-leak-blocker/input.json +0 -22
  343. package/pipeline/eval/triage/11-vercel-token-leak-blocker/notes.md +0 -14
  344. package/pipeline/eval/triage/README.md +0 -54
  345. package/pipeline/scripts/benchmark-phase-0.sh +0 -128
  346. package/pipeline/scripts/check-md-links.mjs +0 -84
  347. package/pipeline/scripts/eval-golden-tasks-live.mjs +0 -297
  348. package/pipeline/scripts/eval-golden-tasks.mjs +0 -212
  349. package/pipeline/scripts/eval-intent.mjs +0 -103
  350. package/pipeline/scripts/eval-mine-corpus.mjs +0 -201
  351. package/pipeline/scripts/eval-triage.mjs +0 -171
  352. package/pipeline/scripts/fixtures/diff-risk-android.diff +0 -40
  353. package/pipeline/scripts/fixtures/diff-risk-ios.diff +0 -48
  354. package/pipeline/scripts/fixtures/diff-risk-test-removal.diff +0 -40
  355. package/pipeline/scripts/fixtures/install-layout.tsv +0 -19
  356. package/pipeline/scripts/fixtures/pack-expected-count.txt +0 -1
  357. package/pipeline/scripts/fixtures/test-gap-node.diff +0 -30
  358. package/pipeline/scripts/fixtures/test-gap-python.diff +0 -32
  359. package/pipeline/scripts/lint-mcp-refs.mjs +0 -207
  360. package/pipeline/scripts/lint-skills.mjs +0 -143
  361. package/pipeline/scripts/run-smokes.mjs +0 -76
  362. package/pipeline/scripts/smoke-add-detail.sh +0 -137
  363. package/pipeline/scripts/smoke-agent-guard.sh +0 -74
  364. package/pipeline/scripts/smoke-agent-log-cost.sh +0 -262
  365. package/pipeline/scripts/smoke-agent-model-routing.sh +0 -87
  366. package/pipeline/scripts/smoke-ask-choice.sh +0 -42
  367. package/pipeline/scripts/smoke-autopilot-circuit-breaker.sh +0 -36
  368. package/pipeline/scripts/smoke-bitbucket-contract.sh +0 -255
  369. package/pipeline/scripts/smoke-changelog-version.sh +0 -47
  370. package/pipeline/scripts/smoke-channels-approval-gate.sh +0 -60
  371. package/pipeline/scripts/smoke-channels-flow.sh +0 -130
  372. package/pipeline/scripts/smoke-ci-workflows.sh +0 -88
  373. package/pipeline/scripts/smoke-clarify.sh +0 -148
  374. package/pipeline/scripts/smoke-command-inventory.sh +0 -81
  375. package/pipeline/scripts/smoke-commands-skills-parity.sh +0 -87
  376. package/pipeline/scripts/smoke-community-gates.sh +0 -75
  377. package/pipeline/scripts/smoke-compliance-skills.sh +0 -119
  378. package/pipeline/scripts/smoke-config-hygiene.sh +0 -58
  379. package/pipeline/scripts/smoke-cost-budget.sh +0 -70
  380. package/pipeline/scripts/smoke-cost-summary.sh +0 -139
  381. package/pipeline/scripts/smoke-cross-phase-cohesion.sh +0 -128
  382. package/pipeline/scripts/smoke-description-tr.sh +0 -82
  383. package/pipeline/scripts/smoke-dev-critic.sh +0 -144
  384. package/pipeline/scripts/smoke-diff-explain.sh +0 -147
  385. package/pipeline/scripts/smoke-diff-risk.sh +0 -190
  386. package/pipeline/scripts/smoke-dynamic-skill-loading.sh +0 -160
  387. package/pipeline/scripts/smoke-eval-live.sh +0 -136
  388. package/pipeline/scripts/smoke-evidence-gate.sh +0 -93
  389. package/pipeline/scripts/smoke-extract-conventions.sh +0 -163
  390. package/pipeline/scripts/smoke-fetchers-offline.sh +0 -448
  391. package/pipeline/scripts/smoke-figma-dispatch.sh +0 -112
  392. package/pipeline/scripts/smoke-gate-hooks.sh +0 -74
  393. package/pipeline/scripts/smoke-gc-tmp.sh +0 -130
  394. package/pipeline/scripts/smoke-gc-worktrees.sh +0 -125
  395. package/pipeline/scripts/smoke-generate-issue.sh +0 -120
  396. package/pipeline/scripts/smoke-handoff-contract.sh +0 -92
  397. package/pipeline/scripts/smoke-identity-isolation.sh +0 -70
  398. package/pipeline/scripts/smoke-install-layout.sh +0 -248
  399. package/pipeline/scripts/smoke-intent-guard.sh +0 -86
  400. package/pipeline/scripts/smoke-issue-comment-template.sh +0 -86
  401. package/pipeline/scripts/smoke-issue-jira-triad.sh +0 -120
  402. package/pipeline/scripts/smoke-keychain.sh +0 -158
  403. package/pipeline/scripts/smoke-language-axis.sh +0 -109
  404. package/pipeline/scripts/smoke-learning-curve.sh +0 -61
  405. package/pipeline/scripts/smoke-learnings-ledger.sh +0 -86
  406. package/pipeline/scripts/smoke-lib-scripts.sh +0 -448
  407. package/pipeline/scripts/smoke-mcp-gate.sh +0 -68
  408. package/pipeline/scripts/smoke-md-links.sh +0 -8
  409. package/pipeline/scripts/smoke-md2confluence.sh +0 -126
  410. package/pipeline/scripts/smoke-metrics-cache-ratio.sh +0 -72
  411. package/pipeline/scripts/smoke-migrate-state.sh +0 -102
  412. package/pipeline/scripts/smoke-mode-dispatch-drift.sh +0 -161
  413. package/pipeline/scripts/smoke-model-fallback.sh +0 -89
  414. package/pipeline/scripts/smoke-multi-repo-integration.sh +0 -116
  415. package/pipeline/scripts/smoke-multi-repo-worktree.sh +0 -61
  416. package/pipeline/scripts/smoke-no-mcp-in-dev-phases.sh +0 -115
  417. package/pipeline/scripts/smoke-no-token-prompt.sh +0 -85
  418. package/pipeline/scripts/smoke-pack-contents.sh +0 -140
  419. package/pipeline/scripts/smoke-pat-audit.sh +0 -128
  420. package/pipeline/scripts/smoke-per-repo-memory.sh +0 -156
  421. package/pipeline/scripts/smoke-phase-0-multi-repo.sh +0 -170
  422. package/pipeline/scripts/smoke-phase-6-multi.sh +0 -79
  423. package/pipeline/scripts/smoke-phase-banner.sh +0 -101
  424. package/pipeline/scripts/smoke-phase-tracker.sh +0 -324
  425. package/pipeline/scripts/smoke-phase0-bridge-contract.sh +0 -241
  426. package/pipeline/scripts/smoke-phase4-gates.sh +0 -45
  427. package/pipeline/scripts/smoke-phase4-triage.sh +0 -229
  428. package/pipeline/scripts/smoke-plan-approval-gate.sh +0 -71
  429. package/pipeline/scripts/smoke-plan-safety.sh +0 -139
  430. package/pipeline/scripts/smoke-plan-todos.sh +0 -196
  431. package/pipeline/scripts/smoke-plugin-validate.sh +0 -64
  432. package/pipeline/scripts/smoke-pr-review-actions.sh +0 -152
  433. package/pipeline/scripts/smoke-pre-commit.sh +0 -170
  434. package/pipeline/scripts/smoke-pref-migration.sh +0 -226
  435. package/pipeline/scripts/smoke-prefs-language.sh +0 -134
  436. package/pipeline/scripts/smoke-progress-contract.sh +0 -127
  437. package/pipeline/scripts/smoke-prune-logs.sh +0 -137
  438. package/pipeline/scripts/smoke-purge.sh +0 -138
  439. package/pipeline/scripts/smoke-push-retry.sh +0 -75
  440. package/pipeline/scripts/smoke-repo-map.sh +0 -300
  441. package/pipeline/scripts/smoke-review-readiness.sh +0 -92
  442. package/pipeline/scripts/smoke-review-watch.sh +0 -146
  443. package/pipeline/scripts/smoke-routines.sh +0 -84
  444. package/pipeline/scripts/smoke-run-aggregator.sh +0 -216
  445. package/pipeline/scripts/smoke-run-metrics.sh +0 -50
  446. package/pipeline/scripts/smoke-search.sh +0 -187
  447. package/pipeline/scripts/smoke-shadow-git.sh +0 -224
  448. package/pipeline/scripts/smoke-skill-authoring.sh +0 -137
  449. package/pipeline/scripts/smoke-skill-language.sh +0 -83
  450. package/pipeline/scripts/smoke-skill-manifest.sh +0 -138
  451. package/pipeline/scripts/smoke-skill-scan.sh +0 -198
  452. package/pipeline/scripts/smoke-source-parity.sh +0 -85
  453. package/pipeline/scripts/smoke-subagent-validators.sh +0 -108
  454. package/pipeline/scripts/smoke-sync-parity.sh +0 -92
  455. package/pipeline/scripts/smoke-tasklist-ordering.sh +0 -112
  456. package/pipeline/scripts/smoke-telemetry.sh +0 -147
  457. package/pipeline/scripts/smoke-test-gap.sh +0 -183
  458. package/pipeline/scripts/smoke-token-budget.sh +0 -67
  459. package/pipeline/scripts/smoke-token-preflight.sh +0 -82
  460. package/pipeline/scripts/smoke-tracker-contract.sh +0 -191
  461. package/pipeline/scripts/smoke-tracker-tokens-invocation.sh +0 -73
  462. package/pipeline/scripts/smoke-triage-memory.sh +0 -174
  463. package/pipeline/scripts/smoke-update-check.sh +0 -135
  464. package/pipeline/scripts/smoke-url-enrichment.sh +0 -70
  465. package/pipeline/scripts/smoke-validate-analysis-doc.sh +0 -161
  466. package/pipeline/scripts/smoke-validator-contradiction.sh +0 -67
  467. package/pipeline/scripts/smoke-validator-gates.sh +0 -164
  468. package/pipeline/scripts/smoke-vercel-deploy-redact.sh +0 -129
  469. package/pipeline/scripts/smoke-verify-by-test.sh +0 -148
  470. package/pipeline/scripts/smoke-wiki-integration.sh +0 -122
  471. package/pipeline/scripts/smoke-work-summary.sh +0 -163
  472. package/pipeline/scripts/smoke-workflow-audit.sh +0 -69
  473. package/pipeline/scripts/smoke-worktree-path-convention.sh +0 -86
  474. package/pipeline/scripts/smoke-wrapper-preservation.sh +0 -68
  475. package/pipeline/scripts/smoke-write-state.sh +0 -115
  476. package/pipeline/scripts/sync-parity-check.sh +0 -135
  477. package/pipeline/scripts/test-gap-rules/android.json +0 -25
  478. package/pipeline/scripts/test-gap-rules/ios.json +0 -29
  479. package/pipeline/scripts/test-gap-rules/node.json +0 -17
  480. package/pipeline/scripts/test-gap-rules/python.json +0 -19
  481. package/pipeline/scripts/validate-schemas.mjs +0 -88
@@ -1,12 +0,0 @@
1
- {
2
- "title": "Add idempotency keys to the payments POST endpoint",
3
- "description": "POST /payments can double-charge on client retry. Accept an Idempotency-Key header, store the first response keyed by it, and replay that response for duplicate keys within a TTL.",
4
- "inputType": "free-text",
5
- "expectedStack": "backend",
6
- "expectedLanguage": "JavaScript",
7
- "expectedFramework": "Express",
8
- "expectedBlockers": 1,
9
- "expectedDeferrals": 0,
10
- "baseBranch": "main",
11
- "taskBranch": "feature/payments-idempotency"
12
- }
@@ -1,25 +0,0 @@
1
- {
2
- "stack": {
3
- "primary": "ios",
4
- "language": "Swift 6",
5
- "framework": "SwiftUI"
6
- },
7
- "touchedAreas": [
8
- {
9
- "path": "Sources/Auth/TokenStore.swift",
10
- "why": "Wrap the Keychain read in an LAContext biometric evaluation before returning the token"
11
- },
12
- {
13
- "path": "Sources/Auth/TokenStoreTests.swift",
14
- "why": "Cover the gated read: success after auth, failure/cancel returns no token"
15
- }
16
- ],
17
- "risks": [
18
- {
19
- "risk": "Biometric evaluation is async and can fail/cancel; a wrong fallback could either lock users out or defeat the gate",
20
- "severity": "medium",
21
- "mitigation": "Define explicit behavior for cancel / not-enrolled / lockout, and test each path"
22
- }
23
- ],
24
- "summary": "Add a biometric (LAContext) check in front of the existing Keychain-backed TokenStore read. Security-sensitive surface: the correctness hinges on the failure-path policy (cancel / not-enrolled / lockout), which is exactly the kind of judgment call where two same-family reviewers approving is not independent proof."
25
- }
@@ -1,31 +0,0 @@
1
- {
2
- "approach": "TDD-first. Add failing tests for the gated read: a successful biometric evaluation returns the token; a cancelled or failed evaluation returns no token and does not fall back to an ungated read (RED). Wrap the existing Keychain read in an LAContext evaluation, keeping the TokenStore API unchanged (GREEN). Define explicit behavior for cancel / not-enrolled / lockout (refactor).",
3
- "tasks": [
4
- {
5
- "id": "T1",
6
- "title": "Add failing biometric-gated read tests",
7
- "type": "test",
8
- "files": ["Sources/Auth/TokenStoreTests.swift"],
9
- "dependsOn": [],
10
- "acceptanceCriteria": [
11
- "success after auth returns the stored token",
12
- "cancelled / failed auth returns nil and never reads the Keychain ungated",
13
- "evaluation runs against an injectable LAContext double"
14
- ]
15
- },
16
- {
17
- "id": "T2",
18
- "title": "Gate the Keychain read behind LAContext",
19
- "type": "code",
20
- "files": ["Sources/Auth/TokenStore.swift"],
21
- "dependsOn": ["T1"],
22
- "acceptanceCriteria": [
23
- "TokenStore public API is unchanged",
24
- "Token is only returned after a successful biometric evaluation",
25
- "cancel / not-enrolled / lockout each have explicit, tested behavior"
26
- ]
27
- }
28
- ],
29
- "approved": true,
30
- "userFeedback": null
31
- }
@@ -1,12 +0,0 @@
1
- [
2
- {
3
- "reviewer": "opus",
4
- "findings": [],
5
- "approved": true
6
- },
7
- {
8
- "reviewer": "sonnet",
9
- "findings": [],
10
- "approved": true
11
- }
12
- ]
@@ -1,18 +0,0 @@
1
- {
2
- "accepted": [],
3
- "deferred": [],
4
- "rejected": [],
5
- "approved": true,
6
- "consensus": {
7
- "reviewerCount": 2,
8
- "verdict": "unverified",
9
- "disagreements": [
10
- {
11
- "file": "Sources/Auth/TokenStore.swift",
12
- "line": 0,
13
- "issue": "biometric failure-path policy (cancel / not-enrolled / lockout) on a Keychain-gated read",
14
- "note": "Both reviewers approved, but this is a security/auth judgment surface - the agreement is unverified. A human should confirm the cancel / not-enrolled / lockout behavior before trusting the pass."
15
- }
16
- ]
17
- }
18
- }
@@ -1,14 +0,0 @@
1
- {
2
- "focus": "Consensus surfacing (schema v3.1.0). Both reviewers APPROVE on a security/auth surface, so triage has zero accepted/deferred/rejected - but the agreement is flagged `unverified` (same-base-model approval on a judgment-heavy surface is not treated as proof) and a disagreement note is surfaced. Verifies the consensus block passes validation with approved=true + verdict=unverified.",
3
- "exercises": [
4
- "Phase 4 both reviewers approve (no findings) on a biometric/Keychain change",
5
- "Triage short-circuits to empty buckets, approved=true",
6
- "Triage attaches consensus { reviewerCount: 2, verdict: unverified, disagreements: [...] }",
7
- "validate-triage accepts the consensus block and its cross-checks pass (unverified + approved=true is valid)"
8
- ],
9
- "regressionsCaught": [
10
- "If validate-triage stops accepting a consensus block, this fixture fails",
11
- "If the consensus cross-check wrongly rejects unverified+approved=true, this fixture fails",
12
- "If a unanimous-pass were emitted on a security surface (instead of unverified), the intent of consensus surfacing is lost - the metadata documents the expected verdict"
13
- ]
14
- }
@@ -1,12 +0,0 @@
1
- {
2
- "title": "Add a biometric gate before reading the Keychain auth token",
3
- "description": "Require a Face ID / Touch ID check (LAContext) before TokenStore returns the auth token, so a stolen unlocked device can't silently reuse the session. Keep the existing TokenStore API.",
4
- "inputType": "free-text",
5
- "expectedStack": "ios",
6
- "expectedLanguage": "Swift",
7
- "expectedFramework": "SwiftUI",
8
- "expectedBlockers": 0,
9
- "expectedDeferrals": 0,
10
- "baseBranch": "develop",
11
- "taskBranch": "feature/biometric-token-gate"
12
- }
@@ -1,65 +0,0 @@
1
- # Golden tasks - regression fixtures for the full pipeline (v6.2.F+)
2
-
3
- ## Purpose
4
-
5
- Each subdirectory here captures one **complete pipeline run as a reference trace**. A golden task fixture answers: *"If the pipeline ran on this input, what shape of outputs should Phase 1-4 produce?"*
6
-
7
- The runner (`pipeline/scripts/eval-golden-tasks.mjs`) does **not** invoke a real model - that would require API keys, add non-determinism, and make CI flaky. Instead it validates each fixture against the pipeline's schemas and checks internal consistency (Phase 2 todos reference Phase 1 files, Phase 4 findings reference files that exist in the diff, etc.).
8
-
9
- This is a **contract regression test**, same category as `eval-triage.mjs`. A live-model evaluation harness is a separate (and expensive) artifact, deferred to a future release.
10
-
11
- ## Fixture shape
12
-
13
- ```
14
- NN-short-kebab-name/
15
- task.json - input (task description, expected stack, target repo metadata)
16
- expected/
17
- phase-1-analysis.json - must conform to analysis-output.schema.json
18
- phase-2-plan.json - must conform to planning-output.schema.json
19
- phase-4-review.json - must conform to reviewer-output.schema.json (one entry per reviewer)
20
- phase-4-triage.json - must conform to triage-output.schema.json
21
- metadata.json - fixture-level notes (why this task is interesting, which phase it exercises most)
22
- ```
23
-
24
- `expected/` files are hand-curated reference outputs. They are not literal outputs of a past run - they are what a correct pipeline **should** produce on this input. When the spec changes (e.g. a new field added to analysis-output.schema.json), fixtures are updated to match.
25
-
26
- ## When to add a new fixture
27
-
28
- Add one when you discover a class of task that the pipeline should handle but no existing fixture covers. Examples:
29
- - A different primary stack (add Python / Node.js / Go fixtures once the runner supports them)
30
- - A task shape that historically caused regressions (e.g. multi-repo, figma-only, compliance-heavy)
31
- - An edge case in Phase 4 (e.g. a task where all reviewers approve but triage downgrades)
32
-
33
- Do **not** add fixtures just to inflate the count. The runner walks every fixture on `npm test` - each one adds seconds to CI. Quality > quantity.
34
-
35
- ## Running
36
-
37
- ```bash
38
- node pipeline/scripts/eval-golden-tasks.mjs # all fixtures
39
- node pipeline/scripts/eval-golden-tasks.mjs --case 01-... # one fixture
40
- node pipeline/scripts/eval-golden-tasks.mjs --json # CI-friendly output
41
- ```
42
-
43
- Exit codes: `0` all pass · `1` one or more fail · `2` usage / setup error.
44
-
45
- ## What the runner asserts (v6.2.F scaffolding)
46
-
47
- 1. **Schema conformance**: each `expected/phase-*.json` validates against its paired schema via the existing `validate-*.mjs` scripts.
48
- 2. **Internal consistency**: Phase 2 `todos[].touchedFiles[]` is a subset of Phase 1 `touchedAreas[].path`. Phase 4 `findings[].file` is a subset of Phase 2 planned files OR the current diff's files.
49
- 3. **Stack match**: `phase-1-analysis.json.stack.primary` equals `task.json.expectedStack`.
50
- 4. **No invention**: Phase 4 `findings[]` either (a) match Phase 2 planned files, or (b) surface via the `triage.rejected[]` bucket with a reason.
51
-
52
- ## What the runner does NOT do (yet)
53
-
54
- - Invoke a real Claude/Copilot agent. That's a separate multi-model eval, future work.
55
- - Score output "quality" - no rubric, no judge. Only contract checks.
56
- - Replay timing / token budgets. Tracker and budget smokes cover that orthogonally.
57
-
58
- ---
59
-
60
- ### Seed fixtures shipped with v6.2.F
61
-
62
- | # | Name | Focus |
63
- |---|------|-------|
64
- | 01 | `01-ios-bugfix-darkmode` | SwiftUI bugfix path - single repo, 2 files touched, 1 blocker finding caught, 0 deferrals |
65
- | 02 | `02-android-feature-compose` | Kotlin/Compose feature path - 3 files, 1 blocker, 1 deferred out-of-scope finding |
@@ -1,40 +0,0 @@
1
- {
2
- "_readme": "Labeled cases for the Phase 0 conceptual-vs-edit intent guard (pipeline/lib/classify-intent.sh). eval-intent.mjs runs each input through the classifier and reports accuracy. The DANGEROUS error is a real task read as 'question' (work silently skipped) or a clear question read as 'task' (a worktree spun up for nothing); 'ambiguous' is the safe middle and is accepted for genuinely vague input. Add real misclassifications here as they are found - this is the regression set.",
3
- "cases": [
4
- { "input": "fix the login crash on launch", "expected": "task" },
5
- { "input": "refactor the cache layer", "expected": "task" },
6
- { "input": "add a retry to the network client", "expected": "task" },
7
- { "input": "LoginView dark mode fix", "expected": "task" },
8
- { "input": "implement biometric unlock for the keychain", "expected": "task" },
9
- { "input": "remove the deprecated analytics call", "expected": "task" },
10
- { "input": "can you split this file into two", "expected": "task" },
11
- { "input": "could you rename TokenStore to SessionStore", "expected": "task" },
12
- { "input": "please add a loading spinner to the list", "expected": "task" },
13
- { "input": "login ekranina retry ekle", "expected": "task" },
14
- { "input": "cache katmanini yeniden duzenle", "expected": "task" },
15
- { "input": "su crash'i duzelt", "expected": "task" },
16
- { "input": "how does the login flow work", "expected": "question" },
17
- { "input": "what does this function return", "expected": "question" },
18
- { "input": "why is the navigation so slow", "expected": "question" },
19
- { "input": "should we use Keychain or UserDefaults", "expected": "question" },
20
- { "input": "does it support offline mode", "expected": "question" },
21
- { "input": "should we enable caching here", "expected": "question" },
22
- { "input": "which architecture is better for this screen", "expected": "question" },
23
- { "input": "explain the auth module", "expected": "question" },
24
- { "input": "compare MVVM and TCA for this", "expected": "question" },
25
- { "input": "is this thread-safe", "expected": "question" },
26
- { "input": "nasil calisiyor bu akis", "expected": "question" },
27
- { "input": "neden bu kadar yavas", "expected": "question" },
28
- { "input": "Keychain mi UserDefaults mi kullanmaliyim", "expected": "question" },
29
- { "input": "bu thread-safe mi", "expected": "question" },
30
-
31
- { "input": "fix the bug?", "expected": "task" },
32
- { "input": "add retry logic, ok?", "expected": "task" },
33
- { "input": "can you explain how to add a retry", "expected": "question" },
34
- { "input": "could you tell me which file to update", "expected": "question" },
35
- { "input": "would you say we should refactor this", "expected": "question" },
36
- { "input": "what happens if I remove this", "expected": "question" },
37
- { "input": "bu fonksiyonu nasil refactor ederim", "expected": "question" },
38
- { "input": "hangi mimariyi kullanmaliyim", "expected": "question" }
39
- ]
40
- }
@@ -1,46 +0,0 @@
1
- {
2
- "taskId": "PROJ-101",
3
- "status": "complete",
4
- "currentPhase": 7,
5
- "projects": [
6
- { "project": "my-ios-app", "buildStatus": { "ok": true, "attempts": 1 } }
7
- ],
8
- "reviewIterations": [
9
- {
10
- "reviewers": [
11
- { "reviewer": "opus", "findings": [
12
- { "severity": "blocking", "file": "Auth/Session.swift", "line": 54, "issue": "token logged in plaintext", "fix": "redact" },
13
- { "severity": "suggestion", "file": "Auth/Session.swift", "line": 12, "issue": "rename helper", "fix": "rename" }
14
- ], "approved": false },
15
- { "reviewer": "sonnet", "findings": [
16
- { "severity": "important", "file": "Auth/Session.swift", "line": 70, "issue": "no migration for legacy token", "fix": "add migration" }
17
- ], "approved": false }
18
- ],
19
- "triage": {
20
- "accepted": [
21
- { "severity": "blocking", "file": "Auth/Session.swift", "line": 54, "issue": "token logged in plaintext", "fix": "redact the token in the log", "reviewer": "opus" }
22
- ],
23
- "deferred": [
24
- { "finding": { "severity": "important", "file": "Auth/Session.swift", "line": 70, "issue": "no migration for legacy token" }, "reason": "follow-up PR" }
25
- ],
26
- "rejected": [
27
- { "finding": { "severity": "suggestion", "file": "Auth/Session.swift", "line": 12, "issue": "rename helper" }, "reason": "style only" }
28
- ],
29
- "approved": false
30
- }
31
- },
32
- {
33
- "reviewers": [
34
- { "reviewer": "opus", "findings": [], "approved": true },
35
- { "reviewer": "sonnet", "findings": [], "approved": true }
36
- ],
37
- "triage": {
38
- "accepted": [],
39
- "deferred": [],
40
- "rejected": [],
41
- "approved": true,
42
- "consensus": { "reviewerCount": 2, "verdict": "unanimous-pass" }
43
- }
44
- }
45
- ]
46
- }
@@ -1,6 +0,0 @@
1
- {
2
- "accepted": [],
3
- "deferred": [],
4
- "rejected": [],
5
- "approved": true
6
- }
@@ -1,5 +0,0 @@
1
- {
2
- "rawFindings": [],
3
- "scope": "Add a Cancel button to the OrderConfirmation screen.",
4
- "diffSummary": "1 file changed, 12 insertions, 0 deletions"
5
- }
@@ -1,7 +0,0 @@
1
- # Case 01 - Empty findings short-circuit
2
-
3
- Both reviewers returned zero findings. Triage MUST short-circuit and emit `{approved: true}` directly, no agent call.
4
-
5
- Guards against: a future change that incorrectly invokes the triage agent on empty input (wasted Opus call + nondeterministic empty-result variation).
6
-
7
- Validator exit code: 0 (clean).
@@ -1,15 +0,0 @@
1
- {
2
- "accepted": [
3
- {
4
- "severity": "blocking",
5
- "file": "src/api/auth.ts",
6
- "line": 87,
7
- "issue": "Password comparison uses string equality, vulnerable to timing attacks",
8
- "fix": "Use a constant-time comparison (crypto.timingSafeEqual)",
9
- "reviewer": "opus"
10
- }
11
- ],
12
- "deferred": [],
13
- "rejected": [],
14
- "approved": false
15
- }
@@ -1,14 +0,0 @@
1
- {
2
- "rawFindings": [
3
- {
4
- "severity": "blocking",
5
- "file": "src/api/auth.ts",
6
- "line": 87,
7
- "issue": "Password comparison uses string equality, vulnerable to timing attacks",
8
- "fix": "Use a constant-time comparison (crypto.timingSafeEqual)",
9
- "reviewer": "opus"
10
- }
11
- ],
12
- "scope": "Implement password-based login endpoint POST /api/auth/login.",
13
- "diffSummary": "src/api/auth.ts: +43 -2"
14
- }
@@ -1,7 +0,0 @@
1
- # Case 02 - In-scope blocker accepted
2
-
3
- A real security issue (timing-attack-vulnerable password comparison) lands in the auth module being modified. Triage MUST accept it as blocking; `approved: false` so Phase 5/6 are gated.
4
-
5
- Guards against: triage incorrectly deferring or rejecting a clearly in-scope security blocker because the reviewer's `severity` looked over-strict.
6
-
7
- Validator exit code: 0 (clean - accepted + approved:false is consistent because there IS a blocker).
@@ -1,18 +0,0 @@
1
- {
2
- "accepted": [],
3
- "deferred": [
4
- {
5
- "finding": {
6
- "severity": "important",
7
- "file": "src/api/payments.ts",
8
- "line": 220,
9
- "issue": "Refund flow doesn't log the user-id of the actor, breaking audit trail",
10
- "fix": "Add userId to the refund-log entry",
11
- "reviewer": "sonnet"
12
- },
13
- "reason": "out of scope: task is OrderConfirmation Cancel button; payments module is explicitly out of scope per Phase 2 plan. Real issue, surfaced in Phase 7 follow-ups."
14
- }
15
- ],
16
- "rejected": [],
17
- "approved": true
18
- }
@@ -1,14 +0,0 @@
1
- {
2
- "rawFindings": [
3
- {
4
- "severity": "important",
5
- "file": "src/api/payments.ts",
6
- "line": 220,
7
- "issue": "Refund flow doesn't log the user-id of the actor, breaking audit trail",
8
- "fix": "Add userId to the refund-log entry",
9
- "reviewer": "sonnet"
10
- }
11
- ],
12
- "scope": "Add a Cancel button to the OrderConfirmation screen. Touches src/screens/OrderConfirmation.tsx only. Payments module is out of scope.",
13
- "diffSummary": "src/screens/OrderConfirmation.tsx: +12 -0"
14
- }
@@ -1,10 +0,0 @@
1
- # Case 03 - Real issue, out of scope → defer
2
-
3
- A reviewer correctly flagged a real audit-logging gap, but it's in a module the current task doesn't touch. Triage MUST defer (NOT accept, NOT reject) so it surfaces in Phase 7 follow-ups without blocking this task.
4
-
5
- Guards against:
6
-
7
- - triage accepting it and dragging unrelated work into Phase 3 rework
8
- - triage rejecting it and silently losing a real issue
9
-
10
- `approved: true` because no accepted blocker remains.
@@ -1,18 +0,0 @@
1
- {
2
- "accepted": [],
3
- "deferred": [],
4
- "rejected": [
5
- {
6
- "finding": {
7
- "severity": "blocking",
8
- "file": "src/utils/parseDate.ts",
9
- "line": 14,
10
- "issue": "Function may receive null input causing TypeError",
11
- "fix": "Add a null check at the top of parseDate",
12
- "reviewer": "sonnet"
13
- },
14
- "reason": "false positive: Phase 1 analysis confirmed all callers validate non-null before calling parseDate. Adding an internal null check would be defensive duplication and obscure intent."
15
- }
16
- ],
17
- "approved": true
18
- }
@@ -1,14 +0,0 @@
1
- {
2
- "rawFindings": [
3
- {
4
- "severity": "blocking",
5
- "file": "src/utils/parseDate.ts",
6
- "line": 14,
7
- "issue": "Function may receive null input causing TypeError",
8
- "fix": "Add a null check at the top of parseDate",
9
- "reviewer": "sonnet"
10
- }
11
- ],
12
- "scope": "Refactor parseDate to support ISO 8601 with timezone. Existing callers already validate non-null at the call sites (verified in Phase 1 analysis).",
13
- "diffSummary": "src/utils/parseDate.ts: +18 -6"
14
- }
@@ -1,10 +0,0 @@
1
- # Case 04 - False positive → reject
2
-
3
- A reviewer flagged a "blocking" null-safety issue, but Phase 1 analysis already proved all callers validate input. Adding an internal null check would be defensive duplication that hides intent. Triage MUST reject with a clear reason.
4
-
5
- Guards against:
6
-
7
- - triage blindly accepting any "blocking" tag without scope check (the v2.2.0 evaluation specifically called this out as a risk)
8
- - triage deferring a non-issue (would clutter Phase 7 follow-ups with noise)
9
-
10
- Also exercises the over-rejection guard: 1/1 = 100% rejected, but `total < 5` so the guard does NOT trip (validator exits 0, not 2).
@@ -1,43 +0,0 @@
1
- {
2
- "accepted": [
3
- {
4
- "severity": "blocking",
5
- "file": "src/api/checkout.ts",
6
- "line": 102,
7
- "issue": "Race condition: order total computed twice without lock, can produce inconsistent invoice",
8
- "fix": "Compute total once inside the existing transaction block",
9
- "reviewer": "opus"
10
- },
11
- {
12
- "severity": "important",
13
- "file": "src/api/checkout.ts",
14
- "line": 145,
15
- "issue": "Hard-coded currency 'USD' won't work for non-US tenants",
16
- "fix": "Read currency from tenant config",
17
- "reviewer": "sonnet"
18
- },
19
- {
20
- "severity": "suggestion",
21
- "file": "src/api/checkout.ts",
22
- "line": 200,
23
- "issue": "Magic number 60 in retry backoff",
24
- "fix": "Extract to RETRY_BACKOFF_SECONDS constant",
25
- "reviewer": "sonnet"
26
- }
27
- ],
28
- "deferred": [
29
- {
30
- "finding": {
31
- "severity": "important",
32
- "file": "src/notifications/email.ts",
33
- "line": 33,
34
- "issue": "Email template missing for refund-success path",
35
- "fix": "Add refund_success.html and wire it up",
36
- "reviewer": "sonnet"
37
- },
38
- "reason": "out of scope: notifications module is owned by another team per Phase 0 scope. Real issue, surfaced in Phase 7 follow-ups."
39
- }
40
- ],
41
- "rejected": [],
42
- "approved": false
43
- }
@@ -1,38 +0,0 @@
1
- {
2
- "rawFindings": [
3
- {
4
- "severity": "blocking",
5
- "file": "src/api/checkout.ts",
6
- "line": 102,
7
- "issue": "Race condition: order total computed twice without lock, can produce inconsistent invoice",
8
- "fix": "Compute total once inside the existing transaction block",
9
- "reviewer": "opus"
10
- },
11
- {
12
- "severity": "important",
13
- "file": "src/api/checkout.ts",
14
- "line": 145,
15
- "issue": "Hard-coded currency 'USD' won't work for non-US tenants",
16
- "fix": "Read currency from tenant config",
17
- "reviewer": "sonnet"
18
- },
19
- {
20
- "severity": "important",
21
- "file": "src/notifications/email.ts",
22
- "line": 33,
23
- "issue": "Email template missing for refund-success path",
24
- "fix": "Add refund_success.html and wire it up",
25
- "reviewer": "sonnet"
26
- },
27
- {
28
- "severity": "suggestion",
29
- "file": "src/api/checkout.ts",
30
- "line": 200,
31
- "issue": "Magic number 60 in retry backoff",
32
- "fix": "Extract to RETRY_BACKOFF_SECONDS constant",
33
- "reviewer": "sonnet"
34
- }
35
- ],
36
- "scope": "Add tenant-aware checkout flow. Touches src/api/checkout.ts and tenant config. Notifications module is owned by another team.",
37
- "diffSummary": "src/api/checkout.ts: +180 -45, src/config/tenants.ts: +12 -0"
38
- }
@@ -1,17 +0,0 @@
1
- # Case 05 - Mixed classification (the realistic case)
2
-
3
- 4 raw findings spanning all 3 outcomes:
4
-
5
- - 1 blocking + 1 important + 1 suggestion in the in-scope checkout module → **accepted**
6
- - 1 important in the out-of-scope notifications module → **deferred**
7
- - 0 rejected (no false positives in this fixture)
8
-
9
- `approved: false` because there's an accepted blocker.
10
-
11
- Guards against:
12
-
13
- - triage forgetting to classify some findings (every raw finding must end up in exactly one bucket)
14
- - triage merging suggestions into deferred (suggestions in scope still go to accepted, just at lower priority)
15
- - triage hallucinating new findings not in raw input (validator strips these - case has 4 in, 4 out across all buckets)
16
-
17
- This is the case most likely to catch a regression in the triage prompt structure.
@@ -1,15 +0,0 @@
1
- {
2
- "accepted": [
3
- {
4
- "severity": "blocking",
5
- "file": "src/api/auth.ts",
6
- "line": 120,
7
- "issue": "Fallback to admin role when token validation fails",
8
- "fix": "Return 401 instead of falling back to admin role",
9
- "reviewer": "sonnet"
10
- }
11
- ],
12
- "deferred": [],
13
- "rejected": [],
14
- "approved": false
15
- }
@@ -1,14 +0,0 @@
1
- {
2
- "rawFindings": [
3
- {
4
- "severity": "suggestion",
5
- "file": "src/api/auth.ts",
6
- "line": 120,
7
- "issue": "Fallback to admin role when token validation fails",
8
- "fix": "Return 401 instead of falling back to admin role",
9
- "reviewer": "sonnet"
10
- }
11
- ],
12
- "scope": "Add JWT token validation to the auth middleware.",
13
- "diffSummary": "src/api/auth.ts: +28 -3"
14
- }
@@ -1,9 +0,0 @@
1
- # Case 06 - Severity mismatch (suggestion → blocking)
2
-
3
- Reviewer tagged a real security issue as `severity: "suggestion"` - falling back to the admin role when token validation fails is a privilege-escalation vector, not a cosmetic nit.
4
-
5
- Triage MUST recognize the actual severity from the issue description and bump it to `blocking`. `approved: false` because the accepted finding is now blocking.
6
-
7
- Guards against: blind trust of reviewer severity tags. The triage agent must evaluate the described behavior, not just echo the label.
8
-
9
- Validator exit code: 0 (accepted + approved:false is consistent because there IS a blocker).
@@ -1,27 +0,0 @@
1
- {
2
- "accepted": [
3
- {
4
- "severity": "blocking",
5
- "file": "src/checkout.ts",
6
- "line": 88,
7
- "issue": "Missing transaction wrapper around multi-table writes in checkout",
8
- "fix": "Wrap the checkout persistence logic in a database transaction",
9
- "reviewer": "opus"
10
- }
11
- ],
12
- "deferred": [],
13
- "rejected": [
14
- {
15
- "finding": {
16
- "severity": "blocking",
17
- "file": "src/checkout.ts",
18
- "line": 88,
19
- "issue": "Checkout writes to orders and inventory tables without a transaction boundary",
20
- "fix": "Use a single transaction for all database writes in the checkout flow",
21
- "reviewer": "sonnet"
22
- },
23
- "reason": "duplicate of accepted[0]: same file, same line, same root issue (missing transaction wrapper). Opus version retained by convention."
24
- }
25
- ],
26
- "approved": false
27
- }