docs/adr/. Update when a decision is reversed or superseded.Proposed · Accepted · Superseded by ADR-NNNN · Deprecated.
2026-05-23 · sourced from docs/adr/0001-deployment-tier-model.md
Context: EU mid-market customers split sharply on data sovereignty preferences. Pure SaaS works for some; others require their identity + secret data to never leave their network.
Decision: Three tiers — pure SaaS (control plane in vendor cloud), tier-3 hybrid (agent in customer VPC + CP in vendor), full on-premise (everything in customer K8s). Default: tier-3.
Why not full SaaS only: lose ~40% of EU procurement TAM. Many CISOs reject any identity data in third-party SaaS.
Why not full on-premise only: ~3-month implementation cost is uneconomical for SMB. Lose < €1M ACV deals.
Tradeoff accepted: tier-3 doubles connector complexity (in_process + agent + tunnel modes per engine).
2026-05-23 · sourced from docs/adr/0002-connector-protocol-versioning.md
Context: Tier-3 agents run in customer infra at versions older than the control plane. Wire protocol between CP and agent must be stable across deploys.
Decision: Versioned Pydantic Request/Response envelopes (app/domain/connector_protocol/v1.py) with a ConnectorDispatcher wrapper. Don't break wire-shape without a version bump. Phase 1 = v1 schemas + dispatcher. Phase 2 (deferred) = explicit version negotiation on agent connect.
Why not gRPC + proto3: heavier client; harder for customer ops to debug. JSON over HTTPS wins on diagnosability.
Why version 1 first instead of running unversioned: agents in production now; breaking change later is hard.
2026-05-23 · sourced from docs/adr/0003-pii-classification.md
Context: Under tier-3 + GDPR, the goal is for PII to remain in customer VPC. Today the CP holds full identity rows (full name, email, manager_email). A future evolution: CP holds only opaque IDs + non-PII attributes; agent dereferences PII on demand.
Decision: Classify every ORM column as PII / non-PII / pseudonym. Phase 1 (done): tagging. Phase 2 (deferred): tier-3 storage split. Phase 3 (future): customer-side encryption at rest for PII columns.
Why not implement Phase 2 now: would block IVIP-roadmap. Defer until first regulated customer demands it contractually.
Risk accepted: extra DPA work to defend the "PII in vendor CP" position. Counter-arg: ALL EU SaaS competitors store the same PII in their own SaaS (Saviynt EIC, SailPoint IdentityNow, etc.) — we're not worse.
No proposed ADRs at the moment. Open a new one in docs/adr/ via PR.
Use the template (docs/adr/README.md has it). Key sections:
Number sequentially (0004-...), date in ISO format, status Accepted only after merge. Don't change accepted ADRs — write a superseding one.