Prepare 3.4.10: version, release notes, and the sign-in docs - #37
Merged
Merged
Conversation
Four things that all have to be true before a release can be cut, and none of which are true today. **The version.** The .deb version comes from app/package.json, so a release built from 3.4.9 declares 3.4.9 again. apt only upgrades on a higher version, so no existing user would ever receive it - and since the pool rebuild landed, reprepro now skips the incoming package entirely and the repository keeps serving the old binary. 3.4.10 rather than 3.4.9-linux2 because the latter is greater to dpkg but a *semver prerelease*, so it sorts below 3.4.9 for any comparison the application itself makes. Verified both ways round rather than reasoned about. **The release notes.** generate-release-notes.ts requires an entry in changelog.json for the upstream version behind an initial tag, and exits 1 without one - so the release job fails before it publishes anything. Adding 3.4.10 fixes that, but exposed a second problem: every fork-authored entry was silently dropped, because the entry regex requires a "- #1234" tail naming an upstream issue. Our changes have no upstream issue, and a fork PR number in that position would render as a link to an unrelated issue in desktop/desktop. Entries may now omit the tail. Confirmed by rendering both 3.4.10 and 3.4.9 - the upstream notes still produce issue links and contributor credit. **The sign-in change.** The device flow is the most visible change in this release and nothing documented it. A user who sees a one-time code where a sign-in page used to be has no way to tell whether it is working as intended. **Signing out.** It no longer revokes the token on github.com, because revoking one requires the client secret this application deliberately no longer ships. That is a security-relevant regression and it needs to be written down where someone handing over a machine will find it. While there: the organization-access entry described this as an OAuth App and linked the OAuth App approval flow. It is a GitHub App, so those are the wrong screens - the application does not appear in them at all. Already wrong before this release; corrected now that the release puts sign-in in front of people. Both replacement links checked.
Cam8863
approved these changes
Aug 27, 2026
Cam8863
pushed a commit
that referenced
this pull request
Aug 27, 2026
The version chosen in #37 cannot be used. This repository inherited 301 release-* tags from the lineage it forked from, running up to release-3.4.14-linux1, and release-3.4.10-linux1 has existed since 2025-02-09. Release tags are immutable under the org ruleset, so none of 3.4.10 to 3.4.14 can be reused. I checked dpkg and semver ordering when picking 3.4.10 and did not check whether the tag was free. 3.5.0 rather than 3.4.15. Both are free and both are clean in dpkg and semver ordering, but either one decouples this fork's numbering from upstream's - the difference is only whether that is visible. A minor bump says so, where skipping five patch numbers looks like an accident. It is also the more honest description of what is in here: seven major versions of Electron and a rewritten sign-in are not a patch release. 3.4.9-linux2 was the truthful alternative and was rejected on cost. It is a semver prerelease, so it sorts *below* 3.4.9 - release-notes.ts builds a SemVer from the running version and filters for releases newer than it, which would make the app offer 3.4.9's notes as "what's new" to someone who had just upgraded past it. Release notes re-rendered for 3.5.0-linux1: 0 unparsed entries. Co-authored-by: guys-inc-ops[bot] <321481384+guys-inc-ops[bot]@users.noreply.github.com>
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.
Everything that has to be true before
release-3.4.10-linux1can be tagged. Two of these are hard blockers — the release job fails, or publishes something wrong, without them.1. The version — blocker
The
.debversion comes fromapp/package.json, so a release built from3.4.9declares3.4.9again. apt only upgrades on a higher version, so no existing user would ever receive it. And since the pool rebuild landed in #36, reprepro now skips the incoming package outright and the repository keeps serving the old binary — the one with the OAuth secret in it.3.4.10, not3.4.9-linux2. The latter looks like the natural fork revision and is greater to dpkg, but it is a semver prerelease, so it sorts below 3.4.9 for any comparison the application itself makes:3.4.10is correct in both orderings, and3.4.10-linux1satisfiesisInitialTag()so the notes script works with no code change to that path.2. The release notes — blocker
generate-release-notes.tsrequires achangelog.jsonentry for the upstream version behind an initial tag and callsprocess.exit(1)without one.3.4.10was absent, so the release job would have failed before publishing anything.Adding the entry exposed a second problem. Every fork-authored entry was silently dropped:
The entry regex requires a
- #1234tail naming an upstream issue, andformatReleaseNotehardcodesdesktop/desktop/issues/{id}— so a fork PR number in that position would render as a link to an unrelated upstream issue. Entries may now omit the tail, and no dangling-is emitted when there are no ids.Rendered locally both ways before committing.
3.4.10produces the notes below;3.4.9-linux1still produces 0 unparsed entries, 10 upstream issue links, and the contributor credit intact, so the upstream path is unregressed.Rendered 3.4.10 notes
3. Documenting the sign-in change
The device flow is the most visible change in this release and nothing documented it. A user who sees a one-time code where a sign-in page used to be has no way to tell whether it is working as intended. New section in
docs/known-issues.mdsays it is expected from 3.4.10, and why: a desktop application cannot keep a secret, and earlier builds shipped one.4. Signing out no longer revokes
It discards the token locally; the authorization stays listed on github.com until removed there. That is security-relevant, and someone handing over a machine needs to find it. Documented with the actual remedy (github.com/settings/applications) rather than left as a surprise.
Also corrected while in there: the organization-access entry described this as an OAuth App and linked the OAuth App approval flow. It is a GitHub App (
Ov23li…prefix), so those are the wrong screens — the application does not appear in them at all. This was already wrong before this release; fixing it now that sign-in is in front of people. Both replacement links checked for 200.Checks run locally
tsc -p script/tsconfig.json --noEmitclean ·eslintclean (it lintschangelog.jsontoo) ·prettier --checkclean ·markdownlintshows 69 violations before and after, so no new ones (the file has a large pre-existing baseline and it is not in CI).