Skip to content

(MOT-4107) test: add stop and queued-message scenario coverage - #657

Merged
ytallo merged 2 commits into
mainfrom
feat/harness-stop-queue-scenarios
Jul 31, 2026
Merged

(MOT-4107) test: add stop and queued-message scenario coverage#657
ytallo merged 2 commits into
mainfrom
feat/harness-stop-queue-scenarios

Conversation

@ytallo

@ytallo ytallo commented Jul 31, 2026

Copy link
Copy Markdown
Contributor

What changed

Adds integration coverage for two issues observed during recording:

  • stopping a running root turn cancels its spawned children and preserves queued-message evidence;
  • editing and unqueuing messages during a running turn preserves queue identity/order and drains only surviving messages.

The harness now records intervention controls, cancellation-tree status, router abort evidence, and trace coverage needed to diagnose these flows.

Root cause covered

harness::stop could acknowledge stopping: false when cancellation finalized the matching turn before the handler reacquired the session lock. The handler now reports the accepted stop request correctly, while the integration floor binds cancellation abort spans to the cancelled turns.

Validation

  • INT-011 passed against iii 0.22.0.
  • INT-012 passed against iii 0.22.0.
  • cargo check passed.
  • cargo clippy -p harness-integration --all-targets -- -D warnings passed.
  • cargo fmt and fixture validation passed.
  • Harness library tests: 296 passed.
  • Integration targets: 87 passed with the pre-existing SIGCHLD timeout test excluded.

Refs MOT-4107

@vercel

vercel Bot commented Jul 31, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
workers Ready Ready Preview Jul 31, 2026 6:20pm
workers-tech-spec Ready Ready Preview Jul 31, 2026 6:20pm

Request Review

@coderabbitai

coderabbitai Bot commented Jul 31, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@ytallo, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 39 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 2acdad1c-c3f9-442c-bb97-96c4a6a69671

📥 Commits

Reviewing files that changed from the base of the PR and between 2d7a70a and fa1f779.

📒 Files selected for processing (25)
  • harness/src/functions/stop.rs
  • harness/tests/integration/README.md
  • harness/tests/integration/src/evidence_data.rs
  • harness/tests/integration/src/fixtures.rs
  • harness/tests/integration/src/fixtures/loading.rs
  • harness/tests/integration/src/fixtures/tests.rs
  • harness/tests/integration/src/probe.rs
  • harness/tests/integration/src/runtime.rs
  • harness/tests/integration/src/scenario/floor.rs
  • harness/tests/integration/src/scenario/phases/arm.rs
  • harness/tests/integration/src/scenario/phases/completion.rs
  • harness/tests/integration/src/scenario/phases/evidence.rs
  • harness/tests/integration/src/scenario/phases/intervention.rs
  • harness/tests/integration/src/scenario/phases/mod.rs
  • harness/tests/integration/src/scenario/runner.rs
  • harness/tests/integration/src/scenario/state.rs
  • harness/tests/integration/src/scenarios/dsl.rs
  • harness/tests/integration/src/scenarios/mod.rs
  • harness/tests/integration/src/scenarios/queued_message_edit_unqueue.rs
  • harness/tests/integration/src/scenarios/stop_cancel_cascade.rs
  • harness/tests/integration/src/scripted_router.rs
  • harness/tests/integration/src/trace_evidence.rs
  • harness/tests/integration/src/types/scenario/compiled.rs
  • harness/tests/integration/src/types/script.rs
  • harness/tests/integration/tests/determinism.rs
📝 Walkthrough

Walkthrough

The integration harness adds runner-owned interventions for cancellation cascades and queued-message editing. It adds gated router dispatch, descendant-session evidence, multi-session trace collection, updated floor validation, and direct scenarios INT-011 and INT-012. Stop handling now reports accepted cancellation consistently.

Changes

Intervention-driven integration coverage

