@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,536 @@
1
+ # Data Modeling -- Architecture Expertise Module
2
+
3
+ > Data modeling defines how data is structured, stored, and related. Wrong data models are
4
+ > extremely expensive to fix -- requiring migrations, code changes, and often downtime.
5
+ > Getting the model right before writing application code is one of the highest-ROI
6
+ > architectural activities.
7
+
8
+ > **Category:** Data
9
+ > **Complexity:** Moderate
10
+ > **Applies when:** Any system that persists state -- which is every system
11
+
12
+ ---
13
+
14
+ ## What This Is (and What It Isn't)
15
+
16
+ **Data modeling** is the disciplined process of discovering, analyzing, and defining the data
17
+ requirements of a system, then representing those requirements as a formal structure. It is
18
+ not "drawing tables in a diagramming tool." It is identifying the entities your system cares
19
+ about, the relationships between them, the constraints that must hold, and the access
20
+ patterns that determine how data should be physically organized.
21
+
22
+ A data model exists at three levels of abstraction:
23
+
24
+ | Level | Purpose | Audience | Artifact |
25
+ |-------|---------|----------|----------|
26
+ | **Conceptual** | Capture business entities and high-level relationships | Business stakeholders, product owners | ER diagram with business names |
27
+ | **Logical** | Define attributes, data types, cardinality, constraints, normalization | Architects, senior engineers | Fully attributed ER diagram with keys |
28
+ | **Physical** | Map the logical model to a specific database engine | DBAs, backend engineers | DDL scripts, migration files |
29
+
30
+ **Entity-Relationship (ER) modeling** is the primary technique at the conceptual and logical
31
+ levels. An ER model defines **entities** (things the system tracks), **attributes** (their
32
+ properties), **relationships** (how entities relate), **cardinality** (one-to-many,
33
+ many-to-many), and **constraints** (rules that must hold).
34
+
35
+ ### What It Is NOT
36
+
37
+ - **Not a one-time activity.** Data models evolve as requirements change. The initial model
38
+ is a hypothesis refined through production experience.
39
+ - **Not just for relational databases.** Document stores, graph databases, and event stores
40
+ all require data modeling -- the techniques differ but the discipline is the same.
41
+ - **Not optional for "agile" teams.** Spend 2-4 hours modeling before writing schema code.
42
+ That prevents weeks of migration pain later.
43
+ - **Not the same as ORM class definitions.** ORM classes are a physical model artifact.
44
+ Designing by writing Django models or Hibernate entities skips the conceptual and logical
45
+ levels, leading to schemas shaped by framework conventions rather than business requirements.
46
+
47
+ ---
48
+
49
+ ## When to Use It
50
+
51
+ ### 1. Greenfield Systems
52
+ Before writing any schema code, invest in a logical data model. The cost of changing a model
53
+ increases exponentially after production launch.
54
+
55
+ **Evidence -- Shopify:** Their architecture team documented that the most expensive technical
56
+ debt traces back to early data model decisions in their Rails monolith. Tables designed for
57
+ a simple store in 2006 required years of migration to support multi-channel commerce.
58
+
59
+ ### 2. Domain Complexity
60
+ When the domain has 15+ entities with non-trivial relationships (hierarchies, polymorphism,
61
+ temporal validity), formal modeling prevents inconsistencies that surface months later as bugs.
62
+
63
+ **Evidence -- Healthcare systems:** The "Bad CaRMa" case study documented a CRM system that
64
+ skipped formal modeling and used generic EAV tables, generating an estimated ROI of minus
65
+ $10 million during rebuild.
66
+
67
+ ### 3. Multiple Teams Writing to the Same Database
68
+ A shared logical model prevents teams from creating conflicting schemas, duplicate entities
69
+ under different names, or incompatible representations of the same concept.
70
+
71
+ ### 4. Regulatory Requirements
72
+ GDPR, HIPAA, SOX, and PCI-DSS impose constraints on how data is structured, retained, and
73
+ deleted. A formal model makes compliance auditable.
74
+
75
+ ---
76
+
77
+ ## When NOT to Use It
78
+
79
+ ### 1. Throwaway Prototypes
80
+ Code deleted within 2 weeks can use a quick schema. But label it disposable -- the danger is
81
+ prototypes that survive into production.
82
+
83
+ ### 2. Over-Normalization
84
+ Normalizing to BCNF or 5NF when 3NF is sufficient creates unnecessary join complexity.
85
+ **Anti-pattern:** A team normalized addresses into five tables (street, city, state, country,
86
+ postal_code). Every query required five joins. A single `addresses` table was the right model.
87
+
88
+ ### 3. Schema-on-Read Workloads
89
+ For data lake ingestion, log aggregation, or ML feature stores where data shape is unknown
90
+ at write time, use schema-on-read (Parquet, JSON in document stores) and model at the
91
+ consumption layer.
92
+
93
+ ### 4. Event-Sourced Systems (Partially)
94
+ Events are append-only and the event log is the source of truth. You still model events and
95
+ projections, but the techniques differ significantly from relational modeling.
96
+
97
+ ---
98
+
99
+ ## How It Works
100
+
101
+ ### Normalization: The Foundation
102
+
103
+ Normalization organizes data to reduce redundancy and prevent update anomalies:
104
+
105
+ **1NF:** Every column contains atomic values. No repeating groups. Each row is uniquely
106
+ identifiable.
107
+
108
+ **2NF:** Satisfies 1NF. Every non-key attribute depends on the *entire* primary key (no
109
+ partial dependencies). Only relevant for composite keys.
110
+
111
+ **3NF:** Satisfies 2NF. No transitive dependencies: non-key attributes depend only on the
112
+ primary key, not on other non-key attributes.
113
+
114
+ **BCNF:** Satisfies 3NF. Every determinant is a candidate key. Rarely needed in practice --
115
+ 3NF handles 95%+ of real-world schemas.
116
+
117
+ **Rule of thumb:** Normalize to 3NF for OLTP. Denormalize deliberately for read-heavy
118
+ workloads. Document every denormalization decision and how consistency is maintained.
119
+
120
+ ### Natural Keys vs. Surrogate Keys
121
+
122
+ | Aspect | Natural Key | Surrogate Key |
123
+ |--------|-------------|---------------|
124
+ | **Definition** | From business data (email, ISBN) | System-generated (auto-increment, UUID) |
125
+ | **Stability** | Can change (user changes email) | Never changes |
126
+ | **Size** | Variable, often larger (varchar) | Fixed, compact (bigint) or 16 bytes (UUID) |
127
+ | **Business meaning** | Self-documenting | Requires joins to understand what a row represents |
128
+ | **Cross-system** | Natural joins without mapping | Requires mapping tables between systems |
129
+
130
+ **Recommendation:** Use surrogate keys (bigint or UUIDv7) as primary keys. Enforce natural
131
+ keys as unique constraints. This gives you stability with query clarity.
132
+
133
+ ### UUID vs. Integer at Scale
134
+
135
+ | Key Type | Storage | Insert Pattern | Throughput | Best For |
136
+ |----------|---------|----------------|------------|----------|
137
+ | **bigint auto-increment** | 8 bytes | Sequential (end of B-tree) | Highest | Single-database OLTP |
138
+ | **UUIDv4 (random)** | 16 bytes | Random (page splits, cache misses) | Lowest | Legacy compatibility only |
139
+ | **UUIDv7 (time-ordered)** | 16 bytes | Sequential (time-sorted) | High | New systems, distributed (recommended default) |
140
+ | **Snowflake ID** | 8 bytes | Sequential (timestamp-encoded) | Highest | High-scale distributed (Twitter, Discord) |
141
+
142
+ PlanetScale documented that random UUIDs produce "orders of magnitude more WAL volume" than
143
+ sequential keys in MySQL. UUIDv7 is supported natively in PostgreSQL 17+.
144
+
145
+ ### Indexing Strategy
146
+
147
+ 1. **Primary keys are indexed automatically.** Do not create duplicates.
148
+ 2. **Index foreign keys.** Most databases do NOT auto-create these. Missing FK indexes are
149
+ the number-one production performance issue.
150
+ 3. **Index WHERE, ORDER BY, GROUP BY columns** -- but only if selectivity is high.
151
+ 4. **Composite indexes follow the left-prefix rule.** Index on (a, b, c) supports queries
152
+ on (a), (a, b), or (a, b, c) -- but NOT (b, c) alone.
153
+ 5. **Partial indexes** for soft-delete patterns: `CREATE INDEX ... WHERE deleted_at IS NULL`.
154
+ 6. **Do not over-index.** Each index slows writes and consumes storage.
155
+
156
+ ### Soft Deletes
157
+
158
+ Soft deletion marks records as deleted (`deleted_at` timestamp) rather than removing them.
159
+
160
+ **Use when:** Financial records, audit-required data, regulatory compliance, data referenced
161
+ by foreign keys, user-facing "archive" features.
162
+
163
+ **Avoid when:** GDPR right-to-erasure (soft-deleted data is still personal data), temporary
164
+ data, performance-critical tables.
165
+
166
+ **Pitfalls:** Every query must include `WHERE deleted_at IS NULL`. UNIQUE constraints must
167
+ become partial. Table bloat accumulates without purge policies. Use partial indexes to
168
+ mitigate:
169
+ ```sql
170
+ CREATE INDEX idx_users_email_active ON users (email) WHERE deleted_at IS NULL;
171
+ CREATE UNIQUE INDEX idx_users_email_unique ON users (email) WHERE deleted_at IS NULL;
172
+ ```
173
+
174
+ ### Polymorphic Relationships
175
+
176
+ When multiple entity types participate in the same relationship:
177
+
178
+ **1. STI (Rails polymorphic):** Single `commentable_type` + `commentable_id` column. Simple
179
+ but cannot enforce foreign keys. Anti-pattern in strict relational modeling.
180
+
181
+ **2. Exclusive Belongs-To:** Nullable FK per type with a CHECK constraint ensuring exactly
182
+ one is set. Real FKs, but adding types requires ALTER TABLE.
183
+
184
+ **3. Join Tables per Type (Recommended):** Separate `post_comments`, `photo_comments` tables.
185
+ Full referential integrity, no NULLs, extensible without altering the base table.
186
+
187
+ ### Schema Evolution: The Expand-Contract Pattern
188
+
189
+ Unsafe changes (rename/remove columns, change types) require the expand-contract pattern:
190
+
191
+ **Expand:** Add new column/table alongside old. Deploy code writing to both. Backfill data.
192
+ **Migrate:** Deploy code reading from the new structure. Verify correctness.
193
+ **Contract:** Stop writing to old. Drop old column/table.
194
+
195
+ Each phase is a separate deployment, independently safe and reversible. Tools like Xata's
196
+ `pgroll` automate this for PostgreSQL using virtual schemas with views.
197
+
198
+ ### Event Sourcing as an Alternative
199
+
200
+ Instead of storing current state, event sourcing stores the sequence of events that produced
201
+ it. You still model event schemas, projection schemas, and snapshot schemas -- but the
202
+ techniques differ fundamentally from entity-centric modeling.
203
+
204
+ ---
205
+
206
+ ## Trade-Offs Matrix
207
+
208
+ | Approach | Writes | Reads | Integrity | Schema Flexibility | Best For |
209
+ |----------|--------|-------|-----------|--------------------|----|
210
+ | **Fully Normalized (3NF)** | Excellent | Poor (joins) | Excellent | Moderate | OLTP with high write volume |
211
+ | **Partially Denormalized** | Good | Good | Good | Moderate | General-purpose applications |
212
+ | **Star Schema (Denormalized)** | Poor (sync copies) | Excellent | Requires discipline | Low | Analytics, data warehouses |
213
+ | **Document Store (Schemaless)** | Excellent | Good for single doc | App-enforced only | Excellent | Rapid prototyping, CMS |
214
+ | **Graph Model** | Moderate | Excellent traversal | Good | Good | Social networks, knowledge graphs |
215
+ | **EAV** | Good | Terrible | None | Excellent | Almost never -- use JSONB instead |
216
+ | **Event Sourced** | Excellent (append) | Depends on projections | Excellent (immutable) | Good | Financial, audit-critical |
217
+ | **Hybrid (CQRS)** | Excellent | Excellent | Eventual consistency | Good | High-scale distinct read/write |
218
+
219
+ ---
220
+
221
+ ## Evolution Path
222
+
223
+ ### Stage 1: Single-Database Monolith
224
+ One database, ORM migrations, all tables in one schema. **Evolve when:** queries degrade,
225
+ teams conflict on schema changes, read/write workloads compete.
226
+
227
+ ### Stage 2: Read Replicas and Materialized Views
228
+ Add read replicas for reports/dashboards. Route reads to replicas, writes to primary.
229
+ **Evolve when:** replication lag causes stale reads in critical paths.
230
+
231
+ ### Stage 3: Schema Migration Discipline
232
+ Adopt expand-contract for all changes. Use pgroll, gh-ost, or pt-online-schema-change.
233
+ Backward-compatible migrations only. **Evolve when:** different parts of the app need
234
+ fundamentally different data access patterns.
235
+
236
+ ### Stage 4: Polyglot Persistence
237
+ Right database per workload: PostgreSQL for OLTP, ClickHouse for analytics, Elasticsearch
238
+ for search. CDC (Debezium) keeps stores synchronized. **Evolve when:** services grow too
239
+ large, data ownership unclear.
240
+
241
+ ### Stage 5: Database-per-Service
242
+ Each service owns its schema exclusively. Cross-service data via APIs or events, never
243
+ direct SQL. **Evolve when:** cross-service queries become complex.
244
+
245
+ ### Stage 6: Data Mesh
246
+ Domain teams own data as products. Federated governance ensures interoperability. Not every
247
+ organization reaches or needs this stage.
248
+
249
+ ---
250
+
251
+ ## Failure Modes
252
+
253
+ ### 1. The God Table
254
+ A single table with 80+ columns used by every feature. ALTER TABLE takes hours at 200M rows.
255
+ **Fix:** Vertical partitioning into focused tables joined by the same primary key.
256
+
257
+ ### 2. The EAV Anti-Pattern
258
+ A three-column table (`entity_id`, `attribute_name`, `attribute_value`) with no type safety,
259
+ no foreign keys, no constraints. Cybertec documented EAV queries requiring 15-20 self-joins,
260
+ running 100-1000x slower than normalized equivalents.
261
+ **Fix:** Use PostgreSQL JSONB with GIN indexes and check constraints:
262
+ ```sql
263
+ CREATE TABLE products (
264
+ id bigint PRIMARY KEY, name text NOT NULL,
265
+ attributes jsonb NOT NULL DEFAULT '{}',
266
+ CONSTRAINT valid_attrs CHECK (jsonb_typeof(attributes) = 'object')
267
+ );
268
+ CREATE INDEX idx_products_attrs ON products USING gin (attributes);
269
+ SELECT * FROM products WHERE attributes @> '{"color": "red"}';
270
+ ```
271
+
272
+ ### 3. Missing FK Indexes
273
+ JOIN queries take seconds instead of milliseconds. The number-one production performance
274
+ issue (Percona, pganalyze). A missing index on a 10M-row FK column turns a 2ms lookup into
275
+ a 5-second sequential scan.
276
+ **Fix:** Audit all foreign key columns and add indexes.
277
+
278
+ ### 4. N+1 Query Pattern
279
+ A page load generates 100+ queries. Application fetches parents then loops to fetch children.
280
+ **Fix:** Eager loading (JOIN FETCH, prefetch_related), or denormalize co-accessed data.
281
+
282
+ ### 5. UUIDv4 as Primary Key in InnoDB
283
+ Insert throughput degrades as tables grow. PlanetScale documented 3-5x improvement switching
284
+ to UUIDv7, and an order-of-magnitude reduction in WAL volume at 100M+ rows.
285
+ **Fix:** UUIDv7, ULID, or Snowflake IDs. Or use UUIDv4 as a secondary unique column with
286
+ bigint as clustered PK.
287
+
288
+ ### 6. Premature Denormalization
289
+ Data inconsistencies between redundant copies. Complex sync logic. Totals that do not match
290
+ line-item sums.
291
+ **Fix:** Start normalized. Measure under realistic load. Denormalize only proven bottlenecks.
292
+
293
+ ### 7. Ignoring Temporal Data
294
+ No way to answer "what was the price when the order was placed?" History overwritten.
295
+ **Fix:** Snapshot columns (`order_items.unit_price`), history tables with `valid_from`/
296
+ `valid_to`, or event sourcing.
297
+
298
+ ---
299
+
300
+ ## Technology Landscape
301
+
302
+ ### Relational Databases
303
+
304
+ | Database | Strengths | Watch Out For |
305
+ |----------|-----------|---------------|
306
+ | **PostgreSQL** | JSONB, partial indexes, materialized views, UUIDv7 (v17+) | VACUUM management at scale |
307
+ | **MySQL/InnoDB** | Wide ecosystem, good simple-schema perf | Clustered PK (UUID trap), weaker constraints pre-8.0 |
308
+ | **SQLite** | Zero-config, embedded/edge | Single-writer, not for server workloads |
309
+
310
+ ### Migration Tools
311
+
312
+ | Tool | Database | Key Feature |
313
+ |------|----------|-------------|
314
+ | **Flyway** | Multi-DB | SQL-based, version-numbered |
315
+ | **Alembic** | PostgreSQL/MySQL | Python, auto-generates from model diffs |
316
+ | **pgroll** | PostgreSQL | Automated expand-contract, zero-downtime |
317
+ | **gh-ost** | MySQL | GitHub's online schema migration |
318
+ | **Atlas** | Multi-DB | HCL declarative schema, plan + apply |
319
+ | **Prisma Migrate** | Multi-DB | TypeScript, declarative with generated migrations |
320
+
321
+ ### ER Diagramming Tools
322
+
323
+ | Tool | Notes |
324
+ |------|-------|
325
+ | **dbdiagram.io** | DSL-based (DBML), fast iteration, SQL export |
326
+ | **pgModeler** | PostgreSQL-specific, reverse-engineers from live DB |
327
+ | **DBeaver** | ER diagrams from existing databases, multi-DB |
328
+ | **DataGrip** | JetBrains IDE with built-in ER visualization |
329
+
330
+ ### ORMs
331
+
332
+ | Tool | Language | Note |
333
+ |------|----------|------|
334
+ | **SQLAlchemy** | Python | Declarative + imperative, complex relationships |
335
+ | **Prisma** | TypeScript | Declarative schema, typed client |
336
+ | **Hibernate/JPA** | Java | Annotation-based, table inheritance support |
337
+ | **ActiveRecord** | Ruby | Convention over configuration |
338
+ | **Ecto** | Elixir | Schema-based with changesets |
339
+
340
+ **ORM Warning:** ORMs mask data model problems. If your queries require N+1 workarounds or
341
+ raw SQL fallbacks, the underlying model likely needs restructuring.
342
+
343
+ ---
344
+
345
+ ## Decision Tree
346
+
347
+ ```
348
+ START: You need to persist data for a new feature or system.
349
+
350
+ 1. How well do you understand the domain?
351
+ +-- POORLY --> Domain-model first. Talk to experts. Do NOT start with DDL.
352
+ +-- WELL --> 2. Primary access pattern?
353
+ +-- WRITE-HEAVY --> Normalize to 3NF. Surrogate keys. Index FKs.
354
+ | +-- Need audit? --> History tables or event sourcing.
355
+ +-- READ-HEAVY --> Star schema or materialized views.
356
+ | +-- Real-time? --> CQRS with event-driven projections.
357
+ | +-- Batch? --> ETL to analytical store.
358
+ +-- MIXED --> 3NF writes + materialized views for reads.
359
+ +-- GRAPH-HEAVY --> Graph DB or recursive CTEs in PostgreSQL.
360
+ +-- VARIABLE SCHEMA --> PostgreSQL JSONB. NOT EAV. Never EAV.
361
+
362
+ 3. Expected data volume?
363
+ +-- < 1M rows --> Almost any model works. Optimize for clarity.
364
+ +-- 1M - 100M --> Indexing strategy matters. Profile queries early.
365
+ +-- 100M - 1B --> Partitioning. UUIDv7 over UUIDv4. Online schema changes.
366
+ +-- > 1B rows --> Sharding. Globally unique keys. Distributed DB evaluation.
367
+
368
+ 4. Regulatory compliance?
369
+ +-- GDPR --> Hard-delete capability. Separate PII tables.
370
+ +-- HIPAA --> Encrypt at rest/transit. Full change history.
371
+ +-- PCI-DSS --> Tokenize payments. Minimize cardholder data storage.
372
+ +-- SOX --> Immutable audit trail. No UPDATE/DELETE on financials.
373
+ ```
374
+
375
+ ---
376
+
377
+ ## Implementation Sketch
378
+
379
+ ### ER Diagram: E-Commerce Order System
380
+
381
+ ```
382
+ ┌─────────────┐
383
+ │ customers │
384
+ ├─────────────┤ ┌──────────────┐
385
+ │ id (PK) │ │ products │
386
+ │ email (UQ) │ ├──────────────┤
387
+ │ name │ │ id (PK) │
388
+ │ created_at │ │ sku (UQ) │
389
+ │ deleted_at │ │ name │
390
+ └──────┬──────┘ │ current_price│
391
+ │ 1:M │ attributes │
392
+ ┌──────┴──────┐ └──────┬───────┘
393
+ │ orders │ │ 1:M
394
+ ├─────────────┤ ┌──────┴───────────┐
395
+ │ id (PK) │ │ order_items │
396
+ │ customer_id │──────────│ order_id (FK) │
397
+ │ status │ 1:M │ product_id (FK) │
398
+ │ total_amount│ │ quantity │
399
+ │ placed_at │ │ unit_price │
400
+ └─────────────┘ │ (snapshot) │
401
+ └──────────────────┘
402
+ ```
403
+
404
+ ### DDL (PostgreSQL)
405
+
406
+ ```sql
407
+ CREATE TABLE customers (
408
+ id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
409
+ public_id uuid NOT NULL DEFAULT gen_random_uuid() UNIQUE,
410
+ email text NOT NULL,
411
+ name text NOT NULL,
412
+ created_at timestamptz NOT NULL DEFAULT now(),
413
+ deleted_at timestamptz
414
+ );
415
+ CREATE UNIQUE INDEX idx_customers_email_active
416
+ ON customers (email) WHERE deleted_at IS NULL;
417
+
418
+ CREATE TABLE products (
419
+ id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
420
+ sku text NOT NULL UNIQUE,
421
+ name text NOT NULL,
422
+ current_price numeric(12,2) NOT NULL CHECK (current_price >= 0),
423
+ attributes jsonb NOT NULL DEFAULT '{}',
424
+ created_at timestamptz NOT NULL DEFAULT now()
425
+ );
426
+ CREATE INDEX idx_products_attributes ON products USING gin (attributes);
427
+
428
+ CREATE TABLE orders (
429
+ id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
430
+ public_id uuid NOT NULL DEFAULT gen_random_uuid() UNIQUE,
431
+ customer_id bigint NOT NULL REFERENCES customers(id),
432
+ status text NOT NULL DEFAULT 'draft'
433
+ CHECK (status IN ('draft','placed','paid','shipped',
434
+ 'delivered','cancelled','refunded')),
435
+ total_amount numeric(12,2) NOT NULL DEFAULT 0 CHECK (total_amount >= 0),
436
+ placed_at timestamptz,
437
+ created_at timestamptz NOT NULL DEFAULT now()
438
+ );
439
+ CREATE INDEX idx_orders_customer_id ON orders (customer_id); -- FK index!
440
+ CREATE INDEX idx_orders_status ON orders (status);
441
+
442
+ CREATE TABLE order_items (
443
+ id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
444
+ order_id bigint NOT NULL REFERENCES orders(id) ON DELETE CASCADE,
445
+ product_id bigint NOT NULL REFERENCES products(id),
446
+ quantity int NOT NULL CHECK (quantity > 0),
447
+ unit_price numeric(12,2) NOT NULL CHECK (unit_price >= 0), -- snapshot!
448
+ created_at timestamptz NOT NULL DEFAULT now(),
449
+ UNIQUE (order_id, product_id)
450
+ );
451
+ CREATE INDEX idx_order_items_order_id ON order_items (order_id);
452
+ CREATE INDEX idx_order_items_product_id ON order_items (product_id);
453
+
454
+ CREATE TABLE order_status_history (
455
+ id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
456
+ order_id bigint NOT NULL REFERENCES orders(id) ON DELETE CASCADE,
457
+ old_status text,
458
+ new_status text NOT NULL,
459
+ changed_by text NOT NULL,
460
+ changed_at timestamptz NOT NULL DEFAULT now()
461
+ );
462
+ CREATE INDEX idx_osh_order_id ON order_status_history (order_id, changed_at);
463
+ ```
464
+
465
+ ### Migration Example (Expand-Contract)
466
+
467
+ ```sql
468
+ -- Phase 1: EXPAND (non-blocking)
469
+ ALTER TABLE orders ADD COLUMN currency text DEFAULT 'USD';
470
+ -- Backfill in batches:
471
+ -- UPDATE orders SET currency='USD' WHERE currency IS NULL AND id BETWEEN :s AND :e;
472
+
473
+ -- Phase 2: MIGRATE (separate deploy) -- code reads from 'currency'
474
+
475
+ -- Phase 3: CONTRACT (separate deploy)
476
+ ALTER TABLE orders ALTER COLUMN currency SET NOT NULL;
477
+ ```
478
+
479
+ ---
480
+
481
+ ## Cross-References
482
+
483
+ - **[sql-vs-nosql](sql-vs-nosql.md):** The data model drives the database choice, not the
484
+ reverse.
485
+ - **[data-consistency](data-consistency.md):** ACID vs. eventual consistency -- data model
486
+ decisions determine what consistency guarantees are possible.
487
+ - **[cqrs-event-sourcing](../../patterns/cqrs-event-sourcing.md):** When read and write
488
+ models diverge, CQRS separates them explicitly.
489
+ - **[database-scaling](../../scaling/database-scaling.md):** Sharding, partitioning,
490
+ replication -- physical decisions that become necessary at scale.
491
+
492
+ ---
493
+
494
+ ## Key Takeaways
495
+
496
+ 1. **Model before you migrate.** 2-4 hours on a logical model prevents weeks of migration
497
+ pain after launch.
498
+
499
+ 2. **Normalize first, denormalize deliberately.** Start at 3NF. Denormalize only proven
500
+ bottlenecks. Document every denormalization.
501
+
502
+ 3. **Use UUIDv7 for new systems.** Combines distributed uniqueness with sequential insert
503
+ performance. Avoid UUIDv4 as a clustered primary key.
504
+
505
+ 4. **Index your foreign keys.** Databases do not do this automatically. This is the single
506
+ most common production performance problem.
507
+
508
+ 5. **Snapshot data at decision points.** Store `unit_price` at order time, not a pointer to
509
+ `current_price`. If you need "what was the value when this happened?", the data must
510
+ already be there.
511
+
512
+ 6. **Never use EAV.** Use JSONB with GIN indexes instead. EAV trades every advantage of a
513
+ relational database for flexibility that JSONB provides better.
514
+
515
+ 7. **Plan for schema evolution from day one.** Use expand-contract. Never remove a column in
516
+ the same deployment that stops writing to it.
517
+
518
+ 8. **Your data model will outlive your application code.** Code gets rewritten; data persists.
519
+ Invest proportionally to its expected lifespan.
520
+
521
+ ---
522
+
523
+ *Researched: 2026-03-08 | Sources:*
524
+ - *[ByteByteGo: Database Schema Design](https://blog.bytebytego.com/p/database-schema-design-simplified)*
525
+ - *[CelerData: Normalization vs Denormalization](https://celerdata.com/glossary/normalization-vs-denormalization-the-trade-offs-you-need-to-know)*
526
+ - *[PlanetScale: UUID Primary Keys in MySQL](https://planetscale.com/blog/the-problem-with-using-a-uuid-primary-key-in-mysql)*
527
+ - *[Bytebase: UUID vs Auto Increment](https://www.bytebase.com/blog/choose-primary-key-uuid-or-auto-increment/)*
528
+ - *[Cybertec: EAV in PostgreSQL](https://www.cybertec-postgresql.com/en/entity-attribute-value-eav-design-in-postgresql-dont-do-it/)*
529
+ - *[Bitestreams: 10 Data Modeling Mistakes](https://bitestreams.com/blog/10-data-modeling-mistakes/)*
530
+ - *[TDAN: Common Data Modeling Mistakes](https://tdan.com/common-data-modeling-mistakes-and-their-impact/24661)*
531
+ - *[Prisma: Expand and Contract Pattern](https://www.prisma.io/dataguide/types/relational/expand-and-contract-pattern)*
532
+ - *[Xata: pgroll Expand-Contract](https://xata.io/blog/pgroll-expand-contract)*
533
+ - *[Redgate: Database Design Patterns](https://www.red-gate.com/blog/database-design-patterns)*
534
+ - *[Databricks: Data Modeling on Modern Lakehouse](https://www.databricks.com/blog/data-modeling-best-practices-implementation-modern-lakehouse)*
535
+ - *[Marty Friedel: Soft vs Hard Delete](https://www.martyfriedel.com/blog/deleting-data-soft-hard-or-audit)*
536
+ - *[Saras Analytics: Data Modeling Best Practices](https://www.sarasanalytics.com/blog/data-modeling-best-practices)*