@mmerterden/multi-agent-pipeline 8.6.2 → 10.2.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 (933) hide show
  1. package/CHANGELOG.md +660 -2483
  2. package/README.md +100 -101
  3. package/docs/features.md +1 -1
  4. package/index.js +8 -10
  5. package/install/_adapters.mjs +5 -1
  6. package/install/_common.mjs +63 -0
  7. package/install/claude.mjs +14 -14
  8. package/install/copilot.mjs +14 -8
  9. package/install/index.mjs +85 -19
  10. package/install/templates/claude-hooks.json +18 -0
  11. package/install/templates/copilot-instructions.md +3 -3
  12. package/package.json +21 -6
  13. package/pipeline/adapters/_base.mjs +366 -14
  14. package/pipeline/adapters/antigravity.mjs +140 -0
  15. package/pipeline/adapters/codex.mjs +159 -0
  16. package/pipeline/adapters/copilot-chat-orchestration.mjs +148 -0
  17. package/pipeline/adapters/copilot-chat.mjs +34 -68
  18. package/pipeline/adapters/cursor-orchestration.mjs +152 -0
  19. package/pipeline/adapters/cursor.mjs +49 -90
  20. package/pipeline/agents/android-architect.md +3 -3
  21. package/pipeline/agents/backend-architect.md +2 -2
  22. package/pipeline/agents/code-reviewer.md +8 -8
  23. package/pipeline/agents/dev-critic.md +17 -17
  24. package/pipeline/agents/explorer.md +3 -3
  25. package/pipeline/agents/ios-architect.md +2 -2
  26. package/pipeline/agents/security-auditor.md +10 -10
  27. package/pipeline/agents/task-clarifier.md +18 -18
  28. package/pipeline/claude-md-template.md +3 -3
  29. package/pipeline/commands/archive-guard.md +3 -3
  30. package/pipeline/commands/figma-to-swiftui.md +10 -10
  31. package/pipeline/commands/multi-agent/_account-picker.md +12 -8
  32. package/pipeline/commands/multi-agent/_dev-context.md +15 -15
  33. package/pipeline/commands/multi-agent/_input-parser.md +4 -4
  34. package/pipeline/commands/multi-agent/_repo-picker.md +9 -9
  35. package/pipeline/commands/multi-agent/analysis-resolve.md +129 -0
  36. package/pipeline/commands/multi-agent/analysis.md +667 -0
  37. package/pipeline/commands/multi-agent/autopilot.md +22 -22
  38. package/pipeline/commands/multi-agent/build-optimize.md +77 -0
  39. package/pipeline/commands/multi-agent/channels.md +96 -96
  40. package/pipeline/commands/multi-agent/delete.md +19 -17
  41. package/pipeline/commands/multi-agent/dev-autopilot.md +20 -20
  42. package/pipeline/commands/multi-agent/dev-local-autopilot.md +22 -22
  43. package/pipeline/commands/multi-agent/dev-local.md +23 -20
  44. package/pipeline/commands/multi-agent/dev.md +43 -43
  45. package/pipeline/commands/multi-agent/diff-explain.md +4 -4
  46. package/pipeline/commands/multi-agent/garbage-collect.md +58 -0
  47. package/pipeline/commands/multi-agent/help.md +65 -56
  48. package/pipeline/commands/multi-agent/issue.md +3 -3
  49. package/pipeline/commands/multi-agent/jira.md +12 -12
  50. package/pipeline/commands/multi-agent/kill.md +6 -6
  51. package/pipeline/commands/multi-agent/language.md +12 -12
  52. package/pipeline/commands/multi-agent/local-autopilot.md +34 -34
  53. package/pipeline/commands/multi-agent/local.md +24 -25
  54. package/pipeline/commands/multi-agent/log.md +6 -6
  55. package/pipeline/commands/multi-agent/manual-test.md +3 -3
  56. package/pipeline/commands/multi-agent/prune-logs.md +60 -0
  57. package/pipeline/commands/multi-agent/purge.md +10 -7
  58. package/pipeline/commands/multi-agent/refactor.md +9 -9
  59. package/pipeline/commands/multi-agent/refs/analysis-template.md +1062 -0
  60. package/pipeline/commands/multi-agent/refs/android-guide.md +15 -13
  61. package/pipeline/commands/multi-agent/refs/audit-guide.md +20 -20
  62. package/pipeline/commands/multi-agent/refs/backend-guide.md +9 -9
  63. package/pipeline/commands/multi-agent/refs/channels/confluence.md +17 -17
  64. package/pipeline/commands/multi-agent/refs/channels/issue-comment.md +30 -30
  65. package/pipeline/commands/multi-agent/refs/channels/jira.md +16 -15
  66. package/pipeline/commands/multi-agent/refs/channels/pr-review-actions.md +19 -17
  67. package/pipeline/commands/multi-agent/refs/channels/pr.md +22 -22
  68. package/pipeline/commands/multi-agent/refs/channels/wiki.md +19 -19
  69. package/pipeline/commands/multi-agent/refs/component-dispatch.md +11 -11
  70. package/pipeline/commands/multi-agent/refs/conventions-defaults.md +179 -0
  71. package/pipeline/commands/multi-agent/refs/cross-cli-contract.md +41 -35
  72. package/pipeline/commands/multi-agent/refs/features/dev-critic.md +5 -5
  73. package/pipeline/commands/multi-agent/refs/features/external-context-injection.md +6 -6
  74. package/pipeline/commands/multi-agent/refs/features/model-fallback.md +91 -0
  75. package/pipeline/commands/multi-agent/refs/features/plan-todos.md +1 -1
  76. package/pipeline/commands/multi-agent/refs/features/prior-fix-detection.md +4 -4
  77. package/pipeline/commands/multi-agent/refs/features/repo-map.md +6 -6
  78. package/pipeline/commands/multi-agent/refs/features/shadow-git.md +2 -2
  79. package/pipeline/commands/multi-agent/refs/frontend-guide.md +16 -16
  80. package/pipeline/commands/multi-agent/refs/issue-jira-triad.md +18 -18
  81. package/pipeline/commands/multi-agent/refs/keychain.md +18 -8
  82. package/pipeline/commands/multi-agent/refs/knowledge.md +9 -9
  83. package/pipeline/commands/multi-agent/refs/multi-repo-integration-build.md +19 -19
  84. package/pipeline/commands/multi-agent/refs/phases/log-format.md +29 -9
  85. package/pipeline/commands/multi-agent/refs/phases/modes.md +33 -33
  86. package/pipeline/commands/multi-agent/refs/phases/operations.md +24 -14
  87. package/pipeline/commands/multi-agent/refs/phases/phase-0-init.md +107 -57
  88. package/pipeline/commands/multi-agent/refs/phases/phase-1-analysis.md +65 -29
  89. package/pipeline/commands/multi-agent/refs/phases/phase-2-planning.md +114 -62
  90. package/pipeline/commands/multi-agent/refs/phases/phase-3-dev.md +99 -36
  91. package/pipeline/commands/multi-agent/refs/phases/phase-4-review.md +181 -62
  92. package/pipeline/commands/multi-agent/refs/phases/phase-5-test.md +33 -18
  93. package/pipeline/commands/multi-agent/refs/phases/phase-6-commit.md +45 -43
  94. package/pipeline/commands/multi-agent/refs/phases/phase-7-report.md +54 -28
  95. package/pipeline/commands/multi-agent/refs/phases.md +17 -17
  96. package/pipeline/commands/multi-agent/refs/picker-contract.md +65 -0
  97. package/pipeline/commands/multi-agent/refs/progress-contract.md +37 -21
  98. package/pipeline/commands/multi-agent/refs/rules.md +83 -25
  99. package/pipeline/commands/multi-agent/refs/swiftui-guide.md +32 -30
  100. package/pipeline/commands/multi-agent/refs/tracker-contract.md +54 -30
  101. package/pipeline/commands/multi-agent/refs/wiki-capture.md +36 -33
  102. package/pipeline/commands/multi-agent/resume.md +12 -9
  103. package/pipeline/commands/multi-agent/review.md +24 -24
  104. package/pipeline/commands/multi-agent/scan.md +10 -10
  105. package/pipeline/commands/multi-agent/search.md +8 -8
  106. package/pipeline/commands/multi-agent/setup.md +111 -84
  107. package/pipeline/commands/multi-agent/stack.md +5 -5
  108. package/pipeline/commands/multi-agent/status.md +5 -5
  109. package/pipeline/commands/multi-agent/sync.md +123 -111
  110. package/pipeline/commands/multi-agent/test.md +6 -6
  111. package/pipeline/commands/multi-agent/update.md +1 -1
  112. package/pipeline/commands/multi-agent.md +64 -58
  113. package/pipeline/commands/sim-test.md +14 -14
  114. package/pipeline/eval/golden-tasks/01-ios-bugfix-darkmode/expected/phase-1-analysis.json +1 -1
  115. package/pipeline/eval/golden-tasks/01-ios-bugfix-darkmode/expected/phase-4-review.json +2 -2
  116. package/pipeline/eval/golden-tasks/01-ios-bugfix-darkmode/expected/phase-4-triage.json +2 -2
  117. package/pipeline/eval/golden-tasks/01-ios-bugfix-darkmode/metadata.json +1 -1
  118. package/pipeline/eval/golden-tasks/02-android-feature-compose/expected/phase-1-analysis.json +2 -2
  119. package/pipeline/eval/golden-tasks/02-android-feature-compose/expected/phase-4-review.json +3 -3
  120. package/pipeline/eval/golden-tasks/02-android-feature-compose/expected/phase-4-triage.json +4 -4
  121. package/pipeline/eval/golden-tasks/02-android-feature-compose/metadata.json +1 -1
  122. package/pipeline/eval/golden-tasks/02-android-feature-compose/task.json +1 -1
  123. package/pipeline/eval/golden-tasks/03-backend-python-ratelimit/expected/phase-1-analysis.json +29 -0
  124. package/pipeline/eval/golden-tasks/03-backend-python-ratelimit/expected/phase-2-plan.json +42 -0
  125. package/pipeline/eval/golden-tasks/03-backend-python-ratelimit/expected/phase-4-review.json +20 -0
  126. package/pipeline/eval/golden-tasks/03-backend-python-ratelimit/expected/phase-4-triage.json +15 -0
  127. package/pipeline/eval/golden-tasks/03-backend-python-ratelimit/metadata.json +14 -0
  128. package/pipeline/eval/golden-tasks/03-backend-python-ratelimit/task.json +12 -0
  129. package/pipeline/eval/golden-tasks/04-frontend-next-hydration/expected/phase-1-analysis.json +29 -0
  130. package/pipeline/eval/golden-tasks/04-frontend-next-hydration/expected/phase-2-plan.json +40 -0
  131. package/pipeline/eval/golden-tasks/04-frontend-next-hydration/expected/phase-4-review.json +20 -0
  132. package/pipeline/eval/golden-tasks/04-frontend-next-hydration/expected/phase-4-triage.json +15 -0
  133. package/pipeline/eval/golden-tasks/04-frontend-next-hydration/metadata.json +14 -0
  134. package/pipeline/eval/golden-tasks/04-frontend-next-hydration/task.json +12 -0
  135. package/pipeline/eval/golden-tasks/05-ios-security-keychain/expected/phase-1-analysis.json +29 -0
  136. package/pipeline/eval/golden-tasks/05-ios-security-keychain/expected/phase-2-plan.json +42 -0
  137. package/pipeline/eval/golden-tasks/05-ios-security-keychain/expected/phase-4-review.json +28 -0
  138. package/pipeline/eval/golden-tasks/05-ios-security-keychain/expected/phase-4-triage.json +27 -0
  139. package/pipeline/eval/golden-tasks/05-ios-security-keychain/metadata.json +14 -0
  140. package/pipeline/eval/golden-tasks/05-ios-security-keychain/task.json +12 -0
  141. package/pipeline/eval/golden-tasks/06-android-refactor-usecase/expected/phase-1-analysis.json +29 -0
  142. package/pipeline/eval/golden-tasks/06-android-refactor-usecase/expected/phase-2-plan.json +41 -0
  143. package/pipeline/eval/golden-tasks/06-android-refactor-usecase/expected/phase-4-review.json +12 -0
  144. package/pipeline/eval/golden-tasks/06-android-refactor-usecase/expected/phase-4-triage.json +6 -0
  145. package/pipeline/eval/golden-tasks/06-android-refactor-usecase/metadata.json +14 -0
  146. package/pipeline/eval/golden-tasks/06-android-refactor-usecase/task.json +12 -0
  147. package/pipeline/eval/golden-tasks/07-backend-node-idempotency/expected/phase-1-analysis.json +29 -0
  148. package/pipeline/eval/golden-tasks/07-backend-node-idempotency/expected/phase-2-plan.json +42 -0
  149. package/pipeline/eval/golden-tasks/07-backend-node-idempotency/expected/phase-4-review.json +28 -0
  150. package/pipeline/eval/golden-tasks/07-backend-node-idempotency/expected/phase-4-triage.json +27 -0
  151. package/pipeline/eval/golden-tasks/07-backend-node-idempotency/metadata.json +14 -0
  152. package/pipeline/eval/golden-tasks/07-backend-node-idempotency/task.json +12 -0
  153. package/pipeline/eval/golden-tasks/08-ios-auth-consensus-unverified/expected/phase-1-analysis.json +25 -0
  154. package/pipeline/eval/golden-tasks/08-ios-auth-consensus-unverified/expected/phase-2-plan.json +31 -0
  155. package/pipeline/eval/golden-tasks/08-ios-auth-consensus-unverified/expected/phase-4-review.json +12 -0
  156. package/pipeline/eval/golden-tasks/08-ios-auth-consensus-unverified/expected/phase-4-triage.json +18 -0
  157. package/pipeline/eval/golden-tasks/08-ios-auth-consensus-unverified/metadata.json +14 -0
  158. package/pipeline/eval/golden-tasks/08-ios-auth-consensus-unverified/task.json +12 -0
  159. package/pipeline/eval/golden-tasks/README.md +14 -14
  160. package/pipeline/eval/intent-cases.json +40 -0
  161. package/pipeline/eval/run-metrics-fixture.json +46 -0
  162. package/pipeline/eval/triage/01-empty-findings/notes.md +1 -1
  163. package/pipeline/eval/triage/02-real-blocker/notes.md +2 -2
  164. package/pipeline/eval/triage/03-out-of-scope-defer/notes.md +1 -1
  165. package/pipeline/eval/triage/04-false-positive-reject/notes.md +1 -1
  166. package/pipeline/eval/triage/05-mixed-classification/notes.md +2 -2
  167. package/pipeline/eval/triage/06-severity-mismatch/notes.md +2 -2
  168. package/pipeline/eval/triage/07-duplicate-reviewers/notes.md +1 -1
  169. package/pipeline/eval/triage/08-style-misclassified/notes.md +1 -1
  170. package/pipeline/eval/triage/09-cascading-finding/notes.md +2 -2
  171. package/pipeline/eval/triage/10-deferred-crossref/notes.md +2 -2
  172. package/pipeline/eval/triage/11-vercel-token-leak-blocker/expected.json +3 -3
  173. package/pipeline/eval/triage/11-vercel-token-leak-blocker/input.json +2 -2
  174. package/pipeline/eval/triage/11-vercel-token-leak-blocker/notes.md +5 -5
  175. package/pipeline/eval/triage/README.md +4 -4
  176. package/pipeline/lib/account-resolver.sh +3 -3
  177. package/pipeline/lib/ask-choice.sh +98 -0
  178. package/pipeline/lib/channels-multi-repo.sh +3 -3
  179. package/pipeline/lib/classify-intent.sh +110 -0
  180. package/pipeline/lib/context-link-extractor.sh +3 -3
  181. package/pipeline/lib/credential-store-resolver.sh +3 -3
  182. package/pipeline/lib/credential-store.sh +9 -5
  183. package/pipeline/lib/extract-conventions.sh +1034 -0
  184. package/pipeline/lib/fetch-confluence.sh +5 -5
  185. package/pipeline/lib/fetch-crashlytics.sh +7 -7
  186. package/pipeline/lib/fetch-fortify.sh +6 -22
  187. package/pipeline/lib/fetch-swagger.sh +6 -6
  188. package/pipeline/lib/figma-screenshot.sh +536 -0
  189. package/pipeline/lib/issue-fetcher.sh +46 -20
  190. package/pipeline/lib/md2confluence-v3.py +1076 -0
  191. package/pipeline/lib/multi-repo-pipeline.sh +13 -22
  192. package/pipeline/lib/plan-todos.sh +7 -7
  193. package/pipeline/lib/post-pr-review.sh +53 -21
  194. package/pipeline/lib/repo-cache.sh +5 -5
  195. package/pipeline/lib/review-watch.sh +17 -13
  196. package/pipeline/lib/shadow-git.sh +7 -7
  197. package/pipeline/lib/submodule-detector.sh +3 -3
  198. package/pipeline/lib/vercel-deploy.sh +28 -15
  199. package/pipeline/preferences-template.json +28 -4
  200. package/pipeline/rules/app-store-guidelines.md +2 -2
  201. package/pipeline/rules/code-style.md +6 -6
  202. package/pipeline/rules/figma-pipeline.md +100 -2
  203. package/pipeline/rules/kotlin-android.md +8 -8
  204. package/pipeline/rules/security.md +4 -4
  205. package/pipeline/rules/tdd.md +1 -1
  206. package/pipeline/rules/testing.md +5 -5
  207. package/pipeline/schemas/agent-state.schema.json +63 -20
  208. package/pipeline/schemas/analysis-output.schema.json +7 -2
  209. package/pipeline/schemas/analysis-spec.schema.json +484 -0
  210. package/pipeline/schemas/clarify-output.schema.json +5 -5
  211. package/pipeline/schemas/conventions-output.schema.json +70 -0
  212. package/pipeline/schemas/dev-critic-output.schema.json +2 -2
  213. package/pipeline/schemas/diff-risk.schema.json +3 -3
  214. package/pipeline/schemas/figma-project-config.schema.json +42 -3
  215. package/pipeline/schemas/learnings-ledger.schema.json +39 -0
  216. package/pipeline/schemas/migrations/README.md +2 -2
  217. package/pipeline/schemas/migrations/figma-config-1.0.0-to-2.0.0.mjs +5 -5
  218. package/pipeline/schemas/migrations/prefs-2.0.0-to-2.1.0.mjs +3 -3
  219. package/pipeline/schemas/migrations/prefs-2.1.0-to-2.2.0.mjs +4 -4
  220. package/pipeline/schemas/migrations/prefs-2.2.0-to-2.3.0.mjs +5 -5
  221. package/pipeline/schemas/migrations/state-2.0.0-to-2.1.0.mjs +3 -3
  222. package/pipeline/schemas/plan-todos.schema.json +4 -4
  223. package/pipeline/schemas/planning-output.schema.json +3 -3
  224. package/pipeline/schemas/prefs.schema.json +95 -11
  225. package/pipeline/schemas/reviewer-output.schema.json +7 -3
  226. package/pipeline/schemas/test-gap.schema.json +1 -1
  227. package/pipeline/schemas/token-budget.json +8 -8
  228. package/pipeline/schemas/triage-corpus.schema.json +1 -1
  229. package/pipeline/schemas/triage-output.schema.json +44 -6
  230. package/pipeline/scripts/README.md +64 -64
  231. package/pipeline/scripts/aggregate-metrics.mjs +55 -16
  232. package/pipeline/scripts/audit-log-rotate.sh +3 -3
  233. package/pipeline/scripts/audit-log.sh +20 -7
  234. package/pipeline/scripts/benchmark-phase-0.sh +6 -6
  235. package/pipeline/scripts/build-skills-index.mjs +15 -15
  236. package/pipeline/scripts/check-md-links.mjs +59 -0
  237. package/pipeline/scripts/classify-plan-safety.mjs +24 -18
  238. package/pipeline/scripts/cost-budget-check.mjs +160 -0
  239. package/pipeline/scripts/cost-table.json +17 -13
  240. package/pipeline/scripts/diff-explain.mjs +12 -12
  241. package/pipeline/scripts/diff-risk-score.mjs +18 -17
  242. package/pipeline/scripts/eval-golden-tasks-live.mjs +13 -10
  243. package/pipeline/scripts/eval-golden-tasks.mjs +3 -14
  244. package/pipeline/scripts/eval-intent.mjs +103 -0
  245. package/pipeline/scripts/eval-triage.mjs +3 -3
  246. package/pipeline/scripts/evidence-gate.mjs +155 -0
  247. package/pipeline/scripts/fixtures/install-layout.tsv +9 -9
  248. package/pipeline/scripts/gc-tmp.sh +102 -0
  249. package/pipeline/scripts/gen-mode-dispatch.mjs +27 -21
  250. package/pipeline/scripts/gen-skills-index.mjs +6 -6
  251. package/pipeline/scripts/github-ssh-setup.sh +1 -1
  252. package/pipeline/scripts/keychain-save.sh +1 -1
  253. package/pipeline/scripts/keychain.py +6 -6
  254. package/pipeline/scripts/learnings-ledger.mjs +284 -0
  255. package/pipeline/scripts/lint-skills.mjs +80 -0
  256. package/pipeline/scripts/log-metric.sh +18 -9
  257. package/pipeline/scripts/match-skills.mjs +13 -8
  258. package/pipeline/scripts/memory-load.sh +3 -3
  259. package/pipeline/scripts/memory-save.sh +5 -5
  260. package/pipeline/scripts/migrate-prefs.mjs +17 -17
  261. package/pipeline/scripts/migrate-state.mjs +12 -12
  262. package/pipeline/scripts/output-quality-check.sh +7 -7
  263. package/pipeline/scripts/phase-banner.sh +5 -5
  264. package/pipeline/scripts/phase-tracker.sh +97 -53
  265. package/pipeline/scripts/pre-commit-check.sh +45 -5
  266. package/pipeline/scripts/pre-push-check.sh +7 -7
  267. package/pipeline/scripts/prune-logs.sh +118 -0
  268. package/pipeline/scripts/render-agent-log-cost.sh +55 -18
  269. package/pipeline/scripts/render-cost-summary.sh +9 -9
  270. package/pipeline/scripts/render-work-summary.sh +4 -4
  271. package/pipeline/scripts/repo-map.mjs +9 -9
  272. package/pipeline/scripts/run-aggregator.mjs +7 -6
  273. package/pipeline/scripts/run-metrics.mjs +129 -0
  274. package/pipeline/scripts/run-smokes.mjs +76 -0
  275. package/pipeline/scripts/scan-skills.sh +11 -11
  276. package/pipeline/scripts/search-logs.sh +8 -8
  277. package/pipeline/scripts/sign-skills.sh +2 -2
  278. package/pipeline/scripts/smoke-adapters.sh +79 -10
  279. package/pipeline/scripts/smoke-add-detail.sh +5 -5
  280. package/pipeline/scripts/smoke-agent-log-cost.sh +85 -6
  281. package/pipeline/scripts/smoke-agent-model-routing.sh +3 -3
  282. package/pipeline/scripts/smoke-ask-choice.sh +42 -0
  283. package/pipeline/scripts/smoke-bitbucket-contract.sh +19 -3
  284. package/pipeline/scripts/smoke-changelog-version.sh +47 -0
  285. package/pipeline/scripts/smoke-channels-flow.sh +1 -1
  286. package/pipeline/scripts/smoke-ci-workflows.sh +5 -5
  287. package/pipeline/scripts/smoke-clarify.sh +3 -3
  288. package/pipeline/scripts/smoke-commands-skills-parity.sh +4 -4
  289. package/pipeline/scripts/smoke-community-gates.sh +75 -0
  290. package/pipeline/scripts/smoke-compliance-skills.sh +5 -5
  291. package/pipeline/scripts/smoke-cost-budget.sh +70 -0
  292. package/pipeline/scripts/smoke-cost-summary.sh +4 -4
  293. package/pipeline/scripts/smoke-cross-cli-behavior.sh +50 -9
  294. package/pipeline/scripts/smoke-cross-phase-cohesion.sh +5 -5
  295. package/pipeline/scripts/smoke-delete-flow.sh +5 -5
  296. package/pipeline/scripts/smoke-dev-critic.sh +2 -2
  297. package/pipeline/scripts/smoke-diff-explain.sh +22 -3
  298. package/pipeline/scripts/smoke-diff-risk.sh +1 -1
  299. package/pipeline/scripts/smoke-dynamic-skill-loading.sh +1 -1
  300. package/pipeline/scripts/smoke-eval-live.sh +4 -4
  301. package/pipeline/scripts/smoke-evidence-gate.sh +93 -0
  302. package/pipeline/scripts/smoke-existing-discovery-gate.sh +1 -1
  303. package/pipeline/scripts/smoke-extract-conventions.sh +163 -0
  304. package/pipeline/scripts/smoke-figma-android-parity.sh +1 -1
  305. package/pipeline/scripts/smoke-figma-credential-store.sh +3 -3
  306. package/pipeline/scripts/smoke-figma-cross-cli-inventory.sh +12 -12
  307. package/pipeline/scripts/smoke-figma-dispatch.sh +5 -5
  308. package/pipeline/scripts/smoke-figma-sync.sh +1 -1
  309. package/pipeline/scripts/smoke-gate-hooks.sh +56 -0
  310. package/pipeline/scripts/smoke-gc-tmp.sh +84 -0
  311. package/pipeline/scripts/smoke-identity-isolation.sh +7 -7
  312. package/pipeline/scripts/smoke-install-layout.sh +10 -10
  313. package/pipeline/scripts/smoke-intent-guard.sh +86 -0
  314. package/pipeline/scripts/smoke-issue-comment-template.sh +3 -3
  315. package/pipeline/scripts/smoke-issue-jira-triad.sh +1 -1
  316. package/pipeline/scripts/smoke-keychain.sh +6 -6
  317. package/pipeline/scripts/smoke-language-axis.sh +2 -2
  318. package/pipeline/scripts/smoke-learnings-ledger.sh +86 -0
  319. package/pipeline/scripts/smoke-lib-scripts.sh +2 -2
  320. package/pipeline/scripts/smoke-mcp-gate.sh +68 -0
  321. package/pipeline/scripts/smoke-md-links.sh +8 -0
  322. package/pipeline/scripts/smoke-md2confluence.sh +126 -0
  323. package/pipeline/scripts/smoke-metrics-cache-ratio.sh +72 -0
  324. package/pipeline/scripts/smoke-migrate-state.sh +10 -10
  325. package/pipeline/scripts/smoke-mode-dispatch-drift.sh +7 -4
  326. package/pipeline/scripts/smoke-model-fallback.sh +88 -0
  327. package/pipeline/scripts/smoke-multi-repo-integration.sh +3 -3
  328. package/pipeline/scripts/smoke-multi-repo-worktree.sh +1 -1
  329. package/pipeline/scripts/smoke-no-mcp-in-dev-phases.sh +115 -0
  330. package/pipeline/scripts/smoke-no-token-prompt.sh +31 -15
  331. package/pipeline/scripts/smoke-pat-audit.sh +26 -5
  332. package/pipeline/scripts/smoke-per-repo-memory.sh +1 -1
  333. package/pipeline/scripts/smoke-phase-0-multi-repo.sh +1 -1
  334. package/pipeline/scripts/smoke-phase-6-multi.sh +2 -2
  335. package/pipeline/scripts/smoke-phase-banner.sh +1 -1
  336. package/pipeline/scripts/smoke-phase-tracker.sh +1 -1
  337. package/pipeline/scripts/smoke-phase0-bridge-contract.sh +4 -4
  338. package/pipeline/scripts/smoke-phase4-triage.sh +94 -7
  339. package/pipeline/scripts/smoke-plan-approval-gate.sh +3 -3
  340. package/pipeline/scripts/smoke-plan-safety.sh +1 -1
  341. package/pipeline/scripts/smoke-plan-todos.sh +2 -2
  342. package/pipeline/scripts/smoke-pr-review-actions.sh +2 -2
  343. package/pipeline/scripts/smoke-pre-commit.sh +34 -2
  344. package/pipeline/scripts/smoke-pref-migration.sh +1 -1
  345. package/pipeline/scripts/smoke-prefs-language.sh +5 -5
  346. package/pipeline/scripts/smoke-progress-contract.sh +3 -3
  347. package/pipeline/scripts/smoke-prune-logs.sh +87 -0
  348. package/pipeline/scripts/smoke-push-retry.sh +1 -1
  349. package/pipeline/scripts/smoke-readme-counts.sh +1 -1
  350. package/pipeline/scripts/smoke-repo-map.sh +9 -9
  351. package/pipeline/scripts/smoke-review-watch.sh +12 -0
  352. package/pipeline/scripts/smoke-run-aggregator.sh +7 -7
  353. package/pipeline/scripts/smoke-run-metrics.sh +50 -0
  354. package/pipeline/scripts/smoke-schema-validation.sh +18 -11
  355. package/pipeline/scripts/smoke-search.sh +5 -5
  356. package/pipeline/scripts/smoke-shared-runtime.sh +108 -0
  357. package/pipeline/scripts/smoke-skill-authoring.sh +13 -13
  358. package/pipeline/scripts/smoke-skill-language.sh +4 -4
  359. package/pipeline/scripts/smoke-skill-manifest.sh +2 -2
  360. package/pipeline/scripts/smoke-skill-scan.sh +2 -2
  361. package/pipeline/scripts/smoke-stack-swap.sh +2 -2
  362. package/pipeline/scripts/smoke-subagent-validators.sh +8 -5
  363. package/pipeline/scripts/smoke-sync-adapters.sh +1 -1
  364. package/pipeline/scripts/smoke-sync-delegation.sh +7 -7
  365. package/pipeline/scripts/smoke-sync-parity.sh +1 -1
  366. package/pipeline/scripts/smoke-tasklist-ordering.sh +7 -7
  367. package/pipeline/scripts/smoke-telemetry.sh +1 -1
  368. package/pipeline/scripts/smoke-test-gap.sh +5 -5
  369. package/pipeline/scripts/smoke-token-budget.sh +1 -1
  370. package/pipeline/scripts/smoke-tracker-contract.sh +6 -6
  371. package/pipeline/scripts/smoke-tracker-tokens-invocation.sh +9 -1
  372. package/pipeline/scripts/smoke-triage-memory.sh +2 -2
  373. package/pipeline/scripts/smoke-url-enrichment.sh +2 -2
  374. package/pipeline/scripts/smoke-validator-contradiction.sh +1 -1
  375. package/pipeline/scripts/smoke-validator-gates.sh +164 -0
  376. package/pipeline/scripts/smoke-vercel-deploy-redact.sh +11 -11
  377. package/pipeline/scripts/smoke-wiki-integration.sh +2 -2
  378. package/pipeline/scripts/smoke-work-summary.sh +3 -3
  379. package/pipeline/scripts/smoke-worktree-path-convention.sh +4 -4
  380. package/pipeline/scripts/smoke-write-state.sh +2 -2
  381. package/pipeline/scripts/stack-swap.sh +3 -3
  382. package/pipeline/scripts/sync-adapters.mjs +37 -10
  383. package/pipeline/scripts/sync-parity-check.sh +6 -6
  384. package/pipeline/scripts/test-gap-scan.mjs +11 -13
  385. package/pipeline/scripts/token-budget-report.mjs +4 -4
  386. package/pipeline/scripts/triage-memory.mjs +6 -6
  387. package/pipeline/scripts/uninstall.mjs +42 -4
  388. package/pipeline/scripts/update-issue-progress.sh +2 -2
  389. package/pipeline/scripts/validate-analysis.mjs +19 -21
  390. package/pipeline/scripts/validate-diff-risk.mjs +4 -4
  391. package/pipeline/scripts/validate-planning.mjs +3 -3
  392. package/pipeline/scripts/validate-reviewer.mjs +4 -4
  393. package/pipeline/scripts/validate-schemas.mjs +4 -4
  394. package/pipeline/scripts/validate-state.mjs +108 -0
  395. package/pipeline/scripts/validate-test-gap.mjs +4 -4
  396. package/pipeline/scripts/validate-triage.mjs +68 -9
  397. package/pipeline/scripts/verify-skills.sh +7 -7
  398. package/pipeline/scripts/write-state.mjs +62 -13
  399. package/pipeline/skills/.skill-manifest.json +245 -149
  400. package/pipeline/skills/.skills-index.json +236 -47
  401. package/pipeline/skills/figma-android/README.md +5 -5
  402. package/pipeline/skills/figma-android/figma-component-code-connect/SKILL.md +3 -3
  403. package/pipeline/skills/figma-android/figma-component-implement/SKILL.md +8 -8
  404. package/pipeline/skills/figma-android/figma-component-test/SKILL.md +4 -4
  405. package/pipeline/skills/figma-android/figma-component-wiki/SKILL.md +5 -5
  406. package/pipeline/skills/figma-android/figma-to-component/SKILL.md +14 -14
  407. package/pipeline/skills/figma-common/README.md +37 -30
  408. package/pipeline/skills/figma-common/figma-bottom-sheets/SKILL.md +137 -0
  409. package/pipeline/skills/figma-common/figma-cli-iterate/SKILL.md +20 -15
  410. package/pipeline/skills/figma-common/figma-cli-iterate-mend/SKILL.md +35 -30
  411. package/pipeline/skills/figma-common/figma-cli-lean-iterate/SKILL.md +35 -30
  412. package/pipeline/skills/figma-common/figma-cli-skip/SKILL.md +20 -20
  413. package/pipeline/skills/figma-common/figma-commit/COMMON_REBASE.md +32 -32
  414. package/pipeline/skills/figma-common/figma-commit/REVIEW.md +9 -9
  415. package/pipeline/skills/figma-common/figma-commit/SKILL.md +25 -20
  416. package/pipeline/skills/figma-common/figma-component-confluence-sync/SKILL.md +11 -6
  417. package/pipeline/skills/figma-common/figma-component-start/SKILL.md +30 -25
  418. package/pipeline/skills/figma-common/figma-component-status-update/SKILL.md +9 -4
  419. package/pipeline/skills/figma-common/figma-evolve-component/SKILL.md +61 -0
  420. package/pipeline/skills/figma-common/figma-fix/SKILL.md +27 -22
  421. package/pipeline/skills/figma-common/figma-form-integration/SKILL.md +38 -38
  422. package/pipeline/skills/figma-common/figma-issue/SKILL.md +39 -34
  423. package/pipeline/skills/figma-common/figma-iterate/SKILL.md +20 -15
  424. package/pipeline/skills/figma-common/figma-iteration-commit/SKILL.md +44 -39
  425. package/pipeline/skills/figma-common/figma-mend/SKILL.md +6 -6
  426. package/pipeline/skills/figma-common/figma-navigation/SKILL.md +142 -0
  427. package/pipeline/skills/figma-common/figma-overlays/SKILL.md +128 -0
  428. package/pipeline/skills/figma-common/figma-price-integration/SKILL.md +30 -30
  429. package/pipeline/skills/figma-common/figma-remote-mcp-auth/SKILL.md +1 -1
  430. package/pipeline/skills/figma-common/figma-review/SKILL.md +31 -26
  431. package/pipeline/skills/figma-common/figma-setup/SKILL.md +11 -11
  432. package/pipeline/skills/figma-common/figma-setup/scripts/fetch-mcp-token.py +5 -5
  433. package/pipeline/skills/figma-common/figma-skip/SKILL.md +6 -6
  434. package/pipeline/skills/figma-common/figma-ui-patterns/SKILL.md +13 -12
  435. package/pipeline/skills/figma-common/figma-ui-patterns/patterns/animated-gradient-border.md +112 -0
  436. package/pipeline/skills/figma-common/figma-utility/SKILL.md +4 -4
  437. package/pipeline/skills/figma-common/figma-utility/scripts/figma-utility.py +1 -1
  438. package/pipeline/skills/figma-common/figma-validate/SKILL.md +48 -48
  439. package/pipeline/skills/figma-common/performance-iteration-commit-all/SKILL.md +42 -37
  440. package/pipeline/skills/figma-common/performance-review-next/SKILL.md +23 -18
  441. package/pipeline/skills/figma-common/performance-start/SKILL.md +52 -47
  442. package/pipeline/skills/figma-common/performance-swiftui/SKILL.md +68 -68
  443. package/pipeline/skills/figma-common/performance-tour/SKILL.md +42 -37
  444. package/pipeline/skills/figma-ios/REVIEW_CHECKLIST.md +16 -16
  445. package/pipeline/skills/figma-ios/figma-component-code-connect/SKILL.md +15 -15
  446. package/pipeline/skills/figma-ios/figma-component-implement/SKILL.md +9 -9
  447. package/pipeline/skills/figma-ios/figma-component-test/SKILL.md +15 -15
  448. package/pipeline/skills/figma-ios/figma-component-wiki/SKILL.md +18 -18
  449. package/pipeline/skills/figma-ios/figma-to-component/SKILL.md +53 -38
  450. package/pipeline/skills/figma-ios/figma-to-component/halt-return-protocol.md +2 -2
  451. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-0-init.md +12 -12
  452. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-1-gathering.md +5 -5
  453. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-1.5-existing-discovery.md +19 -19
  454. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2-orchestrator.md +25 -25
  455. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2a-testing-identifiers.md +7 -7
  456. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2b-localization.md +6 -6
  457. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2c-accessibility.md +38 -38
  458. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2d-analytics.md +3 -3
  459. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3-orchestrator.md +29 -29
  460. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3a-location.md +6 -6
  461. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3b-tokens.md +3 -3
  462. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3c-nested.md +12 -12
  463. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3d-patterns.md +88 -57
  464. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3e-assets.md +5 -5
  465. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3f-utilities.md +6 -6
  466. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3g-property-coverage.md +10 -10
  467. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3h-variant-config.md +16 -16
  468. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4-orchestrator.md +23 -23
  469. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4a-configuration.md +26 -26
  470. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4b-view.md +53 -43
  471. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4c-documentation.md +17 -17
  472. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4d-preview.md +19 -19
  473. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4e-modifiers.md +15 -15
  474. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5-orchestrator.md +39 -39
  475. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5a-viewinspector.md +7 -7
  476. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5b-snapshot.md +29 -29
  477. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5c-unit.md +9 -9
  478. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-6-code-connect.md +31 -31
  479. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-7-wiki.md +5 -5
  480. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-7a-confluence-generate.md +18 -18
  481. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-7a-wiki-generate.md +16 -16
  482. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-8-cleanup.md +2 -2
  483. package/pipeline/skills/figma-ios/figma-to-component/reference/accessibility.md +56 -2
  484. package/pipeline/skills/figma-ios/figma-to-component/reference/code-connect.md +49 -49
  485. package/pipeline/skills/figma-ios/figma-to-component/reference/figma-to-swiftui-effects.md +8 -8
  486. package/pipeline/skills/figma-ios/figma-to-component/reference/halt-return-protocol.md +2 -2
  487. package/pipeline/skills/figma-ios/figma-to-component/reference/macros.md +9 -9
  488. package/pipeline/skills/figma-ios/figma-to-component/reference/missing-tokens.md +4 -4
  489. package/pipeline/skills/figma-ios/figma-to-component/reference/orchestrator-discipline.md +10 -10
  490. package/pipeline/skills/figma-ios/figma-to-component/reference/remote-mcp-script.md +5 -5
  491. package/pipeline/skills/figma-ios/figma-to-component/reference/rest-api-script.md +11 -11
  492. package/pipeline/skills/figma-ios/figma-to-component/reference/scripts-inventory.md +14 -14
  493. package/pipeline/skills/figma-ios/figma-to-component/reference/snapshot-testing.md +2 -2
  494. package/pipeline/skills/figma-ios/figma-to-component/reference/subcomponent-graph.md +4 -4
  495. package/pipeline/skills/figma-ios/figma-to-component/reference/testing-identifiers-naming.md +6 -6
  496. package/pipeline/skills/figma-ios/figma-to-component/reference/tools.md +9 -9
  497. package/pipeline/skills/figma-ios/figma-to-component/reference/viewinspector.md +1 -1
  498. package/pipeline/skills/figma-ios/figma-to-component/reference/wiki-to-confluence-mapping.md +1 -1
  499. package/pipeline/skills/figma-ios/figma-to-component/scripts/apply-author-login-map.py +5 -5
  500. package/pipeline/skills/figma-ios/figma-to-component/scripts/backfill-status.py +18 -18
  501. package/pipeline/skills/figma-ios/figma-to-component/scripts/build-author-registry.py +4 -4
  502. package/pipeline/skills/figma-ios/figma-to-component/scripts/bulk-sync-issues.py +4 -4
  503. package/pipeline/skills/figma-ios/figma-to-component/scripts/code-connect-data-gather.py +1 -1
  504. package/pipeline/skills/figma-ios/figma-to-component/scripts/code-connect-publish.sh +3 -3
  505. package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-component-status-upload.py +18 -18
  506. package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-component-status.py +4 -4
  507. package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-data-gather.py +5 -5
  508. package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-page-ids.example.json +9 -0
  509. package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-publish.py +3 -3
  510. package/pipeline/skills/figma-ios/figma-to-component/scripts/figma-subcomponent-graph.py +1 -1
  511. package/pipeline/skills/figma-ios/figma-to-component/scripts/figma-update.py +5 -5
  512. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/issue_sync_propagate.py +1 -1
  513. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/registry_writer.py +4 -4
  514. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_figma_update.py +1 -1
  515. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_registry_writer.py +3 -3
  516. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_skill_figma_issue.py +1 -1
  517. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_update_issue_gh.py +1 -1
  518. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase1-gather.py +12 -12
  519. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase2-finalize.py +3 -3
  520. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase3-scripts.py +26 -26
  521. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase4-finalize.py +4 -4
  522. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase5-finalize.py +4 -4
  523. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase6-finalize.py +5 -5
  524. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase7-finalize.py +4 -4
  525. package/pipeline/skills/figma-ios/figma-to-component/scripts/register-icons-codeconnect.py +4 -4
  526. package/pipeline/skills/figma-ios/figma-to-component/scripts/remote-mcp-fetch.py +5 -5
  527. package/pipeline/skills/figma-ios/figma-to-component/scripts/resolve-author-logins.py +2 -2
  528. package/pipeline/skills/figma-ios/figma-to-component/scripts/run-uicomponents-tests.sh +1 -1
  529. package/pipeline/skills/figma-ios/figma-to-component/scripts/sidebar-generator.py +5 -5
  530. package/pipeline/skills/figma-ios/figma-to-component/scripts/update-issue-from-registry.py +41 -41
  531. package/pipeline/skills/figma-ios/figma-to-component/scripts/validate-phase4.sh +8 -8
  532. package/pipeline/skills/figma-ios/figma-to-component/scripts/validate-phase6.sh +7 -7
  533. package/pipeline/skills/shared/README.md +62 -41
  534. package/pipeline/skills/shared/core/apple-archive-compliance/SKILL.md +39 -39
  535. package/pipeline/skills/shared/core/google-play-compliance/SKILL.md +44 -44
  536. package/pipeline/skills/shared/core/multi-agent/SKILL.md +182 -176
  537. package/pipeline/skills/shared/core/multi-agent-analysis/SKILL.md +55 -0
  538. package/pipeline/skills/shared/core/multi-agent-analysis-resolve/SKILL.md +48 -0
  539. package/pipeline/skills/shared/core/multi-agent-autopilot/SKILL.md +16 -16
  540. package/pipeline/skills/shared/core/multi-agent-build-optimize/SKILL.md +48 -0
  541. package/pipeline/skills/shared/core/multi-agent-channels/SKILL.md +40 -40
  542. package/pipeline/skills/shared/core/multi-agent-delete/SKILL.md +33 -30
  543. package/pipeline/skills/shared/core/multi-agent-dev/SKILL.md +26 -26
  544. package/pipeline/skills/shared/core/multi-agent-dev-autopilot/SKILL.md +22 -22
  545. package/pipeline/skills/shared/core/multi-agent-dev-local/SKILL.md +6 -6
  546. package/pipeline/skills/shared/core/multi-agent-dev-local-autopilot/SKILL.md +12 -12
  547. package/pipeline/skills/shared/core/multi-agent-diff-explain/SKILL.md +20 -20
  548. package/pipeline/skills/shared/core/multi-agent-garbage-collect/SKILL.md +61 -0
  549. package/pipeline/skills/shared/core/multi-agent-help/SKILL.md +22 -22
  550. package/pipeline/skills/shared/core/multi-agent-issue/SKILL.md +15 -15
  551. package/pipeline/skills/shared/core/multi-agent-jira/SKILL.md +12 -12
  552. package/pipeline/skills/shared/core/multi-agent-kill/SKILL.md +14 -14
  553. package/pipeline/skills/shared/core/multi-agent-language/SKILL.md +12 -12
  554. package/pipeline/skills/shared/core/multi-agent-local/SKILL.md +10 -10
  555. package/pipeline/skills/shared/core/multi-agent-local-autopilot/SKILL.md +18 -18
  556. package/pipeline/skills/shared/core/multi-agent-log/SKILL.md +9 -9
  557. package/pipeline/skills/shared/core/multi-agent-manual-test/SKILL.md +20 -20
  558. package/pipeline/skills/shared/core/multi-agent-prune-logs/SKILL.md +63 -0
  559. package/pipeline/skills/shared/core/multi-agent-purge/SKILL.md +16 -13
  560. package/pipeline/skills/shared/core/multi-agent-refactor/SKILL.md +110 -110
  561. package/pipeline/skills/shared/core/multi-agent-resume/SKILL.md +13 -13
  562. package/pipeline/skills/shared/core/multi-agent-review/SKILL.md +22 -22
  563. package/pipeline/skills/shared/core/multi-agent-scan/SKILL.md +18 -18
  564. package/pipeline/skills/shared/core/multi-agent-search/SKILL.md +13 -13
  565. package/pipeline/skills/shared/core/multi-agent-setup/SKILL.md +33 -30
  566. package/pipeline/skills/shared/core/multi-agent-stack/SKILL.md +14 -14
  567. package/pipeline/skills/shared/core/multi-agent-status/SKILL.md +9 -9
  568. package/pipeline/skills/shared/core/multi-agent-sync/SKILL.md +79 -79
  569. package/pipeline/skills/shared/core/multi-agent-test/SKILL.md +5 -5
  570. package/pipeline/skills/shared/core/multi-agent-update/SKILL.md +10 -10
  571. package/pipeline/skills/shared/external/NOTICE-swift-ios-skills.md +41 -0
  572. package/pipeline/skills/shared/external/NOTICE-xcode-build-skills.md +53 -0
  573. package/pipeline/skills/shared/external/agentflow/SKILL.md +9 -9
  574. package/pipeline/skills/shared/external/alarmkit/SKILL.md +113 -52
  575. package/pipeline/skills/shared/external/alarmkit/evals/evals.json +41 -0
  576. package/pipeline/skills/shared/external/alarmkit/references/alarmkit-patterns.md +23 -16
  577. package/pipeline/skills/shared/external/app-clips/SKILL.md +85 -354
  578. package/pipeline/skills/shared/external/app-clips/evals/evals.json +50 -0
  579. package/pipeline/skills/shared/external/app-clips/references/data-handoff-notifications-location.md +135 -0
  580. package/pipeline/skills/shared/external/app-clips/references/routing-and-experiences.md +125 -0
  581. package/pipeline/skills/shared/external/app-clips/references/size-capabilities-and-promotion.md +113 -0
  582. package/pipeline/skills/shared/external/app-intents/SKILL.md +152 -59
  583. package/pipeline/skills/shared/external/app-intents/evals/evals.json +47 -0
  584. package/pipeline/skills/shared/external/app-intents/references/appintents-advanced.md +161 -118
  585. package/pipeline/skills/shared/external/app-store-optimization/SKILL.md +289 -392
  586. package/pipeline/skills/shared/external/app-store-optimization/evals/evals.json +46 -0
  587. package/pipeline/skills/shared/external/app-store-optimization/references/keyword-research-methodology.md +174 -0
  588. package/pipeline/skills/shared/external/app-store-optimization/references/product-page-variants.md +191 -0
  589. package/pipeline/skills/shared/external/app-store-review/SKILL.md +57 -107
  590. package/pipeline/skills/shared/external/app-store-review/evals/evals.json +44 -0
  591. package/pipeline/skills/shared/external/app-store-review/references/privacy-manifest.md +35 -12
  592. package/pipeline/skills/shared/external/app-store-review/references/review-checklists.md +28 -26
  593. package/pipeline/skills/shared/external/apple-on-device-ai/SKILL.md +53 -62
  594. package/pipeline/skills/shared/external/apple-on-device-ai/evals/evals.json +47 -0
  595. package/pipeline/skills/shared/external/apple-on-device-ai/references/coreml-conversion.md +7 -1
  596. package/pipeline/skills/shared/external/apple-on-device-ai/references/coreml-optimization.md +4 -1
  597. package/pipeline/skills/shared/external/apple-on-device-ai/references/foundation-models.md +32 -12
  598. package/pipeline/skills/shared/external/apple-on-device-ai/references/mlx-swift.md +34 -30
  599. package/pipeline/skills/shared/external/authentication/SKILL.md +134 -138
  600. package/pipeline/skills/shared/external/authentication/evals/evals.json +48 -0
  601. package/pipeline/skills/shared/external/authentication/references/keychain-biometric.md +56 -29
  602. package/pipeline/skills/shared/external/authentication/references/passkeys.md +183 -0
  603. package/pipeline/skills/shared/external/avkit/SKILL.md +497 -0
  604. package/pipeline/skills/shared/external/avkit/evals/evals.json +55 -0
  605. package/pipeline/skills/shared/external/avkit/references/avkit-patterns.md +668 -0
  606. package/pipeline/skills/shared/external/background-processing/SKILL.md +29 -29
  607. package/pipeline/skills/shared/external/background-processing/evals/evals.json +44 -0
  608. package/pipeline/skills/shared/external/background-processing/references/background-task-patterns.md +44 -19
  609. package/pipeline/skills/shared/external/callkit-voip/SKILL.md +136 -99
  610. package/pipeline/skills/shared/external/callkit-voip/evals/evals.json +47 -0
  611. package/pipeline/skills/shared/external/callkit-voip/references/callkit-patterns.md +27 -8
  612. package/pipeline/skills/shared/external/ci-cd-pipelines/SKILL.md +7 -6
  613. package/pipeline/skills/shared/external/clean-code/SKILL.md +2 -2
  614. package/pipeline/skills/shared/external/cloudkit-sync/SKILL.md +63 -56
  615. package/pipeline/skills/shared/external/cloudkit-sync/evals/evals.json +47 -0
  616. package/pipeline/skills/shared/external/cloudkit-sync/references/cloudkit-patterns.md +7 -4
  617. package/pipeline/skills/shared/external/contacts-framework/SKILL.md +31 -11
  618. package/pipeline/skills/shared/external/contacts-framework/evals/evals.json +41 -0
  619. package/pipeline/skills/shared/external/contacts-framework/references/contacts-patterns.md +51 -51
  620. package/pipeline/skills/shared/external/core-bluetooth/SKILL.md +70 -65
  621. package/pipeline/skills/shared/external/core-bluetooth/evals/evals.json +44 -0
  622. package/pipeline/skills/shared/external/core-bluetooth/references/ble-patterns.md +25 -1
  623. package/pipeline/skills/shared/external/core-data/SKILL.md +496 -0
  624. package/pipeline/skills/shared/external/core-data/evals/evals.json +44 -0
  625. package/pipeline/skills/shared/external/core-motion/SKILL.md +47 -14
  626. package/pipeline/skills/shared/external/core-motion/evals/evals.json +49 -0
  627. package/pipeline/skills/shared/external/core-motion/references/motion-patterns.md +47 -16
  628. package/pipeline/skills/shared/external/core-nfc/SKILL.md +43 -54
  629. package/pipeline/skills/shared/external/core-nfc/evals/evals.json +49 -0
  630. package/pipeline/skills/shared/external/core-nfc/references/nfc-patterns.md +32 -2
  631. package/pipeline/skills/shared/external/coreml/SKILL.md +89 -48
  632. package/pipeline/skills/shared/external/coreml/evals/evals.json +44 -0
  633. package/pipeline/skills/shared/external/coreml/references/coreml-swift-integration.md +82 -37
  634. package/pipeline/skills/shared/external/cryptokit/SKILL.md +493 -0
  635. package/pipeline/skills/shared/external/cryptokit/evals/evals.json +44 -0
  636. package/pipeline/skills/shared/external/cryptokit/references/cryptokit-patterns.md +602 -0
  637. package/pipeline/skills/shared/external/css-modern/SKILL.md +3 -2
  638. package/pipeline/skills/shared/external/database-patterns/SKILL.md +6 -5
  639. package/pipeline/skills/shared/external/debugging-instruments/SKILL.md +77 -47
  640. package/pipeline/skills/shared/external/debugging-instruments/evals/evals.json +47 -0
  641. package/pipeline/skills/shared/external/debugging-instruments/references/instruments-guide.md +42 -34
  642. package/pipeline/skills/shared/external/debugging-instruments/references/lldb-patterns.md +2 -2
  643. package/pipeline/skills/shared/external/device-integrity/SKILL.md +136 -176
  644. package/pipeline/skills/shared/external/device-integrity/evals/evals.json +45 -0
  645. package/pipeline/skills/shared/external/device-integrity/references/device-integrity-patterns.md +240 -0
  646. package/pipeline/skills/shared/external/energykit/SKILL.md +73 -34
  647. package/pipeline/skills/shared/external/energykit/evals/evals.json +45 -0
  648. package/pipeline/skills/shared/external/energykit/references/energykit-patterns.md +80 -38
  649. package/pipeline/skills/shared/external/eventkit-calendar/SKILL.md +67 -53
  650. package/pipeline/skills/shared/external/eventkit-calendar/evals/evals.json +44 -0
  651. package/pipeline/skills/shared/external/eventkit-calendar/references/eventkit-patterns.md +53 -3
  652. package/pipeline/skills/shared/external/healthkit/SKILL.md +57 -124
  653. package/pipeline/skills/shared/external/healthkit/evals/evals.json +46 -0
  654. package/pipeline/skills/shared/external/healthkit/references/healthkit-patterns.md +82 -1
  655. package/pipeline/skills/shared/external/homekit-matter/SKILL.md +43 -41
  656. package/pipeline/skills/shared/external/homekit-matter/evals/evals.json +45 -0
  657. package/pipeline/skills/shared/external/homekit-matter/references/matter-commissioning.md +13 -8
  658. package/pipeline/skills/shared/external/html-semantic/SKILL.md +5 -4
  659. package/pipeline/skills/shared/external/humanizer/SKILL.md +4 -4
  660. package/pipeline/skills/shared/external/ios-accessibility/SKILL.md +174 -18
  661. package/pipeline/skills/shared/external/ios-accessibility/evals/evals.json +49 -0
  662. package/pipeline/skills/shared/external/ios-accessibility/references/a11y-patterns.md +262 -4
  663. package/pipeline/skills/shared/external/ios-accessibility/references/media-accessibility.md +117 -0
  664. package/pipeline/skills/shared/external/ios-accessibility/references/nutrition-labels.md +141 -0
  665. package/pipeline/skills/shared/external/ios-localization/SKILL.md +67 -14
  666. package/pipeline/skills/shared/external/ios-localization/evals/evals.json +49 -0
  667. package/pipeline/skills/shared/external/ios-localization/references/formatstyle-locale.md +20 -3
  668. package/pipeline/skills/shared/external/ios-localization/references/string-catalogs.md +131 -22
  669. package/pipeline/skills/shared/external/ios-networking/SKILL.md +69 -22
  670. package/pipeline/skills/shared/external/ios-networking/evals/evals.json +50 -0
  671. package/pipeline/skills/shared/external/ios-networking/references/background-websocket.md +28 -16
  672. package/pipeline/skills/shared/external/ios-networking/references/file-storage-patterns.md +354 -0
  673. package/pipeline/skills/shared/external/ios-networking/references/network-framework.md +69 -44
  674. package/pipeline/skills/shared/external/ios-networking/references/urlsession-patterns.md +35 -69
  675. package/pipeline/skills/shared/external/ios-security/references/file-storage-patterns.md +8 -8
  676. package/pipeline/skills/shared/external/ios-simulator/SKILL.md +485 -0
  677. package/pipeline/skills/shared/external/ios-simulator/evals/evals.json +44 -0
  678. package/pipeline/skills/shared/external/ios-simulator/references/simctl-commands.md +316 -0
  679. package/pipeline/skills/shared/external/live-activities/SKILL.md +120 -131
  680. package/pipeline/skills/shared/external/live-activities/evals/evals.json +44 -0
  681. package/pipeline/skills/shared/external/live-activities/references/{live-activity-patterns.md → activitykit-patterns.md} +148 -63
  682. package/pipeline/skills/shared/external/mapkit-location/SKILL.md +40 -21
  683. package/pipeline/skills/shared/external/mapkit-location/evals/evals.json +47 -0
  684. package/pipeline/skills/shared/external/mapkit-location/references/{corelocation-patterns.md → mapkit-corelocation-patterns.md} +88 -41
  685. package/pipeline/skills/shared/external/mapkit-location/references/mapkit-patterns.md +27 -24
  686. package/pipeline/skills/shared/external/metrickit-diagnostics/SKILL.md +129 -172
  687. package/pipeline/skills/shared/external/metrickit-diagnostics/evals/evals.json +46 -0
  688. package/pipeline/skills/shared/external/metrickit-diagnostics/references/metrickit-patterns.md +180 -0
  689. package/pipeline/skills/shared/external/musickit-audio/SKILL.md +45 -18
  690. package/pipeline/skills/shared/external/musickit-audio/evals/evals.json +44 -0
  691. package/pipeline/skills/shared/external/musickit-audio/references/musickit-patterns.md +26 -6
  692. package/pipeline/skills/shared/external/natural-language/SKILL.md +48 -18
  693. package/pipeline/skills/shared/external/natural-language/evals/evals.json +47 -0
  694. package/pipeline/skills/shared/external/natural-language/references/translation-patterns.md +20 -7
  695. package/pipeline/skills/shared/external/nextjs-app-router/SKILL.md +4 -3
  696. package/pipeline/skills/shared/external/passkit-wallet/SKILL.md +156 -66
  697. package/pipeline/skills/shared/external/passkit-wallet/evals/evals.json +51 -0
  698. package/pipeline/skills/shared/external/passkit-wallet/references/wallet-passes.md +69 -19
  699. package/pipeline/skills/shared/external/pdfkit/SKILL.md +499 -0
  700. package/pipeline/skills/shared/external/pdfkit/evals/evals.json +42 -0
  701. package/pipeline/skills/shared/external/pdfkit/references/pdfkit-patterns.md +844 -0
  702. package/pipeline/skills/shared/external/pencilkit-drawing/SKILL.md +122 -28
  703. package/pipeline/skills/shared/external/pencilkit-drawing/evals/evals.json +44 -0
  704. package/pipeline/skills/shared/external/pencilkit-drawing/references/pencilkit-patterns.md +49 -18
  705. package/pipeline/skills/shared/external/permissionkit/SKILL.md +100 -51
  706. package/pipeline/skills/shared/external/permissionkit/evals/evals.json +47 -0
  707. package/pipeline/skills/shared/external/permissionkit/references/permissionkit-patterns.md +48 -8
  708. package/pipeline/skills/shared/external/photos-camera-media/SKILL.md +13 -15
  709. package/pipeline/skills/shared/external/photos-camera-media/references/camera-capture.md +4 -4
  710. package/pipeline/skills/shared/external/photos-camera-media/references/image-loading-caching.md +2 -2
  711. package/pipeline/skills/shared/external/photos-camera-media/references/{photospicker-patterns.md → photokit-patterns.md} +3 -3
  712. package/pipeline/skills/shared/external/push-notifications/SKILL.md +45 -48
  713. package/pipeline/skills/shared/external/push-notifications/evals/evals.json +46 -0
  714. package/pipeline/skills/shared/external/push-notifications/references/notification-patterns.md +22 -33
  715. package/pipeline/skills/shared/external/push-notifications/references/rich-notifications.md +56 -37
  716. package/pipeline/skills/shared/external/python-patterns/SKILL.md +4 -3
  717. package/pipeline/skills/shared/external/react-best-practices/SKILL.md +1 -0
  718. package/pipeline/skills/shared/external/realitykit-ar/SKILL.md +74 -53
  719. package/pipeline/skills/shared/external/realitykit-ar/evals/evals.json +47 -0
  720. package/pipeline/skills/shared/external/realitykit-ar/references/realitykit-patterns.md +10 -10
  721. package/pipeline/skills/shared/external/rest-api-design/SKILL.md +21 -20
  722. package/pipeline/skills/shared/external/shareplay-activities/SKILL.md +81 -64
  723. package/pipeline/skills/shared/external/shareplay-activities/evals/evals.json +47 -0
  724. package/pipeline/skills/shared/external/shareplay-activities/references/shareplay-patterns.md +48 -9
  725. package/pipeline/skills/shared/external/speech-recognition/SKILL.md +118 -104
  726. package/pipeline/skills/shared/external/speech-recognition/evals/evals.json +49 -0
  727. package/pipeline/skills/shared/external/speech-recognition/references/speechanalyzer-patterns.md +171 -0
  728. package/pipeline/skills/shared/external/spm-build-analysis/SKILL.md +93 -0
  729. package/pipeline/skills/shared/external/spm-build-analysis/references/build-optimization-sources.md +155 -0
  730. package/pipeline/skills/shared/external/spm-build-analysis/references/recommendation-format.md +85 -0
  731. package/pipeline/skills/shared/external/spm-build-analysis/references/spm-analysis-checks.md +105 -0
  732. package/pipeline/skills/shared/external/spm-build-analysis/scripts/check_spm_pins.py +118 -0
  733. package/pipeline/skills/shared/external/storekit/SKILL.md +110 -44
  734. package/pipeline/skills/shared/external/storekit/evals/evals.json +44 -0
  735. package/pipeline/skills/shared/external/storekit/references/app-review-guidelines.md +94 -43
  736. package/pipeline/skills/shared/external/storekit/references/storekit-advanced.md +82 -33
  737. package/pipeline/skills/shared/external/swift-api-design-guidelines/SKILL.md +449 -0
  738. package/pipeline/skills/shared/external/swift-api-design-guidelines/evals/evals.json +50 -0
  739. package/pipeline/skills/shared/external/swift-api-design-guidelines/references/argument-labels-and-parameters.md +164 -0
  740. package/pipeline/skills/shared/external/swift-api-design-guidelines/references/conventions-and-special-rules.md +219 -0
  741. package/pipeline/skills/shared/external/swift-api-design-guidelines/references/naming-and-clarity.md +184 -0
  742. package/pipeline/skills/shared/external/swift-api-design-guidelines/references/side-effects-and-mutating-pairs.md +158 -0
  743. package/pipeline/skills/shared/external/swift-architecture/SKILL.md +499 -0
  744. package/pipeline/skills/shared/external/swift-architecture/evals/evals.json +45 -0
  745. package/pipeline/skills/shared/external/swift-charts/SKILL.md +52 -40
  746. package/pipeline/skills/shared/external/swift-charts/evals/evals.json +47 -0
  747. package/pipeline/skills/shared/external/swift-charts/references/charts-patterns.md +92 -11
  748. package/pipeline/skills/shared/external/swift-codable/SKILL.md +43 -16
  749. package/pipeline/skills/shared/external/swift-codable/evals/evals.json +43 -0
  750. package/pipeline/skills/shared/external/swift-concurrency/SKILL.md +50 -30
  751. package/pipeline/skills/shared/external/swift-concurrency/evals/evals.json +44 -0
  752. package/pipeline/skills/shared/external/swift-concurrency/references/approachable-concurrency.md +11 -4
  753. package/pipeline/skills/shared/external/swift-concurrency/references/async-algorithms.md +113 -0
  754. package/pipeline/skills/shared/external/swift-concurrency/references/bridging-interop.md +150 -0
  755. package/pipeline/skills/shared/external/swift-concurrency/references/{swift-6-2-concurrency.md → concurrency-patterns.md} +22 -11
  756. package/pipeline/skills/shared/external/swift-concurrency/references/diagnostics.md +52 -0
  757. package/pipeline/skills/shared/external/swift-concurrency/references/swiftui-concurrency.md +2 -2
  758. package/pipeline/skills/shared/external/swift-concurrency/references/synchronization-primitives.md +21 -15
  759. package/pipeline/skills/shared/external/swift-concurrency-expert/SKILL.md +3 -3
  760. package/pipeline/skills/shared/external/swift-concurrency-pro/SKILL.md +2 -2
  761. package/pipeline/skills/shared/external/swift-concurrency-pro/references/actors.md +3 -3
  762. package/pipeline/skills/shared/external/swift-concurrency-pro/references/async-streams.md +1 -1
  763. package/pipeline/skills/shared/external/swift-concurrency-pro/references/bridging.md +3 -3
  764. package/pipeline/skills/shared/external/swift-concurrency-pro/references/bug-patterns.md +3 -3
  765. package/pipeline/skills/shared/external/swift-concurrency-pro/references/cancellation.md +8 -8
  766. package/pipeline/skills/shared/external/swift-concurrency-pro/references/diagnostics.md +1 -1
  767. package/pipeline/skills/shared/external/swift-concurrency-pro/references/hotspots.md +2 -2
  768. package/pipeline/skills/shared/external/swift-concurrency-pro/references/interop.md +4 -4
  769. package/pipeline/skills/shared/external/swift-concurrency-pro/references/new-features.md +1 -1
  770. package/pipeline/skills/shared/external/swift-concurrency-pro/references/structured.md +2 -2
  771. package/pipeline/skills/shared/external/swift-concurrency-pro/references/testing.md +2 -2
  772. package/pipeline/skills/shared/external/swift-concurrency-pro/references/unstructured.md +3 -3
  773. package/pipeline/skills/shared/external/swift-formatstyle/SKILL.md +339 -0
  774. package/pipeline/skills/shared/external/swift-language/SKILL.md +33 -34
  775. package/pipeline/skills/shared/external/swift-language/evals/evals.json +47 -0
  776. package/pipeline/skills/shared/external/swift-language/references/swift-attributes-interop.md +97 -0
  777. package/pipeline/skills/shared/external/swift-language/references/swift-patterns-extended.md +19 -6
  778. package/pipeline/skills/shared/external/swift-security/SKILL.md +195 -0
  779. package/pipeline/skills/shared/external/swift-security/evals/evals.json +48 -0
  780. package/pipeline/skills/shared/external/swift-security/references/biometric-authentication.md +595 -0
  781. package/pipeline/skills/shared/external/swift-security/references/certificate-trust.md +611 -0
  782. package/pipeline/skills/shared/external/swift-security/references/common-anti-patterns.md +708 -0
  783. package/pipeline/skills/shared/external/swift-security/references/compliance-owasp-mapping.md +573 -0
  784. package/pipeline/skills/shared/external/swift-security/references/credential-storage-patterns.md +752 -0
  785. package/pipeline/skills/shared/external/swift-security/references/cryptokit-public-key.md +538 -0
  786. package/pipeline/skills/shared/external/swift-security/references/cryptokit-symmetric.md +530 -0
  787. package/pipeline/skills/shared/external/swift-security/references/keychain-access-control.md +543 -0
  788. package/pipeline/skills/shared/external/swift-security/references/keychain-fundamentals.md +620 -0
  789. package/pipeline/skills/shared/external/swift-security/references/keychain-item-classes.md +515 -0
  790. package/pipeline/skills/shared/external/swift-security/references/keychain-sharing.md +496 -0
  791. package/pipeline/skills/shared/external/swift-security/references/migration-legacy-stores.md +747 -0
  792. package/pipeline/skills/shared/external/swift-security/references/secure-enclave.md +566 -0
  793. package/pipeline/skills/shared/external/swift-security/references/testing-security-code.md +813 -0
  794. package/pipeline/skills/shared/external/swift-testing/SKILL.md +97 -297
  795. package/pipeline/skills/shared/external/swift-testing/evals/evals.json +44 -0
  796. package/pipeline/skills/shared/external/swift-testing/references/testing-advanced.md +123 -0
  797. package/pipeline/skills/shared/external/swift-testing/references/testing-patterns.md +162 -34
  798. package/pipeline/skills/shared/external/swift-testing-pro/SKILL.md +2 -2
  799. package/pipeline/skills/shared/external/swift-testing-pro/references/async-tests.md +3 -3
  800. package/pipeline/skills/shared/external/swift-testing-pro/references/core-rules.md +2 -2
  801. package/pipeline/skills/shared/external/swift-testing-pro/references/migrating-from-xctest.md +5 -5
  802. package/pipeline/skills/shared/external/swift-testing-pro/references/new-features.md +3 -3
  803. package/pipeline/skills/shared/external/swift-testing-pro/references/writing-better-tests.md +5 -5
  804. package/pipeline/skills/shared/external/swiftdata/SKILL.md +44 -23
  805. package/pipeline/skills/shared/external/swiftdata/evals/evals.json +47 -0
  806. package/pipeline/skills/shared/external/swiftdata/references/core-data-coexistence.md +3 -3
  807. package/pipeline/skills/shared/external/swiftdata/references/indexing.md +75 -0
  808. package/pipeline/skills/shared/external/swiftdata/references/predicate-pitfalls.md +54 -0
  809. package/pipeline/skills/shared/external/swiftdata/references/swiftdata-advanced.md +14 -10
  810. package/pipeline/skills/shared/external/swiftdata/references/swiftdata-queries.md +5 -5
  811. package/pipeline/skills/shared/external/swiftdata-pro/SKILL.md +2 -2
  812. package/pipeline/skills/shared/external/swiftdata-pro/references/class-inheritance.md +2 -2
  813. package/pipeline/skills/shared/external/swiftdata-pro/references/cloudkit.md +1 -1
  814. package/pipeline/skills/shared/external/swiftdata-pro/references/core-rules.md +6 -6
  815. package/pipeline/skills/shared/external/swiftlint/SKILL.md +337 -0
  816. package/pipeline/skills/shared/external/swiftlint/references/adoption-and-configuration.md +297 -0
  817. package/pipeline/skills/shared/external/swiftlint/references/custom-rules-and-analyze.md +170 -0
  818. package/pipeline/skills/shared/external/swiftlint/references/plugins-run-scripts-and-integrations.md +307 -0
  819. package/pipeline/skills/shared/external/swiftlint/references/rule-reference.md +35 -0
  820. package/pipeline/skills/shared/external/swiftlint/references/rules-suppressions-and-baselines.md +306 -0
  821. package/pipeline/skills/shared/external/swiftui-animation/SKILL.md +56 -65
  822. package/pipeline/skills/shared/external/swiftui-animation/references/animation-advanced.md +48 -44
  823. package/pipeline/skills/shared/external/swiftui-animation/references/core-animation-bridge.md +6 -6
  824. package/pipeline/skills/shared/external/swiftui-expert-skill/references/charts-accessibility.md +13 -13
  825. package/pipeline/skills/shared/external/swiftui-expert-skill/references/charts.md +3 -3
  826. package/pipeline/skills/shared/external/swiftui-expert-skill/references/image-optimization.md +1 -1
  827. package/pipeline/skills/shared/external/swiftui-expert-skill/references/latest-apis.md +4 -4
  828. package/pipeline/skills/shared/external/swiftui-expert-skill/references/layout-best-practices.md +2 -2
  829. package/pipeline/skills/shared/external/swiftui-expert-skill/references/list-patterns.md +1 -1
  830. package/pipeline/skills/shared/external/swiftui-expert-skill/references/macos-scenes.md +16 -16
  831. package/pipeline/skills/shared/external/swiftui-expert-skill/references/macos-views.md +11 -11
  832. package/pipeline/skills/shared/external/swiftui-expert-skill/references/macos-window-styling.md +7 -7
  833. package/pipeline/skills/shared/external/swiftui-expert-skill/references/state-management.md +5 -5
  834. package/pipeline/skills/shared/external/swiftui-expert-skill/references/view-structure.md +6 -6
  835. package/pipeline/skills/shared/external/swiftui-gestures/SKILL.md +38 -16
  836. package/pipeline/skills/shared/external/swiftui-gestures/references/gesture-patterns.md +13 -3
  837. package/pipeline/skills/shared/external/swiftui-layout-components/SKILL.md +32 -28
  838. package/pipeline/skills/shared/external/swiftui-layout-components/references/form.md +1 -1
  839. package/pipeline/skills/shared/external/swiftui-layout-components/references/grids.md +202 -41
  840. package/pipeline/skills/shared/external/swiftui-layout-components/references/list.md +16 -25
  841. package/pipeline/skills/shared/external/swiftui-layout-components/references/scrollview.md +71 -26
  842. package/pipeline/skills/shared/external/swiftui-liquid-glass/SKILL.md +284 -65
  843. package/pipeline/skills/shared/external/swiftui-liquid-glass/references/liquid-glass.md +387 -0
  844. package/pipeline/skills/shared/external/swiftui-navigation/SKILL.md +10 -10
  845. package/pipeline/skills/shared/external/swiftui-navigation/references/deeplinks.md +15 -3
  846. package/pipeline/skills/shared/external/swiftui-navigation/references/navigationstack.md +2 -2
  847. package/pipeline/skills/shared/external/swiftui-navigation/references/tabview.md +1 -1
  848. package/pipeline/skills/shared/external/swiftui-patterns/SKILL.md +51 -25
  849. package/pipeline/skills/shared/external/swiftui-patterns/references/architecture-patterns.md +78 -6
  850. package/pipeline/skills/shared/external/swiftui-patterns/references/deprecated-migration.md +161 -16
  851. package/pipeline/skills/shared/external/swiftui-patterns/references/design-polish.md +85 -27
  852. package/pipeline/skills/shared/external/swiftui-patterns/references/platform-and-sharing.md +37 -33
  853. package/pipeline/skills/shared/external/swiftui-performance/SKILL.md +39 -51
  854. package/pipeline/skills/shared/external/swiftui-performance/references/demystify-swiftui-performance-wwdc23.md +204 -30
  855. package/pipeline/skills/shared/external/swiftui-performance/references/optimizing-swiftui-performance-instruments.md +226 -21
  856. package/pipeline/skills/shared/external/swiftui-performance/references/understanding-hangs-in-your-app.md +220 -20
  857. package/pipeline/skills/shared/external/swiftui-performance/references/understanding-improving-swiftui-performance.md +159 -34
  858. package/pipeline/skills/shared/external/swiftui-performance/references/wwdc-session-sources.md +27 -0
  859. package/pipeline/skills/shared/external/swiftui-pro/SKILL.md +2 -2
  860. package/pipeline/skills/shared/external/swiftui-pro/references/accessibility.md +4 -4
  861. package/pipeline/skills/shared/external/swiftui-pro/references/api.md +1 -1
  862. package/pipeline/skills/shared/external/swiftui-pro/references/data.md +2 -2
  863. package/pipeline/skills/shared/external/swiftui-pro/references/design.md +4 -4
  864. package/pipeline/skills/shared/external/swiftui-pro/references/hygiene.md +2 -2
  865. package/pipeline/skills/shared/external/swiftui-pro/references/navigation.md +1 -1
  866. package/pipeline/skills/shared/external/swiftui-pro/references/performance.md +1 -1
  867. package/pipeline/skills/shared/external/swiftui-pro/references/swift.md +2 -2
  868. package/pipeline/skills/shared/external/swiftui-pro/references/views.md +2 -2
  869. package/pipeline/skills/shared/external/swiftui-ui-patterns/SKILL.md +1 -1
  870. package/pipeline/skills/shared/external/swiftui-uikit-interop/SKILL.md +12 -12
  871. package/pipeline/skills/shared/external/swiftui-uikit-interop/references/hosting-migration.md +3 -3
  872. package/pipeline/skills/shared/external/swiftui-uikit-interop/references/representable-recipes.md +1 -1
  873. package/pipeline/skills/shared/external/swiftui-webkit/SKILL.md +11 -11
  874. package/pipeline/skills/shared/external/swiftui-webkit/references/migration-and-fallbacks.md +124 -10
  875. package/pipeline/skills/shared/external/tailwind-css/SKILL.md +3 -2
  876. package/pipeline/skills/shared/external/testing-backend/SKILL.md +2 -1
  877. package/pipeline/skills/shared/external/tipkit/SKILL.md +3 -3
  878. package/pipeline/skills/shared/external/tipkit/references/tipkit-patterns.md +9 -9
  879. package/pipeline/skills/shared/external/typescript-patterns/SKILL.md +17 -16
  880. package/pipeline/skills/shared/external/vision-framework/SKILL.md +11 -11
  881. package/pipeline/skills/shared/external/vision-framework/references/vision-requests.md +1 -1
  882. package/pipeline/skills/shared/external/vision-framework/references/visionkit-scanner.md +5 -5
  883. package/pipeline/skills/shared/external/vue-composition/SKILL.md +7 -6
  884. package/pipeline/skills/shared/external/weatherkit/SKILL.md +3 -3
  885. package/pipeline/skills/shared/external/weatherkit/references/weatherkit-patterns.md +9 -9
  886. package/pipeline/skills/shared/external/web-accessibility/SKILL.md +1 -0
  887. package/pipeline/skills/shared/external/web-performance/SKILL.md +8 -7
  888. package/pipeline/skills/shared/external/web-testing/SKILL.md +7 -6
  889. package/pipeline/skills/shared/external/widgetkit/SKILL.md +23 -17
  890. package/pipeline/skills/shared/external/widgetkit/references/widgetkit-advanced.md +99 -0
  891. package/pipeline/skills/shared/external/xcode-build-benchmark/SKILL.md +89 -0
  892. package/pipeline/skills/shared/external/xcode-build-benchmark/references/benchmark-artifacts.md +94 -0
  893. package/pipeline/skills/shared/external/xcode-build-benchmark/references/benchmarking-workflow.md +67 -0
  894. package/pipeline/skills/shared/external/xcode-build-benchmark/schemas/build-benchmark.schema.json +230 -0
  895. package/pipeline/skills/shared/external/xcode-build-benchmark/scripts/benchmark_builds.py +308 -0
  896. package/pipeline/skills/shared/external/xcode-build-fixer/SKILL.md +219 -0
  897. package/pipeline/skills/shared/external/xcode-build-fixer/references/build-settings-best-practices.md +216 -0
  898. package/pipeline/skills/shared/external/xcode-build-fixer/references/fix-patterns.md +290 -0
  899. package/pipeline/skills/shared/external/xcode-build-fixer/references/recommendation-format.md +85 -0
  900. package/pipeline/skills/shared/external/xcode-build-fixer/scripts/benchmark_builds.py +308 -0
  901. package/pipeline/skills/shared/external/xcode-build-orchestrator/SKILL.md +157 -0
  902. package/pipeline/skills/shared/external/xcode-build-orchestrator/references/benchmark-artifacts.md +94 -0
  903. package/pipeline/skills/shared/external/xcode-build-orchestrator/references/build-settings-best-practices.md +216 -0
  904. package/pipeline/skills/shared/external/xcode-build-orchestrator/references/orchestration-report-template.md +143 -0
  905. package/pipeline/skills/shared/external/xcode-build-orchestrator/references/recommendation-format.md +85 -0
  906. package/pipeline/skills/shared/external/xcode-build-orchestrator/scripts/benchmark_builds.py +308 -0
  907. package/pipeline/skills/shared/external/xcode-build-orchestrator/scripts/diagnose_compilation.py +273 -0
  908. package/pipeline/skills/shared/external/xcode-build-orchestrator/scripts/generate_optimization_report.py +533 -0
  909. package/pipeline/skills/shared/external/xcode-compilation-analyzer/SKILL.md +90 -0
  910. package/pipeline/skills/shared/external/xcode-compilation-analyzer/references/build-optimization-sources.md +155 -0
  911. package/pipeline/skills/shared/external/xcode-compilation-analyzer/references/code-compilation-checks.md +106 -0
  912. package/pipeline/skills/shared/external/xcode-compilation-analyzer/references/recommendation-format.md +85 -0
  913. package/pipeline/skills/shared/external/xcode-compilation-analyzer/scripts/diagnose_compilation.py +273 -0
  914. package/pipeline/skills/shared/external/xcode-project-analyzer/SKILL.md +77 -0
  915. package/pipeline/skills/shared/external/xcode-project-analyzer/references/build-optimization-sources.md +155 -0
  916. package/pipeline/skills/shared/external/xcode-project-analyzer/references/build-settings-best-practices.md +216 -0
  917. package/pipeline/skills/shared/external/xcode-project-analyzer/references/project-audit-checks.md +101 -0
  918. package/pipeline/skills/shared/external/xcode-project-analyzer/references/recommendation-format.md +85 -0
  919. package/pipeline/skills/skills-index.md +213 -192
  920. package/docs/GENERICITY-REVIEW.md +0 -277
  921. package/docs/STABILITY-FIX-PLAN.md +0 -168
  922. package/pipeline/scripts/README-figma-smokes.md +0 -34
  923. package/pipeline/scripts/figma-placeholder-map.json +0 -191
  924. package/pipeline/scripts/import-figma-skills.sh +0 -253
  925. package/pipeline/scripts/smoke-figma-config-schema.sh +0 -144
  926. package/pipeline/scripts/smoke-figma-skill-import.sh +0 -174
  927. package/pipeline/scripts/smoke-install-leak-gate.sh +0 -125
  928. package/pipeline/scripts/smoke-personal-data.sh +0 -84
  929. package/pipeline/scripts/sync-figma-source.sh +0 -228
  930. package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-page-ids.json +0 -94
  931. package/pipeline/skills/shared/external/app-store-review/references/code-signing.md +0 -259
  932. package/pipeline/skills/shared/external/app-store-review/references/rejection-patterns.md +0 -152
  933. package/pipeline/skills/shared/external/pencilkit-drawing/references/paperkit-integration.md +0 -376
