Skip to content

fix(desktop): unbreak release build + phase 2 parallel dispatch - #65

Merged
catomean merged 4 commits into
mainfrom
fix/desktop-release-toolchain
Jul 17, 2026
Merged

fix(desktop): unbreak release build + phase 2 parallel dispatch#65
catomean merged 4 commits into
mainfrom
fix/desktop-release-toolchain

Conversation

@catomean

Copy link
Copy Markdown
Collaborator

Two commits, one rollout train

1. fix(desktop): node-gyp 13 override — unbreaks the release pipeline.
The desktop-release workflow has been silently broken since v0.8.0 (node-gyp 9.4.1 predates Python 3.12 and current VS detection — every build died at "Install desktop deps"; 0.8.1–0.8.11 never shipped through the feed). Scoped npm override under @electron/rebuild. Being proven right now by a workflow_dispatch dry-run build on this branch (all three platforms are past the old failure point).

2. feat(dispatch): phase 2 of worktree-per-agent — same-project parallel dispatch (opt-in).
Busy project → dispatch immediately under a derived tab alias <project>~<runId8> instead of queuedBehind. The loop is tab-keyed, so PTY/session/sentinels/zellij/worktree all compose unchanged. Alias-aware seams: dispatch route (Exit contract on alias session path, payload.sessionTab, base projectKey preserved for analytics), runner guard (derived tabs FORCE worktree isolation), ingestion (no ghost project cards; targeted run close from pushed payload), close-sweep (cross-close guard). Gated by FLEETCROWN_PARALLEL_DISPATCH, default off.

8-check run-tab net + 38/38 unit files, tsc, eslint green. Docs: docs/architecture/worktree-per-agent.md.

🤖 Generated with Claude Code

catomean and others added 4 commits July 17, 2026 16:25
The release workflow has been silently broken since v0.8.0: @electron/rebuild
pins node-gyp 9.4.1, which predates Python 3.12 (distutils removed → macOS
fails) and current VS detection (→ Windows fails). Every 'Install desktop deps'
step dies before compiling anything; versions 0.8.1-0.8.11 never shipped
through the feed. Scoped npm override forces node-gyp ^13 under
@electron/rebuild only.

Verified via workflow_dispatch dry-run (build-only) on this branch.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…run-tabs (opt-in)

When a project is busy, dispatch immediately under a tab alias
<project>~<runId8> instead of queueing behind — every tab-keyed mechanism
(PTY workspace, session file, sentinels, zellij tab, phase-1 worktree)
composes unchanged. Gated by FLEETCROWN_PARALLEL_DISPATCH (default off).

- src/lib/run-tab.ts: alias SSOT (derive/base/detect) shared by server+runner
- run/route.ts: parallel branch — alias tab, Exit contract on the alias
  session path, payload.sessionTab; run keeps BASE projectKey for analytics
- poller.ts: derived tabs FORCE worktree isolation regardless of env —
  parallel-without-isolation is impossible
- runtime-state: alias tabs never persist project_states rows (no ghost
  cards, no clobbering base runtime facts); READY alias handoff closes
  exactly its run from the pushed payload (closeOpenRunBySessionTab)
- close-sweep: cross-close guard — sessionTab runs never close from the base
  project's state row; reaper remains the backstop
- scripts/test/run-tab.ts: 8-check net. 38/38 unit files, tsc, eslint green.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The scoped node-gyp-13-under-rebuild-3.6.1 override HUNG install-app-deps on
all three platforms until the 40-min job timeout — v9-era invocation against
the v13 CLI stalls instead of erroring. rebuild 4.2.0 ships its own paired
node-gyp ^12 (Python 3.12 + modern VS support) — the combination its authors
actually test.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…-2022

Third approach, the right one: the dep set (electron-builder 25 + rebuild
3.6.1 + node-gyp 9) was never broken — the runner images rotted under it
after v0.8.0 (Python 3.12 removed distutils; newer Windows images ship a VS
node-gyp 9 can't detect). Overriding node-gyp 13 under rebuild 3.6.1 HUNG
(CLI mismatch); rebuild 4.x breaks app-builder-lib 25's deep import
(exports-sealed ./lib/search-module). So: revert both overrides, pin
setup-python 3.11 + windows-2022 in the workflow. Prod deps untouched.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@catomean
catomean merged commit 4d3bcf3 into main Jul 17, 2026
4 checks passed
@catomean
catomean deleted the fix/desktop-release-toolchain branch July 22, 2026 10:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant