Architecture
Wardline follows Clean Architecture with a feature-sliced layout: each
capability (proxy, policy, audit, credential issuance, RBAC, budget,
anomaly detection, compliance export, policy-pack marketplace, health)
owns its own domain/ (entities + interfaces, no I/O), usecase/
(business logic, depends only on domain interfaces), and adapter/
(translates to/from the outside world — HTTP handlers, file loaders,
Postgres) — rather than one repo-wide domain/usecase/adapter split
shared across every feature.
This matters to an operator mainly for one reason: every pluggable engine (policy backend, identity issuer, budget limiter) is a domain-defined interface, so adding a new backend never requires changing the business logic that consumes it — new policy backends (YAML today, OPA and Cedar already shipped) are a real example of this in production, not a theoretical claim. See Writing a policy backend if you want to extend this yourself.
Everything is wired together once, in cmd/wardline/main.go — the
composition root. Nothing outside main.go imports a concrete adapter
directly.