chore(master): release 0.27.0 - #482
Conversation
Greptile SummaryUpdates the desktop release metadata to version 0.27.0.
Confidence Score: 5/5The PR appears safe to merge. No blocking failure remains.
|
| Filename | Overview |
|---|---|
| .release-please-manifest.json | Advances the release manifest from 0.26.1 to 0.27.0. |
| apps/desktop/CHANGELOG.md | Documents the features and fixes included in desktop release 0.27.0. |
| apps/desktop/package.json | Advances the desktop application package version from 0.26.1 to 0.27.0. |
Reviews (2): Last reviewed commit: "chore(master): release 0.27.0" | Re-trigger Greptile
There was a problem hiding this comment.
✅ No new issues found.
Reviewed changes — the release-please cut of 0.26.2 for the desktop component, verified mechanically rather than read as code (three managed files, no behavioral surface).
.release-please-manifest.json—"."bumped0.26.1→0.26.2.apps/desktop/package.json—versionbumped to0.26.2via the configuredextra-files$.versionwrite.apps/desktop/CHANGELOG.md— new## [0.26.2]section dated 2026-08-26 with the singlefix(client-core)entry.
Verification:
- Version consistency — all three files name
0.26.2. - Bump size — exactly one commit since
v0.26.1(c9edeb0a):d46d560 fix(client-core): keep image prompts in place (#464). A lonefix:correctly yields a patch bump. - No stale version —
0.26.1appears nowhere outsideapps/desktop/CHANGELOG.md. Rootpackage.jsonat0.0.0andapps/mobile/app.json's unmanagedexpo.versionare both expected, not drift. - Compare link resolves —
git ls-remote --tags originconfirmsv0.26.1exists atc9edeb0a, sov0.26.1...v0.26.2is valid. - No undocumented riders —
git log origin/master --not HEAD^is empty, so the PR base is master HEAD; nothing lands in this release that the changelog omits. - No new release machinery —
git diff --stat v0.26.1...d46d560touches onlypackages/client/core/src/conversation-store.tsand its integration test. No workflow, composite action, packaging script, or toolchain pin changed, so the signed build exercises nothing new and adry_run: truedispatch isn't needed.
Invariant 5 (version+tag pairing) will be satisfied when finalize-releases.yml tags the post-merge master HEAD as v0.26.2.
Claude Opus | 𝕏
bd27789 to
5bdce57
Compare
There was a problem hiding this comment.
Important
The version cut itself is correct, but this release is the first to package better-sqlite3 13.x, which changes how the native binding is produced at build time. Worth a dry_run before tagging.
Reviewed changes — release-please force-replaced the previously reviewed 0.26.2 cut with a 0.27.0 cut after feat(providers) landed on master. Verified mechanically rather than read as code; the substance is in what rides into the release.
- Recut to a minor —
.release-please-manifest.json,apps/desktop/package.jsonandapps/desktop/CHANGELOG.mdall moved from the abandoned0.26.2to0.27.0. - Changelog rebased — new
## [0.27.0]section dated 2026-08-27 with thefeat(providers)andfix(client-core)entries, compare link retargeted tov0.26.1...v0.27.0.
Verification:
- Version consistency — all three files name
0.27.0. - Bump size — three commits since
v0.26.1(c9edeb0a):d46d560 fix(client-core),5373769 chore(deps),a79b917 feat(providers). Afeat:underbump-minor-pre-majorcorrectly yields a minor. - Abandoned cut is clean —
0.26.1and0.26.2both return zero hits outsideapps/desktop/CHANGELOG.md; nothing half-wrote the dropped version. - Compare link resolves —
git ls-remote --tags origin v0.2*tops out atv0.26.1(c9edeb0a) with nov0.26.2, so rebasing the link tov0.26.1is right. - No undocumented riders —
git log origin/master --not HEAD^is empty, so the PR base is master HEAD. - The missing changelog entry is correct —
release-please-config.jsonsets no customchangelog-sections, so the defaults hidechore.5373769 chore(deps)is legitimately absent, not dropped. - Wire protocol stays backward-compatible —
#477bumpedWIRE_PROTOCOL_VERSION78 → 79 and leftMIN_COMPATIBLE_WIRE_VERSIONat 76, so already-installed mobile/webview clients (outside the release train) are not refused. Invariant 1 holds.
⚠️ better-sqlite3 13 silently switches the packaged binding from a downloaded prebuild to a from-source compile
5373769 chore(deps) bumps better-sqlite3 12.11.1 → 13.0.2 and rides into this release invisibly (the changelog hides chore:). v13 removed the prebuild-install dependency, and @electron/rebuild's prebuild detection does not recognize v13's new flat prebuilds/ layout — so packaging now compiles the SQLite C amalgamation against Electron headers on every target instead of downloading a prebuilt Electron-ABI binary. A silent rebuild failure here is the class that shipped "Unable to connect to the daemon" through 0.2.1.
Technical details
# `better-sqlite3` 13 changes the @electron/rebuild code path for this release
## Affected sites
- `apps/daemon/package.json:34` — `better-sqlite3` `^12.11.1` → `^13.0.2` (landed in `5373769`, ships first in 0.27.0).
- `node_modules/@electron/rebuild/lib/rebuild.js:96` — selects native modules purely by `binding.gyp` existence; it ignores v13's new `"gypfile": false`, so better-sqlite3 is still processed.
- `node_modules/@electron/rebuild/lib/module-type/prebuild-install.js:54` — looks for `prebuilds/<platform>-<arch>/electron-<ABI>.node` (nested). v13 ships **flat** `prebuilds/<platform>-<arch>.node`, so the prebuilt short-circuit misses.
- `node_modules/@electron/rebuild/lib/module-rebuilder.js:117-125` — then tries prebuildify (needs `prebuildify` in devDeps — absent in v13), prebuild-install (removed in v13), node-pre-gyp (absent), and falls through to `rebuildNodeGypModule()`.
- `apps/desktop/scripts/verify-artifacts.mts:83` — hardcodes `node_modules/better-sqlite3/build/Release/better_sqlite3.node`. A plain `pnpm install` on v13 leaves `build/Release/` holding only `obj.target/*.stamp`, so this path now exists *only* if the Electron rebuild actually compiles.
- `.github/workflows/build-desktop.yml:327` — the Linux arm64 leg cross-compiles with `CC='clang-15 --target=aarch64-linux-gnu'`; the sqlite3 amalgamation must now cross-compile too, where 12.x fetched a `linux-arm64` prebuild.
## Required outcome
- Confirm a packaged build on every signed target still produces `build/Release/better_sqlite3.node` at the correct arch **and** Electron ABI, before a tag turns this into a published release.
## Suggested approach (optional)
- Dispatch `release-desktop.yml` with `dry_run: true` (builds and signs, publishes nothing) and confirm the "Verify packaged artifacts" step passes on macOS, Windows and both Linux arches.
- Windows and Linux arm64 are the ones to watch: 12.11.0/12.11.1 exist solely to fix Electron-on-Windows build errors, and v13 publishes no Electron-specific prebuilds at all.
- `verify-artifacts.mts` notes that right-arch/wrong-ABI is header-invisible and only the boot E2E catches it — so a green artifact check alone is not full proof; the packaged smoke/boot run is.ℹ️ 17 MB of unusable prebuilt bindings now land in every installer
v13 ships eight flat prebuilds/*.node files inside the package. electron-builder.yml excludes node_modules/better-sqlite3/deps/** but says nothing about prebuilds/**, so all eight smartUnpack beside the asar while lib/binding.js loads the rebuilt build/Release binding instead — seven of the eight are for platforms the artifact can never run.
Technical details
# Unused `better-sqlite3` prebuilds inflate the packaged app
## Affected sites
- `apps/desktop/electron-builder.yml:65` — `- '!node_modules/better-sqlite3/deps/**'` is the only better-sqlite3 glob; `prebuilds/**` is not excluded.
- `node_modules/better-sqlite3/prebuilds/` — 17 MB across `darwin-{arm64,x64}`, `linux-{arm64,x64}`, `linuxmusl-{arm64,x64}`, `win32-{arm64,x64}`.
## Required outcome
- Stop shipping prebuilt bindings the app never loads, without breaking the binding-resolution fallback.
## Suggested approach (optional)
- Add `- '!node_modules/better-sqlite3/prebuilds/**'` alongside the existing `deps/**` exclusion, and extend the neighbouring comment (which already says "the compiled build/Release binding is all the app loads") to cover it.
- Sequencing matters: only exclude these once the dry run above confirms `build/Release/better_sqlite3.node` is really produced. `lib/binding.js` falls back to `prebuilds/${target}.node` when `build/Release` is missing, so excluding them while the rebuild is silently skipping would turn a loud `verify-artifacts` failure into a broken daemon.Claude Opus | 𝕏
|
🤖 Created releases: 🌻 |

🤖 I have created a release beep boop
0.27.0 (2026-08-27)
Features
Bug Fixes
This PR was generated with Release Please. See documentation.