|
|
@@ -152,6 +152,57 @@ class AgentModePolicyTest(unittest.IsolatedAsyncioTestCase):
|
|
|
RunConfig(trace_id=trace.trace_id, name="continue"),
|
|
|
)
|
|
|
|
|
|
+ async def test_unknown_persisted_revisions_fail_closed(self):
|
|
|
+ for mode, revision in (("recursive", 4), ("recursive", 99), ("legacy", 2)):
|
|
|
+ with self.subTest(mode=mode, revision=revision):
|
|
|
+ context = {
|
|
|
+ "agent_mode": mode,
|
|
|
+ "agent_mode_revision": revision,
|
|
|
+ }
|
|
|
+ with self.assertRaisesRegex(
|
|
|
+ ValueError,
|
|
|
+ "unsupported_agent_mode_revision",
|
|
|
+ ):
|
|
|
+ policy_from_context(context)
|
|
|
+
|
|
|
+ for revision in (4, 99):
|
|
|
+ trace = Trace(
|
|
|
+ trace_id=f"unknown-recursive-{revision}",
|
|
|
+ mode="agent",
|
|
|
+ task="must remain untouched",
|
|
|
+ status="stopped",
|
|
|
+ context={
|
|
|
+ "agent_mode": "recursive",
|
|
|
+ "agent_mode_revision": revision,
|
|
|
+ },
|
|
|
+ )
|
|
|
+ await self.store.create_trace(trace)
|
|
|
+ with self.assertRaisesRegex(
|
|
|
+ ValueError,
|
|
|
+ "unsupported_agent_mode_revision",
|
|
|
+ ):
|
|
|
+ await self.runner._prepare_trace(
|
|
|
+ [],
|
|
|
+ RunConfig(trace_id=trace.trace_id),
|
|
|
+ )
|
|
|
+ persisted = await self.store.get_trace(trace.trace_id)
|
|
|
+ self.assertEqual("stopped", persisted.status)
|
|
|
+ self.assertNotIn("run_config_snapshot", persisted.context)
|
|
|
+
|
|
|
+ async def test_only_recursive_revision_three_requires_task_progress(self):
|
|
|
+ self.assertFalse(policy_from_context({
|
|
|
+ "agent_mode": "recursive",
|
|
|
+ "agent_mode_revision": 1,
|
|
|
+ }).requires_task_progress)
|
|
|
+ self.assertFalse(policy_from_context({
|
|
|
+ "agent_mode": "recursive",
|
|
|
+ "agent_mode_revision": 2,
|
|
|
+ }).requires_task_progress)
|
|
|
+ self.assertTrue(policy_from_context({
|
|
|
+ "agent_mode": "recursive",
|
|
|
+ "agent_mode_revision": 3,
|
|
|
+ }).requires_task_progress)
|
|
|
+
|
|
|
async def test_historical_trace_is_persisted_as_legacy_on_continue(self):
|
|
|
trace = Trace(trace_id="historical", mode="agent", task="old", context={})
|
|
|
await self.store.create_trace(trace)
|