@mmerterden/multi-agent-pipeline 20.2.1 → 20.3.1

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 (622) hide show
  1. package/CHANGELOG.md +919 -1
  2. package/README.md +104 -81
  3. package/README.tr.md +103 -62
  4. package/docs/FIGMA_PIPELINE.md +35 -35
  5. package/docs/adr/0006-skills-core-external-split.md +1 -1
  6. package/docs/adr/0007-multi-tool-adapter-framework.md +6 -0
  7. package/docs/adr/0008-installer-modularization-and-secret-leak-defense.md +7 -0
  8. package/docs/architecture.md +50 -14
  9. package/docs/best-practices.md +1 -1
  10. package/docs/ecosystem.md +56 -32
  11. package/docs/facts.json +10 -10
  12. package/docs/features.md +97 -5
  13. package/docs/recovery-guide.md +7 -14
  14. package/docs/server-readiness.md +31 -24
  15. package/index.js +1 -1
  16. package/install/_common.mjs +3 -5
  17. package/install/_platform-filter.mjs +23 -1
  18. package/install/_unattended-profile.mjs +321 -75
  19. package/install/claude.mjs +51 -10
  20. package/install/codex.mjs +2 -0
  21. package/install/copilot.mjs +2 -0
  22. package/install/index.mjs +30 -17
  23. package/install/templates/claude-hooks.json +16 -5
  24. package/install/templates/copilot-instructions.md +1 -1
  25. package/install/templates/multi-agent-autopilot-awake.plist.template +48 -0
  26. package/install/templates/multi-agent-autopilot.plist.template +12 -5
  27. package/install/unattended-profile-legacy.json +80 -0
  28. package/manifest.json +617 -483
  29. package/package.json +8 -3
  30. package/pipeline/agents/code-reviewer.md +10 -0
  31. package/pipeline/agents/plan-critic.md +98 -0
  32. package/pipeline/agents/security-auditor.md +10 -0
  33. package/pipeline/agents/task-clarifier.md +10 -0
  34. package/pipeline/commands/multi-agent/SKILL.md +2 -2
  35. package/pipeline/commands/multi-agent/analysis/SKILL.md +6 -2
  36. package/pipeline/commands/multi-agent/analysis-jira/SKILL.md +12 -1
  37. package/pipeline/commands/multi-agent/analysis-resolve/SKILL.md +4 -0
  38. package/pipeline/commands/multi-agent/autopilot/SKILL.md +6 -2
  39. package/pipeline/commands/multi-agent/autopilot-off/SKILL.md +36 -6
  40. package/pipeline/commands/multi-agent/autopilot-on/SKILL.md +77 -12
  41. package/pipeline/commands/multi-agent/autopilot-status/SKILL.md +29 -8
  42. package/pipeline/commands/multi-agent/build-optimize/SKILL.md +4 -0
  43. package/pipeline/commands/multi-agent/channels/SKILL.md +9 -9
  44. package/pipeline/commands/multi-agent/complaint-analysis/SKILL.md +5 -1
  45. package/pipeline/commands/multi-agent/create-jira/SKILL.md +4 -0
  46. package/pipeline/commands/multi-agent/design-check/SKILL.md +16 -11
  47. package/pipeline/commands/multi-agent/diff-explain/SKILL.md +4 -0
  48. package/pipeline/commands/multi-agent/doctor/SKILL.md +4 -0
  49. package/pipeline/commands/multi-agent/feedback/SKILL.md +5 -1
  50. package/pipeline/commands/multi-agent/forget/SKILL.md +4 -0
  51. package/pipeline/commands/multi-agent/garbage-collect/SKILL.md +4 -0
  52. package/pipeline/commands/multi-agent/graph/SKILL.md +4 -0
  53. package/pipeline/commands/multi-agent/help/SKILL.md +37 -39
  54. package/pipeline/commands/multi-agent/ios-coding-standard/SKILL.md +4 -0
  55. package/pipeline/commands/multi-agent/issue/SKILL.md +7 -1
  56. package/pipeline/commands/multi-agent/jira/SKILL.md +7 -1
  57. package/pipeline/commands/multi-agent/kill/SKILL.md +9 -3
  58. package/pipeline/commands/multi-agent/language/SKILL.md +4 -0
  59. package/pipeline/commands/multi-agent/log/SKILL.md +4 -0
  60. package/pipeline/commands/multi-agent/manual-test/SKILL.md +5 -0
  61. package/pipeline/commands/multi-agent/model/SKILL.md +4 -0
  62. package/pipeline/commands/multi-agent/prune-logs/SKILL.md +4 -0
  63. package/pipeline/commands/multi-agent/prune-prompts/SKILL.md +4 -0
  64. package/pipeline/commands/multi-agent/purge/SKILL.md +4 -0
  65. package/pipeline/commands/multi-agent/refactor/SKILL.md +5 -0
  66. package/pipeline/commands/multi-agent/research/SKILL.md +49 -0
  67. package/pipeline/commands/multi-agent/resume/SKILL.md +29 -6
  68. package/pipeline/commands/multi-agent/review/SKILL.md +28 -9
  69. package/pipeline/commands/multi-agent/review-analysis/SKILL.md +5 -1
  70. package/pipeline/commands/multi-agent/review-issue/SKILL.md +4 -0
  71. package/pipeline/commands/multi-agent/review-jira/SKILL.md +4 -0
  72. package/pipeline/commands/multi-agent/route-off/SKILL.md +4 -0
  73. package/pipeline/commands/multi-agent/route-on/SKILL.md +4 -0
  74. package/pipeline/commands/multi-agent/route-status/SKILL.md +4 -0
  75. package/pipeline/commands/multi-agent/routines/SKILL.md +4 -0
  76. package/pipeline/commands/multi-agent/save/SKILL.md +6 -2
  77. package/pipeline/commands/multi-agent/scaffold/SKILL.md +47 -0
  78. package/pipeline/commands/multi-agent/scan/SKILL.md +4 -0
  79. package/pipeline/commands/multi-agent/search/SKILL.md +12 -8
  80. package/pipeline/commands/multi-agent/security-review/SKILL.md +4 -0
  81. package/pipeline/commands/multi-agent/serve/SKILL.md +62 -0
  82. package/pipeline/commands/multi-agent/setup/SKILL.md +27 -36
  83. package/pipeline/commands/multi-agent/stack/SKILL.md +4 -0
  84. package/pipeline/commands/multi-agent/status/SKILL.md +10 -9
  85. package/pipeline/commands/multi-agent/steer/SKILL.md +5 -1
  86. package/pipeline/commands/multi-agent/store-ready/SKILL.md +4 -0
  87. package/pipeline/commands/multi-agent/sync/SKILL.md +13 -13
  88. package/pipeline/commands/multi-agent/test/SKILL.md +4 -0
  89. package/pipeline/commands/multi-agent/test-accessibility/SKILL.md +4 -0
  90. package/pipeline/commands/multi-agent/test-dark-mode/SKILL.md +4 -0
  91. package/pipeline/commands/multi-agent/test-dynamic-type/SKILL.md +4 -0
  92. package/pipeline/commands/multi-agent/test-screenshots/SKILL.md +5 -1
  93. package/pipeline/commands/multi-agent/testflight-validation/SKILL.md +4 -0
  94. package/pipeline/commands/multi-agent/uninstall/SKILL.md +5 -1
  95. package/pipeline/commands/multi-agent/update/SKILL.md +4 -0
  96. package/pipeline/contract/CHANGELOG.md +74 -0
  97. package/pipeline/contract/README.md +126 -0
  98. package/pipeline/contract/build.mjs +427 -0
  99. package/pipeline/contract/fixtures/answer-result.json +11 -0
  100. package/pipeline/contract/fixtures/error-invalid-request.json +8 -0
  101. package/pipeline/contract/fixtures/error-unauthorized.json +5 -0
  102. package/pipeline/contract/fixtures/error-unsigned.json +5 -0
  103. package/pipeline/contract/fixtures/issues-empty.json +18 -0
  104. package/pipeline/contract/fixtures/launch-plan.json +31 -0
  105. package/pipeline/contract/fixtures/runs-awaiting-question.json +70 -0
  106. package/pipeline/contract/fixtures/runs-empty.json +6 -0
  107. package/pipeline/contract/fixtures/runs-failed.json +84 -0
  108. package/pipeline/contract/fixtures/runs-old-schema.json +70 -0
  109. package/pipeline/contract/fixtures/runs-pr-opened-redacted.json +101 -0
  110. package/pipeline/contract/fixtures/runs-pr-opened.json +106 -0
  111. package/pipeline/contract/fixtures/runs-running.json +84 -0
  112. package/pipeline/contract/fixtures/worktrees-empty.json +4 -0
  113. package/pipeline/contract/frozen/toolbox.json +107 -0
  114. package/pipeline/contract/manifest.json +263 -0
  115. package/pipeline/contract/types/index.d.ts +343 -0
  116. package/pipeline/lib/_jira-auth.sh +6 -2
  117. package/pipeline/lib/account-resolver.sh +1 -1
  118. package/pipeline/lib/autopilot-state.sh +19 -0
  119. package/pipeline/lib/context-link-extractor.sh +12 -5
  120. package/pipeline/lib/credential-inventory.sh +12 -5
  121. package/pipeline/lib/credential-store.sh +116 -185
  122. package/pipeline/lib/fetch-confluence.sh +44 -3
  123. package/pipeline/lib/fetch-document.sh +3 -4
  124. package/pipeline/lib/fetch-fortify.sh +1 -1
  125. package/pipeline/lib/figma-mcp-refresh.sh +2 -2
  126. package/pipeline/lib/figma-token.sh +5 -1
  127. package/pipeline/lib/issue-fetcher.sh +233 -16
  128. package/pipeline/lib/json-file-lock.mjs +172 -0
  129. package/pipeline/lib/model-dispatch.sh +21 -12
  130. package/pipeline/lib/model-rung.sh +6 -1
  131. package/pipeline/lib/multi-repo-pipeline.sh +1 -1
  132. package/pipeline/lib/outbound-gate.mjs +46 -16
  133. package/pipeline/lib/parse-complaints.sh +14 -7
  134. package/pipeline/lib/plan-todos.sh +3 -3
  135. package/pipeline/lib/post-pr-review.sh +9 -9
  136. package/pipeline/lib/pr-request-location.mjs +85 -0
  137. package/pipeline/lib/regular-file.mjs +153 -0
  138. package/pipeline/lib/repo-hygiene.sh +17 -0
  139. package/pipeline/lib/route-state.sh +5 -1
  140. package/pipeline/lib/run-paths.sh +3 -2
  141. package/pipeline/lib/stack-detect.sh +19 -1
  142. package/pipeline/lib/unattended-profile-check.mjs +178 -0
  143. package/pipeline/lib/unattended-settings-location.mjs +28 -0
  144. package/pipeline/lib/unattended.mjs +76 -0
  145. package/pipeline/lib/unattended.sh +32 -0
  146. package/pipeline/lib/untrusted.mjs +76 -0
  147. package/pipeline/lib/usage-endpoint.mjs +33 -0
  148. package/pipeline/lib/user-facing.mjs +82 -0
  149. package/pipeline/lib/user-facing.sh +58 -0
  150. package/pipeline/multi-agent-refs/_dev-context.md +1 -1
  151. package/pipeline/multi-agent-refs/analysis/evidence.md +4 -0
  152. package/pipeline/multi-agent-refs/analysis/locked.md +2 -2
  153. package/pipeline/multi-agent-refs/analysis/render.md +4 -3
  154. package/pipeline/multi-agent-refs/analysis/resolve.md +3 -1
  155. package/pipeline/multi-agent-refs/analysis/synthesis.md +4 -5
  156. package/pipeline/multi-agent-refs/analysis-template.md +10 -17
  157. package/pipeline/multi-agent-refs/channels/jira.md +1 -1
  158. package/pipeline/multi-agent-refs/component-dispatch.md +3 -3
  159. package/pipeline/multi-agent-refs/conventions-defaults.md +32 -32
  160. package/pipeline/multi-agent-refs/cross-cli-contract.md +10 -17
  161. package/pipeline/multi-agent-refs/features/autopilot-circuit-breaker.md +37 -9
  162. package/pipeline/multi-agent-refs/features/autopilot-operations.md +277 -0
  163. package/pipeline/multi-agent-refs/features/constitution.md +196 -0
  164. package/pipeline/multi-agent-refs/features/doctor.md +6 -3
  165. package/pipeline/multi-agent-refs/features/external-context-injection.md +6 -1
  166. package/pipeline/multi-agent-refs/features/jira-context.md +1 -1
  167. package/pipeline/multi-agent-refs/features/maturity-followup.md +43 -23
  168. package/pipeline/multi-agent-refs/features/model-fallback.md +9 -0
  169. package/pipeline/multi-agent-refs/features/phone-api.md +306 -0
  170. package/pipeline/multi-agent-refs/features/plan-critic.md +159 -0
  171. package/pipeline/multi-agent-refs/features/research.md +150 -0
  172. package/pipeline/multi-agent-refs/features/review-decision.md +185 -0
  173. package/pipeline/multi-agent-refs/features/scaffold.md +160 -0
  174. package/pipeline/multi-agent-refs/features/security-audit.md +6 -2
  175. package/pipeline/multi-agent-refs/features/skill-conformance.md +4 -1
  176. package/pipeline/multi-agent-refs/features/stack-adapters.md +116 -0
  177. package/pipeline/multi-agent-refs/features/unattended-gates.md +316 -0
  178. package/pipeline/multi-agent-refs/features/unattended-security.md +731 -0
  179. package/pipeline/multi-agent-refs/features/url-enrichment.md +2 -2
  180. package/pipeline/multi-agent-refs/features/usage-reporting.md +127 -35
  181. package/pipeline/multi-agent-refs/features/verify-by-test.md +1 -1
  182. package/pipeline/multi-agent-refs/features/visual-evidence.md +7 -7
  183. package/pipeline/multi-agent-refs/keychain.md +6 -11
  184. package/pipeline/multi-agent-refs/payload-contracts.md +2 -2
  185. package/pipeline/multi-agent-refs/phases/log-format.md +2 -3
  186. package/pipeline/multi-agent-refs/phases/modes.md +10 -12
  187. package/pipeline/multi-agent-refs/phases/operations.md +11 -5
  188. package/pipeline/multi-agent-refs/phases/phase-0-init.md +73 -81
  189. package/pipeline/multi-agent-refs/phases/phase-1-plan.md +22 -22
  190. package/pipeline/multi-agent-refs/phases/phase-2-dev.md +42 -66
  191. package/pipeline/multi-agent-refs/phases/phase-3-review.md +45 -79
  192. package/pipeline/multi-agent-refs/phases/phase-4-commit.md +28 -38
  193. package/pipeline/multi-agent-refs/phases/phase-5-report.md +27 -25
  194. package/pipeline/multi-agent-refs/phases.md +1 -1
  195. package/pipeline/multi-agent-refs/picker-contract.md +1 -1
  196. package/pipeline/multi-agent-refs/progress-contract.md +13 -16
  197. package/pipeline/multi-agent-refs/readiness-review.md +1 -1
  198. package/pipeline/multi-agent-refs/research/engine.md +91 -0
  199. package/pipeline/multi-agent-refs/rules.md +6 -4
  200. package/pipeline/multi-agent-refs/setup/repo-discovery.md +2 -2
  201. package/pipeline/multi-agent-refs/tracker-contract.md +2 -2
  202. package/pipeline/multi-agent-refs/unattended-contract.md +68 -16
  203. package/pipeline/rules/figma-pipeline.md +12 -12
  204. package/pipeline/schemas/agent-state.schema.json +480 -18
  205. package/pipeline/schemas/analysis-spec.schema.json +4 -4
  206. package/pipeline/schemas/answer-request.schema.json +24 -0
  207. package/pipeline/schemas/answer-result.schema.json +28 -0
  208. package/pipeline/schemas/autopilot-config.schema.json +111 -13
  209. package/pipeline/schemas/command-parameters.schema.json +99 -0
  210. package/pipeline/schemas/constitution.schema.json +56 -0
  211. package/pipeline/schemas/contract-error.schema.json +52 -0
  212. package/pipeline/schemas/design-check-config.schema.json +5 -1
  213. package/pipeline/schemas/issues.schema.json +61 -0
  214. package/pipeline/schemas/launch-plan.schema.json +46 -0
  215. package/pipeline/schemas/launch-request.schema.json +45 -0
  216. package/pipeline/schemas/launch.json +61 -0
  217. package/pipeline/schemas/launch.schema.json +84 -0
  218. package/pipeline/schemas/phases.json +2 -2
  219. package/pipeline/schemas/phases.schema.json +68 -0
  220. package/pipeline/schemas/phone-devices.schema.json +61 -0
  221. package/pipeline/schemas/phone-signed-request.schema.json +67 -0
  222. package/pipeline/schemas/plan-critique.schema.json +99 -0
  223. package/pipeline/schemas/plan-todos.schema.json +7 -7
  224. package/pipeline/schemas/planning-output.schema.json +5 -0
  225. package/pipeline/schemas/pr-request.schema.json +46 -0
  226. package/pipeline/schemas/prefs.schema.json +79 -8
  227. package/pipeline/schemas/research-output.schema.json +118 -0
  228. package/pipeline/schemas/review-file-exclusions.schema.json +25 -0
  229. package/pipeline/schemas/reviewer-output.schema.json +40 -4
  230. package/pipeline/schemas/run-questions.json +392 -0
  231. package/pipeline/schemas/run-questions.schema.json +118 -0
  232. package/pipeline/schemas/runs-index.schema.json +189 -0
  233. package/pipeline/schemas/scaffold-manifest.schema.json +43 -0
  234. package/pipeline/schemas/secret-patterns.schema.json +28 -0
  235. package/pipeline/schemas/stack-adapters.json +527 -0
  236. package/pipeline/schemas/stack-adapters.schema.json +184 -0
  237. package/pipeline/schemas/token-budget.json +1 -1
  238. package/pipeline/schemas/token-budget.schema.json +26 -0
  239. package/pipeline/schemas/triage-output.schema.json +64 -3
  240. package/pipeline/schemas/unattended-policy.json +139 -0
  241. package/pipeline/schemas/unattended-policy.schema.json +73 -0
  242. package/pipeline/schemas/unattended-profile.json +248 -0
  243. package/pipeline/schemas/unattended-profile.schema.json +198 -0
  244. package/pipeline/schemas/worktrees.schema.json +51 -0
  245. package/pipeline/scripts/README.md +1 -0
  246. package/pipeline/scripts/_autopilot-config.mjs +130 -0
  247. package/pipeline/scripts/_autopilot-ops.mjs +567 -0
  248. package/pipeline/scripts/_autopilot-outcomes.mjs +174 -0
  249. package/pipeline/scripts/_command-contract.mjs +384 -0
  250. package/pipeline/scripts/_cost.mjs +40 -0
  251. package/pipeline/scripts/_notices.mjs +160 -0
  252. package/pipeline/scripts/_phone-auth.mjs +485 -0
  253. package/pipeline/scripts/_pre-existing.mjs +294 -0
  254. package/pipeline/scripts/_redact.mjs +77 -0
  255. package/pipeline/scripts/_run-paths.mjs +4 -2
  256. package/pipeline/scripts/_stack-adapter.mjs +678 -0
  257. package/pipeline/scripts/_stack-routing.mjs +1 -1
  258. package/pipeline/scripts/agent-guard.py +348 -37
  259. package/pipeline/scripts/agent-guard.sh +41 -13
  260. package/pipeline/scripts/analysis-story-tree.mjs +79 -3
  261. package/pipeline/scripts/answer-question.mjs +181 -0
  262. package/pipeline/scripts/audit-log-rotate.sh +1 -4
  263. package/pipeline/scripts/audit-log.sh +4 -4
  264. package/pipeline/scripts/autopilot-arming.mjs +389 -21
  265. package/pipeline/scripts/autopilot-awake.mjs +255 -0
  266. package/pipeline/scripts/autopilot-intake.mjs +137 -36
  267. package/pipeline/scripts/autopilot-menubar.swift +156 -44
  268. package/pipeline/scripts/autopilot-publish.mjs +1625 -0
  269. package/pipeline/scripts/autopilot-runner.mjs +1678 -222
  270. package/pipeline/scripts/autopilot-status.sh +198 -33
  271. package/pipeline/scripts/build-lock.sh +120 -0
  272. package/pipeline/scripts/build-references.mjs +4 -1
  273. package/pipeline/scripts/build-stack-plugins.mjs +59 -22
  274. package/pipeline/scripts/capture-flush.sh +1 -1
  275. package/pipeline/scripts/capture-resume.sh +13 -9
  276. package/pipeline/scripts/check-derived-drift.mjs +52 -11
  277. package/pipeline/scripts/commands.mjs +88 -0
  278. package/pipeline/scripts/constitution.mjs +362 -0
  279. package/pipeline/scripts/contract-server.mjs +776 -0
  280. package/pipeline/scripts/cost-analyze.mjs +89 -39
  281. package/pipeline/scripts/diff-explain.mjs +12 -1
  282. package/pipeline/scripts/doctor.mjs +77 -28
  283. package/pipeline/scripts/evidence-gate.mjs +192 -12
  284. package/pipeline/scripts/feedback-send.mjs +4 -2
  285. package/pipeline/scripts/gate-ledger.mjs +449 -0
  286. package/pipeline/scripts/gc-abandoned.sh +132 -13
  287. package/pipeline/scripts/gen-facts.mjs +31 -15
  288. package/pipeline/scripts/gen-mode-dispatch.mjs +3 -3
  289. package/pipeline/scripts/github-ssh-setup.sh +140 -29
  290. package/pipeline/scripts/graph-mermaid.mjs +4 -1
  291. package/pipeline/scripts/issues.mjs +236 -0
  292. package/pipeline/scripts/jira-attach.sh +6 -2
  293. package/pipeline/scripts/jira-search.sh +4 -3
  294. package/pipeline/scripts/keychain-save.sh +125 -24
  295. package/pipeline/scripts/keychain.py +63 -93
  296. package/pipeline/scripts/launch-request.mjs +747 -0
  297. package/pipeline/scripts/localize-commands.mjs +4 -10
  298. package/pipeline/scripts/log-metric.sh +6 -5
  299. package/pipeline/scripts/maturity-followup.mjs +13 -4
  300. package/pipeline/scripts/memory-save.sh +25 -0
  301. package/pipeline/scripts/migrate-prefs.mjs +4 -3
  302. package/pipeline/scripts/open-questions-gate.mjs +276 -0
  303. package/pipeline/scripts/phase-tracker.sh +41 -27
  304. package/pipeline/scripts/phase0-exit-gate.mjs +22 -4
  305. package/pipeline/scripts/phone-devices.mjs +224 -0
  306. package/pipeline/scripts/plan-coverage-gate.mjs +200 -66
  307. package/pipeline/scripts/plan-critique-gate.mjs +591 -0
  308. package/pipeline/scripts/pr-request.mjs +188 -0
  309. package/pipeline/scripts/pre-commit-check.sh +115 -4
  310. package/pipeline/scripts/probe-evidence-capability.sh +44 -5
  311. package/pipeline/scripts/record-phase.mjs +71 -0
  312. package/pipeline/scripts/render-agent-log-cost.sh +17 -2
  313. package/pipeline/scripts/render-cost-summary.sh +1 -1
  314. package/pipeline/scripts/render-work-summary.sh +1 -1
  315. package/pipeline/scripts/require-supported-version.sh +4 -1
  316. package/pipeline/scripts/research-gate.mjs +704 -0
  317. package/pipeline/scripts/review-decision-gate.mjs +403 -0
  318. package/pipeline/scripts/routine-registry.mjs +5 -2
  319. package/pipeline/scripts/runs-index.mjs +135 -27
  320. package/pipeline/scripts/scaffold-gate.mjs +393 -0
  321. package/pipeline/scripts/skill-conformance.mjs +25 -8
  322. package/pipeline/scripts/skill-siblings.mjs +2 -1
  323. package/pipeline/scripts/smoke-cross-cli-behavior.sh +32 -6
  324. package/pipeline/scripts/smoke-schema-validation.sh +6 -2
  325. package/pipeline/scripts/spec-consistency-gate.mjs +469 -0
  326. package/pipeline/scripts/symbol-existence-gate.mjs +450 -0
  327. package/pipeline/scripts/test-gap-scan.mjs +40 -2
  328. package/pipeline/scripts/test-integrity-gate.mjs +20 -4
  329. package/pipeline/scripts/test-strength.mjs +484 -0
  330. package/pipeline/scripts/test-summary.mjs +651 -0
  331. package/pipeline/scripts/triage-memory.mjs +49 -9
  332. package/pipeline/scripts/unattended_policy.py +2786 -0
  333. package/pipeline/scripts/uninstall.mjs +10 -10
  334. package/pipeline/scripts/update-issue-progress.sh +1 -1
  335. package/pipeline/scripts/usage-identity.mjs +288 -0
  336. package/pipeline/scripts/usage-register.mjs +187 -67
  337. package/pipeline/scripts/usage-report.mjs +232 -67
  338. package/pipeline/scripts/validate-complaint-doc.mjs +28 -10
  339. package/pipeline/scripts/validate-planning.mjs +6 -0
  340. package/pipeline/scripts/verify-citations.mjs +151 -38
  341. package/pipeline/scripts/verify.mjs +58 -18
  342. package/pipeline/scripts/worktree-prepare.sh +126 -0
  343. package/pipeline/scripts/worktrees.mjs +124 -0
  344. package/pipeline/scripts/write-state.mjs +48 -17
  345. package/pipeline/skills/.skill-manifest.json +222 -226
  346. package/pipeline/skills/.skills-index.json +77 -88
  347. package/pipeline/skills/shared/README.md +44 -45
  348. package/pipeline/skills/shared/core/apple-archive-compliance/SKILL.md +3 -2
  349. package/pipeline/skills/shared/core/google-play-compliance/SKILL.md +3 -2
  350. package/pipeline/skills/shared/core/multi-agent/SKILL.md +10 -9
  351. package/pipeline/skills/shared/core/multi-agent-analysis/SKILL.md +6 -5
  352. package/pipeline/skills/shared/core/multi-agent-analysis-jira/SKILL.md +11 -3
  353. package/pipeline/skills/shared/core/multi-agent-analysis-resolve/SKILL.md +2 -1
  354. package/pipeline/skills/shared/core/multi-agent-autopilot/SKILL.md +4 -3
  355. package/pipeline/skills/shared/core/multi-agent-autopilot-off/SKILL.md +32 -6
  356. package/pipeline/skills/shared/core/multi-agent-autopilot-on/SKILL.md +66 -8
  357. package/pipeline/skills/shared/core/multi-agent-autopilot-status/SKILL.md +27 -9
  358. package/pipeline/skills/shared/core/multi-agent-build-optimize/SKILL.md +2 -1
  359. package/pipeline/skills/shared/core/multi-agent-channels/SKILL.md +7 -4
  360. package/pipeline/skills/shared/core/multi-agent-complaint-analysis/SKILL.md +3 -2
  361. package/pipeline/skills/shared/core/multi-agent-create-jira/SKILL.md +2 -1
  362. package/pipeline/skills/shared/core/multi-agent-design-check/SKILL.md +7 -5
  363. package/pipeline/skills/shared/core/multi-agent-diff-explain/SKILL.md +2 -1
  364. package/pipeline/skills/shared/core/multi-agent-doctor/SKILL.md +3 -2
  365. package/pipeline/skills/shared/core/multi-agent-feedback/SKILL.md +2 -1
  366. package/pipeline/skills/shared/core/multi-agent-forget/SKILL.md +2 -1
  367. package/pipeline/skills/shared/core/multi-agent-garbage-collect/SKILL.md +2 -1
  368. package/pipeline/skills/shared/core/multi-agent-graph/SKILL.md +2 -1
  369. package/pipeline/skills/shared/core/multi-agent-help/SKILL.md +2 -1
  370. package/pipeline/skills/shared/core/multi-agent-ios-coding-standard/SKILL.md +2 -1
  371. package/pipeline/skills/shared/core/multi-agent-issue/SKILL.md +3 -2
  372. package/pipeline/skills/shared/core/multi-agent-jira/SKILL.md +2 -1
  373. package/pipeline/skills/shared/core/multi-agent-kill/SKILL.md +7 -4
  374. package/pipeline/skills/shared/core/multi-agent-language/SKILL.md +2 -1
  375. package/pipeline/skills/shared/core/multi-agent-log/SKILL.md +2 -1
  376. package/pipeline/skills/shared/core/multi-agent-manual-test/SKILL.md +2 -1
  377. package/pipeline/skills/shared/core/multi-agent-model/SKILL.md +2 -1
  378. package/pipeline/skills/shared/core/multi-agent-prune-logs/SKILL.md +2 -1
  379. package/pipeline/skills/shared/core/multi-agent-prune-prompts/SKILL.md +2 -1
  380. package/pipeline/skills/shared/core/multi-agent-purge/SKILL.md +2 -1
  381. package/pipeline/skills/shared/core/multi-agent-refactor/SKILL.md +2 -1
  382. package/pipeline/skills/shared/core/multi-agent-research/SKILL.md +35 -0
  383. package/pipeline/skills/shared/core/multi-agent-resume/SKILL.md +7 -3
  384. package/pipeline/skills/shared/core/multi-agent-review/SKILL.md +7 -5
  385. package/pipeline/skills/shared/core/multi-agent-review-analysis/SKILL.md +2 -1
  386. package/pipeline/skills/shared/core/multi-agent-review-issue/SKILL.md +3 -2
  387. package/pipeline/skills/shared/core/multi-agent-review-jira/SKILL.md +2 -1
  388. package/pipeline/skills/shared/core/multi-agent-route-off/SKILL.md +2 -1
  389. package/pipeline/skills/shared/core/multi-agent-route-on/SKILL.md +2 -1
  390. package/pipeline/skills/shared/core/multi-agent-route-status/SKILL.md +2 -1
  391. package/pipeline/skills/shared/core/multi-agent-routines/SKILL.md +2 -1
  392. package/pipeline/skills/shared/core/multi-agent-save/SKILL.md +3 -2
  393. package/pipeline/skills/shared/core/multi-agent-scaffold/SKILL.md +30 -0
  394. package/pipeline/skills/shared/core/multi-agent-scan/SKILL.md +2 -1
  395. package/pipeline/skills/shared/core/multi-agent-search/SKILL.md +4 -3
  396. package/pipeline/skills/shared/core/multi-agent-security-review/SKILL.md +2 -1
  397. package/pipeline/skills/shared/core/multi-agent-serve/SKILL.md +60 -0
  398. package/pipeline/skills/shared/core/multi-agent-setup/SKILL.md +8 -8
  399. package/pipeline/skills/shared/core/multi-agent-stack/SKILL.md +2 -1
  400. package/pipeline/skills/shared/core/multi-agent-status/SKILL.md +7 -8
  401. package/pipeline/skills/shared/core/multi-agent-steer/SKILL.md +2 -1
  402. package/pipeline/skills/shared/core/multi-agent-store-ready/SKILL.md +2 -1
  403. package/pipeline/skills/shared/core/multi-agent-sync/SKILL.md +10 -10
  404. package/pipeline/skills/shared/core/multi-agent-test/SKILL.md +2 -1
  405. package/pipeline/skills/shared/core/multi-agent-test-accessibility/SKILL.md +2 -1
  406. package/pipeline/skills/shared/core/multi-agent-test-dark-mode/SKILL.md +2 -1
  407. package/pipeline/skills/shared/core/multi-agent-test-dynamic-type/SKILL.md +2 -1
  408. package/pipeline/skills/shared/core/multi-agent-test-screenshots/SKILL.md +2 -1
  409. package/pipeline/skills/shared/core/multi-agent-testflight-validation/SKILL.md +2 -1
  410. package/pipeline/skills/shared/core/multi-agent-uninstall/SKILL.md +3 -2
  411. package/pipeline/skills/shared/core/multi-agent-update/SKILL.md +2 -1
  412. package/pipeline/skills/shared/external/NOTICE-avdlee-swiftui-agent-skill.md +46 -0
  413. package/pipeline/skills/shared/external/NOTICE-dimillian-skills.md +9 -3
  414. package/pipeline/skills/shared/external/NOTICE-paul-hudson-skills.md +54 -0
  415. package/pipeline/skills/shared/external/NOTICE-swift-ios-skills.md +9 -11
  416. package/pipeline/skills/shared/external/NOTICE-vibeship-spawner-skills.md +203 -0
  417. package/pipeline/skills/shared/external/NOTICE-xcode-build-skills.md +10 -3
  418. package/pipeline/skills/shared/external/accessibility-compliance-accessibility-audit/SKILL.md +131 -25
  419. package/pipeline/skills/shared/external/agent-introspection-debugging/SKILL.md +4 -3
  420. package/pipeline/skills/shared/external/alarmkit/SKILL.md +2 -1
  421. package/pipeline/skills/shared/external/android-architecture/SKILL.md +85 -76
  422. package/pipeline/skills/shared/external/android-build-quality-gates/SKILL.md +51 -3
  423. package/pipeline/skills/shared/external/android-build-quality-gates/references/patterns.md +9 -0
  424. package/pipeline/skills/shared/external/android-datastore/SKILL.md +4 -3
  425. package/pipeline/skills/shared/external/android-design-tokens-codegen/SKILL.md +4 -3
  426. package/pipeline/skills/shared/external/android-jetpack-compose-expert/SKILL.md +106 -181
  427. package/pipeline/skills/shared/external/android-jetpack-compose-expert/references/patterns.md +147 -0
  428. package/pipeline/skills/shared/external/android-mvi-viewmodel/SKILL.md +45 -4
  429. package/pipeline/skills/shared/external/android-performance/SKILL.md +27 -2
  430. package/pipeline/skills/shared/external/android-performance/references/patterns.md +37 -37
  431. package/pipeline/skills/shared/external/api-patterns/SKILL.md +111 -67
  432. package/pipeline/skills/shared/external/api-patterns/references/contract-details.md +128 -0
  433. package/pipeline/skills/shared/external/api-security-best-practices/SKILL.md +136 -186
  434. package/pipeline/skills/shared/external/api-security-best-practices/references/abuse-controls.md +140 -0
  435. package/pipeline/skills/shared/external/api-security-best-practices/references/identity-and-access.md +207 -0
  436. package/pipeline/skills/shared/external/api-security-best-practices/references/operations.md +66 -0
  437. package/pipeline/skills/shared/external/api-security-best-practices/references/request-handling.md +175 -0
  438. package/pipeline/skills/shared/external/app-clips/SKILL.md +2 -0
  439. package/pipeline/skills/shared/external/app-intents/SKILL.md +2 -0
  440. package/pipeline/skills/shared/external/app-store-changelog/SKILL.md +4 -3
  441. package/pipeline/skills/shared/external/app-store-optimization/SKILL.md +2 -0
  442. package/pipeline/skills/shared/external/app-store-review/SKILL.md +2 -0
  443. package/pipeline/skills/shared/external/apple-on-device-ai/SKILL.md +2 -0
  444. package/pipeline/skills/shared/external/architecture/SKILL.md +106 -39
  445. package/pipeline/skills/shared/external/architecture/references/adr-and-review.md +76 -0
  446. package/pipeline/skills/shared/external/authentication/SKILL.md +2 -0
  447. package/pipeline/skills/shared/external/avkit/SKILL.md +2 -0
  448. package/pipeline/skills/shared/external/background-processing/SKILL.md +2 -1
  449. package/pipeline/skills/shared/external/backlog/SKILL.md +3 -2
  450. package/pipeline/skills/shared/external/callkit-voip/SKILL.md +2 -0
  451. package/pipeline/skills/shared/external/callkit-voip/evals/evals.json +1 -1
  452. package/pipeline/skills/shared/external/ci-cd-pipelines/SKILL.md +3 -2
  453. package/pipeline/skills/shared/external/clean-code/SKILL.md +192 -90
  454. package/pipeline/skills/shared/external/cloudkit-sync/SKILL.md +2 -1
  455. package/pipeline/skills/shared/external/cloudkit-sync/evals/evals.json +1 -1
  456. package/pipeline/skills/shared/external/compose-components/SKILL.md +4 -4
  457. package/pipeline/skills/shared/external/compose-navigation/SKILL.md +22 -22
  458. package/pipeline/skills/shared/external/compose-navigation/references/patterns.md +10 -10
  459. package/pipeline/skills/shared/external/compose-testing/SKILL.md +13 -6
  460. package/pipeline/skills/shared/external/compose-testing/references/patterns.md +59 -59
  461. package/pipeline/skills/shared/external/contacts-framework/SKILL.md +2 -0
  462. package/pipeline/skills/shared/external/context-compression/SKILL.md +118 -250
  463. package/pipeline/skills/shared/external/core-bluetooth/SKILL.md +2 -0
  464. package/pipeline/skills/shared/external/core-data/SKILL.md +2 -0
  465. package/pipeline/skills/shared/external/core-motion/SKILL.md +2 -0
  466. package/pipeline/skills/shared/external/core-nfc/SKILL.md +2 -0
  467. package/pipeline/skills/shared/external/coreml/SKILL.md +2 -1
  468. package/pipeline/skills/shared/external/council/SKILL.md +2 -1
  469. package/pipeline/skills/shared/external/cryptokit/SKILL.md +2 -0
  470. package/pipeline/skills/shared/external/css-modern/SKILL.md +3 -2
  471. package/pipeline/skills/shared/external/database-patterns/SKILL.md +3 -2
  472. package/pipeline/skills/shared/external/debugging-instruments/SKILL.md +2 -0
  473. package/pipeline/skills/shared/external/debugging-strategies/SKILL.md +130 -20
  474. package/pipeline/skills/shared/external/debugging-strategies/references/hard-cases.md +54 -0
  475. package/pipeline/skills/shared/external/device-integrity/SKILL.md +2 -0
  476. package/pipeline/skills/shared/external/docker-expert/SKILL.md +137 -381
  477. package/pipeline/skills/shared/external/docker-expert/references/patterns.md +98 -0
  478. package/pipeline/skills/shared/external/energykit/SKILL.md +2 -1
  479. package/pipeline/skills/shared/external/eventkit-calendar/SKILL.md +3 -1
  480. package/pipeline/skills/shared/external/eventkit-calendar/evals/evals.json +2 -2
  481. package/pipeline/skills/shared/external/fastapi-pro/SKILL.md +116 -185
  482. package/pipeline/skills/shared/external/fastapi-pro/references/app-structure.md +235 -0
  483. package/pipeline/skills/shared/external/fastapi-pro/references/testing-and-deployment.md +69 -0
  484. package/pipeline/skills/shared/external/firebase/SKILL.md +4 -3
  485. package/pipeline/skills/shared/external/github-actions-templates/SKILL.md +151 -293
  486. package/pipeline/skills/shared/external/github-actions-templates/references/patterns.md +96 -0
  487. package/pipeline/skills/shared/external/healthkit/SKILL.md +2 -0
  488. package/pipeline/skills/shared/external/hig-components-content/SKILL.md +69 -72
  489. package/pipeline/skills/shared/external/hig-components-content/references/content-views.md +111 -0
  490. package/pipeline/skills/shared/external/hig-components-layout/SKILL.md +77 -86
  491. package/pipeline/skills/shared/external/hig-components-layout/references/containers.md +98 -0
  492. package/pipeline/skills/shared/external/hig-components-status/SKILL.md +150 -78
  493. package/pipeline/skills/shared/external/hig-components-system/SKILL.md +76 -97
  494. package/pipeline/skills/shared/external/hig-components-system/references/surfaces.md +98 -0
  495. package/pipeline/skills/shared/external/hig-foundations/SKILL.md +48 -76
  496. package/pipeline/skills/shared/external/hig-foundations/references/foundations-detail.md +132 -0
  497. package/pipeline/skills/shared/external/hig-inputs/SKILL.md +147 -106
  498. package/pipeline/skills/shared/external/hig-patterns/SKILL.md +61 -77
  499. package/pipeline/skills/shared/external/hig-patterns/references/patterns.md +92 -0
  500. package/pipeline/skills/shared/external/hig-platforms/SKILL.md +147 -77
  501. package/pipeline/skills/shared/external/hig-technologies/SKILL.md +61 -121
  502. package/pipeline/skills/shared/external/hig-technologies/references/technologies.md +108 -0
  503. package/pipeline/skills/shared/external/homekit-matter/SKILL.md +2 -0
  504. package/pipeline/skills/shared/external/homekit-matter/evals/evals.json +1 -1
  505. package/pipeline/skills/shared/external/html-semantic/SKILL.md +3 -2
  506. package/pipeline/skills/shared/external/humanizer/SKILL.md +2 -1
  507. package/pipeline/skills/shared/external/ios-accessibility/SKILL.md +2 -0
  508. package/pipeline/skills/shared/external/ios-coding-standard/SKILL.md +2 -1
  509. package/pipeline/skills/shared/external/ios-coding-standard/references/STANDARD.md +14 -2
  510. package/pipeline/skills/shared/external/ios-coding-standard/references/rules.yml +2 -2
  511. package/pipeline/skills/shared/external/ios-debugger-agent/SKILL.md +4 -3
  512. package/pipeline/skills/shared/external/ios-localization/SKILL.md +8 -6
  513. package/pipeline/skills/shared/external/ios-localization/evals/evals.json +2 -2
  514. package/pipeline/skills/shared/external/ios-localization/references/string-catalogs.md +11 -11
  515. package/pipeline/skills/shared/external/ios-module-structure/SKILL.md +2 -1
  516. package/pipeline/skills/shared/external/ios-networking/SKILL.md +2 -0
  517. package/pipeline/skills/shared/external/ios-simulator/SKILL.md +2 -0
  518. package/pipeline/skills/shared/external/kotlin-coroutines-expert/SKILL.md +102 -193
  519. package/pipeline/skills/shared/external/kotlin-coroutines-expert/references/patterns.md +103 -0
  520. package/pipeline/skills/shared/external/live-activities/SKILL.md +4 -2
  521. package/pipeline/skills/shared/external/live-activities/evals/evals.json +2 -2
  522. package/pipeline/skills/shared/external/localization-reuse-map/SKILL.md +7 -9
  523. package/pipeline/skills/shared/external/localization-reuse-map/reference/sources-and-recipes.md +3 -3
  524. package/pipeline/skills/shared/external/localization-reuse-map/scripts/resolve-new-values.py +2 -2
  525. package/pipeline/skills/shared/external/macos-menubar-tuist-app/SKILL.md +4 -3
  526. package/pipeline/skills/shared/external/macos-spm-app-packaging/SKILL.md +5 -3
  527. package/pipeline/skills/shared/external/mapkit-location/SKILL.md +2 -0
  528. package/pipeline/skills/shared/external/mapkit-location/evals/evals.json +1 -1
  529. package/pipeline/skills/shared/external/metrickit-diagnostics/SKILL.md +2 -0
  530. package/pipeline/skills/shared/external/metrickit-diagnostics/evals/evals.json +1 -1
  531. package/pipeline/skills/shared/external/monorepo-architect/SKILL.md +149 -46
  532. package/pipeline/skills/shared/external/monorepo-architect/references/patterns.md +70 -0
  533. package/pipeline/skills/shared/external/musickit-audio/SKILL.md +2 -0
  534. package/pipeline/skills/shared/external/musickit-audio/evals/evals.json +1 -1
  535. package/pipeline/skills/shared/external/natural-language/SKILL.md +2 -0
  536. package/pipeline/skills/shared/external/nextjs-app-router/SKILL.md +3 -2
  537. package/pipeline/skills/shared/external/nodejs-backend-patterns/SKILL.md +91 -21
  538. package/pipeline/skills/shared/external/nodejs-backend-patterns/references/runtime-patterns.md +247 -0
  539. package/pipeline/skills/shared/external/nodejs-backend-patterns/references/testing-and-frameworks.md +57 -0
  540. package/pipeline/skills/shared/external/observability-engineer/SKILL.md +155 -232
  541. package/pipeline/skills/shared/external/observability-engineer/references/patterns.md +75 -0
  542. package/pipeline/skills/shared/external/passkit-wallet/SKILL.md +2 -0
  543. package/pipeline/skills/shared/external/passkit-wallet/evals/evals.json +2 -2
  544. package/pipeline/skills/shared/external/passkit-wallet/references/wallet-passes.md +18 -18
  545. package/pipeline/skills/shared/external/pdfkit/SKILL.md +2 -1
  546. package/pipeline/skills/shared/external/pencilkit-drawing/SKILL.md +2 -0
  547. package/pipeline/skills/shared/external/pencilkit-drawing/evals/evals.json +1 -1
  548. package/pipeline/skills/shared/external/permissionkit/SKILL.md +2 -0
  549. package/pipeline/skills/shared/external/photos-camera-media/SKILL.md +2 -1
  550. package/pipeline/skills/shared/external/push-notifications/SKILL.md +2 -0
  551. package/pipeline/skills/shared/external/python-patterns/SKILL.md +3 -2
  552. package/pipeline/skills/shared/external/react-best-practices/SKILL.md +3 -2
  553. package/pipeline/skills/shared/external/realitykit-ar/SKILL.md +2 -2
  554. package/pipeline/skills/shared/external/realitykit-ar/evals/evals.json +1 -1
  555. package/pipeline/skills/shared/external/rest-api-design/SKILL.md +3 -2
  556. package/pipeline/skills/shared/external/retrofit-networking/SKILL.md +7 -7
  557. package/pipeline/skills/shared/external/retrofit-networking/references/patterns.md +69 -69
  558. package/pipeline/skills/shared/external/room-database/references/patterns.md +126 -126
  559. package/pipeline/skills/shared/external/search-first/SKILL.md +2 -1
  560. package/pipeline/skills/shared/external/security-review/SKILL.md +4 -3
  561. package/pipeline/skills/shared/external/shareplay-activities/SKILL.md +2 -2
  562. package/pipeline/skills/shared/external/signal-community/SKILL.md +1 -1
  563. package/pipeline/skills/shared/external/skill-creator/SKILL.md +2 -1
  564. package/pipeline/skills/shared/external/speech-recognition/SKILL.md +2 -1
  565. package/pipeline/skills/shared/external/spm-build-analysis/SKILL.md +2 -0
  566. package/pipeline/skills/shared/external/storekit/SKILL.md +2 -0
  567. package/pipeline/skills/shared/external/swift-api-design-guidelines/SKILL.md +2 -0
  568. package/pipeline/skills/shared/external/swift-architecture/SKILL.md +2 -1
  569. package/pipeline/skills/shared/external/swift-charts/SKILL.md +2 -1
  570. package/pipeline/skills/shared/external/swift-codable/SKILL.md +2 -0
  571. package/pipeline/skills/shared/external/swift-concurrency/SKILL.md +3 -1
  572. package/pipeline/skills/shared/external/swift-concurrency-expert/SKILL.md +5 -4
  573. package/pipeline/skills/shared/external/swift-concurrency-pro/SKILL.md +2 -1
  574. package/pipeline/skills/shared/external/swift-formatstyle/SKILL.md +2 -0
  575. package/pipeline/skills/shared/external/swift-language/SKILL.md +3 -1
  576. package/pipeline/skills/shared/external/swift-security/SKILL.md +2 -1
  577. package/pipeline/skills/shared/external/swift-testing/SKILL.md +2 -0
  578. package/pipeline/skills/shared/external/swift-testing-pro/SKILL.md +2 -1
  579. package/pipeline/skills/shared/external/swift-testing-pro/references/new-features.md +10 -0
  580. package/pipeline/skills/shared/external/swiftdata/SKILL.md +2 -0
  581. package/pipeline/skills/shared/external/swiftdata-pro/SKILL.md +2 -1
  582. package/pipeline/skills/shared/external/swiftlint/SKILL.md +2 -0
  583. package/pipeline/skills/shared/external/swiftui-animation/SKILL.md +2 -0
  584. package/pipeline/skills/shared/external/swiftui-expert-skill/SKILL.md +3 -1
  585. package/pipeline/skills/shared/external/swiftui-gestures/SKILL.md +2 -0
  586. package/pipeline/skills/shared/external/swiftui-layout-components/SKILL.md +2 -0
  587. package/pipeline/skills/shared/external/swiftui-liquid-glass/SKILL.md +2 -0
  588. package/pipeline/skills/shared/external/swiftui-navigation/SKILL.md +2 -0
  589. package/pipeline/skills/shared/external/swiftui-patterns/SKILL.md +3 -1
  590. package/pipeline/skills/shared/external/swiftui-performance/SKILL.md +3 -1
  591. package/pipeline/skills/shared/external/swiftui-performance-audit/SKILL.md +5 -4
  592. package/pipeline/skills/shared/external/swiftui-pro/SKILL.md +2 -1
  593. package/pipeline/skills/shared/external/swiftui-ui-patterns/SKILL.md +5 -4
  594. package/pipeline/skills/shared/external/swiftui-uikit-interop/SKILL.md +2 -0
  595. package/pipeline/skills/shared/external/swiftui-view-refactor/SKILL.md +4 -3
  596. package/pipeline/skills/shared/external/swiftui-webkit/SKILL.md +2 -0
  597. package/pipeline/skills/shared/external/tailwind-css/SKILL.md +3 -2
  598. package/pipeline/skills/shared/external/testing-backend/SKILL.md +3 -2
  599. package/pipeline/skills/shared/external/tipkit/SKILL.md +2 -0
  600. package/pipeline/skills/shared/external/typescript-patterns/SKILL.md +3 -2
  601. package/pipeline/skills/shared/external/vision-framework/SKILL.md +2 -0
  602. package/pipeline/skills/shared/external/vue-composition/SKILL.md +3 -2
  603. package/pipeline/skills/shared/external/weatherkit/SKILL.md +2 -0
  604. package/pipeline/skills/shared/external/web-accessibility/SKILL.md +3 -2
  605. package/pipeline/skills/shared/external/web-performance/SKILL.md +3 -2
  606. package/pipeline/skills/shared/external/web-testing/SKILL.md +3 -2
  607. package/pipeline/skills/shared/external/widgetkit/SKILL.md +2 -0
  608. package/pipeline/skills/shared/external/widgetkit/references/widgetkit-advanced.md +1 -1
  609. package/pipeline/skills/shared/external/xcode-build-benchmark/SKILL.md +2 -0
  610. package/pipeline/skills/shared/external/xcode-build-fixer/SKILL.md +2 -0
  611. package/pipeline/skills/shared/external/xcode-build-orchestrator/SKILL.md +2 -0
  612. package/pipeline/skills/shared/external/xcode-compilation-analyzer/SKILL.md +2 -0
  613. package/pipeline/skills/shared/external/xcode-project-analyzer/SKILL.md +2 -0
  614. package/pipeline/skills/skills-index.md +40 -41
  615. package/docs/token-budget-history.md +0 -24
  616. package/pipeline/skills/shared/external/agentflow/SKILL.md +0 -199
  617. package/pipeline/skills/shared/external/android-ui-verification/SKILL.md +0 -66
  618. package/pipeline/skills/shared/external/api-security-best-practices/references/auth.md +0 -299
  619. package/pipeline/skills/shared/external/api-security-best-practices/references/input-validation.md +0 -255
  620. package/pipeline/skills/shared/external/api-security-best-practices/references/rate-limiting.md +0 -167
  621. package/pipeline/skills/shared/external/closed-loop-delivery/SKILL.md +0 -116
  622. package/pipeline/skills/shared/external/ios-developer/SKILL.md +0 -216
