This candidate hardens generated wire behavior and establishes one safe shared namespace anchor for overlay packages. It is not a published release until the matching tag and hosted release gates exist.
The 0.2.0 SPM package and its release gates cover Swift. Kotlin publication and parity are outside this release gate.
- Generated query and procedure clients decode declared errors by their exact lexicon names.
- Declared endpoint errors retain their terminal HTTP body after authentication handling and the existing retry budget, so generated typed parsers see the actual protocol error.
- Exact wire discriminators retain underscore-bearing fragments instead of reconstructing them from Swift symbols.
- Registered typed values keep their top-level
$typediscriminator when round-tripped through JSON or DAG-CBOR value containers. - The DAG-CBOR/DAG-JSON bridge round-trips Blob, Bytes, CID, null, nested containers, and integer values within the signed 64-bit range without dropping positions or rounding values; out-of-range CBOR unsigned integers are rejected.
- Generated Swift is a closed, deterministic projection. Petrel deletes only stale Swift files bearing its exact ownership header and formats output with the pinned SwiftFormat release.
- Petrel owns immutable,
Sendablefirst-level overlay roots. PetrelCatbird and PetrelBluemoji can extend the sameATProtoClient.Bluevalue in one consumer. - Shared authentication refresh work is now awaited to completion, so every caller observes the real refresh result or failure.
- PetrelLoad validates its supported CLI contract and returns a failing process status for failed stress or OAuth verification scenarios.
- The release gate builds the DocC catalog with warnings treated as errors under the sealed toolchain tuple.
Pages deployment remains deferred to P5.5, when repository settings and the deployment model can be configured together. Candidate documentation workflows validate read-only and do not commit or push generated output.
Generated namespace types changed from reference classes to immutable structs. This intentional pre-1.0 break removes lazy mutable storage and unchecked sendability. Code that only follows computed namespace properties, such as client.app.bsky or client.blue.catbird, continues to use the same call shape. Code that explicitly names a generated namespace as a class, relies on identity, subclasses it, or mutates its storage must be updated.
The API compatibility gate accepts only the reviewed full SwiftPM diagnostics for that namespace class-to-struct transition. Other removals, visibility reductions, or signature changes remain release blockers.
- Swift tools 6.0
- iOS 18 or newer
- macOS 15 or newer
- Linux with Swift 6.0.3 in the pinned release lane
Local Xcode 27 beta validation is advisory evidence only. Hosted Xcode 16.3 (build 16E140) and newest-stable Xcode jobs remain required before publication.
The hosted tag guard rejects a tag whose commit is not on the fetched
origin/main history. Branch and tag protection plus prepublication hosted
evidence for the exact candidate SHA remain P5.5 blockers; the post-tag guard
does not replace those controls.
GitHub private vulnerability reporting is disabled at this candidate checkpoint. Enabling the intended advisory route documented in SECURITY.md is a pre-tag blocker; no email address or response SLA has been invented for this release.