Layer / File(s) Summary
Scenario and router contracts
harness/tests/integration/src/scenarios/dsl.rs, harness/tests/integration/src/types/*, harness/tests/integration/src/scripted_router.rs
Scenario definitions support stop/cancel and queued-message interventions, match-any dispatch, named serve gates, agent-trigger exposure, and multi-call responses.
Intervention execution and lifecycle wiring
harness/src/functions/stop.rs, harness/tests/integration/src/fixtures/*, harness/tests/integration/src/runtime.rs, harness/tests/integration/src/probe.rs, harness/tests/integration/src/scenario/{runner.rs,state.rs}, harness/tests/integration/src/scenario/phases/*
The runner executes interventions after request dispatch. Intervention handlers coordinate stop, queue operations, status polling, gate release, and control evidence.
Tree completion and evidence aggregation
harness/tests/integration/src/scenario/phases/{completion.rs,evidence.rs}, harness/tests/integration/src/trace_evidence.rs, harness/tests/integration/src/evidence_data.rs, harness/tests/integration/tests/determinism.rs
Completion records child-session statuses. Evidence stores control, tree, router, and multi-session trace data.
Validation and direct scenarios
harness/tests/integration/src/scenario/floor.rs, harness/tests/integration/src/scenarios/*, harness/tests/integration/README.md, harness/tests/integration/src/fixtures/tests.rs
Floor validation accepts cancelled and failed turns across session trees. INT-011 validates cancellation cascades. INT-012 validates queued-message edit and removal ordering.

Estimated code review effort: 4 (Complex) | ~60 minutes

Possibly related PRs

Poem

A rabbit sees gates hold the stream,
While queued notes shift in a careful dream.
Roots stop, children follow in line,
Evidence records each branch and sign.
Hop, hop—the harness now checks the design!

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed Docstring coverage is 82.05% which is sufficient. The required threshold is 80.00%.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the added integration coverage for stop handling and queued-message scenarios.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/harness-stop-queue-scenarios

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

Copy link
Copy Markdown
Contributor

skill-check — worker

0 verified, 51 skipped (no docs/).

Layer Result
structure
vale
ai
render

Four for four. Nicely done.

@ytallo
ytallo marked this pull request as ready for review July 31, 2026 17:58
@ytallo ytallo changed the title (MOT-4290) test: add stop and queued-message scenario coverage (MOT-4107) test: add stop and queued-message scenario coverage Jul 31, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🧹 Nitpick comments (10)
harness/tests/integration/src/scenario/phases/intervention.rs (4)

673-689: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Remove the unreachable q_ clause in ensure_client_entry_id.

Line 678 evaluates !row.entry_id.starts_with("e_") || row.entry_id.starts_with("q_"). If the id starts with e_, it cannot also start with q_, so the second clause never contributes. The first clause already rejects internal q_ ids. Keep the prefix check alone, or state the intent in a comment.

♻️ Proposed change
-    if !row.entry_id.starts_with("e_") || row.entry_id.starts_with("q_") {
+    // Client-visible queue ids are `e_`-prefixed; internal ids use `q_`.
+    if !row.entry_id.starts_with("e_") {
🤖 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 `@harness/tests/integration/src/scenario/phases/intervention.rs` around lines
673 - 689, Update ensure_client_entry_id to remove the unreachable
row.entry_id.starts_with("q_") condition, leaving only the client-visible "e_"
prefix validation while preserving the existing error behavior.

225-241: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Use one kind naming convention, and inline the released flag.

Line 226 uses "stop_cancel_cascade" with underscores. The queued-edit handler uses "queued-message-edit-unqueue" with hyphens (Line 527). Both strings land in control.json evidence. Pick one convention so verify functions and artifact consumers match a predictable value.

Line 241 also assigns control["released"] after construction, which forces the mut binding and duplicates gate.released. Put the flag in the json! literal instead.

🤖 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 `@harness/tests/integration/src/scenario/phases/intervention.rs` around lines
225 - 241, Update the control evidence construction around the stop-cancel
cascade handler to use the same hyphenated kind naming convention as the
queued-edit handler, and add the top-level released flag directly to the json!
literal. Remove the post-construction control["released"] assignment and make
the binding immutable unless other code requires mutability.

297-334: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Drop the duplicated tuple field and the scenario-specific key literal.

Each queue_specs entry repeats the same string as both label and suffix. Use label for the key suffix and remove the third field.

Line 305 also hardcodes integration-012 inside a generic intervention handler. The run_id prefix keeps the keys unique, so this is only a naming concern, but a second fixture using this intervention would emit misleading keys. Consider deriving the prefix from the scenario id.

🤖 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 `@harness/tests/integration/src/scenario/phases/intervention.rs` around lines
297 - 334, The queue_specs entries redundantly store label and suffix; remove
the third tuple field, iterate over label and message, and use label when
constructing idempotency_key. In the same intervention handler, replace the
hardcoded “integration-012” segment with the applicable scenario identifier
derived from the existing scenario context so keys remain accurately named for
every fixture.

109-120: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Derive the expected child count from expected_in_flight.

Line 117 hardcodes children.len() == 2 while the gate wait uses expected_in_flight (currently 3 = root + 2 children). The two numbers encode the same fixture fact in two places. If a scenario changes expected_in_flight, this predicate never becomes true and the run fails with a status-readiness timeout instead of a clear premise error.

♻️ Proposed change
+        let expected_children = expected_in_flight.saturating_sub(1);
         let root_before = wait_for_status(services.client(), &self.session_id, deadline, {
             let expected_root_turn = root_turn_id.clone();
             move |status| {
                 status.get("turn_id").and_then(Value::as_str) == Some(expected_root_turn.as_str())
                     && status.get("status").and_then(Value::as_str) == Some("running")
                     && status
                         .get("children")
                         .and_then(Value::as_array)
-                        .is_some_and(|children| children.len() == 2)
+                        .is_some_and(|children| children.len() == expected_children)
             }
         })
🤖 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 `@harness/tests/integration/src/scenario/phases/intervention.rs` around lines
109 - 120, The root status readiness predicate in the intervention phase
hardcodes the child count instead of deriving it from expected_in_flight. Update
the children length check within the wait_for_status closure to use
expected_in_flight minus the root turn, preserving the existing
expected_in_flight fixture contract and status conditions.
harness/tests/integration/src/trace_evidence.rs (1)

84-95: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Drop the redundant sort, and consider asserting that every requested session matched a group.

The BTreeSet collection at Line 92 already yields sorted, deduplicated ids, so trace_ids.sort() at Line 95 is a no-op.

engine::traces::group_by also uses limit: 100. A tree run now depends on several session groups being present. If the group list is truncated, a child session is dropped silently and the run fails later as a stability timeout instead of a clear premise error. An explicit check that each requested session id appeared in groups would fail faster with a better message.

🤖 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 `@harness/tests/integration/src/trace_evidence.rs` around lines 84 - 95, Remove
the redundant trace_ids.sort() after collecting from BTreeSet, and update the
group-matching logic to track requested session IDs that were found; assert that
every ID in wanted matched a group, with a clear premise-failure message before
proceeding to trace ID collection.
harness/tests/integration/src/probe.rs (1)

247-265: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Document the ordering constraint against confirm_completion_binding.

bind_child_completion_observer stores its trigger under LIFECYCLE_TRIGGER_TYPE. confirm_completion_binding (Lines 270-304) unregisters every LIFECYCLE_TRIGGER_TYPE binding except the one it just registered. Any later call to confirm_completion_binding therefore removes the parent-filtered child observer silently. The current arm order is safe, but a fault scenario that rebinds after an engine restart would lose child completions. Add a note here, or make the pruning skip parent-filtered bindings.

🤖 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 `@harness/tests/integration/src/probe.rs` around lines 247 - 265, Document in
bind_child_completion_observer that it must run after
confirm_completion_binding, since a later confirm_completion_binding call
removes other LIFECYCLE_TRIGGER_TYPE bindings. Preserve the current trigger
behavior and clearly note that rebinding after an engine restart must not occur
in an order that silently removes the parent-filtered child observer.
harness/tests/integration/src/scenario/phases/completion.rs (1)

166-195: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Make the root-first assumption explicit.

skip(1) assumes tree_sessions[0] is the root session. run_stop_cancel_cascade builds the vector that way, but the contract is implicit across two files. Filter on session_id != self.session_id, or document the ordering requirement where tree_sessions is produced.

The if let Some(control) = active.control.as_object_mut() guard also drops terminal_statuses silently if control is not a JSON object. Consider returning a runner error in that case, since every tree run must carry an object control artifact.

🤖 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 `@harness/tests/integration/src/scenario/phases/completion.rs` around lines 166
- 195, Update the tree-status collection in the completion flow to exclude the
root by comparing each session ID with self.session_id instead of relying on
tree_sessions ordering. Replace the silent as_object_mut guard around
active.control with a runner error when the control artifact is not a JSON
object, while preserving terminal_statuses insertion for valid tree runs.
harness/tests/integration/src/scenarios/queued_message_edit_unqueue.rs (1)

167-174: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Remove the redundant q_ prefix conditions.

starts_with("e_") already excludes any id that starts with q_. The two negative checks can never change the result. Keep the assertion focused on the client-visible prefix and the distinctness check.

♻️ Proposed simplification
     anyhow::ensure!(
         edit_entry_id.starts_with("e_")
-            && !edit_entry_id.starts_with("q_")
             && removed_entry_id.starts_with("e_")
-            && !removed_entry_id.starts_with("q_")
             && edit_entry_id != removed_entry_id,
         "intervention did not use distinct client-visible entry ids: edit={edit_entry_id}, remove={removed_entry_id}"
     );
🤖 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 `@harness/tests/integration/src/scenarios/queued_message_edit_unqueue.rs`
around lines 167 - 174, In the assertion around edit_entry_id and
removed_entry_id, remove both redundant !starts_with("q_") conditions. Keep the
e_ prefix validations and the edit_entry_id != removed_entry_id distinctness
check unchanged.
harness/tests/integration/src/scenario/floor.rs (1)

101-115: 🎯 Functional Correctness | 🔵 Trivial | 💤 Low value

Consider handling expectations that declare both failed and cancelled turns.

declares_failure() matches first, so clean becomes summary.error_count > 0 and cancelled_errors_are_bound never runs. A mixed-status fixture would then accept error spans bound to any turn. No current fixture mixes the two statuses, so this is a hardening suggestion only.

♻️ Proposed refactor: bind error spans whenever cancellation is declared
     let clean = if expected.declares_failure() {
-        summary.error_count > 0
-    } else if expected
-        .turn_statuses
-        .iter()
-        .any(|status| status == "cancelled")
-    {
+        summary.error_count > 0
+            && (!expected
+                .turn_statuses
+                .iter()
+                .any(|status| status == "cancelled")
+                || cancelled_or_failed_errors_are_bound(run, expected))
+    } else if expected
+        .turn_statuses
+        .iter()
+        .any(|status| status == "cancelled")
+    {
         cancelled_errors_are_bound(run, expected)
     } else {
         summary.error_count == 0
     };

Also applies to: 139-157

🤖 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 `@harness/tests/integration/src/scenario/floor.rs` around lines 101 - 115,
Update the clean-evaluation logic around declares_failure and cancelled turn
statuses so cancelled_errors_are_bound is applied whenever cancellation is
declared, including mixed failed-and-cancelled expectations. Preserve the
existing requirement that declared failures produce at least one error, while
ensuring error spans are bound only to declared cancelled turns.
harness/tests/integration/src/fixtures/loading.rs (1)

146-151: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Update the expected_turn_statuses doc to match the new rule.

The field doc at Lines 15-17 states that the last status must be completed. Validation now exempts intervention fixtures, and StopCancelCascade requires all statuses to be cancelled. Adjust the doc so authors do not rely on the old invariant.

🤖 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 `@harness/tests/integration/src/fixtures/loading.rs` around lines 146 - 151,
Update the documentation for expected_turn_statuses to describe the current
validation rules: non-intervention fixtures require a final completed status,
while intervention fixtures are exempt and StopCancelCascade requires every
status to be cancelled. Remove the outdated unconditional claim that the last
status must always be completed.
🤖 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 `@harness/tests/integration/src/scenarios/stop_cancel_cascade.rs`:
- Around line 210-241: Update the lifecycle validation loop to collect each
non-root child’s session_id in a set rather than incrementing child_count per
span. Preserve the existing terminal/cancelled and parent-link checks, then
assert the set contains exactly two distinct child sessions so duplicate
lifecycle spans are accepted.
- Around line 205-208: Update the durable stop assertion in the stop-cancel
cascade test to match the message actually persisted by harness::stop, which
acknowledges cancellation with “stopping: true”; preferably define the expected
wording in harness/src/functions/stop.rs and reuse that shared constant in the
test.

In `@harness/tests/integration/src/scripted_router.rs`:
- Around line 284-306: Fix the lost-wakeup race in wait_for_gate by
creating/registering the gate_notify.notified() future before locking and
reading arrivals, while preserving the existing immediate-success and deadline
timeout behavior. Add a regression test that runs concurrent await_gate arrivals
against wait_for_gate and verifies the waiter completes promptly after the
required arrivals.

---

Nitpick comments:
In `@harness/tests/integration/src/fixtures/loading.rs`:
- Around line 146-151: Update the documentation for expected_turn_statuses to
describe the current validation rules: non-intervention fixtures require a final
completed status, while intervention fixtures are exempt and StopCancelCascade
requires every status to be cancelled. Remove the outdated unconditional claim
that the last status must always be completed.

In `@harness/tests/integration/src/probe.rs`:
- Around line 247-265: Document in bind_child_completion_observer that it must
run after confirm_completion_binding, since a later confirm_completion_binding
call removes other LIFECYCLE_TRIGGER_TYPE bindings. Preserve the current trigger
behavior and clearly note that rebinding after an engine restart must not occur
in an order that silently removes the parent-filtered child observer.

In `@harness/tests/integration/src/scenario/floor.rs`:
- Around line 101-115: Update the clean-evaluation logic around declares_failure
and cancelled turn statuses so cancelled_errors_are_bound is applied whenever
cancellation is declared, including mixed failed-and-cancelled expectations.
Preserve the existing requirement that declared failures produce at least one
error, while ensuring error spans are bound only to declared cancelled turns.

In `@harness/tests/integration/src/scenario/phases/completion.rs`:
- Around line 166-195: Update the tree-status collection in the completion flow
to exclude the root by comparing each session ID with self.session_id instead of
relying on tree_sessions ordering. Replace the silent as_object_mut guard around
active.control with a runner error when the control artifact is not a JSON
object, while preserving terminal_statuses insertion for valid tree runs.

In `@harness/tests/integration/src/scenario/phases/intervention.rs`:
- Around line 673-689: Update ensure_client_entry_id to remove the unreachable
row.entry_id.starts_with("q_") condition, leaving only the client-visible "e_"
prefix validation while preserving the existing error behavior.
- Around line 225-241: Update the control evidence construction around the
stop-cancel cascade handler to use the same hyphenated kind naming convention as
the queued-edit handler, and add the top-level released flag directly to the
json! literal. Remove the post-construction control["released"] assignment and
make the binding immutable unless other code requires mutability.
- Around line 297-334: The queue_specs entries redundantly store label and
suffix; remove the third tuple field, iterate over label and message, and use
label when constructing idempotency_key. In the same intervention handler,
replace the hardcoded “integration-012” segment with the applicable scenario
identifier derived from the existing scenario context so keys remain accurately
named for every fixture.
- Around line 109-120: The root status readiness predicate in the intervention
phase hardcodes the child count instead of deriving it from expected_in_flight.
Update the children length check within the wait_for_status closure to use
expected_in_flight minus the root turn, preserving the existing
expected_in_flight fixture contract and status conditions.

In `@harness/tests/integration/src/scenarios/queued_message_edit_unqueue.rs`:
- Around line 167-174: In the assertion around edit_entry_id and
removed_entry_id, remove both redundant !starts_with("q_") conditions. Keep the
e_ prefix validations and the edit_entry_id != removed_entry_id distinctness
check unchanged.

In `@harness/tests/integration/src/trace_evidence.rs`:
- Around line 84-95: Remove the redundant trace_ids.sort() after collecting from
BTreeSet, and update the group-matching logic to track requested session IDs
that were found; assert that every ID in wanted matched a group, with a clear
premise-failure message before proceeding to trace ID collection.
🪄 Autofix (Beta)

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: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 42a451b3-ed4c-4c80-af91-3314b6282a3b

📥 Commits

Reviewing files that changed from the base of the PR and between c12a721 and 2d7a70a.

📒 Files selected for processing (25)
  • harness/src/functions/stop.rs
  • harness/tests/integration/README.md
  • harness/tests/integration/src/evidence_data.rs
  • harness/tests/integration/src/fixtures.rs
  • harness/tests/integration/src/fixtures/loading.rs
  • harness/tests/integration/src/fixtures/tests.rs
  • harness/tests/integration/src/probe.rs
  • harness/tests/integration/src/runtime.rs
  • harness/tests/integration/src/scenario/floor.rs
  • harness/tests/integration/src/scenario/phases/arm.rs
  • harness/tests/integration/src/scenario/phases/completion.rs
  • harness/tests/integration/src/scenario/phases/evidence.rs
  • harness/tests/integration/src/scenario/phases/intervention.rs
  • harness/tests/integration/src/scenario/phases/mod.rs
  • harness/tests/integration/src/scenario/runner.rs
  • harness/tests/integration/src/scenario/state.rs
  • harness/tests/integration/src/scenarios/dsl.rs
  • harness/tests/integration/src/scenarios/mod.rs
  • harness/tests/integration/src/scenarios/queued_message_edit_unqueue.rs
  • harness/tests/integration/src/scenarios/stop_cancel_cascade.rs
  • harness/tests/integration/src/scripted_router.rs
  • harness/tests/integration/src/trace_evidence.rs
  • harness/tests/integration/src/types/scenario/compiled.rs
  • harness/tests/integration/src/types/script.rs
  • harness/tests/integration/tests/determinism.rs

Comment thread harness/tests/integration/src/scenarios/stop_cancel_cascade.rs
Comment thread harness/tests/integration/src/scenarios/stop_cancel_cascade.rs
Comment thread harness/tests/integration/src/scripted_router.rs
@ytallo
ytallo merged commit 96beb2a into main Jul 31, 2026
17 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant