Fix DeepSWE hive action turn isolation - #62
Conversation
…tions # Conflicts: # Cargo.lock # Cargo.toml # examples/openhuman/Cargo.lock # examples/openhuman/Cargo.toml # examples/openhuman/src/bin/deepswe_hive.rs # examples/openhuman/src/bin/deepswe_hive/test/retry.rs
Co-authored-by: Medulla <medulla@tinyhumans.ai>
|
Note Currently processing new changes in this PR. This may take a few minutes, please wait... ⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Advanced Run ID: ⛔ Files ignored due to path filters (2)
📒 Files selected for processing (11)
✨ Finishing Touches📝 Generate docstrings
Comment |
…to fix-deepswe-hive-actions # Conflicts: # Cargo.lock # examples/openhuman/Cargo.lock # examples/openhuman/src/bin/deepswe_hive/test/retry.rs
Tiny Sweeper reviewTiny Sweeper reviewed this change across 6 lane(s) and found 2 active actionable finding(s). Detailed lane evidence and any incomplete work are listed below. State: Incomplete Review snapshot
Completeness: Incomplete What changedThe review could not produce a supported behavioral summary; inspect the cited changed surface and lane details below. FeaturesNone identified with supported citations. TestsNo supported feature-to-test mapping was produced. Test execution is not inferred.
Findings
Resolved this pass
Could not review: tinysweeper/tests Before merge
How this fits togetherflowchart LR
n0["run_seat<br/>changed<br/>2 findings"]:::blocking
n1["call<br/>changed"]:::changed
n2["Task<br/>changed"]:::changed
n3["..._tool_calls_and_separates_protocol_errors<br/>changed"]:::changed
n4["clone"]:::impacted
n5["run_with_mcp_executable"]:::impacted
n6["fixture"]:::impacted
n7["run_prepared_with_mcp_executable"]:::impacted
n8["...der_failure_fails_closed_without_a_commit"]:::impacted
n9["..._post_tool_provider_failure_without_retry"]:::impacted
n0 -->|uses| n2
n0 -->|calls| n4
n1 -->|calls| n4
n3 -->|calls| n4
n3 -->|tests| n4
n5 -->|uses| n2
n7 -->|calls| n0
n7 -->|uses| n2
n7 -->|calls| n4
n8 -->|calls| n4
n8 -->|tests| n4
n8 -->|calls| n5
n8 -->|tests| n5
n8 -->|calls| n6
n8 -->|tests| n6
n9 -->|calls| n4
n9 -->|tests| n4
n9 -->|calls| n5
n9 -->|tests| n5
n9 -->|calls| n6
n9 -->|tests| n6
classDef changed fill:#0d4429,stroke:#238636,color:#e6edf3
classDef impacted fill:#161b22,stroke:#6e7681,color:#c9d1d9
classDef flagged fill:#5a1e02,stroke:#d93f0b,color:#ffffff
classDef blocking fill:#67060c,stroke:#f85149,color:#ffffff
Agent review detailscritique
security
tests
commits
description
e2e
Evidence and run details
|
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
Requesting changes: 2 lane(s) blocking, worst finding is high.
Fix or reply to the findings below and push. The next review clears this automatically once they are gone — you should not need to dismiss anything by hand.
$0.0329 · 509,548 in / 12,978 out · 17,804 cached (3%) · ladder/vectors, gpt-5.6-luna, deepseek/deepseek-v4-flash · 1,104 embedded
critique: $0.0185 · 285,003 in / 6,996 out · 14,226 cached (5%) · gpt-5.6-luna, deepseek/deepseek-v4-flash
security: $0.0135 · 204,037 in / 3,694 out · 3,578 cached (2%) · gpt-5.6-luna
description: $0.0004 · 11,803 in / 134 out · 0 cached (0%) · deepseek/deepseek-v4-flash
| agent.turn(prompt).session(session.clone()).send(), | ||
| ) | ||
| .await; | ||
| let send = tokio::time::timeout(turn_timeout, agent.turn(prompt).send()).await; |
There was a problem hiding this comment.
Preserve the seat session across retry attempts
Each retry now calls send() without the previously stable session identifier, causing OpenHuman to create a fresh conversation for the attempt. A retry therefore loses the prior provider context and cannot reliably continue the same frozen-round turn, which can make it repeat work or mis-handle the retry instruction. Restore a deterministic session identifier and pass it to every attempt.
Additional critique observation
Keep retries in the same OpenHuman session
[RULE] preserve-session-continuity
Each retry previously called .session(session.clone()) with one session ID created before the attempt loop. Removing it means every agent.turn(prompt).send() uses the default session behavior instead of the stable per-seat session, so a retry may start a fresh conversation and lose the prior provider context. Restore the explicit session association for every attempt.
Suggested change for this observation (reference only)
let send = tokio::time::timeout(
turn_timeout,
agent
.turn(prompt)
.session(format!("deepswe-{}:{id}", task.instance_id))
.send(),
)
.await;
[RULE] preserve-session-context ·
Summary
Dependencies
This is intentionally a draft until both dependencies land:
Public API / behavior
No public API change. DeepSWE retries and later rounds no longer inherit earlier OpenHuman provider transcripts.
Validation
cargo fmt --all -- --check.github/scripts/assert-pure.shcargo clippy --all-targets --all-features -- -D warningscargo build --all-targets --all-featurescargo test --all-featurescargo test --manifest-path examples/openhuman/Cargo.toml --bin deepswe_hive -- --test-threads=1(46 passed)