Conversation
PR SummaryMedium Risk Overview Updates the Written by Cursor Bugbot for commit 41c5076. This will update automatically on new commits. Configure here. |
|
Caution Review failedThe pull request is closed. WalkthroughThe NATS client traits (SubscribeClient, RequestClient, PublishClient) are generalized to accept subject parameters as any type implementing ToSubject + Send, rather than requiring String. The ToSubject trait is re-exported at the crate root, and mock implementations are updated to support the new generic signatures with subject conversion. Changes
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes Poem
✨ Finishing Touches
🧪 Generate unit tests (beta)
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. Comment |
Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
…ogging - Drop impl for CodexProcess: kill subprocess on re-spawn/drop to avoid zombies - resume_session: thread_resume errors are now non-fatal (warn + continue); Codex keeps threads alive regardless so failing here should not break prompts - close_session: add comment explaining no thread/close exists in Codex protocol - list_sessions: sort by session_id for deterministic output - new_session: deduplicate to_string_lossy() call (issue #6) - parse_event: trace-log when a message item has no output_text blocks
…ogging - Drop impl for CodexProcess: kill subprocess on re-spawn/drop to avoid zombies - resume_session: thread_resume errors are now non-fatal (warn + continue); Codex keeps threads alive regardless so failing here should not break prompts - close_session: add comment explaining no thread/close exists in Codex protocol - list_sessions: sort by session_id for deterministic output - new_session: deduplicate to_string_lossy() call (issue #6) - parse_event: trace-log when a message item has no output_text blocks
…ogging - Drop impl for CodexProcess: kill subprocess on re-spawn/drop to avoid zombies - resume_session: thread_resume errors are now non-fatal (warn + continue); Codex keeps threads alive regardless so failing here should not break prompts - close_session: add comment explaining no thread/close exists in Codex protocol - list_sessions: sort by session_id for deterministic output - new_session: deduplicate to_string_lossy() call (issue #6) - parse_event: trace-log when a message item has no output_text blocks
…ogging - Drop impl for CodexProcess: kill subprocess on re-spawn/drop to avoid zombies - resume_session: thread_resume errors are now non-fatal (warn + continue); Codex keeps threads alive regardless so failing here should not break prompts - close_session: add comment explaining no thread/close exists in Codex protocol - list_sessions: sort by session_id for deterministic output - new_session: deduplicate to_string_lossy() call (issue #6) - parse_event: trace-log when a message item has no output_text blocks
…ogging - Drop impl for CodexProcess: kill subprocess on re-spawn/drop to avoid zombies - resume_session: thread_resume errors are now non-fatal (warn + continue); Codex keeps threads alive regardless so failing here should not break prompts - close_session: add comment explaining no thread/close exists in Codex protocol - list_sessions: sort by session_id for deterministic output - new_session: deduplicate to_string_lossy() call (issue #6) - parse_event: trace-log when a message item has no output_text blocks
…ogging - Drop impl for CodexProcess: kill subprocess on re-spawn/drop to avoid zombies - resume_session: thread_resume errors are now non-fatal (warn + continue); Codex keeps threads alive regardless so failing here should not break prompts - close_session: add comment explaining no thread/close exists in Codex protocol - list_sessions: sort by session_id for deterministic output - new_session: deduplicate to_string_lossy() call (issue #6) - parse_event: trace-log when a message item has no output_text blocks
…ogging - Drop impl for CodexProcess: kill subprocess on re-spawn/drop to avoid zombies - resume_session: thread_resume errors are now non-fatal (warn + continue); Codex keeps threads alive regardless so failing here should not break prompts - close_session: add comment explaining no thread/close exists in Codex protocol - list_sessions: sort by session_id for deterministic output - new_session: deduplicate to_string_lossy() call (issue #6) - parse_event: trace-log when a message item has no output_text blocks
…eviewer dedup #1 — Linear post_comment: embed now uses idempotency_marker() The pre-check scan (tools/linear.rs:71) used super::idempotency_marker(key) which replaces -- with __ in the key. The embed (line 117) used the raw key directly, so the two paths produced different marker strings whenever the key contained --. The check would search for abc__def but the stored body had abc--def — a silent false negative that lets duplicates through. Now both paths call idempotency_marker() so write and scan are byte-identical. #2 — request_reviewers: filter already-added reviewers instead of all-or-nothing The previous dedup skipped the POST only if ALL requested reviewers were already in the pending list. A crash after GitHub partially applied the request (some reviewers added, others not) caused recovery to re-execute with all reviewers, sending duplicate notifications to those already added. Now we filter the already-present reviewers from the request list and only POST the missing ones; if no reviewers are missing the POST is skipped entirely. Note: #6 (startup recovery rate limiting) turned out to be already implemented correctly — recover_stale_promises processes promises sequentially, not concurrently (intentional, see runner.rs comment at line 1092).
#5 — heartbeat KV timeout now reloads revision and retries the write, matching the CAS-conflict arm. Under sustained NATS degradation the old code left claimed_at frozen; the reload+retry keeps it fresh and avoids false-positive stale detection by startup recovery. #2 — recovering resets to false when checkpointing is permanently disabled (payload exceeds all trim levels). Previously recovering stayed true forever, causing same-input tool calls in genuinely-new turns to return stale cached results (polling anti-pattern). New test recovering_resets_when_checkpointing_permanently_disabled covers the case. #7 — summarize_dropped_messages is now wrapped in a 30 s timeout. The call inherits a 5-minute LLM timeout which blocks the checkpoint write and leaves claimed_at stale for that window. 30 s is generous for a short summary; on timeout the empty Vec triggers the plain-trim fallback that was already there. #6 — list_running timeout raised from NATS_KV_TIMEOUT (10 s) to a dedicated LIST_RUNNING_TIMEOUT (2 min). The operation does N+1 KV reads; at 50+ stale promises under mild load the 10 s ceiling fires and silently skips recovery. 2 min covers hundreds of promises without blocking the consumer loop (recovery runs in a background task).
…ogging - Drop impl for CodexProcess: kill subprocess on re-spawn/drop to avoid zombies - resume_session: thread_resume errors are now non-fatal (warn + continue); Codex keeps threads alive regardless so failing here should not break prompts - close_session: add comment explaining no thread/close exists in Codex protocol - list_sessions: sort by session_id for deterministic output - new_session: deduplicate to_string_lossy() call (issue #6) - parse_event: trace-log when a message item has no output_text blocks
…ogging - Drop impl for CodexProcess: kill subprocess on re-spawn/drop to avoid zombies - resume_session: thread_resume errors are now non-fatal (warn + continue); Codex keeps threads alive regardless so failing here should not break prompts - close_session: add comment explaining no thread/close exists in Codex protocol - list_sessions: sort by session_id for deterministic output - new_session: deduplicate to_string_lossy() call (issue #6) - parse_event: trace-log when a message item has no output_text blocks
No description provided.