From 432284820e36a7a3c6b35caaa8e4b9f903145b86 Mon Sep 17 00:00:00 2001 From: toki Date: Tue, 28 Jul 2026 10:39:20 +0900 Subject: [PATCH] sync: to agentic-framework v1.1.174 --- agent-ops/.version | 2 +- .../tests/test_finalize_task_routing.py | 39 +++++++++++++++++++ 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/agent-ops/.version b/agent-ops/.version index ae88434..32c833f 100644 --- a/agent-ops/.version +++ b/agent-ops/.version @@ -1 +1 @@ -1.1.173 +1.1.174 diff --git a/agent-ops/skills/common/finalize-task-routing/tests/test_finalize_task_routing.py b/agent-ops/skills/common/finalize-task-routing/tests/test_finalize_task_routing.py index 6430628..d9a06e1 100755 --- a/agent-ops/skills/common/finalize-task-routing/tests/test_finalize_task_routing.py +++ b/agent-ops/skills/common/finalize-task-routing/tests/test_finalize_task_routing.py @@ -11,6 +11,9 @@ SKILL_DIR = Path(__file__).resolve().parents[1] FORMATTER = SKILL_DIR / "scripts" / "finalize-task-route.sh" POLICY_FINALIZER = SKILL_DIR / "scripts" / "finalize-task-policy.sh" PLAN_SKILL = SKILL_DIR.parent / "plan" / "SKILL.md" +COMMON_SKILLS_DIR = SKILL_DIR.parent +COMMON_RULES_DIR = SKILL_DIR.parents[2] / "rules" / "common" + GRADE_VECTORS = { 1: (0, 0, 0, 0, 0), @@ -90,6 +93,42 @@ class FinalizeTaskRoutingTests(unittest.TestCase): result[f"{target}_filename"], f"{prefix}-{lane}-G{grade:02d}.md" ) + def test_common_workflows_do_not_depend_on_project_runtime(self) -> None: + contract_roots = ( + COMMON_RULES_DIR / "rules-roadmap.md", + COMMON_SKILLS_DIR / "create-roadmap", + COMMON_SKILLS_DIR / "update-roadmap", + COMMON_SKILLS_DIR / "sync-milestone-workstate", + COMMON_SKILLS_DIR / "complete-milestone", + COMMON_SKILLS_DIR / "plan", + COMMON_SKILLS_DIR / "code-review", + COMMON_SKILLS_DIR / "refine-local-plans", + COMMON_SKILLS_DIR / "finalize-task-routing", + ) + contract_files: list[Path] = [] + for root in contract_roots: + candidates = (root,) if root.is_file() else root.rglob("*") + contract_files.extend( + path + for path in candidates + if path.is_file() + and path.suffix in {".md", ".sh", ".yaml"} + and "tests" not in path.parts + ) + + forbidden = ( + "agent-ops/skills/project/", + "orchestrate-agent-task-loop", + "WORK_LOG.md", + "work_log_", + "dispatch.py", + ) + for path in sorted(contract_files): + text = path.read_text(encoding="utf-8") + for needle in forbidden: + with self.subTest(path=path, needle=needle): + self.assertNotIn(needle, text) + def test_request_to_worker_contract_is_ordered_and_consistent(self) -> None: routing_skill = (SKILL_DIR / "SKILL.md").read_text(encoding="utf-8") plan_skill = PLAN_SKILL.read_text(encoding="utf-8")