@wazir-dev/cli 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (629) hide show
  1. package/AGENTS.md +111 -0
  2. package/CHANGELOG.md +14 -0
  3. package/CONTRIBUTING.md +101 -0
  4. package/LICENSE +21 -0
  5. package/README.md +314 -0
  6. package/assets/composition-engine.mmd +34 -0
  7. package/assets/demo-script.sh +17 -0
  8. package/assets/logo-dark.svg +14 -0
  9. package/assets/logo.svg +14 -0
  10. package/assets/pipeline.mmd +39 -0
  11. package/assets/record-demo.sh +51 -0
  12. package/docs/README.md +51 -0
  13. package/docs/adapters/context-mode.md +60 -0
  14. package/docs/concepts/architecture.md +87 -0
  15. package/docs/concepts/artifact-model.md +60 -0
  16. package/docs/concepts/composition-engine.md +36 -0
  17. package/docs/concepts/indexing-and-recall.md +160 -0
  18. package/docs/concepts/observability.md +41 -0
  19. package/docs/concepts/roles-and-workflows.md +59 -0
  20. package/docs/concepts/terminology-policy.md +27 -0
  21. package/docs/getting-started/01-installation.md +78 -0
  22. package/docs/getting-started/02-first-run.md +102 -0
  23. package/docs/getting-started/03-adding-to-project.md +15 -0
  24. package/docs/getting-started/04-host-setup.md +15 -0
  25. package/docs/guides/ci-integration.md +15 -0
  26. package/docs/guides/creating-skills.md +15 -0
  27. package/docs/guides/expertise-module-authoring.md +15 -0
  28. package/docs/guides/hook-development.md +15 -0
  29. package/docs/guides/memory-and-learnings.md +34 -0
  30. package/docs/guides/multi-host-export.md +15 -0
  31. package/docs/guides/troubleshooting.md +101 -0
  32. package/docs/guides/writing-custom-roles.md +15 -0
  33. package/docs/plans/2026-03-15-cli-pipeline-integration-design.md +592 -0
  34. package/docs/plans/2026-03-15-cli-pipeline-integration-plan.md +598 -0
  35. package/docs/plans/2026-03-15-docs-enforcement-plan.md +238 -0
  36. package/docs/readmes/INDEX.md +99 -0
  37. package/docs/readmes/features/expertise/README.md +171 -0
  38. package/docs/readmes/features/exports/README.md +222 -0
  39. package/docs/readmes/features/hooks/README.md +103 -0
  40. package/docs/readmes/features/hooks/loop-cap-guard.md +133 -0
  41. package/docs/readmes/features/hooks/post-tool-capture.md +121 -0
  42. package/docs/readmes/features/hooks/post-tool-lint.md +130 -0
  43. package/docs/readmes/features/hooks/pre-compact-summary.md +122 -0
  44. package/docs/readmes/features/hooks/pre-tool-capture-route.md +100 -0
  45. package/docs/readmes/features/hooks/protected-path-write-guard.md +128 -0
  46. package/docs/readmes/features/hooks/session-start.md +119 -0
  47. package/docs/readmes/features/hooks/stop-handoff-harvest.md +125 -0
  48. package/docs/readmes/features/roles/README.md +157 -0
  49. package/docs/readmes/features/roles/clarifier.md +152 -0
  50. package/docs/readmes/features/roles/content-author.md +190 -0
  51. package/docs/readmes/features/roles/designer.md +193 -0
  52. package/docs/readmes/features/roles/executor.md +184 -0
  53. package/docs/readmes/features/roles/learner.md +210 -0
  54. package/docs/readmes/features/roles/planner.md +182 -0
  55. package/docs/readmes/features/roles/researcher.md +164 -0
  56. package/docs/readmes/features/roles/reviewer.md +184 -0
  57. package/docs/readmes/features/roles/specifier.md +162 -0
  58. package/docs/readmes/features/roles/verifier.md +215 -0
  59. package/docs/readmes/features/schemas/README.md +178 -0
  60. package/docs/readmes/features/skills/README.md +63 -0
  61. package/docs/readmes/features/skills/brainstorming.md +96 -0
  62. package/docs/readmes/features/skills/debugging.md +148 -0
  63. package/docs/readmes/features/skills/design.md +120 -0
  64. package/docs/readmes/features/skills/prepare-next.md +109 -0
  65. package/docs/readmes/features/skills/run-audit.md +159 -0
  66. package/docs/readmes/features/skills/scan-project.md +109 -0
  67. package/docs/readmes/features/skills/self-audit.md +176 -0
  68. package/docs/readmes/features/skills/tdd.md +137 -0
  69. package/docs/readmes/features/skills/using-skills.md +92 -0
  70. package/docs/readmes/features/skills/verification.md +120 -0
  71. package/docs/readmes/features/skills/writing-plans.md +104 -0
  72. package/docs/readmes/features/tooling/README.md +320 -0
  73. package/docs/readmes/features/workflows/README.md +186 -0
  74. package/docs/readmes/features/workflows/author.md +181 -0
  75. package/docs/readmes/features/workflows/clarify.md +154 -0
  76. package/docs/readmes/features/workflows/design-review.md +171 -0
  77. package/docs/readmes/features/workflows/design.md +169 -0
  78. package/docs/readmes/features/workflows/discover.md +162 -0
  79. package/docs/readmes/features/workflows/execute.md +173 -0
  80. package/docs/readmes/features/workflows/learn.md +167 -0
  81. package/docs/readmes/features/workflows/plan-review.md +165 -0
  82. package/docs/readmes/features/workflows/plan.md +170 -0
  83. package/docs/readmes/features/workflows/prepare-next.md +167 -0
  84. package/docs/readmes/features/workflows/review.md +169 -0
  85. package/docs/readmes/features/workflows/run-audit.md +191 -0
  86. package/docs/readmes/features/workflows/spec-challenge.md +159 -0
  87. package/docs/readmes/features/workflows/specify.md +160 -0
  88. package/docs/readmes/features/workflows/verify.md +177 -0
  89. package/docs/readmes/packages/README.md +50 -0
  90. package/docs/readmes/packages/ajv.md +117 -0
  91. package/docs/readmes/packages/context-mode.md +118 -0
  92. package/docs/readmes/packages/gray-matter.md +116 -0
  93. package/docs/readmes/packages/node-test.md +137 -0
  94. package/docs/readmes/packages/yaml.md +112 -0
  95. package/docs/reference/configuration-reference.md +159 -0
  96. package/docs/reference/expertise-index.md +52 -0
  97. package/docs/reference/git-flow.md +43 -0
  98. package/docs/reference/hooks.md +87 -0
  99. package/docs/reference/host-exports.md +50 -0
  100. package/docs/reference/launch-checklist.md +172 -0
  101. package/docs/reference/marketplace-listings.md +76 -0
  102. package/docs/reference/release-process.md +34 -0
  103. package/docs/reference/roles-reference.md +77 -0
  104. package/docs/reference/skills.md +33 -0
  105. package/docs/reference/templates.md +29 -0
  106. package/docs/reference/tooling-cli.md +94 -0
  107. package/docs/truth-claims.yaml +222 -0
  108. package/expertise/PROGRESS.md +63 -0
  109. package/expertise/README.md +18 -0
  110. package/expertise/antipatterns/PROGRESS.md +56 -0
  111. package/expertise/antipatterns/backend/api-design-antipatterns.md +1271 -0
  112. package/expertise/antipatterns/backend/auth-antipatterns.md +1195 -0
  113. package/expertise/antipatterns/backend/caching-antipatterns.md +622 -0
  114. package/expertise/antipatterns/backend/database-antipatterns.md +1038 -0
  115. package/expertise/antipatterns/backend/index.md +24 -0
  116. package/expertise/antipatterns/backend/microservices-antipatterns.md +850 -0
  117. package/expertise/antipatterns/code/architecture-antipatterns.md +919 -0
  118. package/expertise/antipatterns/code/async-antipatterns.md +622 -0
  119. package/expertise/antipatterns/code/code-smells.md +1186 -0
  120. package/expertise/antipatterns/code/dependency-antipatterns.md +1209 -0
  121. package/expertise/antipatterns/code/error-handling-antipatterns.md +1360 -0
  122. package/expertise/antipatterns/code/index.md +27 -0
  123. package/expertise/antipatterns/code/naming-and-abstraction.md +1118 -0
  124. package/expertise/antipatterns/code/state-management-antipatterns.md +1076 -0
  125. package/expertise/antipatterns/code/testing-antipatterns.md +1053 -0
  126. package/expertise/antipatterns/design/accessibility-antipatterns.md +1136 -0
  127. package/expertise/antipatterns/design/dark-patterns.md +1121 -0
  128. package/expertise/antipatterns/design/index.md +22 -0
  129. package/expertise/antipatterns/design/ui-antipatterns.md +1202 -0
  130. package/expertise/antipatterns/design/ux-antipatterns.md +680 -0
  131. package/expertise/antipatterns/frontend/css-layout-antipatterns.md +691 -0
  132. package/expertise/antipatterns/frontend/flutter-antipatterns.md +1827 -0
  133. package/expertise/antipatterns/frontend/index.md +23 -0
  134. package/expertise/antipatterns/frontend/mobile-antipatterns.md +573 -0
  135. package/expertise/antipatterns/frontend/react-antipatterns.md +1128 -0
  136. package/expertise/antipatterns/frontend/spa-antipatterns.md +1235 -0
  137. package/expertise/antipatterns/index.md +31 -0
  138. package/expertise/antipatterns/performance/index.md +20 -0
  139. package/expertise/antipatterns/performance/performance-antipatterns.md +1013 -0
  140. package/expertise/antipatterns/performance/premature-optimization.md +623 -0
  141. package/expertise/antipatterns/performance/scaling-antipatterns.md +785 -0
  142. package/expertise/antipatterns/process/ai-coding-antipatterns.md +853 -0
  143. package/expertise/antipatterns/process/code-review-antipatterns.md +656 -0
  144. package/expertise/antipatterns/process/deployment-antipatterns.md +920 -0
  145. package/expertise/antipatterns/process/index.md +23 -0
  146. package/expertise/antipatterns/process/technical-debt-antipatterns.md +647 -0
  147. package/expertise/antipatterns/security/index.md +20 -0
  148. package/expertise/antipatterns/security/secrets-antipatterns.md +849 -0
  149. package/expertise/antipatterns/security/security-theater.md +843 -0
  150. package/expertise/antipatterns/security/vulnerability-patterns.md +801 -0
  151. package/expertise/architecture/PROGRESS.md +70 -0
  152. package/expertise/architecture/data/caching-architecture.md +671 -0
  153. package/expertise/architecture/data/data-consistency.md +574 -0
  154. package/expertise/architecture/data/data-modeling.md +536 -0
  155. package/expertise/architecture/data/event-streams-and-queues.md +634 -0
  156. package/expertise/architecture/data/index.md +25 -0
  157. package/expertise/architecture/data/search-architecture.md +663 -0
  158. package/expertise/architecture/data/sql-vs-nosql.md +708 -0
  159. package/expertise/architecture/decisions/architecture-decision-records.md +640 -0
  160. package/expertise/architecture/decisions/build-vs-buy.md +616 -0
  161. package/expertise/architecture/decisions/index.md +23 -0
  162. package/expertise/architecture/decisions/monolith-to-microservices.md +790 -0
  163. package/expertise/architecture/decisions/technology-selection.md +616 -0
  164. package/expertise/architecture/distributed/cap-theorem-and-tradeoffs.md +800 -0
  165. package/expertise/architecture/distributed/circuit-breaker-bulkhead.md +741 -0
  166. package/expertise/architecture/distributed/consensus-and-coordination.md +796 -0
  167. package/expertise/architecture/distributed/distributed-systems-fundamentals.md +564 -0
  168. package/expertise/architecture/distributed/idempotency-and-retry.md +796 -0
  169. package/expertise/architecture/distributed/index.md +25 -0
  170. package/expertise/architecture/distributed/saga-pattern.md +797 -0
  171. package/expertise/architecture/foundations/architectural-thinking.md +460 -0
  172. package/expertise/architecture/foundations/coupling-and-cohesion.md +770 -0
  173. package/expertise/architecture/foundations/design-principles-solid.md +649 -0
  174. package/expertise/architecture/foundations/domain-driven-design.md +719 -0
  175. package/expertise/architecture/foundations/index.md +25 -0
  176. package/expertise/architecture/foundations/separation-of-concerns.md +472 -0
  177. package/expertise/architecture/foundations/twelve-factor-app.md +797 -0
  178. package/expertise/architecture/index.md +34 -0
  179. package/expertise/architecture/integration/api-design-graphql.md +638 -0
  180. package/expertise/architecture/integration/api-design-grpc.md +804 -0
  181. package/expertise/architecture/integration/api-design-rest.md +892 -0
  182. package/expertise/architecture/integration/index.md +25 -0
  183. package/expertise/architecture/integration/third-party-integration.md +795 -0
  184. package/expertise/architecture/integration/webhooks-and-callbacks.md +1152 -0
  185. package/expertise/architecture/integration/websockets-realtime.md +791 -0
  186. package/expertise/architecture/mobile-architecture/index.md +22 -0
  187. package/expertise/architecture/mobile-architecture/mobile-app-architecture.md +780 -0
  188. package/expertise/architecture/mobile-architecture/mobile-backend-for-frontend.md +670 -0
  189. package/expertise/architecture/mobile-architecture/offline-first.md +719 -0
  190. package/expertise/architecture/mobile-architecture/push-and-sync.md +782 -0
  191. package/expertise/architecture/patterns/cqrs-event-sourcing.md +717 -0
  192. package/expertise/architecture/patterns/event-driven.md +797 -0
  193. package/expertise/architecture/patterns/hexagonal-clean-architecture.md +870 -0
  194. package/expertise/architecture/patterns/index.md +27 -0
  195. package/expertise/architecture/patterns/layered-architecture.md +736 -0
  196. package/expertise/architecture/patterns/microservices.md +753 -0
  197. package/expertise/architecture/patterns/modular-monolith.md +692 -0
  198. package/expertise/architecture/patterns/monolith.md +626 -0
  199. package/expertise/architecture/patterns/plugin-architecture.md +735 -0
  200. package/expertise/architecture/patterns/serverless.md +780 -0
  201. package/expertise/architecture/scaling/database-scaling.md +615 -0
  202. package/expertise/architecture/scaling/feature-flags-and-rollouts.md +757 -0
  203. package/expertise/architecture/scaling/horizontal-vs-vertical.md +606 -0
  204. package/expertise/architecture/scaling/index.md +24 -0
  205. package/expertise/architecture/scaling/multi-tenancy.md +800 -0
  206. package/expertise/architecture/scaling/stateless-design.md +787 -0
  207. package/expertise/backend/embedded-firmware.md +625 -0
  208. package/expertise/backend/go.md +853 -0
  209. package/expertise/backend/index.md +24 -0
  210. package/expertise/backend/java-spring.md +448 -0
  211. package/expertise/backend/node-typescript.md +625 -0
  212. package/expertise/backend/python-fastapi.md +724 -0
  213. package/expertise/backend/rust.md +458 -0
  214. package/expertise/backend/solidity.md +711 -0
  215. package/expertise/composition-map.yaml +443 -0
  216. package/expertise/content/foundations/content-modeling.md +395 -0
  217. package/expertise/content/foundations/editorial-standards.md +449 -0
  218. package/expertise/content/foundations/index.md +24 -0
  219. package/expertise/content/foundations/microcopy.md +455 -0
  220. package/expertise/content/foundations/terminology-governance.md +509 -0
  221. package/expertise/content/index.md +34 -0
  222. package/expertise/content/patterns/accessibility-copy.md +518 -0
  223. package/expertise/content/patterns/index.md +24 -0
  224. package/expertise/content/patterns/notification-content.md +433 -0
  225. package/expertise/content/patterns/sample-content.md +486 -0
  226. package/expertise/content/patterns/state-copy.md +439 -0
  227. package/expertise/design/PROGRESS.md +58 -0
  228. package/expertise/design/disciplines/dark-mode-theming.md +577 -0
  229. package/expertise/design/disciplines/design-systems.md +595 -0
  230. package/expertise/design/disciplines/index.md +25 -0
  231. package/expertise/design/disciplines/information-architecture.md +800 -0
  232. package/expertise/design/disciplines/interaction-design.md +788 -0
  233. package/expertise/design/disciplines/responsive-design.md +552 -0
  234. package/expertise/design/disciplines/usability-testing.md +516 -0
  235. package/expertise/design/disciplines/user-research.md +792 -0
  236. package/expertise/design/foundations/accessibility-design.md +796 -0
  237. package/expertise/design/foundations/color-theory.md +797 -0
  238. package/expertise/design/foundations/iconography.md +795 -0
  239. package/expertise/design/foundations/index.md +26 -0
  240. package/expertise/design/foundations/motion-and-animation.md +653 -0
  241. package/expertise/design/foundations/rtl-design.md +585 -0
  242. package/expertise/design/foundations/spacing-and-layout.md +607 -0
  243. package/expertise/design/foundations/typography.md +800 -0
  244. package/expertise/design/foundations/visual-hierarchy.md +761 -0
  245. package/expertise/design/index.md +32 -0
  246. package/expertise/design/patterns/authentication-flows.md +474 -0
  247. package/expertise/design/patterns/content-consumption.md +789 -0
  248. package/expertise/design/patterns/data-display.md +618 -0
  249. package/expertise/design/patterns/e-commerce.md +1494 -0
  250. package/expertise/design/patterns/feedback-and-states.md +642 -0
  251. package/expertise/design/patterns/forms-and-input.md +819 -0
  252. package/expertise/design/patterns/gamification.md +801 -0
  253. package/expertise/design/patterns/index.md +31 -0
  254. package/expertise/design/patterns/microinteractions.md +449 -0
  255. package/expertise/design/patterns/navigation.md +800 -0
  256. package/expertise/design/patterns/notifications.md +705 -0
  257. package/expertise/design/patterns/onboarding.md +700 -0
  258. package/expertise/design/patterns/search-and-filter.md +601 -0
  259. package/expertise/design/patterns/settings-and-preferences.md +768 -0
  260. package/expertise/design/patterns/social-and-community.md +748 -0
  261. package/expertise/design/platforms/desktop-native.md +612 -0
  262. package/expertise/design/platforms/index.md +25 -0
  263. package/expertise/design/platforms/mobile-android.md +825 -0
  264. package/expertise/design/platforms/mobile-cross-platform.md +983 -0
  265. package/expertise/design/platforms/mobile-ios.md +699 -0
  266. package/expertise/design/platforms/tablet.md +794 -0
  267. package/expertise/design/platforms/web-dashboard.md +790 -0
  268. package/expertise/design/platforms/web-responsive.md +550 -0
  269. package/expertise/design/psychology/behavioral-nudges.md +449 -0
  270. package/expertise/design/psychology/cognitive-load.md +1191 -0
  271. package/expertise/design/psychology/error-psychology.md +778 -0
  272. package/expertise/design/psychology/index.md +22 -0
  273. package/expertise/design/psychology/persuasive-design.md +736 -0
  274. package/expertise/design/psychology/user-mental-models.md +623 -0
  275. package/expertise/design/tooling/open-pencil.md +266 -0
  276. package/expertise/frontend/angular.md +1073 -0
  277. package/expertise/frontend/desktop-electron.md +546 -0
  278. package/expertise/frontend/flutter.md +782 -0
  279. package/expertise/frontend/index.md +27 -0
  280. package/expertise/frontend/native-android.md +409 -0
  281. package/expertise/frontend/native-ios.md +490 -0
  282. package/expertise/frontend/react-native.md +1160 -0
  283. package/expertise/frontend/react.md +808 -0
  284. package/expertise/frontend/vue.md +1089 -0
  285. package/expertise/humanize/domain-rules-code.md +79 -0
  286. package/expertise/humanize/domain-rules-content.md +67 -0
  287. package/expertise/humanize/domain-rules-technical-docs.md +56 -0
  288. package/expertise/humanize/index.md +35 -0
  289. package/expertise/humanize/self-audit-checklist.md +87 -0
  290. package/expertise/humanize/sentence-patterns.md +218 -0
  291. package/expertise/humanize/vocabulary-blacklist.md +105 -0
  292. package/expertise/i18n/PROGRESS.md +65 -0
  293. package/expertise/i18n/advanced/accessibility-and-i18n.md +28 -0
  294. package/expertise/i18n/advanced/bidirectional-text-algorithm.md +38 -0
  295. package/expertise/i18n/advanced/complex-scripts.md +30 -0
  296. package/expertise/i18n/advanced/performance-and-i18n.md +27 -0
  297. package/expertise/i18n/advanced/testing-i18n.md +28 -0
  298. package/expertise/i18n/content/content-adaptation.md +23 -0
  299. package/expertise/i18n/content/locale-specific-formatting.md +23 -0
  300. package/expertise/i18n/content/machine-translation-integration.md +28 -0
  301. package/expertise/i18n/content/translation-management.md +29 -0
  302. package/expertise/i18n/foundations/date-time-calendars.md +67 -0
  303. package/expertise/i18n/foundations/i18n-architecture.md +272 -0
  304. package/expertise/i18n/foundations/locale-and-language-tags.md +79 -0
  305. package/expertise/i18n/foundations/numbers-currency-units.md +61 -0
  306. package/expertise/i18n/foundations/pluralization-and-gender.md +109 -0
  307. package/expertise/i18n/foundations/string-externalization.md +236 -0
  308. package/expertise/i18n/foundations/text-direction-bidi.md +241 -0
  309. package/expertise/i18n/foundations/unicode-and-encoding.md +86 -0
  310. package/expertise/i18n/index.md +38 -0
  311. package/expertise/i18n/platform/backend-i18n.md +31 -0
  312. package/expertise/i18n/platform/flutter-i18n.md +148 -0
  313. package/expertise/i18n/platform/native-android-i18n.md +36 -0
  314. package/expertise/i18n/platform/native-ios-i18n.md +36 -0
  315. package/expertise/i18n/platform/react-i18n.md +103 -0
  316. package/expertise/i18n/platform/web-css-i18n.md +81 -0
  317. package/expertise/i18n/rtl/arabic-specific.md +175 -0
  318. package/expertise/i18n/rtl/hebrew-specific.md +149 -0
  319. package/expertise/i18n/rtl/rtl-animations-and-transitions.md +111 -0
  320. package/expertise/i18n/rtl/rtl-forms-and-input.md +161 -0
  321. package/expertise/i18n/rtl/rtl-fundamentals.md +211 -0
  322. package/expertise/i18n/rtl/rtl-icons-and-images.md +181 -0
  323. package/expertise/i18n/rtl/rtl-layout-mirroring.md +252 -0
  324. package/expertise/i18n/rtl/rtl-navigation-and-gestures.md +107 -0
  325. package/expertise/i18n/rtl/rtl-testing-and-qa.md +147 -0
  326. package/expertise/i18n/rtl/rtl-typography.md +160 -0
  327. package/expertise/index.md +113 -0
  328. package/expertise/index.yaml +216 -0
  329. package/expertise/infrastructure/cloud-aws.md +597 -0
  330. package/expertise/infrastructure/cloud-gcp.md +599 -0
  331. package/expertise/infrastructure/cybersecurity.md +816 -0
  332. package/expertise/infrastructure/database-mongodb.md +447 -0
  333. package/expertise/infrastructure/database-postgres.md +400 -0
  334. package/expertise/infrastructure/devops-cicd.md +787 -0
  335. package/expertise/infrastructure/index.md +27 -0
  336. package/expertise/performance/PROGRESS.md +50 -0
  337. package/expertise/performance/backend/api-latency.md +1204 -0
  338. package/expertise/performance/backend/background-jobs.md +506 -0
  339. package/expertise/performance/backend/connection-pooling.md +1209 -0
  340. package/expertise/performance/backend/database-query-optimization.md +515 -0
  341. package/expertise/performance/backend/index.md +23 -0
  342. package/expertise/performance/backend/rate-limiting-and-throttling.md +971 -0
  343. package/expertise/performance/foundations/algorithmic-complexity.md +954 -0
  344. package/expertise/performance/foundations/caching-strategies.md +489 -0
  345. package/expertise/performance/foundations/concurrency-and-parallelism.md +847 -0
  346. package/expertise/performance/foundations/index.md +24 -0
  347. package/expertise/performance/foundations/measuring-and-profiling.md +440 -0
  348. package/expertise/performance/foundations/memory-management.md +964 -0
  349. package/expertise/performance/foundations/performance-budgets.md +1314 -0
  350. package/expertise/performance/index.md +31 -0
  351. package/expertise/performance/infrastructure/auto-scaling.md +1059 -0
  352. package/expertise/performance/infrastructure/cdn-and-edge.md +1081 -0
  353. package/expertise/performance/infrastructure/index.md +22 -0
  354. package/expertise/performance/infrastructure/load-balancing.md +1081 -0
  355. package/expertise/performance/infrastructure/observability.md +1079 -0
  356. package/expertise/performance/mobile/index.md +23 -0
  357. package/expertise/performance/mobile/mobile-animations.md +544 -0
  358. package/expertise/performance/mobile/mobile-memory-battery.md +416 -0
  359. package/expertise/performance/mobile/mobile-network.md +452 -0
  360. package/expertise/performance/mobile/mobile-rendering.md +599 -0
  361. package/expertise/performance/mobile/mobile-startup-time.md +505 -0
  362. package/expertise/performance/platform-specific/flutter-performance.md +647 -0
  363. package/expertise/performance/platform-specific/index.md +22 -0
  364. package/expertise/performance/platform-specific/node-performance.md +1307 -0
  365. package/expertise/performance/platform-specific/postgres-performance.md +1366 -0
  366. package/expertise/performance/platform-specific/react-performance.md +1403 -0
  367. package/expertise/performance/web/bundle-optimization.md +1239 -0
  368. package/expertise/performance/web/image-and-media.md +636 -0
  369. package/expertise/performance/web/index.md +24 -0
  370. package/expertise/performance/web/network-optimization.md +1133 -0
  371. package/expertise/performance/web/rendering-performance.md +1098 -0
  372. package/expertise/performance/web/ssr-and-hydration.md +918 -0
  373. package/expertise/performance/web/web-vitals.md +1374 -0
  374. package/expertise/quality/accessibility.md +985 -0
  375. package/expertise/quality/evidence-based-verification.md +499 -0
  376. package/expertise/quality/index.md +24 -0
  377. package/expertise/quality/ml-model-audit.md +614 -0
  378. package/expertise/quality/performance.md +600 -0
  379. package/expertise/quality/testing-api.md +891 -0
  380. package/expertise/quality/testing-mobile.md +496 -0
  381. package/expertise/quality/testing-web.md +849 -0
  382. package/expertise/security/PROGRESS.md +54 -0
  383. package/expertise/security/agentic-identity.md +540 -0
  384. package/expertise/security/compliance-frameworks.md +601 -0
  385. package/expertise/security/data/data-encryption.md +364 -0
  386. package/expertise/security/data/data-privacy-gdpr.md +692 -0
  387. package/expertise/security/data/database-security.md +1171 -0
  388. package/expertise/security/data/index.md +22 -0
  389. package/expertise/security/data/pii-handling.md +531 -0
  390. package/expertise/security/foundations/authentication.md +1041 -0
  391. package/expertise/security/foundations/authorization.md +603 -0
  392. package/expertise/security/foundations/cryptography.md +1001 -0
  393. package/expertise/security/foundations/index.md +25 -0
  394. package/expertise/security/foundations/owasp-top-10.md +1354 -0
  395. package/expertise/security/foundations/secrets-management.md +1217 -0
  396. package/expertise/security/foundations/secure-sdlc.md +700 -0
  397. package/expertise/security/foundations/supply-chain-security.md +698 -0
  398. package/expertise/security/index.md +31 -0
  399. package/expertise/security/infrastructure/cloud-security-aws.md +1296 -0
  400. package/expertise/security/infrastructure/cloud-security-gcp.md +1376 -0
  401. package/expertise/security/infrastructure/container-security.md +721 -0
  402. package/expertise/security/infrastructure/incident-response.md +1295 -0
  403. package/expertise/security/infrastructure/index.md +24 -0
  404. package/expertise/security/infrastructure/logging-and-monitoring.md +1618 -0
  405. package/expertise/security/infrastructure/network-security.md +1337 -0
  406. package/expertise/security/mobile/index.md +23 -0
  407. package/expertise/security/mobile/mobile-android-security.md +1218 -0
  408. package/expertise/security/mobile/mobile-binary-protection.md +1229 -0
  409. package/expertise/security/mobile/mobile-data-storage.md +1265 -0
  410. package/expertise/security/mobile/mobile-ios-security.md +1401 -0
  411. package/expertise/security/mobile/mobile-network-security.md +1520 -0
  412. package/expertise/security/smart-contract-security.md +594 -0
  413. package/expertise/security/testing/index.md +22 -0
  414. package/expertise/security/testing/penetration-testing.md +1258 -0
  415. package/expertise/security/testing/security-code-review.md +1765 -0
  416. package/expertise/security/testing/threat-modeling.md +1074 -0
  417. package/expertise/security/testing/vulnerability-scanning.md +1062 -0
  418. package/expertise/security/web/api-security.md +586 -0
  419. package/expertise/security/web/cors-and-headers.md +433 -0
  420. package/expertise/security/web/csrf.md +562 -0
  421. package/expertise/security/web/file-upload.md +1477 -0
  422. package/expertise/security/web/index.md +25 -0
  423. package/expertise/security/web/injection.md +1375 -0
  424. package/expertise/security/web/session-management.md +1101 -0
  425. package/expertise/security/web/xss.md +1158 -0
  426. package/exports/README.md +17 -0
  427. package/exports/hosts/claude/.claude/agents/clarifier.md +42 -0
  428. package/exports/hosts/claude/.claude/agents/content-author.md +63 -0
  429. package/exports/hosts/claude/.claude/agents/designer.md +55 -0
  430. package/exports/hosts/claude/.claude/agents/executor.md +55 -0
  431. package/exports/hosts/claude/.claude/agents/learner.md +51 -0
  432. package/exports/hosts/claude/.claude/agents/planner.md +53 -0
  433. package/exports/hosts/claude/.claude/agents/researcher.md +43 -0
  434. package/exports/hosts/claude/.claude/agents/reviewer.md +54 -0
  435. package/exports/hosts/claude/.claude/agents/specifier.md +47 -0
  436. package/exports/hosts/claude/.claude/agents/verifier.md +71 -0
  437. package/exports/hosts/claude/.claude/commands/author.md +42 -0
  438. package/exports/hosts/claude/.claude/commands/clarify.md +38 -0
  439. package/exports/hosts/claude/.claude/commands/design-review.md +46 -0
  440. package/exports/hosts/claude/.claude/commands/design.md +44 -0
  441. package/exports/hosts/claude/.claude/commands/discover.md +37 -0
  442. package/exports/hosts/claude/.claude/commands/execute.md +48 -0
  443. package/exports/hosts/claude/.claude/commands/learn.md +38 -0
  444. package/exports/hosts/claude/.claude/commands/plan-review.md +42 -0
  445. package/exports/hosts/claude/.claude/commands/plan.md +39 -0
  446. package/exports/hosts/claude/.claude/commands/prepare-next.md +37 -0
  447. package/exports/hosts/claude/.claude/commands/review.md +40 -0
  448. package/exports/hosts/claude/.claude/commands/run-audit.md +41 -0
  449. package/exports/hosts/claude/.claude/commands/spec-challenge.md +41 -0
  450. package/exports/hosts/claude/.claude/commands/specify.md +38 -0
  451. package/exports/hosts/claude/.claude/commands/verify.md +37 -0
  452. package/exports/hosts/claude/.claude/settings.json +34 -0
  453. package/exports/hosts/claude/CLAUDE.md +19 -0
  454. package/exports/hosts/claude/export.manifest.json +38 -0
  455. package/exports/hosts/claude/host-package.json +67 -0
  456. package/exports/hosts/codex/AGENTS.md +19 -0
  457. package/exports/hosts/codex/export.manifest.json +38 -0
  458. package/exports/hosts/codex/host-package.json +41 -0
  459. package/exports/hosts/cursor/.cursor/hooks.json +16 -0
  460. package/exports/hosts/cursor/.cursor/rules/wazir-core.mdc +19 -0
  461. package/exports/hosts/cursor/export.manifest.json +38 -0
  462. package/exports/hosts/cursor/host-package.json +42 -0
  463. package/exports/hosts/gemini/GEMINI.md +19 -0
  464. package/exports/hosts/gemini/export.manifest.json +38 -0
  465. package/exports/hosts/gemini/host-package.json +41 -0
  466. package/hooks/README.md +18 -0
  467. package/hooks/definitions/loop_cap_guard.yaml +21 -0
  468. package/hooks/definitions/post_tool_capture.yaml +24 -0
  469. package/hooks/definitions/pre_compact_summary.yaml +19 -0
  470. package/hooks/definitions/pre_tool_capture_route.yaml +19 -0
  471. package/hooks/definitions/protected_path_write_guard.yaml +19 -0
  472. package/hooks/definitions/session_start.yaml +19 -0
  473. package/hooks/definitions/stop_handoff_harvest.yaml +20 -0
  474. package/hooks/loop-cap-guard +17 -0
  475. package/hooks/post-tool-lint +36 -0
  476. package/hooks/protected-path-write-guard +17 -0
  477. package/hooks/session-start +41 -0
  478. package/llms-full.txt +2355 -0
  479. package/llms.txt +43 -0
  480. package/package.json +79 -0
  481. package/roles/README.md +20 -0
  482. package/roles/clarifier.md +42 -0
  483. package/roles/content-author.md +63 -0
  484. package/roles/designer.md +55 -0
  485. package/roles/executor.md +55 -0
  486. package/roles/learner.md +51 -0
  487. package/roles/planner.md +53 -0
  488. package/roles/researcher.md +43 -0
  489. package/roles/reviewer.md +54 -0
  490. package/roles/specifier.md +47 -0
  491. package/roles/verifier.md +71 -0
  492. package/schemas/README.md +24 -0
  493. package/schemas/accepted-learning.schema.json +20 -0
  494. package/schemas/author-artifact.schema.json +156 -0
  495. package/schemas/clarification.schema.json +19 -0
  496. package/schemas/design-artifact.schema.json +80 -0
  497. package/schemas/docs-claim.schema.json +18 -0
  498. package/schemas/export-manifest.schema.json +20 -0
  499. package/schemas/hook.schema.json +67 -0
  500. package/schemas/host-export-package.schema.json +18 -0
  501. package/schemas/implementation-plan.schema.json +19 -0
  502. package/schemas/proposed-learning.schema.json +19 -0
  503. package/schemas/research.schema.json +18 -0
  504. package/schemas/review.schema.json +29 -0
  505. package/schemas/run-manifest.schema.json +18 -0
  506. package/schemas/spec-challenge.schema.json +18 -0
  507. package/schemas/spec.schema.json +20 -0
  508. package/schemas/usage.schema.json +102 -0
  509. package/schemas/verification-proof.schema.json +29 -0
  510. package/schemas/wazir-manifest.schema.json +173 -0
  511. package/skills/README.md +40 -0
  512. package/skills/brainstorming/SKILL.md +77 -0
  513. package/skills/debugging/SKILL.md +50 -0
  514. package/skills/design/SKILL.md +61 -0
  515. package/skills/dispatching-parallel-agents/SKILL.md +128 -0
  516. package/skills/executing-plans/SKILL.md +70 -0
  517. package/skills/finishing-a-development-branch/SKILL.md +169 -0
  518. package/skills/humanize/SKILL.md +123 -0
  519. package/skills/init-pipeline/SKILL.md +124 -0
  520. package/skills/prepare-next/SKILL.md +20 -0
  521. package/skills/receiving-code-review/SKILL.md +123 -0
  522. package/skills/requesting-code-review/SKILL.md +105 -0
  523. package/skills/requesting-code-review/code-reviewer.md +108 -0
  524. package/skills/run-audit/SKILL.md +197 -0
  525. package/skills/scan-project/SKILL.md +41 -0
  526. package/skills/self-audit/SKILL.md +153 -0
  527. package/skills/subagent-driven-development/SKILL.md +154 -0
  528. package/skills/subagent-driven-development/code-quality-reviewer-prompt.md +26 -0
  529. package/skills/subagent-driven-development/implementer-prompt.md +102 -0
  530. package/skills/subagent-driven-development/spec-reviewer-prompt.md +61 -0
  531. package/skills/tdd/SKILL.md +23 -0
  532. package/skills/using-git-worktrees/SKILL.md +163 -0
  533. package/skills/using-skills/SKILL.md +95 -0
  534. package/skills/verification/SKILL.md +22 -0
  535. package/skills/wazir/SKILL.md +463 -0
  536. package/skills/writing-plans/SKILL.md +30 -0
  537. package/skills/writing-skills/SKILL.md +157 -0
  538. package/skills/writing-skills/anthropic-best-practices.md +122 -0
  539. package/skills/writing-skills/persuasion-principles.md +50 -0
  540. package/templates/README.md +20 -0
  541. package/templates/artifacts/README.md +10 -0
  542. package/templates/artifacts/accepted-learning.md +19 -0
  543. package/templates/artifacts/accepted-learning.template.json +12 -0
  544. package/templates/artifacts/author.md +74 -0
  545. package/templates/artifacts/author.template.json +19 -0
  546. package/templates/artifacts/clarification.md +21 -0
  547. package/templates/artifacts/clarification.template.json +12 -0
  548. package/templates/artifacts/execute-notes.md +19 -0
  549. package/templates/artifacts/implementation-plan.md +21 -0
  550. package/templates/artifacts/implementation-plan.template.json +11 -0
  551. package/templates/artifacts/learning-proposal.md +19 -0
  552. package/templates/artifacts/next-run-handoff.md +21 -0
  553. package/templates/artifacts/plan-review.md +19 -0
  554. package/templates/artifacts/proposed-learning.template.json +12 -0
  555. package/templates/artifacts/research.md +21 -0
  556. package/templates/artifacts/research.template.json +12 -0
  557. package/templates/artifacts/review-findings.md +19 -0
  558. package/templates/artifacts/review.template.json +11 -0
  559. package/templates/artifacts/run-manifest.template.json +8 -0
  560. package/templates/artifacts/spec-challenge.md +19 -0
  561. package/templates/artifacts/spec-challenge.template.json +11 -0
  562. package/templates/artifacts/spec.md +21 -0
  563. package/templates/artifacts/spec.template.json +12 -0
  564. package/templates/artifacts/verification-proof.md +19 -0
  565. package/templates/artifacts/verification-proof.template.json +11 -0
  566. package/templates/examples/accepted-learning.example.json +14 -0
  567. package/templates/examples/author.example.json +152 -0
  568. package/templates/examples/clarification.example.json +15 -0
  569. package/templates/examples/docs-claim.example.json +8 -0
  570. package/templates/examples/export-manifest.example.json +7 -0
  571. package/templates/examples/host-export-package.example.json +11 -0
  572. package/templates/examples/implementation-plan.example.json +17 -0
  573. package/templates/examples/proposed-learning.example.json +13 -0
  574. package/templates/examples/research.example.json +15 -0
  575. package/templates/examples/research.example.md +6 -0
  576. package/templates/examples/review.example.json +17 -0
  577. package/templates/examples/run-manifest.example.json +9 -0
  578. package/templates/examples/spec-challenge.example.json +14 -0
  579. package/templates/examples/spec.example.json +21 -0
  580. package/templates/examples/verification-proof.example.json +21 -0
  581. package/templates/examples/wazir-manifest.example.yaml +65 -0
  582. package/templates/task-definition-schema.md +99 -0
  583. package/tooling/README.md +20 -0
  584. package/tooling/src/adapters/context-mode.js +50 -0
  585. package/tooling/src/capture/command.js +376 -0
  586. package/tooling/src/capture/store.js +99 -0
  587. package/tooling/src/capture/usage.js +270 -0
  588. package/tooling/src/checks/branches.js +50 -0
  589. package/tooling/src/checks/brand-truth.js +110 -0
  590. package/tooling/src/checks/changelog.js +231 -0
  591. package/tooling/src/checks/command-registry.js +36 -0
  592. package/tooling/src/checks/commits.js +102 -0
  593. package/tooling/src/checks/docs-drift.js +103 -0
  594. package/tooling/src/checks/docs-truth.js +201 -0
  595. package/tooling/src/checks/runtime-surface.js +156 -0
  596. package/tooling/src/cli.js +116 -0
  597. package/tooling/src/command-options.js +56 -0
  598. package/tooling/src/commands/validate.js +320 -0
  599. package/tooling/src/doctor/command.js +91 -0
  600. package/tooling/src/export/command.js +77 -0
  601. package/tooling/src/export/compiler.js +498 -0
  602. package/tooling/src/guards/loop-cap-guard.js +52 -0
  603. package/tooling/src/guards/protected-path-write-guard.js +67 -0
  604. package/tooling/src/index/command.js +152 -0
  605. package/tooling/src/index/storage.js +1061 -0
  606. package/tooling/src/index/summarizers.js +261 -0
  607. package/tooling/src/loaders.js +18 -0
  608. package/tooling/src/project-root.js +22 -0
  609. package/tooling/src/recall/command.js +225 -0
  610. package/tooling/src/schema-validator.js +30 -0
  611. package/tooling/src/state-root.js +40 -0
  612. package/tooling/src/status/command.js +71 -0
  613. package/wazir.manifest.yaml +135 -0
  614. package/workflows/README.md +19 -0
  615. package/workflows/author.md +42 -0
  616. package/workflows/clarify.md +38 -0
  617. package/workflows/design-review.md +46 -0
  618. package/workflows/design.md +44 -0
  619. package/workflows/discover.md +37 -0
  620. package/workflows/execute.md +48 -0
  621. package/workflows/learn.md +38 -0
  622. package/workflows/plan-review.md +42 -0
  623. package/workflows/plan.md +39 -0
  624. package/workflows/prepare-next.md +37 -0
  625. package/workflows/review.md +40 -0
  626. package/workflows/run-audit.md +41 -0
  627. package/workflows/spec-challenge.md +41 -0
  628. package/workflows/specify.md +38 -0
  629. package/workflows/verify.md +37 -0
