Skip to content

feat(release): desktop packaging (DMG/MSI/AppImage/deb), signed updater, docs (desktop stack 5/5) - #5309

Closed
devin-ai-integration[bot] wants to merge 8 commits into
devin/1789891915-widget-bundlefrom
devin/1789892813-desktop-release
Closed

devin-ai-integration[bot] wants to merge 8 commits into
devin/1789891915-widget-bundlefrom
devin/1789892813-desktop-release

Conversation

@devin-ai-integration

@devin-ai-integration devin-ai-integration Bot commented Sep 20, 2026

Copy link
Copy Markdown
Contributor

Summary

Desktop stack 5/5 (on top of #5299). Turns the Tauri shell into a releasable, self-updating package for macOS, Windows, and Linux, without touching the proxy runtime.

Release packaging (.github/workflows/release.yml) — new package-desktop matrix next to package-standalone:

Runner Target Bundles Published assets
macos-latest universal-apple-darwin app,dmg OpenCodex-<v>-macos.dmg, OpenCodex-<v>-macos.app.tar.gz (+.sig)
windows-latest x86_64-pc-windows-msvc msi OpenCodex-<v>-windows-x64.msi (+.sig)
ubuntu-22.04 x86_64-unknown-linux-gnu appimage,deb OpenCodex-<v>-linux-x86_64.AppImage (+.sig), OpenCodex-<v>-linux-amd64.deb

Each job builds the GUI, prepares the ocx sidecar(s) (both Apple archs for the universal build), builds the WidgetKit appex on macOS, runs tauri build --ci, then desktop/scripts/collect-release-assets.ts renames bundle outputs, copies .sig files and emits .sha256. attach-release (renamed from attach-standalone, still attaches standalone binaries) downloads both artifact sets and runs desktop/scripts/updater-manifest.ts to produce Tauri latest.json.

Signing is secret-gated and passed only via env: (TAURI_SIGNING_PRIVATE_KEY[_PASSWORD], APPLE_*, MACOS_SIGN_IDENTITY). Without secrets the bundles still build ad-hoc/unsigned and attach and no latest.json is produced. When TAURI_SIGNING_PRIVATE_KEY is configured, updater-manifest.ts --require-all runs and fails the release if any of the four updater platforms lacks a .sig, so a partially signed manifest can never become latest.

Updater (desktop/src-tauri/src/updater.rs) — exact-pinned tauri-plugin-updater =2.9.0 + tauri-plugin-process =2.3.0. Endpoint releases/latest/download/latest.json, minisign pubkey in tauri.conf.json, createUpdaterArtifacts: true. Release builds check ~30 s after start and every 6 h, cache the result in PendingUpdate, and the tray gets Check for Updates… / Install update vX.Y.Z (disabled until one is found) → download_and_installapp.restart(). The pending update is taken (not cloned) on install, the menu shows Installing update vX… with both actions disabled, background checks pause while installing, and a failed install restores the pending update and menu. Debug builds skip background checks; repeated failures are logged once per distinct message.

Design note surfaced during verification: Tauri's macOS updater artifact is OpenCodex.app.tar.gz, not the DMG, so the manifest maps darwin-* → the tar.gz and users still install from the DMG (documented). .msi/.AppImage are signed directly.

CI (ci.yml) — the widget job (name kept) now also builds the unsigned Tauri .app and asserts Contents/MacOS/OpenCodex, the bundled ocx sidecar, and PlugIns/OpenCodexWidget.appex (+codesign -dv).

Docs — new docs-site guide Desktop App (install per OS, Gatekeeper/SmartScreen, sidecar attach-vs-spawn, browser access to http://127.0.0.1:10100, updates, widget, uninstall), menu-bar guides (5 locales) point to it, README install links in all 8 READMEs (i18n manifest resynced), desktop/README.md release section, structure/desktop-shell.md.

Verification

  • cargo fmt --check, cargo clippy --all-targets -- -D warnings, cargo test (11 passed) in desktop/src-tauri
  • bun run build:gui, bun run typecheck, bun run structure:check, git diff --check
  • bun test tests/ci-workflows — 897 passed, 0 failed (includes new release-desktop-scripts.test.ts: asset naming, dmg+app.tar.gz collection, manifest skips unsigned platforms / fails when none remain / --require-all names missing platforms; ambiguous bundle outputs rejected)
  • cd docs-site && bun run build — OK
  • Local bunx tauri build --ci --bundles app,dmg (aarch64, signed with a local test key): .app contains sidecar + OpenCodexWidget.appex; collect-release-assets → dmg/app.tar.gz/.sig/.sha256; updater-manifest → valid latest.json with darwin-aarch64/darwin-x86_64 signatures and .app.tar.gz URLs
  • Launched the built app: tray menu shows the new updater items; widget snapshot rewritten (schemaVersion: 1)

tray menu with Check for Updates / Install update

Not verified here: Windows MSI / Linux AppImage+deb builds (CI-only runners), Developer ID notarization (no secrets).

Checklist

  • Scope stays focused and avoids unrelated cleanup.
  • Docs or release notes were updated when needed.
  • Security-sensitive changes were reviewed for secrets, auth, and unsafe defaults (secrets only via env:; unsigned builds never produce a manifest; private key not in repo).

Maintainer follow-ups

  • Add TAURI_SIGNING_PRIVATE_KEY(_PASSWORD) (public key already in tauri.conf.json; regenerate both with tauri signer generate if you prefer your own) and Apple signing secrets to enable signed releases + notarization.
  • maintainer-sponsored label for the hygiene gate (workflow changes).

Link to Devin session: https://app.devin.ai/sessions/f2dce68b7ca349e3ba39dab55bc12300
Open in Devin Desktop: https://app.devin.ai/desktop/session/f2dce68b7ca349e3ba39dab55bc12300?variant=devin
Requested by: @lidge-jun

Review readiness checklist

This PR stays in draft until every box below is ticked. Tick all four boxes once the requirements are met:

  • All CI tests are green on my local testing.

  • I pushed my PR to the latest dev commit.

  • I resolved all correct Codex and CodeRabbit findings.

  • My PR is ready for review.

lidge-jun and others added 6 commits September 20, 2026 01:55
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
…re exists

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
@devin-ai-integration

Copy link
Copy Markdown
Contributor Author

I'll fix CI failures and address comments from users with write access. I'll skip comments containing "(aside)".

  • Disable automatic comment, CI, and merge conflict monitoring

@coderabbitai

coderabbitai Bot commented Sep 20, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Bot user detected.

To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository: lidge-jun/opencodex/.coderabbit.yaml

Review profile: ASSERTIVE

Plan: Advanced

Run ID: dcaf39e5-1ab5-4f16-bdd5-1e53fbe02c4b

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@devin-ai-integration
devin-ai-integration Bot added this pull request to stack #5262 September 20, 2026 09:03
@lidge-jun

Copy link
Copy Markdown
Owner

리뷰 · 우선순위 60 / 80

이 PR은 데스크톱 스택 마지막(5/5)입니다. Tauri 셸을 macOS·Windows·Linux용 설치 파일로 묶고, 서명된 자동 업데이트를 붙입니다. 베이스는 dev가 아니라 devin/1789891915-widget-bundle(#5299)입니다. 릴리스 워크플로에 package-desktop 행렬이 생깁니다. macOS는 DMG와 업데이트용 .app.tar.gz, Windows는 MSI, Linux는 AppImage와 deb를 만들고, 이름을 고친 뒤 .sig.sha256을 모읍니다. attach-release가 그 파일을 릴리스에 올리고 latest.json을 만듭니다. 앱 쪽에서는 tauri-plugin-updater와 트레이 메뉴(업데이트 확인 / 설치)가 들어가고, 출시 빌드만 시작 30초 뒤·6시간마다 백그라운드 확인을 합니다. CI의 widget 잡은 이제 서명 없는 .app까지 빌드해서 본체·ocx·위젯 appex가 들어갔는지 확인합니다. 문서(Desktop App 가이드, README, structure)도 같이 옵니다. 서명 비밀값은 env로만 넣고, 서명이 없으면 latest.json은 안 만들고 설치 파일만 올리는 방향입니다. 로컬에서는 macOS 쪽 스크립트·트레이를 돌려 봤고, Windows/Linux 패키지와 Apple 공증은 CI·시크릿 없다고 본문에 적혀 있습니다. 리뷰 시점 CI는 hygiene/label 등이 pending이고, maintainer-sponsored 라벨은 아직 없습니다.

라인 - 베이스/#5299: 이 PR만 dev에 바로 못 올립니다. 위젯 번들 PR(#5299)과 그 아래 스택이 먼저 살아야 합니다. tip 기준으로는 스택 머지 순서가 맞는지부터 보면 됩니다.

라인 - 라벨/hygiene: 워크플로(.github/workflows/release.yml, ci.yml)를 바꾸는데 maintainer-sponsored가 없습니다. 본문도 이 라벨이 필요하다고 적었습니다. 라벨 없으면 hygiene에 막힐 수 있습니다.

라인 - tests/ci-workflows/release-desktop-scripts.test.ts: 본문은 “서명 플랫폼이 하나도 없으면 실패” 테스트가 있다고 합니다. 실제 파일에는 이름 바꾸기·부분 스킵 테스트만 있고, No signed updater platforms remain를 던지는 경우는 없습니다. 본문 검증 목록과 테스트가 어긋납니다.

라인 - .github/workflows/release.yml Generate updater manifest (continue-on-error: true): 서명이 전혀 없을 때는 latest.json을 안 만드는 쪽이 맞습니다. 다만 시크릿이 잘못돼 일부만 .sig가 생기면, 일부 플랫폼만 담긴 latest.json이 그대로 올라갑니다. 그 릴리스가 latest가 되면, 빠진 OS 사용자는 업데이트가 안 되거나 깨진 주소를 보게 됩니다.

라인 - desktop/src-tauri/src/tray.rs install-update: PendingUpdate에서 clone만 하고 빼지 않습니다. 설치 중에 “업데이트 확인”이 다시 돌면 같은 자리를 덮어쓸 수 있습니다. 또 다운로드 진행 콜백이 비어 있어, 설치를 눌러도 끝날 때까지 트레이에 진행 표시가 없습니다.

라인 - desktop/src-tauri/tauri.conf.json updater pubkey / GitHub secrets: 공개키는 커밋돼 있습니다. 짝이 되는 TAURI_SIGNING_PRIVATE_KEY가 저장소 시크릿에 없으면, 새 릴리스는 설치 파일만 있고 latest.json이 없습니다. 그 릴리스가 latest가 되는 순간 기존 앱의 업데이트 확인 URL이 404가 됩니다. 키를 나중에 새로 만들면 공개키도 같이 바꿔야 합니다.

라인 - .github/workflows/ci.yml widget 잡: PR마다(변경 범위가 ci일 때) 전체 tauri build --bundles app을 돌립니다. 타임아웃은 30분입니다. 위젯만 건드린 PR도 데스크톱 전체 빌드 비용이 붙습니다. 의도한 스모크인지, 더 좁힌 검사가 맞는지는 한 번 정하면 좋습니다.

라인 - desktop/scripts/collect-release-assets.ts findBundle: 같은 확장자 파일이 여러 개면 sort()[0] 하나만 고릅니다. 보통은 하나라서 괜찮지만, 빌드 산출물이 겹치면 잘못된 파일을 집을 수 있습니다.

메인테이너의 판단이 필요한 지점

스택(#5299 등)을 어떤 순서로 dev에 올릴지. maintainer-sponsored를 지금 붙일지. 릴리스 전에 Tauri 서명 키·Apple 서명/공증 시크릿을 넣을지, 아니면 이번 머지는 “패키징 파이프만” 두고 서명 릴리스는 후속으로 둘지. continue-on-error로 부분 서명 latest.json을 허용할지, 플랫폼이 빠지면 업로드 자체를 막을지. CI widget 잡의 전체 앱 빌드를 유지할지.

너의 추천

방향은 맞고, 서명 없을 때 매니페스트를 안 만드는 큰 줄기는 좋습니다. 다만 지금은 dev 직행 후보가 아니라 스택 위 tip입니다. 머지 전에 (1) #5299 스택 통과·머지 순서 확정, (2) maintainer-sponsored 부착, (3) 본문이 말한 “서명 0개면 실패” 테스트를 실제로 추가하는 세 가지는 하는 편이 좋습니다. 서명 시크릿은 첫 데스크톱 릴리스 전에 넣고, 공개키와 짝이 맞는지 한 번 dry-run으로 확인하세요. 부분 서명 매니페스트는 업로드 전에 “기대한 OS가 모두 있는지” 검사하는 쪽이 사고 가능성이 작습니다. Windows/Linux 패키지는 CI 초록을 보고, 설치 UX(진행 표시·레이스)는 후속해도 됩니다.

이 댓글은 grok-bot이 작성했습니다

…y install

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
@devin-ai-integration

Copy link
Copy Markdown
Contributor Author

Addressed in f42b793:

  • Missing "none remain" test — added (throws No signed updater platforms remain, asserts no latest.json written). Body/verification list now matches.
  • Partial-signature latest.json — removed continue-on-error. attach-release now sets UPDATER_SIGNING_CONFIGURED from the secret; the manifest step runs only when the key is configured and passes --require-all, which fails naming any of the four platforms lacking a .sig. Without a key: bundles attach, no manifest.
  • install-update race / no progress — pending update is take()n, menu switches to Installing update vX.Y.Z… with both update items disabled, background check_and_show is skipped while installing, and a failed install restores the update + menu.
  • findBundle sort()[0] — multiple matches now throw listing the candidates (tested).
  • Pubkey / missing secret — by design: the committed pubkey is the pair of the key the maintainer stores as TAURI_SIGNING_PRIVATE_KEY; a release without it has no latest.json, and the app's check just logs the 404 once (no user-facing error). Regenerating the key means updating plugins.updater.pubkey in the same PR — noted in the maintainer follow-ups.
  • CI widget job full app build — intentional: it's the only place that proves the appex+sidecar actually land inside the Tauri bundle, and it only runs under the ci scope filter (desktop/**, app/**, workflows). Happy to narrow it later if the 30-min budget bites.

Merge order / maintainer-sponsored / signing secrets are maintainer decisions as you listed.

@github-actions github-actions Bot added the intake: hygiene-blocked Deterministic PR hygiene checks failed label Sep 20, 2026
@github-actions

Copy link
Copy Markdown
Contributor

⚠️ Deterministic hygiene checks failed.

  • unsponsored_surface — This changes an authentication, workflow, release-automation, or dependency surface. MAINTAINERS.md requires security review for these; ask a maintainer to apply maintainer-sponsored once they have reviewed it. Paths: .github/workflows/ci.yml, .github/workflows/release.yml.

@github-actions

github-actions Bot commented Sep 20, 2026

Copy link
Copy Markdown
Contributor

⏳ DRAFT

  • hygiene: unsponsored_surface.

What to do

  • Fix unsponsored_surface — This changes an authentication, workflow, release-automation, or dependency surface. MAINTAINERS.md requires security review for these; ask a maintainer to apply maintainer-sponsored once they have reviewed it. Paths: .github/workflows/ci.yml, .github/workflows/release.yml.
  • Tick all four boxes in the PR description once you're done (currently 0/4).

Review readiness checklist

  • ⬜ All CI tests are green on my local testing.
  • ⬜ I pushed my PR to the latest dev commit.
  • ⬜ I resolved all correct Codex and CodeRabbit findings.
  • ⬜ My PR is ready for review.

0/4 boxes ticked.

This pull request was already a draft. Its draft status will be preserved after every issue above is resolved.
@devin-ai-integration[bot] Tick the boxes once your local CI is green, your branch is on the latest dev commit, and every correct Codex and CodeRabbit finding is resolved.

@lidge-jun

Copy link
Copy Markdown
Owner

추가 리뷰 · 우선순위 42 / 80

지난 리뷰(653d376) 다음에 tip이 f42b793으로 바뀌었습니다. 이 PR은 그대로 데스크톱 스택 5/5입니다. 설치 파일(DMG/MSI/AppImage/deb)을 만들고, 서명된 latest.json으로 자동 업데이트를 붙입니다. 베이스는 여전히 dev가 아니라 #5299 위젯 번들 브랜치입니다. #5299는 아직 열려 있습니다.

이번 커밋에서 고친 것: (1) 서명 플랫폼이 하나도 없으면 매니페스트를 안 쓰고 실패하는 테스트가 생겼습니다. (2) continue-on-error를 빼고, 시크릿이 있을 때만 --require-all로 네 플랫폼 .sig를 모두 요구합니다. (3) 설치 시 PendingUpdatetake()로 빼고, 메뉴에 “Installing…”을 보여 주며, 설치 중 백그라운드 확인을 막습니다. 실패하면 다시 넣어 줍니다. (4) findBundle이 파일이 여러 개면 바로 실패합니다. 본문이 말한 검증과 코드가 맞게 맞춰졌습니다.

지금도 초안입니다. hygiene는 unsponsored_surface(워크플로 변경)로 실패 중이고, maintainer-sponsored 라벨은 없습니다. enforce-target도 같은 이유로 막혀 있습니다. 라벨은 enhancement, intake: hygiene-blocked입니다.

라인 - 베이스/#5299: 스택 아래 PR이 아직 안 올라갔습니다. 이 PR만 dev에 바로 못 갑니다. tip 기준으로 머지 순서는 그대로 #5299 → 이 PR입니다.

라인 - 라벨/hygiene: .github/workflows/release.yml, ci.yml을 바꾸는데 maintainer-sponsored가 없습니다. 게이트 로그도 unsponsored_surface로 실패합니다. 라벨 없으면 머지 전에 계속 막힙니다.

라인 - .github/workflows/release.yml attach-release / Generate updater manifest: 시크릿이 켜진 뒤 플랫폼 .sig가 하나라도 빠지면, 매니페스트 단계에서 잡 전체가 실패합니다. 그 뒤에는 gh release upload가 안 돌아가서, 설치 파일(DMG/MSI 등)도 같이 안 올라갑니다. 부분 서명 latest.json은 막혔고(좋음), 대신 “서명 한 장이 빠지면 패키지 첨부까지 멈춤”이 됩니다.

라인 - desktop/src-tauri/src/updater.rs download_and_install: 진행 콜백은 여전히 비어 있습니다. 메뉴 글자는 “Installing update vX…”로 바뀌지만, 받은 양·퍼센트는 안 보입니다. 레이스(덮어쓰기) 쪽은 이번 커밋에서 꽤 줄었습니다.

라인 - desktop/src-tauri/tauri.conf.json updater pubkey / 시크릿: 공개키는 커밋돼 있고, 짝 비밀키가 없으면 latest.json은 안 만듭니다(설계). 그 릴리스가 latest가 되면 앱의 업데이트 URL은 404가 됩니다. 키를 새로 만들면 공개키도 같은 PR에서 바꿔야 합니다. 이 점은 코드 버그가 아니라 운영 준비 문제입니다.

메인테이너의 판단이 필요한 지점

#5299를 먼저 머지할지, 스택을 한 번에 올릴지. maintainer-sponsored를 지금 붙일지. 서명 키·Apple 공증 시크릿을 첫 데스크톱 릴리스 전에 넣을지, 이번 머지는 패키징 파이프만 두고 서명 릴리스는 후속으로 둘지. 시크릿이 켜진 상태에서 .sig가 빠졌을 때, 지금처럼 첨부 잡 전체를 멈출지, 설치 파일은 올리고 latest.json만 막을지.

너의 추천

코드로 지적했던 구멍(테스트 누락, 부분 서명 매니페스트, 설치 레이스, 모호한 번들 선택)은 이번 tip에서 대체로 닫혔습니다. 머지 차단은 이제 거의 프로세스입니다. (1) #5299 통과·머지 순서 확정, (2) maintainer-sponsored 부착, (3) 첫 서명 릴리스 전에 키 짝 dry-run — 이 세 가지를 하세요. fail-closed(서명 불완전 → 첨부 중단)는 업데이트 사고 막기에는 맞고, 패키지만 올리고 싶을 때만 워크플로를 나누면 됩니다. 다운로드 퍼센트 표시는 후속해도 됩니다. Windows/Linux 패키지는 여전히 CI·시크릿 환경에서만 확인됩니다.

이 댓글은 grok-bot이 작성했습니다

@devin-ai-integration

Copy link
Copy Markdown
Contributor Author

Agreed on all points; no further code change from this round.

  • Fail-closed when the key is configured but a .sig is missing (attach job stops, installers not uploaded) is intentional: a release whose installers exist but whose latest.json is inconsistent is the worse failure mode. If the maintainer wants "installers always, manifest optional", splitting attach-release into two jobs is a one-step follow-up.
  • Download progress in the tray label — deferred as a follow-up (menu text is the only surface; a percentage would be cosmetic).
  • Pubkey/secret pairing, maintainer-sponsored, merge order — maintainer decisions as listed; the body's follow-ups section covers the key dry-run.

Replaces the placeholder key generated during development. The matching
private key is in the repo secrets as TAURI_SIGNING_PRIVATE_KEY, so signed
updater artifacts and latest.json can actually be produced.
@lidge-jun
lidge-jun marked this pull request as ready for review September 20, 2026 11:06
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 20, 2026

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review Completed 2026-09-20T11:10:00.434713Z 0564103 Draft marked ready
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@github-actions
github-actions Bot marked this pull request as draft September 20, 2026 11:07

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 0564103d16

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

APPLE_PASSWORD: ${{ secrets.APPLE_PASSWORD }}
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
MACOS_SIGN_IDENTITY: ${{ secrets.APPLE_SIGNING_IDENTITY }}
run: bunx tauri build --ci --target ${{ matrix.target }} --bundles ${{ matrix.bundles }}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Synchronize desktop metadata before packaging releases

For every release after 2.61.0, this builds the desktop app without updating either desktop/src-tauri/tauri.conf.json or desktop/src-tauri/Cargo.toml, while the release authority only bumps package.json (scripts/release.ts:599-612). The workflow then renames that 2.61.0 bundle and writes latest.json using the requested newer version, so the installed app still reports 2.61.0; updater comparisons can repeatedly offer the same release, and MSI upgrades may reject packages retaining the previous product version. Set and validate both desktop versions from RELEASE_VERSION before invoking Tauri, or make the release authority bump them atomically.

AGENTS.md reference: AGENTS.md:L46-L47

Useful? React with 👍 / 👎.

@lidge-jun

Copy link
Copy Markdown
Owner

Superseded by #5318, merged to dev as 2ff7f3385d83c05279093eb9c7bdd5d5963d9605, with attribution in the branch commit.

#5196 landed first as 38a5ab9fc4eaa223d3d58982b0bc097279138fca. Squashing the bottom of a native stack detaches every child from its base, so the rest of the chain could no longer be merged through the stack: the base branches stopped resolving and the recorded bases pointed at tips the chain had been rebased away from. Replaying the branches on top of dev reproduced the already-squashed commits and produced 48 conflicts, none of them real disagreements.

The consolidation applies the tree difference of the stack tip against the point the chain branched from. One file genuinely conflicted and both intents were kept. Everything from the standalone binary through the signed packaging is on dev.

Closing as superseded rather than stale.

@lidge-jun lidge-jun closed this Sep 20, 2026
@lidge-jun
lidge-jun deleted the devin/1789892813-desktop-release branch September 20, 2026 11:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request intake: hygiene-blocked Deterministic PR hygiene checks failed

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant