@mmerterden/multi-agent-pipeline 8.6.1 → 10.0.6

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 (928) hide show
  1. package/CHANGELOG.md +544 -2484
  2. package/README.md +117 -138
  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 +5 -5
  21. package/pipeline/agents/backend-architect.md +4 -4
  22. package/pipeline/agents/code-reviewer.md +10 -10
  23. package/pipeline/agents/dev-critic.md +17 -17
  24. package/pipeline/agents/explorer.md +3 -3
  25. package/pipeline/agents/ios-architect.md +4 -4
  26. package/pipeline/agents/security-auditor.md +12 -12
  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 +13 -9
  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 +23 -23
  42. package/pipeline/commands/multi-agent/dev-local-autopilot.md +23 -23
  43. package/pipeline/commands/multi-agent/dev-local.md +25 -22
  44. package/pipeline/commands/multi-agent/dev.md +49 -49
  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 +75 -66
  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 +15 -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 +35 -33
  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 +73 -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 +11 -11
  87. package/pipeline/commands/multi-agent/refs/phases/phase-0-init.md +93 -57
  88. package/pipeline/commands/multi-agent/refs/phases/phase-1-analysis.md +59 -28
  89. package/pipeline/commands/multi-agent/refs/phases/phase-2-planning.md +115 -63
  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 +160 -63
  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 +9 -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 +66 -60
  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 +3 -3
  185. package/pipeline/lib/fetch-crashlytics.sh +5 -5
  186. package/pipeline/lib/fetch-fortify.sh +5 -21
  187. package/pipeline/lib/fetch-swagger.sh +5 -5
  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 +21 -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 +55 -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 +3 -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 +97 -13
  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 +23 -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 +90 -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 +80 -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 +7 -4
  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-test-gap.mjs +4 -4
  395. package/pipeline/scripts/validate-triage.mjs +68 -9
  396. package/pipeline/scripts/verify-skills.sh +7 -7
  397. package/pipeline/scripts/write-state.mjs +49 -11
  398. package/pipeline/skills/.skill-manifest.json +245 -149
  399. package/pipeline/skills/.skills-index.json +236 -47
  400. package/pipeline/skills/figma-android/README.md +5 -5
  401. package/pipeline/skills/figma-android/figma-component-code-connect/SKILL.md +3 -3
  402. package/pipeline/skills/figma-android/figma-component-implement/SKILL.md +8 -8
  403. package/pipeline/skills/figma-android/figma-component-test/SKILL.md +4 -4
  404. package/pipeline/skills/figma-android/figma-component-wiki/SKILL.md +5 -5
  405. package/pipeline/skills/figma-android/figma-to-component/SKILL.md +14 -14
  406. package/pipeline/skills/figma-common/README.md +29 -29
  407. package/pipeline/skills/figma-common/figma-cli-iterate/SKILL.md +20 -15
  408. package/pipeline/skills/figma-common/figma-cli-iterate-mend/SKILL.md +35 -30
  409. package/pipeline/skills/figma-common/figma-cli-lean-iterate/SKILL.md +35 -30
  410. package/pipeline/skills/figma-common/figma-cli-skip/SKILL.md +20 -20
  411. package/pipeline/skills/figma-common/figma-commit/COMMON_REBASE.md +32 -32
  412. package/pipeline/skills/figma-common/figma-commit/REVIEW.md +9 -9
  413. package/pipeline/skills/figma-common/figma-commit/SKILL.md +25 -20
  414. package/pipeline/skills/figma-common/figma-component-confluence-sync/SKILL.md +11 -6
  415. package/pipeline/skills/figma-common/figma-component-start/SKILL.md +30 -25
  416. package/pipeline/skills/figma-common/figma-component-status-update/SKILL.md +9 -4
  417. package/pipeline/skills/figma-common/figma-fix/SKILL.md +27 -22
  418. package/pipeline/skills/figma-common/figma-form-integration/SKILL.md +38 -38
  419. package/pipeline/skills/figma-common/figma-issue/SKILL.md +39 -34
  420. package/pipeline/skills/figma-common/figma-iterate/SKILL.md +20 -15
  421. package/pipeline/skills/figma-common/figma-iteration-commit/SKILL.md +44 -39
  422. package/pipeline/skills/figma-common/figma-mend/SKILL.md +6 -6
  423. package/pipeline/skills/figma-common/figma-price-integration/SKILL.md +30 -30
  424. package/pipeline/skills/figma-common/figma-remote-mcp-auth/SKILL.md +1 -1
  425. package/pipeline/skills/figma-common/figma-review/SKILL.md +31 -26
  426. package/pipeline/skills/figma-common/figma-setup/SKILL.md +11 -11
  427. package/pipeline/skills/figma-common/figma-setup/scripts/fetch-mcp-token.py +5 -5
  428. package/pipeline/skills/figma-common/figma-skip/SKILL.md +6 -6
  429. package/pipeline/skills/figma-common/figma-ui-patterns/SKILL.md +12 -12
  430. package/pipeline/skills/figma-common/figma-utility/SKILL.md +4 -4
  431. package/pipeline/skills/figma-common/figma-utility/scripts/figma-utility.py +1 -1
  432. package/pipeline/skills/figma-common/figma-validate/SKILL.md +48 -48
  433. package/pipeline/skills/figma-common/performance-iteration-commit-all/SKILL.md +42 -37
  434. package/pipeline/skills/figma-common/performance-review-next/SKILL.md +23 -18
  435. package/pipeline/skills/figma-common/performance-start/SKILL.md +52 -47
  436. package/pipeline/skills/figma-common/performance-swiftui/SKILL.md +68 -68
  437. package/pipeline/skills/figma-common/performance-tour/SKILL.md +42 -37
  438. package/pipeline/skills/figma-ios/REVIEW_CHECKLIST.md +16 -16
  439. package/pipeline/skills/figma-ios/figma-component-code-connect/SKILL.md +15 -15
  440. package/pipeline/skills/figma-ios/figma-component-implement/SKILL.md +9 -9
  441. package/pipeline/skills/figma-ios/figma-component-test/SKILL.md +15 -15
  442. package/pipeline/skills/figma-ios/figma-component-wiki/SKILL.md +18 -18
  443. package/pipeline/skills/figma-ios/figma-to-component/SKILL.md +38 -38
  444. package/pipeline/skills/figma-ios/figma-to-component/halt-return-protocol.md +2 -2
  445. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-0-init.md +12 -12
  446. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-1-gathering.md +5 -5
  447. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-1.5-existing-discovery.md +19 -19
  448. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2-orchestrator.md +25 -25
  449. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2a-testing-identifiers.md +7 -7
  450. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2b-localization.md +6 -6
  451. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2c-accessibility.md +38 -38
  452. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2d-analytics.md +3 -3
  453. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3-orchestrator.md +29 -29
  454. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3a-location.md +6 -6
  455. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3b-tokens.md +3 -3
  456. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3c-nested.md +12 -12
  457. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3d-patterns.md +57 -57
  458. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3e-assets.md +5 -5
  459. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3f-utilities.md +6 -6
  460. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3g-property-coverage.md +10 -10
  461. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3h-variant-config.md +16 -16
  462. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4-orchestrator.md +23 -23
  463. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4a-configuration.md +26 -26
  464. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4b-view.md +43 -43
  465. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4c-documentation.md +17 -17
  466. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4d-preview.md +19 -19
  467. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4e-modifiers.md +15 -15
  468. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5-orchestrator.md +39 -39
  469. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5a-viewinspector.md +7 -7
  470. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5b-snapshot.md +29 -29
  471. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5c-unit.md +9 -9
  472. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-6-code-connect.md +31 -31
  473. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-7-wiki.md +5 -5
  474. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-7a-confluence-generate.md +18 -18
  475. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-7a-wiki-generate.md +16 -16
  476. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-8-cleanup.md +2 -2
  477. package/pipeline/skills/figma-ios/figma-to-component/reference/accessibility.md +1 -1
  478. package/pipeline/skills/figma-ios/figma-to-component/reference/code-connect.md +49 -49
  479. package/pipeline/skills/figma-ios/figma-to-component/reference/figma-to-swiftui-effects.md +8 -8
  480. package/pipeline/skills/figma-ios/figma-to-component/reference/halt-return-protocol.md +2 -2
  481. package/pipeline/skills/figma-ios/figma-to-component/reference/macros.md +9 -9
  482. package/pipeline/skills/figma-ios/figma-to-component/reference/missing-tokens.md +4 -4
  483. package/pipeline/skills/figma-ios/figma-to-component/reference/orchestrator-discipline.md +10 -10
  484. package/pipeline/skills/figma-ios/figma-to-component/reference/remote-mcp-script.md +5 -5
  485. package/pipeline/skills/figma-ios/figma-to-component/reference/rest-api-script.md +11 -11
  486. package/pipeline/skills/figma-ios/figma-to-component/reference/scripts-inventory.md +14 -14
  487. package/pipeline/skills/figma-ios/figma-to-component/reference/snapshot-testing.md +2 -2
  488. package/pipeline/skills/figma-ios/figma-to-component/reference/subcomponent-graph.md +4 -4
  489. package/pipeline/skills/figma-ios/figma-to-component/reference/testing-identifiers-naming.md +6 -6
  490. package/pipeline/skills/figma-ios/figma-to-component/reference/tools.md +9 -9
  491. package/pipeline/skills/figma-ios/figma-to-component/reference/viewinspector.md +1 -1
  492. package/pipeline/skills/figma-ios/figma-to-component/reference/wiki-to-confluence-mapping.md +1 -1
  493. package/pipeline/skills/figma-ios/figma-to-component/scripts/apply-author-login-map.py +5 -5
  494. package/pipeline/skills/figma-ios/figma-to-component/scripts/backfill-status.py +18 -18
  495. package/pipeline/skills/figma-ios/figma-to-component/scripts/build-author-registry.py +4 -4
  496. package/pipeline/skills/figma-ios/figma-to-component/scripts/bulk-sync-issues.py +4 -4
  497. package/pipeline/skills/figma-ios/figma-to-component/scripts/code-connect-data-gather.py +1 -1
  498. package/pipeline/skills/figma-ios/figma-to-component/scripts/code-connect-publish.sh +3 -3
  499. package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-component-status-upload.py +18 -18
  500. package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-component-status.py +4 -4
  501. package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-data-gather.py +5 -5
  502. package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-page-ids.example.json +9 -0
  503. package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-publish.py +3 -3
  504. package/pipeline/skills/figma-ios/figma-to-component/scripts/figma-subcomponent-graph.py +1 -1
  505. package/pipeline/skills/figma-ios/figma-to-component/scripts/figma-update.py +5 -5
  506. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/issue_sync_propagate.py +1 -1
  507. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/registry_writer.py +4 -4
  508. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_figma_update.py +1 -1
  509. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_registry_writer.py +3 -3
  510. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_skill_figma_issue.py +1 -1
  511. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_update_issue_gh.py +1 -1
  512. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase1-gather.py +12 -12
  513. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase2-finalize.py +3 -3
  514. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase3-scripts.py +26 -26
  515. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase4-finalize.py +4 -4
  516. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase5-finalize.py +4 -4
  517. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase6-finalize.py +5 -5
  518. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase7-finalize.py +4 -4
  519. package/pipeline/skills/figma-ios/figma-to-component/scripts/register-icons-codeconnect.py +4 -4
  520. package/pipeline/skills/figma-ios/figma-to-component/scripts/remote-mcp-fetch.py +5 -5
  521. package/pipeline/skills/figma-ios/figma-to-component/scripts/resolve-author-logins.py +2 -2
  522. package/pipeline/skills/figma-ios/figma-to-component/scripts/run-uicomponents-tests.sh +1 -1
  523. package/pipeline/skills/figma-ios/figma-to-component/scripts/sidebar-generator.py +5 -5
  524. package/pipeline/skills/figma-ios/figma-to-component/scripts/update-issue-from-registry.py +41 -41
  525. package/pipeline/skills/figma-ios/figma-to-component/scripts/validate-phase4.sh +8 -8
  526. package/pipeline/skills/figma-ios/figma-to-component/scripts/validate-phase6.sh +7 -7
  527. package/pipeline/skills/shared/README.md +62 -41
  528. package/pipeline/skills/shared/core/apple-archive-compliance/SKILL.md +39 -39
  529. package/pipeline/skills/shared/core/google-play-compliance/SKILL.md +44 -44
  530. package/pipeline/skills/shared/core/multi-agent/SKILL.md +182 -176
  531. package/pipeline/skills/shared/core/multi-agent-analysis/SKILL.md +55 -0
  532. package/pipeline/skills/shared/core/multi-agent-analysis-resolve/SKILL.md +48 -0
  533. package/pipeline/skills/shared/core/multi-agent-autopilot/SKILL.md +16 -16
  534. package/pipeline/skills/shared/core/multi-agent-build-optimize/SKILL.md +48 -0
  535. package/pipeline/skills/shared/core/multi-agent-channels/SKILL.md +40 -40
  536. package/pipeline/skills/shared/core/multi-agent-delete/SKILL.md +33 -30
  537. package/pipeline/skills/shared/core/multi-agent-dev/SKILL.md +26 -26
  538. package/pipeline/skills/shared/core/multi-agent-dev-autopilot/SKILL.md +22 -22
  539. package/pipeline/skills/shared/core/multi-agent-dev-local/SKILL.md +6 -6
  540. package/pipeline/skills/shared/core/multi-agent-dev-local-autopilot/SKILL.md +12 -12
  541. package/pipeline/skills/shared/core/multi-agent-diff-explain/SKILL.md +20 -20
  542. package/pipeline/skills/shared/core/multi-agent-garbage-collect/SKILL.md +61 -0
  543. package/pipeline/skills/shared/core/multi-agent-help/SKILL.md +22 -22
  544. package/pipeline/skills/shared/core/multi-agent-issue/SKILL.md +15 -15
  545. package/pipeline/skills/shared/core/multi-agent-jira/SKILL.md +12 -12
  546. package/pipeline/skills/shared/core/multi-agent-kill/SKILL.md +14 -14
  547. package/pipeline/skills/shared/core/multi-agent-language/SKILL.md +12 -12
  548. package/pipeline/skills/shared/core/multi-agent-local/SKILL.md +10 -10
  549. package/pipeline/skills/shared/core/multi-agent-local-autopilot/SKILL.md +18 -18
  550. package/pipeline/skills/shared/core/multi-agent-log/SKILL.md +9 -9
  551. package/pipeline/skills/shared/core/multi-agent-manual-test/SKILL.md +20 -20
  552. package/pipeline/skills/shared/core/multi-agent-prune-logs/SKILL.md +63 -0
  553. package/pipeline/skills/shared/core/multi-agent-purge/SKILL.md +16 -13
  554. package/pipeline/skills/shared/core/multi-agent-refactor/SKILL.md +110 -110
  555. package/pipeline/skills/shared/core/multi-agent-resume/SKILL.md +13 -13
  556. package/pipeline/skills/shared/core/multi-agent-review/SKILL.md +22 -22
  557. package/pipeline/skills/shared/core/multi-agent-scan/SKILL.md +18 -18
  558. package/pipeline/skills/shared/core/multi-agent-search/SKILL.md +13 -13
  559. package/pipeline/skills/shared/core/multi-agent-setup/SKILL.md +33 -30
  560. package/pipeline/skills/shared/core/multi-agent-stack/SKILL.md +14 -14
  561. package/pipeline/skills/shared/core/multi-agent-status/SKILL.md +9 -9
  562. package/pipeline/skills/shared/core/multi-agent-sync/SKILL.md +79 -79
  563. package/pipeline/skills/shared/core/multi-agent-test/SKILL.md +5 -5
  564. package/pipeline/skills/shared/core/multi-agent-update/SKILL.md +10 -10
  565. package/pipeline/skills/shared/external/NOTICE-swift-ios-skills.md +41 -0
  566. package/pipeline/skills/shared/external/NOTICE-xcode-build-skills.md +53 -0
  567. package/pipeline/skills/shared/external/agentflow/SKILL.md +9 -9
  568. package/pipeline/skills/shared/external/alarmkit/SKILL.md +113 -52
  569. package/pipeline/skills/shared/external/alarmkit/evals/evals.json +41 -0
  570. package/pipeline/skills/shared/external/alarmkit/references/alarmkit-patterns.md +23 -16
  571. package/pipeline/skills/shared/external/app-clips/SKILL.md +85 -354
  572. package/pipeline/skills/shared/external/app-clips/evals/evals.json +50 -0
  573. package/pipeline/skills/shared/external/app-clips/references/data-handoff-notifications-location.md +135 -0
  574. package/pipeline/skills/shared/external/app-clips/references/routing-and-experiences.md +125 -0
  575. package/pipeline/skills/shared/external/app-clips/references/size-capabilities-and-promotion.md +113 -0
  576. package/pipeline/skills/shared/external/app-intents/SKILL.md +152 -59
  577. package/pipeline/skills/shared/external/app-intents/evals/evals.json +47 -0
  578. package/pipeline/skills/shared/external/app-intents/references/appintents-advanced.md +161 -118
  579. package/pipeline/skills/shared/external/app-store-optimization/SKILL.md +289 -392
  580. package/pipeline/skills/shared/external/app-store-optimization/evals/evals.json +46 -0
  581. package/pipeline/skills/shared/external/app-store-optimization/references/keyword-research-methodology.md +174 -0
  582. package/pipeline/skills/shared/external/app-store-optimization/references/product-page-variants.md +191 -0
  583. package/pipeline/skills/shared/external/app-store-review/SKILL.md +57 -107
  584. package/pipeline/skills/shared/external/app-store-review/evals/evals.json +44 -0
  585. package/pipeline/skills/shared/external/app-store-review/references/privacy-manifest.md +35 -12
  586. package/pipeline/skills/shared/external/app-store-review/references/review-checklists.md +28 -26
  587. package/pipeline/skills/shared/external/apple-on-device-ai/SKILL.md +53 -62
  588. package/pipeline/skills/shared/external/apple-on-device-ai/evals/evals.json +47 -0
  589. package/pipeline/skills/shared/external/apple-on-device-ai/references/coreml-conversion.md +7 -1
  590. package/pipeline/skills/shared/external/apple-on-device-ai/references/coreml-optimization.md +4 -1
  591. package/pipeline/skills/shared/external/apple-on-device-ai/references/foundation-models.md +32 -12
  592. package/pipeline/skills/shared/external/apple-on-device-ai/references/mlx-swift.md +34 -30
  593. package/pipeline/skills/shared/external/authentication/SKILL.md +134 -138
  594. package/pipeline/skills/shared/external/authentication/evals/evals.json +48 -0
  595. package/pipeline/skills/shared/external/authentication/references/keychain-biometric.md +56 -29
  596. package/pipeline/skills/shared/external/authentication/references/passkeys.md +183 -0
  597. package/pipeline/skills/shared/external/avkit/SKILL.md +497 -0
  598. package/pipeline/skills/shared/external/avkit/evals/evals.json +55 -0
  599. package/pipeline/skills/shared/external/avkit/references/avkit-patterns.md +668 -0
  600. package/pipeline/skills/shared/external/background-processing/SKILL.md +29 -29
  601. package/pipeline/skills/shared/external/background-processing/evals/evals.json +44 -0
  602. package/pipeline/skills/shared/external/background-processing/references/background-task-patterns.md +44 -19
  603. package/pipeline/skills/shared/external/callkit-voip/SKILL.md +136 -99
  604. package/pipeline/skills/shared/external/callkit-voip/evals/evals.json +47 -0
  605. package/pipeline/skills/shared/external/callkit-voip/references/callkit-patterns.md +27 -8
  606. package/pipeline/skills/shared/external/ci-cd-pipelines/SKILL.md +7 -6
  607. package/pipeline/skills/shared/external/clean-code/SKILL.md +2 -2
  608. package/pipeline/skills/shared/external/cloudkit-sync/SKILL.md +63 -56
  609. package/pipeline/skills/shared/external/cloudkit-sync/evals/evals.json +47 -0
  610. package/pipeline/skills/shared/external/cloudkit-sync/references/cloudkit-patterns.md +7 -4
  611. package/pipeline/skills/shared/external/contacts-framework/SKILL.md +31 -11
  612. package/pipeline/skills/shared/external/contacts-framework/evals/evals.json +41 -0
  613. package/pipeline/skills/shared/external/contacts-framework/references/contacts-patterns.md +51 -51
  614. package/pipeline/skills/shared/external/core-bluetooth/SKILL.md +70 -65
  615. package/pipeline/skills/shared/external/core-bluetooth/evals/evals.json +44 -0
  616. package/pipeline/skills/shared/external/core-bluetooth/references/ble-patterns.md +25 -1
  617. package/pipeline/skills/shared/external/core-data/SKILL.md +496 -0
  618. package/pipeline/skills/shared/external/core-data/evals/evals.json +44 -0
  619. package/pipeline/skills/shared/external/core-motion/SKILL.md +47 -14
  620. package/pipeline/skills/shared/external/core-motion/evals/evals.json +49 -0
  621. package/pipeline/skills/shared/external/core-motion/references/motion-patterns.md +47 -16
  622. package/pipeline/skills/shared/external/core-nfc/SKILL.md +43 -54
  623. package/pipeline/skills/shared/external/core-nfc/evals/evals.json +49 -0
  624. package/pipeline/skills/shared/external/core-nfc/references/nfc-patterns.md +32 -2
  625. package/pipeline/skills/shared/external/coreml/SKILL.md +89 -48
  626. package/pipeline/skills/shared/external/coreml/evals/evals.json +44 -0
  627. package/pipeline/skills/shared/external/coreml/references/coreml-swift-integration.md +82 -37
  628. package/pipeline/skills/shared/external/cryptokit/SKILL.md +493 -0
  629. package/pipeline/skills/shared/external/cryptokit/evals/evals.json +44 -0
  630. package/pipeline/skills/shared/external/cryptokit/references/cryptokit-patterns.md +602 -0
  631. package/pipeline/skills/shared/external/css-modern/SKILL.md +3 -2
  632. package/pipeline/skills/shared/external/database-patterns/SKILL.md +6 -5
  633. package/pipeline/skills/shared/external/debugging-instruments/SKILL.md +77 -47
  634. package/pipeline/skills/shared/external/debugging-instruments/evals/evals.json +47 -0
  635. package/pipeline/skills/shared/external/debugging-instruments/references/instruments-guide.md +42 -34
  636. package/pipeline/skills/shared/external/debugging-instruments/references/lldb-patterns.md +2 -2
  637. package/pipeline/skills/shared/external/device-integrity/SKILL.md +136 -176
  638. package/pipeline/skills/shared/external/device-integrity/evals/evals.json +45 -0
  639. package/pipeline/skills/shared/external/device-integrity/references/device-integrity-patterns.md +240 -0
  640. package/pipeline/skills/shared/external/energykit/SKILL.md +73 -34
  641. package/pipeline/skills/shared/external/energykit/evals/evals.json +45 -0
  642. package/pipeline/skills/shared/external/energykit/references/energykit-patterns.md +80 -38
  643. package/pipeline/skills/shared/external/eventkit-calendar/SKILL.md +67 -53
  644. package/pipeline/skills/shared/external/eventkit-calendar/evals/evals.json +44 -0
  645. package/pipeline/skills/shared/external/eventkit-calendar/references/eventkit-patterns.md +53 -3
  646. package/pipeline/skills/shared/external/healthkit/SKILL.md +57 -124
  647. package/pipeline/skills/shared/external/healthkit/evals/evals.json +46 -0
  648. package/pipeline/skills/shared/external/healthkit/references/healthkit-patterns.md +82 -1
  649. package/pipeline/skills/shared/external/homekit-matter/SKILL.md +43 -41
  650. package/pipeline/skills/shared/external/homekit-matter/evals/evals.json +45 -0
  651. package/pipeline/skills/shared/external/homekit-matter/references/matter-commissioning.md +13 -8
  652. package/pipeline/skills/shared/external/html-semantic/SKILL.md +5 -4
  653. package/pipeline/skills/shared/external/humanizer/SKILL.md +4 -4
  654. package/pipeline/skills/shared/external/ios-accessibility/SKILL.md +174 -18
  655. package/pipeline/skills/shared/external/ios-accessibility/evals/evals.json +49 -0
  656. package/pipeline/skills/shared/external/ios-accessibility/references/a11y-patterns.md +262 -4
  657. package/pipeline/skills/shared/external/ios-accessibility/references/media-accessibility.md +117 -0
  658. package/pipeline/skills/shared/external/ios-accessibility/references/nutrition-labels.md +141 -0
  659. package/pipeline/skills/shared/external/ios-localization/SKILL.md +67 -14
  660. package/pipeline/skills/shared/external/ios-localization/evals/evals.json +49 -0
  661. package/pipeline/skills/shared/external/ios-localization/references/formatstyle-locale.md +20 -3
  662. package/pipeline/skills/shared/external/ios-localization/references/string-catalogs.md +131 -22
  663. package/pipeline/skills/shared/external/ios-networking/SKILL.md +69 -22
  664. package/pipeline/skills/shared/external/ios-networking/evals/evals.json +50 -0
  665. package/pipeline/skills/shared/external/ios-networking/references/background-websocket.md +28 -16
  666. package/pipeline/skills/shared/external/ios-networking/references/file-storage-patterns.md +354 -0
  667. package/pipeline/skills/shared/external/ios-networking/references/network-framework.md +69 -44
  668. package/pipeline/skills/shared/external/ios-networking/references/urlsession-patterns.md +35 -69
  669. package/pipeline/skills/shared/external/ios-security/references/file-storage-patterns.md +8 -8
  670. package/pipeline/skills/shared/external/ios-simulator/SKILL.md +485 -0
  671. package/pipeline/skills/shared/external/ios-simulator/evals/evals.json +44 -0
  672. package/pipeline/skills/shared/external/ios-simulator/references/simctl-commands.md +316 -0
  673. package/pipeline/skills/shared/external/live-activities/SKILL.md +120 -131
  674. package/pipeline/skills/shared/external/live-activities/evals/evals.json +44 -0
  675. package/pipeline/skills/shared/external/live-activities/references/{live-activity-patterns.md → activitykit-patterns.md} +148 -63
  676. package/pipeline/skills/shared/external/mapkit-location/SKILL.md +40 -21
  677. package/pipeline/skills/shared/external/mapkit-location/evals/evals.json +47 -0
  678. package/pipeline/skills/shared/external/mapkit-location/references/{corelocation-patterns.md → mapkit-corelocation-patterns.md} +88 -41
  679. package/pipeline/skills/shared/external/mapkit-location/references/mapkit-patterns.md +27 -24
  680. package/pipeline/skills/shared/external/metrickit-diagnostics/SKILL.md +129 -172
  681. package/pipeline/skills/shared/external/metrickit-diagnostics/evals/evals.json +46 -0
  682. package/pipeline/skills/shared/external/metrickit-diagnostics/references/metrickit-patterns.md +180 -0
  683. package/pipeline/skills/shared/external/musickit-audio/SKILL.md +45 -18
  684. package/pipeline/skills/shared/external/musickit-audio/evals/evals.json +44 -0
  685. package/pipeline/skills/shared/external/musickit-audio/references/musickit-patterns.md +26 -6
  686. package/pipeline/skills/shared/external/natural-language/SKILL.md +48 -18
  687. package/pipeline/skills/shared/external/natural-language/evals/evals.json +47 -0
  688. package/pipeline/skills/shared/external/natural-language/references/translation-patterns.md +20 -7
  689. package/pipeline/skills/shared/external/nextjs-app-router/SKILL.md +4 -3
  690. package/pipeline/skills/shared/external/passkit-wallet/SKILL.md +156 -66
  691. package/pipeline/skills/shared/external/passkit-wallet/evals/evals.json +51 -0
  692. package/pipeline/skills/shared/external/passkit-wallet/references/wallet-passes.md +69 -19
  693. package/pipeline/skills/shared/external/pdfkit/SKILL.md +499 -0
  694. package/pipeline/skills/shared/external/pdfkit/evals/evals.json +42 -0
  695. package/pipeline/skills/shared/external/pdfkit/references/pdfkit-patterns.md +844 -0
  696. package/pipeline/skills/shared/external/pencilkit-drawing/SKILL.md +122 -28
  697. package/pipeline/skills/shared/external/pencilkit-drawing/evals/evals.json +44 -0
  698. package/pipeline/skills/shared/external/pencilkit-drawing/references/pencilkit-patterns.md +49 -18
  699. package/pipeline/skills/shared/external/permissionkit/SKILL.md +100 -51
  700. package/pipeline/skills/shared/external/permissionkit/evals/evals.json +47 -0
  701. package/pipeline/skills/shared/external/permissionkit/references/permissionkit-patterns.md +48 -8
  702. package/pipeline/skills/shared/external/photos-camera-media/SKILL.md +13 -15
  703. package/pipeline/skills/shared/external/photos-camera-media/references/camera-capture.md +4 -4
  704. package/pipeline/skills/shared/external/photos-camera-media/references/image-loading-caching.md +2 -2
  705. package/pipeline/skills/shared/external/photos-camera-media/references/{photospicker-patterns.md → photokit-patterns.md} +3 -3
  706. package/pipeline/skills/shared/external/push-notifications/SKILL.md +45 -48
  707. package/pipeline/skills/shared/external/push-notifications/evals/evals.json +46 -0
  708. package/pipeline/skills/shared/external/push-notifications/references/notification-patterns.md +22 -33
  709. package/pipeline/skills/shared/external/push-notifications/references/rich-notifications.md +56 -37
  710. package/pipeline/skills/shared/external/python-patterns/SKILL.md +4 -3
  711. package/pipeline/skills/shared/external/react-best-practices/SKILL.md +1 -0
  712. package/pipeline/skills/shared/external/realitykit-ar/SKILL.md +74 -53
  713. package/pipeline/skills/shared/external/realitykit-ar/evals/evals.json +47 -0
  714. package/pipeline/skills/shared/external/realitykit-ar/references/realitykit-patterns.md +10 -10
  715. package/pipeline/skills/shared/external/rest-api-design/SKILL.md +21 -20
  716. package/pipeline/skills/shared/external/shareplay-activities/SKILL.md +81 -64
  717. package/pipeline/skills/shared/external/shareplay-activities/evals/evals.json +47 -0
  718. package/pipeline/skills/shared/external/shareplay-activities/references/shareplay-patterns.md +48 -9
  719. package/pipeline/skills/shared/external/speech-recognition/SKILL.md +118 -104
  720. package/pipeline/skills/shared/external/speech-recognition/evals/evals.json +49 -0
  721. package/pipeline/skills/shared/external/speech-recognition/references/speechanalyzer-patterns.md +171 -0
  722. package/pipeline/skills/shared/external/spm-build-analysis/SKILL.md +93 -0
  723. package/pipeline/skills/shared/external/spm-build-analysis/references/build-optimization-sources.md +155 -0
  724. package/pipeline/skills/shared/external/spm-build-analysis/references/recommendation-format.md +85 -0
  725. package/pipeline/skills/shared/external/spm-build-analysis/references/spm-analysis-checks.md +105 -0
  726. package/pipeline/skills/shared/external/spm-build-analysis/scripts/check_spm_pins.py +118 -0
  727. package/pipeline/skills/shared/external/storekit/SKILL.md +110 -44
  728. package/pipeline/skills/shared/external/storekit/evals/evals.json +44 -0
  729. package/pipeline/skills/shared/external/storekit/references/app-review-guidelines.md +94 -43
  730. package/pipeline/skills/shared/external/storekit/references/storekit-advanced.md +82 -33
  731. package/pipeline/skills/shared/external/swift-api-design-guidelines/SKILL.md +449 -0
  732. package/pipeline/skills/shared/external/swift-api-design-guidelines/evals/evals.json +50 -0
  733. package/pipeline/skills/shared/external/swift-api-design-guidelines/references/argument-labels-and-parameters.md +164 -0
  734. package/pipeline/skills/shared/external/swift-api-design-guidelines/references/conventions-and-special-rules.md +219 -0
  735. package/pipeline/skills/shared/external/swift-api-design-guidelines/references/naming-and-clarity.md +184 -0
  736. package/pipeline/skills/shared/external/swift-api-design-guidelines/references/side-effects-and-mutating-pairs.md +158 -0
  737. package/pipeline/skills/shared/external/swift-architecture/SKILL.md +499 -0
  738. package/pipeline/skills/shared/external/swift-architecture/evals/evals.json +45 -0
  739. package/pipeline/skills/shared/external/swift-charts/SKILL.md +52 -40
  740. package/pipeline/skills/shared/external/swift-charts/evals/evals.json +47 -0
  741. package/pipeline/skills/shared/external/swift-charts/references/charts-patterns.md +92 -11
  742. package/pipeline/skills/shared/external/swift-codable/SKILL.md +43 -16
  743. package/pipeline/skills/shared/external/swift-codable/evals/evals.json +43 -0
  744. package/pipeline/skills/shared/external/swift-concurrency/SKILL.md +50 -30
  745. package/pipeline/skills/shared/external/swift-concurrency/evals/evals.json +44 -0
  746. package/pipeline/skills/shared/external/swift-concurrency/references/approachable-concurrency.md +11 -4
  747. package/pipeline/skills/shared/external/swift-concurrency/references/async-algorithms.md +113 -0
  748. package/pipeline/skills/shared/external/swift-concurrency/references/bridging-interop.md +150 -0
  749. package/pipeline/skills/shared/external/swift-concurrency/references/{swift-6-2-concurrency.md → concurrency-patterns.md} +22 -11
  750. package/pipeline/skills/shared/external/swift-concurrency/references/diagnostics.md +52 -0
  751. package/pipeline/skills/shared/external/swift-concurrency/references/swiftui-concurrency.md +2 -2
  752. package/pipeline/skills/shared/external/swift-concurrency/references/synchronization-primitives.md +21 -15
  753. package/pipeline/skills/shared/external/swift-concurrency-expert/SKILL.md +3 -3
  754. package/pipeline/skills/shared/external/swift-concurrency-pro/SKILL.md +2 -2
  755. package/pipeline/skills/shared/external/swift-concurrency-pro/references/actors.md +3 -3
  756. package/pipeline/skills/shared/external/swift-concurrency-pro/references/async-streams.md +1 -1
  757. package/pipeline/skills/shared/external/swift-concurrency-pro/references/bridging.md +3 -3
  758. package/pipeline/skills/shared/external/swift-concurrency-pro/references/bug-patterns.md +3 -3
  759. package/pipeline/skills/shared/external/swift-concurrency-pro/references/cancellation.md +8 -8
  760. package/pipeline/skills/shared/external/swift-concurrency-pro/references/diagnostics.md +1 -1
  761. package/pipeline/skills/shared/external/swift-concurrency-pro/references/hotspots.md +2 -2
  762. package/pipeline/skills/shared/external/swift-concurrency-pro/references/interop.md +4 -4
  763. package/pipeline/skills/shared/external/swift-concurrency-pro/references/new-features.md +1 -1
  764. package/pipeline/skills/shared/external/swift-concurrency-pro/references/structured.md +2 -2
  765. package/pipeline/skills/shared/external/swift-concurrency-pro/references/testing.md +2 -2
  766. package/pipeline/skills/shared/external/swift-concurrency-pro/references/unstructured.md +3 -3
  767. package/pipeline/skills/shared/external/swift-formatstyle/SKILL.md +339 -0
  768. package/pipeline/skills/shared/external/swift-language/SKILL.md +33 -34
  769. package/pipeline/skills/shared/external/swift-language/evals/evals.json +47 -0
  770. package/pipeline/skills/shared/external/swift-language/references/swift-attributes-interop.md +97 -0
  771. package/pipeline/skills/shared/external/swift-language/references/swift-patterns-extended.md +19 -6
  772. package/pipeline/skills/shared/external/swift-security/SKILL.md +195 -0
  773. package/pipeline/skills/shared/external/swift-security/evals/evals.json +48 -0
  774. package/pipeline/skills/shared/external/swift-security/references/biometric-authentication.md +595 -0
  775. package/pipeline/skills/shared/external/swift-security/references/certificate-trust.md +611 -0
  776. package/pipeline/skills/shared/external/swift-security/references/common-anti-patterns.md +708 -0
  777. package/pipeline/skills/shared/external/swift-security/references/compliance-owasp-mapping.md +573 -0
  778. package/pipeline/skills/shared/external/swift-security/references/credential-storage-patterns.md +752 -0
  779. package/pipeline/skills/shared/external/swift-security/references/cryptokit-public-key.md +538 -0
  780. package/pipeline/skills/shared/external/swift-security/references/cryptokit-symmetric.md +530 -0
  781. package/pipeline/skills/shared/external/swift-security/references/keychain-access-control.md +543 -0
  782. package/pipeline/skills/shared/external/swift-security/references/keychain-fundamentals.md +620 -0
  783. package/pipeline/skills/shared/external/swift-security/references/keychain-item-classes.md +515 -0
  784. package/pipeline/skills/shared/external/swift-security/references/keychain-sharing.md +496 -0
  785. package/pipeline/skills/shared/external/swift-security/references/migration-legacy-stores.md +747 -0
  786. package/pipeline/skills/shared/external/swift-security/references/secure-enclave.md +566 -0
  787. package/pipeline/skills/shared/external/swift-security/references/testing-security-code.md +813 -0
  788. package/pipeline/skills/shared/external/swift-testing/SKILL.md +97 -297
  789. package/pipeline/skills/shared/external/swift-testing/evals/evals.json +44 -0
  790. package/pipeline/skills/shared/external/swift-testing/references/testing-advanced.md +123 -0
  791. package/pipeline/skills/shared/external/swift-testing/references/testing-patterns.md +162 -34
  792. package/pipeline/skills/shared/external/swift-testing-pro/SKILL.md +2 -2
  793. package/pipeline/skills/shared/external/swift-testing-pro/references/async-tests.md +3 -3
  794. package/pipeline/skills/shared/external/swift-testing-pro/references/core-rules.md +2 -2
  795. package/pipeline/skills/shared/external/swift-testing-pro/references/migrating-from-xctest.md +5 -5
  796. package/pipeline/skills/shared/external/swift-testing-pro/references/new-features.md +3 -3
  797. package/pipeline/skills/shared/external/swift-testing-pro/references/writing-better-tests.md +5 -5
  798. package/pipeline/skills/shared/external/swiftdata/SKILL.md +44 -23
  799. package/pipeline/skills/shared/external/swiftdata/evals/evals.json +47 -0
  800. package/pipeline/skills/shared/external/swiftdata/references/core-data-coexistence.md +3 -3
  801. package/pipeline/skills/shared/external/swiftdata/references/indexing.md +75 -0
  802. package/pipeline/skills/shared/external/swiftdata/references/predicate-pitfalls.md +54 -0
  803. package/pipeline/skills/shared/external/swiftdata/references/swiftdata-advanced.md +14 -10
  804. package/pipeline/skills/shared/external/swiftdata/references/swiftdata-queries.md +5 -5
  805. package/pipeline/skills/shared/external/swiftdata-pro/SKILL.md +2 -2
  806. package/pipeline/skills/shared/external/swiftdata-pro/references/class-inheritance.md +2 -2
  807. package/pipeline/skills/shared/external/swiftdata-pro/references/cloudkit.md +1 -1
  808. package/pipeline/skills/shared/external/swiftdata-pro/references/core-rules.md +6 -6
  809. package/pipeline/skills/shared/external/swiftlint/SKILL.md +337 -0
  810. package/pipeline/skills/shared/external/swiftlint/references/adoption-and-configuration.md +297 -0
  811. package/pipeline/skills/shared/external/swiftlint/references/custom-rules-and-analyze.md +170 -0
  812. package/pipeline/skills/shared/external/swiftlint/references/plugins-run-scripts-and-integrations.md +307 -0
  813. package/pipeline/skills/shared/external/swiftlint/references/rule-reference.md +35 -0
  814. package/pipeline/skills/shared/external/swiftlint/references/rules-suppressions-and-baselines.md +306 -0
  815. package/pipeline/skills/shared/external/swiftui-animation/SKILL.md +56 -65
  816. package/pipeline/skills/shared/external/swiftui-animation/references/animation-advanced.md +48 -44
  817. package/pipeline/skills/shared/external/swiftui-animation/references/core-animation-bridge.md +6 -6
  818. package/pipeline/skills/shared/external/swiftui-expert-skill/references/charts-accessibility.md +13 -13
  819. package/pipeline/skills/shared/external/swiftui-expert-skill/references/charts.md +3 -3
  820. package/pipeline/skills/shared/external/swiftui-expert-skill/references/image-optimization.md +1 -1
  821. package/pipeline/skills/shared/external/swiftui-expert-skill/references/latest-apis.md +4 -4
  822. package/pipeline/skills/shared/external/swiftui-expert-skill/references/layout-best-practices.md +2 -2
  823. package/pipeline/skills/shared/external/swiftui-expert-skill/references/list-patterns.md +1 -1
  824. package/pipeline/skills/shared/external/swiftui-expert-skill/references/macos-scenes.md +16 -16
  825. package/pipeline/skills/shared/external/swiftui-expert-skill/references/macos-views.md +11 -11
  826. package/pipeline/skills/shared/external/swiftui-expert-skill/references/macos-window-styling.md +7 -7
  827. package/pipeline/skills/shared/external/swiftui-expert-skill/references/state-management.md +5 -5
  828. package/pipeline/skills/shared/external/swiftui-expert-skill/references/view-structure.md +6 -6
  829. package/pipeline/skills/shared/external/swiftui-gestures/SKILL.md +38 -16
  830. package/pipeline/skills/shared/external/swiftui-gestures/references/gesture-patterns.md +13 -3
  831. package/pipeline/skills/shared/external/swiftui-layout-components/SKILL.md +32 -28
  832. package/pipeline/skills/shared/external/swiftui-layout-components/references/form.md +1 -1
  833. package/pipeline/skills/shared/external/swiftui-layout-components/references/grids.md +202 -41
  834. package/pipeline/skills/shared/external/swiftui-layout-components/references/list.md +16 -25
  835. package/pipeline/skills/shared/external/swiftui-layout-components/references/scrollview.md +71 -26
  836. package/pipeline/skills/shared/external/swiftui-liquid-glass/SKILL.md +284 -65
  837. package/pipeline/skills/shared/external/swiftui-liquid-glass/references/liquid-glass.md +387 -0
  838. package/pipeline/skills/shared/external/swiftui-navigation/SKILL.md +10 -10
  839. package/pipeline/skills/shared/external/swiftui-navigation/references/deeplinks.md +15 -3
  840. package/pipeline/skills/shared/external/swiftui-navigation/references/navigationstack.md +2 -2
  841. package/pipeline/skills/shared/external/swiftui-navigation/references/tabview.md +1 -1
  842. package/pipeline/skills/shared/external/swiftui-patterns/SKILL.md +51 -25
  843. package/pipeline/skills/shared/external/swiftui-patterns/references/architecture-patterns.md +78 -6
  844. package/pipeline/skills/shared/external/swiftui-patterns/references/deprecated-migration.md +161 -16
  845. package/pipeline/skills/shared/external/swiftui-patterns/references/design-polish.md +85 -27
  846. package/pipeline/skills/shared/external/swiftui-patterns/references/platform-and-sharing.md +37 -33
  847. package/pipeline/skills/shared/external/swiftui-performance/SKILL.md +39 -51
  848. package/pipeline/skills/shared/external/swiftui-performance/references/demystify-swiftui-performance-wwdc23.md +204 -30
  849. package/pipeline/skills/shared/external/swiftui-performance/references/optimizing-swiftui-performance-instruments.md +226 -21
  850. package/pipeline/skills/shared/external/swiftui-performance/references/understanding-hangs-in-your-app.md +220 -20
  851. package/pipeline/skills/shared/external/swiftui-performance/references/understanding-improving-swiftui-performance.md +159 -34
  852. package/pipeline/skills/shared/external/swiftui-performance/references/wwdc-session-sources.md +27 -0
  853. package/pipeline/skills/shared/external/swiftui-pro/SKILL.md +2 -2
  854. package/pipeline/skills/shared/external/swiftui-pro/references/accessibility.md +4 -4
  855. package/pipeline/skills/shared/external/swiftui-pro/references/api.md +1 -1
  856. package/pipeline/skills/shared/external/swiftui-pro/references/data.md +2 -2
  857. package/pipeline/skills/shared/external/swiftui-pro/references/design.md +4 -4
  858. package/pipeline/skills/shared/external/swiftui-pro/references/hygiene.md +2 -2
  859. package/pipeline/skills/shared/external/swiftui-pro/references/navigation.md +1 -1
  860. package/pipeline/skills/shared/external/swiftui-pro/references/performance.md +1 -1
  861. package/pipeline/skills/shared/external/swiftui-pro/references/swift.md +2 -2
  862. package/pipeline/skills/shared/external/swiftui-pro/references/views.md +2 -2
  863. package/pipeline/skills/shared/external/swiftui-ui-patterns/SKILL.md +1 -1
  864. package/pipeline/skills/shared/external/swiftui-uikit-interop/SKILL.md +12 -12
  865. package/pipeline/skills/shared/external/swiftui-uikit-interop/references/hosting-migration.md +3 -3
  866. package/pipeline/skills/shared/external/swiftui-uikit-interop/references/representable-recipes.md +1 -1
  867. package/pipeline/skills/shared/external/swiftui-webkit/SKILL.md +11 -11
  868. package/pipeline/skills/shared/external/swiftui-webkit/references/migration-and-fallbacks.md +124 -10
  869. package/pipeline/skills/shared/external/tailwind-css/SKILL.md +3 -2
  870. package/pipeline/skills/shared/external/testing-backend/SKILL.md +2 -1
  871. package/pipeline/skills/shared/external/tipkit/SKILL.md +3 -3
  872. package/pipeline/skills/shared/external/tipkit/references/tipkit-patterns.md +9 -9
  873. package/pipeline/skills/shared/external/typescript-patterns/SKILL.md +17 -16
  874. package/pipeline/skills/shared/external/vision-framework/SKILL.md +11 -11
  875. package/pipeline/skills/shared/external/vision-framework/references/vision-requests.md +1 -1
  876. package/pipeline/skills/shared/external/vision-framework/references/visionkit-scanner.md +5 -5
  877. package/pipeline/skills/shared/external/vue-composition/SKILL.md +7 -6
  878. package/pipeline/skills/shared/external/weatherkit/SKILL.md +3 -3
  879. package/pipeline/skills/shared/external/weatherkit/references/weatherkit-patterns.md +9 -9
  880. package/pipeline/skills/shared/external/web-accessibility/SKILL.md +1 -0
  881. package/pipeline/skills/shared/external/web-performance/SKILL.md +8 -7
  882. package/pipeline/skills/shared/external/web-testing/SKILL.md +7 -6
  883. package/pipeline/skills/shared/external/widgetkit/SKILL.md +23 -17
  884. package/pipeline/skills/shared/external/widgetkit/references/widgetkit-advanced.md +99 -0
  885. package/pipeline/skills/shared/external/xcode-build-benchmark/SKILL.md +89 -0
  886. package/pipeline/skills/shared/external/xcode-build-benchmark/references/benchmark-artifacts.md +94 -0
  887. package/pipeline/skills/shared/external/xcode-build-benchmark/references/benchmarking-workflow.md +67 -0
  888. package/pipeline/skills/shared/external/xcode-build-benchmark/schemas/build-benchmark.schema.json +230 -0
  889. package/pipeline/skills/shared/external/xcode-build-benchmark/scripts/benchmark_builds.py +308 -0
  890. package/pipeline/skills/shared/external/xcode-build-fixer/SKILL.md +219 -0
  891. package/pipeline/skills/shared/external/xcode-build-fixer/references/build-settings-best-practices.md +216 -0
  892. package/pipeline/skills/shared/external/xcode-build-fixer/references/fix-patterns.md +290 -0
  893. package/pipeline/skills/shared/external/xcode-build-fixer/references/recommendation-format.md +85 -0
  894. package/pipeline/skills/shared/external/xcode-build-fixer/scripts/benchmark_builds.py +308 -0
  895. package/pipeline/skills/shared/external/xcode-build-orchestrator/SKILL.md +157 -0
  896. package/pipeline/skills/shared/external/xcode-build-orchestrator/references/benchmark-artifacts.md +94 -0
  897. package/pipeline/skills/shared/external/xcode-build-orchestrator/references/build-settings-best-practices.md +216 -0
  898. package/pipeline/skills/shared/external/xcode-build-orchestrator/references/orchestration-report-template.md +143 -0
  899. package/pipeline/skills/shared/external/xcode-build-orchestrator/references/recommendation-format.md +85 -0
  900. package/pipeline/skills/shared/external/xcode-build-orchestrator/scripts/benchmark_builds.py +308 -0
  901. package/pipeline/skills/shared/external/xcode-build-orchestrator/scripts/diagnose_compilation.py +273 -0
  902. package/pipeline/skills/shared/external/xcode-build-orchestrator/scripts/generate_optimization_report.py +533 -0
  903. package/pipeline/skills/shared/external/xcode-compilation-analyzer/SKILL.md +90 -0
  904. package/pipeline/skills/shared/external/xcode-compilation-analyzer/references/build-optimization-sources.md +155 -0
  905. package/pipeline/skills/shared/external/xcode-compilation-analyzer/references/code-compilation-checks.md +106 -0
  906. package/pipeline/skills/shared/external/xcode-compilation-analyzer/references/recommendation-format.md +85 -0
  907. package/pipeline/skills/shared/external/xcode-compilation-analyzer/scripts/diagnose_compilation.py +273 -0
  908. package/pipeline/skills/shared/external/xcode-project-analyzer/SKILL.md +77 -0
  909. package/pipeline/skills/shared/external/xcode-project-analyzer/references/build-optimization-sources.md +155 -0
  910. package/pipeline/skills/shared/external/xcode-project-analyzer/references/build-settings-best-practices.md +216 -0
  911. package/pipeline/skills/shared/external/xcode-project-analyzer/references/project-audit-checks.md +101 -0
  912. package/pipeline/skills/shared/external/xcode-project-analyzer/references/recommendation-format.md +85 -0
  913. package/pipeline/skills/skills-index.md +213 -192
  914. package/docs/GENERICITY-REVIEW.md +0 -277
  915. package/docs/STABILITY-FIX-PLAN.md +0 -168
  916. package/pipeline/scripts/.last-figma-sync-plan.json +0 -23
  917. package/pipeline/scripts/README-figma-smokes.md +0 -34
  918. package/pipeline/scripts/figma-placeholder-map.json +0 -191
  919. package/pipeline/scripts/import-figma-skills.sh +0 -253
  920. package/pipeline/scripts/smoke-figma-config-schema.sh +0 -144
  921. package/pipeline/scripts/smoke-figma-skill-import.sh +0 -174
  922. package/pipeline/scripts/smoke-install-leak-gate.sh +0 -125
  923. package/pipeline/scripts/smoke-personal-data.sh +0 -82
  924. package/pipeline/scripts/sync-figma-source.sh +0 -228
  925. package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-page-ids.json +0 -94
  926. package/pipeline/skills/shared/external/app-store-review/references/code-signing.md +0 -259
  927. package/pipeline/skills/shared/external/app-store-review/references/rejection-patterns.md +0 -152
  928. package/pipeline/skills/shared/external/pencilkit-drawing/references/paperkit-integration.md +0 -376
@@ -0,0 +1,76 @@
1
+ #!/usr/bin/env node
2
+ // Structured runner for pipeline/scripts/smoke-*.sh.
3
+ //
4
+ // Replaces the bare `for f in smoke-*.sh; do bash "$f" || exit 1; done`
5
+ // loop with per-suite timeouts, timing, and a summary, so a hung smoke
6
+ // (network wait, interactive prompt) can never block `npm test` or CI
7
+ // indefinitely.
8
+ //
9
+ // Env:
10
+ // SMOKE_TIMEOUT_SECONDS per-suite timeout (default 180)
11
+ // SMOKE_NO_BAIL=1 run every suite and summarize instead of
12
+ // stopping at the first failure
13
+ // Args:
14
+ // optional substring filters: `node run-smokes.mjs adapters keychain`
15
+ // runs only suites whose filename contains one of the terms.
16
+
17
+ import { spawnSync } from "node:child_process";
18
+ import { readdirSync } from "node:fs";
19
+ import { dirname, join } from "node:path";
20
+ import { fileURLToPath } from "node:url";
21
+
22
+ const scriptsDir = dirname(fileURLToPath(import.meta.url));
23
+ const timeoutSec = Number(process.env.SMOKE_TIMEOUT_SECONDS || 180);
24
+ const bail = process.env.SMOKE_NO_BAIL !== "1";
25
+ const filters = process.argv.slice(2);
26
+
27
+ const suites = readdirSync(scriptsDir)
28
+ .filter((f) => f.startsWith("smoke-") && f.endsWith(".sh"))
29
+ .filter((f) => filters.length === 0 || filters.some((t) => f.includes(t)))
30
+ .sort();
31
+
32
+ if (suites.length === 0) {
33
+ console.error("run-smokes: no smoke suites matched");
34
+ process.exit(1);
35
+ }
36
+
37
+ const failures = [];
38
+ let ran = 0;
39
+ const startedAt = Date.now();
40
+
41
+ for (const suite of suites) {
42
+ ran++;
43
+ const t0 = Date.now();
44
+ const res = spawnSync("bash", [join(scriptsDir, suite)], {
45
+ encoding: "utf-8",
46
+ timeout: timeoutSec * 1000,
47
+ maxBuffer: 16 * 1024 * 1024,
48
+ });
49
+ const secs = ((Date.now() - t0) / 1000).toFixed(1);
50
+
51
+ const timedOut = res.error && res.error.code === "ETIMEDOUT";
52
+ const ok = !timedOut && res.status === 0;
53
+
54
+ if (ok) {
55
+ console.log(`ok ${suite} (${secs}s)`);
56
+ continue;
57
+ }
58
+
59
+ const reason = timedOut ? `timeout after ${timeoutSec}s` : `exit ${res.status}`;
60
+ console.error(`FAIL ${suite} (${reason}, ${secs}s)`);
61
+ if (res.stdout) console.error(res.stdout.split("\n").slice(-30).join("\n"));
62
+ if (res.stderr) console.error(res.stderr.split("\n").slice(-30).join("\n"));
63
+ failures.push(suite);
64
+ if (bail) break;
65
+ }
66
+
67
+ const totalSecs = ((Date.now() - startedAt) / 1000).toFixed(1);
68
+ const skipped = suites.length - ran;
69
+ console.log(
70
+ `run-smokes: ${ran - failures.length}/${suites.length} passed in ${totalSecs}s` +
71
+ (skipped > 0 ? ` (${skipped} not run after bail)` : ""),
72
+ );
73
+ if (failures.length > 0) {
74
+ console.error(`run-smokes: failed -> ${failures.join(", ")}`);
75
+ process.exit(1);
76
+ }
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env bash
2
- # scan-skills.shskill security scanner (v5.1.0)
2
+ # scan-skills.sh - skill security scanner (v5.1.0)
3
3
  #
4
4
  # Scans skill directories (pipeline/skills/ OR ~/.claude/skills/ OR ~/.copilot/skills/)
5
5
  # for known-bad patterns. Multi-tier severity:
@@ -51,7 +51,7 @@ if [ ! -d "$ROOT" ]; then
51
51
  exit 64
52
52
  fi
53
53
 
54
- # Severity ranklower = more severe. Used for threshold comparison.
54
+ # Severity rank - lower = more severe. Used for threshold comparison.
55
55
  sev_rank() {
56
56
  case "$1" in
57
57
  critical) echo 0 ;;
@@ -63,7 +63,7 @@ sev_rank() {
63
63
  }
64
64
  THRESHOLD_RANK=$(sev_rank "$THRESHOLD")
65
65
 
66
- # Network endpoint allow-listdomains we expect to see in skills.
66
+ # Network endpoint allow-list - domains we expect to see in skills.
67
67
  # Anything else flagged as medium (unknown endpoint).
68
68
  ALLOW_DOMAINS='(github\.com|raw\.githubusercontent\.com|api\.github\.com|codeload\.github\.com|githubusercontent\.com|anthropic\.com|claude\.ai|api\.anthropic\.com|api\.figma\.com|figma\.com|jira\.example\.com|confluence\.example\.com|bitbucket\.example\.com|example\.com|mmerterden\.vercel\.app|localhost|127\.0\.0\.1|npmjs\.org|npmjs\.com|registry\.npmjs\.org|vercel\.com|api\.vercel\.com|pkg\.github\.com|googleapis\.com|firebase\.google\.com|apple\.com|developer\.apple\.com|google\.com|atlassian\.com|atlassian\.net|openai\.com|api\.openai\.com)'
