• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

ilpanich / axiam-rust-sdk / 31325324461
94%

Build:
DEFAULT BRANCH: main
Ran 09 Aug 2026 05:06PM UTC
Jobs 1
Files 30
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

09 Aug 2026 05:01PM UTC coverage: 95.289% (+0.3%) from 94.94%
31325324461

push

github

web-flow
feat: contract 1.8 — §16 retry, §17 memo, §18 close(), §19 telemetry (D5) (#45)

* feat(retry,telemetry): §16 retry policy and §19 hooks; contract 1.8 re-sync

Re-vendors CONTRACT.md at 1.8 and lands the two foundation modules the rest of
D5 builds on. Wiring them into the authz surface, plus §17's decision memo and
§18's close(), follow in this branch.

§16 — the policy that was being required but never defined. §11.2 rule 5 and
§14.2 rule 6 had both been telling SDKs to retry "under the SDK's existing
bounded read-only retry policy" while no such policy existed in the contract.
This crate's improvisation was backon's ExponentialBuilder defaults with
with_max_times(2): no jitter, no Retry-After. Contract 1.8 wrote the table
down; src/retry.rs implements it.

Hand-rolled rather than reconfigured, for two reasons backon cannot express:

- Full jitter. §16.1 requires the wait to be uniform over [0, backoff].
  backon's with_jitter() adds a random value in [0, min_delay) on top of the
  backoff — a much narrower distribution. The difference is the entire point
  of the clause: partial jitter keeps every client's retries clustered around
  the same instant, causing the thundering herd retries are meant to prevent.
- Retry-After. backon has no seam for a server-supplied floor on the wait.

Both non-deterministic inputs are injected behind traits (Jitter, Sleeper), as
§16.7 demands — "a test that really waits 200 ms is a test nobody runs". The
tests pin the jitter fraction to 0.0 and 1.0 to prove the range really is
[0, backoff] and not backoff ± something, and record delays instead of taking
them, so the whole file runs in 0.12 s.

Two design points worth flagging:

- Retry-After is NOT clamped to the 5 s delay cap. My first implementation
  clamped it and my own test caught the contradiction: that cap governs the
  computed backoff, while §16.1 makes the hint a floor with no ceiling.
  Clamping it would retry sooner than the server said it would be ready,... (continued)

601 of 612 new or added lines in 6 files covered. (98.2%)

38 existing lines in 2 files now uncovered.

4996 of 5243 relevant lines covered (95.29%)

31.37 hits per line

Uncovered Changes

Lines Coverage ∆ File
5
68.75
src/telemetry.rs
4
92.89
-0.25% src/client.rs
1
99.47
src/memo.rs
1
99.61
src/retry.rs

Coverage Regressions

Lines Coverage ∆ File
29
92.89
-0.25% src/client.rs
9
97.08
0.08% src/rest/auth.rs
Jobs
ID Job ID Ran Files Coverage
1 31325324461.1 09 Aug 2026 05:06PM UTC 30
95.29
GitHub Action Run
Source Files on build 31325324461
  • Tree
  • List 30
  • Changed 3
  • Source Changed 3
  • Coverage Changed 3
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #31325324461
  • 45af97bc on github
  • Prev Build on main (#31282660216)
  • Next Build on main (#31366119818)
  • Delete
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc