## flythenimbus/bramble — 1.27.0-chromium…1.27.0-firefox

_137 commits._

### Features
- **feat(android): finish an upload after Bramble is left, and stop blocking every plugin** (f3dce58)
- **feat(mobile): finish an upload after Bramble is left, and say so when it cannot** (45bc130)
- **feat(mobile): show an automatic backup on the settings screen while it runs** (1d3b7c8)
- **feat(mobile): cloud backups, signing here and sending natively** (e7557af)
- **feat(aliases): DuckDuckGo and Firefox Relay, on the transport they needed** (a2b35b9)
- **feat(mobile): a native HTTP transport, because both stock clients leak cookies** (c010426)
- **feat(desktop): send outbound HTTP from the shell, for any host** (af66404)
- **feat(core): one HttpTransport seam, shared by aliases and backups** (52b0f78)
- **feat(website): a blog post on per-site email aliases** (852cc19)
- **feat(release): release the browsers or the phones in one command** (f02eb06)
- **feat(release): write the notes at dispatch, not on the runner** (b382225)
- **feat(release): a place to write release notes by hand** (ab8dda2)
- **feat(release): commit and tag iOS through GitHub's API** (f7b5872)
- **feat(build): pin every tool the AppImage bundler fetches** (6104045)
- **feat(release): commit the version bump with an app the ruleset allows** (5692ca7)
- **feat(release): compile macOS in its own job, away from the keys** (5ac89ef)
- **feat(apt): add the standby signing key to the shipped keyring** (f8099e0)
- **feat(apt): ship the signing keyring inside the package** (58c4f6d)
- **feat(release): cut a desktop release without a platform** (44dbfcb)
- **feat(release): cut desktop releases from GitHub** (9173795)
- **feat(release): publish a GitHub-built desktop release to APT with one command** (92c8723)
- **feat(release): release Android, Firefox and Chrome from GitHub by default** (1575b48)
- **feat(release): cut Chrome releases from GitHub, with a store preflight** (df4d125)
- **feat(release): cut Firefox releases from GitHub, with an AMO preflight** (7a205f7)
- **feat(release): cut Android releases from GitHub, with no Mac and no YubiKey** (f011c4c)
- **feat(release): move the release credentials into CI environments, once** (bd1e7b5)
- **feat(release): build and upload iOS from a runner, gated on an approval** (1605d8c)
- **feat(release): put the App Store Connect key behind the YubiKey, like the other four** (3400e08)
- **feat(autofill): lead with the card this tab already filled** (c2e51b1)
- **feat(reviews): ask for a store review, twice at most** (a04bded)
- **feat(release): build and sign the Windows installer on GitHub** (077ade4)
- **feat(desktop): run on Windows** (5d7791d)
- **feat(strength): score passwords with zxcvbn** (2670dbc)
- **feat(aliases): a catch-all domain provider, with no account at all** (5c187f7)

### Fixes
- **fix(backup): let a target's status wrap instead of cutting off the time** (0b40b97)
- **fix(backup): make the interrupted status say only what is true** (07017d6)
- **fix(mobile): scale upload timeouts to the body, because iOS's idle timer is receive-only** (115d3dd)
- **fix(mobile): record a backup that finished after the vault locked** (48f656e)
- **fix(backup): never leave a truncated file under a real snapshot name** (0004fc1)
- **fix(mobile): let a slow backup finish, while a stalled request still fails fast** (06aa51e)
- **fix(aliases): read Firefox Relay's error body, which uses `detail`** (10ee46e)
- **fix(aliases): clear a typed key when the provider changes** (948d5d1)
- **fix(i18n): stop reading a .po string as ending at its first escaped quote** (9e466bf)
- **fix(storage): stop the ghost reap deleting a vault being created** (8db91dc)
- **perf: cut repeated work in the vault list, the autofill projection, and the roster sync (#107)** (16a323c)
- **fix(nix): correct the pnpm hash and make AppIndicator reachable at runtime (#103)** (e0f0a2b)
- **fix(release): let the release read .env.local, like every other script** (81fcb00)
- **fix(release): write the update manifest the way biome formats it** (6fbb15c)
- **fix(release): stop deploying the website twice** (dffa255)
- **fix(release): the macOS split stopped notarizing, and nothing said so** (d6409ea)
- **fix(release): say where macOS is built in the desktop job list** (32cb7cb)
- **fix(build): do not chmod a packer the build does not own** (8d43355)
- **fix(build): pre-place the AppImage packer in the Linux image** (a50c3d3)
- **fix(release): stop the desktop job names claiming work they skip** (e8672fa)
- **fix(apt): claim arm64 in the sources snippet users install** (8a6d15f)
- **fix(ci): take every cache out of the release builds** (ddcca49)
- **fix(release): stop failed store submissions leaving decrypted credentials in /tmp** (a0978a1)
- **fix(ci): stop setup-node reaching for pnpm in the Android signing job** (8868d2e)
- **fix(release): declare the Android paths before the dispatch that uses them** (aa72628)
- **fix(release): let --p12 set the Developer ID certificate without a touch** (43168c5)
- **fix(ci): let a one-off iOS build name its own marketing version** (61a1d24)
- **fix(ci): pin the iOS runner's Xcode instead of taking the image's default** (4e1423c)
- **fix(desktop): build the Linux artifacts on Debian, and fix what the AppImage bundles** (e9dd84a)
- **fix(extension): keep autofill observation alive across document replacement (#97)** (04c03d4)
- **fix(release): point the Windows signing error at a command that works** (059e3db)
- **fix(release): verify every updater artifact, not just the macOS one** (190ec2f)
- **fix(windows): the uninstaller's credential purge named the wrong binary** (4a0351d)
- **fix(reviews): register the iOS review plugin, so the ask reaches StoreKit** (e9924e7)
- **fix(cards): keep the card model in the tab the user can see, and fill a chosen expiry** (41fa3b5)
- **fix(signup-detect): stop a login form's new-password token hiding the saved login** (3e5f14d)
- **fix(sync): stop a background entry write erasing synced settings** (4a9a39a)
- **fix(detection): find the VIP code field, and give "security code" back to 2FA** (33bb854)
- **perf(chromium): shrink SW cold-wake parse and hydrate IPC (#91)** (f3eba87)
- **fix(deps): take the patched adm-zip (GHSA-vwc7-r8mq-g2x9)** (f1224a9)
- **fix(ci): build only the NSIS bundle on Windows** (562b124)
- **fix(website): list Windows only once a release carries an installer** (3c45df0)
- **fix(sync): give the pairing confirmation its own deadline** (f93da34)
- **fix(aliases): the catch-all provider could never be saved** (facf1b7)
- **fix(aliases): load the wordlist on demand, and validate the domain where it is typed** (0efe14e)

### Backend
- **Merge pull request #102 from ruizlenato/windows/port-completion** (d202d3c)

### Tests
- **test(sync): wait for the rediscovery status instead of budgeting for it** (720d103)
- **test(sync): cover the roster reads #107 changed** (5617064)
- **test(sync): stop a live merge undoing the signature strip** (f0a42a1)
- **test(windows): exercise the real Credential Manager, including the uninstall purge** (39cac79)
- **test(offscreen-client): cover the retryable in-process host load** (b528849)
- **test(aliases): cover the settings write, and stop storing an unusable domain** (3f9bb24)

### Docs
- **docs(privacy): name DuckDuckGo and Firefox Relay as alias recipients** (dac5446)
- **docs(backup): correct what Android does to a left upload, with measurements** (d7f485e)
- **docs(backup): record how mobile backups survive a lock, a departure and a slow link** (ff6705c)
- **docs(ios): release notes for mobile backups and the two new alias services** (466431e)
- **docs: mobile backups verified on the iOS Simulator, and how to drive it** (47fc710)
- **docs(backups, aliases): record what the Android and desktop runs proved** (1166f44)
- **docs(aliases): bring the design note in line with what shipped** (29b4e34)
- **docs(mobile): three iOS quirks the native transport work turned up** (b0a5907)
- **docs(aliases): price the native HTTP adapter the skipped providers need** (4f2c4ce)
- **docs(apt): how to generate the standby signing key** (4f2acaf)
- **docs(ci-releases): order the phases so each one ends in a release** (af51a00)
- **docs: plan moving every release build and signature into CI** (5a57dd4)
- **docs(windows): a release checklist for the Windows installer** (2847652)
- **docs(release): document the Windows SignPath signing setup** (ec5b9fd)
- **docs(windows): document the desktop build and test loop on Windows** (36d8ce2)
- **docs(ios): release notes for the pairing fix and the rate link** (85cd788)
- **docs(files): plan file attachments, and keep the bytes off TURN** (5126ccc)
- **docs(readme): add email aliases, correct the desktop gaps** (2c62e13)
- **docs(ios): release notes for the catch-all provider and the strength meter** (bb1390f)
- **docs(aliases): record the catch-all-domain idea** (2c4803f)
- **docs(ios): release notes for email aliases and synced settings** (076d1a4)

### Chore
- **chore(release): firefox 1.27.0** (7d0985c)
- **chore(release): desktop 0.10.0** (8dc3026)
- **chore(release): chromium 1.30.0** (5022a7d)
- **chore(release): ios 1.17.0 (build 212629734)** (eff30e0)
- **chore(android): release notes for cloud backups, two alias services and the fixes since 0.21.0** (e0dbb78)
- **ci(nix): refresh the pnpm hash automatically and assert the tray RUNPATH** (159d8f1)
- **chore(release): remove what the CI work left behind** (a9eb1c2)
- **chore(ci): bump the actions group across 1 directory with 4 updates (#106)** (4acd8da)
- **chore(release): desktop 0.9.0 update manifest and cask** (dd1ec98)
- **chore(release): desktop 0.9.0** (e791c7a)
- **chore(ci): move every action off the retired Node 20 runtime** (b77381c)
- **refactor(build): one pin for the AppImage packer, on every path** (ca91c46)
- **refactor(build): copy and list the Linux artifacts without a shell** (45fbcd4)
- **ci(ios): check the credentials before spending twenty minutes on a build** (58fae02)
- **ci(desktop): say that the Linux job ships nothing, and guard the AppImage bundle** (272c1f3)
- **ci(windows): build the signed installer from source alone, and verify the signature properly** (59706dc)
- **chore(release): ios 1.16.0 (build 211682475)** (ca090f8)
- **chore(release): firefox 1.26.0** (98717f9)
- **chore(release): chromium 1.29.0** (cce7679)
- **chore(license): name the copyright holder in the README and every manifest** (3d3caee)
- **chore(funding): add a Ko-fi sponsor button** (d99f645)
- **chore(release): desktop 0.8.0 update manifest and cask** (9936f82)
- **chore(release): desktop 0.8.0** (45ccd48)
- **chore(release): android 0.21.0** (c0a7a25)
- **chore(release): firefox 1.25.0** (5d78e09)
- **chore(release): chromium 1.28.0** (f8ec9f6)
- **chore(build): use import.meta.dirname in the vite configs** (79f18c8)
- **chore(release): ios 1.15.0 (build 211141712)** (6da4803)
- **chore(release): android 0.20.0** (5872710)
- **chore(release): firefox 1.24.0** (eae4bb3)

_Recap by [Repo Wrapped](https://repowrapped.com/gh/flythenimbus/bramble?utm_source=github-action)._