Skip to content

Tags: tempmd/dyad

Tags

v1.12.0-beta.1

Toggle v1.12.0-beta.1's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
Bump to v1.12.0-beta.1 (dyad-sh#4339)

#skip-bb

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> <sup>[Cursor Bugbot](https://cursor.com/bugbot) is generating a
summary for commit 39c1ef3. Configure
[here](https://www.cursor.com/dashboard/bugbot).</sup>
<!-- /CURSOR_SUMMARY -->

v1.11.1

Toggle v1.11.1's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
Avoid Ubuntu mirror hangs in Linux release builds (dyad-sh#4314)

## Summary

Prevent the Linux release build from hanging on unrelated Ubuntu package
mirrors while retaining clang 18 and the Ubuntu 22.04 glibc baseline.

- Restrict `apt-get update` to the newly added LLVM Jammy repository
instead of refreshing every configured runner repository.
- Preserve the runner's existing package indexes so `apt-get install
clang-18` can resolve any Ubuntu-provided dependencies without changing
the existing installation behavior.
- Keep the compiler selection and all non-Linux release jobs unchanged.

#skip-bugbot

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Low Risk**
> CI-only change to apt update flags on Linux release builds; no
application runtime or release artifact logic changes.
> 
> **Overview**
> Linux release jobs were hanging when `apt-get update` refreshed every
Ubuntu mirror on the runner. The **Use clang 18 for Linux native
rebuilds** step now runs a **scoped** `apt-get update` that only
refreshes the added `llvm-toolchain-jammy-18` source list, with
`Dir::Etc::sourceparts="-"` and `APT::Get::List-Cleanup="0"` so existing
runner package indexes stay intact.
> 
> `clang-18` install and `CC`/`CXX` env setup are unchanged; other
matrix platforms are untouched.
> 
> <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
81c8ba6. Bugbot is set up for automated
code reviews on this repo. Configure
[here](https://www.cursor.com/dashboard/bugbot).</sup>
<!-- /CURSOR_SUMMARY -->

<!-- This is an auto-generated description by cubic. -->
<a href="https://cubic.dev/pr/dyad-sh/dyad/pull/4314?utm_source=github"
target="_blank" rel="noopener noreferrer"
data-no-image-dialog="true"><picture><source
media="(prefers-color-scheme: dark)"
srcset="https://www.cubic.dev/buttons/review-in-cubic-dark.svg"><source
media="(prefers-color-scheme: light)"
srcset="https://www.cubic.dev/buttons/review-in-cubic-light.svg"><img
alt="Review in cubic"
src="https://www.cubic.dev/buttons/review-in-cubic-dark.svg"></picture></a>
<!-- End of auto-generated description by cubic. -->

v1.11.0

Toggle v1.11.0's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
Fix Squirrel install startup handling (dyad-sh#4301)

## Summary

Route Electron Forge through a minimal main-process bootstrap that
handles Squirrel install/update events before loading the Dyad
application runtime. Normal launches dynamically load the existing
`main.ts` entry, while Squirrel events quit immediately.

## Root cause and impact

The previous Forge entry loaded `main.ts` directly. ES module imports
and IPC registration ran before the `electron-squirrel-startup` guard,
so Windows installer hooks could initialize the database, background
services, and application windows instead of exiting. Squirrel then
timed out and later install attempts failed to replace locked Electron
binaries and DLLs with `UnauthorizedAccessException` errors.

The new entry keeps the Squirrel path isolated from all application
imports, preventing installer hooks from starting normal Dyad services.
A focused regression test covers both Squirrel and ordinary launch
paths.

Validated with the focused Vitest suite, repository lint, TypeScript
checks, and a complete Electron Forge package build. The packaged app
now resolves `.vite/build/main_bootstrap.js` as its declared Electron
entry point.


<!-- This is an auto-generated description by cubic. -->
<a href="https://cubic.dev/pr/dyad-sh/dyad/pull/4301?utm_source=github"
target="_blank" rel="noopener noreferrer"
data-no-image-dialog="true"><picture><source
media="(prefers-color-scheme: dark)"
srcset="https://www.cubic.dev/buttons/review-in-cubic-dark.svg"><source
media="(prefers-color-scheme: light)"
srcset="https://www.cubic.dev/buttons/review-in-cubic-light.svg"><img
alt="Review in cubic"
src="https://www.cubic.dev/buttons/review-in-cubic-dark.svg"></picture></a>
<!-- End of auto-generated description by cubic. -->

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Medium Risk**
> Changes Electron main-process startup order on Windows; mis-handling
Squirrel could break installs or normal launches, but scope is small and
covered by focused tests.
> 
> **Overview**
> **Windows Squirrel install/update hooks** now run through a minimal
`main_bootstrap.ts` entry instead of loading `main.ts` directly. Forge’s
Vite main entry was switched from `src/main.ts` to that bootstrap.
> 
> On a Squirrel event, the bootstrap calls `app.quit()` immediately and
never dynamically imports `./main`, so installer hooks do not pull in
IPC registration, the database, or other Dyad services that previously
ran before the guard in `main.ts` and could cause Squirrel timeouts and
locked-binary install failures.
> 
> Normal launches still load the full runtime via `void
import("./main")`. **Vitest** in `main_bootstrap.test.ts` covers both
paths: quit without loading `main`, and load `main` without quit when
Squirrel is inactive.
> 
> <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
a8cc05f. Bugbot is set up for automated
code reviews on this repo. Configure
[here](https://www.cursor.com/dashboard/bugbot).</sup>
<!-- /CURSOR_SUMMARY -->

v1.11.0-beta.1

Toggle v1.11.0-beta.1's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
Allow new chats during E2E tests and recordings (dyad-sh#4281)

## Summary

Allow users to create a new chat while an E2E test or Playwright
recording session owns the app's working tree, without weakening the
stable Git HEAD snapshot stored on the chat.

- Splits repository coordination into ref and working-tree subresources
while retaining `repository` as a backwards-compatible umbrella for
existing general Git operations.
- Makes test and recording sessions own the working tree exclusively but
share read access to refs, so branch-changing and code-writing
operations remain serialized.
- Lets compatible ref snapshots pass repository writers only while those
writers are directly blocked by a long-lived session, and only for
conflicts on resources that session owns; unrelated operations retain
request ordering.
- Removes the recording-specific New Chat refusal because chat creation
now conflicts only with operations that can change its initial commit
anchor.
- Adds focused coverage for umbrella expansion, scoped queue bypass,
production resource declarations, and actual chat creation during
recording.

---------

Co-authored-by: Will Chen <7344640+wwwillchen@users.noreply.github.com>

v1.10.0

Toggle v1.10.0's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
Bump to v1.10.0 (dyad-sh#4238)

#skip-bb

<!-- This is an auto-generated description by cubic. -->
<a href="https://cubic.dev/pr/dyad-sh/dyad/pull/4238?utm_source=github"
target="_blank" rel="noopener noreferrer"
data-no-image-dialog="true"><picture><source
media="(prefers-color-scheme: dark)"
srcset="https://www.cubic.dev/buttons/review-in-cubic-dark.svg"><source
media="(prefers-color-scheme: light)"
srcset="https://www.cubic.dev/buttons/review-in-cubic-light.svg"><img
alt="Review in cubic"
src="https://www.cubic.dev/buttons/review-in-cubic-dark.svg"></picture></a>
<!-- End of auto-generated description by cubic. -->

v1.10.0-beta.3

Toggle v1.10.0-beta.3's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
Make long error messages easier to inspect (dyad-sh#4226)

## Summary

Long error messages are now contained in a keyboard-accessible,
independently scrollable details area so the toast header and actions
stay easy to reach.

- Caps error details at half the viewport height (up to 20rem) while
keeping short errors compact.
- Wraps unbroken technical strings and uses the existing hover/focus
scrollbar treatment to prevent horizontal overflow and heavy scrollbar
chrome.
- Makes copy and close controls explicitly labeled and focus-visible,
fixes their Base UI tooltip trigger composition, and adds dark-theme
styling.
- Adds focused component coverage for scrolling semantics and the
copy/close interactions.

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> <sup>[Cursor Bugbot](https://cursor.com/bugbot) is generating a
summary for commit b00f38c. Configure
[here](https://www.cursor.com/dashboard/bugbot).</sup>
<!-- /CURSOR_SUMMARY -->

<!-- This is an auto-generated description by cubic. -->
<a href="https://cubic.dev/pr/dyad-sh/dyad/pull/4226?utm_source=github"
target="_blank" rel="noopener noreferrer"
data-no-image-dialog="true"><picture><source
media="(prefers-color-scheme: dark)"
srcset="https://www.cubic.dev/buttons/review-in-cubic-dark.svg"><source
media="(prefers-color-scheme: light)"
srcset="https://www.cubic.dev/buttons/review-in-cubic-light.svg"><img
alt="Review in cubic"
src="https://www.cubic.dev/buttons/review-in-cubic-dark.svg"></picture></a>
<!-- End of auto-generated description by cubic. -->

v1.10.0-beta.2

Toggle v1.10.0-beta.2's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
Prevent preview wedge when reopening during shutdown (dyad-sh#4215)

## Summary

Prevent a quick reopen during asynchronous shutdown from creating a
replacement window inside a half-disposed Electron main process. Dyad
now finishes cleanup and services that reopen request with a fresh
process, avoiding previews stuck on “Waiting for server logs…” with an
ineffective Restart action.

- Treat shutdown as terminal for the current process: macOS open-URL,
second-instance, and zero-window activation events request a relaunch
instead of interacting with disposed main-owned services; activation
while a window remains open does not override an intentional quit.
- Preserve a protocol URL delivered during shutdown in the replacement
process arguments, while explicitly stripping stale `dyad://` arguments
from every relaunch, including payload-free reopens.
- Coalesce explicit Restart-Dyad and reopen events through one request
so `app.relaunch()` is scheduled exactly once immediately before the
guarded final quit.
- Keep a defensive precondition at the central window factory so future
window-creation paths cannot accidentally resurrect the quitting
process, while delayed startup exits quietly if shutdown began during
its persistence cleanup.
- Limit the change to Electron lifecycle policy; renderer connection
identity and app-run transport protocols remain unchanged because the
reproduced failure used a new window and renderer in the same
shutting-down main process.

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Medium Risk**
> Touches Electron quit/relaunch, deep links, and window creation at
shutdown; mistakes could break clean quit, OAuth return URLs, or Dock
reopen behavior.
> 
> **Overview**
> Fixes previews stuck on “Waiting for server logs…” when the user
reopens Dyad while the main process is still tearing down after an async
`before-quit`.
> 
> **Shutdown is terminal in the current process.** `open-url`,
`second-instance`, and macOS `activate` (only when activation would
normally create a window and none remain) no longer open windows or run
deep-link handling while `isAppQuitting`; they record a **single
coalesced relaunch** via `appRelaunchRequest`. `createWindow` and
delayed startup bail out during shutdown so nothing resurrects a dying
process.
> 
> **One relaunch at the end of quit.** Restart Dyad IPC and all
shutdown-time reopen paths call `appRelaunchRequest.request()` instead
of `app.relaunch()` directly. The guarded MCP `before-quit` path calls
`appRelaunchRequest.finish()`, which strips stale `dyad://` args from
`process.argv`, appends the first preserved shutdown deep link if any,
invokes `app.relaunch()` once, then quits.
> 
> **Lifecycle policy** gains `shouldRequestRelaunchOnActivate` (relaunch
only when quitting with zero windows) and blocks
`shouldCreateWindowOnActivate` while quitting. Unit tests cover relaunch
arg building and activation policy.
> 
> <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
f26e512. Bugbot is set up for automated
code reviews on this repo. Configure
[here](https://www.cursor.com/dashboard/bugbot).</sup>
<!-- /CURSOR_SUMMARY -->

v1.10.0-beta.1

Toggle v1.10.0-beta.1's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
Fix cross-platform CI test synchronization (dyad-sh#4205)

## Summary

Fix every failure from the [post-merge `main` CI
run](https://github.com/dyad-sh/dyad/actions/runs/31052691207) without
changing production behavior.

- Treat fake-server push events as evidence that a receive-pack request
began, then wait for the main-owned Git operation's authoritative
success state before comparing local and remote refs.
- Exercise the release workflow contract against both LF and CRLF
content while preserving the exact publish-job permission boundary.
- Stop reselecting Preview after `sendPrompt()` has already activated
it; the redundant toggle collapsed the cloud-sandbox preview panel
before the iframe assertion.
- Supersede dyad-sh#4203 by carrying its CRLF regression coverage together with
the remaining Git synchronization fix, since GitHub still reports that
PR as open and its commit is not on `main`.

#skip-bugbot

<!-- This is an auto-generated description by cubic. -->
<a href="https://cubic.dev/pr/dyad-sh/dyad/pull/4205?utm_source=github"
target="_blank" rel="noopener noreferrer"
data-no-image-dialog="true"><picture><source
media="(prefers-color-scheme: dark)"
srcset="https://www.cubic.dev/buttons/review-in-cubic-dark.svg"><source
media="(prefers-color-scheme: light)"
srcset="https://www.cubic.dev/buttons/review-in-cubic-light.svg"><img
alt="Review in cubic"
src="https://www.cubic.dev/buttons/review-in-cubic-dark.svg"></picture></a>
<!-- End of auto-generated description by cubic. -->

Co-authored-by: Will Chen <7344640+wwwillchen@users.noreply.github.com>

v1.9.0

Toggle v1.9.0's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
Bump to v1.9.0 (dyad-sh#4072)

#skip-bb

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Low Risk**
> Version metadata only; no runtime or dependency changes.
> 
> **Overview**
> Promotes the **dyad** package from **`1.9.0-beta.3`** to stable
**`1.9.0`**.
> 
> The version field is updated in **`package.json`** and the root
package entry in **`package-lock.json`** so npm metadata matches the
v1.9.0 release. No application code, dependencies, or scripts change in
this PR.
> 
> <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
9267409. Bugbot is set up for automated
code reviews on this repo. Configure
[here](https://www.cursor.com/dashboard/bugbot).</sup>
<!-- /CURSOR_SUMMARY -->

v1.9.0-beta.3

Toggle v1.9.0-beta.3's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
Project GithubBranchManager from the github_ops machine (dyad-sh#4061)

## Summary

Implements Phase 5 item 3, PR-B from `plans/even-more-machines.md`:
project `GithubBranchManager` entirely from the per-app `github_ops`
machine. This completes the scheduled GitHub operations machine
migration and leaves only the follow-up chores PR plus trigger-gated
work in that plan.

- Replaces component-owned operation lifecycle, direct GitHub IPC calls,
and error-string classification with machine snapshots, projections, and
typed events.
- Adds a TanStack Query branch-inventory projection for current, local,
and remote branches while keeping operation state in the machine.
- Keeps conflict recovery ownership explicit: `GitHubConnector` renders
the single shared status panel with “Resolve with AI” and “Cancel sync,”
while `GithubBranchManager` stays focused on branch selection and
mutations.
- Closes the stale-conflict-resolver bug by making abort-and-switch
remove the obsolete conflict controls as soon as the machine leaves the
conflicted state.
- Fills two gaps exposed while consuming PR-A: the planned inventory
query was not yet present, and the `conflicted → switch requested →
switch blocked` transition cell was unreachable. Regression coverage now
exercises that path and the renderer projection.
- Avoids duplicate success surfaces from the machine banner and legacy
toast, preserving one deterministic status message for users and E2E
assertions.
- Incorporates verified deep-review hardening: paused rebases now enter
the same abort-and-switch flow, dismissing that flow restores its prior
recovery context, and idle-only branch mutations are disabled instead of
silently discarding user input in recovery states.
- Preserves create/rename/merge/delete dialog state until typed machine
success so failures keep user input and operation progress remains
visible.
- Hands merge-conflict failures directly to the recovery UI by closing
the now-obsolete merge confirmation dialog when typed conflict state
appears.
- Consolidates conflict recovery into one connector-owned panel so the
file list appears once and the related Resolve with AI / Cancel sync
actions stay together.
- Nests current-branch and branch-inventory queries under an app-scoped
key so machine, rename, and version-preview mutations refresh both
caches without invalidating other apps.

<!-- This is an auto-generated description by cubic. -->
<a href="https://cubic.dev/pr/dyad-sh/dyad/pull/4061?utm_source=github"
target="_blank" rel="noopener noreferrer"
data-no-image-dialog="true"><picture><source
media="(prefers-color-scheme: dark)"
srcset="https://www.cubic.dev/buttons/review-in-cubic-dark.svg"><source
media="(prefers-color-scheme: light)"
srcset="https://www.cubic.dev/buttons/review-in-cubic-light.svg"><img
alt="Review in cubic"
src="https://www.cubic.dev/buttons/review-in-cubic-dark.svg"></picture></a>
<!-- End of auto-generated description by cubic. -->

---------

Co-authored-by: Will Chen <7344640+wwwillchen@users.noreply.github.com>