62 lines
2.6 KiB
Python
62 lines
2.6 KiB
Python
"""Routing regressions must not drift from Sol/Astra policy or lose worker bounds."""
|
|
import importlib.util
|
|
import json
|
|
from pathlib import Path
|
|
import tempfile
|
|
import unittest
|
|
|
|
ROOT = Path(__file__).resolve().parents[2]
|
|
spec = importlib.util.spec_from_file_location("check_agent_config", ROOT / "tools/check_agent_config.py")
|
|
checker = importlib.util.module_from_spec(spec)
|
|
spec.loader.exec_module(checker)
|
|
|
|
|
|
class RoutingTests(unittest.TestCase):
|
|
def setUp(self):
|
|
self.tmp = tempfile.TemporaryDirectory()
|
|
self.addCleanup(self.tmp.cleanup)
|
|
self.root = Path(self.tmp.name)
|
|
(self.root / "campaign/agents").mkdir(parents=True)
|
|
self.config = json.loads((ROOT / "opencode.json").read_text())
|
|
self.models = json.loads((ROOT / "campaign/models.json").read_text())
|
|
for file in (ROOT / "campaign/agents").glob("*.md"):
|
|
(self.root / "campaign/agents" / file.name).write_text(file.read_text())
|
|
|
|
def check(self):
|
|
(self.root / "opencode.json").write_text(json.dumps(self.config))
|
|
(self.root / "campaign/models.json").write_text(json.dumps(self.models))
|
|
return checker.check(self.root)
|
|
|
|
def test_current_config(self):
|
|
self.assertEqual(self.check(), [])
|
|
|
|
def test_loop_model_drift_in_both_sources_is_rejected(self):
|
|
self.models["roles"]["lead"] = "openai/gpt-5.5"
|
|
self.config["agent"]["sots-lead"]["model"] = "openai/gpt-5.5"
|
|
self.assertTrue(any("normal loop" in e for e in self.check()))
|
|
|
|
def test_resolver_downgrade_in_both_sources_is_rejected(self):
|
|
self.models["roles"]["resolver"] = "openai/gpt-5.6-sol"
|
|
self.config["agent"]["sots-resolver"]["model"] = "openai/gpt-5.6-sol"
|
|
self.assertTrue(any("problem resolution" in e for e in self.check()))
|
|
|
|
def test_worker_drift(self):
|
|
self.config["agent"]["sots-implementer"]["model"] = "llamacpp/qwen3-8b"
|
|
self.assertTrue(any("implementer: registry/config" in e for e in self.check()))
|
|
|
|
def test_nested_delegation(self):
|
|
self.config["agent"]["sots-verifier"]["permission"]["task"] = "allow"
|
|
self.assertTrue(any("nested delegation" in e for e in self.check()))
|
|
|
|
def test_missing_prompt_and_context_policy(self):
|
|
(self.root / "campaign/agents/lab.md").unlink()
|
|
self.config["compaction"]["auto"] = False
|
|
self.config["agent"]["sots-lab"]["steps"] = 400
|
|
errors = self.check()
|
|
self.assertTrue(any("missing prompt" in e for e in errors))
|
|
self.assertTrue(any("automatic compaction" in e for e in errors))
|
|
self.assertTrue(any("quantum size" in e for e in errors))
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|