Think of your WBS DAG as a base space. Each local plan (“patch”) assigns start-times to some tasks. Where two patches overlap, we can compare their assignments on shared tasks: that mismatch is a Čech 1-cochain δ.
If δ=0 on every overlap, the local plans are compatible and can “glue” into a single global assignment (a global section), subject to precedence constraints, resource caps, and time windows.
This is a toy obstruction: it is not full sheaf cohomology, but it keeps the same “glueability” intuition.1 Load “Patch conflict” and watch δ jump & the conflict list populate.
2 In Patches, align the conflicting pinned time, then recompute: δ should drop.
3 In Resources, reduce a cap and see how schedule feasibility changes (even if δ=0).
Window is [earliest start, latest end]. We mark a miss if (start < window[0]) or (end > window[1]).
Risk is just a scalar field on vertices; we smooth it by averaging over neighbors for a chosen number of rounds.
Resources are per-time-step capacities. This prototype uses discrete time and unit capacities by default.
The sheaf story is happiest on a DAG: local-to-global questions are well-behaved, and scheduling can be done in a topological order. If you add a cycle, we still draw it, but “earliest start” becomes underdetermined (and the topo-sort warns).
This is a coarse “per time-step” capacity check. Many real schedulers use cumulative constraints, calendars, and non-integer time. Still, it’s enough to see how local consistency (δ=0) is not the same thing as global feasibility.