Skip to main content

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

FrameworkAuthorityFreeProEnterprise
EU AI Act (Reg. 2024/1689)EUread-only scorefull + PDF+ custom mappings
GDPR (AI provisions, Art 22, 35)EUfull + PDF+ custom
ISO/IEC 42001:2023 (AI MS)ISO Genevafull + PDF+ custom + audit export
ISO/IEC 23894:2023 (AI risk)ISO Genevafull + PDF
ISO/IEC 27001:2022 (InfoSec MS)ISO Genevafull + PDF
NIS2 (Dir. 2022/2555)EUfull + PDF
DORA (Reg. 2022/2554)EUfull + PDF
CRA (Reg. 2024/2847)EUfull + 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: en master, 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.

IDTitleRepoWindowEffortPriority
COMP-1Framework data model + mapping schema (8 frameworks)noxys-apiW23-243dP1
COMP-2Scoring engine (controls × evidence × rules)noxys-apiW25-263dP1
COMP-3PDF renderer worker (Typst container + brand kit)noxys-pdf-renderer (new internal sidecar)W25-265dP1
COMP-4EU AI Act + GDPR + ISO 42001 templates (Pro baseline)noxys-pdf-rendererW25-264dP0
COMP-5ISO 23894/27001 + NIS2 + DORA + CRA templates (Enterprise)noxys-pdf-rendererW27-285dP2
COMP-6Console — Compliance Reports page (UX + scheduling + history)noxys-consoleW27-283dP1
COMP-7Narrative LLM integration (reuses AI-PLACE-6 RAG)noxys-apiW27-282dP2
COMP-8i18n PDF templates (12 locales × 8 frameworks)noxys-pdf-rendererW29-303dP2
COMP-9PAdES qualified signature (Enterprise legal-grade)noxys-api + noxys-pdf-rendererW29-302dP3

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)