v0.9.160
Patch Changes
-
#930
a90258eThree places where Rove decided something was ready before it was.rove api addon a repo with a.rove/init.shno longer reports
SESSION_FAILED— quotingbun install's progress bar as the reason — for a
task that goes on to start normally. Repo init records its exit code in a
per-worktree marker; a marker left empty by an older release meant "re-run
init" to the launch shell and "init already finished" to the CLI, so the CLI
spent its engine probe against a shell that was still installing dependencies.
Both sides now read the marker the same way.rove api read-output --source terminalwithout--tabfinds an engine that
is running on a tab other than tab-1 when the task launches through a wrapper
command (claudecpa, any custom preset). It was searching the live sessions
for the task's vendor binary rather than the task's own, and answered "no
live terminal session for this task" while--tab tab-2returned a live tail.The daemon no longer answers
Cannot access 'handlers' before initialization
to a client that connects during the last moments of its startup — the socket
now starts accepting only once the request path is complete. This showed up as
Rove exiting 1 on roughly one launch in five on a busy machine. — @Sma1lboy -
#931
26f8c1aMigrating a legacykobeinstall to the Rove layout now succeeds on Windows.Every launch reported
state migration will retry: state.json: EPERM: operation not permitted, fsyncand then migrated nothing, so a machine
upgrading fromkobekept its old settings, themes and attachments stranded
under~/.kobeand~/.config/kobeforever — the failure left the completion
marker unwritten, which is what makes the next launch retry, so the warning
repeated indefinitely.The migration flushes each copied file before publishing it, and it was
reopening the file read-only to do so. Windows backsfsyncwith
FlushFileBuffers, which requires a writable handle and rejects a read-only
one; POSIX flushes anO_RDONLYdescriptor without complaint, so the bug was
invisible everywhere CI runs. BecausecopyFileSyncalso carries the source
file's mode onto the copy, a legacy file with no write bit defeats a writable
reopen just as thoroughly — on Windows and POSIX alike. The flush now widens
the temporary file's mode when it has to, then restores the mode it publishes. — @Sma1lboy