Member Junction
    Preparing search index...
    • Propagates "not taken" down a losing branch.

      When an exclusive fan-out picks a winner, the losing targets are seeded here and their exclusive descendants follow. The rule is deliberately conservative: a task is skipped only when it has at least one gating predecessor and every gating predecessor is skipped. A join that is also reachable from the winning branch therefore survives — which is the entire point, since a fork that reconverges must still run its join.

      Optional and Corequisite edges are ignored, matching ComputeEligibleTasks: an edge that does not gate a task starting cannot decide that it never starts.

      Fixpoint rather than a single forward walk, because a join's fate is only decidable once every one of its gating predecessors is known — a walk in edge order could visit it too early and let a doomed branch through.

      Ordering invariant (load-bearing): the cascade is computed and persisted BEFORE eligibility in every cycle. A task whose gating predecessors are all Skipped is simultaneously eligible (Skipped satisfies, §5.2) and to-be-skipped; running eligibility first would dispatch the loser branch before anything marked it. Cascade first, always.

      Parameters

      • nodes: readonly TaskGraphNode[]
      • edges: readonly TaskGraphEdge[]
      • seedSkipIDs: readonly string[] = []

        tasks already decided to skip this cycle (XOR losers), which may not yet carry Skipped in nodes because the write happens later in the same pass.

      Returns string[]

      ids of Pending tasks that should become Skipped