Skip to content

release: carry #1212, #1218 and #1085 onto 0.6.11 - #1252

Merged
mvschwarz merged 5 commits into
release/0.6.11from
release-0.6.11/carried-fixes
Oct 14, 2026
Merged

mvschwarz merged 5 commits into
release/0.6.11from
release-0.6.11/carried-fixes

Conversation

@mvschwarz

Copy link
Copy Markdown
Owner

Carries three already-reviewed fixes onto the 0.6.11 release branch, which starts at cb79b8c9. Nothing else from main comes with them.

Refs #1212
Refs #1218
Refs #1085

What is carried

Five commits, each made with git cherry-pick -x, so each names the commit it came from:

Fix Source Commits here Patch-id (here = source)
#1212: restart in place accepts a Codex launched through OpenRig's staged script, including on macOS cb79b8c9..df7ee774 (2 commits) 76c25487, 3f60aee2 2a3604b51927
#1218: restore keeps a Claude pane that exits to its shell, and rolls back only a missing conversation cb79b8c9..0b9704ec (2 commits) 2b868a2d, 1f047626 2d45d3e82df1
#1085: queue create --verify keeps the Slack wait for a registered person with a pane bf5d2b5f..f07ddfe3 (its own change only) 0eeeff2a 9a51d7fa7fe3

Each commit's own patch-id also equals its source commit's. The second commit's message is lightly reworded; its change is identical to the source's.

Nothing else came along

Merging

Please merge with a merge commit or a rebase, so the five commits keep their cherry picked from lines. A version and release-notes change
follows in a separate PR.

Tests

Release-branch PRs don't get the required checks attached automatically. Tests are dispatched on this branch's head; the run is linked
below.

orch-lead and others added 5 commits October 14, 2026 05:08
…ough its staged script

OPR.0.7.0.5. OpenRig types every Codex launch (fresh, fork, resume, and this restart's own
relaunch) as `/bin/sh <tmpdir>/openrig-tmux-send-<pid>-<uuid>.txt`, so a managed Codex runs one sh
below the pane's shell, and `rig seat restart --keep-conversation` refused it as pane_shape_unknown
(the same chain on 0.6.10). The shell-backed shape now also accepts exactly that one link: an sh
whose only argument is an absolute path with the name the tmux adapter gives its staged scripts
(isStagedSendScriptPath). Any other process between the shell and Codex is still refused.

The native harness gains a case that launches through the adapter's staging and restarts twice in
the same pane (red on main). It also folds in #1196's fixture LOW: the direct-native case compares
the stub with the reported replacement process and ties it to the respawned pane separately, so it
holds where the image's sh doesn't exec a lone command.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
(cherry picked from commit e773e5b)
…ns as bash

Found in review, measured on macOS: /bin/sh there is a shim that runs bash (or
dash or zsh), so ps names the staged script's process bash and the new link never matched. The
link now accepts the shells /bin/sh can run as (sh, bash, dash, zsh) for the process name, and
keeps every argv check: exactly two arguments, argv[0] /bin/sh or sh, and the staged absolute path.
A macOS-shaped fixture (bash, /bin/sh /var/folders/.../T/openrig-tmux-send-...) is accepted (red
before this change); `/bin/bash <script>` and an extra argument stay refused.

LOW: the staged script's name now comes from one prefix and suffix used by both the generator and
the matcher, and a unit test passes the real defaultTmuxFileOps().tmpName() through the matcher.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
(cherry picked from commit df7ee77)
…nly a missing conversation

A pod-aware resume rolled the seat back as unresumable whenever the runtime
adapter answered retry_fresh. Claude's adapter gives that answer both when
Claude reports the conversation doesn't exist and when the pane simply ends
up back at its shell, so a Claude that exited for any other reason lost its
pane, its error output with it, and was told its conversation was
unresumable.

The adapters now mark a retry_fresh failure that comes from the runtime's own
missing-conversation report (Claude's "No conversation found", Codex's missing
saved session, Pi's missing session file). The pod-aware restore rolls back
only on that mark. A pane that returned to its shell for another reason is
reported failed, with its session, pane and binding kept, as before the
rollback existed. The hint's other readers (the fresh fallback, the in-place
restart) are unchanged.

Refs #1191

