@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,163 +0,0 @@
1
- #!/usr/bin/env bash
2
- # smoke-work-summary.sh - v7.1.0
3
- #
4
- # Verifies the Phase 7 Work Summary renderer contract:
5
- # 1. Missing state + no flags → exit 2 (caller should skip section)
6
- # 2. Full state fixture → renders header, scope, review, phases
7
- # 3. Scope section marks ✅ for done tasks and ⏳ for pending
8
- # 4. Review outcome suppressed when all buckets empty
9
- # 5. Phase tick strip uses correct marks (completed ✅ · in_progress ▶ · skipped ⏭)
10
- # 6. Post-hoc invocation with --branch + --base-branch (no state file) still renders header
11
- # 7. prefs schema exposes reportContent.workSummary toggle
12
- # 8. channels.md documents the Work Summary option
13
- #
14
- # Exit 0 all pass, 1 any failure.
15
-
16
- set -euo pipefail
17
-
18
- ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
19
- RENDER="$ROOT/pipeline/scripts/render-work-summary.sh"
20
- SCHEMA="$ROOT/pipeline/schemas/prefs.schema.json"
21
- CHANNELS_DOC="$ROOT/pipeline/commands/multi-agent/channels/SKILL.md"
22
-
23
- pass=0; fail=0; failures=()
24
- record_pass() { pass=$((pass + 1)); printf ' \033[0;32mPASS\033[0m %s\n' "$1"; }
25
- record_fail() { fail=$((fail + 1)); failures+=("$1"); printf ' \033[0;31mFAIL\033[0m %s\n' "$1"; }
26
-
27
- printf '→ smoke-work-summary (v7.1.0): Phase 7 Work Summary renderer contract\n'
28
-
29
- # --- 1: missing state → exit 2 ---
30
- tmp=$(mktemp -d); pushd "$tmp" >/dev/null
31
- set +e
32
- bash "$RENDER" GHOST-1 >/dev/null 2>&1
33
- rc=$?
34
- set -e
35
- if [ "$rc" = "2" ]; then
36
- record_pass "exit 2 when no state + no flags"
37
- else
38
- record_fail "expected exit 2 for empty state (got $rc)"
39
- fi
40
- popd >/dev/null; rm -rf "$tmp"
41
-
42
- # --- 2-5: full fixture ---
43
- tmp=$(mktemp -d); pushd "$tmp" >/dev/null
44
- mkdir -p .worktrees/PROJ-2001
45
- cat > .worktrees/PROJ-2001/agent-state.json <<'JSON'
46
- {"taskId":"PROJ-2001","branch":"feature/PROJ-2001-checkout-v2","baseBranch":"develop","prNumber":"#256",
47
- "planTodos":[
48
- {"id":"T1","title":"Add checkout acceptance tests","status":"done"},
49
- {"id":"T2","title":"Wire CheckoutViewModel","status":"done"},
50
- {"id":"T3","title":"Optimize cart recomposition","status":"deferred"}
51
- ],
52
- "reviewConsensus":{
53
- "accepted":[{"severity":"blocking","file":"ViewModel.swift","line":42,"issue":"race","fix":"lock","reviewer":"opus"}],
54
- "deferred":[],
55
- "rejected":[{"finding":{"severity":"suggestion","file":"x.swift","line":0,"issue":"style","reviewer":"sonnet"},"reason":"style-only"}],
56
- "approved":false
57
- }}
58
- JSON
59
- cat > .worktrees/PROJ-2001/phase-tracker.json <<'JSON'
60
- {"taskId":"PROJ-2001","phases":{
61
- "0":{"status":"completed"},"1":{"status":"completed"},"2":{"status":"completed"},
62
- "3":{"status":"completed"},"4":{"status":"completed"},"5":{"status":"skipped"},
63
- "6":{"status":"completed"},"7":{"status":"in_progress"}
64
- }}
65
- JSON
66
- out=$(bash "$RENDER" PROJ-2001)
67
- popd >/dev/null; rm -rf "$tmp"
68
-
69
- if grep -q '^### Work Summary' <<< "$out" && \
70
- grep -q 'PROJ-2001' <<< "$out" && \
71
- grep -q 'feature/PROJ-2001-checkout-v2' <<< "$out" && \
72
- grep -q '#256' <<< "$out"; then
73
- record_pass "renders task header with jira+branch+base+PR"
74
- else
75
- record_fail "task header missing fields"
76
- fi
77
-
78
- if grep -q '✅ T1' <<< "$out" && grep -q '✅ T2' <<< "$out"; then
79
- record_pass "scope marks done tasks with ✅"
80
- else
81
- record_fail "done tasks not marked ✅ (output: $(echo "$out" | head -20))"
82
- fi
83
-
84
- # deferred is not "done" - should get ⏳
85
- if grep -qE '⏳ T3' <<< "$out"; then
86
- record_pass "scope marks non-done tasks with ⏳"
87
- else
88
- record_fail "non-done tasks not marked ⏳"
89
- fi
90
-
91
- if grep -q '1 accepted · 0 deferred · 1 rejected · approved=false' <<< "$out"; then
92
- record_pass "review outcome line matches triage counts"
93
- else
94
- record_fail "review outcome line wrong (expected '1 accepted · 0 deferred · 1 rejected · approved=false')"
95
- fi
96
-
97
- if grep -q '0 Init ✅' <<< "$out" && \
98
- grep -q '5 Test ⏭' <<< "$out" && \
99
- grep -q '7 Report ▶' <<< "$out"; then
100
- record_pass "phase tick strip renders correct marks"
101
- else
102
- record_fail "phase tick marks incorrect"
103
- fi
104
-
105
- # --- 4b: review outcome suppressed when empty ---
106
- tmp=$(mktemp -d); pushd "$tmp" >/dev/null
107
- mkdir -p .worktrees/PROJ-2002
108
- cat > .worktrees/PROJ-2002/agent-state.json <<'JSON'
109
- {"taskId":"PROJ-2002","branch":"fix/PROJ-2002","baseBranch":"main",
110
- "planTodos":[{"id":"T1","title":"tiny fix","status":"done"}],
111
- "reviewConsensus":{"accepted":[],"deferred":[],"rejected":[],"approved":true}}
112
- JSON
113
- out=$(bash "$RENDER" PROJ-2002)
114
- popd >/dev/null; rm -rf "$tmp"
115
-
116
- if ! grep -q '#### Review outcome' <<< "$out"; then
117
- record_pass "review outcome hidden when all buckets empty"
118
- else
119
- record_fail "review outcome should be hidden when empty"
120
- fi
121
-
122
- # --- 6: post-hoc flags, no state ---
123
- tmp=$(mktemp -d); pushd "$tmp" >/dev/null
124
- out=$(bash "$RENDER" POST-HOC-1 --branch "bugfix/post-hoc" --base-branch develop 2>&1 || true)
125
- popd >/dev/null; rm -rf "$tmp"
126
- if grep -q '^### Work Summary' <<< "$out" && grep -q 'POST-HOC-1' <<< "$out"; then
127
- record_pass "post-hoc flags render header without state"
128
- else
129
- record_fail "post-hoc invocation should still render header"
130
- fi
131
-
132
- # --- 7: prefs schema ---
133
- if jq -e '.properties.global.properties.reportContent.properties.workSummary.default == false' "$SCHEMA" >/dev/null 2>&1; then
134
- record_pass "prefs schema exposes reportContent.workSummary (default false)"
135
- else
136
- record_fail "prefs schema missing reportContent.workSummary"
137
- fi
138
-
139
- # --- 8: channels.md docs ---
140
- if grep -q '### Work Summary' "$CHANNELS_DOC" && \
141
- grep -q 'Yapılan iş özeti' "$CHANNELS_DOC" && \
142
- grep -q 'Work summary generation' "$CHANNELS_DOC"; then
143
- record_pass "channels.md documents Work Summary content option + menu row + generation spec"
144
- else
145
- record_fail "channels.md missing Work Summary docs"
146
- fi
147
-
148
- # --- 9: v7.1.1 preview-first flow documented ---
149
- if grep -q 'Step 3a' "$CHANNELS_DOC" && \
150
- grep -q 'summary-first' "$CHANNELS_DOC" && \
151
- grep -q 'auto-tick' "$CHANNELS_DOC"; then
152
- record_pass "channels.md documents v7.1.1 preview-before-select flow"
153
- else
154
- record_fail "channels.md missing Step 3a summary-first flow docs"
155
- fi
156
-
157
- printf '\n══ work-summary smoke: %d passed, %d failed ══\n' "$pass" "$fail"
158
- if [ "$fail" -gt 0 ]; then
159
- printf '\nFailures:\n'
160
- for m in "${failures[@]}"; do printf ' - %s\n' "$m"; done
161
- exit 1
162
- fi
163
- exit 0
@@ -1,69 +0,0 @@
1
- #!/usr/bin/env bash
2
- #
3
- # smoke-workflow-audit.sh - security + correctness audit of
4
- # `.github/workflows/` with the two dedicated external linters:
5
- #
6
- # - zizmor GitHub Actions security auditor (template injection,
7
- # credential persistence, unpinned actions, ...). Runs in
8
- # offline mode so the smoke never touches the network.
9
- # - actionlint workflow correctness linter (expression syntax, matrix
10
- # typos, shellcheck of run: blocks, ...).
11
- #
12
- # Both tools are optional: each is skipped with a SKIP line when its binary
13
- # is not on PATH (billing-friendly CI runners install neither; run locally
14
- # via `brew install zizmor actionlint` for full coverage). Structural
15
- # baseline checks that need no external binary live in
16
- # smoke-ci-workflows.sh - this smoke is the deeper, tool-backed layer.
17
- #
18
- # Any finding from either tool fails the smoke.
19
- #
20
- # Exit codes: 0=pass or all tools skipped, 1=findings, 2=workflows missing
21
-
22
- set -uo pipefail
23
-
24
- REPO_ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
25
- WF_DIR="$REPO_ROOT/.github/workflows"
26
-
27
- [ -d "$WF_DIR" ] || { echo "FAIL: .github/workflows/ missing"; exit 2; }
28
-
29
- PASS=0
30
- FAIL=0
31
- SKIPPED=0
32
- pass() { PASS=$((PASS + 1)); echo " ✓ $1"; }
33
- fail() { FAIL=$((FAIL + 1)); echo " ✗ $1"; }
34
- skip() { SKIPPED=$((SKIPPED + 1)); echo " ↷ SKIP: $1"; }
35
-
36
- # ──────────────────────────────────────────────────────────────────────────
37
- echo "→ 1. zizmor (security audit, offline)"
38
- if command -v zizmor >/dev/null 2>&1; then
39
- # Flag names shifted across zizmor releases (--offline vs --no-online-audits);
40
- # probe --help so the smoke works with whichever is installed.
41
- HELP=$(zizmor --help 2>&1 || true)
42
- OFFLINE_FLAG="--offline"
43
- echo "$HELP" | grep -q -- '--offline' || OFFLINE_FLAG="--no-online-audits"
44
- if OUT=$(zizmor "$WF_DIR" --min-severity medium "$OFFLINE_FLAG" 2>&1); then
45
- pass "zizmor: no findings at medium+ severity"
46
- else
47
- fail "zizmor reported findings (medium+ severity)"
48
- echo "$OUT" | sed 's/^/ /'
49
- fi
50
- else
51
- skip "zizmor not on PATH (brew install zizmor)"
52
- fi
53
-
54
- # ──────────────────────────────────────────────────────────────────────────
55
- echo "→ 2. actionlint (workflow correctness)"
56
- if command -v actionlint >/dev/null 2>&1; then
57
- if OUT=$(cd "$REPO_ROOT" && actionlint 2>&1); then
58
- pass "actionlint: no findings"
59
- else
60
- fail "actionlint reported findings"
61
- echo "$OUT" | sed 's/^/ /'
62
- fi
63
- else
64
- skip "actionlint not on PATH (brew install actionlint)"
65
- fi
66
-
67
- echo ""
68
- echo "══ smoke-workflow-audit: $PASS passed, $FAIL failed, $SKIPPED skipped ══"
69
- [ "$FAIL" -gt 0 ] && exit 1 || exit 0
@@ -1,86 +0,0 @@
1
- #!/usr/bin/env bash
2
- #
3
- # smoke-worktree-path-convention.sh
4
- #
5
- # Asserts the pipeline never creates worktrees outside `{projectRoot}/{worktreeBasePath}/{taskId}`.
6
- # Per `feedback_worktree_path_convention.md`:
7
- # - Worktree is ALWAYS under the project root, NEVER under $HOME directly.
8
- # - Default basePath is `.worktrees`, override via `prefs.global.worktreeBasePath`.
9
- # - Multi-repo tasks: each repo gets its own independent worktree under that repo's root.
10
- #
11
- # This is a static-analysis lint, not a runtime probe. It greps the pipeline
12
- # source for forbidden worktree paths in shell scripts, markdown contracts,
13
- # and orchestrator command files. A behavioural check (live `git worktree list`)
14
- # is out of scope - that would require a real run.
15
-
16
- set -euo pipefail
17
-
18
- SELF_DIR=$(cd "$(dirname "$0")" && pwd)
19
- PIPELINE_ROOT=$(cd "$SELF_DIR/.." && pwd)
20
-
21
- cd "$PIPELINE_ROOT"
22
-
23
- FAIL=0
24
-
25
- # Forbidden patterns: any worktree path that lives under $HOME directly,
26
- # or uses repo-name--taskId style outside a project root.
27
- declare -a FORBIDDEN=(
28
- '\$HOME/\.worktrees' # $HOME/.worktrees/foo - wrong (must be under projectRoot)
29
- '~/\.worktrees' # ~/.worktrees/foo - same
30
- '\$HOME/[a-zA-Z0-9_-]+--[a-zA-Z0-9_-]+' # $HOME/repo--taskid pattern
31
- '~/[a-zA-Z0-9_-]+--[a-zA-Z0-9_-]+' # ~/repo--taskid pattern
32
- 'git worktree add.*\$HOME/[^.]' # `git worktree add $HOME/something`
33
- 'git worktree add.*~/[^/]' # `git worktree add ~/something`
34
- )
35
-
36
- # In-scope files: shell + markdown phase contracts + orchestrator skills.
37
- TARGETS=(
38
- "scripts/*.sh"
39
- "scripts/*.mjs"
40
- "lib/*.sh"
41
- "commands/multi-agent/SKILL.md"
42
- "commands/multi-agent/*.md"
43
- "multi-agent-refs/*.md"
44
- "multi-agent-refs/phases/*.md"
45
- "skills/shared/core/multi-agent/SKILL.md"
46
- )
47
-
48
- # Allowlist file paths - reference docs that mention the wrong pattern only
49
- # to teach the rule are tagged with `# allow: worktree-bad-example` annotation
50
- # on the offending line.
51
- for pattern in "${FORBIDDEN[@]}"; do
52
- for glob in "${TARGETS[@]}"; do
53
- while IFS= read -r match; do
54
- [ -z "$match" ] && continue
55
- file="${match%%:*}"
56
- # Allow lines that are rule-explanation examples (annotated).
57
- if echo "$match" | grep -q '# allow: worktree-bad-example'; then continue; fi
58
- # Allow this very smoke gate's own forbidden-pattern array.
59
- case "$file" in
60
- */smoke-worktree-path-convention.sh) continue ;;
61
- */feedback_worktree_path_convention.md) continue ;;
62
- esac
63
- echo "FAIL [smoke-worktree-path-convention]: forbidden worktree path in $file"
64
- echo " $match"
65
- FAIL=$((FAIL + 1))
66
- done < <(grep -rEn "$pattern" "pipeline/$glob" 2>/dev/null || true)
67
- done
68
- done
69
-
70
- # Positive assertion: phase-0-init.md MUST mention the convention text.
71
- PHASE0="multi-agent-refs/phases/phase-0-init.md"
72
- if [ -f "pipeline/$PHASE0" ]; then
73
- if ! grep -qE 'projectRoot.*worktreeBasePath|\.worktrees/.*taskId' "pipeline/$PHASE0"; then
74
- echo "FAIL [smoke-worktree-path-convention]: phase-0-init.md must document {projectRoot}/{worktreeBasePath}/{taskId} convention"
75
- FAIL=$((FAIL + 1))
76
- fi
77
- fi
78
-
79
- if [ "$FAIL" -gt 0 ]; then
80
- echo ""
81
- echo "smoke-worktree-path-convention: $FAIL violation(s)."
82
- echo "Worktree path contract: {projectRoot}/{worktreeBasePath default .worktrees}/{taskId}. Never under \$HOME directly. See feedback_worktree_path_convention.md."
83
- exit 1
84
- fi
85
-
86
- echo "smoke-worktree-path-convention: ok"
@@ -1,68 +0,0 @@
1
- #!/usr/bin/env bash
2
- # smoke-wrapper-preservation.sh - local-only alias wrappers must survive install/update.
3
- #
4
- # Local-only wrappers (frontmatter `local-only: true`) live ONLY under
5
- # ~/.claude/commands/multi-agent/ (never in pipeline/, never synced). install
6
- # wipes that namespace before copying from pipeline; without the snapshot+restore
7
- # carve-out in install/claude.mjs installCommands, wrappers are destroyed on every
8
- # run. This asserts they survive a second install.
9
-
10
- set -uo pipefail
11
- HERE="$(cd "$(dirname "$0")" && pwd)"
12
- ROOT="$(cd "$HERE/../.." && pwd)"
13
- INSTALL_JS="$ROOT/install.js"
14
-
15
- PASS=0; FAIL=0
16
- pass() { PASS=$((PASS+1)); echo " ✓ $1"; }
17
- fail() { FAIL=$((FAIL+1)); echo " ✗ $1"; }
18
-
19
- TMP="$(mktemp -d)"
20
- trap 'rm -rf "$TMP"' EXIT
21
-
22
- echo "→ 1. first install lays down the namespace"
23
- if HOME="$TMP" node "$INSTALL_JS" --claude >/dev/null 2>&1; then
24
- pass "install --claude (1st) exited 0"
25
- else
26
- fail "install --claude (1st) failed"
27
- echo "══ wrapper-preservation smoke: $PASS passed, $FAIL failed ══"; exit 1
28
- fi
29
-
30
- WRAP_DIR="$TMP/.claude/commands/multi-agent/zz-wrapper-probe"
31
- mkdir -p "$WRAP_DIR"
32
- cat > "$WRAP_DIR/SKILL.md" <<'EOF'
33
- ---
34
- description: "probe local-only wrapper"
35
- allowed-tools: Skill
36
- local-only: true
37
- ---
38
- Use the Skill tool to invoke `some-plugin:some-skill`.
39
- EOF
40
- [ -f "$WRAP_DIR/SKILL.md" ] && pass "seeded a local-only wrapper" || fail "could not seed wrapper"
41
-
42
- echo ""
43
- echo "→ 2. second install must PRESERVE the wrapper"
44
- if HOME="$TMP" node "$INSTALL_JS" --claude >/dev/null 2>&1; then
45
- pass "install --claude (2nd) exited 0"
46
- else
47
- fail "install --claude (2nd) failed"
48
- fi
49
- if [ -f "$WRAP_DIR/SKILL.md" ] && grep -q '^local-only: true' "$WRAP_DIR/SKILL.md"; then
50
- pass "local-only wrapper survived re-install"
51
- else
52
- fail "local-only wrapper was DESTROYED by re-install (carve-out regressed)"
53
- fi
54
-
55
- echo ""
56
- echo "→ 3. a normal (non-local-only) stray dir is still wiped"
57
- STRAY="$TMP/.claude/commands/multi-agent/zz-stray-probe"
58
- mkdir -p "$STRAY"; printf -- '---\ndescription: "stray"\n---\n' > "$STRAY/SKILL.md"
59
- HOME="$TMP" node "$INSTALL_JS" --claude >/dev/null 2>&1
60
- if [ -f "$STRAY/SKILL.md" ]; then
61
- fail "non-local-only stray survived (wipe too weak)"
62
- else
63
- pass "non-local-only stray correctly wiped"
64
- fi
65
-
66
- echo ""
67
- echo "══ wrapper-preservation smoke: $PASS passed, $FAIL failed ══"
68
- [ "$FAIL" -eq 0 ]
@@ -1,115 +0,0 @@
1
- #!/usr/bin/env bash
2
- # smoke-write-state.sh - verify write-state.mjs atomic write + merge + lock behavior.
3
-
4
- set -uo pipefail
5
-
6
- SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
7
- WRITER="$SCRIPT_DIR/write-state.mjs"
8
-
9
- if [ ! -f "$WRITER" ]; then
10
- echo "FAIL: write-state.mjs not found" >&2
11
- exit 1
12
- fi
13
-
14
- PASS=0
15
- FAIL=0
16
- pass() { PASS=$((PASS+1)); echo " ✓ $1"; }
17
- fail() { FAIL=$((FAIL+1)); echo " ✗ $1"; }
18
-
19
- TMPDIR=$(mktemp -d) || { echo "FAIL: mktemp" >&2; exit 1; }
20
- trap 'rm -rf "$TMPDIR"' EXIT
21
-
22
- STATE="$TMPDIR/state.json"
23
-
24
- # 1. Initial write creates file
25
- echo '{"currentPhase":0,"status":"in_progress"}' | node "$WRITER" "$STATE"
26
- if [ -f "$STATE" ] && grep -q '"currentPhase": 0' "$STATE"; then
27
- pass "initial write creates file"
28
- else
29
- fail "initial write missing/malformed"
30
- fi
31
-
32
- # 2. Merge preserves existing fields
33
- echo '{"currentPhase":3}' | node "$WRITER" "$STATE"
34
- if grep -q '"currentPhase": 3' "$STATE" && grep -q '"status": "in_progress"' "$STATE"; then
35
- pass "merge preserves untouched fields"
36
- else
37
- fail "merge dropped fields"
38
- fi
39
-
40
- # 3. Nested merge
41
- echo '{"phases":{"3":{"status":"done"}}}' | node "$WRITER" "$STATE"
42
- echo '{"phases":{"4":{"status":"in_progress"}}}' | node "$WRITER" "$STATE"
43
- if grep -q '"3"' "$STATE" && grep -q '"4"' "$STATE"; then
44
- pass "nested merge preserves sibling keys"
45
- else
46
- fail "nested merge overwrote sibling keys"
47
- fi
48
-
49
- # 4. --replace overwrites completely
50
- echo '{"currentPhase":7}' | node "$WRITER" --replace "$STATE"
51
- if ! grep -q '"status"' "$STATE" && grep -q '"currentPhase": 7' "$STATE"; then
52
- pass "--replace overwrites full state"
53
- else
54
- fail "--replace did not fully overwrite"
55
- fi
56
-
57
- # 5. Invalid JSON exits 1
58
- echo 'not-json' | node "$WRITER" "$TMPDIR/other.json" 2>/dev/null
59
- if [ $? -eq 1 ]; then
60
- pass "invalid JSON exits 1"
61
- else
62
- fail "invalid JSON did not exit 1"
63
- fi
64
-
65
- # 6. Empty stdin exits 1
66
- : | node "$WRITER" "$TMPDIR/empty.json" 2>/dev/null
67
- if [ $? -eq 1 ]; then
68
- pass "empty stdin exits 1"
69
- else
70
- fail "empty stdin did not exit 1"
71
- fi
72
-
73
- # 7. Missing path arg exits 3
74
- echo '{}' | node "$WRITER" 2>/dev/null
75
- if [ $? -eq 3 ]; then
76
- pass "missing path exits 3"
77
- else
78
- fail "missing path did not exit 3"
79
- fi
80
-
81
- # 8. Atomic - no .tmp leftover after success
82
- if ls "$TMPDIR"/.state.json.*.tmp 2>/dev/null | head -1 | grep -q .; then
83
- fail "leftover .tmp file after success"
84
- else
85
- pass "no .tmp leftover after successful write"
86
- fi
87
-
88
- # 9. No .lock leftover after success
89
- if [ -f "$STATE.lock" ]; then
90
- fail "leftover .lock file after success"
91
- else
92
- pass "no .lock leftover after successful write"
93
- fi
94
-
95
- # 10. Concurrent writers don't corrupt state
96
- STATE2="$TMPDIR/concurrent.json"
97
- echo '{"counter":0}' | node "$WRITER" "$STATE2"
98
- for i in 1 2 3 4 5; do
99
- echo "{\"w$i\":$i}" | node "$WRITER" "$STATE2" &
100
- done
101
- wait
102
- # All 5 keys should be present (deep merge)
103
- MISSING=0
104
- for i in 1 2 3 4 5; do
105
- grep -q "\"w$i\": $i" "$STATE2" || MISSING=$((MISSING+1))
106
- done
107
- if [ "$MISSING" -eq 0 ]; then
108
- pass "5 concurrent writers all persisted"
109
- else
110
- fail "$MISSING concurrent writes lost"
111
- fi
112
-
113
- echo ""
114
- echo "══ write-state smoke: $PASS passed, $FAIL failed ══"
115
- [ "$FAIL" -eq 0 ] || exit 1
@@ -1,135 +0,0 @@
1
- #!/usr/bin/env bash
2
- # sync-parity-check.sh - detect drift between two pipeline mirror trees.
3
- #
4
- # Use case: after editing the pipeline locally (e.g. ~/.claude/commands/multi-agent/),
5
- # verify that the open-source repo (~/multi-agent-pipeline/pipeline/) and the
6
- # Copilot mirror (~/.copilot/multi-agent/) are still byte-identical for the
7
- # files that should be shared.
8
- #
9
- # Why this exists:
10
- # The sync-instructions skill is the official "copy from A to B" tool, but
11
- # nothing currently catches drift if the user forgets to run it. This script
12
- # is the watchdog - run it before committing or as part of a pre-push hook.
13
- #
14
- # Usage:
15
- # sync-parity-check.sh <left-dir> <right-dir> [--ignore <regex>]...
16
- #
17
- # Examples:
18
- # # Compare Claude personal copy vs. open-source repo:
19
- # sync-parity-check.sh \
20
- # ~/.claude/commands/multi-agent \
21
- # ~/multi-agent-pipeline/pipeline/commands/multi-agent
22
- #
23
- # # Compare Claude vs. Copilot mirrors, ignoring help.md if it intentionally
24
- # # diverges:
25
- # sync-parity-check.sh \
26
- # ~/.claude/commands/multi-agent \
27
- # ~/.copilot/multi-agent \
28
- # --ignore '/help\.md$'
29
- #
30
- # Exit codes:
31
- # 0 - perfect parity (or only ignored files differ)
32
- # 1 - drift detected (lists differing + missing-from-each-side)
33
- # 2 - usage error
34
-
35
- set -uo pipefail
36
-
37
- if [ "$#" -lt 2 ]; then
38
- echo "usage: sync-parity-check.sh <left-dir> <right-dir> [--ignore <regex>]..." >&2
39
- exit 2
40
- fi
41
-
42
- LEFT="$1"; shift
43
- RIGHT="$1"; shift
44
-
45
- IGNORES=()
46
- while [ "$#" -gt 0 ]; do
47
- case "$1" in
48
- --ignore)
49
- IGNORES+=("$2"); shift 2 ;;
50
- *)
51
- echo "unknown arg: $1" >&2; exit 2 ;;
52
- esac
53
- done
54
-
55
- [ -d "$LEFT" ] || { echo "error: left dir not found: $LEFT" >&2; exit 2; }
56
- [ -d "$RIGHT" ] || { echo "error: right dir not found: $RIGHT" >&2; exit 2; }
57
-
58
- # Resolve to absolute, normalized paths.
59
- LEFT="$(cd "$LEFT" && pwd)"
60
- RIGHT="$(cd "$RIGHT" && pwd)"
61
-
62
- is_ignored() {
63
- local rel="$1"
64
- for pat in "${IGNORES[@]+"${IGNORES[@]}"}"; do
65
- if [[ "$rel" =~ $pat ]]; then return 0; fi
66
- done
67
- return 1
68
- }
69
-
70
- # Collect file lists, relative to each root.
71
- LEFT_FILES=$(cd "$LEFT" && find . -type f | sort)
72
- RIGHT_FILES=$(cd "$RIGHT" && find . -type f | sort)
73
-
74
- # Files only on one side.
75
- ONLY_LEFT=$(comm -23 <(echo "$LEFT_FILES") <(echo "$RIGHT_FILES"))
76
- ONLY_RIGHT=$(comm -13 <(echo "$LEFT_FILES") <(echo "$RIGHT_FILES"))
77
- COMMON=$(comm -12 <(echo "$LEFT_FILES") <(echo "$RIGHT_FILES"))
78
-
79
- # Report and tally.
80
- DRIFT=0
81
- MISSING_RIGHT=0
82
- MISSING_LEFT=0
83
- DIFFERS=0
84
- IGNORED=0
85
-
86
- # Files only on the LEFT (missing from RIGHT).
87
- while IFS= read -r f; do
88
- [ -z "$f" ] && continue
89
- rel="${f#./}"
90
- if is_ignored "$rel"; then IGNORED=$((IGNORED+1)); continue; fi
91
- echo "MISSING-FROM-RIGHT $rel"
92
- MISSING_RIGHT=$((MISSING_RIGHT+1))
93
- DRIFT=1
94
- done <<< "$ONLY_LEFT"
95
-
96
- # Files only on the RIGHT (missing from LEFT).
97
- while IFS= read -r f; do
98
- [ -z "$f" ] && continue
99
- rel="${f#./}"
100
- if is_ignored "$rel"; then IGNORED=$((IGNORED+1)); continue; fi
101
- echo "MISSING-FROM-LEFT $rel"
102
- MISSING_LEFT=$((MISSING_LEFT+1))
103
- DRIFT=1
104
- done <<< "$ONLY_RIGHT"
105
-
106
- # Files present on both sides - content compare.
107
- while IFS= read -r f; do
108
- [ -z "$f" ] && continue
109
- rel="${f#./}"
110
- if is_ignored "$rel"; then IGNORED=$((IGNORED+1)); continue; fi
111
- if ! diff -q "$LEFT/$rel" "$RIGHT/$rel" >/dev/null 2>&1; then
112
- echo "DIFFERS $rel"
113
- DIFFERS=$((DIFFERS+1))
114
- DRIFT=1
115
- fi
116
- done <<< "$COMMON"
117
-
118
- echo ""
119
- echo "── parity summary ──"
120
- echo "left: $LEFT"
121
- echo "right: $RIGHT"
122
- echo "files differ: $DIFFERS"
123
- echo "missing from right: $MISSING_RIGHT"
124
- echo "missing from left: $MISSING_LEFT"
125
- echo "ignored: $IGNORED"
126
-
127
- if [ "$DRIFT" -eq 0 ]; then
128
- echo "result: PARITY"
129
- exit 0
130
- else
131
- echo "result: DRIFT"
132
- echo ""
133
- echo "fix: run /sync-instructions full to bring mirrors back in sync." >&2
134
- exit 1
135
- fi
@@ -1,25 +0,0 @@
1
- {
2
- "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "stack": "android",
4
- "description": "Android / Jetpack Compose / Kotlin test gap rules. Sources in *.kt; tests under app/src/test/ or app/src/androidTest/.",
5
- "sourceExtensions": [".kt", ".java"],
6
- "testPathSuffixes": ["Test.kt", "Tests.kt", "Test.java"],
7
- "testPathContains": ["/src/test/", "/src/androidTest/", "/test/", "/tests/"],
8
- "excludePathGlobs": [
9
- "build/", ".gradle/", "generated/",
10
- "**/BuildConfig.java", "**/R.java"
11
- ],
12
- "publicApiPatterns": [
13
- {"id": "open_class", "regex": "\\bopen\\s+class\\s+([A-Z][A-Za-z0-9_]*)"},
14
- {"id": "open_fun", "regex": "\\bopen\\s+fun\\s+([a-z_][A-Za-z0-9_]*)"},
15
- {"id": "public_fun", "regex": "^\\s*(?:public\\s+)?fun\\s+([a-z_][A-Za-z0-9_]*)"},
16
- {"id": "public_class", "regex": "^\\s*(?:public\\s+)?class\\s+([A-Z][A-Za-z0-9_]*)"},
17
- {"id": "jvmstatic", "regex": "@JvmStatic\\b"},
18
- {"id": "interface", "regex": "^\\s*(?:public\\s+)?interface\\s+([A-Z][A-Za-z0-9_]*)"}
19
- ],
20
- "composablePatterns": [
21
- {"id": "composable_fun", "regex": "@Composable\\s+(?:public\\s+|internal\\s+)?fun\\s+([A-Z][A-Za-z0-9_]*)"}
22
- ],
23
- "expectedTestKindsForComposable": ["compose-ui-test"],
24
- "hint": "Cover @Composable functions with createComposeRule() + onNodeWithText/Tag/ContentDescription assertions; ViewModels with runTest + Turbine."
25
- }