Member Junction
    Preparing search index...
    • For each task, the tasks certain to have RUN — started, and not skipped — whenever it runs, itself included.

      This is what "has this step answered by the time that one finishes?" means on a graph, and it is stricter than ancestry. A task runs only once every gating predecessor is terminal, and at least one of them ran (a task whose every route in was cut is skipped). So:

      • a predecessor that can never be skipped certainly ran, and so did everything certain for it;
      • of the rest, only what is certain for EVERY predecessor is certain, because any one of them may be the branch that ran.

      A task can be skipped only when every gating route into it can be cut: its edge is conditional or exclusive, or its origin can itself be skipped. An entry task is never skipped by the engine. Operator verbs (skip, override) and a declared early finish are deliberate interventions and are not modelled.

      Only Prerequisite edges count, matching ComputeEligibleTasks: an edge that does not gate a task starting cannot make anything certain before it.

      Parameters

      Returns Map<string, ReadonlySet<string>>

      the certain set per task, or null when the gating edges form a cycle (reported on its own by DetectCycle; no order exists to reason about)