52 lines
1.8 KiB
Python
52 lines
1.8 KiB
Python
from pathlib import Path
|
|
import unittest
|
|
|
|
|
|
class TaskBreakdownPolicyTest(unittest.TestCase):
|
|
@classmethod
|
|
def setUpClass(cls):
|
|
cls.skill = Path(__file__).parents[1].joinpath("SKILL.md").read_text()
|
|
|
|
def test_architecture_owns_complete_release_task_breakdown(self):
|
|
required = [
|
|
"Architecture owns complete Task decomposition",
|
|
"every Feature allocated to the release",
|
|
"reviews existing Tasks",
|
|
"at least two independently executable Tasks",
|
|
"every acceptance outcome",
|
|
"every applicable requirement",
|
|
"must not report planning readiness",
|
|
]
|
|
for marker in required:
|
|
self.assertIn(marker, self.skill)
|
|
|
|
def test_task_lifecycle_and_readiness_rules_are_fail_closed(self):
|
|
required = [
|
|
"version: 1.7.0",
|
|
"repository/component owner",
|
|
"acceptance-evidence requirements",
|
|
"implementation artifacts",
|
|
"inputs and outputs",
|
|
"failure boundaries",
|
|
"exclusions",
|
|
"verification steps",
|
|
"within-Feature sequencing",
|
|
"cross-Feature prerequisite",
|
|
"acyclic Task dependencies",
|
|
"creates missing Tasks",
|
|
"freely revise or remove only draft Tasks",
|
|
"must not be deleted or silently rewritten",
|
|
"Superseded or Cancelled",
|
|
"replacement links",
|
|
"invalidate prior readiness evidence",
|
|
"pre-approval state",
|
|
"renewed human `Approved for Implementation`",
|
|
"separate exact-task Kanban Focus admission",
|
|
]
|
|
for marker in required:
|
|
self.assertIn(marker, self.skill)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|