23ea72d01e
feat(keycloak): reconcile client redirect URIs, not just client secrets
jakman85andClaude Opus 52026-09-12 21:09:04 -05:00
51d8676f90
feat(keycloak): render the client-URL desired state from the realm import
jakman85andClaude Opus 52026-09-12 20:57:39 -05:00
fa4deac877
fix(conformance): the dirty-tree assertion must judge HONOURED evidence
jakman85andClaude Opus 52026-09-12 21:12:55 -05:00
a317493bca
merge: R-NET-06 re-proven on prod (recovery in <=3s)
jakman852026-09-12 21:10:57 -05:00
c66a7e29e9
fix(conformance): the harness contradicted itself in two places
jakman85andClaude Opus 52026-09-12 21:10:38 -05:00
155df8ee3f
test(conformance): R-NET-06 PROVEN on prod — vpn-killswitch re-run from a clean tree
jakman85andClaude Opus 52026-09-12 20:52:47 -05:00
9d0814ae61
test(conformance): R-NET-06 run against prod — L1 proven, L3 pass recorded -dirty
jakman85andClaude Opus 52026-09-12 20:48:55 -05:00
16c6234696
feat(monitoring): alert when egress steering goes stale, not just when tun0 dies
jakman85andClaude Opus 52026-09-12 20:46:56 -05:00
19fc8bcb27
merge: VPN egress gateway on prod, plus three datapath fixes
jakman852026-09-12 18:15:02 -05:00
53e09a2610
docs(vpn): dev recovered the minute prod left the shared PIA server
jakman85andClaude Opus 52026-09-12 18:12:46 -05:00
9b97e073e2
merge: main (velero R2 + arr config PVC) into feat/vpn-egress-prod
jakman852026-09-12 18:11:18 -05:00
38e4bf1459
docs(vpn): record the PIA server collision, and the accidental proof it handed us
jakman85andClaude Opus 52026-09-12 18:09:31 -05:00
37a6c94168
fix(vpn): two gateways on one pinned PIA server evict each other every 2 minutes
jakman85andClaude Opus 52026-09-12 18:05:49 -05:00
04606d48b2
docs(vpn): stop crediting the nftables kill-switch for a drop it never makes
jakman85andClaude Opus 52026-09-12 17:57:52 -05:00
60e3f09c67
feat(vpn): prod egress-gateway group — k3s-prod-3, singleton, opt-in only
jakman85andClaude Opus 52026-09-12 17:38:46 -05:00
6f698f59af
fix(vpn): Cilium never re-resolves tun0 — the gateway dies on every reconnect
jakman85andClaude Opus 52026-09-12 17:38:27 -05:00
839f7fed4a
merge: velero works against R2 — plugin pin, NFS volume policy, metrics
jakman852026-09-12 17:20:55 -05:00
2d5171e064
feat(velero): scrape the backup controller — three critical alerts could never fire
jakman85andClaude Opus 52026-09-12 17:17:06 -05:00
2e259a808f
fix(velero): prod backups could not write metadata to R2, and opt-out FSB would have shipped 8.6 TiB
jakman85andClaude Opus 52026-09-12 17:12:37 -05:00
3ec67bafdd
merge: platform-admins may reach the media app UIs
jakman852026-09-12 17:15:14 -05:00
5da116b34d
fix(oauth2-proxy): platform-admins may reach the media UIs — the immediate 403
jakman85andClaude Opus 52026-09-12 17:12:05 -05:00
6b953cc56b
fix(arrs): the config PVC was mounted where the app never looks
jakman85andClaude Opus 52026-09-12 16:35:18 -05:00
f5e62d9169
merge: bulk NFS volumes for plex, sonarr, radarr and nextcloud
jakman852026-09-12 16:26:31 -05:00
daac05e7e8
feat(bulk): prod mounts the NFS export through pfSense's WAN address
jakman85andClaude Opus 52026-09-12 16:25:20 -05:00
da8a0eac04
test(l0): R-STATE-04 gets a real check — bulk storage provably is not the replicated tier
jakman85andClaude Opus 52026-09-08 00:03:34 -05:00
cac413e87a
feat(cnpg): synchronous replication, quorum of 1, dataDurability preferred
jakman852026-09-07 23:36:46 -05:00
82aff4d053
feat(apps): attach the media library and the legacy Nextcloud dataset over NFS
jakman85andClaude Opus 52026-09-07 23:54:13 -05:00
2590bc4317
feat(env): BULK_NFS_SERVER — the one knob prod cannot answer yet, and why it is a placeholder
jakman85andClaude Opus 52026-09-07 23:47:39 -05:00
cec550045b
feat(storage): the bulk tier becomes real — static NFS PVs, authored once per environment
jakman85andClaude Opus 52026-09-07 23:45:09 -05:00
f338e91770
feat(cnpg): instances 3 on all three Clusters — a standby to fail over to
jakman852026-09-07 23:33:40 -05:00
161430d915
feat(backup): the overlay picks the credential — BACKUP_CREDENTIALS_SUFFIX
jakman85andClaude Opus 52026-09-07 01:41:56 -05:00
e7c4a95c2d
feat(backup): the four backup credentials become TWO objects each, one per environment
jakman85andClaude Opus 52026-09-07 01:38:22 -05:00
0a0527e7db
feat(backup): prod's off-cluster DR lands on R2 — and stops the WAL clock
jakman85andClaude Opus 52026-09-07 01:11:39 -05:00
dc2d1ce17e
fix(conformance): the R-NET-04 scan descended into nested agent worktrees
jakman85andClaude Opus 52026-09-07 01:01:53 -05:00
6a8953e288
feat(prod): observability for the two failure modes that went unseen, plus OIDC self-healing
jakman85andClaude Opus 52026-09-07 00:59:22 -05:00
3ade1d440f
fix(conformance): status.py read its own detection vocabulary as a TODO marker
jakman85andClaude Opus 52026-09-06 20:24:22 -05:00
cb1916f092
feat(conformance): cover R-PLAT-01, R-NET-04, R-SEC-03 — 88.2% -> 94.1%, and fix an unrecordable-proof defect
jakman85andClaude Opus 52026-09-06 19:35:18 -05:00
5ec1460532
docs: DECISIONS-LOG — prod solidified, four cold-start bugs of one shape
jakman85andClaude Opus 52026-09-06 18:51:00 -05:00
a984442cae
harden: pin node timezone to UTC, and TEST the guard/value coupling that bit us
jakman85andClaude Opus 52026-09-06 08:47:08 -05:00
b7d6ba3d5f
fix(kyverno): unblock CDI imports by SATISFYING the label requirement, not exempting it
jakman85andClaude Opus 52026-09-06 08:41:05 -05:00
da3e9cc3f3
fix(kyverno): unblock CDI imports by SATISFYING the label requirement, not exempting it
jakman85andClaude Opus 52026-09-06 08:41:05 -05:00
834928c237
fix(gitops): CDI cold-start deadlock repaired IN THE GRAPH, not by a pre-apply
jakman85andClaude Opus 52026-09-05 11:53:45 -05:00
04569abd78
docs(prod): node-maintenance runbook — a failed drain leaves a cordon that stops self-healing
jakman85andClaude Opus 52026-09-06 08:35:41 -05:00
21e111b08c
feat(devcontainer): dev.sh can target prod — and cannot silently target the wrong cluster
jakman85andClaude Opus 52026-09-05 16:38:32 -05:00
fe45d0f5c5
feat(conformance): cover R-TLS-02, R-ENV-01, R-ENV-03 — 42/51 -> 45/51, and find a real gap
jakman85andClaude Opus 52026-09-05 14:17:03 -05:00
8f9b2e4270
feat(backup): s3check proves a real round trip — and revives a guard I had killed
jakman85andClaude Opus 52026-09-05 13:24:26 -05:00
59ffbaf11a
feat(conformance): L2 tests derive their environment from the cluster, not a literal
jakman85andClaude Opus 52026-09-05 12:05:05 -05:00
765ad032db
fix(gitops): CDI cold-start deadlock repaired IN THE GRAPH, not by a pre-apply
jakman85andClaude Opus 52026-09-05 11:53:45 -05:00
32d67660a6
feat(backup): move off-cluster DR to Cloudflare R2 (operator decision 2026-09-05)
jakman85andClaude Opus 52026-09-05 11:29:22 -05:00
9063e53ce2
docs(prod): prod verified end-to-end through the real resolver — dnsmasq profile installed
jakman85andClaude Opus 52026-09-05 11:11:53 -05:00
6d62aca0d2
feat(workstation): prod dnsmasq profile — and CORRECT the topology I had wrong
jakman85andClaude Opus 52026-09-05 11:08:54 -05:00
b80e8eef82
feat(backup): prod shares dev's MinIO — plus the path tenancy that makes it survivable
jakman85andClaude Opus 52026-09-05 10:59:50 -05:00