Selected spine (one maximum-cardinality chain)
Regular Task

Finite Spine Construction

Step 1: Validate the DAG
Check task identifiers, reject cycles, and compute a topological order.
order = topologicalSort(tasks, dependencies)
require order.length == tasks.length
Step 2: Compute Reachability and Height
Use transitive reachability for comparability checks and longest-predecessor ranks for height.
rank(v) = 1 + max(rank(u))
height = max(rank)
Step 3: Recover a Maximum Chain
Follow the stored predecessor pointers from a height-eight endpoint.
spine = unwind(heightParent)
require spine.length == height
Step 4: Validate the Partitions
Check coverage, transitive incomparability, minimum size, and one spine task per part.
require coversEachTaskOnce(partition)
require everyPartIsAntichain(partition)
Step 5: Compare Selection Rules
Height selects one maximum-cardinality chain; CPM selects a maximum-duration path. The criteria differ, but a path can satisfy both. In this example the CPM path is another maximum-cardinality chain and is also a spine.