Files
agentic-dev-template/docs/guides/pre-launch-compliance-checklist.md
Danijel Martinek 0c880730df docs(compliance): add pre-launch compliance checklist
Fix broken forward reference to compliance-overview.md (story 05 output)
by replacing the hyperlink with plain text annotated as forthcoming.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-20 12:35:32 +00:00

27 KiB

Pre-Launch Compliance Checklist

This checklist operationalises ADR-025's three-way coverage split into a checkable launch gate. Work through every section before onboarding paying customers in an EU-regulated context. For the full compliance map — ADR, guide, and template cross-references per section — see docs/guides/compliance-overview.md (forthcoming in story 05).

Coverage labels

Label Meaning
Shipped by template The template provides this mechanically. Run the inline verification command to produce audit evidence on demand.
Consumer responsibility You own this obligation. The template ships fill-in templates or interfaces but not the values.
Infra responsibility Your deployment infrastructure owns this. No application-code change is sufficient.
Deferred Explicitly deferred in ADR-025. The documented trigger condition must be met before revisiting.

1. Infrastructure

Obligation Coverage
EU / EEA region pinning — compute, managed database, object storage, and backups must reside in EU/EEA Infra responsibility
TLS termination at the deploy edge — HTTPS everywhere, no plaintext HTTP fallback Infra responsibility
Encryption-at-rest for the PostgreSQL database and any object storage buckets Infra responsibility
Network boundary controls — VPN or bastion for admin access; firewall rules block unnecessary ingress Infra responsibility

2. Data

Obligation Coverage
PII field inventory — every Payload collection's personal-data fields tagged with custom.pii (category, purpose, exportable, restrictable) Shipped by templatepnpm compliance:data-map generates compliance/data-map.yml; pnpm compliance:emit-all --check validates drift against the live schema
Data retention policy — every Payload collection containing PII carries a custom.retention schedule (purgeSchedule required, activeRetention / coldArchive / postDeletion as needed) Shipped by templatepnpm compliance:retention-policy generates compliance/retention-policy.yml; pnpm compliance:emit-all --check validates it
Subject linkage declared — DSR cascade scope defined per collection following the convention in docs/compliance/subject-linkage.example.md Shipped by template — subject relationships are embedded in compliance/data-map.yml; pnpm compliance:emit-all --check
Background retention purge wired — core-shared/jobs/retention-purge.job.ts reads custom.retention at boot and schedules per-collection purge cadence Shipped by templatepnpm test --filter @repo/core-shared -- --coverage

3. Application

Obligation Coverage
Security headers present on all responses — HSTS, X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy, Content-Security-Policy Shipped by template — scan the deployed origin with securityheaders.com or `curl -sI https:// | grep -i -E "strict-transport x-frame x-content-type referrer permissions content-security"`
Rate limiting declared on every auth, write, and export use case (rateLimit manifest field set) Shipped by templatepnpm lint (rule: no-undeclared-rate-limit warns on missing declarations); pnpm conformance
Cookie consent banner — EU-prominent Reject / Accept (equal visual weight) with granular consent categories Shipped by template<CookieConsentBanner> in @repo/core-ui; pnpm test:stories verifies the component story
Consent gating on analytics and marketing use cases (requiresConsent manifest field set; withConsent wrapper wired at bind time) Shipped by templatepnpm lint (rule: no-undeclared-consent-check); pnpm conformance
PII scrubbing on the observability pipeline — sendDefaultPii: false; PiiScrubSpanProcessor and PiiScrubLogRecordProcessor wired before every exporter Shipped by templategrep -rn "sendDefaultPii: true" apps/ must return zero results (CI grep gate in ADR-017)

4. Secrets

