diff --git a/CHANGELOG.md b/CHANGELOG.md index 7090091..8a32d68 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # changelog +## 0.1.4 + +- adopt ZAT 0.5.2 and ZTTP 0.1.2 so signed `RateLimit-Reset` timestamps + reach the archive retry policy. An expired negative reset retains precedence + over a conflicting `Retry-After`, matching Atmos v0.4.0. +- add a regression for negative reset precedence; no SDK call-site changes. + ## 0.1.3 - enable live dictionary compression by default, refresh rejected dictionaries, diff --git a/README.md b/README.md index 64055db..62ba468 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ draws at the protocol: zat speaks atproto; this SDK speaks ## use ```sh -zig fetch --save https://tangled.org/zat.dev/jetstream/archive/v0.1.3.tar.gz +zig fetch --save https://tangled.org/zat.dev/jetstream/archive/v0.1.4.tar.gz ``` ```zig diff --git a/build.zig.zon b/build.zig.zon index 9b51646..3a8b1ef 100644 --- a/build.zig.zon +++ b/build.zig.zon @@ -1,6 +1,6 @@ .{ .name = .jetstream, - .version = "0.1.3", + .version = "0.1.4", .minimum_zig_version = "0.16.0-dev.3070+b22eb176b", .fingerprint = 0xee435acce6d720e8, .dependencies = .{ @@ -9,8 +9,8 @@ .hash = "N-V-__8AAPZ7fwBg4JoCzM_0o2A8wxH2hsUUeiU1iuZv53L5", }, .zat = .{ - .url = "https://tangled.org/zat.dev/zat/archive/v0.5.1.tar.gz", - .hash = "zat-0.5.1-5PuC7g0iDAAsD79O5oQaB1q1M3Dq7EOONdlfvIE0sSis", + .url = "https://tangled.org/zat.dev/zat/archive/v0.5.2.tar.gz", + .hash = "zat-0.5.2-5PuC7j8iDAD9QHlZfpf-U4qgyTpHA3u2i_Ni4T34soV3", }, .websocket = .{ .url = "https://tangled.org/zzstoatzz.io/websocket.zig/archive/v0.1.12.tar.gz", diff --git a/docs/compression-review.md b/docs/compression-review.md index 699ca36..e02c9da 100644 --- a/docs/compression-review.md +++ b/docs/compression-review.md @@ -94,3 +94,8 @@ header contract: RateLimit-Reset takes precedence over Retry-After and is a signed Unix timestamp. The current HTTP helper prioritizes Retry-After and also interprets small reset values as relative delays. This is broader than the previously recorded negative-value edge and is not fixed in this release. + +The signed-reset follow-up is adopted in SDK 0.1.4 via ZAT 0.5.2 and ZTTP +0.1.2. The SDK already enforced Atmos reset precedence and Unix-time semantics; +its new regression verifies a negative reset remains authoritative over +Retry-After. ZTTP retains its separate generic delay helper policy. diff --git a/src/archive_backfill.zig b/src/archive_backfill.zig index f24fbd7..b34dab7 100644 --- a/src/archive_backfill.zig +++ b/src/archive_backfill.zig @@ -1665,3 +1665,7 @@ test "retry hints prefer absolute reset and bound missing expired and large valu try std.testing.expectEqual(@as(u64, 0), retryHint(.{ .retry_after_at = 90 }, 100 * sec)); try std.testing.expectEqual(@as(u64, 30 * sec), retryHint(.{ .retry_after = std.math.maxInt(u64) }, 100 * sec)); } + +test "negative reset takes precedence over retry after" { + try testing.expectEqual(@as(u64, 0), retryHint(.{ .reset = -1, .retry_after = 9 }, 100 * std.time.ns_per_s)); +}