@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,692 @@
1
+ # Data Privacy & GDPR Compliance
2
+
3
+ > Security expertise module for AI agents building privacy-by-design applications.
4
+ > Covers GDPR, CCPA/CPRA, LGPD, PIPEDA, ePrivacy Directive, and implementation patterns.
5
+
6
+ ---
7
+
8
+ ## 1. Threat Landscape
9
+
10
+ ### 1.1 Enforcement Trends (2023-2025)
11
+
12
+ As of March 2025, over 2,245 GDPR fines totaling ~EUR 5.65 billion have been recorded,
13
+ with >60% (EUR 3.8B+) imposed since January 2023 alone.
14
+
15
+ **Largest GDPR fines:**
16
+
17
+ | Year | Entity | Fine (EUR) | Reason |
18
+ |------|----------------------|---------------|------------------------------------------------------|
19
+ | 2023 | Meta (Facebook) | 1,200,000,000 | Transferring EU user data to US without safeguards |
20
+ | 2021 | Amazon Europe | 746,000,000 | Behavioral advertising without valid consent |
21
+ | 2022 | Instagram (Meta) | 405,000,000 | Children's data exposure |
22
+ | 2023 | TikTok | 345,000,000 | Children's data processing violations |
23
+ | 2025 | Google (Gmail) | 325,000,000 | Unsolicited advertising to Gmail users (CNIL) |
24
+ | 2024 | LinkedIn (Microsoft) | 310,000,000 | Unlawful processing for behavioral analysis |
25
+ | 2024 | Uber | 290,000,000 | Transferring driver data EU-US without safeguards |
26
+ | 2024 | Meta (breach) | 251,000,000 | 2018 data breach affecting 29M users |
27
+ | 2024 | Clearview AI | 30,500,000 | Illegal facial recognition from scraped images |
28
+
29
+ ### 1.2 CCPA/CPRA Enforcement
30
+
31
+ - 2025: CPPA increased fine amounts; cybersecurity audit and ADMT regulations adopted.
32
+ - Sept 2025: Tractor Supply fined USD 1.35M for CCPA violations.
33
+ - Businesses >USD 100M revenue must submit cybersecurity audit certs by April 2028.
34
+
35
+ ### 1.3 Class Actions & Collective Redress
36
+
37
+ - Dec 2024: NOYB approved as "qualified entity" in Austria/Ireland for representative actions.
38
+ - Planned 2025 class actions: tracking without consent, dark patterns, data sales without basis.
39
+ - NOYB threatened Meta with class action over AI training on EU user data without opt-in.
40
+
41
+ ### 1.4 Regulatory Scrutiny Areas
42
+
43
+ - **AI training on personal data** — explicit consent or legitimate interest with opt-out required.
44
+ - **Cross-border transfers** — EU-US DPF survived Sept 2025 challenge but NOYB appeal pending.
45
+ - **Children's data** — TikTok EUR 345M, Instagram EUR 405M.
46
+ - **Dark patterns** — Google EUR 150M, Meta EUR 60M for manipulative consent UX.
47
+
48
+ ---
49
+
50
+ ## 2. Core Security Principles
51
+
52
+ ### 2.1 Privacy by Design (7 Foundational Principles — GDPR Article 25)
53
+
54
+ 1. **Proactive not Reactive** — Prevent privacy violations before they occur.
55
+ 2. **Privacy as the Default** — Maximum privacy without user action required.
56
+ 3. **Privacy Embedded into Design** — Integral to architecture, not a bolt-on.
57
+ 4. **Full Functionality** — Avoid false trade-offs between privacy and features.
58
+ 5. **End-to-End Security** — Full lifecycle protection, collection to deletion.
59
+ 6. **Visibility and Transparency** — All operations verifiable and auditable.
60
+ 7. **Respect for User Privacy** — User-centric design; individual interests paramount.
61
+
62
+ ### 2.2 Privacy Design Strategies
63
+
64
+ - **Data-oriented:** MINIMISE, HIDE (encrypt/hash), SEPARATE (isolated contexts), ABSTRACT (aggregate).
65
+ - **Process-oriented:** INFORM (notify), CONTROL (user agency), ENFORCE (technical policy), DEMONSTRATE (prove compliance).
66
+
67
+ ### 2.3 Lawful Basis for Processing (Article 6)
68
+
69
+ Six bases — identify and document one BEFORE processing:
70
+ 1. **Consent** — Freely given, specific, informed, unambiguous affirmative action.
71
+ 2. **Contract** — Necessary for contract with data subject.
72
+ 3. **Legal obligation** — Required by law.
73
+ 4. **Vital interests** — Protecting someone's life.
74
+ 5. **Public task** — Task in the public interest.
75
+ 6. **Legitimate interests** — Balancing test required; does not override subject rights.
76
+
77
+ ### 2.4 Consent Requirements (Articles 4(11), 7)
78
+
79
+ - **Freely given** — no bundling with service access.
80
+ - **Specific** — separate consent per processing purpose.
81
+ - **Informed** — clear, plain language.
82
+ - **Unambiguous** — clear affirmative action (no pre-ticked boxes).
83
+ - **Withdrawable** — as easy to withdraw as to give.
84
+ - **Documented** — maintain auditable records.
85
+
86
+ ### 2.5 Data Subject Rights (Articles 12-23)
87
+
88
+ | Right | Article | Time | Key Requirement |
89
+ |---------------------------|---------|-------|--------------------------------------------|
90
+ | Right to be informed | 13-14 | At collection | Privacy notice at data collection |
91
+ | Right of access (DSAR) | 15 | 30 days | Copy of personal data + processing info |
92
+ | Right to rectification | 16 | 30 days | Correct inaccurate data |
93
+ | Right to erasure | 17 | 30 days | Delete when no longer necessary |
94
+ | Right to restrict | 18 | 30 days | Stop processing but retain data |
95
+ | Right to portability | 20 | 30 days | Machine-readable format |
96
+ | Right to object | 21 | 30 days | Stop processing for direct marketing |
97
+ | Automated decisions | 22 | 30 days | Right not to be subject to profiling |
98
+
99
+ ### 2.6 DPIA (Article 35)
100
+
101
+ Required BEFORE high-risk processing (systematic profiling, large-scale special categories,
102
+ public monitoring). Must contain: processing description, necessity/proportionality assessment,
103
+ risk assessment, mitigation measures, DPO sign-off.
104
+
105
+ ---
106
+
107
+ ## 3. Implementation Patterns
108
+
109
+ ### 3.1 Consent Management (Cookie Banners Done Right)
110
+
111
+ - Block ALL non-essential cookies until consent obtained.
112
+ - Accept and Reject buttons with **equal visual prominence** (same size, font, color).
113
+ - Same number of clicks to opt out as to opt in.
114
+ - Granular category choices (necessary, analytics, marketing, preferences).
115
+ - Log consent with timestamps; provide preference center for ongoing management.
116
+
117
+ ```typescript
118
+ // Consent middleware (TypeScript/Express)
119
+ interface ConsentRecord {
120
+ userId: string;
121
+ timestamp: Date;
122
+ categories: { necessary: true; analytics: boolean; marketing: boolean; preferences: boolean };
123
+ source: 'banner' | 'preference-center' | 'api';
124
+ version: string;
125
+ }
126
+
127
+ function consentMiddleware(req: Request, res: Response, next: NextFunction): void {
128
+ const consent = parseConsentCookie(req.cookies['privacy_consent']);
129
+ req.consentCategories = consent?.categories
130
+ ?? { necessary: true, analytics: false, marketing: false, preferences: false };
131
+
132
+ if (!req.consentCategories.analytics) res.removeHeader('X-Analytics-ID');
133
+ if (!req.consentCategories.marketing) blockMarketingScripts(res);
134
+ next();
135
+ }
136
+ ```
137
+
138
+ ### 3.2 DSAR Automation Endpoint
139
+
140
+ ```typescript
141
+ app.post('/api/privacy/dsar', authenticateUser, rateLimit({ max: 3, windowMs: 86400000 }),
142
+ async (req, res) => {
143
+ const { type } = req.body; // 'access' | 'portability' | 'erasure' | 'rectification'
144
+
145
+ // Identity verification (mandatory)
146
+ if (!await verifyIdentity(req.user, req.body.verificationToken)) {
147
+ return res.status(403).json({ error: 'Identity verification required' });
148
+ }
149
+
150
+ // Create tracked request (30-day SLA clock starts)
151
+ const dsar = await dsarService.create({
152
+ userId: req.user.id, type, requestedAt: new Date(),
153
+ deadline: addDays(new Date(), 30), status: 'processing',
154
+ });
155
+
156
+ // Fan out data collection across microservices
157
+ const sources = ['user-service', 'order-service', 'analytics-service',
158
+ 'email-service', 'support-service', 'payment-service'];
159
+ Promise.all(sources.map(s => dataCollector.requestData(s, req.user.id, dsar.id)))
160
+ .then(async (results) => {
161
+ const format = type === 'portability' ? 'json' : 'pdf';
162
+ const report = await reportGenerator.compile(results, format);
163
+ await notifyUser(req.user.id, 'Your data export is ready', report.downloadUrl);
164
+ await dsarService.update(dsar.id, { status: 'completed', completedAt: new Date() });
165
+ });
166
+
167
+ res.json({ requestId: dsar.id, estimatedCompletion: dsar.deadline });
168
+ });
169
+ ```
170
+
171
+ ### 3.3 Right to Deletion (Cascading Deletes)
172
+
173
+ ```typescript
174
+ class DeletionService {
175
+ private readonly services = [
176
+ { name: 'user-profile', hardDelete: true },
177
+ { name: 'user-content', hardDelete: true },
178
+ { name: 'analytics', hardDelete: false }, // Anonymize (legitimate interest)
179
+ { name: 'payments', hardDelete: false }, // Pseudonymize (tax law retention)
180
+ { name: 'support-tickets', hardDelete: true },
181
+ { name: 'backups', hardDelete: true }, // Scheduled purge
182
+ ];
183
+
184
+ async executeErasure(userId: string, dsarId: string): Promise<DeletionReport> {
185
+ const report: DeletionReport = { dsarId, userId, results: [] };
186
+ for (const svc of this.services) {
187
+ try {
188
+ if (svc.hardDelete) await this.hardDelete(svc.name, userId);
189
+ else if (svc.name === 'analytics') await this.anonymize(svc.name, userId);
190
+ else if (svc.name === 'payments') await this.pseudonymize(svc.name, userId);
191
+ report.results.push({ service: svc.name, status: 'completed' });
192
+ } catch (error) {
193
+ report.results.push({ service: svc.name, status: 'failed', error: error.message });
194
+ await this.alertDPO(dsarId, svc.name, error);
195
+ }
196
+ }
197
+ await this.scheduleBackupPurge(userId, addDays(new Date(), 30));
198
+ return report;
199
+ }
200
+ }
201
+ ```
202
+
203
+ ### 3.4 Data Retention Scheduler
204
+
205
+ ```typescript
206
+ class RetentionScheduler {
207
+ private readonly policies: RetentionPolicy[] = [
208
+ { dataType: 'session_logs', retentionDays: 90, action: 'delete' },
209
+ { dataType: 'analytics_events', retentionDays: 365, action: 'anonymize' },
210
+ { dataType: 'inactive_accounts', retentionDays: 730, action: 'notify_then_delete' },
211
+ { dataType: 'financial_records', retentionDays: 2555, action: 'pseudonymize' },
212
+ { dataType: 'consent_records', retentionDays: 2555, action: 'retain' },
213
+ ];
214
+
215
+ async enforceRetention(): Promise<void> { // Run daily via cron
216
+ for (const policy of this.policies) {
217
+ const cutoff = subDays(new Date(), policy.retentionDays);
218
+ switch (policy.action) {
219
+ case 'delete':
220
+ await db.query(`DELETE FROM ${policy.dataType} WHERE created_at < $1`, [cutoff]);
221
+ break;
222
+ case 'anonymize':
223
+ await db.query(
224
+ `UPDATE ${policy.dataType} SET user_id = 'anon-' || md5(user_id::text),
225
+ ip_address = NULL, email = NULL WHERE created_at < $1 AND anonymized = false`,
226
+ [cutoff]);
227
+ break;
228
+ case 'notify_then_delete':
229
+ await this.notifyPendingDeletion(policy.dataType, subDays(cutoff, 30), cutoff);
230
+ await db.query(
231
+ `DELETE FROM ${policy.dataType} WHERE created_at < $1 AND deletion_notified = true`,
232
+ [cutoff]);
233
+ break;
234
+ }
235
+ await auditLog.record({ action: 'retention_enforcement', dataType: policy.dataType, cutoff });
236
+ }
237
+ }
238
+ }
239
+ ```
240
+
241
+ ### 3.5 International Data Transfers (Post-Schrems II)
242
+
243
+ | Mechanism | Status | Notes |
244
+ |------------------------------------|-----------------------|---------------------------------------|
245
+ | EU-US Data Privacy Framework (DPF) | Active (challenged) | Survived Sept 2025 General Court ruling |
246
+ | Standard Contractual Clauses (SCCs)| Active | New simplified SCCs expected Q2 2025 |
247
+ | Binding Corporate Rules (BCRs) | Active | For intra-group transfers |
248
+ | Adequacy Decisions | 14 countries | UK, Japan, South Korea, Canada, etc. |
249
+ | Transfer Impact Assessments (TIAs) | Required with SCCs | CNIL guidance issued Jan 2025 |
250
+
251
+ Implementation: Map all cross-border flows, identify legal mechanism for each, conduct TIAs
252
+ with SCCs, encrypt in transit + at rest, monitor adequacy decision status, document in ROPA.
253
+
254
+ ---
255
+
256
+ ## 4. Vulnerability Catalog
257
+
258
+ ### V-PRIV-01: Processing Without Valid Consent
259
+
260
+ ```typescript
261
+ // VULNERABLE
262
+ app.post('/subscribe', async (req, res) => {
263
+ await db.query('INSERT INTO subscribers VALUES ($1)', [req.body.email]);
264
+ await analytics.track(req.body.email); // No consent for analytics
265
+ await marketing.addSegment(req.body.email); // No consent for marketing
266
+ });
267
+
268
+ // COMPLIANT
269
+ app.post('/subscribe', async (req, res) => {
270
+ const { email, consentAnalytics, consentMarketing } = req.body;
271
+ await consentStore.record({ email, purposes: { consentAnalytics, consentMarketing } });
272
+ await db.query('INSERT INTO subscribers VALUES ($1)', [email]);
273
+ if (consentAnalytics) await analytics.track(email);
274
+ if (consentMarketing) await marketing.addSegment(email);
275
+ });
276
+ ```
277
+
278
+ ### V-PRIV-02: Dark Patterns in Consent UI
279
+
280
+ ```html
281
+ <!-- VULNERABLE: Asymmetric buttons -->
282
+ <button class="btn-primary btn-large">Accept All</button>
283
+ <a href="/settings" class="text-small text-grey">Manage preferences</a>
284
+
285
+ <!-- COMPLIANT: Equal prominence -->
286
+ <button class="btn-secondary" onclick="rejectAll()">Reject All</button>
287
+ <button class="btn-secondary" onclick="savePreferences()">Save Preferences</button>
288
+ <button class="btn-secondary" onclick="acceptAll()">Accept All</button>
289
+ ```
290
+
291
+ ### V-PRIV-03: No Data Deletion Mechanism
292
+ Violation of Article 17. Netflix fined EUR 4.75M for inadequate DSAR responses.
293
+
294
+ ### V-PRIV-04: Excessive Data Collection
295
+
296
+ ```typescript
297
+ // VULNERABLE: Collecting SSN, DOB, gender for a newsletter
298
+ interface Form { email: string; ssn: string; dob: string; gender: string; }
299
+ // COMPLIANT: Only what is necessary
300
+ interface Form { email: string; }
301
+ ```
302
+
303
+ ### V-PRIV-05: Third-Party Tracking Without Consent
304
+
305
+ ```html
306
+ <!-- VULNERABLE: Loading trackers before consent -->
307
+ <script src="https://www.googletagmanager.com/gtag/js?id=GA_ID"></script>
308
+ <script src="https://connect.facebook.net/en_US/fbevents.js"></script>
309
+
310
+ <!-- COMPLIANT: Load only after consent -->
311
+ <script>
312
+ document.addEventListener('consent-granted', () => {
313
+ if (getConsent('analytics')) loadScript('gtag.js');
314
+ });
315
+ </script>
316
+ ```
317
+
318
+ ### V-PRIV-06: Data Retained Beyond Purpose
319
+ Violation of storage limitation (Article 5(1)(e)). Every data category needs a documented
320
+ retention period with automated enforcement.
321
+
322
+ ### V-PRIV-07: Missing Privacy Policy
323
+ Violation of Articles 12-14. Must include: controller identity, purposes, legal basis,
324
+ recipients, transfers, retention periods, subject rights, right to complain.
325
+
326
+ ### V-PRIV-08: No Breach Notification Mechanism
327
+ Article 33 requires 72-hour notification to supervisory authority.
328
+
329
+ ### V-PRIV-09: Insecure DSAR Identity Verification
330
+ Responding without verification = potential data breach. Use existing auth; do not collect
331
+ new PII solely for verification.
332
+
333
+ ### V-PRIV-10: Cross-Border Transfer Without Legal Basis
334
+ Uber fined EUR 290M. Store EU data in EU regions or ensure valid transfer mechanism.
335
+
336
+ ### V-PRIV-11: No Consent Withdrawal Mechanism
337
+ Article 7(3): withdrawal must be as easy as giving consent. No "call us to unsubscribe."
338
+
339
+ ### V-PRIV-12: Sharing Data Without Data Processing Agreement
340
+ Article 28: DPA required with every processor (analytics, email, CRM, hosting, payments).
341
+
342
+ ### V-PRIV-13: No Records of Processing Activities (ROPA)
343
+ Article 30: mandatory for 250+ employees or high-risk processing.
344
+
345
+ ### V-PRIV-14: Using Personal Data for AI Training Without Basis
346
+ NOYB threatened Meta with class action. Requires explicit consent or legitimate interest with opt-out.
347
+
348
+ ### V-PRIV-15: Children's Data Without Age Verification
349
+ Article 8: parental consent for under 16 (or 13 per member state).
350
+
351
+ ---
352
+
353
+ ## 5. Security Checklist
354
+
355
+ ### Pre-Development
356
+ - [ ] Identify lawful basis for each processing activity (Article 6)
357
+ - [ ] Conduct DPIA for high-risk processing (Article 35)
358
+ - [ ] Map all personal data flows (collection, storage, processing, sharing, deletion)
359
+ - [ ] Document retention periods per data category
360
+ - [ ] Execute DPAs with all third-party processors (Article 28)
361
+ - [ ] Map international transfers and identify transfer mechanisms
362
+
363
+ ### Data Collection
364
+ - [ ] Consent banner with equal-prominence accept/reject buttons
365
+ - [ ] Block non-essential cookies/trackers until consent obtained
366
+ - [ ] Granular consent per purpose (not bundled)
367
+ - [ ] Privacy notice at point of collection (Articles 13-14)
368
+ - [ ] Data minimization — collect only necessary fields
369
+ - [ ] Age verification for services accessible to minors
370
+
371
+ ### Data Storage & Processing
372
+ - [ ] Encrypt at rest (AES-256) and in transit (TLS 1.2+)
373
+ - [ ] Least-privilege access controls for personal data
374
+ - [ ] Pseudonymize/anonymize where full identification not needed
375
+ - [ ] Automated data retention scheduler
376
+ - [ ] Audit logs of all personal data access and modifications
377
+ - [ ] EU data stored in EU regions (or valid transfer mechanism)
378
+
379
+ ### Data Subject Rights
380
+ - [ ] DSAR intake endpoint with identity verification
381
+ - [ ] Data export in machine-readable format (Article 20)
382
+ - [ ] Cascading deletion across all services and backups
383
+ - [ ] Consent withdrawal in same clicks as consent granting
384
+ - [ ] Preference center for ongoing consent management
385
+ - [ ] SLA tracking (30 days GDPR, 45 days CCPA) with alerts
386
+
387
+ ### Breach Response
388
+ - [ ] Automated breach detection and alerting
389
+ - [ ] Notification templates (supervisory authority + data subjects)
390
+ - [ ] 72-hour notification workflow tested quarterly
391
+ - [ ] Breach assessment process documented
392
+ - [ ] Supervisory authority contact details maintained
393
+
394
+ ### Governance
395
+ - [ ] DPO appointed where required (Article 37)
396
+ - [ ] ROPA maintained (Article 30)
397
+ - [ ] Annual privacy compliance audit
398
+ - [ ] Staff training on personal data handling (at least annually)
399
+
400
+ ---
401
+
402
+ ## 6. Tools & Automation
403
+
404
+ ### Consent Management Platforms
405
+
406
+ | Tool | Best For | GDPR | CCPA | Price |
407
+ |---------------|---------------|------|------|---------------------|
408
+ | OneTrust | Enterprise | Yes | Yes | USD 33-2000/mo |
409
+ | Cookiebot | SMB | Yes | Yes | EUR 7-50/mo |
410
+ | CookieYes | Budget | Yes | Yes | Free-USD 49/mo |
411
+ | Osano | Mid-market | Yes | Yes | USD 199-499/mo |
412
+ | Usercentrics | Multi-region | Yes | Yes | Custom |
413
+
414
+ ### DSAR Automation
415
+ - **DataGrail** — Automated discovery across 100+ integrations.
416
+ - **TrustArc** — End-to-end DSR fulfillment with identity verification.
417
+ - **BigID** — ML-powered data discovery, classification, DSAR automation.
418
+ - **OneTrust** — Rights management, intake forms, SLA tracking.
419
+
420
+ ### Data Mapping & Discovery
421
+ - **BigID** — ML-powered classification. **Collibra** — Governance and lineage.
422
+ - **OneTrust** — Flow visualization. **DataGrail** — Real-time SaaS mapping.
423
+
424
+ ### Privacy Impact Assessment
425
+ - **CNIL PIA Tool** — Free, open source (https://www.cnil.fr/en/open-source-pia-software).
426
+ - **OneTrust** — Templates, risk scoring, workflow. **TrustArc** — Regulatory intelligence.
427
+
428
+ ### Cookie Scanners
429
+ - **Cookiebot** — Automated monthly scanning. **Blacklight** — Free tracker detection (The Markup).
430
+
431
+ ### Privacy-Preserving Analytics
432
+
433
+ | Tool | Cookie-Free | GDPR w/o Consent | Open Source |
434
+ |-----------|-------------|-------------------|------------|
435
+ | Plausible | Yes | Yes | Yes |
436
+ | Fathom | Yes | Yes | No |
437
+ | Umami | Yes | Yes | Yes |
438
+ | Matomo | Configurable| Configurable | Yes |
439
+
440
+ ---
441
+
442
+ ## 7. Platform-Specific Guidance
443
+
444
+ ### 7.1 Web (Cookie Consent & Tracking)
445
+
446
+ ```typescript
447
+ class CookieConsentManager {
448
+ private readonly VERSION = '2.1';
449
+
450
+ init(): void {
451
+ const consent = this.getStoredConsent();
452
+ if (!consent || consent.version !== this.VERSION) {
453
+ this.showBanner();
454
+ this.blockNonEssentialScripts(); // Set type="text/plain" on data-consent scripts
455
+ } else {
456
+ this.applyConsent(consent);
457
+ }
458
+ }
459
+
460
+ private applyConsent(consent: ConsentRecord): void {
461
+ document.querySelectorAll('script[data-consent]').forEach(el => {
462
+ const s = el as HTMLScriptElement;
463
+ if (consent.categories[s.dataset.consent as string]) {
464
+ const n = document.createElement('script');
465
+ n.src = s.src; n.type = 'text/javascript';
466
+ s.parentNode?.replaceChild(n, s);
467
+ }
468
+ });
469
+ }
470
+
471
+ acceptAll(): void { this.save({ necessary: true, analytics: true, marketing: true, preferences: true }); }
472
+ rejectAll(): void { this.save({ necessary: true, analytics: false, marketing: false, preferences: false }); }
473
+
474
+ private save(categories: ConsentCategories): void {
475
+ const record = { categories, version: this.VERSION, timestamp: new Date().toISOString() };
476
+ localStorage.setItem('privacy_consent', JSON.stringify(record));
477
+ this.applyConsent(record as ConsentRecord);
478
+ fetch('/api/privacy/consent', { method: 'POST', body: JSON.stringify(record),
479
+ headers: { 'Content-Type': 'application/json' } }); // Audit trail
480
+ }
481
+ }
482
+ ```
483
+
484
+ ### 7.2 Mobile
485
+
486
+ **iOS — App Tracking Transparency (ATT):** Since iOS 14.5, apps MUST request ATT permission
487
+ before accessing IDFA. Without permission, IDFA returns all zeros.
488
+
489
+ ```swift
490
+ import AppTrackingTransparency
491
+ func requestTrackingPermission() {
492
+ ATTrackingManager.requestTrackingAuthorization { status in
493
+ switch status {
494
+ case .authorized:
495
+ let idfa = ASIdentifierManager.shared().advertisingIdentifier
496
+ analytics.setAdvertisingId(idfa.uuidString)
497
+ case .denied, .restricted: analytics.enablePrivacyMode()
498
+ case .notDetermined: break
499
+ @unknown default: analytics.enablePrivacyMode()
500
+ }
501
+ }
502
+ }
503
+ ```
504
+
505
+ **Android — GAID:** Check `isLimitAdTrackingEnabled` before using advertising ID.
506
+ Even if allowed by OS, still need GDPR consent for EU users.
507
+
508
+ **Mobile-specific:** Request ATT at contextually appropriate moment (not first launch).
509
+ Encrypt local storage (Keychain/Keystore). Clear cached PII on logout.
510
+
511
+ ### 7.3 Analytics
512
+
513
+ **GA4 Consent Mode v2:**
514
+
515
+ ```javascript
516
+ gtag('consent', 'default', {
517
+ 'ad_storage': 'denied', 'ad_user_data': 'denied',
518
+ 'ad_personalization': 'denied', 'analytics_storage': 'denied',
519
+ 'wait_for_update': 500,
520
+ });
521
+ // After CMP consent:
522
+ function updateConsent(cats) {
523
+ gtag('consent', 'update', {
524
+ 'ad_storage': cats.marketing ? 'granted' : 'denied',
525
+ 'analytics_storage': cats.analytics ? 'granted' : 'denied',
526
+ });
527
+ }
528
+ ```
529
+
530
+ **Recommendation:** Use Plausible or Fathom by default (no cookies, no consent needed).
531
+ Only use GA4 if marketing attribution features are required; implement Consent Mode v2.
532
+
533
+ ---
534
+
535
+ ## 8. Incident Patterns
536
+
537
+ ### 8.1 Data Breach Notification (72-Hour Rule — Articles 33-34)
538
+
539
+ ```
540
+ Hour 0: Breach detected → activate response team, begin containment
541
+ Hour 0-24: Assess scope, severity, risk to individuals' rights
542
+ If NOT likely risk: document decision, no notification needed
543
+ If likely risk: prepare supervisory authority notification
544
+ Hour 24-48: Draft notifications; identify affected data subjects
545
+ Hour 48-72: Submit to lead supervisory authority (nature of breach, DPO contact,
546
+ likely consequences, measures taken/proposed)
547
+ If delay unavoidable: provide reasons
548
+ Post-72h: Notify data subjects if high risk (Art 34); submit supplementary info;
549
+ phased notifications acceptable; document in breach register
550
+ ```
551
+
552
+ ### 8.2 DSAR Response Protocol (30 Days)
553
+
554
+ ```
555
+ Day 0: Log request, start SLA clock, acknowledge within 3 business days
556
+ Day 1-5: Verify identity via existing authentication
557
+ Day 5-20: Query all systems, compile data, redact third-party PII
558
+ Day 20-28: Legal review, prepare export (machine-readable for portability)
559
+ Day 28-30: Deliver via secure channel; first copy free
560
+ If extension needed: notify before day 30 (max +2 months)
561
+ ```
562
+
563
+ ### 8.3 Regulatory Inquiry Response
564
+
565
+ Respond within specified timeframe (14-30 days). Involve DPO and counsel immediately.
566
+ Cooperate fully — obstruction increases fine severity. Preserve evidence, document all
567
+ communications, conduct parallel internal investigation.
568
+
569
+ ---
570
+
571
+ ## 9. Compliance & Standards Reference
572
+
573
+ ### GDPR Key Articles
574
+
575
+ | Article(s) | Topic | Summary |
576
+ |------------|----------------------------------|---------------------------------------------|
577
+ | 5 | Principles | Lawfulness, fairness, transparency, minimization, accuracy, storage limitation, integrity |
578
+ | 6 | Lawful basis | Six legal bases for processing |
579
+ | 7-8 | Consent / Children | Demonstrable, specific, withdrawable; parental consent for minors |
580
+ | 9 | Special categories | Biometric, health, racial data — explicit consent required |
581
+ | 12-14 | Transparency | Clear communication, information at collection |
582
+ | 15-22 | Data subject rights | Access, rectification, erasure, portability, object, automated decisions |
583
+ | 25 | Privacy by design/default | Technical and organizational measures |
584
+ | 28 | Processor obligations | DPA requirements |
585
+ | 30 | Records of processing | ROPA mandatory for 250+ employees or high-risk |
586
+ | 32-34 | Security & breach notification | Appropriate measures, 72hr notification, subject notification |
587
+ | 44-49 | International transfers | Adequacy, SCCs, BCRs, derogations |
588
+
589
+ ### CCPA/CPRA (California)
590
+ - **Scope:** USD 25M+ revenue, 100K+ consumers' data, or 50%+ revenue from data sales.
591
+ - **Rights:** Know, delete, opt-out of sale/sharing, correct, limit sensitive data use.
592
+ - **Response:** 45 days (extendable +45). Penalties: USD 2,500/unintentional, USD 7,500/intentional.
593
+ - **Required:** "Do Not Sell" link on homepage. Private right of action for breach of unencrypted data.
594
+
595
+ ### LGPD (Brazil)
596
+ - **Scope:** Processing of personal data of individuals in Brazil. 10 legal bases.
597
+ - **DPO:** Required for all controllers. **Penalties:** Up to 2% revenue, capped BRL 50M/violation.
598
+
599
+ ### PIPEDA (Canada)
600
+ - **Scope:** Private-sector commercial activities. Allows implied consent in low-risk scenarios.
601
+ - **Breach:** Mandatory notification for "real risk of significant harm."
602
+
603
+ ### ePrivacy Directive (EU)
604
+ - Cookie consent required for non-essential cookies (Article 5(3)).
605
+ - Opt-in for email/SMS marketing (soft opt-in exception for existing customers).
606
+ - Lex specialis alongside GDPR. ePrivacy Regulation replacement still pending.
607
+
608
+ ---
609
+
610
+ ## 10. Code Examples
611
+
612
+ ### 10.1 Consent Validation Middleware
613
+
614
+ ```typescript
615
+ function requireConsent(...purposes: string[]) {
616
+ return async (req: Request, res: Response, next: NextFunction) => {
617
+ const consent = await consentStore.getCurrent(req.user?.id);
618
+ if (!consent || consent.version !== CURRENT_CONSENT_VERSION) {
619
+ return res.status(451).json({ error: 'Consent required', consentUrl: '/api/privacy/consent' });
620
+ }
621
+ const missing = purposes.filter(p => !consent.categories[p]);
622
+ if (missing.length > 0) {
623
+ return res.status(451).json({ error: 'Additional consent required', missing });
624
+ }
625
+ req.consent = consent;
626
+ next();
627
+ };
628
+ }
629
+
630
+ // Usage
631
+ app.post('/api/recommendations', requireConsent('analytics', 'preferences'), handler);
632
+ app.post('/api/marketing/email', requireConsent('marketing'), handler);
633
+ ```
634
+
635
+ ### 10.2 Privacy-Preserving Logging
636
+
637
+ ```typescript
638
+ // VULNERABLE
639
+ logger.info(`User ${user.email} logged in from ${req.ip}`);
640
+
641
+ // COMPLIANT
642
+ logger.info(`User ${hash(user.id)} logged in from ${anonymizeIp(req.ip)}`);
643
+
644
+ function anonymizeIp(ip: string): string {
645
+ return ip.includes('.') ? ip.replace(/\.\d+$/, '.0')
646
+ : ip.replace(/:[\da-f]{1,4}:[\da-f]{1,4}:[\da-f]{1,4}:[\da-f]{1,4}:[\da-f]{1,4}$/, ':0:0:0:0:0');
647
+ }
648
+ ```
649
+
650
+ ### 10.3 Data Portability Export (Article 20)
651
+
652
+ ```typescript
653
+ async function generatePortabilityExport(userId: string): Promise<Buffer> {
654
+ const [profile, orders, posts] = await Promise.all([
655
+ userService.getProfile(userId),
656
+ orderService.getOrders(userId),
657
+ contentService.getPosts(userId),
658
+ ]);
659
+ return Buffer.from(JSON.stringify({
660
+ exportedAt: new Date().toISOString(),
661
+ format: 'GDPR Article 20 Data Portability Export',
662
+ dataController: { name: 'Company', contact: 'dpo@company.com' },
663
+ personalData: {
664
+ profile: { email: profile.email, displayName: profile.displayName },
665
+ orders: orders.map(o => ({ id: o.id, date: o.createdAt, items: o.items })),
666
+ content: posts.map(p => ({ title: p.title, body: p.body, createdAt: p.createdAt })),
667
+ },
668
+ }, null, 2), 'utf-8');
669
+ }
670
+ ```
671
+
672
+ ---
673
+
674
+ ## References
675
+
676
+ ### Regulatory Sources
677
+ - GDPR Full Text: https://gdpr-info.eu/
678
+ - EDPB Guidelines: https://www.edpb.europa.eu/our-work-tools/general-guidance
679
+ - CCPA/CPRA: https://oag.ca.gov/privacy/ccpa | https://cppa.ca.gov/announcements/
680
+ - LGPD: https://www.gov.br/cidadania/pt-br/acesso-a-informacao/lgpd
681
+ - PIPEDA: https://www.priv.gc.ca/en/privacy-topics/privacy-laws-in-canada/pipeda/
682
+
683
+ ### Enforcement Trackers
684
+ - GDPR Enforcement Tracker: https://www.enforcementtracker.com/
685
+ - CMS Report 2024/2025: https://cms.law/en/int/publication/gdpr-enforcement-tracker-report
686
+ - NOYB: https://noyb.eu/en/fines-resulting-noyb-litigation
687
+
688
+ ### Tools
689
+ - OneTrust: https://www.onetrust.com/ | Cookiebot: https://www.cookiebot.com/
690
+ - Plausible: https://plausible.io/ | Fathom: https://usefathom.com/
691
+ - DataGrail: https://www.datagrail.io/ | BigID: https://bigid.com/
692
+ - CNIL PIA Tool: https://www.cnil.fr/en/open-source-pia-software