Claude-Session: https://claude.ai/code/session_01WfCu2MmcrSGRNX9Rjv1h6u
(cherry picked from commit fae3e6e)
Claude's resume check reads the pane 16 times, then once more. The loop
already marks Claude's "No conversation found" as a missing conversation,
but the final read only checked resumed, attention and the shell, so a
report that first appeared there came back unmarked and the pod-aware
restore treated it as an ordinary failure. The final read now returns the
same marked result before the shell check.

Refs #1191

Claude-Session: https://claude.ai/code/session_01WfCu2MmcrSGRNX9Rjv1h6u
(cherry picked from commit 0b9704e)
…d person with a pane (#1085)

A registered person can also be a seat with its own pane. The destination resolver classes that address `pane-bound`, so `rig queue create --verify` reported only the terminal wake, even though the gateway may also post the row to that person in Slack. `GET /api/queue/:qitemId` now also returns `ownerNotificationLevel`, the level on the row's latest owner-notification transition (the one the Slack selector keys on), or null. When the terminal side applies and that level is set, or a gateway receipt already exists, `--verify` adds a `gateway` result: `posted`, a failure with its detail, or `still-pending` at the bound. The terminal side (`outcome`, `wakeResult`, `claim`) is reported as before, `humanReadership` stays unknown, and the wait keeps its 30 s default bound. "This is not a failed handoff" is no longer shown when Slack reports a failed delivery. A seat with no owner-notification level settles at once with no `gateway` field; gateway-routable destinations, registered aliases and `@external` keep the existing path; the create request, `--id` and `--no-nudge` are unchanged. With `output.compact` on, the short receipt keeps the whole `delivery` result, Slack side included. Refs #1029.

(cherry picked from commit f07ddfe)
@coderabbitai

coderabbitai Bot commented Oct 14, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration
  • Configuration used: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: c8646a44-7dbf-474f-afa9-a4402f37754d

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
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

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.

@mvschwarz

Copy link
Copy Markdown
Owner Author

Tests dispatched on head 0eeeff2a: https://github.com/mvschwarz/openrig/actions/runs/38515269116

@mvschwarz

Copy link
Copy Markdown
Owner Author

Tests on head 0eeeff2a, run 38515269116: 7/8 on both attempts. package-tests (cli) failed in test/chatroom.test.ts both times, on different cases of "chatroom wait/history reports an HTTP error" with --timeout 0.05 ("Timed out after 0.05 seconds" where the HTTP error was expected). The wait loop checks its deadline before handling an error response, so a mocked error that arrives after 50 ms reads as a timeout. Neither the test nor the chatroom command changed since 0.6.10, and no chatroom file is in this PR. The same code passed this file 54/54 in #1253's run (38516122112, 8/8). Attempt 2 was the only re-run; I read this as an unresolved timing failure, not a regression from this change.

@openrig-review openrig-review left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Approved at 0eeeff2, into release/0.6.11 (not main): the 0.6.11 candidate's three carried fixes, #1212 (two commits), #1218 (two commits) and #1085's own PR delta, as cherry-picks with their source lines, onto cb79b8c. Tree 0975a21e equals cb79b8c plus exactly the three deltas (19 files, their union); each commit's patch-id equals its source's. Tests run 38515269116 on this head: 7/8 on both attempts, package-tests (cli) failing a 0.05 s timeout race in chatroom.test.ts, a file unchanged since 0.6.10 and outside this delta; the same code passed 8/8, chatroom 54/54, in run 38516122112 on the stacked version-and-notes head. Read as indeterminate, not a regression; the exact-combination run on the release branch's final head settles it.

— dev60-planner@v-openrig-build

@mvschwarz
mvschwarz merged commit 1a73ec5 into release/0.6.11 Oct 14, 2026
15 of 17 checks passed
@mvschwarz
mvschwarz deleted the release-0.6.11/carried-fixes branch October 14, 2026 05:35
mvschwarz pushed a commit that referenced this pull request Oct 14, 2026
Brings the version and notes onto the release tip, after #1252 landed there by rebase. The capability page conflict keeps this branch's text; the tree is unchanged.
mvschwarz added a commit that referenced this pull request Oct 14, 2026
Version 0.6.10 to 0.6.11 in package.json, packages/{cli,daemon,ui}/package.json and package-lock.json; the 0.6.11 CHANGELOG section, whats-new note and capability page. Refs #1252.
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