diff --git a/CHANGELOG.md b/CHANGELOG.md index e8957b2..554af79 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ This project follows [Semantic Versioning](https://semver.org/). ## [Unreleased] +## [0.3.0] — 2026-10-19 + Pre-1.0 (SemVer 0.x): the change under **Breaking** ships without a deprecation cycle. ### `makegov-tango` @@ -61,6 +63,10 @@ Pre-1.0 (SemVer 0.x): the change under **Breaking** ships without a deprecation - **The SBIR topic `agency` filter is documented as organization-resolved.** It rolls up the hierarchy (`HHS` includes NIH topics) and falls back to the raw agency text only for a token that does not resolve; the docs said it never resolved. - **API errors now carry the server's reason when it is nested under `detail`.** A 403 or other non-2xx response the SDK had no dedicated variant for kept a top-level `detail`, `message` or `error` string, but a structured body such as a plan gate's `{"detail": {"error": "...", "code": "tier_required"}}` left `Error::Api`'s `message` at `API request failed with status 403`, so a caller refused for a plan-gated filter couldn't tell why. The message is now the API's own explanation (`tango: API error (status 403): The 'psc' filter requires a Small plan or higher.`), and the parsed body stays on `response`. When a body carries several of these keys, `error` now wins over `message` and `detail`, matching the Python SDK. Non-JSON bodies, such as a proxy's 502 page, keep the old message. +### `makegov-tango-webhooks` + +No changes; the version moves to 0.3.0 in lockstep with `makegov-tango`. + ## [0.2.0] — 2026-09-23 Pre-1.0 (SemVer 0.x): the removals under **Breaking** ship without a deprecation cycle. diff --git a/Cargo.lock b/Cargo.lock index 0f49709..7516a2b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1209,7 +1209,7 @@ checksum = "4050469837a6ff301cd14c1f8f24f88549e6d548f24f64e2148eb0f72cebc51f" [[package]] name = "makegov-tango" -version = "0.2.0" +version = "0.3.0" dependencies = [ "bon", "futures", @@ -1227,7 +1227,7 @@ dependencies = [ [[package]] name = "makegov-tango-webhooks" -version = "0.2.0" +version = "0.3.0" dependencies = [ "hex", "hmac", diff --git a/Cargo.toml b/Cargo.toml index 8419be0..831faf2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,7 +7,7 @@ members = [ exclude = ["examples"] [workspace.package] -version = "0.2.0" +version = "0.3.0" edition = "2021" rust-version = "1.80" license = "MIT" diff --git a/README.md b/README.md index 7cc12d5..ffe14ba 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ Official, async-first Rust SDK for the [Tango API](https://tango.makegov.com) — federal contracts, IDVs, entities, opportunities, grants, vehicles, and more, with dynamic response shaping so you fetch only the fields you need. -> **Pre-1.0 — v0.2.0.** The resource surface now tracks the sibling SDKs endpoint for endpoint, but the public API may still shift before v1.0.0. Pin to a specific version if you depend on this in production. +> **Pre-1.0 — v0.3.0.** The resource surface now tracks the sibling SDKs endpoint for endpoint, but the public API may still shift before v1.0.0. Pin to a specific version if you depend on this in production. The sibling SDKs are `tango-python`, `tango-node` and `tango-go`. This Rust port ships the full transport, error model, retry / rate-limit handling, webhook signing (in the separate `tango-webhooks` crate), and the resource-method surface. Same `0.x → 1.0` graduation logic as Go: the transport and types are stable; the surface stabilizes once it has been verified against the live API alongside the siblings. @@ -25,10 +25,10 @@ The sibling SDKs are `tango-python`, `tango-node` and `tango-go`. This Rust port ```toml [dependencies] -makegov-tango = "0.2" +makegov-tango = "0.3" # Optional: webhook signing for receivers -makegov-tango-webhooks = "0.2" +makegov-tango-webhooks = "0.3" ``` Crates publish under the `makegov-` prefix on crates.io; Rust imports stay short — `use tango::Client;` and `use tango_webhooks::verify;` — thanks to a `[lib] name` shim in each crate (same pattern as the `aws-sdk-*` family). diff --git a/docs/WEBHOOKS.md b/docs/WEBHOOKS.md index f9f154a..fec0b2d 100644 --- a/docs/WEBHOOKS.md +++ b/docs/WEBHOOKS.md @@ -34,7 +34,7 @@ A typical setup: ```toml [dependencies] -makegov-tango-webhooks = "0.1" +makegov-tango-webhooks = "0.3" ``` The crate publishes as `makegov-tango-webhooks` on crates.io and imports as `use tango_webhooks::...` thanks to a `[lib] name` shim.