@@ -1,58 +1,125 @@
1
1
  ---
2
2
  name: architecture
3
- description: "Architectural decision-making framework. Requirements analysis, trade-off evaluation, ADR documentation. Use when making architecture decisions or analyzing system design."
4
- risk: safe
5
- source: community
6
- date_added: "2026-02-27"
3
+ description: "Stack-neutral architecture decisions: quality drivers, options with a trade-off matrix, reversibility, ADRs, fitness checks. Use when making or reviewing a significant design decision or writing an ADR."
4
+ metadata:
5
+ risk: safe
6
+ source: multi-agent-pipeline
7
+ date_added: "2026-09-25"
7
8
  ---
8
9
 
9
- # Architecture Decision Framework
10
+ # Architecture Decisions
10
11
 
11
- > "Requirements drive architecture. Trade-offs inform decisions. ADRs capture rationale."
12
+ An architecture decision is any choice that is expensive to undo once other
13
+ code depends on it. This skill is the procedure for making one deliberately and
14
+ leaving a record a later reader can argue with.
12
15
 
13
- ## 📑 Topics
16
+ It is stack-neutral. For app-level patterns on a specific platform, load
17
+ `swift-architecture` (MV, MVVM, TCA and friends on Apple platforms) or
18
+ `android-architecture` (layered modules with Hilt). For line-level readability
19
+ use `clean-code`. For a contested call that needs several independent opinions,
20
+ `council` runs that debate; this skill supplies the frame it argues inside.
14
21
 