69
69
 
@@ -121,9 +121,9 @@ scan_critical() {
121
121
  add_finding critical "$f" "$ln" "eval-of-network" "eval of network-fetched content"
122
122
  done < <(grep -nE 'eval[[:space:]]+(\$\([[:space:]]*(curl|wget|fetch)|`[[:space:]]*(curl|wget|fetch))' "$f" 2>/dev/null)
123
123
 
124
- # Unicode bidi override charactersinvisible injection attack
124
+ # Unicode bidi override characters - invisible injection attack
125
125
  if LC_ALL=C grep -l $'\xe2\x80\xad\|\xe2\x80\xae\|\xe2\x81\xa6\|\xe2\x81\xa7\|\xe2\x81\xa8\|\xe2\x81\xa9' "$f" 2>/dev/null >/dev/null; then
126
- add_finding critical "$f" "0" "unicode-bidi" "bidirectional control chars (U+202D-202E, U+2066-2069)trojan source risk"
126
+ add_finding critical "$f" "0" "unicode-bidi" "bidirectional control chars (U+202D-202E, U+2066-2069) - trojan source risk"
127
127
  fi
128
128
  }
129
129
 
@@ -140,7 +140,7 @@ scan_high() {
140
140
  done < <(grep -nE '\b(eval|new[[:space:]]+Function|Function)\s*\(' "$f" 2>/dev/null)
141
141
  fi
142
142
 
143
- # Python: exec(, eval( on non-literalexclude re.compile (regex) and subprocess
143
+ # Python: exec(, eval( on non-literal - exclude re.compile (regex) and subprocess
144
144
  if [ "$ext" = "py" ]; then
145
145
  while IFS= read -r hit; do
146
146
  [ -z "$hit" ] && continue
@@ -152,7 +152,7 @@ scan_high() {
152
152
  done < <(grep -nE '(^|[^a-zA-Z0-9_.])(exec|eval)[[:space:]]*\(' "$f" 2>/dev/null)
153
153
  fi
154
154
 
155
- # Hardcoded API keysAWS, OpenAI, GitHub, generic sk-* with length
155
+ # Hardcoded API keys - AWS, OpenAI, GitHub, generic sk-* with length
156
156
  # Skip lines in FORBIDDEN/NEVER/example blocks (false positives from docs)
157
157
  while IFS= read -r hit; do
158
158
  [ -z "$hit" ] && continue
@@ -187,8 +187,8 @@ scan_high() {
187
187
  scan_medium() {
188
188
  local f="$1"
189
189
 
190
- # Long base64 blobsobfuscation indicator.
191
- # Skip .md files (documentation often shows example b64)only scan executable content types.
190
+ # Long base64 blobs - obfuscation indicator.
191
+ # Skip .md files (documentation often shows example b64) - only scan executable content types.
192
192
  case "$f" in
193
193
  *.md) ;;
194
194
  *)
@@ -204,7 +204,7 @@ scan_medium() {
204
204
  scan_info() {
205
205
  local f="$1"
206
206
 
207
- # Unknown network endpointsLOW severity (informational). URLs in skills
207
+ # Unknown network endpoints - LOW severity (informational). URLs in skills
208
208
  # are usually doc references, not exfil channels. Only the critical
209
209
  # shell-pipe-exec patterns detect active network abuse.
210
210
  while IFS= read -r hit; do
@@ -314,7 +314,7 @@ else
314
314
  fi
315
315
 
316
316
  if [ "$STRICT" -eq 0 ]; then
317
- printf '\n %s(warn-only modeexit 0 regardless of findings; use --strict to halt on findings)%s\n' "$C_DIM" "$C_RST"
317
+ printf '\n %s(warn-only mode - exit 0 regardless of findings; use --strict to halt on findings)%s\n' "$C_DIM" "$C_RST"
318
318
  fi
319
319
  fi
320
320
 
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env bash
2
- # search-logs.shcross-project search across multi-agent agent-log.md files.
2
+ # search-logs.sh - cross-project search across multi-agent agent-log.md files.
3
3
  #
4
4
  # Greps ~/.claude/logs/multi-agent/**/agent-log.md (or --root PATH) for a query,
5
5
  # groups results by task, and ranks by (match_count × recency_weight).
@@ -12,7 +12,7 @@
12
12
  # Flags:
13
13
  # --root PATH Override log root. Default: $HOME/.claude/logs/multi-agent
14
14
  # --project NAME Filter to tasks under this project dir
15
- # --since SPEC 7d | 30d | 2026-04-01drop tasks older than this
15
+ # --since SPEC 7d | 30d | 2026-04-01 - drop tasks older than this
16
16
  # --phase N Only match inside "## Phase N" sections
17
17
  # --semantic v8.3+: query the per-repo triage corpus instead of
18
18
  # agent-log.md grep. Returns past triage findings
@@ -73,7 +73,7 @@ if [ -z "$QUERY" ]; then
73
73
  exit 64
74
74
  fi
75
75
 
76
- # v8.3+semantic mode: dispatch to triage-memory.mjs corpus query and exit.
76
+ # v8.3+ - semantic mode: dispatch to triage-memory.mjs corpus query and exit.
77
77
  # Honors --project as the repo-slug, --json (default off → human table),
78
78
  # --limit (passed as --top N). --since/--phase have no meaning here.
79
79
  if [ "$SEMANTIC" -eq 1 ]; then
@@ -147,7 +147,7 @@ while IFS= read -r f; do
147
147
  fi
148
148
  # Since filter: drop files with mtime older than since_epoch
149
149
  if [ "$since_epoch" -gt 0 ]; then
150
- m=$(stat -f %m "$f" 2>/dev/null || stat -c %Y "$f" 2>/dev/null || echo 0)
150
+ m=$(stat -c %Y "$f" 2>/dev/null || stat -f %m "$f" 2>/dev/null || echo 0)
151
151
  [ "$m" -lt "$since_epoch" ] && continue
152
152
  fi
153
153
  echo "$f" >> "$FILTERED"
@@ -200,7 +200,7 @@ while IFS= read -r f; do
200
200
  title=$(head -1 "$f" | sed 's/^# *//' | cut -c1-80)
201
201
  branch=$(grep -m1 -iE '^\*\*Branch\*\*' "$f" 2>/dev/null | sed -E 's/.*Branch\*\*: *([^ |]+).*/\1/' | head -c60)
202
202
  [ -z "$branch" ] && branch="(unknown)"
203
- mtime=$(stat -f %m "$f" 2>/dev/null || stat -c %Y "$f" 2>/dev/null || echo "$NOW")
203
+ mtime=$(stat -c %Y "$f" 2>/dev/null || stat -f %m "$f" 2>/dev/null || echo "$NOW")
204
204
 
205
205
  # Recency weight: 1.0 for last 7d, 0.5 for 7-30d, 0.2 older
206
206
  age_days=$(( (NOW - mtime) / 86400 ))
@@ -241,7 +241,7 @@ if [ "$JSON" -eq 1 ]; then
241
241
  i=$((i+1))
242
242
  jt=$(printf '%s' "$title" | sed 's/\\/\\\\/g; s/"/\\"/g')
243
243
  js=$(printf '%s' "$snippet" | sed 's/\\/\\\\/g; s/"/\\"/g')
244
- date=$(date -r "$mtime" "+%Y-%m-%d" 2>/dev/null || echo "")
244
+ date=$(date -r "$mtime" "+%Y-%m-%d" 2>/dev/null || date -d "@$mtime" "+%Y-%m-%d" 2>/dev/null || echo "")
245
245
  printf ' { "task_id": "%s", "project": "%s", "branch": "%s", "date": "%s", "matches": %d, "score": %d, "title": "%s", "snippet": "%s" }' \
246
246
  "$task_id" "$project" "$branch" "$date" "$count" "$score" "$jt" "$js"
247
247
  [ "$i" -lt "$TOTAL_TASKS" ] && printf ','
@@ -251,7 +251,7 @@ if [ "$JSON" -eq 1 ]; then
251
251
  elif [ "$TSV" -eq 1 ]; then
252
252
  printf 'score\ttask_id\tproject\tbranch\tdate\tmatches\ttitle\tsnippet\n'
253
253
  while IFS=$'\t' read -r score task_id project branch mtime count title snippet; do
254
- date=$(date -r "$mtime" "+%Y-%m-%d" 2>/dev/null || echo "")
254
+ date=$(date -r "$mtime" "+%Y-%m-%d" 2>/dev/null || date -d "@$mtime" "+%Y-%m-%d" 2>/dev/null || echo "")
255
255
  printf '%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n' "$score" "$task_id" "$project" "$branch" "$date" "$count" "$title" "$snippet"
256
256
  done < "$RESULTS"
257
257
  else
@@ -280,7 +280,7 @@ else
280
280
  printf '\n'
281
281
 
282
282
  while IFS=$'\t' read -r score task_id project branch mtime count title snippet; do
283
- date=$(date -r "$mtime" "+%Y-%m-%d" 2>/dev/null || echo "")
283
+ date=$(date -r "$mtime" "+%Y-%m-%d" 2>/dev/null || date -d "@$mtime" "+%Y-%m-%d" 2>/dev/null || echo "")
284
284
  printf '%s%s%s · %s%s%s · %s%s%s · %s%d match%s%s\n' \
285
285
  "$C_YEL" "$task_id" "$C_RST" "$C_DIM" "$project" "$C_RST" "$C_DIM" "$branch" "$C_RST" "$C_GRN" "$count" "$([ "$count" -eq 1 ] || echo es)" "$C_RST"
286
286
  [ -n "$title" ] && printf ' %s%s%s\n' "$C_BLD" "$title" "$C_RST"
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env bash
2
- # sign-skills.shv6.2.H
2
+ # sign-skills.sh - v6.2.H
3
3
  #
4
4
  # Generates a SHA-256 manifest of every SKILL.md under pipeline/skills/.
5
- # Output: pipeline/skills/.skill-manifest.json (in the authored treebecomes
5
+ # Output: pipeline/skills/.skill-manifest.json (in the authored tree - becomes
6
6
  # part of what install.js copies, so the deployed dirs get the manifest too).
7
7
  #
8
8
  # The manifest is NOT a security boundary. It's a tamper-detection signal:
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env bash
2
- # smoke-adapters.shthird-party AI tool adapters (cursor + copilot-chat).
2
+ # smoke-adapters.sh - third-party AI tool adapters (cursor + copilot-chat).
3
3
  #
4
4
  # As of v8.5.4 the supported set narrowed to the two adapters the pipeline
5
5
  # owner actually uses: Cursor (knowledge layer) and GitHub Copilot Chat
@@ -7,12 +7,12 @@
7
7
  #
8
8
  # Round-trip integrity:
9
9
  # 1. Install writes the expected layout (file counts, dir structure)
10
- # 2. Orchestration skills (multi-agent-*) are NOT exportedknowledge layer only
10
+ # 2. Orchestration skills (multi-agent-*) are NOT exported - knowledge layer only
11
11
  # 3. Uninstall removes ONLY pipeline-managed artifacts
12
12
  # 4. Marker-wrapped block (copilot-chat) preserves user-authored content
13
- # 5. Idempotent installrunning twice produces identical tree
13
+ # 5. Idempotent install - running twice produces identical tree
14
14
  # 6. Platform filter (--platform=ios|android) narrows the skill set
15
- # 7. Default behaviorno flags installs Claude only (backward compat)
15
+ # 7. Default behavior - no flags installs Claude only (backward compat)
16
16
  #
17
17
  # All work happens in mktemp dirs; the user's actual project root is never
18
18
  # touched.
@@ -30,13 +30,14 @@ fail() { FAIL=$((FAIL + 1)); echo " ✗ $1"; }
30
30
  cleanup() {
31
31
  [ -n "${TMP_CURSOR:-}" ] && rm -rf "$TMP_CURSOR"
32
32
  [ -n "${TMP_COPILOTCHAT:-}" ] && rm -rf "$TMP_COPILOTCHAT"
33
+ [ -n "${TMP_ANTIGRAVITY:-}" ] && rm -rf "$TMP_ANTIGRAVITY"
33
34
  [ -n "${TMP_IDEMP:-}" ] && rm -rf "$TMP_IDEMP"
34
35
  [ -n "${TMP_FILTER:-}" ] && rm -rf "$TMP_FILTER"
35
36
  }
36
37
  trap cleanup EXIT
37
38
 
38
39
  # ──────────────────────────────────────────────────────────────────────────
39
- echo "→ 1. Cursor adapterinstall + uninstall round-trip"
40
+ echo "→ 1. Cursor adapter - install + uninstall round-trip"
40
41
  TMP_CURSOR=$(mktemp -d)
41
42
  node "$INSTALL" --cursor --target="$TMP_CURSOR" >/dev/null 2>&1 || fail "cursor install exited non-zero"
42
43
 
@@ -59,7 +60,7 @@ else
59
60
  fail "cursor missing .cursor/rules/ directory"
60
61
  fi
61
62
 
62
- # Orchestration filtermulti-agent-{dev,review,...} should NOT be exported
63
+ # Orchestration filter - multi-agent-{dev,review,...} should NOT be exported
63
64
  orch_leaked=$(find "$TMP_CURSOR/.cursor/rules" -name "multi-agent-multi-agent*" -o -name "multi-agent-dev.mdc" -o -name "multi-agent-review.mdc" 2>/dev/null | wc -l | tr -d ' ')
64
65
  if [ "$orch_leaked" -eq 0 ]; then
65
66
  pass "cursor: orchestration commands correctly filtered out"
@@ -67,6 +68,24 @@ else
67
68
  fail "cursor: $orch_leaked orchestration command(s) leaked into knowledge layer"
68
69
  fi
69
70
 
71
+ # Orchestration layer - Cursor subagents + /multi-agent command + MCP.
72
+ ma_agents=$(find "$TMP_CURSOR/.cursor/agents" -name "ma-*.md" 2>/dev/null | wc -l | tr -d ' ')
73
+ if [ "$ma_agents" -ge 8 ]; then
74
+ pass "cursor orchestration: $ma_agents ma-* subagents emitted"
75
+ else
76
+ fail "cursor orchestration: too few ma-* subagents ($ma_agents, expected >= 8)"
77
+ fi
78
+ if [ -f "$TMP_CURSOR/.cursor/commands/multi-agent.md" ]; then
79
+ pass "cursor orchestration: /multi-agent command present"
80
+ else
81
+ fail "cursor orchestration: .cursor/commands/multi-agent.md missing"
82
+ fi
83
+ if grep -q "dev-toolkit" "$TMP_CURSOR/.cursor/mcp.json" 2>/dev/null; then
84
+ pass "cursor orchestration: mcp.json registers dev-toolkit"
85
+ else
86
+ fail "cursor orchestration: mcp.json missing dev-toolkit server"
87
+ fi
88
+
70
89
  # Round-trip via direct adapter call (CLI uninstall not yet wired into smoke).
71
90
  node --input-type=module -e "
72
91
  import('$REPO_ROOT/pipeline/adapters/cursor.mjs').then(m => {
@@ -74,6 +93,13 @@ node --input-type=module -e "
74
93
  });
75
94
  " >/dev/null 2>&1
76
95
 
96
+ ma_after=$(find "$TMP_CURSOR/.cursor/agents" -name "ma-*.md" 2>/dev/null | wc -l | tr -d ' ')
97
+ if [ "$ma_after" -eq 0 ] && [ ! -f "$TMP_CURSOR/.cursor/commands/multi-agent.md" ]; then
98
+ pass "cursor orchestration uninstall: agents + command removed"
99
+ else
100
+ fail "cursor orchestration uninstall: left $ma_after agent(s) / command behind"
101
+ fi
102
+
77
103
  remaining=$(find "$TMP_CURSOR/.cursor/rules" -name "multi-agent-*" 2>/dev/null | wc -l | tr -d ' ')
78
104
  if [ "$remaining" -eq 0 ]; then
79
105
  pass "cursor uninstall: 0 files remain"
@@ -82,7 +108,7 @@ else
82
108
  fi
83
109
 
84
110
  # ──────────────────────────────────────────────────────────────────────────
85
- echo "→ 2. Copilot Chat adaptermarker-wrapped block preservation"
111
+ echo "→ 2. Copilot Chat adapter - marker-wrapped block preservation"
86
112
  TMP_COPILOTCHAT=$(mktemp -d)
87
113
  mkdir -p "$TMP_COPILOTCHAT/.github"
88
114
  USER_CONTENT="# My personal Copilot Chat instructions"
@@ -121,6 +147,12 @@ else
121
147
  fail "copilot-chat: per-skill instruction count too low ($perskill_count)"
122
148
  fi
123
149
 
150
+ # Orchestration layer - custom agents + /multi-agent prompt + VS Code MCP.
151
+ cc_agents=$(find "$TMP_COPILOTCHAT/.github/agents" -name "ma-*.agent.md" 2>/dev/null | wc -l | tr -d ' ')
152
+ [ "$cc_agents" -ge 8 ] && pass "copilot-chat orchestration: $cc_agents custom agents emitted" || fail "copilot-chat orchestration: too few agents ($cc_agents)"
153
+ [ -f "$TMP_COPILOTCHAT/.github/prompts/multi-agent.prompt.md" ] && pass "copilot-chat orchestration: /multi-agent prompt present" || fail "copilot-chat orchestration: prompt missing"
154
+ grep -q "dev-toolkit" "$TMP_COPILOTCHAT/.vscode/mcp.json" 2>/dev/null && pass "copilot-chat orchestration: .vscode/mcp.json registers dev-toolkit" || fail "copilot-chat orchestration: .vscode/mcp.json missing dev-toolkit"
155
+
124
156
  # Round-trip
125
157
  node --input-type=module -e "
126
158
  import('$REPO_ROOT/pipeline/adapters/copilot-chat.mjs').then(m => {
@@ -141,7 +173,44 @@ else
141
173
  fi
142
174
 
143
175
  # ──────────────────────────────────────────────────────────────────────────
144
- echo "→ 3. Idempotency install twice produces identical tree"
176
+ echo "→ 2c. Antigravity adapter - orchestration round-trip + AGENTS.md preservation"
177
+ TMP_ANTIGRAVITY=$(mktemp -d)
178
+ printf '# user agents\nKEEP_ANTI_LINE\n' > "$TMP_ANTIGRAVITY/AGENTS.md"
179
+ node "$INSTALL" --antigravity --target="$TMP_ANTIGRAVITY" >/dev/null 2>&1 || fail "antigravity install exited non-zero"
180
+ anti_rules=$(find "$TMP_ANTIGRAVITY/.agent/rules" -name "multi-agent-*.md" 2>/dev/null | wc -l | tr -d ' ')
181
+ [ "$anti_rules" -ge 8 ] && pass "antigravity: $anti_rules rules in .agent/rules" || fail "antigravity: too few rules ($anti_rules)"
182
+ [ -f "$TMP_ANTIGRAVITY/.agent/workflows/multi-agent.md" ] && pass "antigravity: /multi-agent workflow present" || fail "antigravity: workflow missing"
183
+ grep -q "KEEP_ANTI_LINE" "$TMP_ANTIGRAVITY/AGENTS.md" && pass "antigravity: user AGENTS.md content preserved" || fail "antigravity: user content lost"
184
+ grep -q "dev-toolkit" "$TMP_ANTIGRAVITY/.agent/mcp_config.json" 2>/dev/null && pass "antigravity: mcp_config registers dev-toolkit" || fail "antigravity: mcp_config missing dev-toolkit"
185
+ node --input-type=module -e "import('$REPO_ROOT/pipeline/adapters/antigravity.mjs').then(m => m.default.uninstall({ target: '$TMP_ANTIGRAVITY' }));" >/dev/null 2>&1
186
+ anti_after=$(find "$TMP_ANTIGRAVITY/.agent/rules" -name "multi-agent-*.md" 2>/dev/null | wc -l | tr -d ' ')
187
+ if [ "$anti_after" -eq 0 ] && grep -q "KEEP_ANTI_LINE" "$TMP_ANTIGRAVITY/AGENTS.md" 2>/dev/null && ! grep -q "multi-agent-pipeline:begin" "$TMP_ANTIGRAVITY/AGENTS.md" 2>/dev/null; then
188
+ pass "antigravity uninstall: artifacts removed, user content survived"
189
+ else
190
+ fail "antigravity uninstall: incomplete (rules=$anti_after)"
191
+ fi
192
+
193
+ # ──────────────────────────────────────────────────────────────────────────
194
+ echo "→ 2d. Codex CLI adapter - global install round-trip (~/.codex)"
195
+ TMP_CODEX_HOME=$(mktemp -d)
196
+ printf '# user codex memory\nKEEP_CODEX_LINE\n' > "$TMP_CODEX_HOME/.codex_seed" # marker file, not AGENTS.md
197
+ mkdir -p "$TMP_CODEX_HOME/.codex"
198
+ printf 'model = "gpt-5.5-codex"\n' > "$TMP_CODEX_HOME/.codex/config.toml" # pre-existing user TOML
199
+ HOME="$TMP_CODEX_HOME" node "$INSTALL" --codex >/dev/null 2>&1 || fail "codex install exited non-zero"
200
+ [ -f "$TMP_CODEX_HOME/.codex/prompts/multi-agent.md" ] && pass "codex: /multi-agent prompt present" || fail "codex: prompt missing"
201
+ [ -f "$TMP_CODEX_HOME/.codex/AGENTS.md" ] && pass "codex: AGENTS.md skill index present" || fail "codex: AGENTS.md missing"
202
+ grep -q "dev-toolkit" "$TMP_CODEX_HOME/.codex/config.toml" 2>/dev/null && pass "codex: config.toml registers dev-toolkit mcp" || fail "codex: config.toml missing mcp block"
203
+ grep -q 'model = "gpt-5.5-codex"' "$TMP_CODEX_HOME/.codex/config.toml" 2>/dev/null && pass "codex: pre-existing user TOML preserved" || fail "codex: user TOML clobbered"
204
+ HOME="$TMP_CODEX_HOME" node --input-type=module -e "import('$REPO_ROOT/pipeline/adapters/codex.mjs').then(m => m.default.uninstall());" >/dev/null 2>&1
205
+ if [ ! -f "$TMP_CODEX_HOME/.codex/prompts/multi-agent.md" ] && grep -q 'model = "gpt-5.5-codex"' "$TMP_CODEX_HOME/.codex/config.toml" 2>/dev/null && ! grep -q "dev-toolkit" "$TMP_CODEX_HOME/.codex/config.toml" 2>/dev/null; then
206
+ pass "codex uninstall: artifacts removed, user TOML survived"
207
+ else
208
+ fail "codex uninstall: incomplete"
209
+ fi
210
+ rm -rf "$TMP_CODEX_HOME"
211
+
212
+ # ──────────────────────────────────────────────────────────────────────────
213
+ echo "→ 3. Idempotency - install twice produces identical tree"
145
214
  TMP_IDEMP=$(mktemp -d)
146
215
  node "$INSTALL" --cursor --target="$TMP_IDEMP" >/dev/null 2>&1
147
216
  HASH_ONE=$(find "$TMP_IDEMP" -type f -exec md5 -q {} \; 2>/dev/null | sort | md5 -q 2>/dev/null || \
@@ -156,7 +225,7 @@ else
156
225
  fi
157
226
 
158
227
  # ──────────────────────────────────────────────────────────────────────────
159
- echo "→ 4. Platform filterios vs android narrow the skill set"
228
+ echo "→ 4. Platform filter - ios vs android narrow the skill set"
160
229
  TMP_FILTER=$(mktemp -d)
161
230
  node "$INSTALL" --cursor --platform=ios --target="$TMP_FILTER" >/dev/null 2>&1
162
231
  ios_count=$(find "$TMP_FILTER/.cursor/rules" -type f 2>/dev/null | wc -l | tr -d ' ')
@@ -180,7 +249,7 @@ else
180
249
  fi
181
250
 
182
251
  # ──────────────────────────────────────────────────────────────────────────
183
- echo "→ 5. Default behaviorno flags installs Claude (backward compat)"
252
+ echo "→ 5. Default behavior - no flags installs Claude (backward compat)"
184
253
  # We don't actually install to $HOME here; just verify the flag math.
185
254
  RESULT=$(node -e "
186
255
  const flags = [];
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env bash
2
- # smoke-add-detail.shcontract check for the `add-detail` command.
2
+ # smoke-add-detail.sh - contract check for the `add-detail` command.
3
3
  #
4
4
  # Does NOT hit real Bitbucket / Jira / GitHub. Instead:
5
5
  # 1. Generates a fake PR diff and body fixture.
@@ -77,7 +77,7 @@ DESC="$(jq -r .description "$TMP/payload.json")"
77
77
  if [[ "$DESC" == *$'\n'* ]]; then
78
78
  pass "description contains real newlines"
79
79
  else
80
- fail "description is single-linenewlines were escaped"
80
+ fail "description is single-line - newlines were escaped"
81
81
  fi
82
82
 
83
83
  # Contract 3: no literal backslash-n sequence survived.
@@ -106,7 +106,7 @@ for glyph in 'Ö' 'İ' 'ç'; do
106
106
  fi
107
107
  done
108
108
 
109
- # Contract 6: Bitbucket PUT contractall of reviewers/fromRef/toRef/draft present.
109
+ # Contract 6: Bitbucket PUT contract - all of reviewers/fromRef/toRef/draft present.
110
110
  for field in reviewers fromRef toRef draft; do
111
111
  if jq -e "has(\"$field\")" "$TMP/payload.json" >/dev/null; then
112
112
  pass "payload has .$field"
@@ -120,7 +120,7 @@ LEN="$(jq '.reviewers | length' "$TMP/payload.json")"
120
120
  if [ "$LEN" -gt 0 ]; then
121
121
  pass "reviewers array preserved ($LEN entries)"
122
122
  else
123
- fail "reviewers array is emptywould wipe defaults"
123
+ fail "reviewers array is empty - would wipe defaults"
124
124
  fi
125
125
 
126
126
  # Contract 8: fromRef / toRef are distinct (PR to self is rejected by Bitbucket).
@@ -129,7 +129,7 @@ TO="$(jq -r .toRef.id "$TMP/payload.json")"
129
129
  if [ "$FROM" != "$TO" ]; then
130
130
  pass "fromRef ($FROM) ≠ toRef ($TO)"
131
131
  else
132
- fail "fromRef == toRefinvalid PR"
132
+ fail "fromRef == toRef - invalid PR"
133
133
  fi
134
134
 
135
135
  echo
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env bash
2
- # smoke-agent-log-cost.shv8.3.0
2
+ # smoke-agent-log-cost.sh - v8.3.0
3
3
  #
4
4
  # Verifies the agent-log Cost Breakdown pipeline:
5
5
  # 1. render-agent-log-cost.sh exits 2 when no tracker data available
@@ -7,7 +7,7 @@
7
7
  # from a hand-built object-shaped phase-tracker.json
8
8
  # 3. Renders identical block from the array-shaped phase-tracker.json that
9
9
  # phase-tracker.sh actually writes
10
- # 4. Unknown model degrades to "" with footnote, never blocks
10
+ # 4. Unknown model degrades to " - " with footnote, never blocks
11
11
  # 5. log-metric.sh forwards tokens + model to tracker when LOG_METRIC_FORWARD_TO_TRACKER=1
12
12
  # 6. log-format.md ref doc declares the Tokens column + Cost Breakdown section
13
13
  #
@@ -118,8 +118,8 @@ cat > .worktrees/UNK-1/phase-tracker.json <<'JSON'
118
118
  ]}
119
119
  JSON
120
120
  out=$(bash "$RENDERER" UNK-1 2>/dev/null)
121
- if grep -qF '| made-up-9000 |' <<< "$out" && grep -qF '||' <<< "$out"; then
122
- record_pass "unknown model row renders with USD as "
121
+ if grep -qF '| made-up-9000 |' <<< "$out" && grep -qF '| - |' <<< "$out"; then
122
+ record_pass "unknown model row renders with USD as - "
123
123
  else
124
124
  record_fail "unknown model handling broken"
125
125
  fi
@@ -137,7 +137,7 @@ export METRICS_FILE="$tmp/metrics.jsonl"
137
137
  export TRACKER_FILE="$tmp/tracker.json"
138
138
  # Bootstrap tracker with one phase
139
139
  bash "$TRACKER" init "FWD-1" >/dev/null 2>&1 || true
140
- # init writes to $HOME/.claude/logs/multi-agent/FWD-1/tracker-state.jsonoverride via TRACKER_FILE
140
+ # init writes to $HOME/.claude/logs/multi-agent/FWD-1/tracker-state.json - override via TRACKER_FILE
141
141
  cat > "$TRACKER_FILE" <<'JSON'
142
142
  {"task_id":"FWD-1","started_at":"2026-05-05T00:00:00Z","phases":[
143
143
  {"id":"4","name":"Review","status":"in_progress","subs":[]}
@@ -145,16 +145,95 @@ cat > "$TRACKER_FILE" <<'JSON'
145
145
  JSON
146
146
  LOG_METRIC_FORWARD_TO_TRACKER=1 TRACKER_QUIET=1 \
147
147
  bash "$LOG_METRIC" FWD-1 4 review.reviewer_call \
148
- model=opus tokens_in=1234 tokens_out=567 duration_ms=1000 >/dev/null 2>&1 || true
148
+ model=opus tokens_in=1234 tokens_out=567 tokens_cached=400 duration_ms=1000 >/dev/null 2>&1 || true
149
149
  if jq -e '.phases[0].tokens_in == 1234 and .phases[0].tokens_out == 567 and .phases[0].model == "opus"' "$TRACKER_FILE" >/dev/null 2>&1; then
150
150
  record_pass "log-metric forwards tokens + model to tracker"
151
151
  else
152
152
  record_fail "log-metric forwarder did not update tracker"
153
153
  cat "$TRACKER_FILE" >&2
154
154
  fi
155
+ # End-to-end: tokens_cached must flow log-metric -> phase-tracker -> tracker state
156
+ if jq -e '.phases[0].tokens_cached == 400' "$TRACKER_FILE" >/dev/null 2>&1; then
157
+ record_pass "log-metric forwards tokens_cached end-to-end"
158
+ else
159
+ record_fail "tokens_cached did not reach the tracker"
160
+ cat "$TRACKER_FILE" >&2
161
+ fi
162
+ # A malformed tokens_cached must NOT poison the call (in/out must still land).
163
+ cat > "$TRACKER_FILE" <<'JSON'
164
+ {"task_id":"FWD-2","phases":[{"id":"4","name":"Review","status":"in_progress","subs":[]}]}
165
+ JSON
166
+ LOG_METRIC_FORWARD_TO_TRACKER=1 TRACKER_QUIET=1 \
167
+ bash "$LOG_METRIC" FWD-2 4 review.reviewer_call \
168
+ model=opus tokens_in=999 tokens_out=111 tokens_cached=abc duration_ms=1 >/dev/null 2>&1 || true
169
+ if jq -e '.phases[0].tokens_in == 999 and .phases[0].tokens_out == 111 and (.phases[0].tokens_cached // 0) == 0' "$TRACKER_FILE" >/dev/null 2>&1; then
170
+ record_pass "malformed tokens_cached sanitized to 0; in/out preserved"
171
+ else
172
+ record_fail "malformed tokens_cached poisoned the tokens call"
173
+ cat "$TRACKER_FILE" >&2
174
+ fi
155
175
  unset METRICS_FILE TRACKER_FILE
156
176
  rm -rf "$tmp"
157
177
 
178
+ # --- 5b: cached tokens are priced at the cache-read rate + surfaced ---
179
+ tmp=$(mktemp -d)
180
+ pushd "$tmp" >/dev/null
181
+ mkdir -p .worktrees/CACHE-1
182
+ cat > .worktrees/CACHE-1/phase-tracker.json <<'JSON'
183
+ {"task_id":"CACHE-1","phases":[
184
+ {"id":"1","name":"Analysis","model":"opus","tokens_in":20000,"tokens_out":3000,"tokens_cached":15000,"subs":[]},
185
+ {"id":"3","name":"Dev","model":"sonnet","tokens_in":60000,"tokens_out":10000,"subs":[]}
186
+ ]}
187
+ JSON
188
+ out=$(bash "$RENDERER" CACHE-1 2>/dev/null)
189
+ # Cache-exclusive: tokens_in (20000) and tokens_cached (15000) are disjoint.
190
+ # 20000 fresh @5 + 15000 cached @0.50 + 3000 out @25 = 0.1825 -> floor-to-cents $0.18.
191
+ # Without the cache discount (cached billed @5) it would be 0.25 -> $0.25, so the
192
+ # discounted rate is what drives the row down to $0.18.
193
+ if grep -qE '\| Analysis \| opus \| 20,000 \| 3,000 \| \$0\.18 \|' <<< "$out"; then
194
+ record_pass "cached tokens priced at cache-read rate (opus row = \$0.18)"
195
+ else
196
+ record_fail "cached-token pricing wrong"
197
+ printf '%s\n' "$out" | head -12 >&2
198
+ fi
199
+ if grep -q 'Cache reads: 15,000 tokens' <<< "$out"; then
200
+ record_pass "cache-read footer surfaced when tokens_cached present"
201
+ else
202
+ record_fail "cache-read footer missing"
203
+ fi
204
+ if grep -qE 'Top cost driver:' <<< "$out"; then
205
+ record_pass "top cost driver line rendered"
206
+ else
207
+ record_fail "top cost driver line missing"
208
+ fi
209
+ popd >/dev/null
210
+ rm -rf "$tmp"
211
+
212
+ # --- 5c: no cache footer when no cached tokens (object-shape regression) ---
213
+ tmp=$(mktemp -d)
214
+ pushd "$tmp" >/dev/null
215
+ mkdir -p .worktrees/NOCACHE-1
216
+ cat > .worktrees/NOCACHE-1/phase-tracker.json <<'JSON'
217
+ {"task_id":"NOCACHE-1","phases":[
218
+ {"id":"3","name":"Dev","model":"sonnet","tokens_in":50000,"tokens_out":8000,"subs":[]}
219
+ ]}
220
+ JSON
221
+ out=$(bash "$RENDERER" NOCACHE-1 2>/dev/null)
222
+ if grep -q 'Cache reads:' <<< "$out"; then
223
+ record_fail "cache-read footer should be absent when no cached tokens"
224
+ else
225
+ record_pass "no cache-read footer when tokens_cached absent"
226
+ fi
227
+ # Sonnet 50000 @3 + 8000 @15 = 0.27 -> $0.27 (unchanged from pre-cache behavior)
228
+ if grep -qE '\| Dev \| sonnet \| 50,000 \| 8,000 \| \$0\.27 \|' <<< "$out"; then
229
+ record_pass "no-cache USD unchanged (backward-compatible)"
230
+ else
231
+ record_fail "no-cache USD changed unexpectedly"
232
+ printf '%s\n' "$out" | head -12 >&2
233
+ fi
234
+ popd >/dev/null
235
+ rm -rf "$tmp"
236
+
158
237
  # --- 6: log-format.md declares Tokens + Cost Breakdown ---
159
238
  if grep -q 'Tokens (in/out)' "$LOG_FORMAT_DOC"; then
160
239
  record_pass "log-format.md declares Tokens (in/out) column"
@@ -1,9 +1,9 @@
1
1
  #!/usr/bin/env bash
2
- # smoke-agent-model-routing.shv6.1.D
2
+ # smoke-agent-model-routing.sh - v6.1.D
3
3
  #
4
4
  # Asserts per-persona model routing contract:
5
5
  # 1. Every agent file in pipeline/agents/ has a `preferredModel` frontmatter field.
6
- # 2. `preferredModel` is one of: opus | sonnet | haiku.
6
+ # 2. `preferredModel` is one of: fable | opus | sonnet | haiku.
7
7
  # 3. `model:` (Claude-Code-native) matches `preferredModel` (single source of truth).
8
8
  # 4. Orchestrator docs mention `CLAUDE_CODE_SUBAGENT_MODEL` and `preferredModel`.
9
9
  # 5. Phase 4 review doc references the per-dispatch override mechanism.
@@ -38,7 +38,7 @@ for name in "${expected[@]}"; do
38
38
  pref=$(awk '/^preferredModel:/ {print $2; exit}' "$f" | tr -d '"'"'")
39
39
  mdl=$(awk '/^model:/ {print $2; exit}' "$f" | tr -d '"'"'")
40
40
  case "$pref" in
41
- opus|sonnet|haiku)
41
+ fable|opus|sonnet|haiku)
42
42
  record_pass "$name has preferredModel=$pref"
43
43
  ;;
44
44
  *)
@@ -0,0 +1,42 @@
1
+ #!/usr/bin/env bash
2
+ # smoke-ask-choice.sh - the portable picker fallback used on platforms without
3
+ # a native AskUserQuestion. Exercises default-by-index, default-by-label,
4
+ # non-interactive first-option, label-vs-index resolution, and usage errors.
5
+
6
+ set -uo pipefail
7
+
8
+ REPO_ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
9
+ ASK="$REPO_ROOT/pipeline/lib/ask-choice.sh"
10
+
11
+ PASS=0
12
+ FAIL=0
13
+ pass() { PASS=$((PASS + 1)); echo " ✓ $1"; }
14
+ fail() { FAIL=$((FAIL + 1)); echo " ✗ $1"; }
15
+
16
+ echo "→ 1. usage error with <3 args (exit 64)"
17
+ bash "$ASK" "only a question" >/dev/null 2>&1
18
+ [ "$?" -eq 64 ] && pass "too-few-args exits 64" || fail "too-few-args should exit 64"
19
+
20
+ echo "→ 2. ASK_CHOICE_DEFAULT by 1-based index"
21
+ out=$(ASK_CHOICE_DEFAULT=2 bash "$ASK" "Approve this plan?" "Approve" "Cancel" "Edit" 2>/dev/null)
22
+ [ "$out" = "Cancel" ] && pass "index default 2 -> 'Cancel'" || fail "index default gave '$out' (expected Cancel)"
23
+
24
+ echo "→ 3. ASK_CHOICE_DEFAULT by label (case-insensitive)"
25
+ out=$(ASK_CHOICE_DEFAULT=approve bash "$ASK" "Approve this plan?" "Approve" "Cancel" 2>/dev/null)
26
+ [ "$out" = "Approve" ] && pass "label default 'approve' -> 'Approve'" || fail "label default gave '$out'"
27
+
28
+ echo "→ 4. out-of-range / unmatched default falls through to first option (non-TTY)"
29
+ out=$(ASK_CHOICE_DEFAULT=99 bash "$ASK" "Pick" "A" "B" </dev/null 2>/dev/null)
30
+ [ "$out" = "A" ] && pass "bad default + no TTY -> first option 'A'" || fail "bad default gave '$out'"
31
+
32
+ echo "→ 5. non-interactive (no TTY, no default) selects first option, never blocks"
33
+ out=$(bash "$ASK" "Continue?" "Yes" "No" </dev/null 2>/dev/null)
34
+ [ "$out" = "Yes" ] && pass "no TTY -> first option 'Yes'" || fail "no TTY gave '$out'"
35
+
36
+ echo "→ 6. stdout carries ONLY the label (menu/prompt go to stderr)"
37
+ out=$(ASK_CHOICE_DEFAULT=1 bash "$ASK" "Q" "Only" "Other" 2>/dev/null)
38
+ [ "$out" = "Only" ] && pass "stdout is clean single label" || fail "stdout not clean: '$out'"
39
+
40
+ echo ""
41
+ echo "══ ask-choice smoke: $PASS passed, $FAIL failed ══"
42
+ [ "$FAIL" -eq 0 ]