Skip to content

feat(macapp): remote workrooms in every build - #375

Merged
joelmoss merged 4 commits into
masterfrom
feat/remote-workrooms-ungated
Oct 8, 2026
Merged

joelmoss merged 4 commits into
masterfrom
feat/remote-workrooms-ungated

Conversation

@joelmoss

@joelmoss joelmoss commented Oct 8, 2026

Copy link
Copy Markdown
Owner

Remote workrooms are now fully usable in every build, stable included. This removes the Nightly/Dev gate and the hidden remoteWorkroomsPreview setting. It ships ahead of #260's success criteria, which now verify after the fact.

Behaviour changes

  • Every build now has remote workrooms.
    • "+" on a project row and New Workroom always open a place menu: This Mac, Docker, Apple Container, boxd.
    • Picking a project in the New Workroom dialog asks where. This Mac is highlighted, so Return twice still creates locally.
    • Settings ▸ General always shows the Remote workrooms (Codaset sign-in) section.
    • RemoteHosts.adopt runs on every reload in every build. A Mac that never made a container workroom has nothing recorded and nothing pending, so Docker is never touched.
  • Stable releases pin the workroom-host image.
    • release.yml gains a host-image job, the same one Nightly uses, and macapp needs it.
    • release.sh refuses a Release or Nightly build without WORKROOM_HOST_IMAGE@sha256.
  • Remote agent hand-off is on in every build. Without it, a remote host keeps its first agent until the box restarts, because its supervisor never idles it out. The local hand-off stays gated (AgentHandOff.isEnabled).
  • A remote create no longer needs gh when Codaset is signed in. When gh repo view can't answer, the create reads the project's origin with git alone. That covers https, git@host:owner/name and ssh:// remotes. Before, a Codaset-only user saw the place enabled, and every create failed with "Couldn't find its GitHub repository with gh."

Validation

  • make app-test (full suite): 3280 passed, 0 failed, 61 skipped.
  • make app-lint, make actions-lint and make app-test-scripts are clean.
  • New tests:
    • GitHubRepository(remote:): every git remote form, plus refusals.
    • WorkroomStatusResolver.originRepository.
    • Both were checked against deliberately broken code and went red.
  • Pre-landing /review:
    • Testing and maintainability specialists.
    • A Claude adversarial pass and a Codex adversarial challenge.
    • Its findings were fixed in the last commit, or are known and decided (below).
  • Nightly's host-image job: 0 failures in the last 40 Nightly runs.

Not checked

  • The pick-and-create step in the New Workroom dialog has no UI test. The code is unchanged here; only the gate in front of it was removed. A safe test needs a fixture CLI first, because fixture launches still use the real workroom CLI.
  • The fallback wiring inside createRemoteWorkroom has no test of its own. The parser and the resolver are covered.
  • Codex's structured review returned no severity tags, so that outside check is missing.

Known and decided

🤖 Generated with Claude Code

joelmoss and others added 3 commits October 8, 2026 10:09
Remote workrooms were Nightly and Dev only, and there only with the
hidden remoteWorkroomsPreview setting, until #260's success criteria
passed. The owner has lifted that gate: every build, stable included,
now offers New Workroom's places (This Mac, local containers, boxd),
opens and deletes remote workrooms, adopts their hosts at launch, and
shows the Remote workrooms section in Settings.

- Drop RemoteWorkrooms.isEnabled, its enabledForTesting seam, the
  remoteWorkroomsPreview key and the -WorkroomUITestRemotePreview
  fixture flag.
- The row's "+" is always the places menu, so CreateRowButton loses
  its plain-button form.
- Tests that turned the gate off now make the workroom unreachable the
  real ways: another build's host, or one still being created. The
  "turned off in this build" note and the preview-off UI test go.
- Design docs and macapp/AGENTS.md say the gate is gone; As-built
  sections are left as the record they are.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
With remote workrooms in every build, a stable release needs what a
Nightly already has:

- release.yml runs the host-image workflow under the release's tag and
  pins its digest into the DMG; release.sh refuses a Release build
  without one, as it already did a Nightly. Without it a stable app
  pulled the bare `workroom-host`, which Docker Hub refuses, so no
  container workroom could be created.
- AgentBootstrap hands a remote host's agent off to the bundled one in
  every build. It followed the local hand-off's Nightly-only gate, so a
  stable host kept its first agent until the box restarted (the
  supervisor never lets it idle out) and quietly lost each newer
  build's services. The local hand-off stays gated.
- Comments and design docs that still said remote workrooms were
  Nightly-only, or behind the preview, now say they are not.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… can't say

Pre-landing review fixes for ungating remote workrooms.

Codaset sign-in alone makes a remote place available, but every create first asked
`gh repo view` which GitHub repository the project is, and that needs gh installed and signed
in. A stable user signed in to Codaset without gh saw the place enabled, and every create
failed with "Couldn't find its GitHub repository with gh." Now, when gh can't answer, the
create reads the project's origin remote with git alone
(`WorkroomStatusResolver.originRepository`). `GitHubRepository(remote:)` parses the https,
scp-style (`git@host:owner/name`) and `ssh://` forms. gh still answers first, since it knows
which remote is GitHub's. A non-GitHub origin still fails with its host named.