15
- | Topic | Covers | When it applies |
16
- |------|-------------|--------------|
17
- | Context discovery | Questions to ask, project classification | Starting architecture design |
18
- | Trade-off analysis | ADR templates, trade-off framework | Documenting decisions |
19
- | Pattern selection | Decision trees, anti-patterns | Choosing patterns |
20
- | Worked examples | MVP, SaaS, Enterprise examples | Reference implementations |
21
- | Patterns reference | Quick lookup for patterns | Pattern comparison |
22
+ ## When a decision deserves this process
22
23
 
23
- ---
24
+ Run the full procedure when at least one is true:
24
25
 
25
- ## 🔗 Related Skills
26
+ - Undoing it later would touch more than one team, service or release.
27
+ - It fixes a data format, a public contract or a storage engine.
28
+ - Two competent people on the team already disagree about it.
29
+ - It trades one quality attribute against another (for example latency for
30
+ consistency).
26
31
 
27
- | Skill | Use For |
28
- |-------|---------|
29
- | `@[skills/database-design]` | Database schema design |
30
- | `@[skills/api-patterns]` | API design patterns |
31
- | `@[skills/deployment-procedures]` | Deployment architecture |
32
+ A choice that one engineer can reverse in an afternoon does not need an ADR.
33
+ Make it, note it in the pull request, move on.
32
34
 
