Breaking change: the Cloud dev credential is now fail-closed (#114)
An unset or empty TOKENFUSE_CLOUD_KEYS no longer grants the built-in devkey admin access. The control plane now starts with an empty keyset and rejects all requests (401, with a loud error log) until you either configure real keys via TOKENFUSE_CLOUD_KEYS or explicitly opt in to the dev credential with TOKENFUSE_CLOUD_ALLOW_DEVKEY=1. Any deployment that relied on the implicit devkey must set one of these before upgrading.
Fixes found by live infrastructure validation (Hetzner, AWS, GCP)
- x-api-key forwarding: the gateway forwards Anthropic's native auth header upstream, so pointing
TOKENFUSE_UPSTREAMatapi.anthropic.comworks out of the box (#100) - raft ledger: a follower's lagging local snapshot of a just-opened run no longer panics a worker under burst load; enforcement stays with the linearized
reserve()(#101) - price book: 2026 models (
claude-haiku-4-5and friends) are priced exactly instead of via the conservative fallback; the book lives inpricebook.rswith 9 models (#102) - Wardryx PEP: a first-turn request that merely declares a forbidden tool is denied, not only one that invokes it (#103)
- Wardryx PEP: the decision cache key includes the attestation method, so an unattested agent can no longer inherit a recently-attested allow within the cache TTL (#110)
Hardening
- semantic cache: array-shaped system prompts are folded into the partition key, closing a cross-context cache-serve risk (#115)
- the unreachable
UnknownRunreserve arm fails closed instead of bypassing the budget, and the cache's single-tenant reality is documented honestly (#116)
Docs
VALIDATION.md: the live-infrastructure validation record (3-node and 4-box raft consensus, real Anthropic traffic, cross-cloud cost accounting on Hetzner/AWS/GCP)- LICENSE copyright holder unified to TAIPANBOX; CONTRIBUTING and SECURITY added
Images: ghcr.io/taipanbox/tokenfuse:v0.4.0 (plus the :v0.4.0-cluster raft-HA variant), tokenfuse-control-plane:v0.4.0, tokenfuse-dashboard:v0.4.0.