test: lock task lifecycle protections

This commit is contained in:
2026-09-02 12:38:36 +00:00
parent a7efaf86fe
commit ef7bdf015b
+7 -3
View File
@@ -6,6 +6,7 @@ class TaskBreakdownPolicyTest(unittest.TestCase):
@classmethod @classmethod
def setUpClass(cls): def setUpClass(cls):
cls.skill = Path(__file__).parents[1].joinpath("SKILL.md").read_text() cls.skill = Path(__file__).parents[1].joinpath("SKILL.md").read_text()
cls.task_section = cls.skill.split("## Task and Dependency Breakdown", 1)[1].split("## Version Allocation", 1)[0]
def test_architecture_owns_complete_release_task_breakdown(self): def test_architecture_owns_complete_release_task_breakdown(self):
required = [ required = [
@@ -18,11 +19,10 @@ class TaskBreakdownPolicyTest(unittest.TestCase):
"must not report planning readiness", "must not report planning readiness",
] ]
for marker in required: for marker in required:
self.assertIn(marker, self.skill) self.assertIn(marker, self.task_section)
def test_task_lifecycle_and_readiness_rules_are_fail_closed(self): def test_task_lifecycle_and_readiness_rules_are_fail_closed(self):
required = [ required = [
"version: 1.7.0",
"repository/component owner", "repository/component owner",
"acceptance-evidence requirements", "acceptance-evidence requirements",
"implementation artifacts", "implementation artifacts",
@@ -42,9 +42,13 @@ class TaskBreakdownPolicyTest(unittest.TestCase):
"pre-approval state", "pre-approval state",
"renewed human `Approved for Implementation`", "renewed human `Approved for Implementation`",
"separate exact-task Kanban Focus admission", "separate exact-task Kanban Focus admission",
"Approved, Kanban-admitted, in-progress, or completed Tasks must not be deleted or silently rewritten.",
"Retain an obsolete Task with a terminal Superseded or Cancelled status, its prior evidence and history, and explicit replacement links.",
"A material change to Task scope, outcome, dependency, repository, or component must invalidate prior readiness evidence",
] ]
self.assertIn("version: 1.7.0", self.skill)
for marker in required: for marker in required:
self.assertIn(marker, self.skill) self.assertIn(marker, self.task_section)
if __name__ == "__main__": if __name__ == "__main__":