@@ -1,28 +1,40 @@
1
1
  ### Phase 4: Review (deterministic gates + parallel + triage)
2
2
 
3
- > **TLDR**Three-stage review. Stage 1: deterministic gates (build + lint + test + secret scan) that MUST pass. Stage 2: AI models in parallelreviewer set is **CLI-aware**: Claude Code dispatches 2 reviewers (Opus + Sonnet); Copilot CLI dispatches 3 reviewers (GPT-5.4 + Opus + Sonnet). Stage 3: Opus triageevaluates raw findings, filters false-positives/out-of-scope, keeps only actionable items. Only triage-accepted blocking items loop back to Phase 3.
3
+ > **TLDR** - Three-stage review. Stage 1: deterministic gates (build + lint + test + secret scan) that MUST pass. Stage 2: AI models in parallel - reviewer set is **CLI-aware**: Claude Code dispatches 2 reviewers (Opus + Sonnet); Copilot CLI dispatches 3 reviewers (GPT-5.4 + Opus + Sonnet). Stage 3: Opus triage - evaluates raw findings, filters false-positives/out-of-scope, keeps only actionable items. Only triage-accepted blocking items loop back to Phase 3.
4
4
 
5
5
  <!-- progress-contract: applied -->
6
- Progress emission per `refs/progress-contract.md`lines for each gate, each reviewer dispatch + finish, triage start, triage verdict, fix dispatch.
6
+ Progress emission per `refs/progress-contract.md` - lines for each gate, each reviewer dispatch + finish, triage start, triage verdict, fix dispatch.
7
7
 
