Skip to content

Latest commit

 

History

History
46 lines (32 loc) · 3.47 KB

File metadata and controls

46 lines (32 loc) · 3.47 KB

Petrel 0.2.0 Release Candidate

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.

Highlights

  • 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 $type discriminator 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, Sendable first-level overlay roots. PetrelCatbird and PetrelBluemoji can extend the same ATProtoClient.Blue value 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.

Source compatibility

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.

Requirements

  • 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.

Security release gate

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.