Releases: runcycles/cycles-client-rust
v0.2.4
Changed
- Crates.io description and keywords broadened to cover the three pillars of
Cycles' runtime authority: spend, risky tool actions, and audit gaps. Prior
framing ("budget-management protocol — deterministic spend control") only
surfaced the spend dimension and missed search-intent traffic for action
control and audit-trail use cases. - Keyword set updated from
["cycles", "budget", "llm", "ai-agents", "cost-control"]to["ai-agents", "llm", "budget", "governance", "audit-log"]. Same five-keyword cap, broader coverage. README.mdopening reorganized around the three pillars (spend / risky
actions / audit gaps), each with a one-line concrete affordance, instead
of leading with budget enforcement only.
No behavioral changes. API surface, wire protocol, and conformance audit
results are identical to 0.2.3.
v0.2.3 — 404 unit-mismatch diagnostic
Fixed
-
Misleading 404 on reserve / decide / event when the request unit does not match the stored budget's unit (#8). The server indexes budgets by the composite
(scope, unit)key, so reserving in the wrong unit surfaces as"Budget not found for provided scope: …"even when the scope itself has an ACTIVE budget.create_reservation,create_reservation_with_metadata,decide, andcreate_eventnow enrich such 404s in-flight with the unit that was sent, so the mismatch is self-diagnosing. All otherError::Apifields (status,code,request_id,retry_after,details) are preserved unchanged — no behavioral change for other errors.Example enriched error:
Api { status: 404, code: Some(NotFound), message: "Budget not found for provided scope: tenant:rider (request was sent with unit=TOKENS; verify an ACTIVE budget exists at this scope AND unit — the server indexes budgets by (scope, unit), so a mismatched unit surfaces as a 404 NOT_FOUND)", request_id: Some("..."), ... }
Docs
Amount,WithCyclesConfig::new, thewith_cycles_usageexample, and the README Quick Start all note the(scope, unit)budget indexing invariant (spec line 667) so new users don't hit this.
Tests
- 5 new unit tests (
client::tests::enrich_budget_not_found_*) and 4 new wiremock integration tests (create_reservation_404_*,decide_404_*,create_event_404_*, plus a non-matching 404 pass-through control). Coverage 95.55% (472/494 lines), above the 95% project threshold.
Server-side follow-up
The underlying misleading 404 is a server diagnostic gap, tracked as runcycles/cycles-server#79. Once the server fix (v0.1.25.6) is deployed, wrong-unit requests return structured 400 UNIT_MISMATCH with details.{scope, requested_unit, expected_units} directly — the client enrichment in this release remains forward-compatible and will simply stop firing on the wrong-unit case (still fires for truly-missing 404s). Retirement of the workaround is tracked in #10 and is non-urgent.
Install
[dependencies]
runcycles = "0.2.3"Full diff: v0.2.2...v0.2.3 · PR: #9 · crates.io: runcycles 0.2.3 · docs.rs: runcycles 0.2.3
v0.2.2 API helpers, ergonomics
What's Changed
- fix: API ergonomics from dev feedback (0.2.2) by @amavashev in #5
Full Changelog: v0.2.1...v0.2.2
v0.2.1 doc update
Updated README, version
Full Changelog: v0.2.0...v0.2.1
v0.2.0 - Initial public release
What's Changed
- Add complete Rust client for Cycles budget authority protocol by @amavashev in #1
- fix(ci): bump MSRV from 1.75 to 1.88 by @amavashev in #2
- fix(ci): pass rust-versions explicitly to avoid MSRV mismatch by @amavashev in #3
- chore: exclude internal files from crates.io package by @amavashev in #4
New Contributors
- @amavashev made their first contribution in #1
Full Changelog: https://github.com/runcycles/cycles-client-rust/commits/v0.2.0