Obligation Coverage
No secrets committed to the repository Shipped by template — gitleaks runs in ci.yml (ADR-023); pnpm fallow:audit includes a secret-scan step
Environment variables / secret-manager inventory documented; rotation cadence agreed Consumer responsibility
Repository secrets configured (TURBO_TOKEN, WEB_NEXT_SENTRY_DSN, CMS_SENTRY_DSN, etc.) Consumer responsibility — see operator-checklist.md

5. Sub-Processors

Obligation Coverage
Sub-processor inventory generated from library-decision traces Shipped by templatepnpm compliance:sub-processors generates compliance/sub-processors.yml; pnpm compliance:emit-all --check validates it against traces in docs/library-decisions/
Every SDK library marked is-sub-processor: true carries DPA-signed status, SCCs flag, data-sent declaration, and EU region in its library-decision trace frontmatter Shipped by templatepnpm lint (rule: pii-declaration-must-be-complete catches incomplete sub-processor traces); ADR-022
Manual entries for REST sub-processors (third-party APIs without an SDK) authored in compliance/sub-processors.manual.yml Consumer responsibility — the generator merges manual entries automatically; format is documented in docs/compliance/sub-processors.example.yml
DPAs signed with all sub-processors that process personal data Consumer responsibility
SCCs executed for sub-processors outside the EU/EEA Consumer responsibility

6. Logging

Obligation Coverage
Audit logging wired for all data-access, mutation, consent, and DSR use cases (audits manifest field set; withAudit wrapper wired at bind time) Shipped by templatepnpm lint (rule: no-undeclared-audit warns on missing declarations); pnpm conformance
Audit trail shipped to an append-only log store (Vector / Fluent Bit pipeline configured) Consumer responsibility — see audit-and-compliance.md for log-shipper configuration examples and hostile-actor immutability test
Audit trail retention period set to ≥ 12 months (or applicable jurisdictional minimum) Consumer responsibility — configure in the log-shipping sink; must survive the immutability test in audit-and-compliance.md

7. Breach

Obligation Coverage
Breach detection surfaces active — Sentry error alerting, rate-limit exhaustion surfaced in metrics, audit-log anomaly queries enabled Shipped by template — Sentry DSN configured per operator-checklist.md; pnpm conformance; breach detection patterns deferred per ADR-025 (trigger: first downstream consumer has live traffic + observability backend)
Incident runbook authored with GDPR Art. 33 timeline, contact chain, and SA notification template Consumer responsibility — fill in docs/compliance/templates/incident-runbook.template.md and commit the filled copy to compliance/
GDPR Art. 33 — Supervisory Authority notified within 72 hours of a qualifying personal-data breach Consumer responsibility — runbook triggers; SA contact and submission URL filled in the runbook
GDPR Art. 34 — High-risk data subjects notified without undue delay Consumer responsibility — runbook triggers; subject-notification template filled in the runbook

8. DSR

Obligation Coverage
Art. 15 (access) and Art. 20 (portability) — IDataExport interface + /api/gdpr/export endpoint wired Shipped by templatepnpm test --filter @repo/core-dsr -- --coverage
Art. 16 (rectification) — IDataRectify interface + /api/gdpr/rectify endpoint wired Shipped by templatepnpm test --filter @repo/core-dsr -- --coverage
Art. 17 (erasure) — IDataDelete interface + /api/gdpr/delete endpoint wired; eraseSubject pseudonymizes the audit trail Shipped by templatepnpm test --filter @repo/core-dsr -- --coverage
Art. 18 (restriction of processing) — IProcessingRestriction interface + /api/gdpr/restrict endpoint wired Shipped by templatepnpm test --filter @repo/core-dsr -- --coverage
Art. 21 (objection) — IConsent.withdraw wired; withdrawal propagates to all consent-gated use cases Shipped by templatepnpm test --filter @repo/core-consent -- --coverage
Art. 22 (automated decision-making and profiling) Deferred — ADR-025: template has no ML; revisit when a downstream consumer adds automated decisions
DSR intake procedure, identity-validation steps, and response-log template documented Consumer responsibility — fill in docs/compliance/templates/dsr-procedure.template.md and commit the filled copy to compliance/

