release: v0.3.6 runtime reliability - #26
Conversation
📝 WalkthroughWalkthroughThe release adds delegation-policy inheritance, durable retry and truncation diagnostics, sidecar transcript locking, complete task-status publication, TUI indicators, and version 0.3.6 release metadata. ChangesRuntime reliability and release updates
Estimated code review effort: 4 (Complex) | ~60 minutes 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches 💡 1📝 Generate docstrings 💡
🧪 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 |
There was a problem hiding this comment.
Actionable comments posted: 6
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
crates/orca-tui/src/ui.rs (1)
1320-1347: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winDo not return before adding the diagnostics.
The
returnin the approval-required backgroundedMainSessionbranch exitstask_detail_labelbefore Lines 1337-1347 appendretried Nandoutput truncated. This hides both diagnostics whentask.toolis present. Replace the early return with a normaldetailvalue and add this case toworkflow_panel_labels_backgrounded_approval_tool.Suggested fix
if let Some(tool) = task.tool.as_deref() { - return format!("waiting on {tool} • backgrounded • {}", elapsed_label(task)); + format!("waiting on {tool} • backgrounded • {}", elapsed_label(task)) + } else { + format!("backgrounded • {}", elapsed_label(task)) } - format!("backgrounded • {}", elapsed_label(task))🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@crates/orca-tui/src/ui.rs` around lines 1320 - 1347, Replace the early return in task_detail_label’s backgrounded approval-required MainSession branch with a normal detail value so retry_count and output_truncated diagnostics are appended. Update workflow_panel_labels_backgrounded_approval_tool to cover this tool-present case while preserving the existing label text.
🧹 Nitpick comments (2)
crates/orca-core/src/config/mod.rs (1)
979-1000: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winTest
apply_towith a distinct child configuration.Lines 983-1000 apply the snapshot to the same
parentthat created it. The policy assertions pass even if an assignment inapply_tois removed. Create a child configuration with different approval, workspace, permission, and directory values before applying the snapshot. Use a non-emptypermission_profilesmap to test that field too.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@crates/orca-core/src/config/mod.rs` around lines 979 - 1000, Update the DelegationSnapshot apply_to test around DelegationSnapshot::from_config and apply_to to create a distinct child configuration with different approval mode, workspace roots, permission rules, additional working directories, and a non-empty permission_profiles map before applying the snapshot. Apply the snapshot to that child, then assert the snapshot values overwrite the child configuration while preserving the existing model assertion.crates/orca-runtime/tests/runtime_surface_commit.rs (1)
3097-3098: 🗄️ Data Integrity & Integration | 🔵 Trivial | ⚡ Quick winExercise non-default retry and truncation state across all affected contracts.
All changed fixtures use
retry_count = 0andoutput_truncated = false. The tests do not detect serialization, projection, or recovery regressions.
crates/orca-runtime/tests/runtime_surface_commit.rs#L3097-L3098: use non-default values and assert them after recovery.crates/orca-core/src/event_schema.rs#L1519-L1520: assert both fields in the workflow task event payload.crates/orca-core/src/event_schema.rs#L1569-L1570: assert both fields in the single-task event payload.crates/orca-runtime/src/runtime_special.rs#L809-L810: assert both fields in task-summary JSON.tests/workflow_types_contract.rs#L119-L120: assert both serialized contract fields.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@crates/orca-runtime/tests/runtime_surface_commit.rs` around lines 3097 - 3098, Use non-default retry_count and output_truncated values in the recovery fixture and assert both values afterward. In crates/orca-core/src/event_schema.rs at lines 1519-1520 and 1569-1570, add assertions for both fields in the workflow-task and single-task event payloads; in crates/orca-runtime/src/runtime_special.rs at lines 809-810, assert both task-summary JSON fields; and in tests/workflow_types_contract.rs at lines 119-120, assert both serialized contract fields.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@crates/orca-runtime/src/tasks.rs`:
- Around line 773-781: The has_active_tasks and requires_attention methods must
evaluate task statuses from an authoritative persisted session snapshot rather
than only self.list(). Refresh the registry from persistence before applying the
existing predicates, propagate any persistence-read failure through the API, and
ensure refreshed records replace stale entries without discarding their local
TaskControl.
- Around line 904-921: Update record_retry so transitioning an ApprovalRequired
task to Running clears all approval-specific state, including tool,
pending_tool_call, pending_tool_approval_response, and
pending_provider_response, while preserving the existing retry metadata updates.
Add a regression test covering retry of an approval-required task and verifying
these fields are cleared.
In `@crates/orca-runtime/src/thread_store/local.rs`:
- Line 411: Update the compression and append flow around acquire_file_lock,
write_record, and the session artifact resolution so compression cannot delete a
transcript while a writer is waiting or active: either hold/co-ordinate the lock
across the writer’s artifact selection and open, or have appenders re-resolve
the current artifact after acquiring it. Add a concurrent compression-and-append
test that verifies records remain in one valid transcript/archive without a
recreated plaintext file.
In `@crates/orca-runtime/src/thread_store/writer.rs`:
- Line 752: Update the restore flow around acquire_file_lock so that, after
acquiring the lock, it detects a missing compressed path with an existing
plain_path and returns plain_path instead of attempting File::open(&path). Add a
concurrent restore test covering two callers resuming the same transcript while
the first removes the compressed source.
In `@crates/orca-tui/src/ui.rs`:
- Around line 1337-1347: Update task_detail_label and its fixed-height
workflow-row rendering so the base detail is width-bounded before appending
retry and truncation diagnostics, or render those diagnostics on a separate row.
Ensure both “retried N” and “output truncated” remain visible in narrow workflow
cells. Add a focused TestBackend check covering both annotations in a narrow
row.
In `@site/src/shared.ts`:
- Around line 7-14: Update the earlier release entries in the shared releases
collection and the links.github and links.releases values in site/src/shared.ts
to use the echoVic/orca-agent repository, matching the existing v0.3.0+ release
URLs and npm package repository; preserve all versions, dates, and other link
values.
---
Outside diff comments:
In `@crates/orca-tui/src/ui.rs`:
- Around line 1320-1347: Replace the early return in task_detail_label’s
backgrounded approval-required MainSession branch with a normal detail value so
retry_count and output_truncated diagnostics are appended. Update
workflow_panel_labels_backgrounded_approval_tool to cover this tool-present case
while preserving the existing label text.
---
Nitpick comments:
In `@crates/orca-core/src/config/mod.rs`:
- Around line 979-1000: Update the DelegationSnapshot apply_to test around
DelegationSnapshot::from_config and apply_to to create a distinct child
configuration with different approval mode, workspace roots, permission rules,
additional working directories, and a non-empty permission_profiles map before
applying the snapshot. Apply the snapshot to that child, then assert the
snapshot values overwrite the child configuration while preserving the existing
model assertion.
In `@crates/orca-runtime/tests/runtime_surface_commit.rs`:
- Around line 3097-3098: Use non-default retry_count and output_truncated values
in the recovery fixture and assert both values afterward. In
crates/orca-core/src/event_schema.rs at lines 1519-1520 and 1569-1570, add
assertions for both fields in the workflow-task and single-task event payloads;
in crates/orca-runtime/src/runtime_special.rs at lines 809-810, assert both
task-summary JSON fields; and in tests/workflow_types_contract.rs at lines
119-120, assert both serialized contract fields.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro Plus
Run ID: fec92c70-feac-4383-b435-f660b96272e7
⛔ Files ignored due to path filters (1)
Cargo.lockis excluded by!**/*.lock
📒 Files selected for processing (36)
Cargo.tomlcrates/orca-core/src/config/mod.rscrates/orca-core/src/event_schema.rscrates/orca-core/src/task_types.rscrates/orca-runtime/src/command/launch.rscrates/orca-runtime/src/controller.rscrates/orca-runtime/src/provider_turn.rscrates/orca-runtime/src/runtime_host.rscrates/orca-runtime/src/runtime_readonly_tool_turn.rscrates/orca-runtime/src/runtime_special.rscrates/orca-runtime/src/runtime_subagent_call.rscrates/orca-runtime/src/runtime_surface/commands.rscrates/orca-runtime/src/runtime_surface/projection.rscrates/orca-runtime/src/runtime_surface/store.rscrates/orca-runtime/src/subagent.rscrates/orca-runtime/src/subagent_async_worker.rscrates/orca-runtime/src/subagent_execution.rscrates/orca-runtime/src/tasks.rscrates/orca-runtime/src/thread_store/local.rscrates/orca-runtime/src/thread_store/writer.rscrates/orca-runtime/src/tool_turn.rscrates/orca-runtime/tests/runtime_surface_commit.rscrates/orca-runtime/tests/runtime_surface_reducer.rscrates/orca-tui/src/app.rscrates/orca-tui/src/input_event_actions.rscrates/orca-tui/src/runtime_event_projection.rscrates/orca-tui/src/surface_projection.rscrates/orca-tui/src/types.rscrates/orca-tui/src/ui.rsdocs/production-roadmap.mddocs/releases/v0.3.6.mdnpm/orca/package.jsonsite/public/sitemap.xmlsite/src/changelog/Changelog.tsxsite/src/shared.tstests/workflow_types_contract.rs
| pub fn has_active_tasks(&self) -> bool { | ||
| self.list().into_iter().any(|task| task.status.is_active()) | ||
| } | ||
|
|
||
| pub fn requires_attention(&self) -> bool { | ||
| self.list() | ||
| .into_iter() | ||
| .any(|task| task.status.requires_attention()) | ||
| } |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟠 Major | 🏗️ Heavy lift
Read the persisted session state before reporting registry-wide activity.
Lines 773-781 only inspect self.list(), which reads the local in-memory map. An attached worker can create or update tasks after this registry loaded its map. The existing persistent-session test shows that the owner list() omits a worker-created grandchild.
These methods can report no active task, or no required attention, while another process has recorded that state. This can publish session completion from a stale task view.
Evaluate these predicates from an authoritative persisted session snapshot. Propagate a persistence-read failure instead of returning a stale false value. Ensure refresh replaces stale existing records while preserving their local TaskControl.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@crates/orca-runtime/src/tasks.rs` around lines 773 - 781, The
has_active_tasks and requires_attention methods must evaluate task statuses from
an authoritative persisted session snapshot rather than only self.list().
Refresh the registry from persistence before applying the existing predicates,
propagate any persistence-read failure through the API, and ensure refreshed
records replace stale entries without discarding their local TaskControl.
| pub fn record_retry(&self, id: &str, error: impl Into<String>) -> Result<(), String> { | ||
| let error = error.into(); | ||
| self.update_task(id, |record| { | ||
| if is_terminal(record.status) | ||
| && !matches!( | ||
| record.status, | ||
| TaskStatus::Failed | TaskStatus::ApprovalRequired | ||
| ) | ||
| { | ||
| return Err(task_state_error("record_retry", record.status)); | ||
| } | ||
| record.retry_count = record.retry_count.saturating_add(1); | ||
| record.status = TaskStatus::Running; | ||
| record.error = Some(error.clone()); | ||
| record.result = None; | ||
| record.completed_at_ms = None; | ||
| record.last_activity_at_ms = Some(now_ms()); | ||
| Ok(()) |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟠 Major | ⚡ Quick win
Clear approval state when retrying an approval-required task.
Line 907 permits TaskStatus::ApprovalRequired. Lines 916-920 set the task to Running but retain tool, pending_tool_call, pending_tool_approval_response, and pending_provider_response.
The task summary can then show a pending approval that submit_pending_tool_approval_response rejects because the task is no longer ApprovalRequired. The stale provider response also persists across reloads.
Clear all approval-specific fields during this transition. Add a regression test for retrying an approval-required task.
Proposed fix
record.status = TaskStatus::Running;
record.error = Some(error.clone());
record.result = None;
+ record.tool = None;
+ record.pending_tool_call = None;
+ record.pending_tool_approval_response = None;
+ record.pending_provider_response = None;
record.completed_at_ms = None;📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| pub fn record_retry(&self, id: &str, error: impl Into<String>) -> Result<(), String> { | |
| let error = error.into(); | |
| self.update_task(id, |record| { | |
| if is_terminal(record.status) | |
| && !matches!( | |
| record.status, | |
| TaskStatus::Failed | TaskStatus::ApprovalRequired | |
| ) | |
| { | |
| return Err(task_state_error("record_retry", record.status)); | |
| } | |
| record.retry_count = record.retry_count.saturating_add(1); | |
| record.status = TaskStatus::Running; | |
| record.error = Some(error.clone()); | |
| record.result = None; | |
| record.completed_at_ms = None; | |
| record.last_activity_at_ms = Some(now_ms()); | |
| Ok(()) | |
| pub fn record_retry(&self, id: &str, error: impl Into<String>) -> Result<(), String> { | |
| let error = error.into(); | |
| self.update_task(id, |record| { | |
| if is_terminal(record.status) | |
| && !matches!( | |
| record.status, | |
| TaskStatus::Failed | TaskStatus::ApprovalRequired | |
| ) | |
| { | |
| return Err(task_state_error("record_retry", record.status)); | |
| } | |
| record.retry_count = record.retry_count.saturating_add(1); | |
| record.status = TaskStatus::Running; | |
| record.error = Some(error.clone()); | |
| record.result = None; | |
| record.tool = None; | |
| record.pending_tool_call = None; | |
| record.pending_tool_approval_response = None; | |
| record.pending_provider_response = None; | |
| record.completed_at_ms = None; | |
| record.last_activity_at_ms = Some(now_ms()); | |
| Ok(()) |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@crates/orca-runtime/src/tasks.rs` around lines 904 - 921, Update record_retry
so transitioning an ApprovalRequired task to Running clears all
approval-specific state, including tool, pending_tool_call,
pending_tool_approval_response, and pending_provider_response, while preserving
the existing retry metadata updates. Add a regression test covering retry of an
approval-required task and verifying these fields are cleared.
| let compressed_path = path.with_extension("jsonl.zst"); | ||
| let lock = OpenOptions::new().read(true).write(true).open(&path)?; | ||
| let _lock = acquire_file_lock(&path, &lock)?; | ||
| let _lock = acquire_file_lock(&path)?; |
There was a problem hiding this comment.
🗄️ Data Integrity & Integration | 🟠 Major | 🏗️ Heavy lift
Prevent compression from splitting a live transcript.
A write_record(&path, ...) blocked on this lock will continue after compression deletes path. It then uses OpenOptions::create(true) and recreates a new plaintext transcript. The session can then have a .jsonl.zst archive and a separate .jsonl file with later records.
Do not compress a session with an active writer. Otherwise, make appenders resolve the current transcript artifact after they acquire the lock. Add a concurrent compression-and-append test.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@crates/orca-runtime/src/thread_store/local.rs` at line 411, Update the
compression and append flow around acquire_file_lock, write_record, and the
session artifact resolution so compression cannot delete a transcript while a
writer is waiting or active: either hold/co-ordinate the lock across the
writer’s artifact selection and open, or have appenders re-resolve the current
artifact after acquiring it. Add a concurrent compression-and-append test that
verifies records remain in one valid transcript/archive without a recreated
plaintext file.
| let plain_path = path.with_extension(""); | ||
| let lock = OpenOptions::new().read(true).write(true).open(&path)?; | ||
| let _lock = acquire_file_lock(&path, &lock)?; | ||
| let _lock = acquire_file_lock(&path)?; |
There was a problem hiding this comment.
🩺 Stability & Availability | 🟠 Major | ⚡ Quick win
Handle a transcript restored while waiting on its lock.
If two callers resume the same .zst transcript, the first caller restores it and removes path. The second caller acquires the .zst.lock after that work completes, then File::open(&path) on Line 754 fails with NotFound.
After acquiring the lock, return plain_path when the compressed source is gone and the plaintext target exists. Add a concurrent restore test.
Proposed fix
let plain_path = path.with_extension("");
let _lock = acquire_file_lock(&path)?;
+ if !path.exists() && plain_path.exists() {
+ return Ok(plain_path);
+ }
let result = (|| {📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| let _lock = acquire_file_lock(&path)?; | |
| let plain_path = path.with_extension(""); | |
| let _lock = acquire_file_lock(&path)?; | |
| if !path.exists() && plain_path.exists() { | |
| return Ok(plain_path); | |
| } |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@crates/orca-runtime/src/thread_store/writer.rs` at line 752, Update the
restore flow around acquire_file_lock so that, after acquiring the lock, it
detects a missing compressed path with an existing plain_path and returns
plain_path instead of attempting File::open(&path). Add a concurrent restore
test covering two callers resuming the same transcript while the first removes
the compressed source.
| export const releaseVersion = "v0.3.6"; | ||
|
|
||
| export const releases = [ | ||
| { | ||
| version: "v0.3.6", | ||
| date: "2026-08-06", | ||
| url: "https://github.com/echoVic/orca-agent/releases/tag/v0.3.6", | ||
| }, |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "== files =="
git ls-files | rg '(^site/src/shared\.ts$|^npm/orca/package\.json$|package\.json$|README|pnpm-lock.yaml|package-lock.json|yarn.lock)' || true
echo
echo "== site/src/shared.ts excerpt =="
if [ -f site/src/shared.ts ]; then
nl -ba site/src/shared.ts | sed -n '1,120p'
fi
echo
echo "== npm/orca/package.json =="
if [ -f npm/orca/package.json ]; then
cat npm/orca/package.json
fi
echo
echo "== repository/url references =="
rg -n "github\.com/echoVic/(orca-agent|blade-deepseek)|\"repository\"|\"homepage\"|\"bugs\"|links\.|releaseVersion|releases" -S . \
-g '!node_modules' -g '!dist' -g '!build' -g '!coverage' || true
echo
echo "== git diff summary =="
git diff --stat || true
git diff -- site/src/shared.ts npm/orca/package.json 2>/dev/null | sed -n '1,220p' || trueRepository: echoVic/orca-agent
Length of output: 480
🌐 Web query:
github echoVic orca-agent releases blade-deepseek npm package
💡 Result:
Orca is a DeepSeek-native coding agent developed by echoVic, designed to perform terminal-based coding tasks [1][2]. The project is centrally managed in the GitHub repository echoVic/orca-agent [1]. While a repository named echoVic/blade-deepseek also exists and refers to the same project [3][4], the official npm package for Orca is published under the scope @blade-ai/orca [2][5]. Key details regarding the project and its distribution include: - Repository: The primary GitHub repository is https://github.com/echoVic/orca-agent [1]. - NPM Package: The project is distributed via npm as @blade-ai/orca [2][5]. Installation is performed using the command: npm install -g @blade-ai/orca [2][5]. - Functionality: Orca is a Rust-based terminal agent that leverages DeepSeek's reasoning and tool-use capabilities to manage multi-turn coding tasks, including reading/writing code, running shell commands, and verifying results [1][2][6]. - Compatibility: It supports macOS, Linux, and Windows (ARM64 and x64) and provides prebuilt archives via GitHub Releases [1][2][5]. The project ecosystem, maintained by echoVic, also includes related tools such as blade-code, blade-agent-sdk, and blade-agent-runtime [7][4].
Citations:
- 1: https://github.com/echoVic/orca-agent
- 2: https://orcaagent.dev/
- 3: https://github.com/echoVic/blade-deepseek
- 4: https://github.com/echoVic/echoVic
- 5: https://www.npmjs.com/package/@blade-ai/orca
- 6: https://www.sourcepulse.org/projects/33208566
- 7: https://github.com/echovic
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "== site/src/shared.ts excerpt =="
python3 - <<'PY'
from pathlib import Path
p = Path("site/src/shared.ts")
lines = p.read_text().splitlines()
for i in range(0, min(len(lines), 120)):
print(f"{i+1:4d}: {lines[i]}")
PY
echo
echo "== repository metadata files =="
for f in README.md npm/orca/package.json package.json site/package.json; do
if [ -f "$f" ]; then
printf "\n--- %s ---\n" "$f"
python3 - <<PY
from pathlib import Path
import json
p = Path("$f")
text = p.read_text()
if p.suffix == ".json":
data = json.loads(text)
for key in ("name","repository","homepage","bugs","devDependencies","dependencies"):
if key in data:
print(key, "=", data[key])
else:
for i,line in enumerate(text.splitlines(),1):
if any(s in line for s in ["github.com/echoVic/", "orca-agent", "blade-deepseek", "npmjs", "`@blade-ai/orca`"]):
print(f"{i:4d}: {line}")
PY
fi
done
echo
echo "== all echoVic GitHub URL references =="
python3 - <<'PY'
from pathlib import Path
import hashlib
def is_code(src):
return src.startswith('#!') or any(src.endswith(ext) for ext in {'.js','.ts','.tsx','.jsx','.json','.yml','.yaml','.md','.mdx'})
roots = Path(".")
for p in roots.rglob("*"):
if p.is_file() and isinstance(p, Path) and not any(part in {'.git','node_modules','.next','.nuxt','dist','build','coverage'} for part in p.parts):
try:
src = p.read_text(errors='ignore')
except Exception:
continue
if 'echoVic' in src:
for i,line in enumerate(src.splitlines(),1):
if 'github.com/echoVic' in line or ('`@blade-ai/orca`' in line and 'npmjs' in line):
print(f"{p}:{i}: {line.strip()}")
PYRepository: echoVic/orca-agent
Length of output: 37162
Align shared release URLs with the orca-agent repository.
releaseVersion and the v0.3.0+ releases point to echoVic/orca-agent, but site/src/shared.ts:53-113 still send earlier releases to echoVic/blade-deepseek. site/src/shared.ts:1131-1133 also keeps links.github and links.releases on blade-deepseek, and the npm orca package uses orca-agent. Change these shared links to orca-agent so changelog and footer navigation match the current repository.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@site/src/shared.ts` around lines 7 - 14, Update the earlier release entries
in the shared releases collection and the links.github and links.releases values
in site/src/shared.ts to use the echoVic/orca-agent repository, matching the
existing v0.3.0+ release URLs and npm package repository; preserve all versions,
dates, and other link values.
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@crates/orca-tui/src/ui.rs`:
- Around line 3121-3130: Update the activity label formatting in the
active-count display to say “active” rather than “running,” matching all states
included by TaskStatus::is_active(), and add tests covering queued, paused, and
stopping tasks.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro Plus
Run ID: 23ffb100-da56-46b8-b308-0f31f05ace0d
⛔ Files ignored due to path filters (1)
site/package-lock.jsonis excluded by!**/package-lock.json
📒 Files selected for processing (16)
crates/orca-core/src/task_types.rscrates/orca-runtime/src/controller.rscrates/orca-runtime/src/tasks.rscrates/orca-runtime/src/thread_store/writer.rscrates/orca-runtime/src/workflow/runner.rscrates/orca-runtime/tests/runtime_host.rscrates/orca-tui/src/ui.rsdocs/agent-workflow-benchmark.mddocs/harness-contract.mddocs/production-roadmap.mddocs/releases/v0.3.6.mdsite/package.jsonsite/src/changelog/Changelog.tsxtests/subagent_contract.rstests/tool_contract.rstests/workflow_runtime_contract.rs
🚧 Files skipped from review as they are similar to previous changes (6)
- crates/orca-runtime/src/controller.rs
- docs/production-roadmap.md
- site/src/changelog/Changelog.tsx
- docs/releases/v0.3.6.md
- crates/orca-runtime/src/thread_store/writer.rs
- crates/orca-runtime/src/tasks.rs
| if activity.active_count > 0 { | ||
| let noun = if activity.active_count == 1 { | ||
| "task" | ||
| } else { | ||
| "tasks" | ||
| }; | ||
| labels.push(format!( | ||
| "{} background {noun} running", | ||
| activity.active_count | ||
| )); |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
Use an activity label that matches all active task states.
TaskStatus::is_active() also includes queued, paused, and stopping tasks. Line 3128 reports each of these tasks as “running”. Use “active” here, or render status-specific labels. Add tests for queued, paused, and stopping tasks.
Proposed fix
- "{} background {noun} running",
+ "{} background {noun} active",📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| if activity.active_count > 0 { | |
| let noun = if activity.active_count == 1 { | |
| "task" | |
| } else { | |
| "tasks" | |
| }; | |
| labels.push(format!( | |
| "{} background {noun} running", | |
| activity.active_count | |
| )); | |
| if activity.active_count > 0 { | |
| let noun = if activity.active_count == 1 { | |
| "task" | |
| } else { | |
| "tasks" | |
| }; | |
| labels.push(format!( | |
| "{} background {noun} active", | |
| activity.active_count | |
| )); |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@crates/orca-tui/src/ui.rs` around lines 3121 - 3130, Update the activity
label formatting in the active-count display to say “active” rather than
“running,” matching all states included by TaskStatus::is_active(), and add
tests covering queued, paused, and stopping tasks.
Orca v0.3.6
Orca v0.3.6 makes delegated execution and durable task state observable and
safe across process boundaries.
What Changed
workflow child agents inherit the parent approval/plan mode, active and
configured permission profiles, workspace roots, permission rules,
additional working directories, and model selection through one explicit
contract.
metadata read-modify-rewrite operations, compression, and atomic transcript
replacement now share the same cross-process critical section. Plaintext and
compressed paths for one logical transcript resolve to the same lock.
Prompt-too-long compaction retries and normal or read-only tool truncation
publish updated task summaries, so failures and degraded output remain
visible after reload.
orca execsessions now create the same canonical main-session taskused by other hosted turns, so retry, truncation, failure, and completion
updates share one durable task identifier.
session.completed, preserving the distinction between a finished foreground
turn and still-running or approval-blocked background work.
composer stays available after foreground completion while the activity line
continues to show running and approval-required task counts.
with backward-compatible defaults for existing records.
Compatibility
Existing CLI flags, configuration files, saved sessions, JSONL, app-server,
ACP, and provider wire contracts remain compatible. Existing task and surface
records without retry or truncation fields load as zero/false. The release
adds diagnostic fields without changing task identifiers or terminal status
names.
Verification
--no-fail-fast
cross-process transcript append/rewrite and compressed-path lock aliasing,
retry/truncation persistence, task activity convergence, terminal event
ordering, runtime surface reducers, and TUI background activity/detail
visibility
verifier tests
Upgrade
macOS and Linux native installer:
curl -fsSL https://orcaagent.dev/install.sh | \ INSTALL_DIR=/usr/local/bin ORCA_VERSION=0.3.6 shWindows PowerShell, including workspace sandbox setup:
Summary by CodeRabbit
New Features
Bug Fixes
Documentation
Chores