Repository navigation
feat: persist native runtime pane bindings - #16
Conversation
|
🔍 Automated Cursor review is underway. Please hold off on merging until the review comment lands here (usually 10–20 minutes). |
|
Review complete: Generation-1 method shapes are left intact (the four methods are new hashes, not edits of the frozen fixture), and the session fields are optional with serde defaults. The problems below are behavioral. HighRestore will execute a caller-chosen absolute command, including when agent resume is off. Managed Done is not what the shell shows, and the post-restore Done path never becomes a completion. MediumUnbind leaves a tombstone that does not follow a later move, and unbind does not make the binding replaceable. Live handoff throws away a fresh observation. Low
I did not find a generation-1 codec break. Windows cross-checks and a real two-host attach are still untested; |
|
Reviewed and approved via Plannotator at Re-verified the Cursor findings against the current head (Cursor reviewed before
No generation-1 codec changes; frozen fixtures untouched. |
Native Shuvcode Sessions need an exact display attachment that survives Herdr restart without taking over execution. Add advertised JSON
pane.bind_runtime,pane.get_runtime,pane.report_runtime, andpane.unbind_runtimeoperations with immutable attachment identity, applied/current acknowledgments, monotonic status sequences, and expiring observations. JSON ping also reports the actual peer session name so ShuvBro can verify its configured non-default destination before acting.Persist credential-free attach argv and binding-owner tombstones separately from frozen generation-1 codecs. Restore the exact native view, retain scrollback when attachment restoration fails, preserve ownership through pane moves, and reserve closed owners' public IDs across restart. Bound panes retain native status authority; the real client keeps Done after acknowledgement and restart while existing Seen filtering and completion-notification semantics remain intact. Shuvcode launch and distribution detection preserve the Shuvcode executable.
Companion integration: Shuvcode #440 supplies exact runtime attachment and presentation; ShuvBro #62 supplies orchestration policy and pane placement. The contract and joint evidence describe the boundary.
Validation
63835aa2: 3,830 Rust tests passed, 8 intentional skips; formatting, Linux Clippy, maintenance, hotpath, assets and API schema checks passed. Named/default ping and omitted-field compatibility are covered; frozen generation-1 fixtures are unchanged.aa98c90952d6b10ce14e9c030d2846d8fa24f6ddb57bcaa0187041d6be22b8f2: ShuvBro refused a mismatched session before native initialization. Continuous-watch cleanup/reopen confirmed exact foreground argv and both closed pane absences, preserved both generations' neighbors and parent focus, and retained native settlement with model requests 4 → 4.w5:p1and its workspace. After restart with onlyw1–w4surviving, the next workspace wasw6, confirming closed-owner identity reservation.Initial Windows CI exposed Unix-only fixture paths; they now use platform-native absolute paths with strict production validation retained. All seven GitHub checks at
63835aa2passed, including Ubuntu, macOS, Windows and ConPTY. Local Windows cross lint remains unverified because this environment lacks the configured Windows SDK libc file. The joint workflow qualification is local Linux with new managed homes; two-host operation and production load remain unqualified.