33
- ---
35
+ ## Step 1: Write the forces down
34
36
 
35
- ## Core Principle
37
+ Before any option is named, list what the design has to satisfy. Options chosen
38
+ before the forces are written tend to be justified backwards.
36
39
 
37
- **"Simplicity is the ultimate sophistication."**
40
+ **Functional scope.** One or two sentences: what must the system do that it does
41
+ not do today.
38
42
 
39
- - Start simple
40
- - Add complexity ONLY when proven necessary
41
- - You can always add patterns later
42
- - Removing complexity is MUCH harder than adding it
43
+ **Quality drivers.** Pick the three to five that actually bind, and make each
44
+ one measurable. "Fast" is not a driver; "p95 order lookup under 200 ms at 500
45
+ requests per second" is.
43
46
 
44
- ---
47
+ | Attribute | Typical measurable form |
48
+ |-----------|-------------------------|
49
+ | Performance | p95/p99 latency at a stated load |
50
+ | Availability | allowed downtime per month, recovery time objective |
51
+ | Consistency | which reads may be stale, and for how long |
52
+ | Scalability | growth factor the design must absorb without rework |
53
+ | Security | data classes handled, trust boundaries crossed |
54
+ | Operability | who is paged, what they can see, how they roll back |
55
+ | Changeability | which parts are expected to change often |
56
+ | Cost | monthly run cost ceiling, build effort ceiling |
57
+
58
+ **Constraints.** Things that are not up for debate: an existing platform, a
59
+ compliance rule, a deadline, the skills the team has today. Write them as
60
+ constraints so nobody spends an hour optimising them away.
61
+
62
+ **Assumptions.** What you believe but have not checked (traffic shape, data
63
+ volume, number of clients). Each one is a risk; mark the ones that would flip the
64
+ decision if they turned out wrong.
65
+
66
+ ## Step 2: Generate real options
67
+
68
+ Aim for three options, and make sure they differ in kind, not only in brand.
69
+ "Postgres versus MySQL" is one option with two vendors; "relational store versus
70
+ event log with projections versus keep the current document store and add an
71
+ index" is three.
72
+
73
+ Always include:
74
+
75
+ - **Do the least.** Extend what exists. It is often right, and it is the
76
+ baseline every other option must beat.
77
+ - **The option someone is excited about.** Give it a fair hearing in writing
78
+ instead of a hallway argument.
79
+ - **One option that optimises a different driver** than the favourite does.
80
+
81
+ Sketch each option at the level of boxes and arrows: components, who owns the
82
+ data, how requests and failures flow. If an option cannot be sketched, it is not
83
+ yet an option.
84
+
85
+ ## Step 3: Compare in a trade-off matrix
86
+
87
+ Score each option against each driver from Step 1. Use a small scale (for
88
+ example minus, zero, plus) and a sentence of evidence per cell; the evidence is
89
+ the valuable part, the score is a summary.
90
+
91
+ Example for a notes service that must add full-text search:
92
+
93
+ | Driver | A: DB full-text index | B: Dedicated search engine | C: Client-side search |
94
+ |--------|----------------------|----------------------------|-----------------------|
95
+ | p95 search under 300 ms on 5M notes | 0 - fine to ~10M rows per benchmark on staging | + - built for it | - - only works for small accounts |
96
+ | Operability | + - no new system | - - new cluster, new on-call runbook | + - nothing server-side |
97
+ | Consistency with writes | + - same transaction | 0 - seconds of lag via change feed | + - local |
98
+ | Build effort | + - days | - - weeks, plus sync pipeline | 0 - moderate, per client |
99
+
100
+ Read the matrix for two things:
101
+
102
+ 1. **Dominated options.** If one option is no better than another on any driver,
103
+ drop it and say why.
104
+ 2. **The deciding driver.** Usually one row decides. Name it explicitly in the
105
+ ADR; it is what a future reader needs to re-open the decision when that
106
+ driver changes.
107
+
108
+ ## Step 4: Judge reversibility
109
+
110
+ For each surviving option ask: if this turns out wrong in a year, what does
111
+ backing out cost?
45
112
 
