Skip to content

sync: upstream main 2026-10-11d (5 commits → v1.4.224-0) - #20

Merged
karlorz merged 9 commits into
fork-mainfrom
sync/upstream-2026-10-11d
Oct 11, 2026
Merged

karlorz merged 9 commits into
fork-mainfrom
sync/upstream-2026-10-11d

Conversation

@karlorz

@karlorz karlorz commented Oct 11, 2026

Copy link
Copy Markdown
Owner

ELI5

This branch copies 5 new commits from upstream stablyai/orca main onto the fork's working branch fork-main, so the fork can later cut desktop tag v1.4.224-0. It does not merge itself, does not cut a tag, and does not deploy.

What Changed

Before: fork-main (cc1230a91d3, PR #19) was 5 commits behind stablyai/orca main at b4aec8a8961. upstream/main was not an ancestor of fork-main, so fork-next-desktop-tag.mjs --write refused.

After: sync/upstream-2026-10-11d is a --no-ff merge of upstream/main @ b4aec8a8961 into fork-main. No conflicts. Auto-merge kept fork protocol capabilities (SSH_TARGET_MANAGEMENT, FORK_TERMINAL_AND_AGENT_LAUNCH) and added upstream terminal.spawn-intent.v1. Pet speech RPCs, orcad host-adapter extraction, and automation agentFlags stay.

The five commits: docker-ssh-host fixture rename + posixShellQuote (stablyai#27449), declared spawn intent from paired clients (stablyai#27452), one managed-host setup path for ssh-orcad specs (stablyai#27465), README downloads badge, folder-workspace sidebar blank-row fix (stablyai#26376).

Mechanism: merge commit 1e2fb380435 plus notes in docs/audits/SYNC-NOTES-2026-10-11d.md.

Why

The tag script's ancestor guard must stay on. A follow-up merge (this PR) is the same path as #15/#17/#18/#19: keep fork deltas, take upstream product changes, record resolutions, let GitHub CI run the full matrix.

Linked Issue

N/A — fork maintainer sync; no upstream issue.

Visual Proof

N/A — no new fork UI. Ingests upstream commits (spawn intent, ssh-orcad setup gate, folder-workspace sidebar blank-row fix). Auto-merge preserves existing fork pet-speech and protocol capabilities.

Testing

  • tsc --noEmit -p config/tsconfig.tc.cli.json clean via heavy-run

  • vitest --maxWorkers=1: spawn-intent + admission + rpc errors (73), worktree/folder metadata (25), e2e routing (15), pet-speak routing (4)

  • Full pnpm tc (node+web) and electron-builder not run locally. GitHub CI is the full matrix.

  • Automated tests added/updated, or explained why not below

  • I manually tested these changes locally

AI Disclosure

Review

Agent skill upstream boundary

  • Not applicable, or this change copies or mechanically translates no upstream skill-installer source, tests, fixtures, registry entries, path tables, comments, or documentation.

Notes

Coolify HOLD / no auto-deploy. Do not merge this PR from CI. Do not cut v1.4.224-0 from this PR. Do not touch Coolify. Coord escalates the fork merge to newbie after CI is green.

Checklist

  • This PR is small and focused
  • I explained what changed and why (ELI5, the user-facing before/after, the mechanism, and why over the alternatives)
  • Before/after screenshots or videos attached for UI changes, or N/A with reason
  • Self-reviewed for correctness, security, and performance
  • Cross-platform, SSH/remote, and path/shortcut impact considered (or N/A)
  • pnpm lint, pnpm typecheck, pnpm test, and pnpm build pass (or CI will cover; local preferred)

OrcaWin and others added 9 commits October 11, 2026 05:15
…3.99 0.11b) (stablyai#27449)

* test(e2e): one posixShellQuote; docker-ssh-host fixture names

* test(e2e): leave the main-failing stall-recovery spec untouched

---------

Co-authored-by: m4air <m4air@Mac.localdomain>
…ablyai#27452)

* feat(runtime): accept a declared spawn intent from paired clients

Paired clients can now say whether a terminal restore is the pane the
user is looking at (user-resume) or a hidden one (automatic-restore).
The host forwards the intent to its fork gate, advertises
terminal.spawn-intent.v1 so clients only send it to hosts that accept
it (terminal.ensureAgentSession params are strict), and reports a
deferred fork as terminal_spawn_deferred with its reason.

No client sends the field yet; that lands next with the sleeping-pane
handling.

* fix(daemon): a claimed agent resume cannot declare itself interactive

Interactive forks skip the gate, and paired clients can now declare
intent, so the host keeps inferring from the claim when a request
says interactive.

* fix(runtime): clients may only declare restore intents

A daemon kept running across an update still lets a declared
interactive request skip its gate, even for a claimed resume. The RPC
and local IPC now accept only user-resume and automatic-restore, and
the daemon request boundary turns a claimed interactive into an
automatic restore.

---------

Co-authored-by: m4air <m4air@Mac.localdomain>
…d specs (stablyai#27465)

Co-authored-by: m4air <m4air@Mac.localdomain>
stablyai#26376)

* fix(sidebar): stop a removed folder workspace from leaving a blank row

A folder-project workspace exists only as its worktreeMeta row. When it is
deleted while a terminal is still bound, the renderer keeps the row until its
teardown runs, and a PTY reattach in that window stamps lastActivityAt through
worktrees:updateMeta. setWorktreeMeta then minted a default row with an empty
name, which the sidebar listed under the project name and which came back after
every delete. The metadata IPC now refuses to create a row for a folder
workspace instance that no longer exists.

Fixes stablyai#22712

Claude-Session: https://claude.ai/code/session_01XZXEdbC4RKp288k2gBzLUW

* fix(sidebar): also refuse runtime writes to a removed folder workspace

Move the existence check into a shared predicate that matches any same-id
folder owner, so an owner at a different path on another host cannot bypass
it, and apply it to the runtime's worktree.set path, where a resolution
snapshot taken before the removal still returns the workspace.

Claude-Session: https://claude.ai/code/session_01XZXEdbC4RKp288k2gBzLUW

* test: type the removed-folder-workspace fixture meta for the anti-slop lint

---------

Co-authored-by: m4air <m4air@Mac.localdomain>
Five-commit --no-ff merge of stablyai/orca main (b4aec8a) onto
fork-main (cc1230a). No conflicts; auto-merges kept fork protocol
capabilities and added terminal.spawn-intent.v1.
Bun's first import after vi.resetModules() missed the hoisted ../ipc/pty
mock, so the real PTY barrel loaded and setLocalPtyProviderMock stayed at
0 calls on shard 3/5. Re-pin fs/net/ipc/pty/spawner/adapter after reset
and load ipc/pty before daemon-provider-init.
anti-slop/no-module-mocking flags vi.doMock in src/ helpers. Keep the
bun resetModules re-pin in test-only daemon-init-reset-modules-pin.ts
and file-scope the rule there, matching mock-descendant-sweep.ts.
@karlorz
karlorz merged commit 5d9df6e into fork-main Oct 11, 2026
57 checks passed
karlorz pushed a commit that referenced this pull request Oct 19, 2026
…-page readers off the deprecated owner resolver (stablyai#30478)

Thirteen read-routing callers (#4, #5, #10-#20 of the round-3 caller list) read the owner through
runtimeEnvironmentIdWithLegacyFallbackUnlessTwin. A workspace two hosts publish is no longer
searched on either host. The focus-read ratchet now counts the legacy-fallback adapter, which
reads the focused runtime inside an object literal its discovery skipped; the five F1 entries
that blind spot pruned come back. Deprecated importers 53 -> 40.
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.

3 participants