@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,23 @@
1
+ # Directory Purpose
2
+
3
+ The `frontend` antipatterns directory addresses common mistakes in client-side application development, covering web, mobile, and styling.
4
+
5
+ # Key Concepts
6
+
7
+ - SPA performance and rendering flaws
8
+ - CSS architecture and layout mistakes
9
+ - Framework-specific pitfalls (React, Flutter)
10
+
11
+ # File Map
12
+
13
+ - `css-layout-antipatterns.md` — global scope pollution, z-index wars, layout thrashing
14
+ - `flutter-antipatterns.md` — deeply nested widgets, poor state management
15
+ - `mobile-antipatterns.md` — non-native feeling interactions, blocked main threads
16
+ - `react-antipatterns.md` — prop drilling, overuse of effects, unnecessary re-renders
17
+ - `spa-antipatterns.md` — massive bundles, bad routing, memory leaks
18
+
19
+ # Reading Guide
20
+
21
+ If optimizing web UI → read `spa-antipatterns.md` and `react-antipatterns.md`
22
+ If styling an application → read `css-layout-antipatterns.md`
23
+ If building mobile UI → read `flutter-antipatterns.md` or `mobile-antipatterns.md`
@@ -0,0 +1,573 @@
1
+ # Mobile Development Anti-Patterns
2
+
3
+ > Mobile apps run on constrained hardware with unreliable networks, limited battery, and impatient users who will uninstall after a single bad experience. Unlike web apps where you control the server, mobile code runs on thousands of device variants under conditions you cannot predict. These anti-patterns are distilled from OWASP mobile security reports, platform vendor post-mortems, app store rejection data, and production experience shipping apps across Android, iOS, React Native, and Flutter.
4
+
5
+ > **Domain:** Frontend
6
+ > **Anti-patterns covered:** 20
7
+ > **Highest severity:** Critical
8
+
9
+ ---
10
+
11
+ ## Anti-Patterns
12
+
13
+ ### AP-01: Blocking the UI Thread
14
+
15
+ **Also known as:** Main Thread Abuse, Jank Factory, The Frozen Screen
16
+ **Frequency:** Very Common
17
+ **Severity:** Critical
18
+ **Detection difficulty:** Medium
19
+
20
+ **What it looks like:**
21
+ Network requests, database queries, JSON parsing, or image decoding runs directly on the main/UI thread. The interface freezes, animations stutter, and on Android the system shows an ANR dialog after 5 seconds. React Native's single JS thread drops frames when expensive computations block the event loop -- 200ms of synchronous work means 12 dropped frames. Flutter's main isolate blocks rendering when heavy computation runs inline instead of in a separate isolate.
22
+
23
+ **Why developers do it:**
24
+ Synchronous code is simpler to reason about. On emulators with generous CPU and fast localhost networking, the delay is imperceptible. Developers from server-side backgrounds expect blocking I/O as default. React Native averages 8.34ms per frame with no safety margin for GC cycles, making it especially sensitive.
25
+
26
+ **What goes wrong:**
27
+ Android triggers ANR dialogs after 5s of main-thread blockage; Google Play flags apps with ANR rates above 0.47%. iOS watchdog kills apps that block the main thread during launch (termination code `0x8badf00d`). Frame drops below 60fps cause visible stutter users perceive as "broken."
28
+
29
+ **The fix:**
30
+ Move all I/O and computation off the main thread. Android: `Dispatchers.IO` with coroutines. iOS: `async/await` with `Task`. React Native: `InteractionManager.runAfterInteractions()` or move work to native modules. Flutter: `compute()` or `Isolate.run()` for CPU-intensive work. Profile with Xcode Time Profiler or Android Profiler to identify main-thread spikes exceeding 16ms.
31
+
32
+ **Detection rule:**
33
+ Flag any network, database, or file I/O call not wrapped in a background context. Enable Android `StrictMode` in debug builds. Lint for synchronous `URL().readText()`, `Data(contentsOf:)`, or `JSON.parse()` of large payloads on the main thread.
34
+
35
+ ---
36
+
37
+ ### AP-02: Not Handling Screen Sizes
38
+
39
+ **Also known as:** Fixed-Layout Syndrome, The One-Device App, Pixel Perfection Fallacy
40
+ **Frequency:** Very Common
41
+ **Severity:** High
42
+ **Detection difficulty:** Easy
43
+
44
+ **What it looks like:**
45
+ Hardcoded pixel values (`width: 375`, `height: 812`), fixed-size containers that overflow on small screens or leave empty space on tablets, text that truncates or overlaps on different font sizes. The app looks perfect on the developer's iPhone 15 Pro and breaks everywhere else.
46
+
47
+ **Why developers do it:**
48
+ Designers deliver one set of mockups at one resolution. Testing on a single device "works." Handling responsive layouts, foldables, split-screen, and Dynamic Type is time-consuming. Cross-platform frameworks tempt developers to ignore platform-specific layout behaviors.
49
+
50
+ **What goes wrong:**
51
+ Android has 24,000+ distinct device configurations. Foldable phones change aspect ratio mid-session. iPads in multitasking mode present window sizes the developer never anticipated. Users with accessibility font sizes see truncated or overlapping text. App Store reviewers reject apps that don't work on all supported devices.
52
+
53
+ **The fix:**
54
+ Use relative units (flex, `ConstraintLayout`, `MediaQuery`). Test on at least 5 screen sizes including a small phone, large phone, tablet, and foldable. Support Dynamic Type (iOS) and scalable sp units (Android). Use `LayoutBuilder` (Flutter) or `useWindowDimensions` (React Native) for responsive breakpoints.
55
+
56
+ **Detection rule:**
57
+ Search for hardcoded pixel values in layout files. Run the app in split-screen mode and with the largest accessibility font size. If any content is clipped, overflows, or is unreachable, AP-02 is present.
58
+
59
+ ---
60
+
61
+ ### AP-03: Ignoring Platform Conventions
62
+
63
+ **Also known as:** Cross-Platform Uncanny Valley, Platform Blindness
64
+ **Frequency:** Common
65
+ **Severity:** Medium
66
+ **Detection difficulty:** Easy
67
+
68
+ **What it looks like:**
69
+ An iOS app with Material Design hamburger menus. An Android app with iOS-style segmented controls and back-swipe gestures. Navigation patterns, typography, and interaction models that feel alien to the platform's native users. Identical UI on both platforms, native to neither.
70
+
71
+ **Why developers do it:**
72
+ Cross-platform frameworks encourage code sharing. One UI for both platforms is faster. "Brand consistency matters more than platform conventions." Developers only know one platform and default to its patterns everywhere.
73
+
74
+ **What goes wrong:**
75
+ iOS users expect swipe-to-go-back, pull-to-refresh, and tab bars at the bottom. Android users expect the system back button, material ripple effects, and navigation drawers. Platform-specific accessibility features (VoiceOver, TalkBack) may not work with non-native components. App Store reviewers reject apps that don't "feel like an iOS app."
76
+
77
+ **The fix:**
78
+ Use platform-adaptive widgets. Flutter: `CupertinoNavigationBar` on iOS, `AppBar` on Android. React Native: `Platform.select()` for diverging UX. Follow Apple Human Interface Guidelines and Material Design guidelines as baseline requirements.
79
+
80
+ **Detection rule:**
81
+ Run the app side-by-side on both platforms. If navigation, back behavior, and system chrome look identical, suspect AP-03. Check for missing `Platform.select()` or platform checks in cross-platform codebases.
82
+
83
+ ---
84
+
85
+ ### AP-04: No Offline Mode
86
+
87
+ **Also known as:** Always-Online Assumption, The Blank Screen of Nothing
88
+ **Frequency:** Very Common
89
+ **Severity:** High
90
+ **Detection difficulty:** Medium
91
+
92
+ **What it looks like:**
93
+ The app shows a blank screen, infinite spinner, or crashes when the network is unavailable. Previously loaded data disappears. Users in elevators, subways, or rural areas cannot use any feature. The fundamental flaw: treating the network as the single source of truth.
94
+
95
+ **Why developers do it:**
96
+ Development happens on fast Wi-Fi. Offline support requires local storage, sync logic, and conflict resolution -- real engineering that doesn't show up in demos. "Our users always have internet." Most apps still follow architecture that treats network failures as exceptional rather than the norm.
97
+
98
+ **What goes wrong:**
99
+ Google's Build for Billions guidelines note 60% of the world's population lives with intermittent connectivity. Apps showing blank screens on failure get 1-star reviews. Users lose unsaved work when connectivity drops mid-action. Without offline data invalidation, users see stale data that destroys trust.
100
+
101
+ **The fix:**
102
+ Implement offline-first architecture: local database as single source of truth, network as sync mechanism. Cache responses locally, show cached data when offline with a "last updated" indicator, queue mutations for later sync. Use the "cache with refresh" pattern so users see something immediately rather than staring at a spinner.
103
+
104
+ **Detection rule:**
105
+ Search for `fetch()` / `http.get()` calls without try/catch and cache fallback. Run every screen in airplane mode. If any screen is blank or shows an unhandled error, AP-04 is present.
106
+
107
+ ---
108
+
109
+ ### AP-05: Excessive Network Calls (Battery Drain)
110
+
111
+ **Also known as:** The Chatty App, Poll-Everything, Battery Vampire
112
+ **Frequency:** Common
113
+ **Severity:** High
114
+ **Detection difficulty:** Hard
115
+
116
+ **What it looks like:**
117
+ Apps that poll servers every few seconds, sync data constantly, retry failed requests aggressively, or fire redundant requests on every screen transition. A network request every 15 seconds keeps the mobile radio on continuously. Facebook and Instagram are commonly cited examples of battery-draining sync behavior. 73% of users uninstall apps that drain battery excessively.
118
+
119
+ **Why developers do it:**
120
+ Real-time data feels premium. Polling is simpler than websockets or push. Developers don't measure battery impact. Multiple teams add their own sync logic independently, and nobody aggregates the total request volume.
121
+
122
+ **What goes wrong:**
123
+ Every network call activates the radio hardware, consuming battery. Redundant requests waste bandwidth on metered connections. Background network activity is the #1 cause of app-related battery drain. Android's Battery Historian and iOS's Energy Log flag offending apps, leading to OS-level throttling.
124
+
125
+ **The fix:**
126
+ Batch requests and process them together so the radio powers on once. Use push notifications or websockets for real-time needs instead of polling. Implement exponential backoff for retries. Respect `ConnectivityManager` (Android) and `NWPathMonitor` (iOS) to avoid requests on poor connections. Lazy-load non-critical data.
127
+
128
+ **Detection rule:**
129
+ Monitor total request count in first 60 seconds after launch with Charles Proxy or network profiler. Flag `setInterval`/`Timer.periodic` without cancellation. Check for duplicate API calls across screen transitions using network interceptor logs.
130
+
131
+ ---
132
+
133
+ ### AP-06: No Caching Strategy
134
+
135
+ **Also known as:** Fetch-Every-Time, The Redundant Loader, Amnesia App
136
+ **Frequency:** Very Common
137
+ **Severity:** Medium
138
+ **Detection difficulty:** Medium
139
+
140
+ **What it looks like:**
141
+ Every screen visit triggers a fresh API call even when data hasn't changed. Profile screens re-fetch on every `viewWillAppear`/`onResume`. Images re-download on every scroll. The app shows loading spinners for data it already has in memory.
142
+
143
+ **Why developers do it:**
144
+ Caching adds complexity: invalidation, staleness, storage limits. Fetching fresh data feels "correct." Common implementation errors include caching GET responses based only on URL while ignoring query parameters. Shared preferences has edge cases, SQLite requires migration scripts.
145
+
146
+ **What goes wrong:**
147
+ Wasted bandwidth on metered connections. Unnecessary loading states frustrate users. Battery drain from redundant network calls. Server costs increase linearly with user base. Scrolling lists with images flicker as images re-download.
148
+
149
+ **The fix:**
150
+ Implement a layered cache: memory cache (LRU) for hot data, disk cache for persistence, HTTP cache headers for API responses. Use image caching libraries (Glide/Coil on Android, SDWebImage/Kingfisher on iOS, `cached_network_image` in Flutter). Set `staleTime` in query libraries to avoid redundant fetches.
151
+
152
+ **Detection rule:**
153
+ Search for API calls inside `viewWillAppear`/`onResume`/`useEffect` without dependency arrays. Monitor network traffic for duplicate identical requests within 30 seconds. Check if image URLs are re-fetched when scrolling back to previously visible cells.
154
+
155
+ ---
156
+
157
+ ### AP-07: Ignoring App Lifecycle
158
+
159
+ **Also known as:** The Zombie Listener, Leak-on-Background, State Amnesia
160
+ **Frequency:** Common
161
+ **Severity:** High
162
+ **Detection difficulty:** Hard
163
+
164
+ **What it looks like:**
165
+ Listeners, timers, and subscriptions registered in `onCreate`/`viewDidLoad`/`initState` without cleanup in the corresponding destroy method. Location tracking continues in the background. The app crashes when returning from background because it assumes in-memory state that the OS reclaimed.
166
+
167
+ **Why developers do it:**
168
+ Lifecycle management is invisible when it works. Memory leaks manifest slowly and only under specific navigation patterns. Developers test the happy path of opening one screen and never backgrounding the app. React Native's GC-managed memory makes leaks harder to detect until the app crashes.
169
+
170
+ **What goes wrong:**
171
+ Memory leaks grow with each screen visit until the OS kills the app. Background listeners drain battery. GPS running in background triggers privacy warnings and app store rejection. On Android, the OS can kill background processes at any time; state that was only in memory is lost.
172
+
173
+ **The fix:**
174
+ Always pair `register` with `unregister` in matching lifecycle methods. Use `LifecycleObserver` (Android), combine publishers (iOS), or `dispose()` (Flutter). Save critical state in `onSaveInstanceState` (Android) or state restoration (iOS). Cancel in-flight network requests when the screen is no longer visible.
175
+
176
+ **Detection rule:**
177
+ Search for `addListener`/`subscribe`/`register` without matching `removeListener`/`unsubscribe`/`unregister` in the corresponding lifecycle method. Profile memory with LeakCanary (Android), Instruments (iOS), or DevTools (Flutter) after navigating 10 screens back and forth.
178
+
179
+ ---
180
+
181
+ ### AP-08: Bad Permission Handling
182
+
183
+ **Also known as:** The Permission Wall, Ask-Everything-Upfront, Crash-on-Deny
184
+ **Frequency:** Common
185
+ **Severity:** High
186
+ **Detection difficulty:** Easy
187
+
188
+ **What it looks like:**
189
+ The app requests camera, location, contacts, microphone, and storage permissions at first launch before the user has any context. Denying a permission crashes the app or makes it unusable. No explanation of why the permission is needed. 87% of Android apps and 60% of iOS apps request permissions they don't need for core functionality.
190
+
191
+ **Why developers do it:**
192
+ Asking upfront is simpler than contextual requests. Developers test with all permissions granted. Error handling for denied permissions requires fallback UX for every feature. "We might need it later."
193
+
194
+ **What goes wrong:**
195
+ Users deny permissions they don't understand, then the app breaks. Google removed 1,400+ apps per month in 2024 for unnecessary permission requests. Apps requesting fewer than 5 permissions see up to 25% higher install rates. On iOS, once a user denies a permission, the system dialog never appears again -- the app must direct users to Settings.
196
+
197
+ **The fix:**
198
+ Request permissions contextually, at the moment the feature needs them. Show a pre-permission screen explaining why. Gracefully degrade when denied -- a chat app should still work without camera access. Handle the "permanently denied" state by directing users to Settings with a clear explanation.
199
+
200
+ **Detection rule:**
201
+ Check `AndroidManifest.xml` and `Info.plist` for permission count; flag more than 5. Search for permission requests in app startup code. Test denying every permission and verify no screen crashes or becomes blank.
202
+
203
+ ---
204
+
205
+ ### AP-09: Deep Linking Failures
206
+
207
+ **Also known as:** The Broken Link, Homepage Redirect, Link Rot
208
+ **Frequency:** Common
209
+ **Severity:** Medium
210
+ **Detection difficulty:** Medium
211
+
212
+ **What it looks like:**
213
+ Deep links open the app but land on the home screen instead of the intended content. Universal Links/App Links are not verified because the AASA or `assetlinks.json` file is misconfigured. The app crashes on malformed deep link parameters. Authenticated deep links show login then lose the original destination.
214
+
215
+ **Why developers do it:**
216
+ Deep linking touches navigation, auth, and state management simultaneously. It's often added late as a "nice to have." The most common error on Android is a wrong SHA-256 fingerprint in `assetlinks.json`. On iOS, the AASA file must be at `.well-known/` with no redirects and no `.json` extension. Once the OS fails verification, it caches the failure.
217
+
218
+ **What goes wrong:**
219
+ Marketing campaigns with deep links land users on the homepage, destroying conversion. Push notifications that should navigate to specific content just open the app generically. Social media apps modify or open links in internal browsers, disrupting Universal Link functionality. App Clips and Instant Apps depend entirely on working deep links.
220
+
221
+ **The fix:**
222
+ Implement a centralized deep link router that validates parameters, handles auth gates (preserving the target destination), and falls back gracefully. Verify server-side configuration: `.well-known/assetlinks.json` (Android) and `apple-app-site-association` (iOS). Test all four states: app foregrounded, app killed, app not installed, user not authenticated.
223
+
224
+ **Detection rule:**
225
+ Test every advertised deep link across all four app states. Verify AASA and `assetlinks.json` are served with correct headers. Check that the deep link handler routes to specific screens rather than always opening `HomeScreen`.
226
+
227
+ ---
228
+
229
+ ### AP-10: Push Notification Abuse
230
+
231
+ **Also known as:** Notification Spam, The Annoying App, Permission Erosion
232
+ **Frequency:** Common
233
+ **Severity:** Medium
234
+ **Detection difficulty:** Easy
235
+
236
+ **What it looks like:**
237
+ Notification permission requested at first launch with no context. Generic "Come back!" re-engagement pushes with no useful content. Multiple notifications per day for non-urgent updates. No notification categories or channels, so users can't selectively mute.
238
+
239
+ **Why developers do it:**
240
+ Product/marketing teams see push notifications as a free engagement lever. 95% of opt-in users who receive no push in the first 90 days churn, so teams over-correct by sending too many. A/B tests optimize for short-term open rates without measuring long-term uninstall impact.
241
+
242
+ **What goes wrong:**
243
+ 71% of users uninstall apps due to annoying notifications. 32% uninstall after receiving more than 6 notifications per week. Users who disable notifications have no re-engagement channel. iOS 15+ Focus modes and Android notification channels let users silence entire apps. Poorly timed notifications (middle of the night) generate negative reviews.
244
+
245
+ **The fix:**
246
+ Delay notification permission requests until the user sees value (after first successful action). Use notification channels (Android) and categories (iOS) for granular control. Respect user timezone and quiet hours. Personalize content -- a notification about a specific item the user viewed converts far better than "We miss you!" Strategic use shows 3x higher 90-day retention vs. no notifications.
247
+
248
+ **Detection rule:**
249
+ Check if notification permission is requested in `didFinishLaunching`/`onCreate`. Audit notification frequency per user per day. Verify notification channels are configured on Android. Test that every notification deep links to the specific referenced content.
250
+
251
+ ---
252
+
253
+ ### AP-11: Emulator-Only Testing
254
+
255
+ **Also known as:** Simulator Tunnel Vision, The Works-On-My-Machine Mobile Edition
256
+ **Frequency:** Common
257
+ **Severity:** High
258
+ **Detection difficulty:** Easy
259
+
260
+ **What it looks like:**
261
+ CI pipeline runs tests only on emulators. No physical device in the QA process. Bugs related to camera, GPS, Bluetooth, push notifications, biometrics, and battery behavior are never caught before production. Performance looks fine because the emulator runs on a desktop CPU with 16GB RAM.
262
+
263
+ **Why developers do it:**
264
+ Emulators are free, fast, and automatable. Physical device labs are expensive and require maintenance. Cloud device farms add CI time. "The emulator is close enough." Developers don't own devices covering the range of their user base.
265
+
266
+ **What goes wrong:**
267
+ Emulators cannot reproduce real-world radio behavior, thermal throttling, memory pressure from other apps, or actual GPS/camera/biometric hardware. Touch latency, scroll physics, and animation smoothness differ significantly. Apps that feel smooth on emulator stutter on a 3-year-old budget Android phone. Bluetooth and NFC features are untestable on emulators.
268
+
269
+ **The fix:**
270
+ Include at least one real-device stage in CI using cloud device farms (Firebase Test Lab, BrowserStack, AWS Device Farm). Maintain a physical device lab with: one low-end Android ($150 range), one mid-range, one flagship, one iPhone SE-class, and one current flagship iPhone. Test performance-sensitive features exclusively on real devices.
271
+
272
+ **Detection rule:**
273
+ Review CI configuration for device targets. If all targets are emulator/simulator images with no real-device stage, AP-11 is present. Check if performance benchmarks are captured on real hardware.
274
+
275
+ ---
276
+
277
+ ### AP-12: No Mobile Accessibility
278
+
279
+ **Also known as:** The Exclusion App, Screen Reader Blindspot
280
+ **Frequency:** Very Common
281
+ **Severity:** High
282
+ **Detection difficulty:** Medium
283
+
284
+ **What it looks like:**
285
+ Images and icons without `accessibilityLabel`/`contentDescription`. Touch targets smaller than 44x44pt (iOS) or 48x48dp (Android). No support for Dynamic Type or font scaling. Custom UI components invisible to screen readers. Gesture-only interactions with no alternative. Apps that work visually but are completely unusable with VoiceOver or TalkBack.
286
+
287
+ **Why developers do it:**
288
+ Accessibility testing requires learning screen reader tools. Automated scanners catch only a fraction of real issues. "Our users don't use screen readers." Developers create custom alerts/notifications instead of using platform APIs, breaking screen reader support. QA teams report difficulty even setting up TalkBack.
289
+
290
+ **What goes wrong:**
291
+ 15% of the global population has some form of disability. Legal liability under ADA, EAA, and equivalent legislation is increasing. Users who can't complete onboarding with a screen reader will never become customers. Platform accessibility features (VoiceOver, TalkBack, Switch Control) rely on semantic markup that custom components often omit.
292
+
293
+ **The fix:**
294
+ Add `accessibilityLabel` to every interactive element. Ensure minimum touch target sizes. Test with VoiceOver (iOS) and TalkBack (Android) on real devices through the complete onboarding flow. Use `Semantics` widget in Flutter. Support Dynamic Type and font scaling. Provide alternatives for gesture-only interactions.
295
+
296
+ **Detection rule:**
297
+ Search for interactive elements (`Button`, `TouchableOpacity`, `GestureDetector`) without accessibility labels. Run platform accessibility scanner (Xcode Accessibility Inspector, Android Accessibility Scanner). Attempt full app navigation using only a screen reader.
298
+
299
+ ---
300
+
301
+ ### AP-13: Unoptimized Images
302
+
303
+ **Also known as:** The 12MB Avatar, Full-Resolution Everywhere, Memory Balloon
304
+ **Frequency:** Very Common
305
+ **Severity:** Medium
306
+ **Detection difficulty:** Medium
307
+
308
+ **What it looks like:**
309
+ Loading full 4000x3000 camera photos into a 100x100 avatar view. Downloading 12MB PNGs when a 50KB WebP would suffice. No placeholder or progressive loading -- the screen is blank until the full image arrives. Images are the largest performance bottleneck in React Native applications, consuming excessive bandwidth and causing memory leaks.
310
+
311
+ **Why developers do it:**
312
+ Image optimization is an infrastructure concern that falls between frontend and backend ownership. "The CDN handles it." Developers use the image URL as-is from the API without requesting a sized variant. Local testing with cached images hides the problem.
313
+
314
+ **What goes wrong:**
315
+ Each unresized image consumes width x height x 4 bytes of memory. A 4000x3000 image uses 48MB of RAM for a thumbnail. Scrolling lists of unoptimized images cause memory spikes that trigger OOM kills. Bandwidth waste on cellular connections. Battery drain from decoding oversized images.
316
+
317
+ **The fix:**
318
+ Request appropriately sized images from the server (use CDN image transformation parameters). Decode images at display size, not source size. Use platform image loading libraries (Glide/Coil for Android, SDWebImage/Kingfisher for iOS, `cached_network_image` for Flutter). Prefer WebP/AVIF over PNG/JPEG. Show shimmer placeholders during loading.
319
+
320
+ **Detection rule:**
321
+ Compare image download size vs. display size. Flag any image where source resolution exceeds 2x the display resolution. Profile memory during list scrolling with images. Check for `BitmapFactory.decodeFile()` or `UIImage(contentsOfFile:)` without resize parameters.
322
+
323
+ ---
324
+
325
+ ### AP-14: Keyboard Covering Inputs
326
+
327
+ **Also known as:** The Hidden Field, Keyboard Blindness, Type-and-Hope
328
+ **Frequency:** Common
329
+ **Severity:** Medium
330
+ **Detection difficulty:** Easy
331
+
332
+ **What it looks like:**
333
+ The user taps a text field near the bottom of the screen, the keyboard slides up, and the field is now hidden behind it. The user types blindly, unable to see what they're entering. Login forms, address fields, and chat inputs are the most common victims.
334
+
335
+ **Why developers do it:**
336
+ On the developer's primary test device it often works by accident due to screen size. Keyboard behavior differs significantly between iOS and Android, and between portrait and landscape. React Native's cross-platform abstraction hides the underlying platform keyboard management complexity.
337
+
338
+ **What goes wrong:**
339
+ Users can't see what they're typing in critical fields (passwords, payment info). Form submission errors increase because users can't see validation messages. The "submit" button is hidden behind the keyboard with no way to reach it. Users abandon forms mid-completion.
340
+
341
+ **The fix:**
342
+ iOS: `UIScrollView` with `contentInset` adjustment or `IQKeyboardManager`. Android: `android:windowSoftInputMode="adjustResize"` in the manifest. React Native: `KeyboardAvoidingView` with `behavior="padding"` on iOS. Flutter: `Scaffold.resizeToAvoidBottomInset: true` (the default) plus `SingleChildScrollView` for long forms. Always test every text field in both portrait and landscape.
343
+
344
+ **Detection rule:**
345
+ Tap every text field on every screen and verify it remains visible when the keyboard appears. Test in landscape mode. Check for missing `KeyboardAvoidingView` (React Native) or `adjustResize` (Android). Automated UI tests should verify field visibility after keyboard presentation.
346
+
347
+ ---
348
+
349
+ ### AP-15: Insecure Data Storage
350
+
351
+ **Also known as:** Plaintext Secrets, The UserDefaults Token, OWASP M9
352
+ **Frequency:** Common
353
+ **Severity:** Critical
354
+ **Detection difficulty:** Medium
355
+
356
+ **What it looks like:**
357
+ Auth tokens stored in `SharedPreferences` (Android) or `UserDefaults` (iOS) in plain text. API keys hardcoded in the app bundle. Sensitive user data in unencrypted SQLite databases. Passwords cached in `TextField` auto-fill without `secureTextEntry`. Ranked M9 in OWASP Mobile Top 10.
358
+
359
+ **Why developers do it:**
360
+ `SharedPreferences` and `UserDefaults` are the first storage APIs developers learn. They work, they're simple, and the data "looks hidden" because it's in the app's sandbox. Secure storage (Keystore/Keychain) has more complex APIs. "Nobody will root their phone to steal a token."
361
+
362
+ **What goes wrong:**
363
+ Snapchat (2014) suffered a breach exposing millions of usernames and phone numbers due to insecure storage. Dating apps (Tinder, OKCupid, Bumble) have been scrutinized for storing user data insecurely, exposing names, messages, and location data. A Philips HealthSuite vulnerability exposed users' heart rate, blood pressure, and sleep data through weak encryption. Rooted/jailbroken devices, device backups, and malware can all access plaintext storage.
364
+
365
+ **The fix:**
366
+ Store sensitive data in Android Keystore / iOS Keychain. Use `EncryptedSharedPreferences` (Android) or `flutter_secure_storage`. Never hardcode API keys -- use server-side proxying or runtime configuration. Enable `secureTextEntry` on password fields. Disable app data backup for sensitive files. Run MobSF in CI for automated security scanning.
367
+
368
+ **Detection rule:**
369
+ Search for `SharedPreferences.putString("token"` / `UserDefaults.set(token` in auth code. Check for hardcoded strings matching API key patterns. Verify sensitive database files use encryption. Flag any `TextField` handling passwords without `secureTextEntry`/`inputType="textPassword"`.
370
+
371
+ ---
372
+
373
+ ### AP-16: No Error States
374
+
375
+ **Also known as:** The Infinite Spinner, Crash-or-Nothing, Optimistic Blindness
376
+ **Frequency:** Very Common
377
+ **Severity:** Medium
378
+ **Detection difficulty:** Easy
379
+
380
+ **What it looks like:**
381
+ Screens have only two states: loading and success. Network failures show infinite spinners. Empty lists show blank screens. Errors are swallowed silently. Force-unwrapped optionals (`snapshot.data!`) crash the app instead of showing a message. No retry button, no "something went wrong" screen, no way for the user to recover.
382
+
383
+ **Why developers do it:**
384
+ Designers deliver mockups for the happy path. Error states are "we'll handle that later" -- and later never comes. Developers test with working APIs and fast connections. Force-unwrapping is shorter than proper null checking.
385
+
386
+ **What goes wrong:**
387
+ Users see infinite spinners and assume the app is broken, then uninstall. Silent failures cause data loss (the user thinks their action succeeded). No retry mechanism means users must kill and restart the app. Empty states without guidance leave users confused about whether data will appear.
388
+
389
+ **The fix:**
390
+ Design every screen with four states: loading, success, empty, and error. Each error state must include: what went wrong (in user language), what the user can do (retry button, check connection), and a way to report the issue. Use sealed classes/enums for UI state to make missing states a compile error.
391
+
392
+ **Detection rule:**
393
+ Search for forced unwraps (`!`, `as!`) in UI code. Check `FutureBuilder`/`useQuery` for missing `hasError` handling. Review every screen for: does it have a loading state? An empty state? An error state with retry? If any of the four states is missing, AP-16 is present.
394
+
395
+ ---
396
+
397
+ ### AP-17: Ignoring Memory Pressure
398
+
399
+ **Also known as:** The Leaky App, OOM Surprise, Memory Hog
400
+ **Frequency:** Common
401
+ **Severity:** High
402
+ **Detection difficulty:** Hard
403
+
404
+ **What it looks like:**
405
+ No `onTrimMemory` (Android) or `didReceiveMemoryWarning` (iOS) handler. Image caches grow unbounded. Navigating back and forth between screens monotonically increases memory usage. The app is killed by the OS with no warning, appearing as a "random crash" to users.
406
+
407
+ **Why developers do it:**
408
+ Memory management is invisible during normal testing. Modern devices have enough RAM to mask leaks during short QA sessions. Memory profiling tools require setup and expertise. "The garbage collector handles it." Developers don't test with other memory-intensive apps running simultaneously.
409
+
410
+ **What goes wrong:**
411
+ The OS kills the highest-memory background app first -- that's often the app that doesn't manage its cache. Unclosed streams, retained references, and improper widget disposal cause Flutter memory leaks. React Native closures that capture parent scope variables cause leaks that GC cannot collect. On low-end Android devices with 2-3GB RAM shared across all apps, aggressive memory use means frequent kills.
412
+
413
+ **The fix:**
414
+ Implement memory pressure callbacks: `ComponentCallbacks2.onTrimMemory()` (Android), `applicationDidReceiveMemoryWarning` (iOS). Set maximum sizes on image and data caches. Use weak references for observers and delegates. Profile with LeakCanary (Android), Instruments Allocations (iOS), or DevTools Memory view (Flutter). Verify memory returns to baseline after navigating 10 screens and back.
415
+
416
+ **Detection rule:**
417
+ Check Application/AppDelegate subclass for memory pressure handlers. Profile memory over a 10-screen navigation cycle; if it doesn't return within 20% of baseline, suspect leaks. Search for retained `self` in closures (iOS), non-weak references in observers, and uncancelled streams.
418
+
419
+ ---
420
+
421
+ ### AP-18: No List Virtualization
422
+
423
+ **Also known as:** The Render-All List, ScrollView With Map, Infinite DOM
424
+ **Frequency:** Common
425
+ **Severity:** High
426
+ **Detection difficulty:** Easy
427
+
428
+ **What it looks like:**
429
+ Rendering all list items at once using `ScrollView` with `.map()` (React Native), `Column` with list-generated children (Flutter), or `LinearLayout` in a `ScrollView` (Android). A feed of 500 items renders 500 views simultaneously, consuming memory proportional to the full list rather than the visible window.
430
+
431
+ **Why developers do it:**
432
+ `ScrollView` + `map` is the most intuitive pattern. It works fine with 10 items during development. Virtualized list APIs have more complex configuration. Nesting a `FlatList` inside a `ScrollView` -- a critical anti-pattern -- causes the VirtualizedList to try rendering all items at once since the ScrollView doesn't constrain its content.
433
+
434
+ **What goes wrong:**
435
+ Memory usage scales with list length, not screen size. Initial render time grows linearly -- 5000 items means 5000 view instantiations before anything appears. FlatList destroys offscreen items but re-creates them on scroll-back, which can still cause jank. Android's RecyclerView recycles views efficiently, but only if actually used. LazyColumn (Compose) emits new composables on scroll rather than recycling, but is still far cheaper than rendering all at once.
436
+
437
+ **The fix:**
438
+ Use virtualized list components: `FlatList`/`FlashList` (React Native), `ListView.builder` (Flutter), `RecyclerView` (Android), `UICollectionView` with diffable data source (iOS), `LazyColumn` (Compose). Never nest virtualized lists inside `ScrollView`. Set `keyExtractor` and stable keys to minimize re-renders. For very long lists, consider `FlashList` (React Native) which recycles views like RecyclerView.
439
+
440
+ **Detection rule:**
441
+ Search for `ScrollView` containing `.map()`, `Column` with list-generated children, or `LinearLayout` inside `ScrollView`. Check for `VirtualizedList` nested inside `ScrollView` (React Native console warning). Profile initial render time with 1000+ items; if it exceeds 500ms, suspect missing virtualization.
442
+
443
+ ---
444
+
445
+ ### AP-19: Not Handling Interruptions
446
+
447
+ **Also known as:** The Fragile Flow, Phone-Call Crash, State Amnesia
448
+ **Frequency:** Common
449
+ **Severity:** Medium
450
+ **Detection difficulty:** Medium
451
+
452
+ **What it looks like:**
453
+ A user fills out a multi-step checkout form, receives a phone call, returns to the app, and all progress is lost. The payment flow crashes after a system alert. Background-to-foreground transitions reset navigation state. The camera permission dialog interrupts a flow that doesn't resume.
454
+
455
+ **Why developers do it:**
456
+ Multi-step flows are tested linearly start-to-finish. Nobody calls the test phone mid-checkout. State persistence across interruptions requires explicit `onSaveInstanceState` (Android), state restoration (iOS), or equivalent mechanisms. Developers underestimate how often users switch apps mid-task.
457
+
458
+ **What goes wrong:**
459
+ Users lose partially completed forms and abandon the task. Payment flows that don't survive interruption cause double charges or lost orders. On Android, the OS can destroy and recreate an Activity at any time, wiping all in-memory state. iOS App Switcher previews can trigger `viewDidLoad` again if the app was purged from memory.
460
+
461
+ **The fix:**
462
+ Save form state on every field change, not just on submit. Use `onSaveInstanceState`/`onRestoreInstanceState` (Android) or state restoration (iOS). Persist multi-step flow progress to local storage. Test every critical flow by: receiving a phone call, triggering a system alert, switching to another app for 5 minutes, and returning.
463
+
464
+ **Detection rule:**
465
+ Check for `onSaveInstanceState` implementation in Activities with forms. Search for multi-step flows without intermediate state persistence. Automated test: start a flow, send the app to background for 30 seconds, return, and verify state is intact.
466
+
467
+ ---
468
+
469
+ ### AP-20: WebView for Everything
470
+
471
+ **Also known as:** The Browser-in-a-Box, HTML App in Disguise, Web Wrapper
472
+ **Frequency:** Common
473
+ **Severity:** High
474
+ **Detection difficulty:** Easy
475
+
476
+ **What it looks like:**
477
+ The entire app is a `WebView` loading a mobile website. Core features run in embedded web pages. Navigation mixes native and web transitions. The app feels sluggish, doesn't match platform conventions, and is functionally a browser bookmark with an app icon. Google has explicitly forbidden WebView for OAuth sign-ins due to phishing risks.
478
+
479
+ **Why developers do it:**
480
+ "We already have a website." A WebView wrapper ships faster than a native rewrite. Code sharing between web and mobile seems cost-effective. The team has web developers but not mobile developers. WebViews offer rapid development speed and code reuse.
481
+
482
+ **What goes wrong:**
483
+ WebViews are slower, more memory-intensive, and offer worse scroll/animation performance than native views. Older `UIWebView` (iOS, now deprecated) shared the process with the native app, creating security vulnerabilities. WebViews expose apps to XSS and other web-based attacks that native UI is immune to. Debugging is harder with limited visibility into the WebView's internal workings. Platform accessibility features often don't reach inside WebView content. Profiling tools can't offer the same granularity as in native development.
484
+
485
+ **The fix:**
486
+ Use WebViews only for content that is genuinely web-native: terms of service, blog posts, third-party embedded content. For core features, build native or use cross-platform frameworks (React Native, Flutter) that compile to native components. If WebView is unavoidable, use `WKWebView` (iOS) which runs in a separate process, and enable only the minimum required JavaScript APIs. Never use WebView for authentication flows.
487
+
488
+ **Detection rule:**
489
+ Check if the root view controller or main activity hosts a full-screen `WebView`. Count native screens vs. WebView screens; if WebViews exceed 30% of the app's surface area, evaluate whether a native/cross-platform rebuild is justified. Flag any WebView-based login or payment flow.
490
+
491
+ ---
492
+
493
+ ## Root Cause Analysis
494
+
495
+ | Root Cause | Contributing Anti-Patterns | Mitigation Strategy |
496
+ |---|---|---|
497
+ | **Desktop development mindset** | AP-01, AP-04, AP-05, AP-11 | Treat mobile as a constrained environment by default; assume slow network, limited battery, small screen |
498
+ | **Emulator-centric development** | AP-01, AP-02, AP-05, AP-11, AP-14 | Require real-device testing every sprint; budget for device lab or cloud farm |
499
+ | **Happy path tunnel vision** | AP-04, AP-08, AP-09, AP-16, AP-19 | Design all four states (loading, success, empty, error) for every screen before marking complete |
500
+ | **Prototype-to-production pipeline** | AP-01, AP-06, AP-07, AP-13, AP-18 | Enforce performance budgets in CI: frame time < 16ms, memory < 200MB, list scroll jank = 0 |
501
+ | **Security as afterthought** | AP-08, AP-15, AP-20 | Include OWASP Mobile Top 10 checklist in code review; run MobSF in CI |
502
+ | **Missing design specs** | AP-02, AP-03, AP-12, AP-14, AP-16 | Require specs to include responsive breakpoints, error states, accessibility annotations, keyboard behavior |
503
+ | **"We already have a website" fallacy** | AP-03, AP-12, AP-20 | Evaluate native vs. cross-platform UX ROI before defaulting to WebView |
504
+ | **Measurement blindness** | AP-05, AP-06, AP-07, AP-13, AP-17 | Instrument production apps with Firebase Performance, Sentry, or New Relic Mobile; set alerting thresholds |
505
+ | **Incremental complexity creep** | AP-01, AP-07, AP-18 | Periodic architecture reviews; lint rules for synchronous I/O, unvirtualized lists, leaked listeners |
506
+ | **Cross-platform cost pressure** | AP-03, AP-09, AP-12, AP-20 | Budget platform-specific adaptations; "write once" does not mean "test once" |
507
+
508
+ ---
509
+
510
+ ## Self-Check Questions
511
+
512
+ Use these during code review, sprint planning, or post-mortem analysis to surface anti-patterns before they reach production.
513
+
514
+ 1. **Can a user complete the core task with airplane mode enabled?** If not, which screens fail and what do they show? *(AP-04, AP-16)*
515
+
516
+ 2. **What happens when the user rotates, folds their phone, or switches to split-screen during a multi-step flow?** Does state survive? *(AP-02, AP-07, AP-19)*
517
+
518
+ 3. **Has anyone tested this feature on a physical device costing under $200?** What is the frame rate during scrolling? *(AP-01, AP-11, AP-13, AP-18)*
519
+
520
+ 4. **If I deny every permission, can I still use any feature?** Does the app explain what I'm missing? *(AP-08)*
521
+
522
+ 5. **How many network requests does the app make in the first 60 seconds?** How many are duplicates or could be batched? *(AP-05, AP-06)*
523
+
524
+ 6. **Can a VoiceOver/TalkBack user complete the entire onboarding flow?** Tested on a real device? *(AP-12)*
525
+
526
+ 7. **What is memory footprint after navigating 10 screens and back?** Does it return to baseline? *(AP-07, AP-17)*
527
+
528
+ 8. **If I tap every deep link while not logged in, where do I land?** Does the app remember my destination after login? *(AP-09)*
529
+
530
+ 9. **How many push notifications does the average user receive per day?** What percentage lead to specific referenced content? *(AP-10)*
531
+
532
+ 10. **What does the list screen look like with 5,000 items?** Is it virtualized? What is the initial render time? *(AP-18)*
533
+
534
+ 11. **Are auth tokens in SharedPreferences/UserDefaults or in Keystore/Keychain?** *(AP-15)*
535
+
536
+ 12. **Does the keyboard cover any input field on any screen, including landscape mode?** *(AP-14)*
537
+
538
+ 13. **Would an iOS user and an Android user both feel navigation is "natural" on their platform?** *(AP-03)*
539
+
540
+ 14. **If I start a payment flow, receive a phone call, and return, does the flow resume?** *(AP-19)*
541
+
542
+ 15. **What percentage of screens are WebViews vs. native? Is each justified?** *(AP-20)*
543
+
544
+ ---
545
+
546
+ ## Code Smell Quick Reference
547
+
548
+ | Code Smell | Likely Anti-Pattern | Where to Look | Severity |
549
+ |---|---|---|---|
550
+ | `URL().readText()` or synchronous `dataTask` without async wrapper | AP-01: Blocking UI Thread | `onCreate`/`viewDidLoad` | Critical |
551
+ | Hardcoded pixel values (`width: 375`, `height: 812`) | AP-02: Not Handling Screen Sizes | Layout XML, style objects | High |
552
+ | No `Platform.select()` or platform checks in cross-platform code | AP-03: Ignoring Platform Conventions | Navigation, UI chrome | Medium |
553
+ | `fetch()`/`http.get()` without try/catch and cache fallback | AP-04: No Offline Mode | API service layers | High |
554
+ | `setInterval`/`Timer.periodic` without cancellation logic | AP-05: Excessive Network Calls | Background services, polling | High |
555
+ | API calls in `viewWillAppear`/`onResume`/`useEffect` (no deps) | AP-06: No Caching | Lifecycle methods, hooks | Medium |
556
+ | `registerListener` without matching `unregisterListener` | AP-07: Ignoring Lifecycle | `onCreate`/`initState` without cleanup | High |
557
+ | More than 5 `<uses-permission>` in manifest | AP-08: Bad Permissions | `AndroidManifest.xml`, `Info.plist` | High |
558
+ | Deep link handler always opens `HomeScreen` | AP-09: Deep Linking Failures | App delegate, intent filters | Medium |
559
+ | Notification permission in `didFinishLaunching`/`onCreate` | AP-10: Push Notification Abuse | App startup code | Medium |
560
+ | CI config with only emulator targets, no real-device stage | AP-11: Emulator-Only Testing | `.github/workflows`, CI config | High |
561
+ | Interactive elements without `accessibilityLabel` | AP-12: No Accessibility | Custom buttons, icon-only controls | High |
562
+ | `UIImage(contentsOfFile:)`/`BitmapFactory.decodeFile()` without resize | AP-13: Unoptimized Images | Image loading, list cells | Medium |
563
+ | No `KeyboardAvoidingView`/`adjustResize`/`resizeToAvoidBottomInset` | AP-14: Keyboard Covering Inputs | Screens with text inputs | Medium |
564
+ | `SharedPreferences.putString("token")`/`UserDefaults.set(token)` | AP-15: Insecure Data Storage | Auth logic, session management | Critical |
565
+ | `snapshot.data!` or missing `hasError` check | AP-16: No Error States | Async UI builders | Medium |
566
+ | No `onTrimMemory`/`didReceiveMemoryWarning` handler | AP-17: Ignoring Memory Pressure | Application/AppDelegate class | High |
567
+ | `ScrollView` with `.map()` or `Column` with generated children | AP-18: No List Virtualization | List/feed screens | High |
568
+ | No `onSaveInstanceState`/state restoration in multi-step flows | AP-19: Not Handling Interruptions | Checkout, forms, wizards | Medium |
569
+ | Full-screen `WebView` as main content view | AP-20: WebView for Everything | Main activity/root view controller | High |
570
+
571
+ ---
572
+
573
+ *Researched: 2026-03-08 | Sources: [OWASP Mobile Top 10](https://owasp.org/www-project-mobile-top-10/), [OWASP M9: Insecure Data Storage](https://owasp.org/www-project-mobile-top-10/2023-risks/m9-insecure-data-storage), [Android Developers - Build for Billions](https://developer.android.com/docs/quality-guidelines/build-for-billions/connectivity), [Android Network Optimization](https://developer.android.com/develop/connectivity/network-ops/network-access-optimization), [React Native Performance](https://reactnative.dev/docs/performance), [React Native Virtualization](https://medium.com/@anisurrahmanbup/react-native-virtualization-performance-optimization-flatlist-sectionlist-virtualizedlist-8430da4c68b3), [React Native Nested Virtualization Anti-Pattern](https://medium.com/@anisurrahmanbup/react-native-nested-virtualization-anti-pattern-performance-optimization-958e98d4ea79), [Flutter Concurrency and Isolates](https://docs.flutter.dev/perf/isolates), [Flutter Jank and Memory Leaks](https://www.mindfulchase.com/explore/troubleshooting-tips/fixing-jank,-state-management-pitfalls,-and-memory-leaks-in-flutter.html), [React Native Memory Leak Fixes](https://instamobile.io/blog/react-native-memory-leak-fixes/), [Push Notification Statistics 2025](https://www.businessofapps.com/marketplace/push-notifications/research/push-notifications-statistics/), [Push Notification Uninstall Impact](https://www.mobiloud.com/blog/push-notification-statistics), [Mobile App Permission Best Practices](https://www.nngroup.com/articles/permission-requests/), [App Permission Install Rates](https://thisisglance.com/blog/best-practices-for-app-permissions-how-to-not-scare-away-users), [Mobile App Accessibility Guide 2026](https://www.accessibilitychecker.org/guides/mobile-apps-accessibility/), [Mobile Screen Readers](https://www.levelaccess.com/blog/part-1-mobile-screen-readers/), [Universal Links & App Links Guide 2026](https://dev.to/marko_boras_64fe51f7833a6/universal-deep-links-2026-complete-guide-36c4), [Deep Linking Failures](https://app.urlgeni.us/blog/why-doesnt-app-deep-linking-always-work), [WebView Security Pitfalls](https://www.zellic.io/blog/webview-security/), [WebView Usage and Challenges](https://webview-cg.github.io/usage-and-challenges/), [Battery Drain Best Practices](https://www.sidekickinteractive.com/uncategorized/best-practices-for-reducing-app-battery-drain/), [Background Task Battery Patterns](https://medium.com/@hiren6997/these-background-task-patterns-are-destroying-your-apps-battery-life-cc51318826ff), [Offline-First Architecture Android](https://androidengineers.substack.com/p/the-complete-guide-to-offline-first), [Offline Mobile App Design](https://leancode.co/blog/offline-mobile-app-design), [Android Development Anti-Patterns](https://mrkivan820.medium.com/5-common-android-development-anti-patterns-and-how-to-fix-or-avoid-them-ceac18ad175d), [Mobile App Mistakes 2026](https://iphtechnologies.com/deadly-mobile-app-development-mistakes-2026/), [UI Pitfalls 2026](https://www.webpronews.com/7-ui-pitfalls-mobile-app-developers-should-avoid-in-2026/), [Keyboard Handling React Native](https://docs.expo.dev/guides/keyboard-handling/), [Flutter Keyboard Overflow](https://www.dhiwise.com/post/flutter-keyboard-overflow-conquering-the-on-screen-keyboard), [Flutter vs React Native Benchmarks 2025](https://www.synergyboat.com/blog/flutter-vs-react-native-vs-native-performance-benchmark-2025)*