ADR-016 — Compliance frameworks (customer-facing)
1. Context
Sprint A and AI-PLACE-6 originally referenced "EU AI Act + ISO 42001 + NIST AI RMF" as the compliance frameworks Noxys would map to. NIST AI RMF is a US Department of Commerce framework — directly conflicts with our "European Sovereign AI Firewall" positioning. We need to replace NIST with sovereignty-aligned frameworks and broaden coverage to match what enterprise CISOs and DPOs actually request in deals.
We also need to ship branded PDF reports per framework, per tenant, per period — used by customers as evidence packs for regulators, auditors, and boards. Reports must look professional, carry Noxys brand, support 12 languages (matching console/extension i18n), and be archive-grade (PDF/A) with optional qualified signatures for Enterprise.
This ADR defines what we report TO customers. ADR-017 covers what Noxys complies WITH as a vendor. The two are independent surfaces and must not be conflated.
2. Decision summary
- 8 frameworks supported, 3-tier coverage (1 framework Free, 3 Pro, 8 Enterprise).
- NIST AI RMF removed from frontstage. Mention only as "interoperability mapping" annex for tenants with US export concerns.
- ISO/IEC 42001 + ISO/IEC 23894 + ISO/IEC 27001 added as sovereignty-neutral standards (Geneva-published).
- EU-specific regulatory frameworks added: NIS2, DORA, CRA.
- PDF generation via Typst (Switzerland-Italy origin, sovereign-friendly, declarative, fast, professional output).
- New internal sidecar repo
noxys-pdf-renderer— internal only, no customer-facing surface (3-deployment-methods rule preserved). - 12-locale i18n on PDF templates.
- PDF/A-3 archive-grade output. Optional PAdES qualified signature for Enterprise via EU TSP.
3. Framework coverage matrix
| Framework | Authority | Free | Pro | Enterprise |
|---|---|---|---|---|
| EU AI Act (Reg. 2024/1689) | EU | read-only score | full + PDF | + custom mappings |
| GDPR (AI provisions, Art 22, 35) | EU | — | full + PDF | + custom |
| ISO/IEC 42001:2023 (AI MS) | ISO Geneva | — | full + PDF | + custom + audit export |
| ISO/IEC 23894:2023 (AI risk) | ISO Geneva | — | — | full + PDF |
| ISO/IEC 27001:2022 (InfoSec MS) | ISO Geneva | — | — | full + PDF |
| NIS2 (Dir. 2022/2555) | EU | — | — | full + PDF |
| DORA (Reg. 2022/2554) | EU | — | — | full + PDF |
| CRA (Reg. 2024/2847) | EU | — | — | full + PDF |
Removed from scope: NIST AI RMF (US framework, sovereignty conflict). Available as optional annex on Enterprise request — not part of standard pipeline.
4. Pipeline architecture
[tenant data sources] ──► [framework mapper] ──► [scoring engine] ──► [narrative LLM] ──► [PDF renderer worker] ──► [storage + delivery]
│ │ │ │ │
│ │ │ │ ▼
│ │ │ │ R2 EU + email + console download + API
│ │ │ │
audit logs control mappings per-framework AI-PLACE-6 RAG
AI-BOM (Markdown + JSON) scoring rules (Mistral default)
policies coverage matrix
org metadata
Inputs:
- Audit logs (interactions, blocks, redactions, alerts)
- AI-BOM (Sprint BOM-1) — models, providers, costs, lineage
- Policies (config + violations + drift)
- Org metadata (sectors, jurisdictions, headcount, applicable regulations)
- Period (month / quarter / year / custom range)
Per-framework outputs:
- Cover page (1p) — branded
- Executive summary (1p) — exec persona, score + 3 top findings
- Coverage matrix (variable) — controls × status (covered / partial / gap / N/A)
- Evidence section (variable) — log excerpts, counts, time-series charts
- Gap remediation roadmap (1-3p) — prioritized actions, effort estimates
- Annexes — methodology, data lineage, glossary, sources, AI-BOM
Output guarantees:
- PDF/A-3 (archive-grade, attachments allowed for evidence CSVs)
- SHA-256 hash + ISO 8601 timestamp on every page footer
- Optional PAdES qualified signature (Enterprise tier, EU TSP)
5. PDF tooling decision — Typst
Chosen: Typst (https://typst.app, source ETH Zurich + Politecnico Milano).
Rationale:
- Sovereignty: Swiss/Italian origin, open-source MIT, no US dependency
- Quality: typography-first, output rivals LaTeX
- Speed: ~50ms per page render, suitable for on-demand + batch scheduled reports
- DX: declarative scripting (Markdown-like + functions), templates trivially refactored
- Operability: single Rust binary, runs in Alpine container, no JVM/Chromium baggage
- Math + chart support: native TeX-grade math, SVG/PNG embedding, vector charts via ECharts → SVG export
Alternatives rejected:
- React-PDF: stack-fit (JS native) but typography limited, brand-grade output difficult
- Puppeteer/HTML: heavy (Chromium worker), large attack surface, slow
- LaTeX: top quality but build chain nightmare in containers, slow
- WeasyPrint: solid but Python-only and rendering quality below Typst
6. Brand kit (PDF)
Colors: Midnight #0A0E1A (cover backgrounds), Purple #6C63FF (titles, accents), Cyan #00D4AA (success, tags, KPI deltas), Slate #1E293B (dark-mode body bg).
Typography: Inter (UI/body, OFL license, EU-mirror hosting) + JetBrains Mono (code/data tables, OFL).
Components (Typst functions, shared _brand/):
cover-page(framework, tenant, period, report-type)header(framework-short, page-num)/footer(hash, page-num, total)kpi-card(label, value, delta-pct, color)coverage-row(control-id, control-name, status, evidence-count)evidence-block(title, date-range, count, chart-svg)gap-card(severity, title, description, effort-days, owner)
Charts: ECharts → SVG export server-side → embed via image(). No Google Charts, no remote rendering.
Icons: Lucide (open-source, ISC license), bundled in renderer container.
7. i18n PDFs
Per-tenant locale config drives rendering. 12 locales matched to console + extension: en, fr, de, es, it, nl, pl, pt, ro, cs, da, sv.
File naming: report-{tenant_slug}-{framework_id}-{period}-{locale}.pdf.
Translation strategy:
- Static labels (cover, headers, control names) — translation files per framework × locale
- Dynamic narrative (LLM-generated executive summary, gap remediation copy) — generated in tenant's locale via AI-PLACE-6 RAG with locale context
- Source-of-truth:
enmaster, others auto-derived + human review for regulated phrasing (EU AI Act article references)
8. Console UX — Compliance Reports page
New page /compliance/reports:
- Frameworks panel: list of subscribed frameworks per tier; click to see detail
- Generate report: framework + period picker + locale + format (PDF/A-3, PAdES if Enterprise) → triggers async job
- History: table of generated reports (framework, period, generated_at, requester, size, hash); re-download + re-generate (with diff highlight)
- Schedule: per-framework recurring generation (monthly / quarterly / annual); auto-email to DPO/CISO
- Drift visualization: score deltas across periods (line chart per framework)
- Audit export (Enterprise): bulk export all reports + raw evidence as ZIP
9. Sprint plan
9 sprints, 30 days. W23-24 → W29-30.
| ID | Title | Repo | Window | Effort | Priority |
|---|---|---|---|---|---|
| COMP-1 | Framework data model + mapping schema (8 frameworks) | noxys-api | W23-24 | 3d | P1 |
| COMP-2 | Scoring engine (controls × evidence × rules) | noxys-api | W25-26 | 3d | P1 |
| COMP-3 | PDF renderer worker (Typst container + brand kit) | noxys-pdf-renderer (new internal sidecar) | W25-26 | 5d | P1 |
| COMP-4 | EU AI Act + GDPR + ISO 42001 templates (Pro baseline) | noxys-pdf-renderer | W25-26 | 4d | P0 |
| COMP-5 | ISO 23894/27001 + NIS2 + DORA + CRA templates (Enterprise) | noxys-pdf-renderer | W27-28 | 5d | P2 |
| COMP-6 | Console — Compliance Reports page (UX + scheduling + history) | noxys-console | W27-28 | 3d | P1 |
| COMP-7 | Narrative LLM integration (reuses AI-PLACE-6 RAG) | noxys-api | W27-28 | 2d | P2 |
| COMP-8 | i18n PDF templates (12 locales × 8 frameworks) | noxys-pdf-renderer | W29-30 | 3d | P2 |
| COMP-9 | PAdES qualified signature (Enterprise legal-grade) | noxys-api + noxys-pdf-renderer | W29-30 | 2d | P3 |
10. 3-deployment-methods rule check
noxys-pdf-renderer = internal sidecar only. Customer-facing surface remains 3 (extension / agent / proxy). PDFs delivered through console + email + API — not new methods. Rule respected per memory feedback_three_deployment_methods.md.
11. Open questions
- TSP choice for PAdES: Universign (FR), BoldSign EU, DocuSign EU? Cost ~0.3-1€/signature. Decide before COMP-9.
- PDF/A-3 vs PDF/A-2: PDF/A-3 chosen — allows embedded evidence CSVs (audit-grade).
- Custom mappings UI: JSON config v1, in-console builder v2 (post-W30).
- Resource sizing: monthly auto-reports × N tenants × 8 frameworks. Estimate 30-60s/PDF on a 1-vCPU worker. Scale workers per tier load.
12. Non-goals
- Becoming a GRC platform (we score AI usage compliance, we don't replace OneTrust / Drata / Vanta).
- Manual control responses (auto-evidence only; manual upload optional v2).
- Audit firm integrations (export PDFs work; no direct Vanta/Drata sync v1).
13. Refs
- ADR-010 Pricing tiers
- ADR-014 AI placement (NIST removal amended)
- ADR-017 Product compliance posture (separate axis)
- Sprint BOM-1 (AI-BOM data source)
- AI-PLACE-6 (compliance narrator — bump scope: -1d, narrative offloaded to COMP-7)
- Memory:
feedback_three_deployment_methods.md - ADR-019 Prompt capture, storage, retention & sovereignty (PDF evidence section depth conditioned on tenant storage tier — hashed-only=count evidence, redacted=patterns, raw=quotes)