@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,190 +0,0 @@
1
- #!/usr/bin/env bash
2
- # smoke-diff-risk.sh - v8.3.0
3
- #
4
- # Verifies the Phase 4 advisory diff-risk pipeline:
5
- # 1. diff-risk-score.mjs runs against the iOS fixture and produces valid JSON
6
- # 2. KeychainStore (security path) ranks first
7
- # 3. Tests file ranks last (no security/public_api/migration signal)
8
- # 4. validate-diff-risk.mjs accepts the output, rejects malformed
9
- # 5. Android fixture: migration outranks AuthRepository outranks HomeScreen
10
- # 6. --top truncation honored
11
- # 7. Empty diff returns exit 2
12
- # 8. phase-4-review.md ref doc declares Step 1.75 + diff-risk-score.mjs
13
- # 9. code-reviewer.md agent template carries the priority-files placeholder
14
- # 10. prefs.schema.json exposes diffRisk advisory toggle
15
- # 11. test-removal fixture fires the test_lines_removed signal (v1.1.0)
16
- #
17
- # Exit 0 = all pass, 1 = any failure.
18
-
19
- set -euo pipefail
20
-
21
- ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
22
- SCORE="$ROOT/pipeline/scripts/diff-risk-score.mjs"
23
- VALIDATE="$ROOT/pipeline/scripts/validate-diff-risk.mjs"
24
- SCHEMA="$ROOT/pipeline/schemas/diff-risk.schema.json"
25
- PHASE4="$ROOT/pipeline/multi-agent-refs/phases/phase-4-review.md"
26
- REVIEWER="$ROOT/pipeline/agents/code-reviewer.md"
27
- PREFS="$ROOT/pipeline/schemas/prefs.schema.json"
28
- FIX_IOS="$ROOT/pipeline/scripts/fixtures/diff-risk-ios.diff"
29
- FIX_AND="$ROOT/pipeline/scripts/fixtures/diff-risk-android.diff"
30
- FIX_TESTRM="$ROOT/pipeline/scripts/fixtures/diff-risk-test-removal.diff"
31
-
32
- pass=0
33
- fail=0
34
- failures=()
35
- record_pass() { pass=$((pass + 1)); printf ' \033[0;32mPASS\033[0m %s\n' "$1"; }
36
- record_fail() { fail=$((fail + 1)); failures+=("$1"); printf ' \033[0;31mFAIL\033[0m %s\n' "$1"; }
37
-
38
- printf '→ smoke-diff-risk (v8.3.0): pre-review risk scoring contract\n'
39
-
40
- [ -f "$SCHEMA" ] || { record_fail "schema missing: $SCHEMA"; exit 1; }
41
- [ -f "$FIX_IOS" ] || { record_fail "fixture missing: $FIX_IOS"; exit 1; }
42
- [ -f "$FIX_AND" ] || { record_fail "fixture missing: $FIX_AND"; exit 1; }
43
- [ -f "$FIX_TESTRM" ] || { record_fail "fixture missing: $FIX_TESTRM"; exit 1; }
44
-
45
- # --- 1: iOS fixture produces JSON ---
46
- out_ios=$(node "$SCORE" --diff "$FIX_IOS" 2>/dev/null)
47
- if jq -e '.schemaVersion == "1.1.0"' <<< "$out_ios" >/dev/null 2>&1; then
48
- record_pass "iOS fixture renders schema-versioned JSON"
49
- else
50
- record_fail "iOS fixture JSON malformed or missing schemaVersion"
51
- fi
52
-
53
- # --- 2: KeychainStore ranks first ---
54
- top1=$(jq -r '.files[0].path' <<< "$out_ios")
55
- if [ "$top1" = "MyApp/Sources/Auth/KeychainStore.swift" ]; then
56
- record_pass "iOS top-1 = KeychainStore (security_path + public_api + no_test)"
57
- else
58
- record_fail "iOS top-1 should be KeychainStore, got: $top1"
59
- fi
60
-
61
- # --- 3: Test file ranks last ---
62
- last=$(jq -r '.files[-1].path' <<< "$out_ios")
63
- if [ "$last" = "MyAppTests/SettingsViewTests.swift" ]; then
64
- record_pass "iOS last = test file (no risk signals beyond loc_changed)"
65
- else
66
- record_fail "iOS last should be test file, got: $last"
67
- fi
68
-
69
- # --- 4: Validator accepts valid output, rejects malformed ---
70
- set +e
71
- echo "$out_ios" | node "$VALIDATE" - >/dev/null 2>&1
72
- rc_ok=$?
73
- echo '{"schemaVersion":"0.0.0","files":[]}' | node "$VALIDATE" - >/dev/null 2>&1
74
- rc_bad=$?
75
- set -e
76
- if [ "$rc_ok" -eq 0 ]; then
77
- record_pass "validator accepts valid output"
78
- else
79
- record_fail "validator rejected valid output (rc=$rc_ok)"
80
- fi
81
- if [ "$rc_bad" -ne 0 ]; then
82
- record_pass "validator rejects malformed input"
83
- else
84
- record_fail "validator should reject malformed (got rc=$rc_bad)"
85
- fi
86
-
87
- # --- 5: Android ranking ---
88
- out_and=$(node "$SCORE" --diff "$FIX_AND" 2>/dev/null)
89
- top1=$(jq -r '.files[0].path' <<< "$out_and")
90
- top2=$(jq -r '.files[1].path' <<< "$out_and")
91
- top3=$(jq -r '.files[2].path' <<< "$out_and")
92
- if [[ "$top1" == *"Migration_3_to_4.kt"* ]]; then
93
- record_pass "Android top-1 = migration file"
94
- else
95
- record_fail "Android top-1 should be migration, got: $top1"
96
- fi
97
- if [[ "$top2" == *"AuthRepository.kt"* ]]; then
98
- record_pass "Android top-2 = AuthRepository (security_path)"
99
- else
100
- record_fail "Android top-2 should be AuthRepository, got: $top2"
101
- fi
102
- if [[ "$top3" == *"HomeScreen.kt"* ]]; then
103
- record_pass "Android top-3 = HomeScreen (ui_critical)"
104
- else
105
- record_fail "Android top-3 should be HomeScreen, got: $top3"
106
- fi
107
-
108
- # --- 6: --top N truncates ---
109
- out_top2=$(node "$SCORE" --diff "$FIX_IOS" --top 2 2>/dev/null)
110
- n=$(jq '.files | length' <<< "$out_top2")
111
- if [ "$n" = "2" ]; then
112
- record_pass "--top 2 truncates files array"
113
- else
114
- record_fail "--top 2 should keep 2 rows, got $n"
115
- fi
116
-
117
- # --- 7: Empty diff exits 2 ---
118
- empty=$(mktemp)
119
- set +e
120
- node "$SCORE" --diff "$empty" >/dev/null 2>&1
121
- rc=$?
122
- set -e
123
- rm -f "$empty"
124
- if [ "$rc" -eq 2 ]; then
125
- record_pass "empty diff exits 2"
126
- else
127
- record_fail "empty diff should exit 2, got $rc"
128
- fi
129
-
130
- # --- 8: phase-4-review.md declares the advisory step ---
131
- if grep -qE '^####? .*Diff Risk' "$PHASE4"; then
132
- record_pass "phase-4-review.md declares Diff Risk step"
133
- else
134
- record_fail "phase-4-review.md missing Diff Risk step heading"
135
- fi
136
- if grep -q 'diff-risk-score.mjs' "$PHASE4"; then
137
- record_pass "phase-4-review.md references diff-risk-score.mjs"
138
- else
139
- record_fail "phase-4-review.md missing script reference"
140
- fi
141
-
142
- # --- 9: code-reviewer.md template carries priority placeholder ---
143
- if grep -q 'Priority Files' "$REVIEWER"; then
144
- record_pass "code-reviewer.md declares Priority Files section"
145
- else
146
- record_fail "code-reviewer.md missing Priority Files section"
147
- fi
148
-
149
- # --- 10: prefs schema exposes diffRisk advisory toggle ---
150
- if jq -e '.properties.global.properties.diffRiskAdvisory' "$PREFS" >/dev/null 2>&1; then
151
- record_pass "prefs schema exposes diffRiskAdvisory toggle"
152
- else
153
- record_fail "prefs.schema.json missing global.diffRiskAdvisory"
154
- fi
155
-
156
- # --- 11: test_lines_removed signal fires on the test-removal fixture ---
157
- out_testrm=$(node "$SCORE" --diff "$FIX_TESTRM" 2>/dev/null)
158
- sig_value=$(jq -r '.files[] | select(.path == "MyAppTests/LoginViewModelTests.swift")
159
- | .signals[] | select(.name == "test_lines_removed") | .value' <<< "$out_testrm")
160
- if [ "$sig_value" = "16" ]; then
161
- record_pass "test_lines_removed fires with value=16 (18 removed - 2 added)"
162
- else
163
- record_fail "test_lines_removed should fire with value=16, got: ${sig_value:-missing}"
164
- fi
165
- sig_on_source=$(jq -r '[.files[] | select(.path == "MyApp/Sources/Auth/LoginViewModel.swift")
166
- | .signals[] | select(.name == "test_lines_removed")] | length' <<< "$out_testrm")
167
- if [ "$sig_on_source" = "0" ]; then
168
- record_pass "test_lines_removed does not fire on source files"
169
- else
170
- record_fail "test_lines_removed must only fire on test-classified paths"
171
- fi
172
- set +e
173
- echo "$out_testrm" | node "$VALIDATE" - >/dev/null 2>&1
174
- rc_testrm=$?
175
- set -e
176
- if [ "$rc_testrm" -eq 0 ]; then
177
- record_pass "validator accepts output carrying test_lines_removed"
178
- else
179
- record_fail "validator rejected test_lines_removed output (rc=$rc_testrm)"
180
- fi
181
-
182
- # --- Summary ---
183
- total=$((pass + fail))
184
- printf '\n→ smoke-diff-risk: %d/%d passed\n' "$pass" "$total"
185
- if [ "$fail" -ne 0 ]; then
186
- printf '\nFailures:\n'
187
- for f in "${failures[@]}"; do printf ' - %s\n' "$f"; done
188
- exit 1
189
- fi
190
- exit 0
@@ -1,160 +0,0 @@
1
- #!/usr/bin/env bash
2
- # smoke-dynamic-skill-loading.sh - v7.0.I
3
- #
4
- # Verifies the index + matcher contract:
5
- # 1. build-skills-index.mjs produces valid JSON with schemaVersion + entries
6
- # 2. index skill count matches the raw filesystem count
7
- # 3. match-skills.mjs ranks iOS skills higher on a SwiftUI task
8
- # 4. match-skills.mjs --json returns sorted matches[]
9
- # 5. matcher platform boost applies when --stack matches frontmatter
10
- # 6. matcher returns empty matches[] for a task with no relevant skills
11
- # 7. matcher --limit honored
12
- # 8. prefs schema exposes dynamicSkillLoading default false
13
- #
14
- # Exit 0 all pass, 1 any failure.
15
-
16
- set -euo pipefail
17
-
18
- ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
19
- BUILD="$ROOT/pipeline/scripts/build-skills-index.mjs"
20
- MATCH="$ROOT/pipeline/scripts/match-skills.mjs"
21
- SCHEMA="$ROOT/pipeline/schemas/prefs.schema.json"
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-dynamic-skill-loading (v7.0.I): index + matcher contract\n'
28
-
29
- # Build into a sandbox so we don't clobber the shipping index
30
- sandbox=$(mktemp -d)
31
- skills="$sandbox/skills"
32
- mkdir -p "$skills/core/multi-agent" "$skills/core/testing-backend" "$skills/external/swiftui-pro" "$skills/external/compose-components"
33
-
34
- cat > "$skills/core/multi-agent/SKILL.md" <<'S'
35
- ---
36
- name: multi-agent
37
- description: Task orchestrator for the multi-agent pipeline
38
- platform: generic
39
- ---
40
- body
41
- S
42
-
43
- cat > "$skills/core/testing-backend/SKILL.md" <<'S'
44
- ---
45
- name: testing-backend
46
- description: Backend testing patterns for pytest / Jest
47
- platform: backend
48
- trigger-keywords: pytest, jest, integration test
49
- ---
50
- body
51
- S
52
-
53
- cat > "$skills/external/swiftui-pro/SKILL.md" <<'S'
54
- ---
55
- name: swiftui-pro
56
- description: SwiftUI review for modern APIs, state management, performance
57
- platform: ios
58
- trigger-keywords: swiftui, swift, ios, swiftui performance
59
- trigger-paths: *.swift, **/Sources/**/*.swift
60
- ---
61
- body
62
- S
63
-
64
- cat > "$skills/external/compose-components/SKILL.md" <<'S'
65
- ---
66
- name: compose-components
67
- description: Material 3 Jetpack Compose components
68
- platform: android
69
- trigger-keywords: compose, jetpack, material 3, android
70
- trigger-paths: *.kt, **/src/main/**/*.kt
71
- ---
72
- body
73
- S
74
-
75
- # --- 1: build index ---
76
- node "$BUILD" --root "$skills" >/dev/null
77
- INDEX="$skills/.skills-index.json"
78
- if [ -f "$INDEX" ] && jq -e '.schemaVersion and .entries and (.skillCount == 4)' "$INDEX" >/dev/null; then
79
- record_pass "build-skills-index emits valid JSON with 4 entries"
80
- else
81
- record_fail "build-skills-index output malformed"
82
- fi
83
-
84
- # --- 2: count matches filesystem ---
85
- raw_count=$(find "$skills" -name SKILL.md | wc -l | tr -d ' ')
86
- index_count=$(jq -r '.skillCount' "$INDEX")
87
- if [ "$raw_count" = "$index_count" ]; then
88
- record_pass "index count matches filesystem ($index_count)"
89
- else
90
- record_fail "index count $index_count != filesystem $raw_count"
91
- fi
92
-
93
- # --- 3: iOS task ranks SwiftUI skills higher ---
94
- out=$(node "$MATCH" "SwiftUI dark mode fix on LoginView" \
95
- --touched-files "Sources/Auth/LoginView.swift" \
96
- --stack ios --limit 4 --index "$INDEX" --json)
97
- top=$(jq -r '.matches[0].name' <<< "$out")
98
- if [ "$top" = "swiftui-pro" ]; then
99
- record_pass "iOS task ranks swiftui-pro top ($top)"
100
- else
101
- record_fail "iOS task should rank swiftui-pro first, got $top"
102
- fi
103
-
104
- # --- 4: JSON output is sorted ---
105
- scores=$(jq -r '.matches[].score' <<< "$out")
106
- prev=9999; sorted=1
107
- for s in $scores; do
108
- if [ "$s" -gt "$prev" ]; then sorted=0; break; fi
109
- prev=$s
110
- done
111
- if [ "$sorted" = "1" ]; then
112
- record_pass "JSON matches[] sorted by score desc"
113
- else
114
- record_fail "matches[] not sorted"
115
- fi
116
-
117
- # --- 5: platform boost ---
118
- # A keyword-free task with only --stack android should still boost Android skill
119
- out=$(node "$MATCH" "Build the feature end to end" --stack android --limit 4 --index "$INDEX" --json)
120
- rules=$(jq -r '.matches[] | select(.name=="compose-components") | .reasons[].rule' <<< "$out" 2>/dev/null || echo "")
121
- if echo "$rules" | grep -q 'platform'; then
122
- record_pass "platform boost reason present for matched stack"
123
- else
124
- record_fail "platform boost missing for --stack android"
125
- fi
126
-
127
- # --- 6: empty matches ---
128
- out=$(node "$MATCH" "Totally unrelated lmn xyz qrs foobar baz" --limit 4 --index "$INDEX" --json)
129
- n=$(jq '.matches | length' <<< "$out")
130
- if [ "$n" = "0" ]; then
131
- record_pass "empty matches[] for unrelated task"
132
- else
133
- record_fail "expected 0 matches for unrelated task, got $n"
134
- fi
135
-
136
- # --- 7: --limit honored ---
137
- out=$(node "$MATCH" "swiftui compose test pipeline" --limit 2 --index "$INDEX" --json)
138
- n=$(jq '.matches | length' <<< "$out")
139
- if [ "$n" -le "2" ]; then
140
- record_pass "--limit 2 returns at most 2 matches ($n)"
141
- else
142
- record_fail "--limit 2 returned $n"
143
- fi
144
-
145
- # --- 8: schema pref ---
146
- if jq -e '.properties.global.properties.dynamicSkillLoading.default == false' "$SCHEMA" >/dev/null 2>&1; then
147
- record_pass "prefs schema exposes dynamicSkillLoading default false"
148
- else
149
- record_fail "prefs schema missing dynamicSkillLoading or wrong default"
150
- fi
151
-
152
- rm -rf "$sandbox"
153
-
154
- printf '\n══ dynamic-skill-loading smoke: %d passed, %d failed ══\n' "$pass" "$fail"
155
- if [ "$fail" -gt 0 ]; then
156
- printf '\nFailures:\n'
157
- for m in "${failures[@]}"; do printf ' - %s\n' "$m"; done
158
- exit 1
159
- fi
160
- exit 0
@@ -1,136 +0,0 @@
1
- #!/usr/bin/env bash
2
- # smoke-eval-live.sh - v7.8.0 Paket A: opt-in live golden-task runner.
3
- #
4
- # Validates the cost-guarding contract WITHOUT making any model calls. Live
5
- # mode is gated behind two independent signals (--live flag AND
6
- # MULTI_AGENT_LIVE_EVAL=1 env) so accidental cost is impossible during CI
7
- # or local `npm test` runs.
8
- #
9
- # All assertions exercise the dry-run code path or expect early-exit before
10
- # any model invocation.
11
-
12
- set -uo pipefail
13
-
14
- REPO_ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
15
- SCRIPT="$REPO_ROOT/pipeline/scripts/eval-golden-tasks-live.mjs"
16
-
17
- PASS=0
18
- FAIL=0
19
- pass() { PASS=$((PASS + 1)); echo " ✓ $1"; }
20
- fail() { FAIL=$((FAIL + 1)); echo " ✗ $1"; }
21
-
22
- cleanup() { [ -n "${TMP:-}" ] && rm -rf "$TMP"; }
23
- trap cleanup EXIT
24
- TMP=$(mktemp -d)
25
-
26
- # Strip env that would unlock live mode; smoke MUST never spend money.
27
- unset MULTI_AGENT_LIVE_EVAL
28
-
29
- # ──────────────────────────────────────────────────────────────────────────
30
- echo "→ 1. Script presence + syntax"
31
- [ -x "$SCRIPT" ] && pass "eval-golden-tasks-live.mjs is executable" || fail "script not executable"
32
- node --check "$SCRIPT" 2>/dev/null && pass "syntax check" || fail "syntax error"
33
-
34
- # ──────────────────────────────────────────────────────────────────────────
35
- echo "→ 2. Default mode is dry-run (no --live, no env)"
36
- OUT=$(node "$SCRIPT" --json 2>/dev/null)
37
- if echo "$OUT" | grep -q '"mode": "dry-run"'; then
38
- pass "default mode = dry-run"
39
- else
40
- fail "default mode not dry-run: $(echo "$OUT" | head -3)"
41
- fi
42
-
43
- # ──────────────────────────────────────────────────────────────────────────
44
- echo "→ 3. Dry-run does not invoke model"
45
- # All cases must end with status "skipped-dry-run" - i.e. no live call
46
- SKIPPED_COUNT=$(echo "$OUT" | grep -c '"pass": "skipped-dry-run"' || true)
47
- if [ "$SKIPPED_COUNT" -ge 1 ]; then
48
- pass "dry-run skipped all cases ($SKIPPED_COUNT) without invoking model"
49
- else
50
- fail "dry-run did not skip cases properly"
51
- fi
52
-
53
- # ──────────────────────────────────────────────────────────────────────────
54
- echo "→ 4. --live without env exits 2 (cost gate)"
55
- node "$SCRIPT" --live 2>"$TMP/err.txt"
56
- EC=$?
57
- if [ "$EC" -eq 2 ] && grep -q "MULTI_AGENT_LIVE_EVAL" "$TMP/err.txt"; then
58
- pass "--live without env: exit $EC + cost gate message"
59
- else
60
- fail "--live cost gate weak (exit=$EC, err='$(cat "$TMP/err.txt")')"
61
- fi
62
-
63
- # ──────────────────────────────────────────────────────────────────────────
64
- echo "→ 5. Static check - no fall-through past cost gate"
65
- # The cost gate must be the first thing checked after flag parsing. If --live
66
- # is set without env, no model call should be reachable. Verify by static
67
- # grep: spawnSync("claude", ...) must come AFTER the env-check block.
68
- GATE_LINE=$(grep -n 'MULTI_AGENT_LIVE_EVAL' "$SCRIPT" | head -1 | cut -d: -f1)
69
- CALL_LINE=$(grep -n 'spawnSync("claude"' "$SCRIPT" | head -1 | cut -d: -f1)
70
- if [ -n "$GATE_LINE" ] && [ -n "$CALL_LINE" ] && [ "$GATE_LINE" -lt "$CALL_LINE" ]; then
71
- pass "cost gate at line $GATE_LINE precedes claude call at line $CALL_LINE"
72
- else
73
- fail "cost gate ordering wrong (gate=$GATE_LINE, call=$CALL_LINE)"
74
- fi
75
-
76
- # ──────────────────────────────────────────────────────────────────────────
77
- echo "→ 6. Budget cap honored - total-budget < single case budget skips all"
78
- OUT=$(node "$SCRIPT" --max-cases=5 --budget=0.5 --total-budget=0.1 --json 2>/dev/null)
79
- RUN_COUNT=$(echo "$OUT" | grep -oE '"cases_run":[[:space:]]*[0-9]+' | grep -oE '[0-9]+')
80
- SKIPPED=$(echo "$OUT" | grep -c '"skipped-budget-exhausted"' || true)
81
- if [ "$SKIPPED" -ge 1 ]; then
82
- pass "budget exhaustion produces 'skipped-budget-exhausted' result ($SKIPPED times)"
83
- else
84
- pass "budget very tight: cases_run=$RUN_COUNT (acceptable in dry-run mode)"
85
- fi
86
-
87
- # ──────────────────────────────────────────────────────────────────────────
88
- echo "→ 7. --max-cases caps the run"
89
- OUT=$(node "$SCRIPT" --max-cases=1 --json 2>/dev/null)
90
- RUN_COUNT=$(echo "$OUT" | grep -oE '"cases_run":[[:space:]]*[0-9]+' | grep -oE '[0-9]+')
91
- if [ "$RUN_COUNT" = "1" ]; then
92
- pass "--max-cases=1 limits cases_run to 1"
93
- else
94
- fail "--max-cases not honored: cases_run=$RUN_COUNT"
95
- fi
96
-
97
- # ──────────────────────────────────────────────────────────────────────────
98
- echo "→ 8. --case selector"
99
- OUT=$(node "$SCRIPT" --case 01-ios-bugfix-darkmode --json 2>/dev/null)
100
- if echo "$OUT" | grep -q '"case": "01-ios-bugfix-darkmode"'; then
101
- pass "--case selector picks the right fixture"
102
- else
103
- fail "--case selector did not target fixture"
104
- fi
105
-
106
- node "$SCRIPT" --case nonexistent-case 2>"$TMP/err.txt"
107
- EC=$?
108
- if [ "$EC" -eq 2 ] && grep -q "not found" "$TMP/err.txt"; then
109
- pass "unknown --case exits 2 with 'not found'"
110
- else
111
- fail "unknown --case error weak (exit=$EC)"
112
- fi
113
-
114
- # ──────────────────────────────────────────────────────────────────────────
115
- echo "→ 9. Help text mentions cost gate prominently"
116
- HELP=$(node "$SCRIPT" --help 2>&1)
117
- if echo "$HELP" | grep -q "MULTI_AGENT_LIVE_EVAL"; then
118
- pass "--help documents the cost gate env var"
119
- else
120
- fail "--help missing cost gate documentation"
121
- fi
122
-
123
- # ──────────────────────────────────────────────────────────────────────────
124
- echo "→ 10. Bad --budget exits 2"
125
- node "$SCRIPT" --budget=invalid 2>/dev/null
126
- EC=$?
127
- if [ "$EC" -eq 2 ]; then
128
- pass "invalid --budget exits 2"
129
- else
130
- fail "invalid --budget did not error (exit=$EC)"
131
- fi
132
-
133
- # ──────────────────────────────────────────────────────────────────────────
134
- echo ""
135
- echo "══ eval-live smoke: $PASS passed, $FAIL failed ══"
136
- [ "$FAIL" -eq 0 ]
@@ -1,93 +0,0 @@
1
- #!/usr/bin/env bash
2
- # smoke-evidence-gate.sh - contract check for the default-FAIL evidence gate.
3
- #
4
- # The gate must fail CLOSED: a "passed" claim with no / empty / contradicting
5
- # evidence is blocked; only a log that actually shows success lets the claim
6
- # through. Non-pass statuses pass through untouched.
7
- #
8
- # Exit 0 = all pass, 1 = any failure.
9
-
10
- set -uo pipefail
11
-
12
- ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
13
- GATE="$ROOT/pipeline/scripts/evidence-gate.mjs"
14
- TMP="$(mktemp -d)"
15
- trap 'rm -rf "$TMP"' EXIT
16
-
17
- PASS=0
18
- FAIL=0
19
- pass() { PASS=$((PASS+1)); echo " ✓ $1"; }
20
- fail() { FAIL=$((FAIL+1)); echo " ✗ $1"; }
21
-
22
- command -v node >/dev/null 2>&1 || { echo "error: node required" >&2; exit 127; }
23
- [ -f "$GATE" ] || { echo "FAIL: evidence-gate.mjs missing" >&2; exit 1; }
24
-
25
- printf '** BUILD SUCCEEDED **\nCompiling 12 files\n' > "$TMP/build-ok.log"
26
- printf '** BUILD FAILED **\nerror: cannot find type Foo\n' > "$TMP/build-fail.log"
27
- printf 'Test Suite All passed\n0 failures\n' > "$TMP/test-ok.log"
28
- printf 'Test Suite failed\n3 failures\n' > "$TMP/test-fail.log"
29
- : > "$TMP/empty.log"
30
-
31
- expect_exit() {
32
- local want="$1"; shift
33
- local desc="$1"; shift
34
- local got=0
35
- node "$GATE" "$@" >/dev/null 2>&1 || got=$?
36
- if [ "$got" = "$want" ]; then
37
- pass "$desc (exit=$got)"
38
- else
39
- fail "$desc (expected $want, got $got)"
40
- fi
41
- }
42
-
43
- echo "→ 1. Substantiated pass claims (exit 0)"
44
- expect_exit 0 "build passed + SUCCEEDED log" --claim build --status passed --evidence "$TMP/build-ok.log"
45
- expect_exit 0 "test passed + passing log" --claim test --status passed --evidence "$TMP/test-ok.log"
46
-
47
- echo ""
48
- echo "→ 2. Default-FAIL: unverified pass claims (exit 1)"
49
- expect_exit 1 "build passed + no evidence flag" --claim build --status passed
50
- expect_exit 1 "build passed + missing file" --claim build --status passed --evidence "$TMP/nope.log"
51
- expect_exit 1 "build passed + empty log" --claim build --status passed --evidence "$TMP/empty.log"
52
- expect_exit 1 "build passed + FAILED log (contradicted)" --claim build --status passed --evidence "$TMP/build-fail.log"
53
- expect_exit 1 "test passed + failing log (contradicted)" --claim test --status passed --evidence "$TMP/test-fail.log"
54
-
55
- echo ""
56
- echo "→ 3. Non-pass statuses pass through (exit 0)"
57
- expect_exit 0 "status=failed passes through" --claim build --status failed --evidence "$TMP/build-fail.log"
58
- expect_exit 0 "status=pending passes through" --claim build --status pending
59
-
60
- echo ""
61
- echo "→ 4. Custom success pattern override"
62
- printf 'CUSTOM_OK marker here\n' > "$TMP/custom.log"
63
- expect_exit 0 "custom success pattern matches" --claim test --status passed --evidence "$TMP/custom.log" --success-pattern 'CUSTOM_OK'
64
- expect_exit 1 "custom success pattern absent" --claim test --status passed --evidence "$TMP/build-ok.log" --success-pattern 'CUSTOM_OK'
65
-
66
- echo ""
67
- echo "→ 4b. Failure is decisive (closes the SUCCESS-substring bypass)"
68
- printf '** BUILD FAILED **\nnote: previous step SUCCESS (cached)\n' > "$TMP/bypass.log"
69
- expect_exit 1 "failing log that also says SUCCESS still fails" --claim build --status passed --evidence "$TMP/bypass.log"
70
- printf 'BUILD SUCCEEDED\nwarning: deprecated API used\n' > "$TMP/warn.log"
71
- expect_exit 0 "success log with a warning still passes" --claim build --status passed --evidence "$TMP/warn.log"
72
-
73
- echo ""
74
- echo "→ 4c. Bad/oversized custom patterns are a clean usage error (no crash)"
75
- expect_exit 2 "invalid regex pattern -> usage exit 2" --claim test --status passed --evidence "$TMP/test-ok.log" --success-pattern '('
76
- OVERLONG=$(printf 'a%.0s' $(seq 1 250))
77
- expect_exit 2 "overlong pattern -> usage exit 2" --claim test --status passed --evidence "$TMP/test-ok.log" --success-pattern "$OVERLONG"
78
-
79
- echo ""
80
- echo "→ 5. Wiring: phase docs reference the gate"
81
- GREP_HITS=0
82
- for doc in phase-3-dev phase-4-review phase-6-commit; do
83
- grep -q "evidence-gate" "$ROOT/pipeline/multi-agent-refs/phases/$doc.md" && GREP_HITS=$((GREP_HITS+1))
84
- done
85
- if [ "$GREP_HITS" -ge 2 ]; then
86
- pass "evidence-gate referenced in $GREP_HITS phase docs"
87
- else
88
- fail "evidence-gate referenced in only $GREP_HITS phase docs (expected >= 2)"
89
- fi
90
-
91
- echo ""
92
- echo "══ evidence-gate smoke: $PASS passed, $FAIL failed ══"
93
- [ "$FAIL" -eq 0 ]