test_task_capabilities.py 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. from __future__ import annotations
  2. from agent.core.presets import AGENT_PRESETS
  3. from script_build_host.agents.presets import register_script_presets
  4. from script_build_host.domain.phase_protocol import allowed_child_kinds
  5. from script_build_host.domain.task_capabilities import task_capabilities, task_capability
  6. from script_build_host.domain.task_contracts import ScriptTaskKind
  7. def test_capability_catalog_closes_worker_tool_schema_and_topology_contracts() -> None:
  8. register_script_presets()
  9. capabilities = task_capabilities()
  10. assert {item.task_kind for item in capabilities} == {
  11. kind
  12. for kind in ScriptTaskKind
  13. if kind
  14. not in {
  15. ScriptTaskKind.PATTERN_RETRIEVAL,
  16. ScriptTaskKind.DECODE_RETRIEVAL,
  17. ScriptTaskKind.EXTERNAL_RETRIEVAL,
  18. ScriptTaskKind.KNOWLEDGE_RETRIEVAL,
  19. }
  20. }
  21. for capability in capabilities:
  22. preset = AGENT_PRESETS[capability.worker_preset]
  23. assert set(preset.allowed_tools) == set(capability.allowed_tools)
  24. assert capability.output_schema() in capability.output_schemas
  25. assert allowed_child_kinds(
  26. phase=capability.phase,
  27. parent_kind=capability.task_kind,
  28. ) == capability.child_kinds
  29. def test_phase_root_topology_is_machine_readable_and_fail_closed() -> None:
  30. assert allowed_child_kinds(phase=1, parent_kind=None) == frozenset(
  31. {ScriptTaskKind.DIRECTION}
  32. )
  33. assert allowed_child_kinds(phase=2, parent_kind=None) == frozenset(
  34. {ScriptTaskKind.CANDIDATE_PORTFOLIO}
  35. )
  36. assert allowed_child_kinds(phase=3, parent_kind=None) == frozenset(
  37. {ScriptTaskKind.ROOT_DELIVERY}
  38. )
  39. assert not allowed_child_kinds(phase=99, parent_kind=None)
  40. assert not allowed_child_kinds(
  41. phase=1, parent_kind=ScriptTaskKind.PATTERN_RETRIEVAL
  42. )
  43. def test_catalog_keeps_element_write_ownership_narrow() -> None:
  44. capability = task_capability(ScriptTaskKind.ELEMENT_SET)
  45. assert capability.write_scope == ("script-build://writes/elements",)
  46. assert "save_script_paragraphs" not in capability.allowed_tools