diff --git a/CHANGELOG.md b/CHANGELOG.md index 6b170ee..654c0ea 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,34 @@ # changelog +## 0.4.0 + +The protocol/service split. `network.bsky.jetstream.*` is a Bluesky service +API, not atproto — the same line Bluesky drew splitting `@bsky/sdk` out of +`@atproto/api` at the Jetstream v2 launch (2026-08-13). zat is now the +protocol side of that line. + +- **BREAKING**: `zat.ArchiveBackfill` (released through 0.3.30) moved to + [zat.dev/jetstream](https://tangled.org/zat.dev/jetstream), the zig + jetstream service SDK, along with the streamplace example, the archive + smoke script, and the vendored decode-only libzstd (zat links no zstd at + all now). Archive consumers: depend on the `jetstream` package; it + delivers the same `zat.JetstreamEvent`s through the same handler. +- `zat.JetstreamClient` (the v1 `/subscribe` wire) remains here, functional + and deprecated-in-home, until its consumers migrate; the subscribeEvents + v2 client lands in the jetstream repo. +- **feat**: `zat.Datetime` — the atproto datetime profile as a first-class + syntax type next to Tid/Did/Nsid/Rkey: `parse` (offsets normalized to + UTC, arbitrary fractional digits truncated at microseconds, the spec's + year-zero floor enforced on the normalized instant) and `toString` + (canonical `YYYY-MM-DDTHH:MM:SS.ffffffZ`). The atproto interop datetime + fixtures now drive this parser directly. Civil math is Hinnant's + days_from_civil/civil_from_days — signed and exact over 0000..9999, + unlike std.time.epoch. Deliberate divergences from general RFC 3339 + parsers (reject leap-second `:60`, reject `-00:00`, upper-case T/Z only) + are the atproto spec's, cross-checked against rust's jiff and chrono and + documented in the type. Replaces four hand-rolled formatters in stream + and the SDK example's 45-line parser. + ## 0.3.30 Every phase of an HTTP fetch is now bounded. The 2026-08-13 zlay authority