@@ -0,0 +1,490 @@
1
+ # Native iOS — Expertise Module
2
+
3
+ > A Native iOS specialist designs, builds, and ships applications for Apple's iOS platform using Swift and Apple frameworks (SwiftUI, UIKit). The role spans UI implementation, data management, platform API integration, performance tuning, accessibility, and App Store delivery. Scope includes iPhone, iPad, Apple Watch, and platform extensions (widgets, intents, share extensions).
4
+
5
+ ---
6
+
7
+ ## Core Patterns & Conventions
8
+
9
+ ### Project Structure
10
+
11
+ Modern iOS projects (2025-2026) use modular architecture with SPM local packages, optionally managed by Tuist (v4+) or XcodeGen for `.xcodeproj` generation.
12
+
13
+ ```
14
+ MyApp/
15
+ App/ # App target (@main entry point)
16
+ Packages/
17
+ Core/ # Shared utilities, extensions, logging
18
+ Networking/ # API client, DTOs, endpoint definitions
19
+ DesignSystem/ # Reusable UI components, tokens, colors
20
+ FeatureHome/ # Feature module (one per feature)
21
+ FeatureSettings/
22
+ Tests/ # Mirror of Packages/ with test targets
23
+ UITests/
24
+ ```
25
+
26
+ - Each feature module is a local SPM package with its own `Package.swift`.
27
+ - Feature modules depend on `Core` and `DesignSystem` but never on each other.
28
+ - Tuist/XcodeGen generates `.xcodeproj` from declarative manifests, eliminating merge conflicts.
29
+ - Minimum deployment: iOS 17 for new projects (unlocks SwiftData, `@Observable`). iOS 16 if broad coverage required.
30
+
31
+ ### Naming Conventions (Swift API Design Guidelines)
32
+
33
+ - **Types**: `UpperCamelCase` -- `UserProfileView`, `NetworkClient`.
34
+ - **Functions/properties**: `lowerCamelCase` -- `fetchUserProfile()`, `isAuthenticated`.
35
+ - **Protocols**: capabilities use `-able`/`-ible` (`Sendable`); descriptions use nouns (`DataStore`).
36
+ - **Booleans**: read as assertions -- `isEmpty`, `hasUnsavedChanges`.
37
+ - **Factory methods**: prefix with `make` -- `makeURLRequest()`.
38
+ - **File naming**: one primary type per file, filename matches type.
39
+
40
+ ### Architecture Patterns
41
+
42
+ **MVVM (Recommended Default)** -- aligns naturally with SwiftUI's declarative model. View observes ViewModel via `@Observable`; ViewModel mediates between View and Service layers.
43
+
44
+ **TCA (The Composable Architecture)** -- unidirectional data flow (State -> Action -> Reducer -> Effect -> State). Best for complex state-heavy apps. Built-in DI via `@Dependency`, exhaustive testability via `TestStore`. Steep learning curve; use when >20 screens with complex state interactions.
45
+
46
+ **VIPER** -- legacy enterprise pattern. High ceremony. Largely superseded by MVVM+Coordinator or TCA for SwiftUI projects. Consider only for existing UIKit codebases.
47
+
48
+ ### SwiftUI Patterns
49
+
50
+ - Break views into small subviews (each `body` < 50 lines) -- smaller invalidation scope.
51
+ - Use `ViewModifier` for cross-cutting styling; `View` extensions for convenience wrappers.
52
+ - `@Observable` (iOS 17+): SwiftUI tracks property access per-view -- only read properties trigger re-renders (unlike `ObservableObject` which fires on any `@Published` change).
53
+ - Use `@Entry` on `EnvironmentValues` for custom environment keys.
54
+
55
+ ### State Management
56
+
57
+ | Scope | Tool | When to Use |
58
+ |-------|------|-------------|
59
+ | View-local | `@State` | Toggle, text field, sheet presentation |
60
+ | Shared reference | `@Observable` class | ViewModel, shared state across views |
61
+ | Global / app-wide | `@Observable` + `.environment()` | Auth state, theme, feature flags |
62
+ | Complex / deterministic | TCA `Store` | Exhaustive testing, time-travel debugging |
63
+ | Legacy | `ObservableObject` + `@Published` | Pre-iOS 17 codebases only |
64
+
65
+ ### Navigation (NavigationStack + NavigationPath, iOS 16+)
66
+
67
+ - Use `@Observable` Router class holding a `NavigationPath`.
68
+ - Define destinations as `Hashable` enums; use `.navigationDestination(for:)` for type-safe routing.
69
+ - Each `TabView` tab gets its own `NavigationStack` and `Router`.
70
+ - Never mutate path during a view update -- trigger changes from actions, `onAppear`, or `.task`.
71
+ - Deep links: append destinations to path in `onOpenURL`.
72
+
73
+ ### Data Flow & Concurrency (Swift 6 / 6.2)
74
+
75
+ - Prefer `async/await` over Combine for new async work; use `TaskGroup` for parallel work.
76
+ - Mark all UI-bound `@Observable` classes with `@MainActor`.
77
+ - Swift 6 enforces `Sendable` at compile time -- value types and actors are inherently `Sendable`.
78
+ - Swift 6.2 (WWDC 2025): `@concurrent` attribute for explicit concurrent execution opt-in.
79
+ - **Combine** remains valid for reactive streams (`NotificationCenter`, KVO bridging). Avoid mixing Combine and async/await in the same pipeline.
80
+
81
+ ### Error Handling (Typed Throws, Swift 6)
82
+
83
+ ```swift
84
+ enum NetworkError: Error, LocalizedError {
85
+ case unauthorized, notFound
86
+ case serverError(statusCode: Int)
87
+ case decodingFailed(underlying: Error)
88
+ }
89
+
90
+ func fetchUser(id: String) async throws(NetworkError) -> User { ... }
91
+ // Callers know exactly which errors to handle
92
+ ```
93
+
94
+ ### Logging (os.Logger)
95
+
96
+ ```swift
97
+ extension Logger {
98
+ static let networking = Logger(subsystem: Bundle.main.bundleIdentifier!, category: "Networking")
99
+ }
100
+ Logger.networking.info("Fetching user \(userId, privacy: .private)")
101
+ ```
102
+
103
+ Use `.private` for PII (redacted in production). Prefer `Logger` over `print()` -- zero cost when not collected.
104
+
105
+ ---
106
+
107
+ ## Anti-Patterns & Pitfalls
108
+
109
+ **1. Force unwrapping everywhere** -- `!` crashes on nil. Use `guard let`, `if let`, `??`. Reserve `!` for IBOutlets and compile-time-guaranteed literals.
110
+
111
+ **2. Massive View / Massive ViewModel** -- a 500-line `body` re-evaluates entirely on any state change. Break into subviews for localized invalidation.
112
+
113
+ **3. Using @State for shared state** -- `@State` is view-local. Sharing via bindings creates fragile coupling. Use `@Observable` classes with `.environment()`.
114
+
115
+ **4. Using ObservableObject when @Observable is available** -- `ObservableObject`+`@Published` fires updates for any property change. `@Observable` tracks per-property access, rendering only what changed.
116
+
117
+ **5. Blocking main thread** -- work >16ms causes dropped frames. Network, parsing, image processing must use async/await or background queues.
118
+
119
+ **6. Retain cycles in closures** -- closures capture `self` strongly by default. Use `[weak self]` in escaping closures. Async/await's structured concurrency eliminates most closure-based cycles.
120
+
121
+ **7. Ignoring Sendable/actor isolation (Swift 6)** -- disabling strict concurrency masks data races. Fix by making types `Sendable`, using actors, or restructuring data flow.
122
+
123
+ **8. Eager stacks for large lists** -- `VStack`/`HStack` instantiate all children. Use `LazyVStack`/`LazyHStack`/`List` for >20 items.
124
+
125
+ **9. Secrets in UserDefaults** -- UserDefaults is an unencrypted plist. Tokens, passwords, API keys belong in Keychain.
126
+
127
+ **10. Ignoring memory leaks** -- leaked VCs and VMs accumulate until OS kills the app. Use Instruments Leaks + Xcode Memory Graph Debugger during development.
128
+
129
+ **11. `DispatchQueue.main.async` in SwiftUI** -- causes double renders. Use `@MainActor` on ViewModels instead.
130
+
131
+ **12. Overusing singletons** -- hidden global state, untestable. Use dependency injection (initializer or `@Environment`).
132
+
133
+ **13. Unstable ForEach identifiers** -- index or `\.self` on non-unique values causes animation glitches and state corruption. Conform models to `Identifiable` with stable IDs.
134
+
135
+ **14. Disabling ATS globally** -- `NSAllowsArbitraryLoads = true` exposes all traffic. Add per-domain exceptions only.
136
+
137
+ **15. Skipping accessibility** -- ~15-20% of users rely on VoiceOver. Add `.accessibilityLabel()`, `.accessibilityHint()`. Apple rejects apps with major a11y issues.
138
+
139
+ ---
140
+
141
+ ## Testing Strategy
142
+
143
+ ### Unit Testing (Swift Testing Framework, Xcode 16+)
144
+
145
+ ```swift
146
+ import Testing
147
+
148
+ @Suite("UserProfileViewModel Tests")
149
+ struct UserProfileViewModelTests {
150
+ @Test("loads user successfully")
151
+ func loadUser() async throws {
152
+ let vm = UserProfileViewModel(userService: MockUserService(result: .success(.stub)))
153
+ await vm.loadUser(id: "123")
154
+ #expect(vm.user?.name == "Jane Doe")
155
+ #expect(vm.errorMessage == nil)
156
+ }
157
+
158
+ @Test("throws on server error", arguments: [500, 502, 503])
159
+ func serverError(statusCode: Int) async { ... }
160
+ }
161
+ ```
162
+
163
+ XCTest remains valid for existing suites and UI tests. Both coexist in the same target.
164
+
165
+ ### UI Testing (XCUITest)
166
+
167
+ - Use `.accessibilityIdentifier("loginButton")` as stable anchors (not text).
168
+ - Focus on critical flows (login, purchase, onboarding) -- UI tests are slow.
169
+ - Page Object pattern encapsulates screen interactions for reuse.
170
+
171
+ ### Snapshot Testing (swift-snapshot-testing by Point-Free)
172
+
173
+ - `assertSnapshot(of: view, as: .image(layout: .device(config: .iPhone13)))`.
174
+ - Pin to a single simulator to avoid pixel differences. Store reference images in repo.
175
+
176
+ ### Mock Patterns
177
+
178
+ Protocol-based mocking preferred. Define protocol (`UserServiceProtocol`), create lightweight `MockUserService` conforming to it. For DI frameworks: `swift-dependencies` (`@Dependency`) or Factory (`@Injected`).
179
+
180
+ ### Test Plans
181
+
182
+ Separate plans for Unit, Integration, UI. CI runs unit on every PR; UI on merge to main. Target: ~70% unit, ~20% integration, ~10% UI/E2E.
183
+
184
+ ---
185
+
186
+ ## Performance Considerations
187
+
188
+ ### SwiftUI Performance
189
+
190
+ - **Lazy stacks**: `LazyVStack`/`LazyHStack` for scrollable content >20 items.
191
+ - **Small views**: each subview = own invalidation scope. Extract components.
192
+ - **Stable IDs**: `Identifiable` with persistent IDs in `ForEach`.
193
+ - **Equatable views**: conform to `Equatable` + `.equatable()` modifier to skip unnecessary body evaluations.
194
+ - **Instruments 26**: new SwiftUI instrument traces body evaluations and slow state updates.
195
+
196
+ ### App Launch Optimization
197
+
198
+ - Minimize work in `@main` App `init()`. Defer analytics/remote config to `.task {}`.
199
+ - Consolidate SPM packages to reduce dynamic library loads. Measure with `DYLD_PRINT_STATISTICS=1`.
200
+
201
+ ### Memory Management (ARC)
202
+
203
+ - **Strong** (default): keeps object alive. **Weak** (`weak var`): nils on dealloc. **Unowned**: crashes on access after dealloc.
204
+ - Common cycle: `self` captured in closure stored on `self`. Fix: `[weak self]`.
205
+ - Tools: Xcode Memory Graph Debugger, Instruments Leaks/Allocations.
206
+
207
+ ### Instruments Profiling
208
+
209
+ | Instrument | Finds |
210
+ |------------|-------|
211
+ | Time Profiler | Main-thread hangs, slow functions |
212
+ | Allocations | Memory growth, abandoned memory |
213
+ | Leaks | Retain cycles |
214
+ | Network | Redundant/slow API calls |
215
+ | Core Animation | Off-screen rendering, blending |
216
+ | SwiftUI (Instruments 26) | Excessive body evaluations |
217
+
218
+ ### SwiftData / Core Data Performance
219
+
220
+ - Use `@Query` with `#Predicate` and `fetchLimit`. Batch inserts, single `save()`.
221
+ - For Core Data: `NSFetchedResultsController` for incremental UI updates.
222
+ - Core Data outperforms SwiftData for >10,000 rows (as of 2025).
223
+
224
+ ---
225
+
226
+ ## Security Considerations
227
+
228
+ ### Keychain Services
229
+
230
+ Use `SecItemAdd`/`SecItemCopyMatching` with `kSecAttrAccessibleWhenUnlockedThisDeviceOnly`. Never store secrets in UserDefaults. Use a wrapper (KeychainAccess) for ergonomic API.
231
+
232
+ ### App Transport Security (ATS)
233
+
234
+ ATS enforces HTTPS by default. Do not disable globally. Per-domain exceptions only. Use certificate pinning for banking/healthcare apps.
235
+
236
+ ### Biometric Authentication (Face ID / Touch ID)
237
+
238
+ Use `LAContext.evaluatePolicy(.deviceOwnerAuthenticationWithBiometrics)`. Add `NSFaceIDUsageDescription` to Info.plist. Always provide fallback (passcode/password). Combine with Keychain access controls (`.biometryCurrentSet`).
239
+
240
+ ### Code Signing & Entitlements
241
+
242
+ Automatic signing for dev; Fastlane Match or Xcode Cloud for CI. Never commit `.p12` or profiles to source control. Entitlements define capabilities (push, Keychain sharing, App Groups).
243
+
244
+ ### Data Protection Classes
245
+
246
+ | Class | Accessible | Use Case |
247
+ |-------|-----------|----------|
248
+ | `completeProtection` | Only when unlocked | Most sensitive data |
249
+ | `completeUnlessOpen` | Until first lock | Background downloads |
250
+ | `afterFirstUnlock` | After first unlock | Background fetch |
251
+ | `none` | Always | Non-sensitive cache |
252
+
253
+ ---
254
+
255
+ ## Integration Patterns
256
+
257
+ ### Networking
258
+
259
+ Prefer `URLSession` with async/await over Alamofire for new projects. Define `Endpoint` structs for URL/method/headers/body. Implement retry with exponential backoff. Use `URLCache` for HTTP caching.
260
+
261
+ ```swift
262
+ protocol APIClient: Sendable {
263
+ func request<T: Decodable>(_ endpoint: Endpoint) async throws -> T
264
+ }
265
+ ```
266
+
267
+ ### Persistence
268
+
269
+ | Solution | Best For | Min iOS |
270
+ |----------|----------|---------|
271
+ | **SwiftData** | New SwiftUI apps, simple-moderate models | iOS 17 |
272
+ | **Core Data** | Complex queries, large datasets, migrations | iOS 13 |
273
+ | **Realm** | Cross-platform, real-time sync | iOS 13 |
274
+ | **UserDefaults** | Small preferences, feature flags | Any |
275
+ | **Keychain** | Secrets, tokens, passwords | Any |
276
+
277
+ ### Dependency Injection
278
+
279
+ - **Initializer injection** (default): pass dependencies through `init()`.
280
+ - **Factory** (container-based): compile-time safe, `@Injected(\.userService)` property wrapper.
281
+ - **swift-dependencies** (TCA): `@Dependency(\.userService)`, test/preview/live values.
282
+
283
+ ### Push Notifications (APNs)
284
+
285
+ Use token-based auth (`.p8` key, no expiry) over certificates. Handle in `UNUserNotificationCenterDelegate`. Use `apns-priority: 5` for non-urgent. Live Activities: `liveactivity` push type with `ActivityKit`.
286
+
287
+ ### WidgetKit & App Intents
288
+
289
+ Widgets use `TimelineProvider`. Share data via App Groups. App Intents (iOS 16+) for Siri, Shortcuts, interactive widget buttons. Widget refresh budgets are limited -- use push-based updates for real-time data.
290
+
291
+ ---
292
+
293
+ ## DevOps & Deployment
294
+
295
+ ### CI/CD Options
296
+
297
+ | Tool | Pros | Cons |
298
+ |------|------|------|
299
+ | **Xcode Cloud** | Zero-config signing, Apple-native, free tier | Limited customization |
300
+ | **GitHub Actions + Fastlane** | Flexible, community plugins | macOS runners expensive |
301
+ | **Bitrise / Codemagic** | iOS-first, managed VMs | Cost scales with team |
302
+
303
+ ### Code Signing Automation
304
+
305
+ - **Fastlane Match**: certs/profiles in private Git repo, shared across CI and devs.
306
+ - **Xcode Cloud**: automatic signing, no manual cert management.
307
+ - Never commit `.p12` or provisioning profiles to main repo.
308
+
309
+ ### TestFlight Distribution
310
+
311
+ Upload via Fastlane `upload_to_testflight` or `xcrun altool`. Segment testers into groups. External testing requires App Store Review (~24h). Include `What to Test` notes.
312
+
313
+ ### Crash Reporting
314
+
315
+ - **Crashlytics**: free, real-time, breadcrumbs. **Sentry**: richer context, paid tiers.
316
+ - **Xcode Organizer**: free App Store crash logs (24-48h delay).
317
+ - Upload dSYM files on every release for symbolicated stack traces.
318
+
319
+ ---
320
+
321
+ ## Decision Trees
322
+
323
+ ### SwiftUI vs UIKit?
324
+
325
+ ```
326
+ New project targeting iOS 16+?
327
+ Yes --> SwiftUI primary + UIKit via UIViewRepresentable where needed
328
+ No --> UIKit primary + SwiftUI for new screens via UIHostingController
329
+
330
+ Existing UIKit app?
331
+ --> Keep UIKit for existing screens, add new features in SwiftUI, migrate incrementally
332
+
333
+ UIKit still required for:
334
+ - Custom compositional layouts, complex TextKit 2, AVFoundation camera UI
335
+ ```
336
+
337
+ ### Which Architecture?
338
+
339
+ ```
340
+ Solo/small team, simple-medium app --> MVVM with @Observable
341
+ Medium team, complex state, high test coverage --> TCA (Composable Architecture)
342
+ Large enterprise, UIKit-heavy, strict boundaries --> VIPER or Clean Architecture
343
+ Middle ground --> MVVM + Coordinator (centralized navigation, MVVM simplicity)
344
+ ```
345
+
346
+ ### Which Persistence?
347
+
348
+ ```
349
+ New app, iOS 17+, simple-moderate model --> SwiftData
350
+ New app, complex migrations/large datasets --> Core Data
351
+ Cross-platform (iOS + Android) --> Realm or SQLite (GRDB.swift)
352
+ Existing Core Data app --> Keep Core Data; evaluate SwiftData when raising min to iOS 17
353
+ Performance-critical (>50k records) --> Core Data or Realm (SwiftData still maturing)
354
+ ```
355
+
356
+ ---
357
+
358
+ ## Code Examples
359
+
360
+ ### 1. Async Data Loading with State Enum
361
+
362
+ ```swift
363
+ @Observable @MainActor
364
+ final class BookListViewModel {
365
+ private(set) var books: [Book] = []
366
+ private(set) var state: ViewState = .idle
367
+ enum ViewState: Equatable { case idle, loading, loaded, error(String) }
368
+ private let api: APIClient
369
+ init(api: APIClient) { self.api = api }
370
+
371
+ func loadBooks() async {
372
+ state = .loading
373
+ do { books = try await api.request(.books); state = .loaded }
374
+ catch { state = .error(error.localizedDescription) }
375
+ }
376
+ }
377
+
378
+ struct BookListView: View {
379
+ @State private var viewModel: BookListViewModel
380
+ init(api: APIClient) { _viewModel = State(initialValue: BookListViewModel(api: api)) }
381
+
382
+ var body: some View {
383
+ Group {
384
+ switch viewModel.state {
385
+ case .idle, .loading: ProgressView()
386
+ case .loaded: List(viewModel.books) { BookRow(book: $0) }
387
+ case .error(let msg): ContentUnavailableView("Failed", systemImage: "exclamationmark.triangle", description: Text(msg))
388
+ }
389
+ }
390
+ .task { await viewModel.loadBooks() }
391
+ .refreshable { await viewModel.loadBooks() }
392
+ }
393
+ }
394
+ ```
395
+
396
+ ### 2. NavigationStack Router
397
+
398
+ ```swift
399
+ @Observable
400
+ final class Router {
401
+ var path = NavigationPath()
402
+ func navigate(to dest: AppDestination) { path.append(dest) }
403
+ func popToRoot() { path = NavigationPath() }
404
+ }
405
+
406
+ enum AppDestination: Hashable {
407
+ case userProfile(userId: String), settings, orderDetail(orderId: String)
408
+ }
409
+
410
+ struct RootView: View {
411
+ @State private var router = Router()
412
+ var body: some View {
413
+ NavigationStack(path: $router.path) {
414
+ HomeView()
415
+ .navigationDestination(for: AppDestination.self) { dest in
416
+ switch dest {
417
+ case .userProfile(let id): UserProfileView(userId: id)
418
+ case .settings: SettingsView()
419
+ case .orderDetail(let id): OrderDetailView(orderId: id)
420
+ }
421
+ }
422
+ }
423
+ .environment(router)
424
+ }
425
+ }
426
+ ```
427
+
428
+ ### 3. Parallel Fetching with async let
429
+
430
+ ```swift
431
+ func loadDashboard() async throws -> Dashboard {
432
+ async let profile = api.request(.userProfile) as UserProfile
433
+ async let orders = api.request(.recentOrders) as [Order]
434
+ async let notifs = api.request(.notifications) as [AppNotification]
435
+ return try await Dashboard(profile: profile, orders: orders, notifications: notifs)
436
+ }
437
+ ```
438
+
439
+ ### 4. SwiftData Model with Relationships
440
+
441
+ ```swift
442
+ import SwiftData
443
+
444
+ @Model final class Recipe {
445
+ var title: String
446
+ var prepTimeMinutes: Int
447
+ @Relationship(deleteRule: .cascade) var ingredients: [Ingredient]
448
+ init(title: String, prepTimeMinutes: Int) {
449
+ self.title = title; self.prepTimeMinutes = prepTimeMinutes; self.ingredients = []
450
+ }
451
+ }
452
+
453
+ struct RecipeListView: View {
454
+ @Query(sort: \Recipe.createdAt, order: .reverse) private var recipes: [Recipe]
455
+ var body: some View {
456
+ List(recipes) { recipe in
457
+ Text(recipe.title)
458
+ }
459
+ }
460
+ }
461
+ ```
462
+
463
+ ### 5. Swift Testing with Parameterized Arguments
464
+
465
+ ```swift
466
+ import Testing
467
+ @testable import MyApp
468
+
469
+ @Suite("NetworkClient")
470
+ struct NetworkClientTests {
471
+ @Test("decodes valid response")
472
+ func decode() async throws {
473
+ let client = LiveAPIClient(session: MockURLSession(data: validJSON, statusCode: 200))
474
+ let user: User = try await client.request(.userProfile(id: "1"))
475
+ #expect(user.name == "Test User")
476
+ }
477
+
478
+ @Test("throws on server error", arguments: [500, 502, 503])
479
+ func serverError(code: Int) async {
480
+ let client = LiveAPIClient(session: MockURLSession(data: Data(), statusCode: code))
481
+ await #expect(throws: NetworkError.self) {
482
+ let _: User = try await client.request(.userProfile(id: "1"))
483
+ }
484
+ }
485
+ }
486
+ ```
487
+
488
+ ---
489
+
490
+ *Researched: 2026-03-07 | Sources: [Swift API Design Guidelines](https://www.swift.org/documentation/api-design-guidelines/), [Apple SwiftUI Performance Docs](https://developer.apple.com/documentation/Xcode/understanding-and-improving-swiftui-performance), [MVVM vs VIPER vs TCA](https://medium.com/@rashadsh/mvvm-vs-viper-vs-tca-best-architecture-for-your-next-app-159e11e333e9), [Modern iOS Architecture 2025](https://medium.com/@csmax/the-ultimate-guide-to-modern-ios-architecture-in-2025-9f0d5fdc892f), [SwiftData vs Core Data vs Realm](https://hackernoon.com/swift-data-vs-core-data-vs-realm-ios-data-persistence-overview-and-analysis), [swift-snapshot-testing](https://github.com/pointfreeco/swift-snapshot-testing), [Factory DI](https://github.com/hmlongco/Factory), [Fastlane Match](https://docs.fastlane.tools/actions/sync_code_signing/), [iOS Security Checklist 2025](https://mobisoftinfotech.com/resources/blog/app-security/ios-app-security-checklist-best-practices), [NavigationStack Patterns](https://buczel.com/blog/swift-navigation-stack-patterns/), [Swift 6.2 Concurrency](https://www.avanderlee.com/concurrency/approachable-concurrency-in-swift-6-2-a-clear-guide/), [Tuist for Xcode](https://www.runway.team/blog/getting-started-with-tuist-for-xcode-project-generation-and-modularization-on-ios), [Modern iOS Architecture 2026](https://7span.com/blog/mvvm-vs-clean-architecture-vs-tca), [DI Patterns in Swift](https://michalcichon.github.io/software-development/2025/11/25/dependency-injection-patterns-in-swift.html)*