Context
speculate.reconcile marks a path dead (pathDead in submitqueue/orchestrator/controller/speculate/speculate.go) when its merge assumptions can no longer hold: a base dependency reached Failed, or a dependency outside the base Succeeded (the path bet it would not land first).
A Cancelled base dependency deliberately does NOT dead the path today (Phase-A leniency). This mirrors the pre-tree chain semantics: the cancelled batch will never land, so it can no longer conflict with the path's changes, and we accept that the path's build ran against a stale assumption set (it built on top of a base member that will now never merge ahead of it).
What should change
Once multi-path enumeration lands (a batch's tree carries more than the single chain path), a Cancelled base dependency should mark the path dead the same way a Failed one does: a sibling path that never assumed the cancelled batch picks up the slack, and the batch merges on an accurate assumption set instead of a stale build.
This is gated on multi-path enumeration because today there is exactly one path per batch (chain enumerator) — deading the only path on a benign cancel would fail batches that currently survive via the chain semantics.
Where
pathDead in submitqueue/orchestrator/controller/speculate/speculate.go — treat a Cancelled base dependency as dead.
- Revisit the reconcile tests' Phase-A expectations at the same time.
Context
speculate.reconcilemarks a path dead (pathDeadinsubmitqueue/orchestrator/controller/speculate/speculate.go) when its merge assumptions can no longer hold: a base dependency reached Failed, or a dependency outside the base Succeeded (the path bet it would not land first).A Cancelled base dependency deliberately does NOT dead the path today (Phase-A leniency). This mirrors the pre-tree chain semantics: the cancelled batch will never land, so it can no longer conflict with the path's changes, and we accept that the path's build ran against a stale assumption set (it built on top of a base member that will now never merge ahead of it).
What should change
Once multi-path enumeration lands (a batch's tree carries more than the single chain path), a Cancelled base dependency should mark the path dead the same way a Failed one does: a sibling path that never assumed the cancelled batch picks up the slack, and the batch merges on an accurate assumption set instead of a stale build.
This is gated on multi-path enumeration because today there is exactly one path per batch (chain enumerator) — deading the only path on a benign cancel would fail batches that currently survive via the chain semantics.
Where
pathDeadinsubmitqueue/orchestrator/controller/speculate/speculate.go— treat a Cancelled base dependency as dead.