@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.
- package/AGENTS.md +111 -0
- package/CHANGELOG.md +14 -0
- package/CONTRIBUTING.md +101 -0
- package/LICENSE +21 -0
- package/README.md +314 -0
- package/assets/composition-engine.mmd +34 -0
- package/assets/demo-script.sh +17 -0
- package/assets/logo-dark.svg +14 -0
- package/assets/logo.svg +14 -0
- package/assets/pipeline.mmd +39 -0
- package/assets/record-demo.sh +51 -0
- package/docs/README.md +51 -0
- package/docs/adapters/context-mode.md +60 -0
- package/docs/concepts/architecture.md +87 -0
- package/docs/concepts/artifact-model.md +60 -0
- package/docs/concepts/composition-engine.md +36 -0
- package/docs/concepts/indexing-and-recall.md +160 -0
- package/docs/concepts/observability.md +41 -0
- package/docs/concepts/roles-and-workflows.md +59 -0
- package/docs/concepts/terminology-policy.md +27 -0
- package/docs/getting-started/01-installation.md +78 -0
- package/docs/getting-started/02-first-run.md +102 -0
- package/docs/getting-started/03-adding-to-project.md +15 -0
- package/docs/getting-started/04-host-setup.md +15 -0
- package/docs/guides/ci-integration.md +15 -0
- package/docs/guides/creating-skills.md +15 -0
- package/docs/guides/expertise-module-authoring.md +15 -0
- package/docs/guides/hook-development.md +15 -0
- package/docs/guides/memory-and-learnings.md +34 -0
- package/docs/guides/multi-host-export.md +15 -0
- package/docs/guides/troubleshooting.md +101 -0
- package/docs/guides/writing-custom-roles.md +15 -0
- package/docs/plans/2026-03-15-cli-pipeline-integration-design.md +592 -0
- package/docs/plans/2026-03-15-cli-pipeline-integration-plan.md +598 -0
- package/docs/plans/2026-03-15-docs-enforcement-plan.md +238 -0
- package/docs/readmes/INDEX.md +99 -0
- package/docs/readmes/features/expertise/README.md +171 -0
- package/docs/readmes/features/exports/README.md +222 -0
- package/docs/readmes/features/hooks/README.md +103 -0
- package/docs/readmes/features/hooks/loop-cap-guard.md +133 -0
- package/docs/readmes/features/hooks/post-tool-capture.md +121 -0
- package/docs/readmes/features/hooks/post-tool-lint.md +130 -0
- package/docs/readmes/features/hooks/pre-compact-summary.md +122 -0
- package/docs/readmes/features/hooks/pre-tool-capture-route.md +100 -0
- package/docs/readmes/features/hooks/protected-path-write-guard.md +128 -0
- package/docs/readmes/features/hooks/session-start.md +119 -0
- package/docs/readmes/features/hooks/stop-handoff-harvest.md +125 -0
- package/docs/readmes/features/roles/README.md +157 -0
- package/docs/readmes/features/roles/clarifier.md +152 -0
- package/docs/readmes/features/roles/content-author.md +190 -0
- package/docs/readmes/features/roles/designer.md +193 -0
- package/docs/readmes/features/roles/executor.md +184 -0
- package/docs/readmes/features/roles/learner.md +210 -0
- package/docs/readmes/features/roles/planner.md +182 -0
- package/docs/readmes/features/roles/researcher.md +164 -0
- package/docs/readmes/features/roles/reviewer.md +184 -0
- package/docs/readmes/features/roles/specifier.md +162 -0
- package/docs/readmes/features/roles/verifier.md +215 -0
- package/docs/readmes/features/schemas/README.md +178 -0
- package/docs/readmes/features/skills/README.md +63 -0
- package/docs/readmes/features/skills/brainstorming.md +96 -0
- package/docs/readmes/features/skills/debugging.md +148 -0
- package/docs/readmes/features/skills/design.md +120 -0
- package/docs/readmes/features/skills/prepare-next.md +109 -0
- package/docs/readmes/features/skills/run-audit.md +159 -0
- package/docs/readmes/features/skills/scan-project.md +109 -0
- package/docs/readmes/features/skills/self-audit.md +176 -0
- package/docs/readmes/features/skills/tdd.md +137 -0
- package/docs/readmes/features/skills/using-skills.md +92 -0
- package/docs/readmes/features/skills/verification.md +120 -0
- package/docs/readmes/features/skills/writing-plans.md +104 -0
- package/docs/readmes/features/tooling/README.md +320 -0
- package/docs/readmes/features/workflows/README.md +186 -0
- package/docs/readmes/features/workflows/author.md +181 -0
- package/docs/readmes/features/workflows/clarify.md +154 -0
- package/docs/readmes/features/workflows/design-review.md +171 -0
- package/docs/readmes/features/workflows/design.md +169 -0
- package/docs/readmes/features/workflows/discover.md +162 -0
- package/docs/readmes/features/workflows/execute.md +173 -0
- package/docs/readmes/features/workflows/learn.md +167 -0
- package/docs/readmes/features/workflows/plan-review.md +165 -0
- package/docs/readmes/features/workflows/plan.md +170 -0
- package/docs/readmes/features/workflows/prepare-next.md +167 -0
- package/docs/readmes/features/workflows/review.md +169 -0
- package/docs/readmes/features/workflows/run-audit.md +191 -0
- package/docs/readmes/features/workflows/spec-challenge.md +159 -0
- package/docs/readmes/features/workflows/specify.md +160 -0
- package/docs/readmes/features/workflows/verify.md +177 -0
- package/docs/readmes/packages/README.md +50 -0
- package/docs/readmes/packages/ajv.md +117 -0
- package/docs/readmes/packages/context-mode.md +118 -0
- package/docs/readmes/packages/gray-matter.md +116 -0
- package/docs/readmes/packages/node-test.md +137 -0
- package/docs/readmes/packages/yaml.md +112 -0
- package/docs/reference/configuration-reference.md +159 -0
- package/docs/reference/expertise-index.md +52 -0
- package/docs/reference/git-flow.md +43 -0
- package/docs/reference/hooks.md +87 -0
- package/docs/reference/host-exports.md +50 -0
- package/docs/reference/launch-checklist.md +172 -0
- package/docs/reference/marketplace-listings.md +76 -0
- package/docs/reference/release-process.md +34 -0
- package/docs/reference/roles-reference.md +77 -0
- package/docs/reference/skills.md +33 -0
- package/docs/reference/templates.md +29 -0
- package/docs/reference/tooling-cli.md +94 -0
- package/docs/truth-claims.yaml +222 -0
- package/expertise/PROGRESS.md +63 -0
- package/expertise/README.md +18 -0
- package/expertise/antipatterns/PROGRESS.md +56 -0
- package/expertise/antipatterns/backend/api-design-antipatterns.md +1271 -0
- package/expertise/antipatterns/backend/auth-antipatterns.md +1195 -0
- package/expertise/antipatterns/backend/caching-antipatterns.md +622 -0
- package/expertise/antipatterns/backend/database-antipatterns.md +1038 -0
- package/expertise/antipatterns/backend/index.md +24 -0
- package/expertise/antipatterns/backend/microservices-antipatterns.md +850 -0
- package/expertise/antipatterns/code/architecture-antipatterns.md +919 -0
- package/expertise/antipatterns/code/async-antipatterns.md +622 -0
- package/expertise/antipatterns/code/code-smells.md +1186 -0
- package/expertise/antipatterns/code/dependency-antipatterns.md +1209 -0
- package/expertise/antipatterns/code/error-handling-antipatterns.md +1360 -0
- package/expertise/antipatterns/code/index.md +27 -0
- package/expertise/antipatterns/code/naming-and-abstraction.md +1118 -0
- package/expertise/antipatterns/code/state-management-antipatterns.md +1076 -0
- package/expertise/antipatterns/code/testing-antipatterns.md +1053 -0
- package/expertise/antipatterns/design/accessibility-antipatterns.md +1136 -0
- package/expertise/antipatterns/design/dark-patterns.md +1121 -0
- package/expertise/antipatterns/design/index.md +22 -0
- package/expertise/antipatterns/design/ui-antipatterns.md +1202 -0
- package/expertise/antipatterns/design/ux-antipatterns.md +680 -0
- package/expertise/antipatterns/frontend/css-layout-antipatterns.md +691 -0
- package/expertise/antipatterns/frontend/flutter-antipatterns.md +1827 -0
- package/expertise/antipatterns/frontend/index.md +23 -0
- package/expertise/antipatterns/frontend/mobile-antipatterns.md +573 -0
- package/expertise/antipatterns/frontend/react-antipatterns.md +1128 -0
- package/expertise/antipatterns/frontend/spa-antipatterns.md +1235 -0
- package/expertise/antipatterns/index.md +31 -0
- package/expertise/antipatterns/performance/index.md +20 -0
- package/expertise/antipatterns/performance/performance-antipatterns.md +1013 -0
- package/expertise/antipatterns/performance/premature-optimization.md +623 -0
- package/expertise/antipatterns/performance/scaling-antipatterns.md +785 -0
- package/expertise/antipatterns/process/ai-coding-antipatterns.md +853 -0
- package/expertise/antipatterns/process/code-review-antipatterns.md +656 -0
- package/expertise/antipatterns/process/deployment-antipatterns.md +920 -0
- package/expertise/antipatterns/process/index.md +23 -0
- package/expertise/antipatterns/process/technical-debt-antipatterns.md +647 -0
- package/expertise/antipatterns/security/index.md +20 -0
- package/expertise/antipatterns/security/secrets-antipatterns.md +849 -0
- package/expertise/antipatterns/security/security-theater.md +843 -0
- package/expertise/antipatterns/security/vulnerability-patterns.md +801 -0
- package/expertise/architecture/PROGRESS.md +70 -0
- package/expertise/architecture/data/caching-architecture.md +671 -0
- package/expertise/architecture/data/data-consistency.md +574 -0
- package/expertise/architecture/data/data-modeling.md +536 -0
- package/expertise/architecture/data/event-streams-and-queues.md +634 -0
- package/expertise/architecture/data/index.md +25 -0
- package/expertise/architecture/data/search-architecture.md +663 -0
- package/expertise/architecture/data/sql-vs-nosql.md +708 -0
- package/expertise/architecture/decisions/architecture-decision-records.md +640 -0
- package/expertise/architecture/decisions/build-vs-buy.md +616 -0
- package/expertise/architecture/decisions/index.md +23 -0
- package/expertise/architecture/decisions/monolith-to-microservices.md +790 -0
- package/expertise/architecture/decisions/technology-selection.md +616 -0
- package/expertise/architecture/distributed/cap-theorem-and-tradeoffs.md +800 -0
- package/expertise/architecture/distributed/circuit-breaker-bulkhead.md +741 -0
- package/expertise/architecture/distributed/consensus-and-coordination.md +796 -0
- package/expertise/architecture/distributed/distributed-systems-fundamentals.md +564 -0
- package/expertise/architecture/distributed/idempotency-and-retry.md +796 -0
- package/expertise/architecture/distributed/index.md +25 -0
- package/expertise/architecture/distributed/saga-pattern.md +797 -0
- package/expertise/architecture/foundations/architectural-thinking.md +460 -0
- package/expertise/architecture/foundations/coupling-and-cohesion.md +770 -0
- package/expertise/architecture/foundations/design-principles-solid.md +649 -0
- package/expertise/architecture/foundations/domain-driven-design.md +719 -0
- package/expertise/architecture/foundations/index.md +25 -0
- package/expertise/architecture/foundations/separation-of-concerns.md +472 -0
- package/expertise/architecture/foundations/twelve-factor-app.md +797 -0
- package/expertise/architecture/index.md +34 -0
- package/expertise/architecture/integration/api-design-graphql.md +638 -0
- package/expertise/architecture/integration/api-design-grpc.md +804 -0
- package/expertise/architecture/integration/api-design-rest.md +892 -0
- package/expertise/architecture/integration/index.md +25 -0
- package/expertise/architecture/integration/third-party-integration.md +795 -0
- package/expertise/architecture/integration/webhooks-and-callbacks.md +1152 -0
- package/expertise/architecture/integration/websockets-realtime.md +791 -0
- package/expertise/architecture/mobile-architecture/index.md +22 -0
- package/expertise/architecture/mobile-architecture/mobile-app-architecture.md +780 -0
- package/expertise/architecture/mobile-architecture/mobile-backend-for-frontend.md +670 -0
- package/expertise/architecture/mobile-architecture/offline-first.md +719 -0
- package/expertise/architecture/mobile-architecture/push-and-sync.md +782 -0
- package/expertise/architecture/patterns/cqrs-event-sourcing.md +717 -0
- package/expertise/architecture/patterns/event-driven.md +797 -0
- package/expertise/architecture/patterns/hexagonal-clean-architecture.md +870 -0
- package/expertise/architecture/patterns/index.md +27 -0
- package/expertise/architecture/patterns/layered-architecture.md +736 -0
- package/expertise/architecture/patterns/microservices.md +753 -0
- package/expertise/architecture/patterns/modular-monolith.md +692 -0
- package/expertise/architecture/patterns/monolith.md +626 -0
- package/expertise/architecture/patterns/plugin-architecture.md +735 -0
- package/expertise/architecture/patterns/serverless.md +780 -0
- package/expertise/architecture/scaling/database-scaling.md +615 -0
- package/expertise/architecture/scaling/feature-flags-and-rollouts.md +757 -0
- package/expertise/architecture/scaling/horizontal-vs-vertical.md +606 -0
- package/expertise/architecture/scaling/index.md +24 -0
- package/expertise/architecture/scaling/multi-tenancy.md +800 -0
- package/expertise/architecture/scaling/stateless-design.md +787 -0
- package/expertise/backend/embedded-firmware.md +625 -0
- package/expertise/backend/go.md +853 -0
- package/expertise/backend/index.md +24 -0
- package/expertise/backend/java-spring.md +448 -0
- package/expertise/backend/node-typescript.md +625 -0
- package/expertise/backend/python-fastapi.md +724 -0
- package/expertise/backend/rust.md +458 -0
- package/expertise/backend/solidity.md +711 -0
- package/expertise/composition-map.yaml +443 -0
- package/expertise/content/foundations/content-modeling.md +395 -0
- package/expertise/content/foundations/editorial-standards.md +449 -0
- package/expertise/content/foundations/index.md +24 -0
- package/expertise/content/foundations/microcopy.md +455 -0
- package/expertise/content/foundations/terminology-governance.md +509 -0
- package/expertise/content/index.md +34 -0
- package/expertise/content/patterns/accessibility-copy.md +518 -0
- package/expertise/content/patterns/index.md +24 -0
- package/expertise/content/patterns/notification-content.md +433 -0
- package/expertise/content/patterns/sample-content.md +486 -0
- package/expertise/content/patterns/state-copy.md +439 -0
- package/expertise/design/PROGRESS.md +58 -0
- package/expertise/design/disciplines/dark-mode-theming.md +577 -0
- package/expertise/design/disciplines/design-systems.md +595 -0
- package/expertise/design/disciplines/index.md +25 -0
- package/expertise/design/disciplines/information-architecture.md +800 -0
- package/expertise/design/disciplines/interaction-design.md +788 -0
- package/expertise/design/disciplines/responsive-design.md +552 -0
- package/expertise/design/disciplines/usability-testing.md +516 -0
- package/expertise/design/disciplines/user-research.md +792 -0
- package/expertise/design/foundations/accessibility-design.md +796 -0
- package/expertise/design/foundations/color-theory.md +797 -0
- package/expertise/design/foundations/iconography.md +795 -0
- package/expertise/design/foundations/index.md +26 -0
- package/expertise/design/foundations/motion-and-animation.md +653 -0
- package/expertise/design/foundations/rtl-design.md +585 -0
- package/expertise/design/foundations/spacing-and-layout.md +607 -0
- package/expertise/design/foundations/typography.md +800 -0
- package/expertise/design/foundations/visual-hierarchy.md +761 -0
- package/expertise/design/index.md +32 -0
- package/expertise/design/patterns/authentication-flows.md +474 -0
- package/expertise/design/patterns/content-consumption.md +789 -0
- package/expertise/design/patterns/data-display.md +618 -0
- package/expertise/design/patterns/e-commerce.md +1494 -0
- package/expertise/design/patterns/feedback-and-states.md +642 -0
- package/expertise/design/patterns/forms-and-input.md +819 -0
- package/expertise/design/patterns/gamification.md +801 -0
- package/expertise/design/patterns/index.md +31 -0
- package/expertise/design/patterns/microinteractions.md +449 -0
- package/expertise/design/patterns/navigation.md +800 -0
- package/expertise/design/patterns/notifications.md +705 -0
- package/expertise/design/patterns/onboarding.md +700 -0
- package/expertise/design/patterns/search-and-filter.md +601 -0
- package/expertise/design/patterns/settings-and-preferences.md +768 -0
- package/expertise/design/patterns/social-and-community.md +748 -0
- package/expertise/design/platforms/desktop-native.md +612 -0
- package/expertise/design/platforms/index.md +25 -0
- package/expertise/design/platforms/mobile-android.md +825 -0
- package/expertise/design/platforms/mobile-cross-platform.md +983 -0
- package/expertise/design/platforms/mobile-ios.md +699 -0
- package/expertise/design/platforms/tablet.md +794 -0
- package/expertise/design/platforms/web-dashboard.md +790 -0
- package/expertise/design/platforms/web-responsive.md +550 -0
- package/expertise/design/psychology/behavioral-nudges.md +449 -0
- package/expertise/design/psychology/cognitive-load.md +1191 -0
- package/expertise/design/psychology/error-psychology.md +778 -0
- package/expertise/design/psychology/index.md +22 -0
- package/expertise/design/psychology/persuasive-design.md +736 -0
- package/expertise/design/psychology/user-mental-models.md +623 -0
- package/expertise/design/tooling/open-pencil.md +266 -0
- package/expertise/frontend/angular.md +1073 -0
- package/expertise/frontend/desktop-electron.md +546 -0
- package/expertise/frontend/flutter.md +782 -0
- package/expertise/frontend/index.md +27 -0
- package/expertise/frontend/native-android.md +409 -0
- package/expertise/frontend/native-ios.md +490 -0
- package/expertise/frontend/react-native.md +1160 -0
- package/expertise/frontend/react.md +808 -0
- package/expertise/frontend/vue.md +1089 -0
- package/expertise/humanize/domain-rules-code.md +79 -0
- package/expertise/humanize/domain-rules-content.md +67 -0
- package/expertise/humanize/domain-rules-technical-docs.md +56 -0
- package/expertise/humanize/index.md +35 -0
- package/expertise/humanize/self-audit-checklist.md +87 -0
- package/expertise/humanize/sentence-patterns.md +218 -0
- package/expertise/humanize/vocabulary-blacklist.md +105 -0
- package/expertise/i18n/PROGRESS.md +65 -0
- package/expertise/i18n/advanced/accessibility-and-i18n.md +28 -0
- package/expertise/i18n/advanced/bidirectional-text-algorithm.md +38 -0
- package/expertise/i18n/advanced/complex-scripts.md +30 -0
- package/expertise/i18n/advanced/performance-and-i18n.md +27 -0
- package/expertise/i18n/advanced/testing-i18n.md +28 -0
- package/expertise/i18n/content/content-adaptation.md +23 -0
- package/expertise/i18n/content/locale-specific-formatting.md +23 -0
- package/expertise/i18n/content/machine-translation-integration.md +28 -0
- package/expertise/i18n/content/translation-management.md +29 -0
- package/expertise/i18n/foundations/date-time-calendars.md +67 -0
- package/expertise/i18n/foundations/i18n-architecture.md +272 -0
- package/expertise/i18n/foundations/locale-and-language-tags.md +79 -0
- package/expertise/i18n/foundations/numbers-currency-units.md +61 -0
- package/expertise/i18n/foundations/pluralization-and-gender.md +109 -0
- package/expertise/i18n/foundations/string-externalization.md +236 -0
- package/expertise/i18n/foundations/text-direction-bidi.md +241 -0
- package/expertise/i18n/foundations/unicode-and-encoding.md +86 -0
- package/expertise/i18n/index.md +38 -0
- package/expertise/i18n/platform/backend-i18n.md +31 -0
- package/expertise/i18n/platform/flutter-i18n.md +148 -0
- package/expertise/i18n/platform/native-android-i18n.md +36 -0
- package/expertise/i18n/platform/native-ios-i18n.md +36 -0
- package/expertise/i18n/platform/react-i18n.md +103 -0
- package/expertise/i18n/platform/web-css-i18n.md +81 -0
- package/expertise/i18n/rtl/arabic-specific.md +175 -0
- package/expertise/i18n/rtl/hebrew-specific.md +149 -0
- package/expertise/i18n/rtl/rtl-animations-and-transitions.md +111 -0
- package/expertise/i18n/rtl/rtl-forms-and-input.md +161 -0
- package/expertise/i18n/rtl/rtl-fundamentals.md +211 -0
- package/expertise/i18n/rtl/rtl-icons-and-images.md +181 -0
- package/expertise/i18n/rtl/rtl-layout-mirroring.md +252 -0
- package/expertise/i18n/rtl/rtl-navigation-and-gestures.md +107 -0
- package/expertise/i18n/rtl/rtl-testing-and-qa.md +147 -0
- package/expertise/i18n/rtl/rtl-typography.md +160 -0
- package/expertise/index.md +113 -0
- package/expertise/index.yaml +216 -0
- package/expertise/infrastructure/cloud-aws.md +597 -0
- package/expertise/infrastructure/cloud-gcp.md +599 -0
- package/expertise/infrastructure/cybersecurity.md +816 -0
- package/expertise/infrastructure/database-mongodb.md +447 -0
- package/expertise/infrastructure/database-postgres.md +400 -0
- package/expertise/infrastructure/devops-cicd.md +787 -0
- package/expertise/infrastructure/index.md +27 -0
- package/expertise/performance/PROGRESS.md +50 -0
- package/expertise/performance/backend/api-latency.md +1204 -0
- package/expertise/performance/backend/background-jobs.md +506 -0
- package/expertise/performance/backend/connection-pooling.md +1209 -0
- package/expertise/performance/backend/database-query-optimization.md +515 -0
- package/expertise/performance/backend/index.md +23 -0
- package/expertise/performance/backend/rate-limiting-and-throttling.md +971 -0
- package/expertise/performance/foundations/algorithmic-complexity.md +954 -0
- package/expertise/performance/foundations/caching-strategies.md +489 -0
- package/expertise/performance/foundations/concurrency-and-parallelism.md +847 -0
- package/expertise/performance/foundations/index.md +24 -0
- package/expertise/performance/foundations/measuring-and-profiling.md +440 -0
- package/expertise/performance/foundations/memory-management.md +964 -0
- package/expertise/performance/foundations/performance-budgets.md +1314 -0
- package/expertise/performance/index.md +31 -0
- package/expertise/performance/infrastructure/auto-scaling.md +1059 -0
- package/expertise/performance/infrastructure/cdn-and-edge.md +1081 -0
- package/expertise/performance/infrastructure/index.md +22 -0
- package/expertise/performance/infrastructure/load-balancing.md +1081 -0
- package/expertise/performance/infrastructure/observability.md +1079 -0
- package/expertise/performance/mobile/index.md +23 -0
- package/expertise/performance/mobile/mobile-animations.md +544 -0
- package/expertise/performance/mobile/mobile-memory-battery.md +416 -0
- package/expertise/performance/mobile/mobile-network.md +452 -0
- package/expertise/performance/mobile/mobile-rendering.md +599 -0
- package/expertise/performance/mobile/mobile-startup-time.md +505 -0
- package/expertise/performance/platform-specific/flutter-performance.md +647 -0
- package/expertise/performance/platform-specific/index.md +22 -0
- package/expertise/performance/platform-specific/node-performance.md +1307 -0
- package/expertise/performance/platform-specific/postgres-performance.md +1366 -0
- package/expertise/performance/platform-specific/react-performance.md +1403 -0
- package/expertise/performance/web/bundle-optimization.md +1239 -0
- package/expertise/performance/web/image-and-media.md +636 -0
- package/expertise/performance/web/index.md +24 -0
- package/expertise/performance/web/network-optimization.md +1133 -0
- package/expertise/performance/web/rendering-performance.md +1098 -0
- package/expertise/performance/web/ssr-and-hydration.md +918 -0
- package/expertise/performance/web/web-vitals.md +1374 -0
- package/expertise/quality/accessibility.md +985 -0
- package/expertise/quality/evidence-based-verification.md +499 -0
- package/expertise/quality/index.md +24 -0
- package/expertise/quality/ml-model-audit.md +614 -0
- package/expertise/quality/performance.md +600 -0
- package/expertise/quality/testing-api.md +891 -0
- package/expertise/quality/testing-mobile.md +496 -0
- package/expertise/quality/testing-web.md +849 -0
- package/expertise/security/PROGRESS.md +54 -0
- package/expertise/security/agentic-identity.md +540 -0
- package/expertise/security/compliance-frameworks.md +601 -0
- package/expertise/security/data/data-encryption.md +364 -0
- package/expertise/security/data/data-privacy-gdpr.md +692 -0
- package/expertise/security/data/database-security.md +1171 -0
- package/expertise/security/data/index.md +22 -0
- package/expertise/security/data/pii-handling.md +531 -0
- package/expertise/security/foundations/authentication.md +1041 -0
- package/expertise/security/foundations/authorization.md +603 -0
- package/expertise/security/foundations/cryptography.md +1001 -0
- package/expertise/security/foundations/index.md +25 -0
- package/expertise/security/foundations/owasp-top-10.md +1354 -0
- package/expertise/security/foundations/secrets-management.md +1217 -0
- package/expertise/security/foundations/secure-sdlc.md +700 -0
- package/expertise/security/foundations/supply-chain-security.md +698 -0
- package/expertise/security/index.md +31 -0
- package/expertise/security/infrastructure/cloud-security-aws.md +1296 -0
- package/expertise/security/infrastructure/cloud-security-gcp.md +1376 -0
- package/expertise/security/infrastructure/container-security.md +721 -0
- package/expertise/security/infrastructure/incident-response.md +1295 -0
- package/expertise/security/infrastructure/index.md +24 -0
- package/expertise/security/infrastructure/logging-and-monitoring.md +1618 -0
- package/expertise/security/infrastructure/network-security.md +1337 -0
- package/expertise/security/mobile/index.md +23 -0
- package/expertise/security/mobile/mobile-android-security.md +1218 -0
- package/expertise/security/mobile/mobile-binary-protection.md +1229 -0
- package/expertise/security/mobile/mobile-data-storage.md +1265 -0
- package/expertise/security/mobile/mobile-ios-security.md +1401 -0
- package/expertise/security/mobile/mobile-network-security.md +1520 -0
- package/expertise/security/smart-contract-security.md +594 -0
- package/expertise/security/testing/index.md +22 -0
- package/expertise/security/testing/penetration-testing.md +1258 -0
- package/expertise/security/testing/security-code-review.md +1765 -0
- package/expertise/security/testing/threat-modeling.md +1074 -0
- package/expertise/security/testing/vulnerability-scanning.md +1062 -0
- package/expertise/security/web/api-security.md +586 -0
- package/expertise/security/web/cors-and-headers.md +433 -0
- package/expertise/security/web/csrf.md +562 -0
- package/expertise/security/web/file-upload.md +1477 -0
- package/expertise/security/web/index.md +25 -0
- package/expertise/security/web/injection.md +1375 -0
- package/expertise/security/web/session-management.md +1101 -0
- package/expertise/security/web/xss.md +1158 -0
- package/exports/README.md +17 -0
- package/exports/hosts/claude/.claude/agents/clarifier.md +42 -0
- package/exports/hosts/claude/.claude/agents/content-author.md +63 -0
- package/exports/hosts/claude/.claude/agents/designer.md +55 -0
- package/exports/hosts/claude/.claude/agents/executor.md +55 -0
- package/exports/hosts/claude/.claude/agents/learner.md +51 -0
- package/exports/hosts/claude/.claude/agents/planner.md +53 -0
- package/exports/hosts/claude/.claude/agents/researcher.md +43 -0
- package/exports/hosts/claude/.claude/agents/reviewer.md +54 -0
- package/exports/hosts/claude/.claude/agents/specifier.md +47 -0
- package/exports/hosts/claude/.claude/agents/verifier.md +71 -0
- package/exports/hosts/claude/.claude/commands/author.md +42 -0
- package/exports/hosts/claude/.claude/commands/clarify.md +38 -0
- package/exports/hosts/claude/.claude/commands/design-review.md +46 -0
- package/exports/hosts/claude/.claude/commands/design.md +44 -0
- package/exports/hosts/claude/.claude/commands/discover.md +37 -0
- package/exports/hosts/claude/.claude/commands/execute.md +48 -0
- package/exports/hosts/claude/.claude/commands/learn.md +38 -0
- package/exports/hosts/claude/.claude/commands/plan-review.md +42 -0
- package/exports/hosts/claude/.claude/commands/plan.md +39 -0
- package/exports/hosts/claude/.claude/commands/prepare-next.md +37 -0
- package/exports/hosts/claude/.claude/commands/review.md +40 -0
- package/exports/hosts/claude/.claude/commands/run-audit.md +41 -0
- package/exports/hosts/claude/.claude/commands/spec-challenge.md +41 -0
- package/exports/hosts/claude/.claude/commands/specify.md +38 -0
- package/exports/hosts/claude/.claude/commands/verify.md +37 -0
- package/exports/hosts/claude/.claude/settings.json +34 -0
- package/exports/hosts/claude/CLAUDE.md +19 -0
- package/exports/hosts/claude/export.manifest.json +38 -0
- package/exports/hosts/claude/host-package.json +67 -0
- package/exports/hosts/codex/AGENTS.md +19 -0
- package/exports/hosts/codex/export.manifest.json +38 -0
- package/exports/hosts/codex/host-package.json +41 -0
- package/exports/hosts/cursor/.cursor/hooks.json +16 -0
- package/exports/hosts/cursor/.cursor/rules/wazir-core.mdc +19 -0
- package/exports/hosts/cursor/export.manifest.json +38 -0
- package/exports/hosts/cursor/host-package.json +42 -0
- package/exports/hosts/gemini/GEMINI.md +19 -0
- package/exports/hosts/gemini/export.manifest.json +38 -0
- package/exports/hosts/gemini/host-package.json +41 -0
- package/hooks/README.md +18 -0
- package/hooks/definitions/loop_cap_guard.yaml +21 -0
- package/hooks/definitions/post_tool_capture.yaml +24 -0
- package/hooks/definitions/pre_compact_summary.yaml +19 -0
- package/hooks/definitions/pre_tool_capture_route.yaml +19 -0
- package/hooks/definitions/protected_path_write_guard.yaml +19 -0
- package/hooks/definitions/session_start.yaml +19 -0
- package/hooks/definitions/stop_handoff_harvest.yaml +20 -0
- package/hooks/loop-cap-guard +17 -0
- package/hooks/post-tool-lint +36 -0
- package/hooks/protected-path-write-guard +17 -0
- package/hooks/session-start +41 -0
- package/llms-full.txt +2355 -0
- package/llms.txt +43 -0
- package/package.json +79 -0
- package/roles/README.md +20 -0
- package/roles/clarifier.md +42 -0
- package/roles/content-author.md +63 -0
- package/roles/designer.md +55 -0
- package/roles/executor.md +55 -0
- package/roles/learner.md +51 -0
- package/roles/planner.md +53 -0
- package/roles/researcher.md +43 -0
- package/roles/reviewer.md +54 -0
- package/roles/specifier.md +47 -0
- package/roles/verifier.md +71 -0
- package/schemas/README.md +24 -0
- package/schemas/accepted-learning.schema.json +20 -0
- package/schemas/author-artifact.schema.json +156 -0
- package/schemas/clarification.schema.json +19 -0
- package/schemas/design-artifact.schema.json +80 -0
- package/schemas/docs-claim.schema.json +18 -0
- package/schemas/export-manifest.schema.json +20 -0
- package/schemas/hook.schema.json +67 -0
- package/schemas/host-export-package.schema.json +18 -0
- package/schemas/implementation-plan.schema.json +19 -0
- package/schemas/proposed-learning.schema.json +19 -0
- package/schemas/research.schema.json +18 -0
- package/schemas/review.schema.json +29 -0
- package/schemas/run-manifest.schema.json +18 -0
- package/schemas/spec-challenge.schema.json +18 -0
- package/schemas/spec.schema.json +20 -0
- package/schemas/usage.schema.json +102 -0
- package/schemas/verification-proof.schema.json +29 -0
- package/schemas/wazir-manifest.schema.json +173 -0
- package/skills/README.md +40 -0
- package/skills/brainstorming/SKILL.md +77 -0
- package/skills/debugging/SKILL.md +50 -0
- package/skills/design/SKILL.md +61 -0
- package/skills/dispatching-parallel-agents/SKILL.md +128 -0
- package/skills/executing-plans/SKILL.md +70 -0
- package/skills/finishing-a-development-branch/SKILL.md +169 -0
- package/skills/humanize/SKILL.md +123 -0
- package/skills/init-pipeline/SKILL.md +124 -0
- package/skills/prepare-next/SKILL.md +20 -0
- package/skills/receiving-code-review/SKILL.md +123 -0
- package/skills/requesting-code-review/SKILL.md +105 -0
- package/skills/requesting-code-review/code-reviewer.md +108 -0
- package/skills/run-audit/SKILL.md +197 -0
- package/skills/scan-project/SKILL.md +41 -0
- package/skills/self-audit/SKILL.md +153 -0
- package/skills/subagent-driven-development/SKILL.md +154 -0
- package/skills/subagent-driven-development/code-quality-reviewer-prompt.md +26 -0
- package/skills/subagent-driven-development/implementer-prompt.md +102 -0
- package/skills/subagent-driven-development/spec-reviewer-prompt.md +61 -0
- package/skills/tdd/SKILL.md +23 -0
- package/skills/using-git-worktrees/SKILL.md +163 -0
- package/skills/using-skills/SKILL.md +95 -0
- package/skills/verification/SKILL.md +22 -0
- package/skills/wazir/SKILL.md +463 -0
- package/skills/writing-plans/SKILL.md +30 -0
- package/skills/writing-skills/SKILL.md +157 -0
- package/skills/writing-skills/anthropic-best-practices.md +122 -0
- package/skills/writing-skills/persuasion-principles.md +50 -0
- package/templates/README.md +20 -0
- package/templates/artifacts/README.md +10 -0
- package/templates/artifacts/accepted-learning.md +19 -0
- package/templates/artifacts/accepted-learning.template.json +12 -0
- package/templates/artifacts/author.md +74 -0
- package/templates/artifacts/author.template.json +19 -0
- package/templates/artifacts/clarification.md +21 -0
- package/templates/artifacts/clarification.template.json +12 -0
- package/templates/artifacts/execute-notes.md +19 -0
- package/templates/artifacts/implementation-plan.md +21 -0
- package/templates/artifacts/implementation-plan.template.json +11 -0
- package/templates/artifacts/learning-proposal.md +19 -0
- package/templates/artifacts/next-run-handoff.md +21 -0
- package/templates/artifacts/plan-review.md +19 -0
- package/templates/artifacts/proposed-learning.template.json +12 -0
- package/templates/artifacts/research.md +21 -0
- package/templates/artifacts/research.template.json +12 -0
- package/templates/artifacts/review-findings.md +19 -0
- package/templates/artifacts/review.template.json +11 -0
- package/templates/artifacts/run-manifest.template.json +8 -0
- package/templates/artifacts/spec-challenge.md +19 -0
- package/templates/artifacts/spec-challenge.template.json +11 -0
- package/templates/artifacts/spec.md +21 -0
- package/templates/artifacts/spec.template.json +12 -0
- package/templates/artifacts/verification-proof.md +19 -0
- package/templates/artifacts/verification-proof.template.json +11 -0
- package/templates/examples/accepted-learning.example.json +14 -0
- package/templates/examples/author.example.json +152 -0
- package/templates/examples/clarification.example.json +15 -0
- package/templates/examples/docs-claim.example.json +8 -0
- package/templates/examples/export-manifest.example.json +7 -0
- package/templates/examples/host-export-package.example.json +11 -0
- package/templates/examples/implementation-plan.example.json +17 -0
- package/templates/examples/proposed-learning.example.json +13 -0
- package/templates/examples/research.example.json +15 -0
- package/templates/examples/research.example.md +6 -0
- package/templates/examples/review.example.json +17 -0
- package/templates/examples/run-manifest.example.json +9 -0
- package/templates/examples/spec-challenge.example.json +14 -0
- package/templates/examples/spec.example.json +21 -0
- package/templates/examples/verification-proof.example.json +21 -0
- package/templates/examples/wazir-manifest.example.yaml +65 -0
- package/templates/task-definition-schema.md +99 -0
- package/tooling/README.md +20 -0
- package/tooling/src/adapters/context-mode.js +50 -0
- package/tooling/src/capture/command.js +376 -0
- package/tooling/src/capture/store.js +99 -0
- package/tooling/src/capture/usage.js +270 -0
- package/tooling/src/checks/branches.js +50 -0
- package/tooling/src/checks/brand-truth.js +110 -0
- package/tooling/src/checks/changelog.js +231 -0
- package/tooling/src/checks/command-registry.js +36 -0
- package/tooling/src/checks/commits.js +102 -0
- package/tooling/src/checks/docs-drift.js +103 -0
- package/tooling/src/checks/docs-truth.js +201 -0
- package/tooling/src/checks/runtime-surface.js +156 -0
- package/tooling/src/cli.js +116 -0
- package/tooling/src/command-options.js +56 -0
- package/tooling/src/commands/validate.js +320 -0
- package/tooling/src/doctor/command.js +91 -0
- package/tooling/src/export/command.js +77 -0
- package/tooling/src/export/compiler.js +498 -0
- package/tooling/src/guards/loop-cap-guard.js +52 -0
- package/tooling/src/guards/protected-path-write-guard.js +67 -0
- package/tooling/src/index/command.js +152 -0
- package/tooling/src/index/storage.js +1061 -0
- package/tooling/src/index/summarizers.js +261 -0
- package/tooling/src/loaders.js +18 -0
- package/tooling/src/project-root.js +22 -0
- package/tooling/src/recall/command.js +225 -0
- package/tooling/src/schema-validator.js +30 -0
- package/tooling/src/state-root.js +40 -0
- package/tooling/src/status/command.js +71 -0
- package/wazir.manifest.yaml +135 -0
- package/workflows/README.md +19 -0
- package/workflows/author.md +42 -0
- package/workflows/clarify.md +38 -0
- package/workflows/design-review.md +46 -0
- package/workflows/design.md +44 -0
- package/workflows/discover.md +37 -0
- package/workflows/execute.md +48 -0
- package/workflows/learn.md +38 -0
- package/workflows/plan-review.md +42 -0
- package/workflows/plan.md +39 -0
- package/workflows/prepare-next.md +37 -0
- package/workflows/review.md +40 -0
- package/workflows/run-audit.md +41 -0
- package/workflows/spec-challenge.md +41 -0
- package/workflows/specify.md +38 -0
- package/workflows/verify.md +37 -0
|
@@ -0,0 +1,601 @@
|
|
|
1
|
+
# Compliance Frameworks — Expertise Module
|
|
2
|
+
|
|
3
|
+
> Comprehensive guidance for implementing regulatory compliance across GDPR, CCPA/CPRA, HIPAA, PCI-DSS 4.0, SOX, and FERPA. Covers data classification, subject rights automation, breach response protocols, consent management, cross-jurisdictional requirements, and audit trail implementation. Use when building systems that handle regulated data or operate across multiple legal jurisdictions.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 1. Authority Opening — Enforcement Reality
|
|
8
|
+
|
|
9
|
+
Regulatory enforcement is not theoretical. Fines are measured in hundreds of millions,
|
|
10
|
+
and the trend is acceleration, not leniency.
|
|
11
|
+
|
|
12
|
+
| Year | Entity | Fine | Authority | Reason |
|
|
13
|
+
|------|--------|------|-----------|--------|
|
|
14
|
+
| 2023 | Meta Platforms | EUR 1.2B | Irish DPC | EU-US data transfers without adequate safeguards (GDPR Art. 46) |
|
|
15
|
+
| 2021 | Amazon Europe | EUR 746M | CNPD Luxembourg | Behavioral advertising without valid consent (GDPR Art. 6) |
|
|
16
|
+
| 2020 | British Airways | GBP 20M | UK ICO | Failure to protect personal data in 2018 breach (GDPR Art. 32) |
|
|
17
|
+
| 2019 | Equifax | USD 575M | US FTC | Settlement for 2017 breach exposing 147M consumers' PII |
|
|
18
|
+
|
|
19
|
+
**IBM 2023 Cost of a Data Breach Report:**
|
|
20
|
+
- Global average breach cost: **$4.45M** (13% increase over 3 years).
|
|
21
|
+
- Healthcare sector average: **$10.93M** (highest of any industry, 13 consecutive years).
|
|
22
|
+
- Organizations with IR team + tested plan saved **$2.66M** per breach.
|
|
23
|
+
- AI and automation in security reduced breach costs by **$1.76M** on average.
|
|
24
|
+
|
|
25
|
+
**HIPAA breach notification (45 CFR Section 164.408):** Covered entities must notify
|
|
26
|
+
affected individuals no later than **60 calendar days** from discovery. Breaches
|
|
27
|
+
affecting 500+ individuals require concurrent notification to HHS and prominent
|
|
28
|
+
media outlets in the affected state or jurisdiction.
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## 2. Framework Comparison
|
|
33
|
+
|
|
34
|
+
| Framework | Scope | Key Requirements | Breach Window | Penalties | Territorial Reach |
|
|
35
|
+
|-----------|-------|------------------|---------------|-----------|-------------------|
|
|
36
|
+
| **GDPR** | Personal data of EU/EEA residents | Lawful basis, minimization, subject rights (Art. 12-22), DPO, DPIA | 72 hours to authority (Art. 33) | EUR 20M or 4% global turnover | Any entity processing EU residents' data |
|
|
37
|
+
| **CCPA/CPRA** | PI of California residents | Right to know, delete, opt-out of sale/sharing, correct | "Without unreasonable delay" | USD 2,500-7,500/violation | USD 25M+ revenue, 100K+ consumers, or 50%+ data revenue |
|
|
38
|
+
| **HIPAA** | Protected health information | Privacy Rule, Security Rule, minimum necessary, BAAs | 60 days to individuals (45 CFR 164.408) | USD 100-50,000/violation; max USD 1.5M/year | US healthcare providers, plans, clearinghouses, BAs |
|
|
39
|
+
| **PCI-DSS 4.0** | Cardholder data + sensitive auth data | Segmentation, encryption, access control, MFA, logging | Immediate to acquirer; brands within 72h | USD 5,000-100,000/month; loss of processing | Any entity handling cardholder data globally |
|
|
40
|
+
| **SOX** | Financial reporting of US public companies | Internal controls (Sec. 404), CEO/CFO cert (Sec. 302) | Material weakness in annual report | USD 5M + 20 years imprisonment | US-listed companies + foreign subsidiaries |
|
|
41
|
+
| **FERPA** | Student education records | Prior consent for disclosure, directory opt-out | "Reasonable" notification expected | Loss of federal funding | US institutions receiving federal funding |
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## 3. Data Classification Patterns
|
|
46
|
+
|
|
47
|
+
Define classification once in config; enforce everywhere through middleware and database policies.
|
|
48
|
+
|
|
49
|
+
```yaml
|
|
50
|
+
data_categories:
|
|
51
|
+
email:
|
|
52
|
+
classification: PII
|
|
53
|
+
retention_days: 730
|
|
54
|
+
legal_basis: consent
|
|
55
|
+
encryption: at_rest_and_transit
|
|
56
|
+
cross_border: requires_adequacy_decision
|
|
57
|
+
|
|
58
|
+
health_record:
|
|
59
|
+
classification: sensitive_PII
|
|
60
|
+
retention_days: 2555 # 7 years (HIPAA minimum)
|
|
61
|
+
legal_basis: legal_obligation
|
|
62
|
+
encryption: at_rest_and_transit
|
|
63
|
+
additional_controls: [access_logging, anonymization_at_rest, role_based_access]
|
|
64
|
+
|
|
65
|
+
credit_card_number:
|
|
66
|
+
classification: financial
|
|
67
|
+
retention_days: 0 # Never store full PAN (PCI-DSS)
|
|
68
|
+
legal_basis: contract
|
|
69
|
+
encryption: tokenization
|
|
70
|
+
additional_controls: [pci_scope_isolation, network_segmentation]
|
|
71
|
+
|
|
72
|
+
social_security_number:
|
|
73
|
+
classification: sensitive_PII
|
|
74
|
+
retention_days: 2555 # Tax/legal retention
|
|
75
|
+
legal_basis: legal_obligation
|
|
76
|
+
encryption: at_rest_and_transit
|
|
77
|
+
additional_controls: [access_logging, masking_in_display, need_to_know_access]
|
|
78
|
+
|
|
79
|
+
child_data:
|
|
80
|
+
classification: sensitive_PII
|
|
81
|
+
retention_days: 365 # Minimize retention
|
|
82
|
+
legal_basis: parental_consent
|
|
83
|
+
minimum_age: 13 # COPPA; GDPR varies 13-16 by member state
|
|
84
|
+
additional_controls: [age_verification, parental_consent_verification, no_behavioral_profiling]
|
|
85
|
+
|
|
86
|
+
student_record:
|
|
87
|
+
classification: education_PII
|
|
88
|
+
retention_days: 1825 # 5 years post-enrollment
|
|
89
|
+
legal_basis: legal_obligation
|
|
90
|
+
additional_controls: [ferpa_directory_opt_out, parental_consent_tracking]
|
|
91
|
+
|
|
92
|
+
ip_address:
|
|
93
|
+
classification: PII
|
|
94
|
+
retention_days: 90
|
|
95
|
+
legal_basis: legitimate_interest
|
|
96
|
+
anonymization_strategy: truncate_last_octet
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### Classification Enforcement
|
|
100
|
+
|
|
101
|
+
```typescript
|
|
102
|
+
function enforceClassification(field: string, config: DataClassification) {
|
|
103
|
+
return async (req: Request, res: Response, next: NextFunction): Promise<void> => {
|
|
104
|
+
if (req.body[field] === undefined) return next();
|
|
105
|
+
if (config.encryption === 'tokenization') {
|
|
106
|
+
req.body[field] = await tokenizationService.tokenize(req.body[field]);
|
|
107
|
+
}
|
|
108
|
+
if (config.additionalControls.includes('access_logging')) {
|
|
109
|
+
await auditLogger.log({
|
|
110
|
+
actor: req.user?.id ?? 'anonymous', action: 'access',
|
|
111
|
+
resource: field, dataSubjectId: req.params.userId,
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
next();
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
## 4. Subject Rights Implementation (GDPR Articles 15-22)
|
|
122
|
+
|
|
123
|
+
| Right | Article | Implementation | SLA |
|
|
124
|
+
|-------|---------|----------------|-----|
|
|
125
|
+
| Access | Art. 15 | Data export endpoint | 30 days |
|
|
126
|
+
| Rectification | Art. 16 | Update with audit trail | 30 days |
|
|
127
|
+
| Erasure | Art. 17 | Cascading delete + processor notification | 30 days |
|
|
128
|
+
| Restriction | Art. 18 | Flag-based processing halt | 30 days |
|
|
129
|
+
| Portability | Art. 20 | JSON/CSV structured export | 30 days |
|
|
130
|
+
| Object | Art. 21 | Opt-out with audit trail | 30 days |
|
|
131
|
+
| Automated decisions | Art. 22 | Human review mechanism | 30 days |
|
|
132
|
+
|
|
133
|
+
### Erasure Endpoint with Cascading Deletes
|
|
134
|
+
|
|
135
|
+
```typescript
|
|
136
|
+
interface ErasureResult {
|
|
137
|
+
service: string;
|
|
138
|
+
status: 'deleted' | 'anonymized' | 'retained' | 'failed';
|
|
139
|
+
recordCount: number;
|
|
140
|
+
legalBasis?: string;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
class ErasureService {
|
|
144
|
+
private readonly processors: DataProcessor[] = [
|
|
145
|
+
{ name: 'analytics-provider', endpoint: '/api/gdpr/erasure' },
|
|
146
|
+
{ name: 'email-service', endpoint: '/api/gdpr/erasure' },
|
|
147
|
+
{ name: 'payment-provider', endpoint: '/api/gdpr/erasure' },
|
|
148
|
+
];
|
|
149
|
+
|
|
150
|
+
async executeErasure(userId: string, requestId: string): Promise<ErasureReport> {
|
|
151
|
+
const results: ErasureResult[] = [];
|
|
152
|
+
|
|
153
|
+
// Phase 1: Internal data — delete or anonymize per legal basis
|
|
154
|
+
results.push(await this.deleteUserProfile(userId));
|
|
155
|
+
results.push(await this.deleteUserContent(userId));
|
|
156
|
+
results.push(await this.handleFinancialRecords(userId));
|
|
157
|
+
|
|
158
|
+
// Phase 2: Notify processors (GDPR Art. 17(2))
|
|
159
|
+
const notified: string[] = [];
|
|
160
|
+
for (const proc of this.processors) {
|
|
161
|
+
try {
|
|
162
|
+
await this.notifyProcessor(proc, userId, requestId);
|
|
163
|
+
notified.push(proc.name);
|
|
164
|
+
} catch (err) {
|
|
165
|
+
const reason = (err as NodeJS.ErrnoException).code
|
|
166
|
+
?? (err instanceof Error ? err.message : String(err));
|
|
167
|
+
await this.alertDPO(requestId, proc.name, reason);
|
|
168
|
+
results.push({ service: proc.name, status: 'failed', recordCount: 0 });
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
// Phase 3: Audit trail (pseudonymize subject ID in record)
|
|
173
|
+
const report = {
|
|
174
|
+
requestId, userId: this.pseudonymize(userId),
|
|
175
|
+
completedAt: new Date().toISOString(), results, processorsNotified: notified,
|
|
176
|
+
};
|
|
177
|
+
await this.auditLog.recordErasure(report);
|
|
178
|
+
await this.scheduleBackupPurge(userId);
|
|
179
|
+
return report;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
private async handleFinancialRecords(userId: string): Promise<ErasureResult> {
|
|
183
|
+
// Tax law: 7-year retention — pseudonymize, do not delete
|
|
184
|
+
const count = await db.query(
|
|
185
|
+
`UPDATE financial_records SET user_id = $1, email = NULL, name = NULL
|
|
186
|
+
WHERE user_id = $2`,
|
|
187
|
+
[this.pseudonymize(userId), userId]
|
|
188
|
+
);
|
|
189
|
+
return {
|
|
190
|
+
service: 'financial-records', status: 'anonymized',
|
|
191
|
+
recordCount: count.rowCount,
|
|
192
|
+
legalBasis: 'Tax retention obligation (7 years) — Art. 17(3)(b)',
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
private async notifyProcessor(
|
|
197
|
+
processor: DataProcessor, userId: string, requestId: string
|
|
198
|
+
): Promise<void> {
|
|
199
|
+
const response = await fetch(processor.endpoint, {
|
|
200
|
+
method: 'POST',
|
|
201
|
+
headers: { 'Content-Type': 'application/json', 'X-Request-Id': requestId },
|
|
202
|
+
body: JSON.stringify({ userId, action: 'erasure', requestId }),
|
|
203
|
+
});
|
|
204
|
+
if (!response.ok) {
|
|
205
|
+
throw new Error(`Processor ${processor.name} returned ${response.status}`);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
---
|
|
212
|
+
|
|
213
|
+
## 5. Breach Response Protocol
|
|
214
|
+
|
|
215
|
+
### Four-Phase Timeline
|
|
216
|
+
|
|
217
|
+
```
|
|
218
|
+
Phase 1: DETECTION (Hour 0)
|
|
219
|
+
|-- Automated monitoring triggers (SIEM, anomaly detection, IDS/IPS)
|
|
220
|
+
|-- Security team acknowledges; begins containment
|
|
221
|
+
|-- Preserve forensic evidence (do NOT reboot or wipe affected systems)
|
|
222
|
+
|
|
|
223
|
+
Phase 2: ASSESSMENT (Hours 0-24)
|
|
224
|
+
|-- Determine: What data? How many subjects? What categories?
|
|
225
|
+
|-- Severity classification (see matrix below)
|
|
226
|
+
|-- Legal review: which frameworks apply?
|
|
227
|
+
|
|
|
228
|
+
Phase 3: NOTIFICATION (Hours 24-72)
|
|
229
|
+
|-- GDPR: 72 hours to supervisory authority (Art. 33)
|
|
230
|
+
|-- HIPAA: 60 days to individuals; HHS for 500+ (45 CFR 164.408)
|
|
231
|
+
|-- CCPA: "Without unreasonable delay" to affected consumers
|
|
232
|
+
|-- PCI-DSS: Immediate to acquirer/payment brand
|
|
233
|
+
|-- Notify data subjects if high risk (GDPR Art. 34)
|
|
234
|
+
|
|
|
235
|
+
Phase 4: DOCUMENTATION (Post-incident)
|
|
236
|
+
|-- Root cause analysis + remediation plan
|
|
237
|
+
|-- Evidence preservation chain of custody
|
|
238
|
+
|-- Update incident register (GDPR Art. 33(5))
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
### Severity Matrix
|
|
242
|
+
|
|
243
|
+
| Factor | Low (1) | Medium (2) | High (3) | Critical (4) |
|
|
244
|
+
|--------|---------|------------|----------|---------------|
|
|
245
|
+
| Data type | Public | Internal/PII | Sensitive PII/PHI | Financial/credentials |
|
|
246
|
+
| Volume | < 100 records | 100-10K | 10K-1M | > 1M records |
|
|
247
|
+
| Encryption | Encrypted | Partially encrypted | Unencrypted | Unencrypted + exfiltrated |
|
|
248
|
+
| Impact | Minimal | Limited | Significant harm likely | Widespread harm certain |
|
|
249
|
+
|
|
250
|
+
**Score = sum. Thresholds:** 4-6 internal only; 7-10 authority notification;
|
|
251
|
+
11-14 authority + individual; 15-16 full crisis response.
|
|
252
|
+
|
|
253
|
+
### Notification Template (GDPR Art. 33)
|
|
254
|
+
|
|
255
|
+
```yaml
|
|
256
|
+
breach_notification:
|
|
257
|
+
controller:
|
|
258
|
+
name: "{{company_name}}"
|
|
259
|
+
dpo_contact: "{{dpo_email}}"
|
|
260
|
+
breach_details:
|
|
261
|
+
date_detected: "{{timestamp}}"
|
|
262
|
+
nature: "{{unauthorized access / exfiltration / ransomware}}"
|
|
263
|
+
categories_affected: ["Names and emails", "{{additional}}"]
|
|
264
|
+
approximate_subjects: "{{count}}"
|
|
265
|
+
consequences:
|
|
266
|
+
likely_impact: "{{identity theft / financial loss / reputational harm}}"
|
|
267
|
+
measures_taken:
|
|
268
|
+
containment: "{{actions taken}}"
|
|
269
|
+
remediation: "{{actions to prevent recurrence}}"
|
|
270
|
+
subject_notification: "{{planned / completed / not required}}"
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
---
|
|
274
|
+
|
|
275
|
+
## 6. Privacy by Design — Cavoukian's 7 Foundational Principles
|
|
276
|
+
|
|
277
|
+
| # | Principle | Implementation |
|
|
278
|
+
|---|-----------|---------------|
|
|
279
|
+
| 1 | Proactive not reactive | Threat modeling during design; DPIA before high-risk processing |
|
|
280
|
+
| 2 | Privacy as the default | Opt-in for collection; strictest settings out of the box |
|
|
281
|
+
| 3 | Privacy embedded into design | Data classification in schema; encryption by default |
|
|
282
|
+
| 4 | Full functionality | Privacy and features coexist; no false trade-offs |
|
|
283
|
+
| 5 | End-to-end security | Encryption at rest + in transit; secure deletion |
|
|
284
|
+
| 6 | Visibility and transparency | Audit trails; clear privacy notices |
|
|
285
|
+
| 7 | Respect for user privacy | User-centric controls; easy rights exercise; no dark patterns |
|
|
286
|
+
|
|
287
|
+
### Data Minimization
|
|
288
|
+
|
|
289
|
+
```typescript
|
|
290
|
+
// WRONG: Collecting everything "just in case"
|
|
291
|
+
interface UserRegistration {
|
|
292
|
+
email: string; password: string; fullName: string;
|
|
293
|
+
dateOfBirth: string; gender: string; ssn: string; // Never needed for registration
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
// CORRECT: Only what the purpose requires
|
|
297
|
+
interface UserRegistration {
|
|
298
|
+
email: string; password: string; displayName: string;
|
|
299
|
+
}
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
### Purpose Limitation — Scoped Database Views
|
|
303
|
+
|
|
304
|
+
```sql
|
|
305
|
+
CREATE TABLE users (
|
|
306
|
+
id UUID PRIMARY KEY, email TEXT NOT NULL,
|
|
307
|
+
display_name TEXT NOT NULL, date_of_birth DATE,
|
|
308
|
+
shipping_address JSONB, created_at TIMESTAMPTZ DEFAULT NOW()
|
|
309
|
+
);
|
|
310
|
+
|
|
311
|
+
-- Each service sees only what it needs
|
|
312
|
+
CREATE VIEW users_authentication AS SELECT id, email FROM users;
|
|
313
|
+
CREATE VIEW users_shipping AS SELECT id, display_name, shipping_address FROM users;
|
|
314
|
+
CREATE VIEW users_analytics AS
|
|
315
|
+
SELECT id, date_trunc('year', date_of_birth) AS birth_year,
|
|
316
|
+
date_trunc('month', created_at) AS signup_month FROM users;
|
|
317
|
+
-- GRANT SELECT ON users_authentication TO auth_service;
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
### Storage Limitation — Retention Cron Job
|
|
321
|
+
|
|
322
|
+
```typescript
|
|
323
|
+
const policies: RetentionPolicy[] = [
|
|
324
|
+
{ tableName: 'sessions', retentionDays: 90, action: 'delete',
|
|
325
|
+
legalBasis: 'No longer necessary (Art. 5(1)(e))' },
|
|
326
|
+
{ tableName: 'events', retentionDays: 365, action: 'anonymize',
|
|
327
|
+
legalBasis: 'Legitimate interest expires after 1 year' },
|
|
328
|
+
{ tableName: 'users', retentionDays: 730, action: 'delete',
|
|
329
|
+
legalBasis: 'Storage limitation — 2 years inactive' },
|
|
330
|
+
{ tableName: 'transactions', retentionDays: 2555, action: 'archive',
|
|
331
|
+
legalBasis: 'Tax law — 7 years (Art. 17(3)(b))' },
|
|
332
|
+
];
|
|
333
|
+
|
|
334
|
+
// Runs daily via cron
|
|
335
|
+
async function enforceRetention(policies: RetentionPolicy[]): Promise<void> {
|
|
336
|
+
for (const p of policies) {
|
|
337
|
+
const cutoff = new Date();
|
|
338
|
+
cutoff.setDate(cutoff.getDate() - p.retentionDays);
|
|
339
|
+
switch (p.action) {
|
|
340
|
+
case 'delete':
|
|
341
|
+
await db.query(`DELETE FROM ${p.tableName} WHERE updated_at < $1`, [cutoff]);
|
|
342
|
+
break;
|
|
343
|
+
case 'anonymize':
|
|
344
|
+
await db.query(
|
|
345
|
+
`UPDATE ${p.tableName} SET user_id = encode(digest(user_id::text,'sha256'),'hex'),
|
|
346
|
+
ip_address = NULL, email = NULL WHERE created_at < $1 AND is_anonymized = false`, [cutoff]);
|
|
347
|
+
break;
|
|
348
|
+
case 'archive':
|
|
349
|
+
await db.query(`INSERT INTO ${p.tableName}_archive SELECT * FROM ${p.tableName} WHERE created_at < $1`, [cutoff]);
|
|
350
|
+
await db.query(`DELETE FROM ${p.tableName} WHERE created_at < $1`, [cutoff]);
|
|
351
|
+
break;
|
|
352
|
+
}
|
|
353
|
+
await auditLog.record({ action: 'retention_enforcement', tableName: p.tableName });
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
---
|
|
359
|
+
|
|
360
|
+
## 7. Consent Management
|
|
361
|
+
|
|
362
|
+
### Granular Consent Model
|
|
363
|
+
|
|
364
|
+
```typescript
|
|
365
|
+
interface ConsentRecord {
|
|
366
|
+
userId: string;
|
|
367
|
+
purpose: 'marketing' | 'analytics' | 'personalization' | 'essential';
|
|
368
|
+
granted: boolean;
|
|
369
|
+
timestamp: string;
|
|
370
|
+
source: 'banner' | 'settings' | 'signup';
|
|
371
|
+
version: string; // Policy version consented to
|
|
372
|
+
expiresAt: string;
|
|
373
|
+
withdrawnAt?: string;
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
class ConsentService {
|
|
377
|
+
async grantConsent(
|
|
378
|
+
userId: string, purpose: string, source: string, policyVersion: string
|
|
379
|
+
): Promise<ConsentRecord> {
|
|
380
|
+
const record: ConsentRecord = {
|
|
381
|
+
userId, purpose: purpose as ConsentRecord['purpose'], granted: true,
|
|
382
|
+
timestamp: new Date().toISOString(), source: source as ConsentRecord['source'],
|
|
383
|
+
version: policyVersion, expiresAt: this.calculateExpiry(purpose),
|
|
384
|
+
};
|
|
385
|
+
await this.store.save(record);
|
|
386
|
+
await this.auditLog.record({
|
|
387
|
+
actor: userId, action: 'consent_change', resource: `consent:${purpose}`,
|
|
388
|
+
dataSubjectId: userId, justification: `Granted via ${source} for v${policyVersion}`,
|
|
389
|
+
});
|
|
390
|
+
return record;
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
async withdrawConsent(userId: string, purpose: string): Promise<void> {
|
|
394
|
+
// Art. 7(3): Withdrawal must be as easy as granting
|
|
395
|
+
const existing = await this.store.findActive(userId, purpose);
|
|
396
|
+
if (!existing) return;
|
|
397
|
+
existing.granted = false;
|
|
398
|
+
existing.withdrawnAt = new Date().toISOString();
|
|
399
|
+
await this.store.save(existing);
|
|
400
|
+
await this.processingEngine.stopForPurpose(userId, purpose);
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
async isConsentValid(userId: string, purpose: string): Promise<boolean> {
|
|
404
|
+
const c = await this.store.findActive(userId, purpose);
|
|
405
|
+
if (!c || !c.granted) return false;
|
|
406
|
+
return new Date(c.expiresAt) >= new Date()
|
|
407
|
+
&& c.version === await this.getCurrentPolicyVersion();
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
```
|
|
411
|
+
|
|
412
|
+
### Consent Banner UX (No Dark Patterns)
|
|
413
|
+
|
|
414
|
+
Google fined EUR 150M by CNIL, Meta EUR 60M, for manipulative consent interfaces.
|
|
415
|
+
|
|
416
|
+
**Mandatory rules:**
|
|
417
|
+
- Accept and Reject buttons: **equal visual prominence** (same size, color, weight).
|
|
418
|
+
- Same click count for opt-in and opt-out (no "manage preferences" detour for rejection).
|
|
419
|
+
- No pre-checked boxes (GDPR Recital 32: silence does not constitute consent).
|
|
420
|
+
- Granular per-purpose choices (necessary, analytics, marketing, personalization).
|
|
421
|
+
- No cookie walls blocking access without consent (EDPB Guidelines 05/2020).
|
|
422
|
+
- Withdrawal accessible from every page (persistent footer link).
|
|
423
|
+
|
|
424
|
+
```html
|
|
425
|
+
<!-- WRONG: Dark pattern -->
|
|
426
|
+
<button class="btn-primary btn-large">Accept All</button>
|
|
427
|
+
<a href="/settings" class="text-small text-muted">Manage</a>
|
|
428
|
+
|
|
429
|
+
<!-- CORRECT: Equal prominence -->
|
|
430
|
+
<div class="consent-actions" role="dialog" aria-label="Cookie consent">
|
|
431
|
+
<button class="btn-secondary" onclick="rejectAll()">Reject All</button>
|
|
432
|
+
<button class="btn-secondary" onclick="showPreferences()">Preferences</button>
|
|
433
|
+
<button class="btn-secondary" onclick="acceptAll()">Accept All</button>
|
|
434
|
+
</div>
|
|
435
|
+
```
|
|
436
|
+
|
|
437
|
+
---
|
|
438
|
+
|
|
439
|
+
## 8. Cross-Jurisdictional Compliance Matrix
|
|
440
|
+
|
|
441
|
+
| Requirement | EU (GDPR) | US Federal | US (CA/CPRA) | UK (UK GDPR) | Canada (PIPEDA) | Brazil (LGPD) | Singapore (PDPA) |
|
|
442
|
+
|-------------|-----------|------------|--------------|--------------|-----------------|---------------|-------------------|
|
|
443
|
+
| DPO required | Yes (Art. 37) | No | No | Yes | No (recommended) | Yes (all) | Yes |
|
|
444
|
+
| Transfer mechanisms | SCCs, BCRs, adequacy, DPF | No restriction | No restriction | UK IDTA, UK SCCs | Consent/contractual | SCCs, BCRs, consent | Consent, comparable standard |
|
|
445
|
+
| Children's age | 16 (states may lower to 13) | 13 (COPPA) | 16 | 13 | Meaningful capacity | 12 (parental consent) | Not specified |
|
|
446
|
+
| Breach window | 72h (authority) | Varies (HIPAA: 60d) | "Without unreasonable delay" | 72h (ICO) | "As soon as feasible" | "Reasonable time" | "As soon as practicable" |
|
|
447
|
+
| Private right of action | Yes (Art. 82) | Sector-specific | Yes (breaches) | Yes | Yes | Yes | No |
|
|
448
|
+
| Consent standard | Opt-in | Varies (opt-out common) | Opt-out sale; opt-in sensitive | Opt-in | Implied or express | Express for sensitive | Deemed consent possible |
|
|
449
|
+
| Maximum penalty | EUR 20M / 4% revenue | Varies (no FTC cap) | USD 7,500/violation | GBP 17.5M / 4% revenue | CAD 100K / CAD 25M proposed | 2% revenue, max BRL 50M | SGD 1M / 10% revenue |
|
|
450
|
+
|
|
451
|
+
---
|
|
452
|
+
|
|
453
|
+
## 9. Audit Trail Implementation
|
|
454
|
+
|
|
455
|
+
### Immutable Audit Log
|
|
456
|
+
|
|
457
|
+
Hash chaining provides tamper-evident integrity without requiring a blockchain.
|
|
458
|
+
|
|
459
|
+
```typescript
|
|
460
|
+
interface AuditEntry {
|
|
461
|
+
id: string;
|
|
462
|
+
timestamp: string;
|
|
463
|
+
actor: string;
|
|
464
|
+
action: 'access' | 'modify' | 'delete' | 'export' | 'consent_change';
|
|
465
|
+
resource: string;
|
|
466
|
+
dataSubjectId: string;
|
|
467
|
+
justification: string;
|
|
468
|
+
previousHash: string; // SHA-256 of previous entry — chain integrity
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
class ImmutableAuditLog {
|
|
472
|
+
private lastHash = 'GENESIS';
|
|
473
|
+
|
|
474
|
+
async append(entry: Omit<AuditEntry, 'id' | 'previousHash'>): Promise<AuditEntry> {
|
|
475
|
+
const full: AuditEntry = { ...entry, id: crypto.randomUUID(), previousHash: this.lastHash };
|
|
476
|
+
const hash = await this.computeHash(full);
|
|
477
|
+
this.lastHash = hash;
|
|
478
|
+
await this.store.insert({ ...full, entryHash: hash });
|
|
479
|
+
return full;
|
|
480
|
+
}
|
|
481
|
+
|
|
482
|
+
async verifyChainIntegrity(): Promise<{ valid: boolean; brokenAt?: string }> {
|
|
483
|
+
const entries = await this.store.getAllOrdered();
|
|
484
|
+
let expected = 'GENESIS';
|
|
485
|
+
for (const entry of entries) {
|
|
486
|
+
if (entry.previousHash !== expected) return { valid: false, brokenAt: entry.id };
|
|
487
|
+
expected = await this.computeHash(entry);
|
|
488
|
+
}
|
|
489
|
+
return { valid: true };
|
|
490
|
+
}
|
|
491
|
+
|
|
492
|
+
private async computeHash(entry: AuditEntry): Promise<string> {
|
|
493
|
+
const payload = JSON.stringify({
|
|
494
|
+
id: entry.id, timestamp: entry.timestamp, actor: entry.actor,
|
|
495
|
+
action: entry.action, resource: entry.resource,
|
|
496
|
+
dataSubjectId: entry.dataSubjectId, previousHash: entry.previousHash,
|
|
497
|
+
});
|
|
498
|
+
const buf = await crypto.subtle.digest('SHA-256', new TextEncoder().encode(payload));
|
|
499
|
+
return Array.from(new Uint8Array(buf)).map(b => b.toString(16).padStart(2, '0')).join('');
|
|
500
|
+
}
|
|
501
|
+
}
|
|
502
|
+
```
|
|
503
|
+
|
|
504
|
+
### Database Schema
|
|
505
|
+
|
|
506
|
+
```sql
|
|
507
|
+
CREATE TABLE audit_log (
|
|
508
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
509
|
+
timestamp TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
510
|
+
actor TEXT NOT NULL,
|
|
511
|
+
action TEXT NOT NULL CHECK (action IN ('access','modify','delete','export','consent_change')),
|
|
512
|
+
resource TEXT NOT NULL,
|
|
513
|
+
data_subject_id TEXT NOT NULL,
|
|
514
|
+
justification TEXT NOT NULL,
|
|
515
|
+
previous_hash TEXT NOT NULL,
|
|
516
|
+
entry_hash TEXT NOT NULL,
|
|
517
|
+
metadata JSONB DEFAULT '{}'
|
|
518
|
+
);
|
|
519
|
+
|
|
520
|
+
-- Append-only: REVOKE UPDATE, DELETE ON audit_log FROM app_user;
|
|
521
|
+
CREATE INDEX idx_audit_data_subject ON audit_log (data_subject_id, timestamp);
|
|
522
|
+
CREATE INDEX idx_audit_actor ON audit_log (actor, timestamp);
|
|
523
|
+
```
|
|
524
|
+
|
|
525
|
+
---
|
|
526
|
+
|
|
527
|
+
## 10. Anti-Patterns
|
|
528
|
+
|
|
529
|
+
### AP-COMP-01: Blanket Consent
|
|
530
|
+
|
|
531
|
+
**Problem:** Single checkbox: "I agree to the privacy policy and terms." Bundles all
|
|
532
|
+
purposes, violating GDPR Art. 7 specific consent requirement.
|
|
533
|
+
**Fix:** Separate consent per purpose. Essential processing uses "contract" basis, not consent.
|
|
534
|
+
|
|
535
|
+
### AP-COMP-02: Retention Without Policy
|
|
536
|
+
|
|
537
|
+
**Problem:** Data stored indefinitely. Violates GDPR Art. 5(1)(e) storage limitation.
|
|
538
|
+
**Fix:** Retention period per category with automated enforcement (see Section 6).
|
|
539
|
+
|
|
540
|
+
### AP-COMP-03: Dark Patterns in Consent Flows
|
|
541
|
+
|
|
542
|
+
**Problem:** Large "Accept All" with tiny "Manage preferences" link. Pre-checked boxes.
|
|
543
|
+
CNIL fined Google EUR 150M for this.
|
|
544
|
+
**Fix:** Equal prominence. No pre-checked boxes. Same clicks for accept and reject.
|
|
545
|
+
|
|
546
|
+
### AP-COMP-04: Security Theater
|
|
547
|
+
|
|
548
|
+
**Problem:** Compliance checkboxes without underlying controls. Privacy policy claims
|
|
549
|
+
encryption while database stores plaintext. PCI-DSS questionnaire passes while logging
|
|
550
|
+
full card numbers.
|
|
551
|
+
**Fix:** Automated testing validates stated controls. Internal audits compare docs to infra.
|
|
552
|
+
|
|
553
|
+
### AP-COMP-05: Soft-Delete Without Notification
|
|
554
|
+
|
|
555
|
+
**Problem:** Erasure request sets `is_deleted = true` without removing data. Subject
|
|
556
|
+
believes data is gone; it persists in DB, backups, and processors.
|
|
557
|
+
**Fix:** Hard delete from primary stores. Pseudonymize where legal retention applies.
|
|
558
|
+
Notify processors (Art. 17(2)). Schedule backup purge. Report retention with legal basis.
|
|
559
|
+
|
|
560
|
+
### AP-COMP-06: Cross-Border Transfer Without Adequacy
|
|
561
|
+
|
|
562
|
+
**Problem:** EU data in US-region cloud without Transfer Impact Assessment. Uber fined
|
|
563
|
+
EUR 290M.
|
|
564
|
+
**Fix:** Map all cross-border flows. Identify mechanism (DPF, SCCs, BCRs, adequacy).
|
|
565
|
+
Conduct TIA. Re-evaluate when legal landscape changes.
|
|
566
|
+
|
|
567
|
+
### AP-COMP-07: Cookie Walls
|
|
568
|
+
|
|
569
|
+
**Problem:** Blocking site access without consent. EDPB Guidelines 05/2020: cookie walls
|
|
570
|
+
do not meet "freely given" (GDPR Art. 7).
|
|
571
|
+
**Fix:** Core functionality accessible regardless of consent. Disable non-essential
|
|
572
|
+
features only.
|
|
573
|
+
|
|
574
|
+
### AP-COMP-08: Privacy Policy Copy-Paste
|
|
575
|
+
|
|
576
|
+
**Problem:** Generic template not reflecting actual practices. Lists uncollected categories,
|
|
577
|
+
omits real ones, references unused processors.
|
|
578
|
+
**Fix:** Policy mirrors ROPA. Updated with every processing change. Automated diff detects drift.
|
|
579
|
+
|
|
580
|
+
### AP-COMP-09: Consent Version Drift
|
|
581
|
+
|
|
582
|
+
**Problem:** Policy updated but existing consent references old version. Processing
|
|
583
|
+
continues under outdated consent.
|
|
584
|
+
**Fix:** Version-stamp consent records. Re-consent when policy version changes.
|
|
585
|
+
|
|
586
|
+
### AP-COMP-10: Orphaned Processor Agreements
|
|
587
|
+
|
|
588
|
+
**Problem:** DPAs with decommissioned processors; new processors operating without DPA.
|
|
589
|
+
Art. 28 requires DPA with every processor.
|
|
590
|
+
**Fix:** Processor register linked to ROPA. Quarterly review. DPA before any data sharing.
|
|
591
|
+
|
|
592
|
+
---
|
|
593
|
+
|
|
594
|
+
## References
|
|
595
|
+
|
|
596
|
+
- GDPR: https://gdpr-info.eu/ | EDPB Guidelines: https://www.edpb.europa.eu/our-work-tools/general-guidance
|
|
597
|
+
- CCPA/CPRA: https://oag.ca.gov/privacy/ccpa | HIPAA: https://www.hhs.gov/hipaa/
|
|
598
|
+
- PCI-DSS 4.0: https://www.pcisecuritystandards.org/document_library/
|
|
599
|
+
- Enforcement Tracker: https://www.enforcementtracker.com/ | IBM Breach Report: https://www.ibm.com/reports/data-breach
|
|
600
|
+
- Cavoukian, A. "Privacy by Design: The 7 Foundational Principles"
|
|
601
|
+
- LGPD: https://www.gov.br/cidadania/pt-br/acesso-a-informacao/lgpd | PIPEDA: https://www.priv.gc.ca/ | PDPA: https://www.pdpc.gov.sg/
|