.
JDJordan Diaz
Dependency-aware queue implementation CS-002
✓ Ready to mergeReview RV-002Base: main@faec4c7 → Candidate: cs-002@94c11bfTarget: main
Changed files · 6
queue.ts+96 −20
task.ts+61 −19
dependency.ts+86 −0
queue-dnd.ts+72 −8
queue.test.ts+128 −2
queue.md+34 −0
src/application/queue.tsCandidate 94c11bf · exact diff
146149export function legalPlacementRange(projectGraph, taskId) {
150+ const prerequisites = projectGraph.prerequisites(taskId)
151+ const dependents = projectGraph.dependents(taskId)
152+ const lowerBound = maxQueueIndex(prerequisites)
153+ const upperBound = minQueueIndex(dependents)
154+ return inclusiveRange(lowerBound + 1, upperBound - 1)
147155}
188+ throw new DependencyOrderError({
189+ task: task.title, prerequisite: blocker.title, plan: blocker.planTitle
190+ })
Blocking review issue resolved
Legal placement now evaluates the Project-wide dependency DAG, including cross-Plan prerequisites, and the UI receives concrete blocker identity for explanation.

Protected transition — Merge CS-002 into main

The trusted publisher will revalidate candidate digest, target head, Review disposition, evidence and current authorization. If anything changed, Merge stops and this gate returns to blocked/stale rather than guessing success.