46
- ## Validation Checklist
113
+ - **Two-way door.** Behind an interface, data easily migrated, few callers.
114
+ Decide quickly, bias to the simplest option.
115
+ - **One-way door.** Public contracts, persisted formats, vendor lock-in, team
116
+ boundaries. Slow down, prototype the riskiest assumption, get a second review.
47
117
 
48
- Before finalizing architecture:
118
+ You can often turn a one-way door into a two-way one cheaply: put an interface
119
+ in front of the new component, dual-write for a period, version the contract
120
+ from day one, keep the old path behind a flag. Note such mitigations as part of
121
+ the option, because they change its cost.
49
122
 
50
- - [ ] Requirements clearly understood
51
- - [ ] Constraints identified
52
- - [ ] Each decision has trade-off analysis
53
- - [ ] Simpler alternatives considered
54
- - [ ] ADRs written for significant decisions
55
- - [ ] Team expertise matches chosen patterns
123
+ ## Details on demand
56
124
 
57
- ## When to Use
58
- This skill is applicable to execute the workflow or actions described in the overview.
125
+ Load `references/adr-and-review.md` for step 5 (the ADR template), step 6 (fitness checks), questions for reviewing a design, and common failure shapes.
@@ -0,0 +1,76 @@
1
+ # ADRs, fitness checks and design review
2
+
3
+ Companion to `../SKILL.md` for the `architecture` skill.
4
+
5
+ ## Step 5: Record it as an ADR
6
+
7
+ Store ADRs next to the code (`docs/adr/NNNN-short-title.md`), numbered, never
8
+ rewritten. A reversed decision gets a new ADR that supersedes the old one.
9
+
10
+ ```markdown
11
+ # NNNN. Short imperative title
12
+
13
+ Status: proposed | accepted | superseded by NNNN
14
+ Date: YYYY-MM-DD
15
+ Deciders: names or roles
16
+
17
+ ## Situation
18
+ What changed, and the forces from Step 1 that bind (drivers with numbers,
19
+ constraints, risky assumptions).
20
+
21
+ ## Options considered
22
+ One paragraph per option, including "do the least".
23
+
24
+ ## Decision
25
+ The chosen option in one sentence, then the deciding driver.
26
+
27
+ ## Consequences
28
+ What becomes easier, what becomes harder, what new work this creates,
29
+ and which assumption would make us revisit it.
30
+
31
+ ## Checks
32
+ How we will know the decision still holds (see fitness checks).
33
+ ```
34
+
35
+ Keep an ADR short enough to read in five minutes. Link to benchmarks and
36
+ spikes rather than pasting them.
37
+
38
+ ## Step 6: Add fitness checks
39
+
40
+ A decision that nothing enforces decays. For each deciding driver, add an
41
+ automated or scheduled check that fails when the decision stops being true:
42
+
43
+ - **Dependency rules.** A test or lint rule that fails when the `orders` module
44
+ imports from `billing` internals, or when a layer skips another.
45
+ - **Performance budgets.** A load test in CI or a production SLO alert tied to
46
+ the latency number in the ADR.
47
+ - **Contract tests.** Consumer-driven tests that pin the public API shape.
48
+ - **Cost alerts.** A budget alarm at the ceiling the ADR assumed.
49
+ - **Review date.** For decisions resting on an unverified assumption, a dated
50
+ reminder to check it.
51
+
52
+ ## Reviewing someone else's design
53
+
54
+ Work through the same steps in order and ask for whatever is missing:
55
+
56
+ 1. Are the drivers measurable, and are there five or fewer?
57
+ 2. Was "do the least" considered and beaten on evidence?
58
+ 3. Does each claim in the comparison cite a measurement, a spike or a documented
59
+ limit, or is it opinion?
60
+ 4. Is the one-way-door part identified, and is there a mitigation?
61
+ 5. What fails first under ten times the load, and who notices?
62
+ 6. What is the rollback plan on day one?
63
+
64
+ ## Common failure shapes
65
+
66
+ - **Resume-driven design.** The option is interesting rather than needed. The
67
+ "do the least" row usually exposes it.
68
+ - **Premature distribution.** Splitting into services before the module
69
+ boundaries are proven inside one deployable. Prove the seam in-process first.
70
+ - **Hidden shared database.** Two services that write the same tables are one
71
+ service with two deploy pipelines.
72
+ - **Undocumented driver.** The decision was right, but nobody wrote down why, so
73
+ the next team reverses it when the context is gone.
74
+ - **Architecture by accretion.** No single decision was wrong, but nobody ever
75
+ recorded the cumulative shape. A periodic diagram-plus-ADR-index review
76
+ catches this.
@@ -1,6 +1,8 @@
1
1
  ---