Also corrects comments the ungating left false: TerminalTargetTests, SessionRestoreTests,
`Workroom.remoteNote`, the `remote-host-image` make target and ci.yml's host-image step.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Copilot AI balanced review requested due to automatic review settings October 8, 2026 09:37
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 8, 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-10-08T10:36:11.530261Z 349d2a3 New commits
ℹ️ 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.

@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: 8f8c51c8cc

ℹ️ 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".

Copilot AI 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.

🔵 Needs a closer look

It exposes remote provisioning and agent upgrades to stable before the real-provider criteria, while one restoration regression test no longer preserves host identity.

1 open finding
What changed in this PR

Enables remote workrooms in every macOS build and prepares stable releases to provision them safely.

Changes:

  • Removes preview/channel gates across UI, restoration, routing, and host adoption.
  • Pins stable releases to a tested multi-architecture host image and enables remote agent hand-off.
  • Adds Git-origin fallback when gh cannot resolve a repository.
File Description
Makefile Updates host-image documentation.
macapp/​WorkroomAppUITests/​NewWorkroomPlacesUITests.swift Tests always-visible place menus.
macapp/​WorkroomAppTests/​WorkroomStatusResolverTests.swift Tests Git-origin resolution.
macapp/​WorkroomAppTests/​TerminalTargetTests.swift Removes preview-gate expectations.
macapp/​WorkroomAppTests/​SessionRestoreTests.swift Updates remote restoration fixtures.
macapp/​WorkroomAppTests/​RemoteWorkroomRoutingTests.swift Removes test-only enablement.
macapp/​WorkroomAppTests/​RemoteProvisioningIntegrationTests.swift Removes preview setup.
macapp/​WorkroomAppTests/​RemoteHostsTests.swift Updates availability and ownership tests.
macapp/​WorkroomAppTests/​GitHubRepositoryTests.swift Covers Git remote parsing.
macapp/​WorkroomAppTests/​AppStoreDeleteRaceTests.swift Updates remote-create assertion.
macapp/​WorkroomApp/​Views/​SettingsView.swift Always shows remote settings.
macapp/​WorkroomApp/​Views/​ProjectSidebar.swift Always presents workroom places.
macapp/​WorkroomApp/​Views/​NewWorkroomDialog.swift Always asks where to create.
macapp/​WorkroomApp/​Core/​WorkroomStatusResolver.swift Resolves repositories from Git origin.
macapp/​WorkroomApp/​Core/​UITestFixture.swift Removes preview fixture configuration.
macapp/​WorkroomApp/​Core/​Session/​AgentHandOff.swift Updates hand-off documentation.
macapp/​WorkroomApp/​Core/​Session/​AgentBootstrap.swift Enables remote hand-off by default.
macapp/​WorkroomApp/​Core/​RemoteWorkrooms.swift Removes build/preview gating.
macapp/​WorkroomApp/​Core/​Models.swift Makes remote targets universally reachable.
macapp/​WorkroomApp/​Core/​GitHubRepository.swift Parses HTTPS and SSH remotes.
macapp/​WorkroomApp/​Core/​DefaultsKeys.swift Removes the preview preference.
macapp/​WorkroomApp/​Core/​AppStore.swift Always adopts hosts and adds origin fallback.
macapp/​Scripts/​release.sh Requires pinned images for stable releases.
macapp/​AGENTS.md Updates settings architecture notes.
docs/​designs/​remote-workrooms.md Records early stable rollout.
docs/​designs/​oq8-cross-machine-reattach.md Updates rollout and hand-off status.
.github/​workflows/​release.yml Builds and injects the stable host image.
.github/​workflows/​host-image.yml Documents stable and Nightly consumers.
.github/​workflows/​ci.yml Updates host-image comments.

🧠 Review effort: Balanced


Give feedback about Copilot approvals in this survey to enter a drawing for a $150 gift card.

Codex: Debug builds now always bundle the Linux agents. Remote
workrooms show in every build, so a Debug app that skipped them
offered Docker, Apple Container and boxd and then failed every
create with noBundledAgent. The WR_AGENT_LINUX opt-in is gone; CI's
app job installs the musl targets and cargo-zigbuild. Measured
locally: the first Debug build costs about 2 minutes more, later
incremental builds no measurable extra.

Copilot: the gated-restore test keeps one host ID across its
creating and serving snapshots, so it models the same host becoming
reachable rather than a replaced one.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@joelmoss
joelmoss merged commit 40dece3 into master Oct 8, 2026
14 checks passed
@joelmoss
joelmoss deleted the feat/remote-workrooms-ungated branch October 8, 2026 10:51
joelmoss added a commit that referenced this pull request Oct 8, 2026
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
joelmoss added a commit that referenced this pull request Oct 9, 2026
The local hand-off (#230) was gated to Nightly and Dev until Nightly
had proven it. Turn it on for stable too, at the owner's request: a
stable app now replaces a running older agent at launch, keeping every
session, instead of leaving it to run until 30s after its last terminal
closes. Remote hand-off has been on in every build since #375.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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.

2 participants