9. Backup

Obligation Coverage
Backup schedule, storage location (EU/EEA), encryption, and access controls documented Consumer responsibility — fill in docs/compliance/templates/backup-policy.template.md and commit to compliance/
Restore procedure tested and results recorded; RPO / RTO targets declared Infra responsibility — confirmed by executing the restore procedure documented in the filled backup policy
Post-deletion data disposal method declared (secure wipe / crypto-shred) Consumer responsibility — document in the filled backup policy

10. SDLC

Obligation Coverage
Dependency vulnerability scanning — Renovate auto-merges patch / minor; Socket.dev blocks supply-chain behavioural anomalies; npm audit runs in CI Shipped by templatepnpm audit; Socket GitHub App installed per operator-checklist.md; ADR-023
SBOM generated per release (CycloneDX format, uploaded as CI artifact) Shipped by templatecyclonedx-npm step in ci.yml (ADR-023 amendment)
Static analysis and secret scanning — CodeQL + gitleaks run in CI on every push Shipped by template — CI workflow; pnpm fallow:audit; ADR-023
Library evaluation policy enforced — EU residency filter, socket-score gate, and library-decision trace required before any new runtime dependency Shipped by templatepnpm lint (library-policy-nudge hook fires on new deps); ADR-022
Penetration test scheduled; scope, methodology, and remediation SLA agreed Consumer responsibility

11. Workforce

Obligation Coverage
Staff onboarding procedure — system access provisioning, security orientation, compliance acknowledgement, 30-day review Consumer responsibility — fill in docs/compliance/templates/onboarding.template.md and commit to compliance/
Staff offboarding procedure — access revocation checklist, device return, data handover, 30-day post-departure review Consumer responsibility — fill in docs/compliance/templates/offboarding.template.md and commit to compliance/
Device management policy — MDM enrollment, EDR, acceptable-use rules, lost / stolen device response Consumer responsibility — fill in docs/compliance/templates/device-policy.template.md and commit to compliance/
Password and MFA policy — complexity rules, rotation cadence, account lockout thresholds Consumer responsibility — fill in docs/compliance/templates/password-policy.template.md and commit to compliance/; MFA + lockout implementation deferred (ADR-025: trigger is first downstream consumer establishing auth threat model)
Background checks and NDAs for personnel with access to personal data Consumer responsibility
Quarterly access review — privilege audit against current job roles Consumer responsibility
Security awareness training completed and records kept Consumer responsibility

Obligation Coverage
Data Processing Agreement (DPA) executed with every controller / processor counterparty Consumer responsibility
Privacy Policy published — GDPR Art. 13 / 14 notices, lawful basis for each processing purpose declared Consumer responsibility
Terms of Service published Consumer responsibility
Standard Contractual Clauses (SCCs) executed for sub-processors and data transfers outside EU/EEA Consumer responsibility
Data Protection Impact Assessment (DPIA) conducted for high-risk processing (Art. 35) Consumer responsibility
Records of Processing Activities (RoPA) maintained and available to the Supervisory Authority on request (Art. 30) Consumer responsibility

13. Documentation

Obligation Coverage
Compliance evidence bundle generated and committed — compliance/data-map.yml, compliance/retention-policy.yml, compliance/sub-processors.yml Shipped by templatepnpm compliance:emit-all --check; format documented in docs/compliance/README.md
Filled policy artifacts committed to compliance/ at repo root — one filled copy per template Consumer responsibility — fill each template in docs/compliance/templates/ and commit the result to compliance/
Operator checklist actions completed — GitHub Apps installed, branch protection enabled, repository secrets set Consumer responsibility — see operator-checklist.md
This checklist reviewed; every outstanding item resolved or explicitly accepted-as-risk before go-live Consumer responsibility

Part of Epic D — Compliance docs scaffolds. Governed by ADR-025.