2
2
  name: authentication
3
3
  description: "Implement iOS authentication flows with AuthenticationServices and LocalAuthentication. Use when building Sign in with Apple, passkey/WebAuthn registration or sign-in with ASAuthorizationPlatformPublicKeyCredentialProvider, ASAuthorizationController credential state and revocation handling, ASWebAuthenticationSession OAuth or third-party login, Password AutoFill, identity-token server validation, or local biometric re-authentication with LAContext."
4
+ metadata:
5
+ source: "dpearson2699/swift-ios-skills (PolyForm Perimeter 1.0.0)"
4
6
  ---
5
7
 
6
8
  # Authentication
@@ -1,6 +1,8 @@
1
1
  ---
2
2
  name: avkit
3
3
  description: "Create media playback experiences using AVKit. Use when adding video players with AVPlayerViewController, enabling Picture-in-Picture, routing media with AirPlay, using SwiftUI VideoPlayer views, configuring transport controls, displaying subtitles and closed captions, or integrating AVFoundation playback with system UI."
4
+ metadata:
5
+ source: "dpearson2699/swift-ios-skills (PolyForm Perimeter 1.0.0)"
4
6
  ---
5
7
 
6
8
  # AVKit
@@ -1,8 +1,9 @@
1
1
  ---
2
2
  name: background-processing
