Repository navigation
Conversation
exec_command keeps a session addressable until its final output and exit code are polled, retains final results until read, and lets an owner message end only the output wait. Git checkpoints skip repeated legacy-namespace probes and drain stderr under the command deadline. Paths drop the \?\ verbatim prefix before reaching Git, the native server runs at Normal priority, and the supervisor holds an OS lock for its lifetime. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
devnoname120
left a comment
There was a problem hiding this comment.
Reviewed 44bd419, including output/exit-status snapshots, session expiry and cancellation, owner-message wakeups, Git diagnostic draining, path normalization and the supervisor lock.
The core changes look sound and this is the closest of the four PRs to merging. The snapshot fix retains an addressable session for a later final drain; completed quiet sessions keep their exit receipt; owner messages end the output wait without resending stdin; Git diagnostics stay bounded while being fully drained. I found no additional functional blocker in these reviewed paths.
Validation: all 863 library tests passed, with 1 ignored, on macOS at this head. cargo clippy --all-targets -- -D warnings fails on introduced dead code (inline). CI independently reports that unused function, along with a needless_bool diagnostic in unchanged store.rs; the latter should be handled as baseline/toolchain drift, not blamed on this change.
Recommendation: request changes for the standalone branch's lint regression, then rerun its checks. Subject to that and the remaining CI results, I would prioritize this PR for merging first.
| StdMutex<HashMap<String, Vec<Weak<ExecSessionState>>>>, | ||
| > = OnceLock::new(); | ||
|
|
||
| pub(crate) fn conversation_has_running_commands(identity: &ConversationIdentity) -> bool { |
There was a problem hiding this comment.
[P2] Keep the standalone execution PR warning-free
conversation_has_running_commands has no caller anywhere in this branch; its consumers arrive only in #24. Removing the opportunistic reaper's empty-buffer check also leaves PendingBuffer::is_empty unused in non-test builds. Both now fail cargo clippy --all-targets -- -D warnings locally, and CI independently reports the unused function. Move the unused activity helper/registry into the commit that consumes it and remove or test-gate the obsolete is_empty helper, so this independently based PR can pass its required lint gate. The passing library tests do not cover this all-target build failure.
Move the conversation command-activity registry to the agent-teams change that consumes it, and compile PendingBuffer::is_empty only for tests now that the reaper no longer treats an empty buffer as an acknowledgement. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Thanks for the review. Fixed in c319e39:
|
Admission counted every retained session against maxSessions, so a client that never drained final results could hold all slots for the idle timeout. Only running processes now block admission: when the map is full, the least recently used finished-but-unread results are evicted (and logged) to admit the new command. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Session admission fixed in 78ca93d:
Exec session tests: 26/26 pass. Linux-target |
Summary
Split out of #20, as requested. This PR has the command-execution and Windows-service fixes, which don't depend on the other split PRs. Based on current
main(v2.3.29).Changes
exec_command/write_stdinGit checkpoints (
diff.rs)Windows paths and service
worktrees::strip_verbatim_prefixremoves\\?\prefixes before passing paths to Git and project clones.Testing
cargo check --all-targetsandcargo fmt --checkon this branch alone: pass.exec_command,exec_sessions,diff,markdown_chat::wait,worktreesandserviceunit tests pass, along withtests/tools_core,tests/worktree_selectionandtests/starvation.requested_output_budget_cannot_exceed_server_policyfails, but it fails the same way on unmodifiedmainon Windows. Its fixture command assumes/usr/bin.markdown_chat/wait.rsso an owner message can end a command's output wait.🤖 Generated with Claude Code