from __future__ import annotations from script_build_host.domain.artifacts import DirectionConstraint from script_build_host.domain.task_contracts import PlannerCriterionInput, ScriptTaskKind from script_build_host.domain.task_policy import TaskPolicyCatalog def test_task_policy_injects_protected_kind_and_direction_constraint_criteria() -> None: catalog = TaskPolicyCatalog() criteria = catalog.criteria( task_id="paragraph-task", task_kind=ScriptTaskKind.PARAGRAPH, business=( PlannerCriterionInput( client_key="business-quality", description="the opening is memorable", hard=False, ), ), direction_constraints=( DirectionConstraint( constraint_id="facts-traceable", statement="Every factual claim remains traceable", rationale="hard publication rule", ), ), ) assert criteria[0].criterion_id == "paragraph-content-complete" assert criteria[0].hard is True assert criteria[1].criterion_id == "direction-constraint-facts-traceable" assert criteria[1].hard is True assert criteria[2].description == "the opening is memorable" assert criteria[2].hard is False