huskies: merge 866
This commit is contained in:
@@ -267,12 +267,13 @@ max_turns = 10
|
||||
let found = pool.run_watchdog_pass(Some(root));
|
||||
assert!(found >= 1, "watchdog should detect the over-limit agent");
|
||||
|
||||
// With max_retries=1, the first violation blocks immediately.
|
||||
let updated = crate::db::read_content(story_id)
|
||||
.expect("story content must still exist after watchdog termination");
|
||||
assert!(
|
||||
updated.contains("blocked: true"),
|
||||
"story must be marked `blocked: true` after limit termination with max_retries=1 — got:\n{updated}"
|
||||
// With max_retries=1, the first violation blocks immediately via the state machine.
|
||||
let item = crate::crdt_state::read_item(story_id)
|
||||
.expect("story must be in CRDT after watchdog termination");
|
||||
assert_eq!(
|
||||
item.stage, "2_blocked",
|
||||
"story stage must be 2_blocked after limit termination with max_retries=1 — got: {}",
|
||||
item.stage
|
||||
);
|
||||
|
||||
// Sanity: the agent itself is also Failed with the right reason.
|
||||
@@ -407,11 +408,12 @@ max_turns = 10
|
||||
let event = rx.try_recv().expect("watchdog must emit an Error event");
|
||||
assert!(matches!(event, AgentEvent::Error { .. }));
|
||||
|
||||
// With max_retries=1, the story is blocked.
|
||||
let updated = crate::db::read_content(story_id).unwrap();
|
||||
assert!(
|
||||
updated.contains("blocked: true"),
|
||||
"story must be blocked after per-session overrun with max_retries=1"
|
||||
// With max_retries=1, the story is blocked via the state machine.
|
||||
let item = crate::crdt_state::read_item(story_id)
|
||||
.expect("story must be in CRDT after per-session overrun");
|
||||
assert_eq!(
|
||||
item.stage, "2_blocked",
|
||||
"story stage must be 2_blocked after per-session overrun with max_retries=1"
|
||||
);
|
||||
}
|
||||
|
||||
@@ -470,9 +472,9 @@ max_turns = 10
|
||||
Some(1),
|
||||
"after session 1, retry_count should be 1 in CRDT"
|
||||
);
|
||||
let content = crate::db::read_content(story_id).unwrap();
|
||||
assert!(
|
||||
!content.contains("blocked: true"),
|
||||
assert_ne!(
|
||||
item.stage.as_str(),
|
||||
"2_blocked",
|
||||
"story should NOT be blocked after session 1"
|
||||
);
|
||||
}
|
||||
@@ -490,9 +492,9 @@ max_turns = 10
|
||||
Some(2),
|
||||
"after session 2, retry_count should be 2 in CRDT"
|
||||
);
|
||||
let content = crate::db::read_content(story_id).unwrap();
|
||||
assert!(
|
||||
!content.contains("blocked: true"),
|
||||
assert_ne!(
|
||||
item.stage.as_str(),
|
||||
"2_blocked",
|
||||
"story should NOT be blocked after session 2"
|
||||
);
|
||||
}
|
||||
@@ -504,16 +506,18 @@ max_turns = 10
|
||||
pool.inject_test_agent_with_session(story_id, "coder-1", AgentStatus::Running, "session-3");
|
||||
pool.run_watchdog_pass(Some(root));
|
||||
|
||||
let content = crate::db::read_content(story_id).unwrap();
|
||||
assert!(
|
||||
content.contains("blocked: true"),
|
||||
"story must be blocked after session 3 (retry_count=3 >= max_retries=3) — got:\n{content}"
|
||||
);
|
||||
let item = crate::crdt_state::read_item(story_id).expect("story must be in CRDT");
|
||||
assert_eq!(
|
||||
item.stage, "2_blocked",
|
||||
"story must be blocked after session 3 (retry_count=3 >= max_retries=3) — got: {}",
|
||||
item.stage
|
||||
);
|
||||
// retry_count resets to 0 on stage transition (Bug 780) — the fact
|
||||
// that the story reached 2_blocked proves the retry limit was hit.
|
||||
assert_eq!(
|
||||
item.retry_count,
|
||||
Some(3),
|
||||
"retry_count should be 3 in CRDT after session 3"
|
||||
Some(0),
|
||||
"retry_count should reset to 0 after stage transition to blocked"
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user