Architecture Decision Records¶
Chronological log of architectural decisions. MADR format.
The table below is generated from each ADR's front-matter by
.githooks/check-adr-index.py and enforced by the adr-index pre-commit hook.
Do not hand-edit it — change the ADR, then run the hook with --write.
| # | Date | Title | Status |
|---|---|---|---|
| 0001 | 2026-04-15 | Record architecture decisions | accepted |
| 0002 | 2026-04-15 | Dual cloudflared tunnels with per-zone ExternalDNS | accepted (partial — LB path dropped) |
| 0003 | 2026-04-15 | IPv6 phased rollout — ULA in-cluster first, global via BGP later | proposed |
| 0004 | 2026-04-15 | :latest tag remediation plan |
accepted |
| 0005 | 2026-04-18 | Control-plane hardening (etcd + kube-apiserver) | proposed |
| 0006 | 2026-04-19 | Office CP quiesced: 3-member etcd + home-only apiserver-office-2 (interim) | superseded — reverted to 4-member cluster 2026-05-05 |
| 0007 | 2026-05-22 | Ubuntu 24.04 LTS → 26.04 LTS migration | accepted |
| 0008 | 2026-06-26 | (withdrawn) | withdrawn — Intel Arc passthrough for Obico ML; removed with the Obico decommission (commit 6172b8f2); number retired, do not reuse |
| 0009 | 2026-05-25 | Replace igir with an in-cluster Go-based ROM curator | accepted |
| 0010 | 2026-05-25 | Defer multi-site Kyverno split | accepted (defer) |
| 0011 | 2026-05-26 | Five Cluster-Hygiene Workloads | accepted |
| 0012 | 2026-05-26 | Two Cluster Rescue Workloads | accepted |
| 0013 | 2026-05-27 | Alertmanager Webhook URL Update | accepted |
| 0014 | 2026-05-27 | Adding New Components and Workflows | accepted |
| 0015 | 2026-05-27 | Hybrid GitOps for Apps with PVC-Only Runtime State | proposed |
| 0016 | 2026-05-28 | Disable leader election for NFS subdir-external-provisioners | accepted |
| 0017 | 2026-05-28 | Tightening CNPs for Authentik + open-webui | accepted |
| 0018 | 2026-05-29 | cluster-mcp shim — read-only Open WebUI RAG surface for Zed/Claude | proposed |
| 0019 | 2026-05-29 | Long-term metrics sink: VictoriaMetrics | proposed |
| 0020 | 2026-05-30 | Media Stack Dashboard Updates | accepted |
| 0021 | 2026-05-30 | Alternate Web Frontend Deployment | accepted |
| 0022 | 2026-06-04 | Deterministic Schedule Jitter for AI CronWorkflows | accepted |
| 0023 | 2026-06-04 | Consolidation of Coverage Scanners into a Unified Auditor | accepted |
| 0024 | 2026-06-05 | Introducing the Adult Studio as a New Component in the Adult System | accepted |
| 0025 | 2026-06-05 | Introducing Proactive Scheduling with New Components and Topology | accepted |
| 0026 | 2026-06-24 | Stateless Cluster Helper Failover and Scheduling Adjustments | accepted |
| 0027 | 2026-06-24 | High Availability for Argo Workflows During Office Outage | accepted |
| 0028 | 2026-06-25 | Codify PVE Reboot Recovery Procedures | accepted |
| 0029 | 2026-07-10 | Northlight autonomous operation: agent-approved reviews + self-renewing goals | accepted |
| 0030 | 2026-07-13 | All AI/GPU consumers route through LiteLLM — never directly to a backend | accepted |
| 0031 | 2026-07-10 | Daily FK-safe Control-plane DB Prune CronJob | accepted |
| 0032 | 2026-07-11 | Generalizing Org Reconciliation Across the Fleet | accepted |
| 0033 | 2026-07-11 | Qwen3.6 Palette Flip to B60 Unified Backend | accepted |
| 0034 | 2026-07-12 | Improve Paperclip Resilience and Data Management | accepted |
| 0035 | 2026-07-13 | Retention Period Adjustment for Paperclip DB Janitor | accepted |
| 0036 | 2026-07-13 | etcd Snapshot Count and Upgrade Playbook Robustness | accepted |
| 0037 | 2026-07-17 | Dedicated private API Gateways | accepted |
| 0038 | 2026-07-19 | Upgrade Jellyfin to 12.0-rc2 for B580 VA-API Transcoding | accepted |
| 0039 | 2026-07-14 | Easy/hard difficulty routing uses LiteLLM's native auto-router, not a standalone semantic-router service | accepted |
| 0040 | 2026-07-14 | Migrating home PVCs to the Longhorn v2 storage class | accepted |
| 0041 | 2026-07-14 | Node Feature Discovery + Intel GPU NodeFeatureRule for GPU node labeling | accepted |
| 0042 | 2026-07-17 | cordana: integrate the P1 knowledge and execution spine | accepted |
| 0043 | 2026-07-17 | Isolate the SABnzbd API on a private hostname | superseded by ADR-0037 — hostname split stands, isolation mechanism replaced |
| 0044 | 2026-07-20 | Cordana governed compute plane | superseded by ADR-0045 — governance-plane split stands, whole-card ownership reversed |
| 0045 | 2026-07-20 | Enforced GPU co-residency, not whole-card ownership | accepted |
| 0046 | 2026-07-20 | Retire the bounded-lane-champion challenger; make baseline-adopted a signable outcome | accepted |
| 0047 | 2026-07-24 | Adjusting Timeouts and Retry Logic for Improved System Reliability | accepted |
| 0048 | 2026-07-24 | Restoring Qwen3-30B to Unordered Backend Pool | accepted |
| 0049 | 2026-07-21 | Security Context Hardening for Multiple Workloads | accepted |
| 0050 | 2026-07-21 | Fixing False Positives and Hardening Security in Kyverno Policies | accepted |
| 0051 | 2026-07-25 | Unifying Workstation AI CLIs with LiteLLM and Shared Hindsight Memory | accepted |
| 0052 | 2026-07-25 | Event-Driven Renovate Runs and Etcd Version Cap | accepted |
| 0053 | 2026-07-26 | Updating arxiv-mcp and litellm Docker Images and Versioning Strategy | proposed (auto-drafted by adr-suggester) |
| 0054 | 2026-07-26 | Deriving Cauda-N Suffix from Deployment Image Tag | proposed (auto-drafted by adr-suggester) |
| 0055 | 2026-07-27 | Migrate paperless-ngx to allauth OIDC with Authentik | proposed (auto-drafted by adr-suggester) |
| 0056 | 2026-07-27 | Disable Enterprise-gated SSO and Use Built-in Admin Login | proposed (auto-drafted by adr-suggester) |
Process¶
- Use
/add-adrskill to create the next ADR. - Each ADR is append-only; if a decision is superseded, update its status and link forward to the new ADR.
- Keep ADRs focused on architectural decisions — operational tweaks belong in
STATE.md.