feat(mma): Add topological sorting to TrackDAG with cycle detection

This commit is contained in:
2026-02-27 20:04:04 -05:00
parent a3cfeff9d8
commit f85ec9d06f
2 changed files with 43 additions and 0 deletions

View File

@@ -50,3 +50,29 @@ class TrackDAG:
if is_cyclic(ticket.id):
return True
return False
def topological_sort(self) -> List[str]:
"""
Returns a list of ticket IDs in topological order.
Raises ValueError if a cycle is detected.
"""
if self.has_cycle():
raise ValueError("Dependency cycle detected")
visited = set()
stack = []
def visit(ticket_id):
if ticket_id in visited:
return
visited.add(ticket_id)
ticket = self.ticket_map.get(ticket_id)
if ticket:
for dep_id in ticket.depends_on:
visit(dep_id)
stack.append(ticket_id)
for ticket in self.tickets:
visit(ticket.id)
return stack