3
3
  description: "Schedule and execute background work on iOS using BGTaskScheduler. Use when registering BGAppRefreshTask for short background fetches, BGProcessingTask for long-running maintenance, BGContinuedProcessingTask (iOS 26+) for foreground-started work that continues in background, background URLSession downloads, or background push notifications. Covers Info.plist configuration, expiration handling, task completion, and debugging with simulated launches."
4
+ metadata:
5
+ source: "dpearson2699/swift-ios-skills (PolyForm Perimeter 1.0.0)"
4
6
  ---
5
-
6
7
  # Background Processing
7
8
 
8
9
  Register, schedule, and execute background work on iOS using the BackgroundTasks
@@ -1,10 +1,11 @@
1
1
  ---
2
2
  name: backlog
3
- version: 1.0.0
4
- description: "The engineering backlog registry for deferred-but-approved work in this codebase. Every job the user defers ('defer it', 'add it to the list', 'later', 'not now') lands HERE with its full spec, origin, and unblock condition, so deferral never means loss. Load when the user defers work, asks 'what's on the backlog / the list', says 'work the backlog' / 'pick up <item>', or when completing an item. The bundled BACKLOG.md is the registry; entries move deferred -> ready -> in-progress -> done, and the registry is re-audited against live code - a rotted entry deletes, a done record retires once what it taught is re-homed in the skill that owns it. This records WHAT IS OWED; git history records what happened."
3
+ description: "The engineering backlog registry for deferred-but-approved work: each deferred job lands here with its spec, origin and unblock condition. Use when the user says 'defer it', 'add it to the list', 'later' or 'not now', asks what is on the backlog, says 'pick up {id}', or completes an item. BACKLOG.md is the registry; entries move deferred, ready, in-progress, done, and a re-audit deletes rotted ones."
5
4
  user-invocable: true
6
5
  argument-hint: [list | add | pick <id> | done <id> | re-audit]
7
6
  allowed-tools: Read, Grep, Glob, Edit, Write
7
+ metadata:
8
+ version: 1.0.0
8
9
  ---
9
10
 
10
11
  # backlog - deferred work, kept whole
@@ -1,6 +1,8 @@
1
1
  ---
2
2
  name: callkit-voip
3
3
  description: "Implement VoIP calling with CallKit and PushKit. Use when building incoming/outgoing call flows, registering for VoIP push notifications, configuring CXProvider and CXCallController, handling call actions, coordinating audio sessions, or creating Call Directory extensions for caller ID and call blocking."
4
+ metadata:
5
+ source: "dpearson2699/swift-ios-skills (PolyForm Perimeter 1.0.0)"
4
6
  ---
5
7
 
6
8
  # CallKit
@@ -1,5 +1,5 @@
1
1
  {
2
- "skill_name": "callkit",
2
+ "skill_name": "callkit-voip",
3
3
  "evals": [
4
4
  {
5
5
  "id": 0,
@@ -1,8 +1,9 @@
1
1
  ---
2
2
  name: ci-cd-pipelines
3
3
  description: "CI/CD pipelines: GitHub Actions workflows, Docker multi-stage builds, environment management, secret management, deployment strategies. Use when setting up or fixing a build, test or deploy pipeline."
4
- tags: [ci-cd, github-actions, docker, deployment, devops, backend]
5
- version: "2025.1"
4
+ metadata:
5
+ tags: [ci-cd, github-actions, docker, deployment, devops, backend]
6
+ version: "2025.1"
6
7
  ---
7
8
 
8
9
  # CI/CD Pipelines
@@ -1,94 +1,196 @@
1
1
  ---
2
2
  name: clean-code
3
- description: "This skill embodies the principles of \"Clean Code\" by Robert C. Martin (Uncle Bob). Use it to transform \"code that works\" into \"code that is clean.\""
4
- risk: safe
5
- source: "ClawForge (https://github.com/jackjin1997/ClawForge)"
6
- date_added: "2026-02-27"
3
+ description: "Readability checks for code in any language: names, function focus, control flow, side effects, errors, comments, duplication. Use when writing, refactoring or reviewing code for quality and naming."
4
+ metadata:
5
+ risk: safe
6
+ source: multi-agent-pipeline
7
+ date_added: "2026-09-24"
7
8
  ---
8
9
 
9
- # Clean Code Skill
10
-
11
- This skill embodies the principles of "Clean Code" by Robert C. Martin (Uncle Bob). Use it to transform "code that works" into "code that is clean."
12
-
13
- ## 🧠 Core Philosophy
14
- > "Code is clean if it can be read, and enhanced by a developer other than its original author." - Grady Booch
15
-
16
- ## When to Use
17
- Use this skill when:
18
- - **Writing new code**: To ensure high quality from the start.
19
- - **Reviewing Pull Requests**: To provide constructive, principle-based feedback.
20
- - **Refactoring legacy code**: To identify and remove code smells.
21
- - **Improving team standards**: To align on industry-standard best practices.
22
-
23
- ## 1. Meaningful Names
24
- - **Use Intention-Revealing Names**: `elapsedTimeInDays` instead of `d`.
25
- - **Avoid Disinformation**: Don't use `accountList` if it's actually a `Map`.
26
- - **Make Meaningful Distinctions**: Avoid `ProductData` vs `ProductInfo`.
27
- - **Use Pronounceable/Searchable Names**: Avoid `genymdhms`.
28
- - **Class Names**: Use nouns (`Customer`, `WikiPage`). Avoid `Manager`, `Data`.
29
- - **Method Names**: Use verbs (`postPayment`, `deletePage`).
30
-
31
- ## 2. Functions
32
- - **Small!**: Functions should be shorter than you think.
33
- - **Do One Thing**: A function should do only one thing, and do it well.
34
- - **One Level of Abstraction**: Don't mix high-level business logic with low-level details (like regex).
35
- - **Descriptive Names**: `isPasswordValid` is better than `check`.
36
- - **Arguments**: 0 is ideal, 1-2 is okay, 3+ requires a very strong justification.
37
- - **No Side Effects**: Functions shouldn't secretly change global state.
38
-
39
- ## 3. Comments
40
- - **Don't Comment Bad Code - Rewrite It**: Most comments are a sign of failure to express ourselves in code.
41
- - **Explain Yourself in Code**:
42
- ```python
43
- # Check if employee is eligible for full benefits
44
- if employee.flags & HOURLY and employee.age > 65:
45
- ```
46
- vs
47
- ```python
48
- if employee.isEligibleForFullBenefits():
49
- ```
50
- - **Good Comments**: Legal, Informative (regex intent), Clarification (external libraries), TODOs.
51
- - **Bad Comments**: Mumbling, Redundant, Misleading, Mandated, Noise, Position Markers.
52
-
53
- ## 4. Formatting
54
- - **The Newspaper Metaphor**: High-level concepts at the top, details at the bottom.
55
- - **Vertical Density**: Related lines should be close to each other.
56
- - **Distance**: Variables should be declared near their usage.
57
- - **Indentation**: Essential for structural readability.
58
-
59
- ## 5. Objects and Data Structures
60
- - **Data Abstraction**: Hide the implementation behind interfaces.
61
- - **The Law of Demeter**: A module should not know about the innards of the objects it manipulates. Avoid `a.getB().getC().doSomething()`.
62
- - **Data Transfer Objects (DTO)**: Classes with public variables and no functions.
63
-
64
- ## 6. Error Handling
65
- - **Use Exceptions instead of Return Codes**: Keeps logic clean.
66
- - **Write Try-Catch-Finally First**: Defines the scope of the operation.
67
- - **Don't Return Null**: It forces the caller to check for null every time.
68
- - **Don't Pass Null**: Leads to `NullPointerException`.
69
-
70
- ## 7. Unit Tests
71
- - **The Three Laws of TDD**:
72
- 1. Don't write production code until you have a failing unit test.
73
- 2. Don't write more of a unit test than is sufficient to fail.
74
- 3. Don't write more production code than is sufficient to pass the failing test.
75
- - **F.I.R.S.T. Principles**: Fast, Independent, Repeatable, Self-Validating, Timely.
76
-
77
- ## 8. Classes
78
- - **Small!**: Classes should have a single responsibility (SRP).
79
- - **The Stepdown Rule**: We want the code to read like a top-down narrative.
80
-
81
- ## 9. Smells and Heuristics
82
- - **Rigidity**: Hard to change.
83
- - **Fragility**: Breaks in many places.
84
- - **Immobility**: Hard to reuse.
85
- - **Viscosity**: Hard to do the right thing.
86
- - **Needless Complexity/Repetition**.
87
-
88
- ## 🛠️ Implementation Checklist
89
- - [ ] Is this function smaller than 20 lines?
90
- - [ ] Does this function do exactly one thing?
91
- - [ ] Are all names searchable and intention-revealing?
92
- - [ ] Have I avoided comments by making the code clearer?
93
- - [ ] Am I passing too many arguments?
94
- - [ ] Is there a failing test for this change?
10
+ # Clean Code
11
+
12
+ Code is read far more often than it is written, and every later change starts
13
+ with someone working out what the current code does. This skill is a set of
14
+ questions to ask of a piece of code, in the order that finds the expensive
15
+ problems first, plus the move that fixes each one.
16
+
17
+ The repository's own conventions win. A linter rule, a module guide or a coding
18
+ standard registry that says otherwise overrides anything here; this skill fills
19
+ the gaps they leave.
20
+
21
+ ## Order of questions
22
+
23
+ Work from the outside in. A clear name on a muddled body is cheaper to fix than
24
+ a tidy body behind a misleading name, because callers only ever see the name.
25
+
26
+ 1. Does each name tell a caller what they get, without opening the body?
27
+ 2. Does each unit do one job at one level of detail?
28
+ 3. Can the control flow be followed top to bottom without holding state in mind?
29
+ 4. Is every change to state visible at the call site?
30
+ 5. Does every failure reach someone who can act on it?
31
+ 6. Does each comment say something the code cannot?
32
+ 7. Is each rule written down in exactly one place?
33
+ 8. Would a test fail if the behaviour broke?
34
+
35
+ ## 1. Names
36
+
37
+ - Name by role in this domain, not by type or storage: `overdueInvoices`, not
38
+ `invoiceList` or `data2`.
39
+ - A boolean reads as a claim: `isExpired`, `hasShippingAddress`, `canRetry`.
40
+ - A function that returns something is named for what it returns
41
+ (`remainingBalance()`); one that acts is named for the action (`cancelOrder()`).
42
+ - Units belong in the name when the type does not carry them: `timeoutSeconds`,
43
+ `distanceKm`.
44
+ - One word per concept across the codebase. If `fetch`, `load` and `get` all mean
45
+ "read from the network", pick one.
46
+ - Length follows scope: `i` is fine in a three-line loop; a module-level value
47
+ needs a full phrase.
48
+
49
+ ```python
50
+ # Before
51
+ def calc(d, f):
52
+ return d * (1 - f)
53
+
54
+ # After
55
+ def discounted_price(list_price: Decimal, discount_rate: Decimal) -> Decimal:
56
+ return list_price * (1 - discount_rate)
57
+ ```
58
+
59
+ ## 2. Units of work
60
+
61
+ - One job per function. The test: describe it in one sentence without "and" or
62
+ "then". If you cannot, split at the conjunction.
63
+ - One level of detail per function. A function that validates an order should
64
+ not also format a currency string; call a function that does.
65
+ - Few parameters. Three or more, or any boolean flag that switches behaviour,
66
+ usually means a missing type or two functions sharing a name.
67
+ - A body longer than a screen is a prompt to look for the seams, not a rule.
68
+
69
+ ```swift
70
+ // Before: the flag hides two behaviours
71
+ func export(_ report: Report, asPDF: Bool) -> Data
72
+
73
+ // After: two names, no flag
74
+ func exportPDF(_ report: Report) -> Data
75
+ func exportCSV(_ report: Report) -> Data
76
+ ```
77
+
78
+ ## 3. Control flow
79
+
80
+ - Handle the exits first. Guard clauses at the top keep the main path at one
81
+ indentation level.
82
+ - Replace a chain of `if`/`else if` on the same value with a `switch`/`match`
83
+ that the compiler can check for completeness.
84
+ - Name a compound condition: `let isEligible = age >= 18 && hasConsent` reads
85
+ better than the raw expression inside an `if`.
86
+ - Nesting past two levels almost always hides a function waiting to be extracted.
87
+
88
+ ```typescript
89
+ // Before
90
+ function shippingCost(order: Order): number {
91
+ if (order.items.length > 0) {
92
+ if (!order.isDigital) {
93
+ return order.weightKg * RATE_PER_KG;
94
+ }
95
+ }
96
+ return 0;
97
+ }
98
+
99
+ // After
100
+ function shippingCost(order: Order): number {
101
+ if (order.items.length === 0 || order.isDigital) return 0;
102
+ return order.weightKg * RATE_PER_KG;
103
+ }
104
+ ```
105
+
106
+ ## 4. State and side effects
107
+
108
+ - A function either answers a question or changes something. When one does both,
109
+ a caller who only wanted the answer triggers the change.
110
+ - Pass what a function needs; do not let it reach into globals, singletons or
111
+ the clock. Inject the dependency so a test can replace it.
112
+ - Prefer values that cannot change once built. Mutation belongs in a small,
113
+ named place.
114
+ - Keep a variable's scope as small as its use.
115
+
116
+ ## 5. Errors and edge values
117
+
118
+ - Fail where the problem is detected, with a message that names the input and
119
+ the expectation.
120
+ - Do not swallow an error to keep going. Catch it only where something useful
121
+ can be done: retry, fall back, or report to the user.
122
+ - Represent "no value" in the type (`Optional`, `Result`, a sealed type) instead
123
+ of returning a sentinel such as `-1`, an empty string or `null` by convention.
124
+ - Check the boundaries every time: empty input, one element, the maximum, and
125
+ values that are present but invalid.
126
+
127
+ ```kotlin
128
+ // Before: the caller cannot tell "not found" from "zero"
129
+ fun itemCount(orderId: String): Int = repository.find(orderId)?.items ?: 0
130
+
131
+ // After
132
+ fun itemCount(orderId: String): Int? = repository.find(orderId)?.items
133
+ ```
134
+
135
+ ## 6. Comments
136
+
137
+ - Write down why, never what. The code already says what it does; a comment that
138
+ repeats it goes stale the first time the code changes.
139
+ - A comment that explains a confusing block is a request to rename or extract
140
+ until the comment is unnecessary.
141
+ - Keep: the reason behind a non-obvious choice, a link to the spec or bug a
142
+ workaround exists for, the legal header a file must carry, and public API docs.
143
+ - Delete: commented-out code (version control keeps it), change logs inside the
144
+ file, and section banners that restate the structure.
145
+
146
+ ## 7. Duplication and abstraction
147
+
148
+ - A business rule written in two places will eventually disagree with itself.
149
+ Give it one home and call it.
150
+ - Two blocks that look alike but change for different reasons are not
151
+ duplication; merging them couples unrelated features.
152
+ - Wait for the third occurrence before extracting a general helper, unless the
153
+ repeated thing is a rule rather than a shape.
154
+ - An abstraction earns its place when it removes decisions from callers. One that
155
+ only forwards arguments adds a hop and a name to learn.
156
+
157
+ ## 8. Tests as the specification
158
+
159
+ - Each test states one behaviour in its name: `refundIsRejectedAfterShipment`.
160
+ - Arrange, act, assert, with the act step a single call.
161
+ - A test that cannot fail when the behaviour breaks is worse than none, because
162
+ it reports coverage that does not exist.
163
+ - Fast, isolated and repeatable: no network, no shared state between tests, no
164
+ dependence on the clock or execution order.
165
+
166
+ ## Problem to move
167
+
168
+ | Problem you see | Move |
169
+ |---|---|
170
+ | A name needs a comment to explain it | Rename |
171
+ | A block has a comment heading it | Extract a function named after the comment |
172
+ | A boolean parameter | Split into two functions, or pass an enum |
173
+ | Three or more related parameters | Introduce a parameter type |
174
+ | Deep nesting | Guard clauses, then extract the inner block |
175
+ | A `switch` on type repeated in several places | Move the behaviour onto the types |
176
+ | A literal with meaning (`86400`, `0.2`) | Named constant or configuration |
177
+ | The same rule in two places | Extract once, call from both |
178
+ | A function that reads and writes | Separate the query from the command |
179
+ | A hard-coded dependency | Inject it |
180
+
181
+ Refactor in small steps with the tests green between each, and keep a
182
+ behaviour change out of a refactoring commit.
183
+
184
+ ## Reporting in a review
185
+
186
+ For each finding give the location, what the problem is, why it costs the next
187
+ reader or maintainer, and the concrete change. Rank by cost: a misleading name
188
+ or a swallowed error outranks a long function, which outranks a style nit.
189
+ Leave formatting to the formatter and say nothing about it.
190
+
191
+ ## Out of scope
192
+
193
+ - Security weaknesses: use `security-review`.
194
+ - Speed and memory: profile first, then use the stack's performance skill.
195
+ - Module boundaries and system design: use `architecture`.
196
+ - Language style rules a linter enforces: follow the linter.
@@ -1,8 +1,9 @@
1
1
  ---
2
2
  name: cloudkit-sync
3
3
  description: "Implement, review, or improve CloudKit and iCloud sync in iOS/macOS apps. Use when working with CKContainer, CKRecord, CKQuery, CKSubscription, CKSyncEngine, CKShare, NSUbiquitousKeyValueStore, or iCloud Drive file coordination; when syncing SwiftData models via ModelConfiguration with cloudKitDatabase; when handling CKError codes for conflict resolution, network failures, or quota limits; or when checking iCloud account status before performing sync operations."
4
+ metadata:
5
+ source: "dpearson2699/swift-ios-skills (PolyForm Perimeter 1.0.0)"
4
6
  ---
5
-
6
7
  # CloudKit
7
8
 
8
9
  Sync data across devices using CloudKit, iCloud key-value storage, and iCloud
@@ -1,5 +1,5 @@
1
1
  {
2
- "skill_name": "cloudkit",
2
+ "skill_name": "cloudkit-sync",
3
3
  "evals": [
4
4
  {
5
5
  "id": 1,