The operator ruled the implementation repo's main (50c8719) the latest and accepted state. Sync the spec to it. Accepted changes are reflected: one bare-metal environment, TrueNAS bulk storage, R2 off-cluster backup, CloudNativePG, single-node VPN gateway with Cilium fail-closed, inbound WireGuard, per-app auth sidecars, Renovate, the CI gate as approver, and the pm-agent. New ADR-0017..0025; ADR-0016 corrected and accepted; R-* IDs unchanged, eight amended. Where the implementation has simply not met a requirement, the requirement stands and the shortfall is recorded in docs/16-known-gaps.md. Co-Authored-By: Claude Opus 5.5 <[email protected]>
9.5 KiB
9.5 KiB
Glossary
Shared vocabulary for this platform. If you introduce a term, define it here. When a word could mean two things (e.g. "VM"), this file disambiguates.
Platform concepts
- PaaS — Platform-as-a-Service; here, containerized workloads onboarded via GitOps.
- IaaS — Infrastructure-as-a-Service; here, virtual machines run inside the cluster via KubeVirt, managed through the same Kubernetes surface.
- ServiceDefinition — the operator-facing YAML object that declares a service's intent
(kind, source, storage, egress, exposure, dependencies, update policy, observability). The
platform renders concrete resources from it. See
docs/13-service-catalog.md. - Renderer — the catalog tool that generates a service's concrete manifests from its ServiceDefinition; generated output is not hand-edited.
- Wave — a dependency-ordered group of rendered apps reconciled and health-gated together, so a failing service holds back only its own wave and those above it.
- Golden path — the standard flow a service follows from catalog entry to running/monitored/
updated. See
docs/01-architecture-overview.md. - C2 / Command & Control — the UI at the root
home.keithjackson.dev. Seedocs/12-command-center-ui.md. - Apex — the root name
home.keithjackson.dev, which serves the C2 UI.
The two kinds of VM (do not conflate)
- Infrastructure VM (Layer 1) — a cluster node: a bare-metal mini-PC, imaged and managed by Ansible, not KubeVirt. The name is historical.
- Application VM (Layer 2) — an IaaS workload running inside the cluster via KubeVirt, managed by Kubernetes/GitOps like a container.
Networking
- Default-deny — the baseline where no service may talk to another unless explicitly allowed at the port level (R-NET-01).
- Egress class — a service's declared outbound path:
internet(standard WAN) orvpn(commercial VPN tunnel). Seedocs/03-networking-isolation-and-egress.md. - Exposure class — how a service is reachable:
internal(LAN/VPN-only) orpublic(published through the Cloudflare Tunnel, ADR-0016). A registered platform route may also bepublic. - Cloudflare Tunnel — the outbound-only connection from in-cluster cloudflared to Cloudflare that
carries all public HTTP(S) ingress; public records are proxied CNAMEs to
<uuid>.cfargotunnel.com(ADR-0016). - Kill-switch — the guarantee that a
vpn-class workload leaks nothing to the plain internet if the tunnel drops (R-NET-06); fail-closed. - Multi-WAN — multiple upstream internet uplinks with routing-rule-based selection. Out of scope: the site has one WAN (OQ-1).
- Egress VPN — the outbound path that carries
vpn-class pods to the internet through the commercial tunnel (ADR-0015, ADR-0020). - Remote-access VPN — the inbound WireGuard path that lets the operator's own devices join the LAN (ADR-0021). It shares nothing with the egress VPN but the word.
- Hairpin — a LAN client reaching a service through the site's own public address; the edge cannot be relied on for it, so no path may depend on it (R-DNS-04).
- L4 VIP — a LAN virtual IP that exposes a non-HTTP service directly, outside the shared Gateway.
- kube-vip — the virtual IP that gives the Kubernetes API one HA endpoint across the 3 servers.
- Egress Gateway — Cilium feature steering selected pods' egress through a chosen node/identity.
- Hubble — Cilium's flow-observability tool; the audit surface for isolation/egress.
- Gateway API — the Kubernetes standard for north-south ingress, implemented here by Cilium.
- Split-horizon DNS — serving different answers to internal vs. external clients for the same name.
Storage
- Longhorn — distributed replicated block storage across the 3 nodes (default 3 replicas). The durable home for app/config state and VM disks.
- Bulk tier — a separate storage class for large media (Plex library, downloads) that is not
3× replicated (R-STATE-04): NFS from a standalone TrueNAS, outside platform backup (ADR-0018). See
docs/04-storage-and-state.md. - CNPG (CloudNativePG) — the operator that runs the platform's replicated PostgreSQL clusters and archives them off-cluster with Barman (ADR-0019).
- CDI — Containerized Data Importer; provisions KubeVirt VM disks onto Longhorn PVCs.
- Velero — cluster backup/restore orchestration to an off-cluster target (DR).
- DR drill — a tested restore of resources + volumes proving R-STATE-03.
Delivery & lifecycle
- GitOps — desired state lives in git and is reconciled into the cluster automatically (pull-based). Engine: Flux CD.
- Drift correction — Flux reverting live changes back to git-declared state (R-GITOPS-03).
- Renovate — bot that opens machine-authored version-bump PRs for images and charts, and auto-merges those in the allowed classes through the merge gate (R-UPD-02, ADR-0023).
- Blast-radius component — an operator-designated platform component whose machine-authored update waits for human review (R-UPD-02).
- PM agent — the in-cluster AI Program Manager (pm-agent) that turns issues into pull requests;
it never pushes to
mainor merges (ADR-0025). - SOPS + age — the secret-encryption scheme; secrets live encrypted in git, decrypted in-cluster.
- cert-manager / ACME DNS-01 / Let's Encrypt — the trusted, automated TLS pipeline (R-TLS-*).
- ExternalDNS — controller that publishes DNS records from declared service intent.
Identity & access
- IdP (Identity Provider) — the central authority for user identity and login. Here: Keycloak
(
docs/15-identity-and-access.md). - SSO (Single Sign-On) — log in once, reach every integrated service without re-authenticating.
- OIDC (OpenID Connect) — the token-based auth protocol services use to federate to Keycloak natively (a Keycloak client).
- Forward-auth — an identity-aware proxy (oauth2-proxy) that authenticates a request against Keycloak before forwarding it — used for apps without native OIDC.
- Forward-auth sidecar — the per-app oauth2-proxy container that enforces forward-auth inside the app's own pod, rather than at the Gateway (ADR-0022).
- Realm — a Keycloak tenant/namespace holding the platform's users, groups, and clients.
- Group — a Keycloak grouping that drives per-service authorization (
auth.groupsin a ServiceDefinition); the basis for least-privilege access (R-IDP-06). - Break-glass — a documented emergency access path (e.g. a local admin on Gitea) so an IdP outage doesn't lock the operator out of recovery tools.
Environments
- dev/test — the former cluster that proved the platform; decommissioned 2026-09 (ADR-0017).
- prod — 3× mini-PC bare-metal cluster; the one live environment.
- Overlay — environment-scoped configuration (Kustomize/vars) layered on shared base config; the only thing a future environment would change (R-ENV-02).
Governance
- Requirement ID (
R-*) — a stable, referenceable requirement fromdocs/00-vision-and-scope.md. - ADR — Architecture Decision Record; an append-only, superseding-only decision ledger under
decisions/. - Workstream (
WS-*) — a durable area of ownership; maps to an agent role. - Acceptance gate — an automated, reproducible behavior test a change must pass to be "done"
(
agents/definition-of-done.md,docs/14-testing-and-conformance.md). - Open Question (
OQ-n) — a tracked unknown that may block specific tasks until answered.
Testing & conformance
- Behavior-based test — a test asserting observable system behavior (Given/When/Then), not implementation internals; a policy object existing is not proof it enforces (R-TEST-01).
- Reproducible test — deterministic, hermetic, version-pinned, single-command, environment- agnostic; identical pass/fail on any conforming cluster (R-TEST-02).
- Conformance suite — the aggregate, requirement-tagged test set that gates merges and phase
exits; green suite = progress (R-TEST-03). See
docs/14-testing-and-conformance.md. - Fault-injection test — a test that breaks something (tunnel down, node killed, bad update) and asserts a fail-closed / no-data-loss outcome; required for safety-critical behavior (R-TEST-05).
- Conformance layers (L0–L3) — L0 static policy and repo checks; L1 offline render checks; L2
behavior on a live cluster; L3 fault injection. See
docs/14-testing-and-conformance.md. - Covered vs. proven — a requirement is covered when an executable test exists for it, and proven only when a recorded run of that test passed at the current revision on the cluster it claims.
- Coverage report — the generated map of every
R-*requirement → its verifying test(s); an uncovered requirement is an unmet requirement (R-TEST-04). - Spec immutability (to agents) — the rule that AI agents may not modify the specifications
(
docs/, requirements, accepted ADRs, roadmap); they escalate spec problems to the human and never weaken a spec/test to pass (R-TEST-06). Agents edit implementation, tests, and the task board only.