v0.1.25.51 — protocol idempotency and replay hardening
This release hardens protocol idempotency, replay integrity, hierarchical budget attribution, and corrupt-expiry observability without changing the public schema.
Protocol correctness
- Shares the reserve endpoint idempotency namespace between live and dry-run requests, returning
409 IDEMPOTENCY_MISMATCHwhen the same key changes request form or payload. - Makes slow, uncontested non-persisting evaluations publish safely after claim expiry while preventing overwrite by a newer winner.
- Preserves pre-upgrade dry-run results through the legacy namespace bridge and detects independently lost companion hashes by value shape.
- Marks only scopes that individually fail to cover capped commit/event charges as over-limit.
Replay and expiry hardening
- Stores immutable event response snapshots and repairs missing fast response caches without re-dispatching webhooks or synthesizing changed bodies.
- Opportunistically backfills pre-snapshot event rows while their canonical response remains available.
- Quarantines malformed expiry rows with durable reason/timestamp metadata, WARN logging, and bounded
cycles.reservations.quarantinedmetrics. - Normalizes missing/non-textual quarantine tenants to the existing
UNKNOWNmetric tag.
Compatibility
- No request or successful-response schema changes.
- Mixed-version deployments may return a transient retriable 500 from an older pod while a new dry-run marker is live (at most 60 seconds); the documented production topology remains single-instance.
- Production and full-stack compose defaults pin
ghcr.io/runcycles/cycles-server:0.1.25.51.
Validation
- 1,140 tests passed: 31 model, 531 data, 578 API; zero failures, errors, or skips.
- Protocol contract coverage 11/11; JaCoCo line coverage 95.11% data and 95.56% API.
- Focused adversarial Redis suite 64/64, including three-state CAS and bidirectional value-shape mismatch cases.
- Three benchmark-profile trials completed with zero concurrent errors and no measurable regression.
Full details: CHANGELOG.md [0.1.25.51], AUDIT.md, BENCHMARKS.md, and PR #238.