# commons — ledger ## v0.2.2 - **fidelity fix (HIGH):** `addr.geo.fetch_location` state slug now uses an underscore separator and an NFKD ascii-fold, matching the original `utils.py` contract the live proxy `region-` token depends on (`New York` → `new_york`, `Québec` → `quebec`). The rewrite had produced a hyphen slug with no fold (`new-york`), which silently routed multi-word states to an unrecognized region. Added `_state_slug`; routed `_parse_reverse` through it. ## v0.2.1 - floor `retry`/`aretry` `attempts` at 1 (was: `attempts=0` silently returned None). - retry log uses total `attempts` as the denominator (was `attempts-1` → `retry 1/2`). - geo lookups forward the per-request `timeout` to `session.get` on the injected-session path (was honored only on the owned-session path). ## v0.2.0 - added the `retry` module: `retry` (sync) + `aretry` (async), call-form or decorator, exponential backoff with optional full jitter, `on=` narrowing, `give_up` early-stop, fail-loud re-raise of the last exception. ## v0.1.0 - initial: timing (unix deltas + tz Clock), paths (dotted deep_get/set), masking (card/cvv/token display), addr (ip utils + geo behind the `[addr]` extra).