chore(release): 4.0.0 - #87
Merged
Merged
Conversation
3.x already broke: `ascii_credentials_only` was added as a public field
to a struct with no `#[non_exhaustive]`, so any downstream
`ServerProfile { .. }` literal stops compiling. That break has to be paid
for with a major either way, and marking the struct non-exhaustive is
itself breaking -- so it can only ride the same bump. Doing it now means
the next field addition is additive instead of another major.
Nothing in the workspace constructs the struct literally outside the
defining crate; both other crates already go through
`ServerProfile::builtin` / `::custom_default`, which is the contract the
doc comment now states.
Also clears three stale intra-doc links that `cargo doc` has been
failing on -- `SigField::cert_field` (no such item; it is
`SigFieldValue::Cert`), a private-item link to `font_data`, and an
unqualified `claim_ping`. CI does not run rustdoc, so these were only
visible locally, and they would have rendered broken on docs.rs for a
release that cannot be republished.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019eECjwAir8Csz7iHp8EPYQ
Version-bearing files moved together so the tag, the crates, the stores
and the signer version recorded in signed PDFs all agree:
- rust/Cargo.toml [workspace.package] and the three internal path-dep
requirements, plus the lock
- rust/packaging/linux metainfo (the Snap adopts its version here)
- python/pyproject.toml, the constants.py fallback and its test
- typescript/package.json
python/appimage/ metainfo is deliberately left at 1.2.1: it feeds only
the retired Python Flatpak manifest and no active release path reads it.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019eECjwAir8Csz7iHp8EPYQ
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.
Release prep for 4.0.0. Nothing here changes app behaviour — the two user-facing fixes it ships were merged earlier (#85 and the non-ASCII credentials fix).
Why a major
ServerProfileinrevenant-sign-coregained a publicascii_credentials_onlyfield on a struct that had no#[non_exhaustive], so any downstreamServerProfile { .. }literal stops compiling. That break is already in the tree and has to be paid for with a major.Since a major is being spent anyway, the struct is now marked
#[non_exhaustive]— that is itself breaking, so this is the only release it can ride, and it keeps the next field addition additive. Nothing in the workspace constructs the struct literally outside the defining crate; both other crates already useServerProfile::builtin/::custom_default.The Python and TypeScript packages keep their public surface.
Also in
499affbThree stale intra-doc links that
cargo dochas been failing on:SigField::cert_field(no such item — it isSigFieldValue::Cert), a private-item link tofont_data, and an unqualifiedclaim_ping. CI does not run rustdoc, so these were invisible; they would have rendered broken on docs.rs for a version that cannot be republished.Version-bearing files moved together
rust/Cargo.toml[workspace.package]+ the three internal path-dep requirements +Cargo.lockrust/packaging/linux/…metainfo.xml— new<release>entry (the Snap adopts its version from here)python/pyproject.toml, theconstants.pyfallback, and its testtypescript/package.jsonpython/appimage/metainfo stays at 1.2.1 on purpose: it feeds only the retired Python Flatpak manifest and no active release path reads it.Plan after merge
Tag
v4.0.0-rc.1first as a full pipeline rehearsal (TestPyPI, npmnext, GitHub prerelease), thenv4.0.0once it comes back clean. Version Guard accepts a prerelease tag against a4.0.0tree.🤖 Generated with Claude Code
https://claude.ai/code/session_019eECjwAir8Csz7iHp8EPYQ