Architecture Explorer
Interaktivt diagram over hele teknologistacken. Klikk på hver komponent for å se: Hvorfor valgt? Alternativer som ble forkastet. Tradeoffs. Dette er "Why?" per teknologi.
☁️ Cloudflare Edge Network
Cloudflare Workers
Compute på edge. Cold start < 1ms. Ingen server management.
Hvorfor: Globalt edge, cold start ~0ms, native AI Gateway, D1/R2 binding, Workers AI.
Alternativer forkastet: Vercel (vendor lock-in, dyrere), Fly.io (ingen native D1/AI Gateway), Lambda@Edge (kompleks, dyrere).
Tradeoff: Mindre mature ecosystem enn AWS, men for vår stack (D1+R2+AI Gateway) uunnværlig.
Alternativer forkastet: Vercel (vendor lock-in, dyrere), Fly.io (ingen native D1/AI Gateway), Lambda@Edge (kompleks, dyrere).
Tradeoff: Mindre mature ecosystem enn AWS, men for vår stack (D1+R2+AI Gateway) uunnværlig.
AI Gateway
Tokens, cost, latency, caching, rate limiting per model/tenant.
Hvorfor: Native observability for AI-kall. `cf-aig-metadata` gir tenant_id, audit_id, agent_id, trace_id.
Alternativer forkastet: Egen observability-stack (Langfuse, Helicone) — dobbelt arbeid, ingen native CF-integrasjon.
Tradeoff: Kun Cloudflare-modeller + OpenAI/Anthropic via Gateway. Men dekker våre behov.
Alternativer forkastet: Egen observability-stack (Langfuse, Helicone) — dobbelt arbeid, ingen native CF-integrasjon.
Tradeoff: Kun Cloudflare-modeller + OpenAI/Anthropic via Gateway. Men dekker våre behov.
D1 (SQLite)
Serverless SQL. Multi-tenant via application-layer isolation. Append-only evidence ledger.
Hvorfor: SQLite-semantikk, ACID, branch-preview, native Workers binding, kostnad ~$0.
Alternativer forkastet: PostgreSQL (Neon, Supabase) — cold start, connection pooling kompleksitet, dyrere.
Tradeoff: Ingen native RLS → application-layer isolation. SQLite-limitter (ALERT på store JOINs).
Alternativer forkastet: PostgreSQL (Neon, Supabase) — cold start, connection pooling kompleksitet, dyrere.
Tradeoff: Ingen native RLS → application-layer isolation. SQLite-limitter (ALERT på store JOINs).
R2 (Object Storage)
S3-kompatibelt. Zero egress fees. Tenant prefix isolation: `tenant/{tenantId}/...`
Hvorfor: Ingen egress fees (kritisk for evidence-filer), S3 API, Workers binding.
Alternativer forkastet: S3 (egress fees), Cloudflare Images (for spesialisert), Supabase Storage (vendor lock-in).
Tradeoff: Ingen native lifecycle policies (bygger selv).
Alternativer forkastet: S3 (egress fees), Cloudflare Images (for spesialisert), Supabase Storage (vendor lock-in).
Tradeoff: Ingen native lifecycle policies (bygger selv).
Cloudflare Pages
Static site + Functions. `arch.axn.no` + `app.arch.axn.no`. Build: `npm run build` → deploy.
Hvorfor: Native CF integration, preview deployments, custom domains, SSL, CDN.
Alternativer forkastet: Vercel (ingen D1/R2 binding), Netlify (samme), GitHub Pages (ingen Functions).
Tradeoff: Bygg-pipeline må kjøre `npm run build` før deploy (2-stegs).
Alternativer forkastet: Vercel (ingen D1/R2 binding), Netlify (samme), GitHub Pages (ingen Functions).
Tradeoff: Bygg-pipeline må kjøre `npm run build` før deploy (2-stegs).
🤖 Agent Orchestration Layer
Hermes (Chief Architect)
Orkestrerer 6 agenter. State machine. Policy enforcement. Human gates.
Hvorfor: En single source of truth for audit state. Unngår distributed agent chaos.
Alternativer forkastet: LangGraph (for kompleks, Python-only), AutoGen (ingen governance), CrewAI (for høy-level).
Tradeoff: Mer kode å vedlikeholde, men full kontroll og auditability.
Alternativer forkastet: LangGraph (for kompleks, Python-only), AutoGen (ingen governance), CrewAI (for høy-level).
Tradeoff: Mer kode å vedlikeholde, men full kontroll og auditability.
6 Spesialiserte agenter
Discovery, Evidence, Process, Automation, Risk, Critic. Hver: autonomy A0–A5, policy-enforced tools.
Hvorfor: Separation of concerns. Critic-agent fanger hallucinasjoner. Evidence-agent kun E3+ tools.
Alternativer forkastet: Én monolitisk agent (ingen governance), for mange agenter (overhead).
Tradeoff: Inter-agent communication via Hermes (ikke direkte A2A/MCP — yet).
Alternativer forkastet: Én monolitisk agent (ingen governance), for mange agenter (overhead).
Tradeoff: Inter-agent communication via Hermes (ikke direkte A2A/MCP — yet).
OPA/Rego Policy Engine
Runtime authorization. ALLOW/DENY/REQUIRE_APPROVAL. Decision log immutable i D1.
Hvorfor: Policy-as-code. Testable i CI (`opa test`). WASM i Workers. Audit trail.
Alternativer forkastet: Cedar (AWS, mindre mature tooling), Casbin (Go-focused), custom middleware (ingen audit trail).
Tradeoff: Rego lærekurve. Men `opa test` er game-changer for CI/CD gates.
Alternativer forkastet: Cedar (AWS, mindre mature tooling), Casbin (Go-focused), custom middleware (ingen audit trail).
Tradeoff: Rego lærekurve. Men `opa test` er game-changer for CI/CD gates.
📊 Observability & Data
OpenTelemetry Export
Trace export til Datadog/Honeycomb/Grafana. Spans: user → orchestrator → agent → model → tool → policy → evidence.
Hvorfor: Standardisert observability. Unngår vendor lock-in. Cloudflare AI Gateway eksponerer OTel.
Alternativer forkastet: Proprietær tracing (ingen standard), Langfuse (AI-only, ingen infra traces).
Tradeoff: Mer setup enn "bare logg til console".
Alternativer forkastet: Proprietær tracing (ingen standard), Langfuse (AI-only, ingen infra traces).
Tradeoff: Mer setup enn "bare logg til console".
Evidence Store (D1)
Append-only. Hash + classification (E0–E4). Temporal validity. Graph traversal: Finding → Evidence → Source.
Hvorfor: Evidence-first prinsipp. Alle funn sporbar til kilde. E4 = system-verified = full vekt i ROI.
Alternativer forkastet: Vector DB (ingen provenance), Document store (ingen relasjoner), Graph DB (overkill).
Tradeoff: SQL for grafer = recursive CTEs. Men D1 støtter det.
Alternativer forkastet: Vector DB (ingen provenance), Document store (ingen relasjoner), Graph DB (overkill).
Tradeoff: SQL for grafer = recursive CTEs. Men D1 støtter det.
Deterministic ROI Engine
Pure functions. Scenarier (LOW/EXPECTED/HIGH). Variable classification: MEASURED/CUSTOMER_PROVIDED/DERIVED/BENCHMARK/ASSUMED.
Hvorfor: Ingen LLM i ROI-beregning. 100% testbar. Spoarbarhet: hver krone til input.
Alternativer forkastet: LLM-basert ROI (hallusinerer tall), Spreadsheet (ingen versjonering/audit trail).
Tradeoff: Krever at input er klassifisert riktig. Men det er en feature, ikke bug.
Alternativer forkastet: LLM-basert ROI (hallusinerer tall), Spreadsheet (ingen versjonering/audit trail).
Tradeoff: Krever at input er klassifisert riktig. Men det er en feature, ikke bug.