chore(release): prepare 0.17.0 - #83
Merged
Merged
Conversation
Bump the version constant, consolidate the per-PR Unreleased entries into a release section organized by user-visible value, and correct four claims that would otherwise have shipped: - The embedded database's memory cost. Two source comments disagreed with each other, one saying ~6 MB and one ~50 MB. Measured against SwiftIP2ASN 0.5.1: a copy is ~15 MB, and the first load takes process footprint to ~51 MB because the decoder's 8x scratch buffer is retained by the allocator rather than returned. Recorded in BENCHMARKS.md with the reproduction and with where a further reduction would have to happen, which is the upstream format. - The default ASN strategy. The doc comment still said the default was .dns two lines above the bullet marking .hybrid(.embedded) as the default. - The dependency note claimed taking SwiftIP2ASN 0.5.0 pinned our CI. It pins nothing: Package.resolved is gitignored, and consumers resolve independently. We test against 0.5.1, which is what `from: "0.4.1"` actually resolves to. - The cold-resolution figures, which were inherited rather than reproduced. Re-measured in release: 0.187s on .dns against 0.059s on .hybrid(.embedded). The debug build inverts that ordering, so BENCHMARKS.md now says to compare in release only. Drop the two roadmap items this release completed, leaving the reverse-DNS cache sharing that did not ship and stating the eviction-scoping problem that blocks it. Rewrite the lifecycle design doc to describe what exists rather than what was proposed, and cite it from README so it does not depend on a roadmap entry for its home. Verified on this branch: 126 tests pass with live network, swift-format lint clean, DocC builds warning-free, `diagnose-api-breaking-changes v0.16.0` reports no breaking changes, and the release binary reports 0.17.0. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017sTdURjHTGgQ5j5vY6uhTm
codex-review caught the release notes and the lifecycle design doc asserting that PublicIPSource lets a caller tell seeded addresses apart by trust level. It does not: seedPublicIP takes the parameter and discards it, caching every accepted address identically, and nothing reads it back. State that plainly on the enum, on the parameter, and in the release notes, and record the real decision in the design doc's open questions: either persist the source and act on the difference, or drop a required argument that does nothing. Resolving that is API design and does not belong in a release-prep change. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017sTdURjHTGgQ5j5vY6uhTm
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Plain English
This gets the repository ready to tag 0.17.0. No library behavior changes here: it bumps the version constant, turns the running list of per-pull-request notes into release notes a consumer can actually read, and fixes several statements that were wrong and would have shipped as documentation.
The release itself is additive.
swift package diagnose-api-breaking-changes v0.16.0reports no breaking changes, so consumers upgrade with a version bump. Two runtime behaviors do change for an unmodified caller, and both are now stated at the top of the notes: ASN lookups use the embedded database by default instead of DNS, and strict IPv4 validation rejects malformed dotted strings that used to be classified from a prefix.Corrections, and how each was checked
Four claims were wrong. Each was verified by measurement or by reading the code, not by trusting the commit that introduced it.
.dns, two lines above the bullet marking.hybrid(.embedded)as the default.Package.resolvedis gitignored and SwiftPM ignores a library's resolution when it is consumed, so nothing is pinned. The requirementfrom: "0.4.1"actually resolves to 0.5.1 today, which is what this release is tested against..dnsagainst 0.059s on.hybrid(.embedded), both resolving 10/10. Worth knowing for anyone who repeats this: in a debug build the ordering inverts, because decompressing and parsing the database is roughly eight times slower unoptimized. BENCHMARKS.md now says to compare in release only.Roadmap and design doc
Two queue items shipped in this cycle and are removed: the cache and network-transition lifecycle work, and the STUN redundancy fix. What did not ship is sharing a reverse-DNS cache between tracer instances, which stays, now stating the reason it is blocked: eviction is per-instance, so one tracer's network change would clear a sibling's entries, and sharing needs eviction scoped by network identity first.
The lifecycle design document described the APIs as proposals. They exist, so it now describes them in the present tense, records which of its open questions the implementation answered, and is cited from README rather than depending on a roadmap entry that will eventually be removed.
Verification
126 tests pass with live network enabled.
swift format lint --strictis clean, DocC builds with warnings as errors, the release binary and its JSON output both report 0.17.0, and the API digester against v0.16.0 reports no breaking changes.After this merges
Tag the merge commit
v0.17.0as an annotated tag, which the release workflow requires, thengh release createfrom the consolidated notes.🤖 Generated with Claude Code
https://claude.ai/code/session_017sTdURjHTGgQ5j5vY6uhTm