8
- #### Step 1Deterministic Gates (run BEFORE AI review)
8
+ #### Step 1 - Deterministic Gates (run BEFORE AI review)
9
9
 
10
10
  If any gate fails → fix first, don't waste AI tokens reviewing broken code.
11
11
 
12
12
  ```bash
13
- # Gate 1: Build (Xcode uses build queue locksee Phase 3)
14
- # Gate 2: Lint (swiftlint/ktlint/ruff/eslint — stack-dependent)
15
- # Gate 3: Tests pass (xcodebuild test/gradle test/pytest/npm test)
16
- # Gate 4: No secrets (grep for sk-/password=/api_key=/BEGIN PRIVATE KEY)
13
+ # Gate 1: Build (Xcode uses build queue lock - see Phase 3) - tee output to a log
14
+ xcodebuild ... 2>&1 | tee "$WORKTREE/.build.log"
15
+ # Gate 2: Lint (swiftlint/ktlint/ruff/eslint - stack-dependent)
16
+ # Gate 3: Tests pass (xcodebuild test/gradle test/pytest/npm test) - tee output to a log
17
+ <test-command> 2>&1 | tee "$WORKTREE/.test.log"
18
+ # Gate 4: Secrets - run the scanner against the staged diff
19
+ bash pipeline/scripts/pre-commit-check.sh
17
20
  ```
