@ruaruababa/vibe-kit 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/CATALOG.md +317 -0
- package/README.md +121 -0
- package/aliases.json +65 -0
- package/bin/vibe.js +2 -0
- package/bundles.json +265 -0
- package/catalog.json +1560 -0
- package/dist/antigravity-skills/bin/cli.js +438 -0
- package/dist/antigravity-skills/lib/skill-utils.js +158 -0
- package/dist/antigravity-skills/scripts/build-catalog.js +305 -0
- package/dist/antigravity-skills/scripts/normalize-frontmatter.js +144 -0
- package/dist/antigravity-skills/scripts/validate-skills.js +230 -0
- package/dist/bin/vibe.js +2 -0
- package/dist/dist/src/cli/index.js +26 -0
- package/dist/lib/skill-utils.js +158 -0
- package/dist/scripts/build-catalog.js +50 -0
- package/dist/scripts/normalize-frontmatter.js +144 -0
- package/dist/scripts/validate-skills.js +56 -0
- package/dist/src/cli/index.js +146 -0
- package/dist/src/types/index.js +13 -0
- package/dist/src/utils/fs.js +1 -0
- package/package.json +43 -0
- package/skills/accessibility-compliance-accessibility-audit/SKILL.md +42 -0
- package/skills/accessibility-compliance-accessibility-audit/resources/implementation-playbook.md +502 -0
- package/skills/agent-orchestration-improve-agent/SKILL.md +349 -0
- package/skills/agent-orchestration-multi-agent-optimize/SKILL.md +239 -0
- package/skills/agent-orchestrator/SKILL.md +24 -0
- package/skills/ai-engineer/SKILL.md +171 -0
- package/skills/airflow-dag-patterns/SKILL.md +41 -0
- package/skills/airflow-dag-patterns/resources/implementation-playbook.md +509 -0
- package/skills/angular-migration/SKILL.md +428 -0
- package/skills/anti-reversing-techniques/SKILL.md +42 -0
- package/skills/anti-reversing-techniques/resources/implementation-playbook.md +539 -0
- package/skills/api-design-principles/SKILL.md +37 -0
- package/skills/api-design-principles/assets/api-design-checklist.md +155 -0
- package/skills/api-design-principles/assets/rest-api-template.py +182 -0
- package/skills/api-design-principles/references/graphql-schema-design.md +583 -0
- package/skills/api-design-principles/references/rest-best-practices.md +408 -0
- package/skills/api-design-principles/resources/implementation-playbook.md +513 -0
- package/skills/api-documenter/SKILL.md +184 -0
- package/skills/api-testing-observability-api-mock/SKILL.md +46 -0
- package/skills/api-testing-observability-api-mock/resources/implementation-playbook.md +1327 -0
- package/skills/application-performance-performance-optimization/SKILL.md +154 -0
- package/skills/architect-review/SKILL.md +174 -0
- package/skills/architecture-decision-records/SKILL.md +441 -0
- package/skills/architecture-patterns/SKILL.md +37 -0
- package/skills/architecture-patterns/resources/implementation-playbook.md +479 -0
- package/skills/arm-cortex-expert/SKILL.md +306 -0
- package/skills/async-python-patterns/SKILL.md +39 -0
- package/skills/async-python-patterns/resources/implementation-playbook.md +678 -0
- package/skills/attack-tree-construction/SKILL.md +38 -0
- package/skills/attack-tree-construction/resources/implementation-playbook.md +671 -0
- package/skills/auth-implementation-patterns/SKILL.md +39 -0
- package/skills/auth-implementation-patterns/resources/implementation-playbook.md +618 -0
- package/skills/backend-architect/SKILL.md +333 -0
- package/skills/backend-development-feature-development/SKILL.md +180 -0
- package/skills/backend-security-coder/SKILL.md +156 -0
- package/skills/backtesting-frameworks/SKILL.md +39 -0
- package/skills/backtesting-frameworks/resources/implementation-playbook.md +647 -0
- package/skills/bash-defensive-patterns/SKILL.md +43 -0
- package/skills/bash-defensive-patterns/resources/implementation-playbook.md +517 -0
- package/skills/bash-pro/SKILL.md +310 -0
- package/skills/bats-testing-patterns/SKILL.md +34 -0
- package/skills/bats-testing-patterns/resources/implementation-playbook.md +614 -0
- package/skills/bazel-build-optimization/SKILL.md +397 -0
- package/skills/billing-automation/SKILL.md +42 -0
- package/skills/billing-automation/resources/implementation-playbook.md +544 -0
- package/skills/binary-analysis-patterns/SKILL.md +450 -0
- package/skills/blockchain-developer/SKILL.md +208 -0
- package/skills/business-analyst/SKILL.md +182 -0
- package/skills/c-pro/SKILL.md +56 -0
- package/skills/c4-architecture-c4-architecture/SKILL.md +389 -0
- package/skills/c4-code/SKILL.md +244 -0
- package/skills/c4-component/SKILL.md +153 -0
- package/skills/c4-container/SKILL.md +171 -0
- package/skills/c4-context/SKILL.md +150 -0
- package/skills/changelog-automation/SKILL.md +38 -0
- package/skills/changelog-automation/resources/implementation-playbook.md +538 -0
- package/skills/cicd-automation-workflow-automate/SKILL.md +51 -0
- package/skills/cicd-automation-workflow-automate/resources/implementation-playbook.md +1333 -0
- package/skills/clean-markdown/SKILL.md +23 -0
- package/skills/cloud-architect/SKILL.md +135 -0
- package/skills/code-documentation-code-explain/SKILL.md +46 -0
- package/skills/code-documentation-code-explain/resources/implementation-playbook.md +802 -0
- package/skills/code-documentation-doc-generate/SKILL.md +48 -0
- package/skills/code-documentation-doc-generate/resources/implementation-playbook.md +640 -0
- package/skills/code-refactoring-context-restore/SKILL.md +179 -0
- package/skills/code-refactoring-refactor-clean/SKILL.md +51 -0
- package/skills/code-refactoring-refactor-clean/resources/implementation-playbook.md +879 -0
- package/skills/code-refactoring-tech-debt/SKILL.md +386 -0
- package/skills/code-review-ai-ai-review/SKILL.md +450 -0
- package/skills/code-review-excellence/SKILL.md +40 -0
- package/skills/code-review-excellence/resources/implementation-playbook.md +515 -0
- package/skills/code-reviewer/SKILL.md +178 -0
- package/skills/codebase-cleanup-deps-audit/SKILL.md +51 -0
- package/skills/codebase-cleanup-deps-audit/resources/implementation-playbook.md +766 -0
- package/skills/codebase-cleanup-refactor-clean/SKILL.md +51 -0
- package/skills/codebase-cleanup-refactor-clean/resources/implementation-playbook.md +879 -0
- package/skills/codebase-cleanup-tech-debt/SKILL.md +386 -0
- package/skills/competitive-landscape/SKILL.md +34 -0
- package/skills/competitive-landscape/resources/implementation-playbook.md +494 -0
- package/skills/comprehensive-review-full-review/SKILL.md +146 -0
- package/skills/comprehensive-review-pr-enhance/SKILL.md +46 -0
- package/skills/comprehensive-review-pr-enhance/resources/implementation-playbook.md +691 -0
- package/skills/conductor-implement/SKILL.md +388 -0
- package/skills/conductor-manage/SKILL.md +39 -0
- package/skills/conductor-manage/resources/implementation-playbook.md +1120 -0
- package/skills/conductor-new-track/SKILL.md +433 -0
- package/skills/conductor-revert/SKILL.md +372 -0
- package/skills/conductor-setup/SKILL.md +426 -0
- package/skills/conductor-status/SKILL.md +338 -0
- package/skills/conductor-validator/SKILL.md +62 -0
- package/skills/content-marketer/SKILL.md +170 -0
- package/skills/context-driven-development/SKILL.md +400 -0
- package/skills/context-management-context-restore/SKILL.md +179 -0
- package/skills/context-management-context-save/SKILL.md +177 -0
- package/skills/context-manager/SKILL.md +185 -0
- package/skills/cost-optimization/SKILL.md +286 -0
- package/skills/cpp-pro/SKILL.md +59 -0
- package/skills/cqrs-implementation/SKILL.md +35 -0
- package/skills/cqrs-implementation/resources/implementation-playbook.md +540 -0
- package/skills/csharp-pro/SKILL.md +59 -0
- package/skills/customer-support/SKILL.md +170 -0
- package/skills/data-engineer/SKILL.md +224 -0
- package/skills/data-engineering-data-driven-feature/SKILL.md +182 -0
- package/skills/data-engineering-data-pipeline/SKILL.md +201 -0
- package/skills/data-quality-frameworks/SKILL.md +40 -0
- package/skills/data-quality-frameworks/resources/implementation-playbook.md +573 -0
- package/skills/data-scientist/SKILL.md +199 -0
- package/skills/data-storytelling/SKILL.md +465 -0
- package/skills/database-admin/SKILL.md +165 -0
- package/skills/database-architect/SKILL.md +268 -0
- package/skills/database-cloud-optimization-cost-optimize/SKILL.md +44 -0
- package/skills/database-cloud-optimization-cost-optimize/resources/implementation-playbook.md +1441 -0
- package/skills/database-migration/SKILL.md +436 -0
- package/skills/database-migrations-migration-observability/SKILL.md +420 -0
- package/skills/database-migrations-sql-migrations/SKILL.md +53 -0
- package/skills/database-migrations-sql-migrations/resources/implementation-playbook.md +499 -0
- package/skills/database-optimizer/SKILL.md +167 -0
- package/skills/dbt-transformation-patterns/SKILL.md +34 -0
- package/skills/dbt-transformation-patterns/resources/implementation-playbook.md +547 -0
- package/skills/debugger/SKILL.md +49 -0
- package/skills/debugging-strategies/SKILL.md +34 -0
- package/skills/debugging-strategies/resources/implementation-playbook.md +511 -0
- package/skills/debugging-toolkit-smart-debug/SKILL.md +197 -0
- package/skills/defi-protocol-templates/SKILL.md +466 -0
- package/skills/dependency-management-deps-audit/SKILL.md +44 -0
- package/skills/dependency-management-deps-audit/resources/implementation-playbook.md +766 -0
- package/skills/dependency-upgrade/SKILL.md +421 -0
- package/skills/deployment-engineer/SKILL.md +170 -0
- package/skills/deployment-pipeline-design/SKILL.md +371 -0
- package/skills/deployment-validation-config-validate/SKILL.md +496 -0
- package/skills/devops-troubleshooter/SKILL.md +161 -0
- package/skills/distributed-debugging-debug-trace/SKILL.md +44 -0
- package/skills/distributed-debugging-debug-trace/resources/implementation-playbook.md +1307 -0
- package/skills/distributed-tracing/SKILL.md +450 -0
- package/skills/django-pro/SKILL.md +180 -0
- package/skills/docs-architect/SKILL.md +98 -0
- package/skills/documentation-generation-doc-generate/SKILL.md +48 -0
- package/skills/documentation-generation-doc-generate/resources/implementation-playbook.md +640 -0
- package/skills/dotnet-architect/SKILL.md +197 -0
- package/skills/dotnet-backend-patterns/SKILL.md +37 -0
- package/skills/dotnet-backend-patterns/assets/repository-template.cs +523 -0
- package/skills/dotnet-backend-patterns/assets/service-template.cs +336 -0
- package/skills/dotnet-backend-patterns/references/dapper-patterns.md +544 -0
- package/skills/dotnet-backend-patterns/references/ef-core-best-practices.md +355 -0
- package/skills/dotnet-backend-patterns/resources/implementation-playbook.md +799 -0
- package/skills/dummy-skill/SKILL.md +5 -0
- package/skills/dx-optimizer/SKILL.md +83 -0
- package/skills/e2e-testing-patterns/SKILL.md +41 -0
- package/skills/e2e-testing-patterns/resources/implementation-playbook.md +531 -0
- package/skills/elixir-pro/SKILL.md +59 -0
- package/skills/embedding-strategies/SKILL.md +491 -0
- package/skills/employment-contract-templates/SKILL.md +39 -0
- package/skills/employment-contract-templates/resources/implementation-playbook.md +493 -0
- package/skills/error-debugging-error-analysis/SKILL.md +47 -0
- package/skills/error-debugging-error-analysis/resources/implementation-playbook.md +1143 -0
- package/skills/error-debugging-error-trace/SKILL.md +43 -0
- package/skills/error-debugging-error-trace/resources/implementation-playbook.md +1361 -0
- package/skills/error-debugging-multi-agent-review/SKILL.md +216 -0
- package/skills/error-detective/SKILL.md +53 -0
- package/skills/error-diagnostics-error-analysis/SKILL.md +47 -0
- package/skills/error-diagnostics-error-analysis/resources/implementation-playbook.md +1143 -0
- package/skills/error-diagnostics-error-trace/SKILL.md +48 -0
- package/skills/error-diagnostics-error-trace/resources/implementation-playbook.md +1371 -0
- package/skills/error-diagnostics-smart-debug/SKILL.md +197 -0
- package/skills/error-handling-patterns/SKILL.md +35 -0
- package/skills/error-handling-patterns/resources/implementation-playbook.md +635 -0
- package/skills/event-sourcing-architect/SKILL.md +58 -0
- package/skills/event-store-design/SKILL.md +449 -0
- package/skills/fastapi-pro/SKILL.md +192 -0
- package/skills/fastapi-templates/SKILL.md +32 -0
- package/skills/fastapi-templates/resources/implementation-playbook.md +566 -0
- package/skills/final-test/SKILL.md +5 -0
- package/skills/firmware-analyst/SKILL.md +320 -0
- package/skills/flutter-expert/SKILL.md +200 -0
- package/skills/framework-migration-code-migrate/SKILL.md +48 -0
- package/skills/framework-migration-code-migrate/resources/implementation-playbook.md +1052 -0
- package/skills/framework-migration-deps-upgrade/SKILL.md +48 -0
- package/skills/framework-migration-deps-upgrade/resources/implementation-playbook.md +755 -0
- package/skills/framework-migration-legacy-modernize/SKILL.md +132 -0
- package/skills/frontend-developer/SKILL.md +171 -0
- package/skills/frontend-mobile-development-component-scaffold/SKILL.md +403 -0
- package/skills/frontend-mobile-security-xss-scan/SKILL.md +322 -0
- package/skills/frontend-security-coder/SKILL.md +170 -0
- package/skills/full-stack-orchestration-full-stack-feature/SKILL.md +135 -0
- package/skills/gdpr-data-handling/SKILL.md +33 -0
- package/skills/gdpr-data-handling/resources/implementation-playbook.md +615 -0
- package/skills/git-advanced-workflows/SKILL.md +412 -0
- package/skills/git-pr-workflows-git-workflow/SKILL.md +140 -0
- package/skills/git-pr-workflows-onboard/SKILL.md +416 -0
- package/skills/git-pr-workflows-pr-enhance/SKILL.md +48 -0
- package/skills/git-pr-workflows-pr-enhance/resources/implementation-playbook.md +701 -0
- package/skills/github-actions-templates/SKILL.md +345 -0
- package/skills/gitlab-ci-patterns/SKILL.md +283 -0
- package/skills/gitops-workflow/SKILL.md +303 -0
- package/skills/gitops-workflow/references/argocd-setup.md +134 -0
- package/skills/gitops-workflow/references/sync-policies.md +131 -0
- package/skills/go-concurrency-patterns/SKILL.md +33 -0
- package/skills/go-concurrency-patterns/resources/implementation-playbook.md +654 -0
- package/skills/godot-gdscript-patterns/SKILL.md +33 -0
- package/skills/godot-gdscript-patterns/resources/implementation-playbook.md +804 -0
- package/skills/golang-pro/SKILL.md +179 -0
- package/skills/grafana-dashboards/SKILL.md +381 -0
- package/skills/graphql-architect/SKILL.md +182 -0
- package/skills/haskell-pro/SKILL.md +56 -0
- package/skills/helm-chart-scaffolding/SKILL.md +34 -0
- package/skills/helm-chart-scaffolding/assets/Chart.yaml.template +42 -0
- package/skills/helm-chart-scaffolding/assets/values.yaml.template +185 -0
- package/skills/helm-chart-scaffolding/references/chart-structure.md +500 -0
- package/skills/helm-chart-scaffolding/resources/implementation-playbook.md +543 -0
- package/skills/helm-chart-scaffolding/scripts/validate-chart.sh +244 -0
- package/skills/hr-pro/SKILL.md +126 -0
- package/skills/hybrid-cloud-architect/SKILL.md +168 -0
- package/skills/hybrid-cloud-networking/SKILL.md +238 -0
- package/skills/hybrid-search-implementation/SKILL.md +32 -0
- package/skills/hybrid-search-implementation/resources/implementation-playbook.md +567 -0
- package/skills/incident-responder/SKILL.md +213 -0
- package/skills/incident-response-incident-response/SKILL.md +168 -0
- package/skills/incident-response-smart-fix/SKILL.md +29 -0
- package/skills/incident-response-smart-fix/resources/implementation-playbook.md +838 -0
- package/skills/incident-runbook-templates/SKILL.md +395 -0
- package/skills/ios-developer/SKILL.md +219 -0
- package/skills/istio-traffic-management/SKILL.md +337 -0
- package/skills/java-pro/SKILL.md +177 -0
- package/skills/javascript-pro/SKILL.md +57 -0
- package/skills/javascript-testing-patterns/SKILL.md +35 -0
- package/skills/javascript-testing-patterns/resources/implementation-playbook.md +1024 -0
- package/skills/javascript-typescript-typescript-scaffold/SKILL.md +361 -0
- package/skills/julia-pro/SKILL.md +209 -0
- package/skills/k8s-manifest-generator/SKILL.md +35 -0
- package/skills/k8s-manifest-generator/assets/configmap-template.yaml +296 -0
- package/skills/k8s-manifest-generator/assets/deployment-template.yaml +203 -0
- package/skills/k8s-manifest-generator/assets/service-template.yaml +171 -0
- package/skills/k8s-manifest-generator/references/deployment-spec.md +753 -0
- package/skills/k8s-manifest-generator/references/service-spec.md +724 -0
- package/skills/k8s-manifest-generator/resources/implementation-playbook.md +510 -0
- package/skills/k8s-security-policies/SKILL.md +346 -0
- package/skills/k8s-security-policies/assets/network-policy-template.yaml +177 -0
- package/skills/k8s-security-policies/references/rbac-patterns.md +187 -0
- package/skills/kpi-dashboard-design/SKILL.md +440 -0
- package/skills/kubernetes-architect/SKILL.md +170 -0
- package/skills/langchain-architecture/SKILL.md +350 -0
- package/skills/legacy-modernizer/SKILL.md +53 -0
- package/skills/legal-advisor/SKILL.md +70 -0
- package/skills/linkerd-patterns/SKILL.md +321 -0
- package/skills/llm-application-dev-ai-assistant/SKILL.md +35 -0
- package/skills/llm-application-dev-ai-assistant/resources/implementation-playbook.md +1236 -0
- package/skills/llm-application-dev-langchain-agent/SKILL.md +246 -0
- package/skills/llm-application-dev-prompt-optimize/SKILL.md +37 -0
- package/skills/llm-application-dev-prompt-optimize/resources/implementation-playbook.md +591 -0
- package/skills/llm-evaluation/SKILL.md +483 -0
- package/skills/machine-learning-ops-ml-pipeline/SKILL.md +314 -0
- package/skills/malware-analyst/SKILL.md +247 -0
- package/skills/market-sizing-analysis/SKILL.md +425 -0
- package/skills/market-sizing-analysis/examples/saas-market-sizing.md +349 -0
- package/skills/market-sizing-analysis/references/data-sources.md +360 -0
- package/skills/memory-forensics/SKILL.md +491 -0
- package/skills/memory-safety-patterns/SKILL.md +33 -0
- package/skills/memory-safety-patterns/resources/implementation-playbook.md +603 -0
- package/skills/mermaid-expert/SKILL.md +59 -0
- package/skills/microservices-patterns/SKILL.md +35 -0
- package/skills/microservices-patterns/resources/implementation-playbook.md +607 -0
- package/skills/minecraft-bukkit-pro/SKILL.md +126 -0
- package/skills/ml-engineer/SKILL.md +168 -0
- package/skills/ml-pipeline-workflow/SKILL.md +257 -0
- package/skills/mlops-engineer/SKILL.md +219 -0
- package/skills/mobile-developer/SKILL.md +205 -0
- package/skills/mobile-security-coder/SKILL.md +184 -0
- package/skills/modern-javascript-patterns/SKILL.md +35 -0
- package/skills/modern-javascript-patterns/resources/implementation-playbook.md +910 -0
- package/skills/monorepo-architect/SKILL.md +61 -0
- package/skills/monorepo-management/SKILL.md +35 -0
- package/skills/monorepo-management/resources/implementation-playbook.md +621 -0
- package/skills/mtls-configuration/SKILL.md +359 -0
- package/skills/multi-cloud-architecture/SKILL.md +189 -0
- package/skills/multi-platform-apps-multi-platform/SKILL.md +203 -0
- package/skills/network-engineer/SKILL.md +169 -0
- package/skills/nextjs-app-router-patterns/SKILL.md +33 -0
- package/skills/nextjs-app-router-patterns/resources/implementation-playbook.md +543 -0
- package/skills/nft-standards/SKILL.md +395 -0
- package/skills/node-expert/SKILL.md +23 -0
- package/skills/nodejs-backend-patterns/SKILL.md +35 -0
- package/skills/nodejs-backend-patterns/resources/implementation-playbook.md +1019 -0
- package/skills/nx-workspace-patterns/SKILL.md +464 -0
- package/skills/observability-engineer/SKILL.md +237 -0
- package/skills/observability-monitoring-monitor-setup/SKILL.md +48 -0
- package/skills/observability-monitoring-monitor-setup/resources/implementation-playbook.md +505 -0
- package/skills/observability-monitoring-slo-implement/SKILL.md +43 -0
- package/skills/observability-monitoring-slo-implement/resources/implementation-playbook.md +1077 -0
- package/skills/on-call-handoff-patterns/SKILL.md +453 -0
- package/skills/openapi-spec-generation/SKILL.md +33 -0
- package/skills/openapi-spec-generation/resources/implementation-playbook.md +1027 -0
- package/skills/payment-integration/SKILL.md +77 -0
- package/skills/paypal-integration/SKILL.md +479 -0
- package/skills/pci-compliance/SKILL.md +478 -0
- package/skills/performance-engineer/SKILL.md +180 -0
- package/skills/performance-testing-review-ai-review/SKILL.md +450 -0
- package/skills/performance-testing-review-multi-agent-review/SKILL.md +216 -0
- package/skills/php-pro/SKILL.md +63 -0
- package/skills/posix-shell-pro/SKILL.md +304 -0
- package/skills/postgresql/SKILL.md +230 -0
- package/skills/postmortem-writing/SKILL.md +386 -0
- package/skills/projection-patterns/SKILL.md +33 -0
- package/skills/projection-patterns/resources/implementation-playbook.md +501 -0
- package/skills/prometheus-configuration/SKILL.md +404 -0
- package/skills/prompt-engineer/SKILL.md +272 -0
- package/skills/prompt-engineering-patterns/SKILL.md +213 -0
- package/skills/prompt-engineering-patterns/assets/few-shot-examples.json +106 -0
- package/skills/prompt-engineering-patterns/assets/prompt-template-library.md +246 -0
- package/skills/prompt-engineering-patterns/references/chain-of-thought.md +399 -0
- package/skills/prompt-engineering-patterns/references/few-shot-learning.md +369 -0
- package/skills/prompt-engineering-patterns/references/prompt-optimization.md +414 -0
- package/skills/prompt-engineering-patterns/references/prompt-templates.md +470 -0
- package/skills/prompt-engineering-patterns/references/system-prompts.md +189 -0
- package/skills/prompt-engineering-patterns/scripts/optimize-prompt.py +279 -0
- package/skills/protocol-reverse-engineering/SKILL.md +29 -0
- package/skills/protocol-reverse-engineering/resources/implementation-playbook.md +509 -0
- package/skills/python-development-python-scaffold/SKILL.md +331 -0
- package/skills/python-packaging/SKILL.md +36 -0
- package/skills/python-packaging/resources/implementation-playbook.md +869 -0
- package/skills/python-performance-optimization/SKILL.md +36 -0
- package/skills/python-performance-optimization/resources/implementation-playbook.md +868 -0
- package/skills/python-pro/SKILL.md +158 -0
- package/skills/python-testing-patterns/SKILL.md +37 -0
- package/skills/python-testing-patterns/resources/implementation-playbook.md +906 -0
- package/skills/quant-analyst/SKILL.md +53 -0
- package/skills/rag-implementation/SKILL.md +421 -0
- package/skills/react-modernization/SKILL.md +34 -0
- package/skills/react-modernization/resources/implementation-playbook.md +512 -0
- package/skills/react-native-architecture/SKILL.md +33 -0
- package/skills/react-native-architecture/resources/implementation-playbook.md +670 -0
- package/skills/react-state-management/SKILL.md +441 -0
- package/skills/reference-builder/SKILL.md +188 -0
- package/skills/reverse-engineer/SKILL.md +173 -0
- package/skills/risk-manager/SKILL.md +61 -0
- package/skills/risk-metrics-calculation/SKILL.md +33 -0
- package/skills/risk-metrics-calculation/resources/implementation-playbook.md +554 -0
- package/skills/ruby-pro/SKILL.md +56 -0
- package/skills/rust-async-patterns/SKILL.md +33 -0
- package/skills/rust-async-patterns/resources/implementation-playbook.md +516 -0
- package/skills/rust-pro/SKILL.md +178 -0
- package/skills/saga-orchestration/SKILL.md +496 -0
- package/skills/sales-automator/SKILL.md +55 -0
- package/skills/sast-configuration/SKILL.md +212 -0
- package/skills/scala-pro/SKILL.md +82 -0
- package/skills/screen-reader-testing/SKILL.md +33 -0
- package/skills/screen-reader-testing/resources/implementation-playbook.md +544 -0
- package/skills/search-specialist/SKILL.md +80 -0
- package/skills/secrets-management/SKILL.md +364 -0
- package/skills/security-auditor/SKILL.md +169 -0
- package/skills/security-compliance-compliance-check/SKILL.md +55 -0
- package/skills/security-compliance-compliance-check/resources/implementation-playbook.md +963 -0
- package/skills/security-requirement-extraction/SKILL.md +33 -0
- package/skills/security-requirement-extraction/resources/implementation-playbook.md +676 -0
- package/skills/security-scanning-security-dependencies/SKILL.md +43 -0
- package/skills/security-scanning-security-dependencies/resources/implementation-playbook.md +544 -0
- package/skills/security-scanning-security-hardening/SKILL.md +147 -0
- package/skills/security-scanning-security-sast/SKILL.md +495 -0
- package/skills/seo-authority-builder/SKILL.md +136 -0
- package/skills/seo-cannibalization-detector/SKILL.md +123 -0
- package/skills/seo-content-auditor/SKILL.md +83 -0
- package/skills/seo-content-planner/SKILL.md +108 -0
- package/skills/seo-content-refresher/SKILL.md +118 -0
- package/skills/seo-content-writer/SKILL.md +96 -0
- package/skills/seo-keyword-strategist/SKILL.md +95 -0
- package/skills/seo-meta-optimizer/SKILL.md +92 -0
- package/skills/seo-snippet-hunter/SKILL.md +114 -0
- package/skills/seo-structure-architect/SKILL.md +108 -0
- package/skills/service-mesh-expert/SKILL.md +58 -0
- package/skills/service-mesh-observability/SKILL.md +395 -0
- package/skills/shellcheck-configuration/SKILL.md +466 -0
- package/skills/similarity-search-patterns/SKILL.md +33 -0
- package/skills/similarity-search-patterns/resources/implementation-playbook.md +557 -0
- package/skills/slo-implementation/SKILL.md +341 -0
- package/skills/solidity-security/SKILL.md +34 -0
- package/skills/solidity-security/resources/implementation-playbook.md +524 -0
- package/skills/spark-optimization/SKILL.md +427 -0
- package/skills/sql-optimization-patterns/SKILL.md +35 -0
- package/skills/sql-optimization-patterns/resources/implementation-playbook.md +504 -0
- package/skills/sql-pro/SKILL.md +173 -0
- package/skills/startup-analyst/SKILL.md +328 -0
- package/skills/startup-business-analyst-business-case/SKILL.md +487 -0
- package/skills/startup-business-analyst-financial-projections/SKILL.md +353 -0
- package/skills/startup-business-analyst-market-opportunity/SKILL.md +240 -0
- package/skills/startup-financial-modeling/SKILL.md +467 -0
- package/skills/startup-metrics-framework/SKILL.md +34 -0
- package/skills/startup-metrics-framework/resources/implementation-playbook.md +500 -0
- package/skills/stride-analysis-patterns/SKILL.md +33 -0
- package/skills/stride-analysis-patterns/resources/implementation-playbook.md +655 -0
- package/skills/stripe-integration/SKILL.md +454 -0
- package/skills/systems-programming-rust-project/SKILL.md +440 -0
- package/skills/tailwind-design-system/SKILL.md +33 -0
- package/skills/tailwind-design-system/resources/implementation-playbook.md +665 -0
- package/skills/tdd-orchestrator/SKILL.md +205 -0
- package/skills/tdd-workflows-tdd-cycle/SKILL.md +221 -0
- package/skills/tdd-workflows-tdd-green/SKILL.md +73 -0
- package/skills/tdd-workflows-tdd-green/resources/implementation-playbook.md +870 -0
- package/skills/tdd-workflows-tdd-red/SKILL.md +164 -0
- package/skills/tdd-workflows-tdd-refactor/SKILL.md +187 -0
- package/skills/team-collaboration-issue/SKILL.md +37 -0
- package/skills/team-collaboration-issue/resources/implementation-playbook.md +640 -0
- package/skills/team-collaboration-standup-notes/SKILL.md +44 -0
- package/skills/team-collaboration-standup-notes/resources/implementation-playbook.md +768 -0
- package/skills/team-composition-analysis/SKILL.md +413 -0
- package/skills/temporal-python-pro/SKILL.md +370 -0
- package/skills/temporal-python-testing/SKILL.md +170 -0
- package/skills/temporal-python-testing/resources/integration-testing.md +455 -0
- package/skills/temporal-python-testing/resources/local-setup.md +553 -0
- package/skills/temporal-python-testing/resources/replay-testing.md +462 -0
- package/skills/temporal-python-testing/resources/unit-testing.md +328 -0
- package/skills/terraform-module-library/SKILL.md +261 -0
- package/skills/terraform-module-library/references/aws-modules.md +63 -0
- package/skills/terraform-specialist/SKILL.md +166 -0
- package/skills/test-automator/SKILL.md +224 -0
- package/skills/threat-mitigation-mapping/SKILL.md +33 -0
- package/skills/threat-mitigation-mapping/resources/implementation-playbook.md +744 -0
- package/skills/threat-modeling-expert/SKILL.md +60 -0
- package/skills/track-management/SKILL.md +38 -0
- package/skills/track-management/resources/implementation-playbook.md +591 -0
- package/skills/turborepo-caching/SKILL.md +419 -0
- package/skills/tutorial-engineer/SKILL.md +139 -0
- package/skills/typescript-advanced-types/SKILL.md +35 -0
- package/skills/typescript-advanced-types/resources/implementation-playbook.md +716 -0
- package/skills/typescript-pro/SKILL.md +55 -0
- package/skills/ui-minimal/SKILL.md +23 -0
- package/skills/ui-ux-designer/SKILL.md +209 -0
- package/skills/ui-visual-validator/SKILL.md +214 -0
- package/skills/unit-testing-test-generate/SKILL.md +319 -0
- package/skills/unity-developer/SKILL.md +230 -0
- package/skills/unity-ecs-patterns/SKILL.md +33 -0
- package/skills/unity-ecs-patterns/resources/implementation-playbook.md +625 -0
- package/skills/uv-package-manager/SKILL.md +37 -0
- package/skills/uv-package-manager/resources/implementation-playbook.md +830 -0
- package/skills/vector-database-engineer/SKILL.md +60 -0
- package/skills/vector-index-tuning/SKILL.md +42 -0
- package/skills/vector-index-tuning/resources/implementation-playbook.md +507 -0
- package/skills/wcag-audit-patterns/SKILL.md +41 -0
- package/skills/wcag-audit-patterns/resources/implementation-playbook.md +541 -0
- package/skills/web3-testing/SKILL.md +427 -0
- package/skills/workflow-orchestration-patterns/SKILL.md +333 -0
- package/skills/workflow-patterns/SKILL.md +38 -0
- package/skills/workflow-patterns/resources/implementation-playbook.md +621 -0
|
@@ -0,0 +1,615 @@
|
|
|
1
|
+
# GDPR Data Handling Implementation Playbook
|
|
2
|
+
|
|
3
|
+
This file contains detailed patterns, checklists, and code samples referenced by the skill.
|
|
4
|
+
|
|
5
|
+
# GDPR Data Handling
|
|
6
|
+
|
|
7
|
+
Practical implementation guide for GDPR-compliant data processing, consent management, and privacy controls.
|
|
8
|
+
|
|
9
|
+
## When to Use This Skill
|
|
10
|
+
|
|
11
|
+
- Building systems that process EU personal data
|
|
12
|
+
- Implementing consent management
|
|
13
|
+
- Handling data subject requests (DSRs)
|
|
14
|
+
- Conducting GDPR compliance reviews
|
|
15
|
+
- Designing privacy-first architectures
|
|
16
|
+
- Creating data processing agreements
|
|
17
|
+
|
|
18
|
+
## Core Concepts
|
|
19
|
+
|
|
20
|
+
### 1. Personal Data Categories
|
|
21
|
+
|
|
22
|
+
| Category | Examples | Protection Level |
|
|
23
|
+
|----------|----------|------------------|
|
|
24
|
+
| **Basic** | Name, email, phone | Standard |
|
|
25
|
+
| **Sensitive (Art. 9)** | Health, religion, ethnicity | Explicit consent |
|
|
26
|
+
| **Criminal (Art. 10)** | Convictions, offenses | Official authority |
|
|
27
|
+
| **Children's** | Under 16 data | Parental consent |
|
|
28
|
+
|
|
29
|
+
### 2. Legal Bases for Processing
|
|
30
|
+
|
|
31
|
+
```
|
|
32
|
+
Article 6 - Lawful Bases:
|
|
33
|
+
├── Consent: Freely given, specific, informed
|
|
34
|
+
├── Contract: Necessary for contract performance
|
|
35
|
+
├── Legal Obligation: Required by law
|
|
36
|
+
├── Vital Interests: Protecting someone's life
|
|
37
|
+
├── Public Interest: Official functions
|
|
38
|
+
└── Legitimate Interest: Balanced against rights
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### 3. Data Subject Rights
|
|
42
|
+
|
|
43
|
+
```
|
|
44
|
+
Right to Access (Art. 15) ─┐
|
|
45
|
+
Right to Rectification (Art. 16) │
|
|
46
|
+
Right to Erasure (Art. 17) │ Must respond
|
|
47
|
+
Right to Restrict (Art. 18) │ within 1 month
|
|
48
|
+
Right to Portability (Art. 20) │
|
|
49
|
+
Right to Object (Art. 21) ─┘
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## Implementation Patterns
|
|
53
|
+
|
|
54
|
+
### Pattern 1: Consent Management
|
|
55
|
+
|
|
56
|
+
```javascript
|
|
57
|
+
// Consent data model
|
|
58
|
+
const consentSchema = {
|
|
59
|
+
userId: String,
|
|
60
|
+
consents: [{
|
|
61
|
+
purpose: String, // 'marketing', 'analytics', etc.
|
|
62
|
+
granted: Boolean,
|
|
63
|
+
timestamp: Date,
|
|
64
|
+
source: String, // 'web_form', 'api', etc.
|
|
65
|
+
version: String, // Privacy policy version
|
|
66
|
+
ipAddress: String, // For proof
|
|
67
|
+
userAgent: String // For proof
|
|
68
|
+
}],
|
|
69
|
+
auditLog: [{
|
|
70
|
+
action: String, // 'granted', 'withdrawn', 'updated'
|
|
71
|
+
purpose: String,
|
|
72
|
+
timestamp: Date,
|
|
73
|
+
source: String
|
|
74
|
+
}]
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
// Consent service
|
|
78
|
+
class ConsentManager {
|
|
79
|
+
async recordConsent(userId, purpose, granted, metadata) {
|
|
80
|
+
const consent = {
|
|
81
|
+
purpose,
|
|
82
|
+
granted,
|
|
83
|
+
timestamp: new Date(),
|
|
84
|
+
source: metadata.source,
|
|
85
|
+
version: await this.getCurrentPolicyVersion(),
|
|
86
|
+
ipAddress: metadata.ipAddress,
|
|
87
|
+
userAgent: metadata.userAgent
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
// Store consent
|
|
91
|
+
await this.db.consents.updateOne(
|
|
92
|
+
{ userId },
|
|
93
|
+
{
|
|
94
|
+
$push: {
|
|
95
|
+
consents: consent,
|
|
96
|
+
auditLog: {
|
|
97
|
+
action: granted ? 'granted' : 'withdrawn',
|
|
98
|
+
purpose,
|
|
99
|
+
timestamp: consent.timestamp,
|
|
100
|
+
source: metadata.source
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
},
|
|
104
|
+
{ upsert: true }
|
|
105
|
+
);
|
|
106
|
+
|
|
107
|
+
// Emit event for downstream systems
|
|
108
|
+
await this.eventBus.emit('consent.changed', {
|
|
109
|
+
userId,
|
|
110
|
+
purpose,
|
|
111
|
+
granted,
|
|
112
|
+
timestamp: consent.timestamp
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
async hasConsent(userId, purpose) {
|
|
117
|
+
const record = await this.db.consents.findOne({ userId });
|
|
118
|
+
if (!record) return false;
|
|
119
|
+
|
|
120
|
+
const latestConsent = record.consents
|
|
121
|
+
.filter(c => c.purpose === purpose)
|
|
122
|
+
.sort((a, b) => b.timestamp - a.timestamp)[0];
|
|
123
|
+
|
|
124
|
+
return latestConsent?.granted === true;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
async getConsentHistory(userId) {
|
|
128
|
+
const record = await this.db.consents.findOne({ userId });
|
|
129
|
+
return record?.auditLog || [];
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
```html
|
|
135
|
+
<!-- GDPR-compliant consent UI -->
|
|
136
|
+
<div class="consent-banner" role="dialog" aria-labelledby="consent-title">
|
|
137
|
+
<h2 id="consent-title">Cookie Preferences</h2>
|
|
138
|
+
|
|
139
|
+
<p>We use cookies to improve your experience. Select your preferences below.</p>
|
|
140
|
+
|
|
141
|
+
<form id="consent-form">
|
|
142
|
+
<!-- Necessary - always on, no consent needed -->
|
|
143
|
+
<div class="consent-category">
|
|
144
|
+
<input type="checkbox" id="necessary" checked disabled>
|
|
145
|
+
<label for="necessary">
|
|
146
|
+
<strong>Necessary</strong>
|
|
147
|
+
<span>Required for the website to function. Cannot be disabled.</span>
|
|
148
|
+
</label>
|
|
149
|
+
</div>
|
|
150
|
+
|
|
151
|
+
<!-- Analytics - requires consent -->
|
|
152
|
+
<div class="consent-category">
|
|
153
|
+
<input type="checkbox" id="analytics" name="analytics">
|
|
154
|
+
<label for="analytics">
|
|
155
|
+
<strong>Analytics</strong>
|
|
156
|
+
<span>Help us understand how you use our site.</span>
|
|
157
|
+
</label>
|
|
158
|
+
</div>
|
|
159
|
+
|
|
160
|
+
<!-- Marketing - requires consent -->
|
|
161
|
+
<div class="consent-category">
|
|
162
|
+
<input type="checkbox" id="marketing" name="marketing">
|
|
163
|
+
<label for="marketing">
|
|
164
|
+
<strong>Marketing</strong>
|
|
165
|
+
<span>Personalized ads based on your interests.</span>
|
|
166
|
+
</label>
|
|
167
|
+
</div>
|
|
168
|
+
|
|
169
|
+
<div class="consent-actions">
|
|
170
|
+
<button type="button" id="accept-all">Accept All</button>
|
|
171
|
+
<button type="button" id="reject-all">Reject All</button>
|
|
172
|
+
<button type="submit">Save Preferences</button>
|
|
173
|
+
</div>
|
|
174
|
+
|
|
175
|
+
<p class="consent-links">
|
|
176
|
+
<a href="/privacy-policy">Privacy Policy</a> |
|
|
177
|
+
<a href="/cookie-policy">Cookie Policy</a>
|
|
178
|
+
</p>
|
|
179
|
+
</form>
|
|
180
|
+
</div>
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
### Pattern 2: Data Subject Access Request (DSAR)
|
|
184
|
+
|
|
185
|
+
```python
|
|
186
|
+
from datetime import datetime, timedelta
|
|
187
|
+
from typing import Dict, List, Optional
|
|
188
|
+
import json
|
|
189
|
+
|
|
190
|
+
class DSARHandler:
|
|
191
|
+
"""Handle Data Subject Access Requests."""
|
|
192
|
+
|
|
193
|
+
RESPONSE_DEADLINE_DAYS = 30
|
|
194
|
+
EXTENSION_ALLOWED_DAYS = 60 # For complex requests
|
|
195
|
+
|
|
196
|
+
def __init__(self, data_sources: List['DataSource']):
|
|
197
|
+
self.data_sources = data_sources
|
|
198
|
+
|
|
199
|
+
async def submit_request(
|
|
200
|
+
self,
|
|
201
|
+
request_type: str, # 'access', 'erasure', 'rectification', 'portability'
|
|
202
|
+
user_id: str,
|
|
203
|
+
verified: bool,
|
|
204
|
+
details: Optional[Dict] = None
|
|
205
|
+
) -> str:
|
|
206
|
+
"""Submit a new DSAR."""
|
|
207
|
+
request = {
|
|
208
|
+
'id': self.generate_request_id(),
|
|
209
|
+
'type': request_type,
|
|
210
|
+
'user_id': user_id,
|
|
211
|
+
'status': 'pending_verification' if not verified else 'processing',
|
|
212
|
+
'submitted_at': datetime.utcnow(),
|
|
213
|
+
'deadline': datetime.utcnow() + timedelta(days=self.RESPONSE_DEADLINE_DAYS),
|
|
214
|
+
'details': details or {},
|
|
215
|
+
'audit_log': [{
|
|
216
|
+
'action': 'submitted',
|
|
217
|
+
'timestamp': datetime.utcnow(),
|
|
218
|
+
'details': 'Request received'
|
|
219
|
+
}]
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
await self.db.dsar_requests.insert_one(request)
|
|
223
|
+
await self.notify_dpo(request)
|
|
224
|
+
|
|
225
|
+
return request['id']
|
|
226
|
+
|
|
227
|
+
async def process_access_request(self, request_id: str) -> Dict:
|
|
228
|
+
"""Process a data access request."""
|
|
229
|
+
request = await self.get_request(request_id)
|
|
230
|
+
|
|
231
|
+
if request['type'] != 'access':
|
|
232
|
+
raise ValueError("Not an access request")
|
|
233
|
+
|
|
234
|
+
# Collect data from all sources
|
|
235
|
+
user_data = {}
|
|
236
|
+
for source in self.data_sources:
|
|
237
|
+
try:
|
|
238
|
+
data = await source.get_user_data(request['user_id'])
|
|
239
|
+
user_data[source.name] = data
|
|
240
|
+
except Exception as e:
|
|
241
|
+
user_data[source.name] = {'error': str(e)}
|
|
242
|
+
|
|
243
|
+
# Format response
|
|
244
|
+
response = {
|
|
245
|
+
'request_id': request_id,
|
|
246
|
+
'generated_at': datetime.utcnow().isoformat(),
|
|
247
|
+
'data_categories': list(user_data.keys()),
|
|
248
|
+
'data': user_data,
|
|
249
|
+
'retention_info': await self.get_retention_info(),
|
|
250
|
+
'processing_purposes': await self.get_processing_purposes(),
|
|
251
|
+
'third_party_recipients': await self.get_recipients()
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
# Update request status
|
|
255
|
+
await self.update_request(request_id, 'completed', response)
|
|
256
|
+
|
|
257
|
+
return response
|
|
258
|
+
|
|
259
|
+
async def process_erasure_request(self, request_id: str) -> Dict:
|
|
260
|
+
"""Process a right to erasure request."""
|
|
261
|
+
request = await self.get_request(request_id)
|
|
262
|
+
|
|
263
|
+
if request['type'] != 'erasure':
|
|
264
|
+
raise ValueError("Not an erasure request")
|
|
265
|
+
|
|
266
|
+
results = {}
|
|
267
|
+
exceptions = []
|
|
268
|
+
|
|
269
|
+
for source in self.data_sources:
|
|
270
|
+
try:
|
|
271
|
+
# Check for legal exceptions
|
|
272
|
+
can_delete, reason = await source.can_delete(request['user_id'])
|
|
273
|
+
|
|
274
|
+
if can_delete:
|
|
275
|
+
await source.delete_user_data(request['user_id'])
|
|
276
|
+
results[source.name] = 'deleted'
|
|
277
|
+
else:
|
|
278
|
+
exceptions.append({
|
|
279
|
+
'source': source.name,
|
|
280
|
+
'reason': reason # e.g., 'legal retention requirement'
|
|
281
|
+
})
|
|
282
|
+
results[source.name] = f'retained: {reason}'
|
|
283
|
+
except Exception as e:
|
|
284
|
+
results[source.name] = f'error: {str(e)}'
|
|
285
|
+
|
|
286
|
+
response = {
|
|
287
|
+
'request_id': request_id,
|
|
288
|
+
'completed_at': datetime.utcnow().isoformat(),
|
|
289
|
+
'results': results,
|
|
290
|
+
'exceptions': exceptions
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
await self.update_request(request_id, 'completed', response)
|
|
294
|
+
|
|
295
|
+
return response
|
|
296
|
+
|
|
297
|
+
async def process_portability_request(self, request_id: str) -> bytes:
|
|
298
|
+
"""Generate portable data export."""
|
|
299
|
+
request = await self.get_request(request_id)
|
|
300
|
+
user_data = await self.process_access_request(request_id)
|
|
301
|
+
|
|
302
|
+
# Convert to machine-readable format (JSON)
|
|
303
|
+
portable_data = {
|
|
304
|
+
'export_date': datetime.utcnow().isoformat(),
|
|
305
|
+
'format_version': '1.0',
|
|
306
|
+
'data': user_data['data']
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
return json.dumps(portable_data, indent=2, default=str).encode()
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
### Pattern 3: Data Retention
|
|
313
|
+
|
|
314
|
+
```python
|
|
315
|
+
from datetime import datetime, timedelta
|
|
316
|
+
from enum import Enum
|
|
317
|
+
|
|
318
|
+
class RetentionBasis(Enum):
|
|
319
|
+
CONSENT = "consent"
|
|
320
|
+
CONTRACT = "contract"
|
|
321
|
+
LEGAL_OBLIGATION = "legal_obligation"
|
|
322
|
+
LEGITIMATE_INTEREST = "legitimate_interest"
|
|
323
|
+
|
|
324
|
+
class DataRetentionPolicy:
|
|
325
|
+
"""Define and enforce data retention policies."""
|
|
326
|
+
|
|
327
|
+
POLICIES = {
|
|
328
|
+
'user_account': {
|
|
329
|
+
'retention_period_days': 365 * 3, # 3 years after last activity
|
|
330
|
+
'basis': RetentionBasis.CONTRACT,
|
|
331
|
+
'trigger': 'last_activity_date',
|
|
332
|
+
'archive_before_delete': True
|
|
333
|
+
},
|
|
334
|
+
'transaction_records': {
|
|
335
|
+
'retention_period_days': 365 * 7, # 7 years for tax
|
|
336
|
+
'basis': RetentionBasis.LEGAL_OBLIGATION,
|
|
337
|
+
'trigger': 'transaction_date',
|
|
338
|
+
'archive_before_delete': True,
|
|
339
|
+
'legal_reference': 'Tax regulations require 7 year retention'
|
|
340
|
+
},
|
|
341
|
+
'marketing_consent': {
|
|
342
|
+
'retention_period_days': 365 * 2, # 2 years
|
|
343
|
+
'basis': RetentionBasis.CONSENT,
|
|
344
|
+
'trigger': 'consent_date',
|
|
345
|
+
'archive_before_delete': False
|
|
346
|
+
},
|
|
347
|
+
'support_tickets': {
|
|
348
|
+
'retention_period_days': 365 * 2,
|
|
349
|
+
'basis': RetentionBasis.LEGITIMATE_INTEREST,
|
|
350
|
+
'trigger': 'ticket_closed_date',
|
|
351
|
+
'archive_before_delete': True
|
|
352
|
+
},
|
|
353
|
+
'analytics_data': {
|
|
354
|
+
'retention_period_days': 365, # 1 year
|
|
355
|
+
'basis': RetentionBasis.CONSENT,
|
|
356
|
+
'trigger': 'collection_date',
|
|
357
|
+
'archive_before_delete': False,
|
|
358
|
+
'anonymize_instead': True
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
async def apply_retention_policies(self):
|
|
363
|
+
"""Run retention policy enforcement."""
|
|
364
|
+
for data_type, policy in self.POLICIES.items():
|
|
365
|
+
cutoff_date = datetime.utcnow() - timedelta(
|
|
366
|
+
days=policy['retention_period_days']
|
|
367
|
+
)
|
|
368
|
+
|
|
369
|
+
if policy.get('anonymize_instead'):
|
|
370
|
+
await self.anonymize_old_data(data_type, cutoff_date)
|
|
371
|
+
else:
|
|
372
|
+
if policy.get('archive_before_delete'):
|
|
373
|
+
await self.archive_data(data_type, cutoff_date)
|
|
374
|
+
await self.delete_old_data(data_type, cutoff_date)
|
|
375
|
+
|
|
376
|
+
await self.log_retention_action(data_type, cutoff_date)
|
|
377
|
+
|
|
378
|
+
async def anonymize_old_data(self, data_type: str, before_date: datetime):
|
|
379
|
+
"""Anonymize data instead of deleting."""
|
|
380
|
+
# Example: Replace identifying fields with hashes
|
|
381
|
+
if data_type == 'analytics_data':
|
|
382
|
+
await self.db.analytics.update_many(
|
|
383
|
+
{'collection_date': {'$lt': before_date}},
|
|
384
|
+
{'$set': {
|
|
385
|
+
'user_id': None,
|
|
386
|
+
'ip_address': None,
|
|
387
|
+
'device_id': None,
|
|
388
|
+
'anonymized': True,
|
|
389
|
+
'anonymized_date': datetime.utcnow()
|
|
390
|
+
}}
|
|
391
|
+
)
|
|
392
|
+
```
|
|
393
|
+
|
|
394
|
+
### Pattern 4: Privacy by Design
|
|
395
|
+
|
|
396
|
+
```python
|
|
397
|
+
class PrivacyFirstDataModel:
|
|
398
|
+
"""Example of privacy-by-design data model."""
|
|
399
|
+
|
|
400
|
+
# Separate PII from behavioral data
|
|
401
|
+
user_profile_schema = {
|
|
402
|
+
'user_id': str, # UUID, not sequential
|
|
403
|
+
'email_hash': str, # Hashed for lookups
|
|
404
|
+
'created_at': datetime,
|
|
405
|
+
# Minimal data collection
|
|
406
|
+
'preferences': {
|
|
407
|
+
'language': str,
|
|
408
|
+
'timezone': str
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
# Encrypted at rest
|
|
413
|
+
user_pii_schema = {
|
|
414
|
+
'user_id': str,
|
|
415
|
+
'email': str, # Encrypted
|
|
416
|
+
'name': str, # Encrypted
|
|
417
|
+
'phone': str, # Encrypted (optional)
|
|
418
|
+
'address': dict, # Encrypted (optional)
|
|
419
|
+
'encryption_key_id': str
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
# Pseudonymized behavioral data
|
|
423
|
+
analytics_schema = {
|
|
424
|
+
'session_id': str, # Not linked to user_id
|
|
425
|
+
'pseudonym_id': str, # Rotating pseudonym
|
|
426
|
+
'events': list,
|
|
427
|
+
'device_category': str, # Generalized, not specific
|
|
428
|
+
'country': str, # Not city-level
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
class DataMinimization:
|
|
432
|
+
"""Implement data minimization principles."""
|
|
433
|
+
|
|
434
|
+
@staticmethod
|
|
435
|
+
def collect_only_needed(form_data: dict, purpose: str) -> dict:
|
|
436
|
+
"""Filter form data to only fields needed for purpose."""
|
|
437
|
+
REQUIRED_FIELDS = {
|
|
438
|
+
'account_creation': ['email', 'password'],
|
|
439
|
+
'newsletter': ['email'],
|
|
440
|
+
'purchase': ['email', 'name', 'address', 'payment'],
|
|
441
|
+
'support': ['email', 'message']
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
allowed = REQUIRED_FIELDS.get(purpose, [])
|
|
445
|
+
return {k: v for k, v in form_data.items() if k in allowed}
|
|
446
|
+
|
|
447
|
+
@staticmethod
|
|
448
|
+
def generalize_location(ip_address: str) -> str:
|
|
449
|
+
"""Generalize IP to country level only."""
|
|
450
|
+
import geoip2.database
|
|
451
|
+
reader = geoip2.database.Reader('GeoLite2-Country.mmdb')
|
|
452
|
+
try:
|
|
453
|
+
response = reader.country(ip_address)
|
|
454
|
+
return response.country.iso_code
|
|
455
|
+
except:
|
|
456
|
+
return 'UNKNOWN'
|
|
457
|
+
```
|
|
458
|
+
|
|
459
|
+
### Pattern 5: Breach Notification
|
|
460
|
+
|
|
461
|
+
```python
|
|
462
|
+
from datetime import datetime
|
|
463
|
+
from enum import Enum
|
|
464
|
+
|
|
465
|
+
class BreachSeverity(Enum):
|
|
466
|
+
LOW = "low"
|
|
467
|
+
MEDIUM = "medium"
|
|
468
|
+
HIGH = "high"
|
|
469
|
+
CRITICAL = "critical"
|
|
470
|
+
|
|
471
|
+
class BreachNotificationHandler:
|
|
472
|
+
"""Handle GDPR breach notification requirements."""
|
|
473
|
+
|
|
474
|
+
AUTHORITY_NOTIFICATION_HOURS = 72
|
|
475
|
+
AFFECTED_NOTIFICATION_REQUIRED_SEVERITY = BreachSeverity.HIGH
|
|
476
|
+
|
|
477
|
+
async def report_breach(
|
|
478
|
+
self,
|
|
479
|
+
description: str,
|
|
480
|
+
data_types: List[str],
|
|
481
|
+
affected_count: int,
|
|
482
|
+
severity: BreachSeverity
|
|
483
|
+
) -> dict:
|
|
484
|
+
"""Report and handle a data breach."""
|
|
485
|
+
breach = {
|
|
486
|
+
'id': self.generate_breach_id(),
|
|
487
|
+
'reported_at': datetime.utcnow(),
|
|
488
|
+
'description': description,
|
|
489
|
+
'data_types_affected': data_types,
|
|
490
|
+
'affected_individuals_count': affected_count,
|
|
491
|
+
'severity': severity.value,
|
|
492
|
+
'status': 'investigating',
|
|
493
|
+
'timeline': [{
|
|
494
|
+
'event': 'breach_reported',
|
|
495
|
+
'timestamp': datetime.utcnow(),
|
|
496
|
+
'details': description
|
|
497
|
+
}]
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
await self.db.breaches.insert_one(breach)
|
|
501
|
+
|
|
502
|
+
# Immediate notifications
|
|
503
|
+
await self.notify_dpo(breach)
|
|
504
|
+
await self.notify_security_team(breach)
|
|
505
|
+
|
|
506
|
+
# Authority notification required within 72 hours
|
|
507
|
+
if self.requires_authority_notification(severity, data_types):
|
|
508
|
+
breach['authority_notification_deadline'] = (
|
|
509
|
+
datetime.utcnow() + timedelta(hours=self.AUTHORITY_NOTIFICATION_HOURS)
|
|
510
|
+
)
|
|
511
|
+
await self.schedule_authority_notification(breach)
|
|
512
|
+
|
|
513
|
+
# Affected individuals notification
|
|
514
|
+
if severity.value in [BreachSeverity.HIGH.value, BreachSeverity.CRITICAL.value]:
|
|
515
|
+
await self.schedule_individual_notifications(breach)
|
|
516
|
+
|
|
517
|
+
return breach
|
|
518
|
+
|
|
519
|
+
def requires_authority_notification(
|
|
520
|
+
self,
|
|
521
|
+
severity: BreachSeverity,
|
|
522
|
+
data_types: List[str]
|
|
523
|
+
) -> bool:
|
|
524
|
+
"""Determine if supervisory authority must be notified."""
|
|
525
|
+
# Always notify for sensitive data
|
|
526
|
+
sensitive_types = ['health', 'financial', 'credentials', 'biometric']
|
|
527
|
+
if any(t in sensitive_types for t in data_types):
|
|
528
|
+
return True
|
|
529
|
+
|
|
530
|
+
# Notify for medium+ severity
|
|
531
|
+
return severity in [BreachSeverity.MEDIUM, BreachSeverity.HIGH, BreachSeverity.CRITICAL]
|
|
532
|
+
|
|
533
|
+
async def generate_authority_report(self, breach_id: str) -> dict:
|
|
534
|
+
"""Generate report for supervisory authority."""
|
|
535
|
+
breach = await self.get_breach(breach_id)
|
|
536
|
+
|
|
537
|
+
return {
|
|
538
|
+
'organization': {
|
|
539
|
+
'name': self.config.org_name,
|
|
540
|
+
'contact': self.config.dpo_contact,
|
|
541
|
+
'registration': self.config.registration_number
|
|
542
|
+
},
|
|
543
|
+
'breach': {
|
|
544
|
+
'nature': breach['description'],
|
|
545
|
+
'categories_affected': breach['data_types_affected'],
|
|
546
|
+
'approximate_number_affected': breach['affected_individuals_count'],
|
|
547
|
+
'likely_consequences': self.assess_consequences(breach),
|
|
548
|
+
'measures_taken': await self.get_remediation_measures(breach_id),
|
|
549
|
+
'measures_proposed': await self.get_proposed_measures(breach_id)
|
|
550
|
+
},
|
|
551
|
+
'timeline': breach['timeline'],
|
|
552
|
+
'submitted_at': datetime.utcnow().isoformat()
|
|
553
|
+
}
|
|
554
|
+
```
|
|
555
|
+
|
|
556
|
+
## Compliance Checklist
|
|
557
|
+
|
|
558
|
+
```markdown
|
|
559
|
+
## GDPR Implementation Checklist
|
|
560
|
+
|
|
561
|
+
### Legal Basis
|
|
562
|
+
- [ ] Documented legal basis for each processing activity
|
|
563
|
+
- [ ] Consent mechanisms meet GDPR requirements
|
|
564
|
+
- [ ] Legitimate interest assessments completed
|
|
565
|
+
|
|
566
|
+
### Transparency
|
|
567
|
+
- [ ] Privacy policy is clear and accessible
|
|
568
|
+
- [ ] Processing purposes clearly stated
|
|
569
|
+
- [ ] Data retention periods documented
|
|
570
|
+
|
|
571
|
+
### Data Subject Rights
|
|
572
|
+
- [ ] Access request process implemented
|
|
573
|
+
- [ ] Erasure request process implemented
|
|
574
|
+
- [ ] Portability export available
|
|
575
|
+
- [ ] Rectification process available
|
|
576
|
+
- [ ] Response within 30-day deadline
|
|
577
|
+
|
|
578
|
+
### Security
|
|
579
|
+
- [ ] Encryption at rest implemented
|
|
580
|
+
- [ ] Encryption in transit (TLS)
|
|
581
|
+
- [ ] Access controls in place
|
|
582
|
+
- [ ] Audit logging enabled
|
|
583
|
+
|
|
584
|
+
### Breach Response
|
|
585
|
+
- [ ] Breach detection mechanisms
|
|
586
|
+
- [ ] 72-hour notification process
|
|
587
|
+
- [ ] Breach documentation system
|
|
588
|
+
|
|
589
|
+
### Documentation
|
|
590
|
+
- [ ] Records of processing activities (Art. 30)
|
|
591
|
+
- [ ] Data protection impact assessments
|
|
592
|
+
- [ ] Data processing agreements with vendors
|
|
593
|
+
```
|
|
594
|
+
|
|
595
|
+
## Best Practices
|
|
596
|
+
|
|
597
|
+
### Do's
|
|
598
|
+
- **Minimize data collection** - Only collect what's needed
|
|
599
|
+
- **Document everything** - Processing activities, legal bases
|
|
600
|
+
- **Encrypt PII** - At rest and in transit
|
|
601
|
+
- **Implement access controls** - Need-to-know basis
|
|
602
|
+
- **Regular audits** - Verify compliance continuously
|
|
603
|
+
|
|
604
|
+
### Don'ts
|
|
605
|
+
- **Don't pre-check consent boxes** - Must be opt-in
|
|
606
|
+
- **Don't bundle consent** - Separate purposes separately
|
|
607
|
+
- **Don't retain indefinitely** - Define and enforce retention
|
|
608
|
+
- **Don't ignore DSARs** - 30-day response required
|
|
609
|
+
- **Don't transfer without safeguards** - SCCs or adequacy decisions
|
|
610
|
+
|
|
611
|
+
## Resources
|
|
612
|
+
|
|
613
|
+
- [GDPR Full Text](https://gdpr-info.eu/)
|
|
614
|
+
- [ICO Guidance](https://ico.org.uk/for-organisations/guide-to-data-protection/guide-to-the-general-data-protection-regulation-gdpr/)
|
|
615
|
+
- [EDPB Guidelines](https://edpb.europa.eu/our-work-tools/general-guidance/gdpr-guidelines-recommendations-best-practices_en)
|