iop/agent-ops/skills/common/finalize-task-routing/tests/test_finalize_task_routing.py
toki deea59d035 feat: task routing, orchestration, quota probe, and skill updates
- add finalize-task-routing skill with policy and test scripts
- add execution target selection scripts and tests for orchestrate-agent-task-loop
- add quota probe adapter and CLI status for node app
- update plan, finalize-task-routing, and orchestration skill files
- add agent-task archive for runtime target selector
- update stream-evidence-gate-core milestone
2026-07-25 19:33:17 +09:00

318 lines
12 KiB
Python
Executable file

#!/usr/bin/env python3
from __future__ import annotations
import itertools
import subprocess
import unittest
from pathlib import Path
SKILL_DIR = Path(__file__).resolve().parents[1]
FORMATTER = SKILL_DIR / "scripts" / "finalize-task-route.sh"
POLICY_FINALIZER = SKILL_DIR / "scripts" / "finalize-task-policy.sh"
GRADE_VECTORS = {
1: (0, 0, 0, 0, 0),
2: (2, 0, 0, 0, 0),
3: (2, 1, 0, 0, 0),
4: (2, 2, 0, 0, 0),
5: (2, 2, 1, 0, 0),
6: (2, 2, 2, 0, 0),
7: (2, 2, 2, 1, 0),
8: (2, 2, 2, 2, 0),
9: (2, 2, 2, 2, 1),
10: (2, 2, 2, 2, 2),
}
def run(script: Path, *args: object, check: bool = True) -> subprocess.CompletedProcess[str]:
return subprocess.run(
[str(script), *(str(arg) for arg in args)],
check=check,
capture_output=True,
text=True,
timeout=5,
)
def fields(stdout: str) -> dict[str, str]:
return dict(line.split("=", 1) for line in stdout.splitlines())
class FinalizeTaskRoutingTests(unittest.TestCase):
def test_formatter_all_score_vectors_without_floor(self) -> None:
for target, lane, scores in itertools.product(
("build", "review"),
("local", "cloud"),
itertools.product(range(3), repeat=5),
):
with self.subTest(target=target, lane=lane, scores=scores):
result = fields(run(FORMATTER, target, lane, *scores).stdout)
expected_grade = max(1, sum(scores))
prefix = "PLAN" if target == "build" else "CODE_REVIEW"
self.assertEqual(result["grade"], f"G{expected_grade:02d}")
self.assertEqual(
result["filename"],
f"{prefix}-{lane}-G{expected_grade:02d}.md",
)
def test_formatter_exhaustive_grade_floor_matrix(self) -> None:
for target, lane, base_grade, floor in itertools.product(
("build", "review"),
("local", "cloud"),
range(1, 11),
range(1, 11),
):
with self.subTest(
target=target,
lane=lane,
base_grade=base_grade,
floor=floor,
):
result = fields(
run(
FORMATTER,
target,
lane,
*GRADE_VECTORS[base_grade],
floor,
).stdout
)
expected_grade = max(base_grade, floor)
prefix = "PLAN" if target == "build" else "CODE_REVIEW"
self.assertEqual(result["target"], target)
self.assertEqual(result["lane"], lane)
self.assertEqual(result["grade"], f"G{expected_grade:02d}")
self.assertEqual(
result["filename"],
f"{prefix}-{lane}-G{expected_grade:02d}.md",
)
def test_pair_exhaustive_route_matrix(self) -> None:
for (
build_lane,
risk_triggered,
build_base_grade,
review_base_lane,
review_base_grade,
) in itertools.product(
("local", "cloud"),
("false", "true"),
range(1, 11),
("local", "cloud"),
range(1, 11),
):
with self.subTest(
build_lane=build_lane,
risk_triggered=risk_triggered,
build_base_grade=build_base_grade,
review_base_lane=review_base_lane,
review_base_grade=review_base_grade,
):
result = fields(
run(
POLICY_FINALIZER,
"pair",
build_lane,
risk_triggered,
*GRADE_VECTORS[build_base_grade],
review_base_lane,
*GRADE_VECTORS[review_base_grade],
).stdout
)
if risk_triggered == "true":
expected_build_lane = "cloud"
expected_build_grade = max(build_base_grade, 7)
expected_build_floor = "G07"
else:
expected_build_lane = build_lane
expected_build_grade = build_base_grade
expected_build_floor = "none"
expected_review_floor = (
10 if expected_build_grade >= 9 else 9
)
expected_review_grade = max(
review_base_grade,
expected_review_floor,
)
self.assertEqual(result["build_base_lane"], build_lane)
self.assertEqual(
result["finalizer"],
"finalize-task-policy.sh",
)
self.assertEqual(result["finalizer_mode"], "pair")
self.assertEqual(
result["build_base_grade"],
f"G{build_base_grade:02d}",
)
self.assertEqual(
result["build_risk_triggered"],
risk_triggered,
)
self.assertEqual(result["build_floor"], expected_build_floor)
self.assertEqual(result["build_lane"], expected_build_lane)
self.assertEqual(
result["build_grade"],
f"G{expected_build_grade:02d}",
)
self.assertEqual(
result["build_filename"],
f"PLAN-{expected_build_lane}-G{expected_build_grade:02d}.md",
)
self.assertEqual(result["review_base_lane"], review_base_lane)
self.assertEqual(
result["review_base_grade"],
f"G{review_base_grade:02d}",
)
self.assertEqual(
result["review_floor"],
f"G{expected_review_floor:02d}",
)
self.assertEqual(result["review_lane"], "cloud")
self.assertEqual(
result["review_grade"],
f"G{expected_review_grade:02d}",
)
self.assertEqual(
result["review_filename"],
f"CODE_REVIEW-cloud-G{expected_review_grade:02d}.md",
)
def test_raw_sum_one_stays_g01(self) -> None:
result = fields(
run(FORMATTER, "build", "local", 1, 0, 0, 0, 0).stdout
)
self.assertEqual(result["grade"], "G01")
def test_single_target_policy_matrix(self) -> None:
for lane, risk_triggered, base_grade in itertools.product(
("local", "cloud"),
("false", "true"),
range(1, 11),
):
with self.subTest(
target="build",
lane=lane,
risk_triggered=risk_triggered,
base_grade=base_grade,
):
result = fields(
run(
POLICY_FINALIZER,
"build",
lane,
risk_triggered,
*GRADE_VECTORS[base_grade],
).stdout
)
expected_lane = "cloud" if risk_triggered == "true" else lane
expected_grade = (
max(base_grade, 7)
if risk_triggered == "true"
else base_grade
)
expected_floor = (
"G07" if risk_triggered == "true" else "none"
)
self.assertEqual(
result["finalizer"],
"finalize-task-policy.sh",
)
self.assertEqual(result["finalizer_mode"], "build")
self.assertEqual(result["build_base_lane"], lane)
self.assertEqual(
result["build_base_grade"],
f"G{base_grade:02d}",
)
self.assertEqual(
result["build_risk_triggered"],
risk_triggered,
)
self.assertEqual(result["build_floor"], expected_floor)
self.assertEqual(result["build_lane"], expected_lane)
self.assertEqual(
result["build_grade"],
f"G{expected_grade:02d}",
)
self.assertEqual(
result["build_filename"],
f"PLAN-{expected_lane}-G{expected_grade:02d}.md",
)
for lane, base_grade in itertools.product(
("local", "cloud"),
range(1, 11),
):
with self.subTest(
target="review",
lane=lane,
base_grade=base_grade,
):
result = fields(
run(
POLICY_FINALIZER,
"review",
lane,
*GRADE_VECTORS[base_grade],
).stdout
)
expected_grade = max(base_grade, 9)
self.assertEqual(
result["finalizer"],
"finalize-task-policy.sh",
)
self.assertEqual(result["finalizer_mode"], "review")
self.assertEqual(result["review_base_lane"], lane)
self.assertEqual(
result["review_base_grade"],
f"G{base_grade:02d}",
)
self.assertEqual(result["review_floor"], "G09")
self.assertEqual(result["review_lane"], "cloud")
self.assertEqual(
result["review_grade"],
f"G{expected_grade:02d}",
)
self.assertEqual(
result["review_filename"],
f"CODE_REVIEW-cloud-G{expected_grade:02d}.md",
)
def test_invalid_inputs_are_rejected(self) -> None:
invalid_formatter_cases = (
("deploy", "local", 0, 0, 0, 0, 0),
("build", "hybrid", 0, 0, 0, 0, 0),
("build", "local", 3, 0, 0, 0, 0),
("build", "local", 0, 0, 0, 0, 0, 0),
("review", "cloud", 0, 0, 0, 0, 0, 11),
("review", "cloud", 0, 0, 0, 0, 0, "G09"),
)
for args in invalid_formatter_cases:
with self.subTest(formatter_args=args):
self.assertEqual(run(FORMATTER, *args, check=False).returncode, 2)
valid_scores = GRADE_VECTORS[4]
invalid_policy_cases = (
("pair", "local", "yes", *valid_scores, "local", *valid_scores),
("pair", "local", "unknown", *valid_scores, "local", *valid_scores),
("pair", "hybrid", "true", *valid_scores, "local", *valid_scores),
("pair", "local", "true", *valid_scores, "remote", *valid_scores),
("pair", "local", "true", 3, 0, 0, 0, 0, "local", *valid_scores),
("pair", "local", "true", *valid_scores, "local", *valid_scores, 2),
("build", "local", "unknown", *valid_scores),
("review", "local", "false", *valid_scores),
("review", "local", *valid_scores[:-1]),
("deploy", "local", *valid_scores),
)
for args in invalid_policy_cases:
with self.subTest(policy_args=args):
self.assertEqual(
run(POLICY_FINALIZER, *args, check=False).returncode,
2,
)
if __name__ == "__main__":
unittest.main()