18
21
 
22
+ **Default-FAIL evidence gate (required before recording any pass):** a green exit code is not enough - the captured log must actually show success. Before marking build/test passed, run the evidence gate against the tee'd log; it fails CLOSED when the log is missing, empty, or shows failure markers:
23
+
24
+ ```bash
25
+ node pipeline/scripts/evidence-gate.mjs --claim build --status passed --evidence "$WORKTREE/.build.log" || BUILD_PASS=false
26
+ node pipeline/scripts/evidence-gate.mjs --claim test --status passed --evidence "$WORKTREE/.test.log" || TEST_PASS=false
27
+ ```
28
+
29
+ This prevents a false "it built" claim with no log behind it. On exit 1, treat the gate as failed (do NOT proceed to AI review) and surface the gate's `reason`.
30
+
19
31
  **Gate results:**
20
32
 
21
- - All pass -> proceed to AI review
33
+ - All pass (including the evidence gate) -> proceed to AI review
22
34
  - Any fail -> fix immediately, re-run gates (no AI review until clean)
23
- Log: "Phase 4: Gatesbuild:{pass/fail} lint:{pass/fail} test:{pass/fail} secrets:{clean/found}"
35
+ Log: "Phase 4: Gates - build:{pass/fail} lint:{pass/fail} test:{pass/fail} secrets:{clean/found} evidence:{ok/unverified}"
24
36
 
25
- ##### Gate 5Fortify SSC findings (runs when `state.contextLinks[]` contains a `fortify` entry, or when `prefs.global.fortify.alwaysCheck === true`)
37
+ ##### Gate 5 - Fortify SSC findings (runs when `state.contextLinks[]` contains a `fortify` entry, or when `prefs.global.fortify.alwaysCheck === true`)
26
38
 
27
39
  If the task description referenced a Fortify version, `~/.claude/lib/fetch-fortify.sh` already populated `state.fortifyFinding` in Phase 0. Phase 4 reuses that payload and applies the deterministic gate:
28
40
 
@@ -35,7 +47,7 @@ elif [ "$(jq -r '.fortifyFinding.gateOutcome.blocking' "$STATE_FILE")" = "true"
35
47
  reason=$(jq -r '.fortifyFinding.gateOutcome.reason' "$STATE_FILE")
36
48
  critical=$(jq -r '.fortifyFinding.severityCounts.Critical' "$STATE_FILE")
37
49
  echo "→ fortify gate: BLOCKED ($reason, critical=$critical)"
38
- # Treat as a deterministic gate failurefix the critical findings before AI review.
50
+ # Treat as a deterministic gate failure - fix the critical findings before AI review.
39
51
  exit 1
40
52
  else
41
53
  high=$(jq -r '.fortifyFinding.severityCounts.High // 0' "$STATE_FILE")
@@ -47,13 +59,13 @@ Gate semantics:
47
59
 
48
60
  | `gateOutcome.reason` | Phase 4 action |
49
61
  |---|---|
50
- | `critical-findings` | **Blocking**Phase 3 re-dispatches with the finding list; pipeline does not advance until Critical count is 0. |
51
- | `high-findings-warning` | Pass-with-warningHigh findings appear in the channels summary (`## Güvenlik Taraması (Fortify)` section in PR + Jira); they don't block the merge. |
52
- | `clean` | Pass silentlysection omitted from the channels summary. |
62
+ | `critical-findings` | **Blocking** - Phase 3 re-dispatches with the finding list; pipeline does not advance until Critical count is 0. |
63
+ | `high-findings-warning` | Pass-with-warning - High findings appear in the channels summary (`## Security Scan (Fortify)` section in PR + Jira); they don't block the merge. |
64
+ | `clean` | Pass silently - section omitted from the channels summary. |
53
65
 
54
- When `state.fortifyFinding.status === "skipped"` (token missing, VPN unreachable, or host mismatch) the gate logs `→ fortify gate: skipped (<reason>)` and never blocksthe user already saw the structured Save Flow signal at Phase 0 and chose to proceed.
66
+ When `state.fortifyFinding.status === "skipped"` (token missing, VPN unreachable, or host mismatch) the gate logs `→ fortify gate: skipped (<reason>)` and never blocks - the user already saw the structured Save Flow signal at Phase 0 and chose to proceed.
55
67
 
56
- #### Step 1.5Platform Compliance Review (skill-based, no device needed)
68
+ #### Step 1.5 - Platform Compliance Review (skill-based, no device needed)
57
69
 
58
70
  If changes include UI files (iOS: `*View.swift`, `*Screen.swift`, `*Cell.swift`; Android: `*Screen.kt`, `*Content.kt`, `*Composable.kt`), run platform-specific checks:
59
71
 
@@ -63,13 +75,21 @@ If changes include UI files (iOS: `*View.swift`, `*Screen.swift`, `*Cell.swift`;
63
75
  - Missing `.accessibilityIdentifier` / `testTag` → **important**
64
76
  - Dynamic Type / font scaling not supported → **important**
65
77
 
66
- **iOSApple HIG compliance** (skills: `hig-patterns`, `hig-components-layout`, `hig-foundations`):
78
+ **iOS - Apple HIG compliance** (skills: `hig-patterns`, `hig-components-layout`, `hig-foundations`):
67
79
  - Navigation pattern mismatch (e.g. custom back button instead of system) → **important**
68
80
  - Non-standard gesture without discoverability hint → **suggestion**
69
81
  - Missing safe area / keyboard avoidance → **important**
70
82
  - Hardcoded colors instead of system/semantic colors → **suggestion**
71
83
 
72
- **Android Material Design compliance** (skills: `compose-components`, `android-architecture`):
84
+ **iOS - SwiftUI interaction & accessibility conventions** (skills: `figma-navigation`, `figma-overlays`, `figma-bottom-sheets`, plus the enriched `figma-to-swiftui` accessibility rules). Gated to changed SwiftUI files; each is native-SwiftUI-first unless the project's `figma-config` `ui.*` declares a custom system, in which case check against that system instead:
85
+ - A reusable component that **routes itself** (hardcoded `NavigationLink(destination: ConcreteScreen())`, calls a router) instead of emitting a typed `Output` → **important** (breaks reuse).
86
+ - A reusable component that **presents its own app-level overlay** (toast/alert/modal) instead of emitting an intent for the caller → **important** (double-fires when composed).
87
+ - `AnyView` routed through an overlay center / data-modal path (rich content should be a local `.sheet/.modal { }`) → **important**.
88
+ - Loading HUD not **ref-counted** / missing `end` on an error path / no min-show (flash) → **important**.
89
+ - A pinned bottom CTA built as a presented sheet instead of `.safeAreaInset(edge:.bottom)`, or detents that aren't ascending / use magic-number heights → **suggestion**.
90
+ - **Accessibility over-annotation** (redundant `.isButton` on `Button` / `.isStaticText` on `Text`, `.accessibilityLabel` duplicating visible text, a per-enum-variant a11y key for non-interactive visual state, hints on self-explanatory actions) → **suggestion**; **missing** decorative-image hiding or interactive-state `.accessibilityValue` → **important**.
91
+
92
+ **Android - Material Design compliance** (skills: `compose-components`, `android-architecture`):
73
93
  - Non-Material3 component when M3 equivalent exists → **suggestion**
74
94
  - Missing `contentDescription` on icons/images → **blocking**
75
95
  - Hardcoded dp values instead of Material spacing tokens → **suggestion**
@@ -80,17 +100,17 @@ If changes include UI files (iOS: `*View.swift`, `*Screen.swift`, `*Cell.swift`;
80
100
 
81
101
  Device-level audit runs in Phase 5 (`audit-guide.md`).
82
102
 
83
- #### Step 1.6Repo Map Injection (advisory, opt-in)
103
+ #### Step 1.6 - Repo Map Injection (advisory, opt-in)
84
104
 
85
- **Gated by `prefs.global.repoMap.enabled`** (default: `false`). Same pattern as Phase 1 Step 2.5runs `pipeline/scripts/repo-map.mjs` and injects the result as `${REPO_MAP}` into each reviewer's prompt context. Reviewers treat it the same way the priority files block is treated: advisory hint, not gospel.
105
+ **Gated by `prefs.global.repoMap.enabled`** (default: `false`). Same pattern as Phase 1 Step 2.5 - runs `pipeline/scripts/repo-map.mjs` and injects the result as `${REPO_MAP}` into each reviewer's prompt context. Reviewers treat it the same way the priority files block is treated: advisory hint, not gospel.
86
106
 
87
107
  Phase 4 reuses the cached map from Phase 1 when both phases run in the same task (avoid recomputing the same scan twice). The orchestrator caches under `state.repoMap.<sha>` keyed by `git rev-parse HEAD`; cache miss → regenerate. When `enabled=false`, both phases skip the script entirely and no `${REPO_MAP}` placeholder appears in prompts (no empty-string artefact).
88
108
 
89
- Cost ledger: `phase-4.repo_map_emitted bytes=N budget=B cache_hit=true|false`Phase 7 cost rollup distinguishes a cache hit (free) from a regeneration (~150-300ms wall, 0 LLM cost either way).
109
+ Cost ledger: `phase-4.repo_map_emitted bytes=N budget=B cache_hit=true|false` - Phase 7 cost rollup distinguishes a cache hit (free) from a regeneration (~150-300ms wall, 0 LLM cost either way).
90
110
 
91
- #### Step 1.75Diff Risk Scoring (advisory)
111
+ #### Step 1.75 - Diff Risk Scoring (advisory)
92
112
 
93
- Before dispatching reviewers, run the deterministic diff risk scorer and inject the top-N files into each reviewer's prompt as a priority hint. **Advisory onlynever gates the pipeline.** Heuristic, zero LLM, runs in well under a second.
113
+ Before dispatching reviewers, run the deterministic diff risk scorer and inject the top-N files into each reviewer's prompt as a priority hint. **Advisory only - never gates the pipeline.** Heuristic, zero LLM, runs in well under a second.
94
114
 
95
115
  ```bash
96
116
  RISK_JSON=$(node pipeline/scripts/diff-risk-score.mjs \
@@ -111,9 +131,9 @@ echo "$RISK_JSON" | node pipeline/scripts/validate-diff-risk.mjs - >/dev/null 2>
111
131
  | `ui_critical` | 1.5 | path matches `*View.swift`, `*Screen.kt`, `*Configuration.swift`, etc. |
112
132
  | `loc_changed` | 1.0 | base sensitivity to total `+/-` lines |
113
133
 
114
- **Reviewer prompt injection**: when `$RISK_JSON` is non-empty, the orchestrator builds a `${PRIORITY_FILES}` block (numbered list of top-N files with their score + signals) and injects it once per reviewer. Reviewer prompt template (`code-reviewer.md`) treats it as advisory and does not echo it back. Triage does not see the priority listits job is to filter the merged findings, not the diff.
134
+ **Reviewer prompt injection**: when `$RISK_JSON` is non-empty, the orchestrator builds a `${PRIORITY_FILES}` block (numbered list of top-N files with their score + signals) and injects it once per reviewer. Reviewer prompt template (`code-reviewer.md`) treats it as advisory and does not echo it back. Triage does not see the priority list - its job is to filter the merged findings, not the diff.
115
135
 
116
- **Gate behavior**: this step is **never blocking**. If risk scoring fails (git error, parse error, validator rejection), continue with no priority hintreviewers receive the full diff in their default order. Failures are logged via metrics:
136
+ **Gate behavior**: this step is **never blocking**. If risk scoring fails (git error, parse error, validator rejection), continue with no priority hint - reviewers receive the full diff in their default order. Failures are logged via metrics:
117
137
 
118
138
  ```bash
119
139
  [ -z "$RISK_JSON" ] && pipeline/scripts/log-metric.sh "$TASK_ID" 4 review.diff_risk_skipped reason=$REASON
@@ -130,9 +150,34 @@ pipeline/scripts/log-metric.sh "$TASK_ID" 4 review.diff_risk \
130
150
 
131
151
  **Opt-out**: `prefs.global.diffRiskAdvisory = false` skips this step entirely (no script invocation, no priority block injection). Default `true` because the cost is bounded and the signal-to-noise has been measured against the golden-task fixture set.
132
152
 
133
- #### Step 2 Parallel AI Review (CLI-aware reviewer set)
153
+ #### Step 1.8 - Figma visual-fidelity context (when task carries a Figma reference)
154
+
155
+ When `state.evidence.figma[]` is non-empty, the reviewer subagents MUST receive the captured screenshot URLs / paths and the canonical-component name (from `state.evidence.figma[i].screenshotUrl` and `state.evidence.figma[i].codeConnectSnippets[0].componentName` when present) so they can compare visual fidelity. Pass them inline in each reviewer prompt under a `## Figma evidence` block, one row per frame.
156
+
157
+ Visual-fidelity mismatches against the captured screenshot are BLOCKING findings, not nits:
158
+
159
+ - Avatar icon (presence, glyph, shape, position)
160
+ - Field grouping (one rounded box vs two; separator vs gap)
161
+ - Character counter visibility
162
+ - Header style (size, weight, alignment)
163
+ - Inline error layout (icon presence, text colour, position relative to the input)
164
+ - Button height
165
+ - Indicator chip placement
166
+ - Placeholder copy and position
167
+
168
+ When `state.figmaAccess.tier === 3` (user-attached screenshot, no Code Connect snippet), the reviewer additionally sets `findings[i].severity = "blocking"` and `findings[i].tag = "review_blocking_tier3"` on every UI atom that lacks a confirmed canonical-component mapping. The triage step preserves these findings unless the user has explicitly cleared the open question.
169
+
170
+ #### Step 1.9 - Context economy (cache prefix + diff cap)
171
+
172
+ Phase 4 sends the same diff to every reviewer and then to triage, so the diff is the dominant token cost. Two measures keep it bounded:
134
173
 
135
- Launch Agent instances **in parallel** using the shared `code-reviewer` subagent definition (`~/.claude/agents/code-reviewer.md`). The reviewer set is determined by the host CLI GPT-5.4 is only available on Copilot CLI, so Claude Code skips that reviewer and runs a 2-model parallel review; Copilot CLI runs all three.
174
+ **Shared cache prefix.** Build the reviewer and triage prompts so the large invariant context - the full diff, the Phase 1 analysis summary, the Phase 2 plan - is a byte-identical leading block across all dispatches in this iteration. Only the per-reviewer focus + skill line varies, and it goes AFTER the shared block. When the host supports prompt caching, the 2nd/3rd reviewer and the triage call then read that prefix at the discounted cache-read rate instead of re-billing it as fresh input. Forward the host-reported cache-read count as `tokens_cached` per the Token telemetry contract so the saving lands in the cost ledger.
175
+
176
+ **Single-repo diff cap.** If the diff exceeds the Phase 4 token allowance (`token-budget.json`), truncate the largest files and append a footer `[truncated - full diff in file://$WORKTREE/.review-diff.txt]`, writing the full diff to that path. Reviewers and triage receive the same capped view + the marker so they can flag "review the full diff manually." Log `review.diff_truncated bytes_dropped=<N>`. (Multi-repo already caps the combined diff at 80% of budget; this is the single-repo equivalent.)
177
+
178
+ #### Step 2 - Parallel AI Review (CLI-aware reviewer set)
179
+
180
+ Launch Agent instances **in parallel** using the shared `code-reviewer` subagent definition (`~/.claude/agents/code-reviewer.md`). The reviewer set is determined by the host CLI - GPT-5.4 is only available on Copilot CLI, so Claude Code skips that reviewer and runs a 2-model parallel review; Copilot CLI runs all three.
136
181
 
137
182
  | Reviewer | subagent_type | Model | Focus | Skills Referenced | Where it runs |
138
183
  | ---------- | ----------------- | ------------------- | --------------------------------- | --------------------------------------------- | -------------------- |
@@ -140,13 +185,23 @@ Launch Agent instances **in parallel** using the shared `code-reviewer` subagent
140
185
  | Reviewer 2 | `code-reviewer` | `gpt-5.4` | Edge cases, different perspective | cross-model diversity | **Copilot CLI only** |
141
186
  | Reviewer 3 | `code-reviewer` | `claude-sonnet-4.6` | Quality + correctness + naming | `clean-code`, stack-specific skill | Both CLIs |
142
187
 
143
- Each reviewer inherits the `code-reviewer` agent's focus areas (Security, Architecture, Quality, Performance) and output contract. The orchestrator overrides only the model and the stack-specific skill per-reviewerno prompt duplication.
188
+ Each reviewer inherits the `code-reviewer` agent's focus areas (Security, Architecture, Quality, Performance) and output contract. The orchestrator overrides only the model and the stack-specific skill per-reviewer - no prompt duplication.
189
+
190
+ **Model override wiring:** `code-reviewer.md` declares `preferredModel: opus`, so Reviewer 1 uses the persona default. Reviewer 2 (Copilot-only, `gpt-5.4`) and Reviewer 3 (`claude-sonnet-4.6`) set `PHASE_MODEL_OVERRIDE=<model>` before dispatch - the orchestrator exports `CLAUDE_CODE_SUBAGENT_MODEL` on Claude Code, or passes `--model` on Copilot CLI. Full precedence rule: `skills/shared/core/multi-agent/SKILL.md#agent-dispatch--per-persona-model-routing-v610`. Opus dispatches are additionally subject to the fallback contract (`refs/features/model-fallback.md`): dispatch-error retry on `fallbackModel` (sonnet) and budget-ceiling downgrade.
191
+
192
+ **Adapter platforms (Cursor / Antigravity / VS Code Copilot Chat) - reviewer set.** The native trio above is a Claude-Code / Copilot-CLI capability. On the adapter platforms the pipeline configures a 2-model cross-vendor review using the models each platform actually exposes (lineup in `pipeline/adapters/_base.mjs#REVIEWER_MODELS`; update as the platforms ship new versions):
193
+
194
+ | Platform | Reviewer agents emitted | Models |
195
+ |---|---|---|
196
+ | Cursor | `ma-code-reviewer` + `ma-code-reviewer-x` (per-agent `model:` pinning is supported) | primary `inherit` (your selected model, usually Claude) + `gpt-5.5` |
197
+ | VS Code Copilot Chat | `ma-code-reviewer` + `ma-code-reviewer-x` (frontmatter `model:` takes the picker label) | `Claude Opus 4.8` + `GPT-5.5` |
198
+ | Antigravity | two parallel review agents (model chosen in the UI, not a file) | recommended `Gemini 3 Pro` + `Claude Opus 4.6`, set via the side-panel dropdown |
144
199
 
145
- **Model override wiring:** `code-reviewer.md` declares `preferredModel: opus`, so Reviewer 1 uses the persona default. Reviewer 2 (Copilot-only, `gpt-5.4`) and Reviewer 3 (`claude-sonnet-4.6`) set `PHASE_MODEL_OVERRIDE=<model>` before dispatch the orchestrator exports `CLAUDE_CODE_SUBAGENT_MODEL` on Claude Code, or passes `--model` on Copilot CLI. Full precedence rule: `skills/shared/core/multi-agent/SKILL.md#agent-dispatch--per-persona-model-routing-v610`.
200
+ So cross-vendor review IS restored on the adapter platforms (two different models on the code review), with the stack architect + `ma-security-auditor` as before. Two honest caveats remain vs the native hosts: (1) the exact model availability depends on the user's subscription (a pinned model the user lacks must be swapped in `REVIEWER_MODELS` / the dropdown), and (2) there is no `PreToolUse` hook, so gates are workflow-enforced not OS-blocked. Antigravity's models are dropdown-selected, so its pair is documented in the workflow rather than file-pinned.
146
201
 
147
- **Stack-specific skills loaded per reviewer** (from Phase 1 `detectedStack`). On Claude Code, Reviewer 2 (GPT-5.4) is not dispatchedits skill column is ignored. On Copilot CLI all three columns are used.
202
+ **Stack-specific skills loaded per reviewer** (from Phase 1 `detectedStack`). On Claude Code, Reviewer 2 (GPT-5.4) is not dispatched - its skill column is ignored. On Copilot CLI all three columns are used.
148
203
 
149
- | Stack | Reviewer 1 (Opus) | Reviewer 2 (GPT-5.4Copilot CLI only) | Reviewer 3 (Sonnet) |
204
+ | Stack | Reviewer 1 (Opus) | Reviewer 2 (GPT-5.4 - Copilot CLI only) | Reviewer 3 (Sonnet) |
150
205
  |-------|-------------------|-----------------------------------------|---------------------|
151
206
  | iOS/Swift | `ios-security`, `swiftui-performance`, `hig-patterns` | `swift-concurrency`, `ios-accessibility` | `swiftui-pro`, `swift-testing` |
152
207
  | Android/Kotlin | `android-security`, `android-performance` | `compose-testing`, `android-architecture` | `compose-components`, `kotlin-coroutines-expert` |
@@ -155,30 +210,44 @@ Each reviewer inherits the `code-reviewer` agent's focus areas (Security, Archit
155
210
  | Docker | `docker-expert` | `docker-expert` | `ci-cd-pipelines` |
156
211
  | Generic | `security-review` | `clean-code` | `clean-code` |
157
212
 
158
- Skills are injected into reviewer prompt contextthe reviewer uses them as reference, not as commands.
213
+ Skills are injected into reviewer prompt context - the reviewer uses them as reference, not as commands.
214
+
215
+ **iOS/Swift - interaction & convention skills (conditional).** When the diff touches SwiftUI UI files (`*View.swift`, `*Screen.swift`, `*Configuration.swift`, `*+Modifiers.swift`), additionally inject the relevant `figma-common` convention skills as reference for the iOS reviewers: `figma-navigation`, `figma-overlays`, `figma-bottom-sheets` (interaction: emit-intent vs self-route/self-present; native-SwiftUI-first vs the project's `ui.*` custom system), and the enriched `figma-to-swiftui` accessibility rules (minimalism). These back the Step 1.5 iOS convention checks. Generic across SwiftUI projects - not tied to any one app. Omit when the diff has no SwiftUI UI changes (keeps the reviewer prompt lean).
216
+
217
+ **Dispatch timeout (required, mirrors triage 3.3).** Reviewers run in parallel and triage waits on all of them, so one stalled reviewer hangs the phase. Bound each reviewer dispatch by `REVIEWER_TIMEOUT_SECONDS` (default 180). If a reviewer has not returned by the budget: log `review.reviewer_timeout reviewer=<name>`, treat that reviewer as absent, and proceed to triage with the reviewers that did return. The merged-findings count and `consensus.reviewerCount` reflect only the reviewers that returned. If **zero** reviewers return, retry the Opus reviewer once; on a second total failure HALT with `ERR: no reviewer returned within ${REVIEWER_TIMEOUT_SECONDS}s; resume with /multi-agent:resume #N.`. The Step 2.5 rebuttal round uses the same per-dispatch timeout. Never block indefinitely on a slow or dead reviewer dispatch.
159
218
 
160
- #### Output contractreviewer step
219
+ #### Output contract - reviewer step
161
220
 
162
- Step 2 produces N reviewer-output objects (one per dispatched reviewer), each conforming to `pipeline/schemas/reviewer-output.schema.json`. They are persisted to `state.reviewIterations[<iteration>].reviewers[]` and consumed by Step 3 (Opus triage)never by Phase 6 directly. The triage step (below) is the producer of the only review artifact Phase 6 reads, conforming to `pipeline/schemas/triage-output.schema.json`.
221
+ Step 2 produces N reviewer-output objects (one per dispatched reviewer), each conforming to `pipeline/schemas/reviewer-output.schema.json`. They are persisted to `state.reviewIterations[<iteration>].reviewers[]` and consumed by Step 3 (Opus triage) - never by Phase 6 directly. The triage step (below) is the producer of the only review artifact Phase 6 reads, conforming to `pipeline/schemas/triage-output.schema.json`.
163
222
 
164
- **Subagent return format**each reviewer returns JSON conforming to `pipeline/schemas/reviewer-output.schema.json`:
223
+ **Subagent return format** - each reviewer returns JSON conforming to `pipeline/schemas/reviewer-output.schema.json`:
165
224
 
166
225
  ```json
167
226
  {"findings":[{"severity":"blocking|important|suggestion","file":"...","line":N,"issue":"...","fix":"..."}],"approved":true|false}
168
227
  ```
169
228
 
170
- **Validate before merging** with `node pipeline/scripts/validate-reviewer.mjs -`. Exit 0=valid, 1=malformed (re-invoke once, then drop), 2=contradiction (flip approved to false).
229
+ **Required: validator gate (deterministic) - run immediately after each reviewer returns, before merging findings.** Persist each reviewer's output and validate the file - the validator's exit code decides, not the LLM turn:
230
+
231
+ ```bash
232
+ REVIEWER_FILE="$WORKTREE/.pipeline/reviewer-$N.json"
233
+ printf '%s' "$REVIEWER_JSON" > "$REVIEWER_FILE"
234
+ node $HOME/.claude/scripts/validate-reviewer.mjs "$REVIEWER_FILE"
235
+ ```
171
236
 
172
- #### Step 2.5 Disagreement-round loop (opt-in)
237
+ Progress line: ` → checking validator validate-reviewer ({reviewer})`
173
238
 
174
- **Rationale:** When reviewers disagree (e.g. 1 blocker vs 2 pass), straight-to-triage discards potential insight the minority reviewer might see something real, or the majority reviewers might all miss a subtle issue. One rebuttal round lifts signal quality without adding a new phase.
239
+ Exit 0 = valid. Exit 2 = contradiction (approved=true with blocking findings) - flip `approved` to `false`, continue. Exit 1 = malformed; gate protocol (fails CLOSED, same handling as the evidence gate): emit the validator stderr + `errors[]` verbatim, attempt ONE self-correction rework (re-invoke that reviewer with the errors quoted, overwrite the file), re-run the validator. If it fails again -> HALT the phase (no merge, no triage). Recovery hint: `ERR: reviewer output failed validate-reviewer.mjs twice. Inspect $REVIEWER_FILE against pipeline/schemas/reviewer-output.schema.json, then resume with /multi-agent:resume #N.`
240
+
241
+ #### Step 2.5 - Disagreement-round loop (opt-in)
242
+
243
+ **Rationale:** When reviewers disagree (e.g. 1 blocker vs 2 pass), straight-to-triage discards potential insight - the minority reviewer might see something real, or the majority reviewers might all miss a subtle issue. One rebuttal round lifts signal quality without adding a new phase.
175
244
 
176
245
  **Gated by `prefs.global.reviewDisagreementRound`** (default: `false`). When enabled:
177
246
 
178
247
  1. Compute disagreement: reviewers agree iff all return `approved=true` with no `blocking` findings, OR all return `approved=false` with overlapping `blocking` findings. Anything else is disagreement.
179
248
  2. Agreement → skip the rebuttal round, go straight to Step 3 triage.
180
249
  3. Disagreement → one rebuttal round:
181
- - For each reviewer, re-prompt with: (a) their original output, (b) the OTHER reviewers' blocker findings verbatim, (c) instruction: *"Given the opposing arguments, keep / withdraw / modify each of your findings. You may also newly agree with a finding you previously missed. Return the SAME JSON schemathis is a revision, not a new review."*
250
+ - For each reviewer, re-prompt with: (a) their original output, (b) the OTHER reviewers' blocker findings verbatim, (c) instruction: *"Given the opposing arguments, keep / withdraw / modify each of your findings. You may also newly agree with a finding you previously missed. Return the SAME JSON schema - this is a revision, not a new review."*
182
251
  - Launch all reviewers in parallel (same CLI-aware set as Step 2).
183
252
  - Max one round. Results replace the original outputs.
184
253
  4. Proceed to Step 3 triage with the round-2 outputs.
@@ -187,11 +256,11 @@ Step 2 produces N reviewer-output objects (one per dispatched reviewer), each co
187
256
 
188
257
  **Cost ceiling:** rebuttal round consumes ~1× the original Step 2 token budget. Smoke + budget tests treat this as opt-in so the default cost stays the same.
189
258
 
190
- **Off by default reason:** mixed-verdict cases are ~8% of runs in practice; the extra ~$0.20–$0.50 per run isn't worth automating for users who'd rather let triage resolve it cleanly. Users with high-stakes tasks (security-critical, release branches) can flip the flag.
259
+ **Off by default reason:** mixed-verdict cases are ~8% of runs in practice; the extra ~$0.20-$0.50 per run isn't worth automating for users who'd rather let triage resolve it cleanly. Users with high-stakes tasks (security-critical, release branches) can flip the flag.
191
260
 
192
- #### Step 3Opus Triage (filter before acting)
261
+ #### Step 3 - Opus Triage (filter before acting)
193
262
 
194
- **CRITICAL**: Reviewer findings are **raw signals**, not commands. Never auto-loop on every "blocking" tagreviewers hallucinate, misread scope, or repeat each other. Run Opus triage to evaluate merged findings against task scope.
263
+ **CRITICAL**: Reviewer findings are **raw signals**, not commands. Never auto-loop on every "blocking" tag - reviewers hallucinate, misread scope, or repeat each other. Run Opus triage to evaluate merged findings against task scope.
195
264
 
196
265
  ##### 3.1 Short-circuit: no findings
197
266
 
@@ -204,7 +273,7 @@ Launch **1 Agent** (subagent_type: `general-purpose`, model: `opus`) with:
204
273
  - Raw findings from Reviewer 1 + Reviewer 2 (merged JSON)
205
274
  - Task scope (Phase 1 analysis summary + Phase 2 plan)
206
275
  - Full diff being reviewed
207
- - **Prior-art context (advisory)**for each raw finding, look up similar past findings via `triage-memory.mjs query` and inject up to 5 matches as additional context. Disabled when `prefs.global.priorArtEnrichment.enabled = false`.
276
+ - **Prior-art context (advisory)** - for each raw finding, look up similar past findings via `triage-memory.mjs query` and inject up to 5 matches as additional context. Disabled when `prefs.global.priorArtEnrichment.enabled = false`.
208
277
 
209
278
  ```bash
210
279
  PRIOR_ART="["
@@ -219,7 +288,17 @@ done
219
288
  PRIOR_ART="${PRIOR_ART%,}]"
220
289
  ```
221
290
 
222
- The triage prompt MUST include a hedge: *"prior-art entries are context, not commands; current scope decidesa finding rejected last quarter may be valid this time."* Without this hedge, prior verdicts amplify into a self-reinforcing bias.
291
+ The triage prompt MUST include a hedge: *"prior-art entries are context, not commands; current scope decides - a finding rejected last quarter may be valid this time."* Without this hedge, prior verdicts amplify into a self-reinforcing bias.
292
+
293
+ **Injection cap (token economy).** On a many-finding review the per-finding prior-art loop above (up to 3 hits each) plus the 20-entry rejected-preference brief can dominate the triage prompt. Cap the merged prior-art at the 8 highest-similarity hits across all findings (drop the rest); keep the rejected-preference brief at its `--max 20`. Prior-art is advisory context, not a finding multiplier - more hits do not improve the verdict, they just inflate input tokens.
294
+
295
+ **Rejected-preference brief (on by default via `prefs.global.learningsLedger.injectIntoTriage`).** Inject the durable rejected-preference list so triage does not re-accept a suggestion the team already rejected on this repo:
296
+
297
+ ```bash
298
+ node pipeline/scripts/learnings-ledger.mjs brief --max 20 2>/dev/null
299
+ ```
300
+
301
+ Exit 2 (empty ledger) skips silently. The `## Rejected review preferences` section names patterns the team chose not to act on; triage should lean toward `rejected` for a finding that restates one - but the same hedge applies (context, not command; a genuinely new instance can still be accepted).
223
302
 
224
303
  **Triage prompt skeleton:**
225
304
 
@@ -232,7 +311,7 @@ For each finding, decide:
232
311
  - DEFERRED: real issue but out of current task scope → log for later, do not block
233
312
  - REJECTED: false positive, duplicate, style-only nitpick, or already correct
234
313
 
235
- #### Output contracttriage step
314
+ #### Output contract - triage step
236
315
 
237
316
  Step 3 produces a single triage-output object conforming to `pipeline/schemas/triage-output.schema.json` and persists it to `state.reviewIterations[<iteration>].triage`. This is the **only** Phase 4 artifact Phase 6 reads. Phase 6 commits MUST cite only `accepted` findings that were resolved; `deferred` items get linked in the PR description as follow-up work; `rejected` items never appear in any user-facing output.
238
317
 
@@ -241,20 +320,28 @@ Return ONLY valid JSON conforming to pipeline/schemas/triage-output.schema.json:
241
320
  "accepted": [{ "severity": "blocking|important|suggestion", "file": "...", "line": N, "issue": "...", "fix": "...", "reviewer": "opus|sonnet" }],
242
321
  "deferred": [{ "finding": {...}, "reason": "..." }],
243
322
  "rejected": [{ "finding": {...}, "reason": "..." }],
244
- "approved": true|false // true if no accepted blocking items remain
323
+ "approved": true|false, // true if no accepted blocking items remain
324
+ "consensus": { "reviewerCount": N, "verdict": "unanimous-pass|unanimous-block|split|unverified", "disagreements": [{ "file": "...", "line": N, "issue": "...", "note": "Opus blocking, Sonnet approved" }] } // optional, see 3.6
245
325
  }
246
326
  ```
247
327
 
248
- ##### 3.2.1 Required: Run the runtime validator
328
+ ##### 3.2.1 Required: validator gate (deterministic)
329
+
330
+ Run on the persisted file immediately after the triage agent returns, before acting on the verdict; the validator's exit code decides, not the LLM turn:
249
331
 
250
332
  ```bash
251
- echo "$TRIAGE_JSON" | node pipeline/scripts/validate-triage.mjs -
333
+ TRIAGE_FILE="$WORKTREE/.pipeline/triage.json"
334
+ mkdir -p "$(dirname "$TRIAGE_FILE")"
335
+ printf '%s' "$TRIAGE_JSON" > "$TRIAGE_FILE"
336
+ node $HOME/.claude/scripts/validate-triage.mjs "$TRIAGE_FILE"
252
337
  ```
253
338
 
339
+ Progress line: ` → checking validator validate-triage`
340
+
254
341
  | Exit | Meaning | Action |
255
342
  | ----- | ---------------------------- | ------------------------------------------------- |
256
343
  | **0** | Valid and clean | Act on triage output as-is |
257
- | **1** | Invalid structure | Retry once; on second failure apply §3.3 fallback |
344
+ | **1** | Invalid structure | Gate protocol (strict, fails CLOSED): (a) emit the validator's stderr and `errors[]` JSON into the log verbatim; (b) attempt ONE self-correction rework - re-prompt triage with the errors quoted, overwrite `$TRIAGE_FILE`; (c) re-run the validator. Second failure -> HALT the phase with the recovery hint: `ERR: triage output failed validate-triage.mjs twice. Inspect $TRIAGE_FILE against pipeline/schemas/triage-output.schema.json, fix or regenerate it, then resume with /multi-agent:resume #N.` |
258
345
  | **2** | Over-rejection guard tripped | Pause for human confirm (autopilot: log + accept) |
259
346
  | **3** | Contradiction auto-corrected | Proceed with `result.corrected` |
260
347
 
@@ -262,7 +349,7 @@ Capture stdout into `state.reviewIterations[-1].validatorResult` for Phase 7 aud
262
349
 
263
350
  ##### 3.3 Edge case handling
264
351
 
265
- Failure fallback (invalid JSON, schema mismatch, timeout >120s): retry triage ONCE → on second failure treat ALL raw findings as `accepted`, log cause.
352
+ Failure fallback (timeout >120s, or agent crash before any JSON is produced): retry triage ONCE → on second failure treat ALL raw findings as `accepted`, log cause. Structural validator failures (exit 1) do NOT take this fallback - they follow the section 3.2.1 gate protocol (one self-correction rework, then halt with the recovery hint).
266
353
 
267
354
  | Scenario | Action |
268
355
  | ---------------------------------------------- | --------------------------------------------------------------------------- |
@@ -284,13 +371,31 @@ LOG_METRIC_FORWARD_TO_TRACKER=1 pipeline/scripts/log-metric.sh "$TASK_ID" 4 revi
284
371
  pipeline/scripts/log-metric.sh "$TASK_ID" 4 review.completed raw_count=$RAW accepted=$ACC deferred=$DEF rejected=$REJ approved=$APPROVED duration_ms=$DURATION
285
372
  ```
286
373
 
287
- `LOG_METRIC_FORWARD_TO_TRACKER=1` mirrors `tokens_in`/`tokens_out`/`model` into `phase-tracker.sh` (see `refs/progress-contract.md#token-telemetry-forwarding-v83`). On non-zero validator exit (1/2/3), also emit `triage.edge_case` with cause. Omit `tokens_in`/`tokens_out` if unavailable. Best-effortnever fails the pipeline.
374
+ `LOG_METRIC_FORWARD_TO_TRACKER=1` mirrors `tokens_in`/`tokens_out`/`model` into `phase-tracker.sh` (see `refs/progress-contract.md#token-telemetry-forwarding-v83`). On non-zero validator exit (1/2/3), also emit `triage.edge_case` with cause. Omit `tokens_in`/`tokens_out` if unavailable. Best-effort - never fails the pipeline.
288
375
 
289
376
  ##### 3.5 Optional cross-check (single-point-of-failure mitigation)
290
377
 
291
378
  Opt-in via `prefs.global.triageCrossCheck.enabled` (default `false`). Sampled runs dispatch a **Sonnet** triage agent as second opinion, validated via `validate-triage.mjs` (same fallback rules). Disagreements logged as `triage.cross_check_diff`; `blockOnDisagreement` pauses for user (autopilot: proceed with Opus verdict). Doubles triage cost on sampled runs.
292
379
 
293
- #### Step 4 — Consensus + Action (triage-driven)
380
+ ##### 3.6 Consensus surfacing (anti-correlation)
381
+
382
+ **Rationale:** Reviewer 1 (Opus) and Reviewer 3 (Sonnet) share a base model family, so unanimous agreement on a *judgment call* is not independent confirmation - same-family models drift the same way on ambiguous prompts. Treating "both approved" as proof produces false-consensus passes. Triage therefore records a `consensus` block (schema v3.1.0) and surfaces disagreement and unverified agreement to the user rather than burying it.
383
+
384
+ After the triage verdict is computed, populate `triage.consensus`:
385
+
386
+ 1. `reviewerCount` = number of reviewers dispatched this iteration (`2` on Claude Code, `3` on Copilot CLI).
387
+ 2. Classify the iteration `verdict`:
388
+ - `unanimous-block` -> all reviewers returned at least one overlapping `blocking` finding.
389
+ - `split` -> reviewers disagreed on existence or severity of one or more findings (the Step 2.5 disagreement definition). List each split in `disagreements[]` with a `note` naming who held which position (e.g. "Opus blocking, Sonnet approved").
390
+ - `unanimous-pass` -> all reviewers approved AND the diff is low-risk (no security/auth/concurrency surface per Phase 1 `touchedAreas`). Clear-cut; trust it.
391
+ - `unverified` -> all reviewers approved BUT the diff touches a judgment-heavy surface (security, auth, concurrency, money, data migration). Agreement here may be correlated; do NOT treat it as a confirmed pass. Surface it.
392
+ 3. `disagreements[]` is populated for `split` and is also used to carry `unverified` notes (e.g. "both approved a keychain change - agreement unverified, confirm manually").
393
+
394
+ **Surfacing (Step 4 + Phase 7):** When `verdict` is `split` or `unverified`, the disagreements are shown to the user at the Step 4 checkpoint (interactive modes) and always written to the Phase 7 report. Autopilot does not block on `unverified` (it logs `review.consensus=unverified` and proceeds), matching the maturity-check model - but the report records it so a human review can catch it. This is additive: omitting `consensus` is valid and means "not computed."
395
+
396
+ #### Step 4 - Consensus + Action (triage-driven)
397
+
398
+ If `triage.consensus.verdict` is `split` or `unverified`, surface `consensus.disagreements[]` to the user before acting: interactive modes show the split and ask whether to treat the unverified agreement as a pass (picker-contract: Trust / Re-review / Treat-as-blocking); autopilot logs `review.consensus=<verdict>` and proceeds on the triage verdict. Never silently average a split into a pass.
294
399
 
295
400
  Act **only on triage.accepted**:
296
401
 
@@ -300,15 +405,29 @@ Act **only on triage.accepted**:
300
405
  - **deferred** → append to Phase 7 report as "follow-up items" (do not block)
301
406
  - **rejected** → log reasons for audit; do not touch
302
407
 
303
- Log: "Phase 4: Review raw={N1+N2} accepted={Na} deferred={Nd} rejected={Nr} approved={bool}"
408
+ ##### Lesson memory loop (required, end of each fix/rework round)
409
+
410
+ At the end of every fix/rework round (each Phase 3 re-entry that resolved accepted findings, including the final one), append ONE one-line root-cause lesson per resolved blocking/important finding to the existing learnings ledger (`learnings-ledger.mjs` - the store Phase 1 and triage already replay; never invent a parallel store):
411
+
412
+ ```bash
413
+ node pipeline/scripts/learnings-ledger.mjs add --kind fact \
414
+ --statement "<one-line root cause: what class of mistake produced the finding and why (<=140 chars)>" \
415
+ --scope "<file-or-area glob from the finding>" --task "$TASK_ID"
416
+ ```
417
+
418
+ Statement shape: root cause, not symptom - "force-unwrapped optional in async callback path", not "fixed crash in LoginView". Dedup built in (exit 2 = already stored, skip). Lessons re-enter Phase 1 + triage via `learnings-ledger.mjs brief`.
419
+
420
+ Progress line: ` → writing lesson to learnings ledger ({N} entries)`
421
+
422
+ Log: "Phase 4: Review - raw={N1+N2} accepted={Na} deferred={Nd} rejected={Nr} approved={bool} consensus={verdict}"
304
423
 
305
424
  ---
306
425
 
307
426
  #### Multi-Repo Mode
308
427
 
309
- Active when `state.projects[].length > 1`. The 3-reviewer/triage architecture is unchangedwhat changes is the diff that reviewers see.
428
+ Active when `state.projects[].length > 1`. The 3-reviewer/triage architecture is unchanged - what changes is the diff that reviewers see.
310
429
 
311
- **Combined diff assembly**reviewers get **one combined diff** covering all repos, with explicit per-repo headers so they can flag cross-repo impact:
430
+ **Combined diff assembly** - reviewers get **one combined diff** covering all repos, with explicit per-repo headers so they can flag cross-repo impact:
312
431
 
313
432
  ```bash
314
433
  COMBINED_DIFF=$(mktemp)
@@ -346,15 +465,15 @@ For cross-repo findings, set `crossRepo: true` and list all impacted repos in `a
346
465
 
347
466
  `file` paths are repo-name-prefixed (`<repo-name>/<path-relative-to-repo>`) so triage and rework can resolve them back to the right worktree. The triage prompt receives `state.projects[]` so it can validate `affectedRepos` entries.
348
467
 
349
- **Triage cross-check**: Cross-repo findings are NEVER auto-rejectedthe cross-cutting nature is exactly what reviewers are best at catching. Triage may still defer (out-of-scope) but rejection requires explicit reasoning.
468
+ **Triage cross-check**: Cross-repo findings are NEVER auto-rejected - the cross-cutting nature is exactly what reviewers are best at catching. Triage may still defer (out-of-scope) but rejection requires explicit reasoning.
350
469
 
351
470
  **Token-budget guard** (per `token-budget.json` Phase 4 allowance): if `COMBINED_DIFF` exceeds 80% of the budget, truncate the largest repo's diff with a footer header:
352
471
  ```
353
- [truncatedfull diff in file://$WORKTREE/.review-diff.txt]
472
+ [truncated - full diff in file://$WORKTREE/.review-diff.txt]
354
473
  ```
355
474
  And log `review.diff_truncated repo=<name> bytes_dropped=<N>`. Triage receives the same truncated view + the truncation marker so it can flag suggestions to "review the full diff manually."
356
475
 
357
- **Deterministic gates per repo**: Step 1 gates (build/lint/test/secrets) run **per repo**failure in any one repo blocks AI review for the whole task. Build queue lock applies as in Phase 3 (multi-repo doesn't change Xcode serialization).
476
+ **Deterministic gates per repo**: Step 1 gates (build/lint/test/secrets) run **per repo** - failure in any one repo blocks AI review for the whole task. Build queue lock applies as in Phase 3 (multi-repo doesn't change Xcode serialization).
358
477
 
359
478
  **Telemetry**: Per-repo build/test gate timings + a single combined review/triage call set:
360
479
  ```bash
@@ -365,14 +484,14 @@ pipeline/scripts/log-metric.sh "$TASK_ID" 4 review.combined_diff repos=2 bytes=$
365
484
 
366
485
  ---
367
486
 
368
- ## Token telemetryinvoke after every LLM call
487
+ ## Token telemetry - invoke after every LLM call
369
488
 
370
489
  After every LLM call in this phase (analysis, plan generation, code/diff write, review verdict, triage), invoke:
371
490
 
372
491
  ```bash
373
- bash $HOME/.claude/scripts/phase-tracker.sh tokens 4 <input_count> <output_count>
492
+ bash $HOME/.claude/scripts/phase-tracker.sh tokens 4 <input_count> <output_count> [cached_count]
374
493
  ```
375
494
 
376
- The tracker accumulates the totals additively, so multiple calls in the same phase compound. The render output then shows live cost on the active phase tile (e.g. `Phase 4 Dev 2m 14s · 12.4k tok`). This satisfies the contract in `refs/tracker-contract.md` and the `smoke-tracker-tokens-invocation.sh` enforcement gate. Skipping this call is the #1 cause of "I can't see how much it cost" complaints.
495
+ The optional 4th `cached_count` is the prompt-cache-read token count when the host reports it (Anthropic `cache_read_input_tokens`); it defaults to 0 and is priced at the cheaper `cacheReadPerMtok` rate in the Phase 7 cost ledger. The tracker accumulates the totals additively, so multiple calls in the same phase compound. The render output then shows live cost on the active phase tile (e.g. `Phase 4 Dev 2m 14s · 12.4k tok`). This satisfies the contract in `refs/tracker-contract.md` and the `smoke-tracker-tokens-invocation.sh` enforcement gate. Skipping this call is the #1 cause of "I can't see how much it cost" complaints.
377
496
 
378
- If you do not have access to the model's reported token counts, pass best-effort estimates derived from input length / output lengthpartial cost data is better than none.
497
+ If you do not have access to the model's reported token counts, pass best-effort estimates derived from input length / output length - partial cost data is better than none.
@@ -1,11 +1,11 @@
1
1
  ### Phase 5: Test
2
2
 
3
- > **TLDR**Optional test gate. Offers to boot the simulator/emulator (UI Bug Hunter) or hand off to the user for manual QA. Skipped in `autopilot` and `--dev` modes. If issues found, loops back to Phase 3.
3
+ > **TLDR** - Optional test gate. Offers to boot the simulator/emulator (UI Bug Hunter) or hand off to the user for manual QA. Skipped in `autopilot` and `--dev` modes. If issues found, loops back to Phase 3.
4
4
 
5
5
  <!-- progress-contract: applied -->
6
- Progress emission per `refs/progress-contract.md`lines for local-test prompt render, user-answer capture, repo checkout (if selected).
6
+ Progress emission per `refs/progress-contract.md` - lines for local-test prompt render, user-answer capture, repo checkout (if selected).
7
7
 
8
- #### Step 0Test Gap Report (advisory)
8
+ #### Step 0 - Test Gap Report (advisory)
9
9
 
10
10
  Before the local-checkout prompt, run the static test-gap detector. Heuristic, deterministic, no LLM, sub-second. The report ends up in `agent-log.md` under "Test Scenarios" and surfaces public symbols added in this branch that have no paired test.
11
11
 
@@ -44,7 +44,7 @@ fi
44
44
  | Other public API additions (`public_func`, `open_fun`, `named_export`, `default_export`, ...) | suggestion |
45
45
  | `--severity-promote` | forces every gap to `important` (used when audit-mode is on) |
46
46
 
47
- **Gating** (opt-in): if `prefs.testGap.blockingThreshold` is set and `gapBySeverity.important + gapBySeverity.blocking` exceeds it, Phase 5 surfaces the report as a Phase 4 rework finding and loops back. **Default off**gaps render as advisory under "Test Gap Report" only.
47
+ **Gating** (opt-in): if `prefs.testGap.blockingThreshold` is set and `gapBySeverity.important + gapBySeverity.blocking` exceeds it, Phase 5 surfaces the report as a Phase 4 rework finding and loops back. **Default off** - gaps render as advisory under "Test Gap Report" only.
48
48
 
49
49
  **Telemetry**:
50
50
 
@@ -55,24 +55,39 @@ LOG_METRIC_FORWARD_TO_TRACKER=0 pipeline/scripts/log-metric.sh "$TASK_ID" 5 test
55
55
  gaps=$(jq '.totals.gapCount' <<< "$GAP_JSON")
56
56
  ```
57
57
 
58
- (No tracker forwardingthe scanner has no token cost.)
58
+ (No tracker forwarding - the scanner has no token cost.)
59
59
 
60
- 1. Ask the user in English (`promptLanguage` is locked to `en`). The prompt MUST make the local-checkout side effect explicit saying yes removes the worktree and checks the branch out into the main repo:
61
- - `Want to check out locally to test? (y/N)`
62
- `(yes → worktree is removed and branch is checked out locally for Xcode/manual test · no → stay in worktree and go to Phase 6)`
63
- - **No** → set `state.phases["5"].status = "skipped"` (so Phase 6 can offer the local-checkout prompt) → Phase 6
64
- - **Yes** → set `state.phases["5"].status = "in_progress"` → continue:
60
+ **Figma reference panel (when `state.evidence.figma[]` is non-empty).** Before the local-checkout prompt, print a single block listing each captured frame so the user has a side-by-side reference during manual test:
61
+
62
+ ```
63
+ Figma evidence (tier=<n>):
64
+ <fileKey>:<nodeId> <canonicalComponentName>
65
+ screenshot: <screenshotUrl or local path>
66
+ <fileKey>:<nodeId> <canonicalComponentName>
67
+ screenshot: <screenshotUrl or local path>
68
+ ```
69
+
70
+ Tier 1 / Tier 2 records print `screenshotUrl` from the captured evidence (Tier 2 URLs expire after 30 days, re-fetch on the spot if needed). Tier 3 records print the local path to the user-attached screenshot. The block is informational; it never blocks the prompt.
71
+
72
+ 1. Ask with a native `AskUserQuestion` picker (never a typed y/N prompt). The options MUST make the local-checkout side effect explicit - testing removes the worktree and checks the branch out into the main repo:
73
+ - `question`: "Check out locally to test now?" (rendered in `outputLanguage`)
74
+ - `header`: "Test" (English, <=12 chars)
75
+ - `options`:
76
+ - `{ label: "Test now", description: "Removes the worktree and checks the branch out into the main repo for Xcode / manual test" }`
77
+ - `{ label: "Skip", description: "Stay in the worktree and go to Phase 6" }`
78
+ - **Skip** → set `state.phases["5"].status = "skipped"` (so Phase 6 can offer the local-checkout prompt) → Phase 6
79
+ - **Test now** → set `state.phases["5"].status = "in_progress"` → continue:
65
80
  2. **Commit changes in worktree BEFORE removing** (WIP commit to preserve work):
66
81
  ```
67
82
  git -C {worktree-path} add -A
68
- git -C {worktree-path} commit -m "WIP: {jiraId}changes for user test"
83
+ git -C {worktree-path} commit -m "WIP: {jiraId} - changes for user test"
69
84
  ```
70
85
  3. Remove worktree, checkout branch in main repo:
71
86
  ```
72
87
  git worktree remove .worktrees/{jiraId} --force
73
88
  git checkout {branch-name}
74
89
  ```
75
- Branch now has the WIP commitall changes are preserved.
90
+ Branch now has the WIP commit - all changes are preserved.
76
91
  4. Show test instructions:
77
92
  ```
78
93
  Switched to branch: {branch-name}
@@ -82,11 +97,11 @@ LOG_METRIC_FORWARD_TO_TRACKER=0 pipeline/scripts/log-metric.sh "$TASK_ID" 5 test
82
97
  ```
83
98
  5. Wait for user response
84
99
  6. If fix needed:
85
- - Branch already has WIP commit (from step 2)changes are safe
100
+ - Branch already has WIP commit (from step 2) - changes are safe
86
101
  - Recreate worktree from branch: `git -C $PROJECT_ROOT worktree add {worktree-path} {branch}`
87
102
  - Re-set git identity: `git -C {worktree-path} config user.name/email` (from state)
88
103
  - Go back to Phase 3
89
- 7. Log: "Phase 5: Test{result}"
104
+ 7. Log: "Phase 5: Test - {result}"
90
105
 
91
106
  **CRITICAL**: Never remove a worktree with uncommitted changes. Always WIP commit first.
92
107
 
@@ -103,9 +118,9 @@ Before or during user testing, run device-level audits via Bash if user requests
103
118
  | Snapshot regression | Component / pixel-stable UI changes | `mcp__dev_toolkit__ios_visual_diff` (dev-toolkit-mcp ≥ 2.3.0) |
104
119
  | App Store screenshots | `taskType === screenshot` | `mcp__dev_toolkit__ios_status_bar({preset: "clean"})` before each capture |
105
120
 
106
- Results included in Phase 7 report. MCP tools preferred when availableconcise structured output, lower token cost.
121
+ Results included in Phase 7 report. MCP tools preferred when available - concise structured output, lower token cost.
107
122
 
108
- **Snapshot regression flow (optional):** when the task changes a stable component, capture a screenshot before the change (baseline) and after (current), then call `ios_visual_diff({baseline, current, max_diff_pct: 1.0})`. Threshold can be relaxed for animated / non-deterministic regionskeep `max_diff_pct ≤ 1.0` for static layouts.
123
+ **Snapshot regression flow (optional):** when the task changes a stable component, capture a screenshot before the change (baseline) and after (current), then call `ios_visual_diff({baseline, current, max_diff_pct: 1.0})`. Threshold can be relaxed for animated / non-deterministic regions - keep `max_diff_pct ≤ 1.0` for static layouts.
109
124
 
110
125
  #### Security Audit (store-readiness)
111
126
 
@@ -115,9 +130,9 @@ When the task touches authentication, keychain, network, or is scheduled for an
115
130
  Agent(subagent_type: "security-auditor", prompt: "<diff + context>")
116
131
  ```
117
132
 
118
- Returns severity-tagged findings (Critical / High / Medium). Critical items block Phase 6 just like Phase 4 blockers; High items are logged and surfaced in Phase 7 report. Skipped by defaultopt-in for release branches or on explicit `/multi-agent "<task>" --audit` flag.
133
+ Returns severity-tagged findings (Critical / High / Medium). Critical items block Phase 6 just like Phase 4 blockers; High items are logged and surfaced in Phase 7 report. Skipped by default - opt-in for release branches or on explicit `/multi-agent "<task>" --audit` flag.
119
134
 
120
- #### Telemetrytoken forwarding
135
+ #### Telemetry - token forwarding
121
136
 
122
137
  When the security-auditor or any other Phase 5 sub-agent runs, forward its token totals so Phase 7's Cost Breakdown captures Phase 5:
123
138