Releases: kabirnarang39/wardline
Release list
v2.0.1
Changelog
- da39fa6: ci: add CI, release, and goreleaser workflows (@kabirnarang-ux)
- 2c71c4a: ci: publish multi-arch GHCR images on release; slim README to landing page (@kabirnarang-ux)
- 20c55a2: ci: use golangci-lint-action@v7 for golangci-lint v2 config (@kabirnarang-ux)
- b95ff29: fix(shutdown): add bounded readiness-drain window so /readyz 503 is observable (@kabirnarang-ux)
- 335ea15: refactor: extract runServe wiring into named helpers (@kabirnarang-ux)
v2.0.0
Wardline v2.0.0 — the v2.0 milestone (273+ commits since v1.0.4), closing out the roadmap's "v2.0 (shipped)" feature set plus a security + docs hardening pass.
Highlights since v1.0.0
- Federation — cross-instance anomaly correlation over signed, pseudonymized peer summaries.
- ML-based anomaly detection + auto-block — combined z-score
ml_scoreheuristic and a real, time-bounded auto-block enforcement action. - SSO / SCIM + tenant isolation — OIDC and mTLS/SPIFFE credential bootstrap, SCIM-provisioned RBAC, tenant enforced end to end.
- Three policy backends — YAML, OPA/Rego, and Cedar; policy enforcement widened to MCP
resources/*andprompts/*. - Compliance evidence export hardening — RSA-PSS signing +
verify-evidence, scheduled export, log retention, redacted identities, live aggregate API. - Policy-pack marketplace — YAML/OPA/Cedar pack variants, versioning,
compose, and an operator-packs-dir. - HA — Postgres-backed budget counters, anomaly baselines, distributed auto-block, and signing-key rotation (JWKS
kid). - gRPC transport — a second listener running the same identity → policy → budget → audit → auto-block pipeline.
- Pixel-parity web dashboard with read-only Policy/Budget/RBAC/Anomalies/Blocked views and clickjacking protection.
This release's hardening pass
- Security fix: SCIM
PATCHdeactivate no longer silently204s a no-op — a missingOperationswrapper or unsupported op returns400, so an offboarding can't report success without applying. - Refresh-token reuse detection + family revocation — replaying a consumed refresh token is treated as theft: the whole token family is revoked atomically (
SELECT … FOR UPDATEacross replicas), logged as a SECURITY event, and masked to a generic 401. - Anomaly baseline pruning — abandoned/renamed replicas' Postgres baseline rows are cleaned up automatically on the GC tick.
- gRPC upstream TLS —
grpc_upstream_tlsdials the upstream over TLS instead of plaintext. verify-evidenceclosed file-set — rejects a bundle carrying files outside its checksum manifest.- Helm chart now exposes the full config surface (rbac, anomaly, scim, federation, compliance, retention, credential OIDC/mTLS, gRPC).
- Docs reconciled with shipped features; new gRPC transport + Federation pages; complete CLI/config reference; a live
make demo.
Single static Go binary, Apache-2.0. No database, IdP, or sidecar required to start.
v1.0.4
Patch release: fixes code blocks being nearly invisible in light mode across many docs pages (Chroma's inline dark-tuned text color wasn't overridden the way the background was). Also fixes table field-name code chips wrapping mid-word.
No functional or behavioral changes to Wardline itself.
Docs: https://kabirnarang39.github.io/wardline/docs/
Site: https://kabirnarang39.github.io/wardline/
v1.0.3
Patch release: fixes the docs site sidebar forcing every page to be at least full-viewport-tall, which pushed the footer down below a large dead-space gap on short pages instead of directly after the content. Also tightens the "on this page" TOC rail's spacing where entries wrap to multiple lines.
No functional or behavioral changes to Wardline itself.
Docs: https://kabirnarang39.github.io/wardline/docs/
Site: https://kabirnarang39.github.io/wardline/
v1.0.2
Patch release: marketing site and docs site redesigned to match the dynobox.xyz visual design system — Familjen Grotesk + IBM Plex Mono typography, the same accent color, numbered index-label sections, dark/light alternating full-bleed layout, and the docs site's dark-first sidebar/topbar layout with a working light/dark toggle.
Also fixes several rendering bugs introduced in the initial redesign pass: a broken full-bleed dark section, a leaked screen-reader-only table caption, unstyled inline code in prose, and a placeholder install command in the footer.
No functional or behavioral changes to Wardline itself.
Docs: https://kabirnarang39.github.io/wardline/docs/
Site: https://kabirnarang39.github.io/wardline/
v1.0.1
v1.0.0
v0.5.0
Wardline v0.5.0 — first tagged release.
Wardline is a control-plane proxy that sits between AI agents and the MCP servers they call, enforcing identity, policy, budget, and audit.
Highlights
- OPA policy backend — Rego-based policy evaluation as an alternative to the built-in YAML rules engine, selectable via
policy_backend: opa. - Budget enforcement — per-identity request-rate throttling (
budget.requests_per_window/window_seconds), composes correctly with either policy backend. - OpenTelemetry tracing — every proxied request emits a span with the routing decision, exportable via OTLP.
- Web UI dashboard — a read-only ops SPA (
features.web_ui) showing a live audit stream, policy state, and system status, served directly off the Wardline binary. - Framework integration docs — verified guides for MCP clients, LangChain, LlamaIndex, the OpenAI Agents SDK, and CrewAI, including real, tested denial/error-handling behavior for each.
- Postgres-backed audit storage — durable audit persistence (
features.postgres_storage) alongside the existing stdout/file writer. - Helm chart — a production-ready chart (
charts/wardline) with a multi-stage Dockerfile, restricted-PodSecurity-Standards-compliantsecurityContext, config/policy checksum annotations forcing rollout on change, and TCP-socket health probes. - MCP protocol pass-through: the proxy now speaks the full JSON-RPC handshake (
initialize,notifications/initialized), not justtools/call, unblocking real MCP client compatibility.
Verified end-to-end
All five optional features (OPA, budget, tracing, dashboard, Postgres storage) are proven to compose correctly in a single process via TestServeEndToEnd_AllFeaturesCombined — exercising allow, throttle, and deny paths together and confirming every sink (Postgres, the dashboard's live feed, the OTLP exporter) receives consistent events from the same request lifecycle.