Shadow Dependencies

Shadow Dependencies are hidden task relationships that DPlan detects automatically by analysing progress patterns. These are dependencies that exist in practice — tasks that consistently wait for each other, resources that create invisible bottlenecks — but were never formally drawn on the Gantt chart.

How It Works

Every time you update task progress, DPlan's Shadow engine runs five detectors against the progress history to identify patterns:

DetectorWhat it finds
Gate-ReleaseTask B consistently starts (or jumps in progress) only after Task A passes a threshold — A is "gating" B
Opportunity GapA task's start date has passed but progress hasn't begun — something untracked is holding it back
Velocity CorrelationTwo tasks' progress moves in sync (Pearson correlation) even though they have no declared link
Stall CascadeTask A stalls and Task B stalls shortly after — a hidden blocking chain
Resource ContentionA shared resource causes tasks to compete — when one advances, the other slows

Confidence Scoring

Each detected shadow edge has a confidence score (0 to 1) that increases as the pattern repeats and decays over time if the pattern stops. Edges below 0.05 confidence are automatically expired.

Observation Panel

The Observation Panel shows all detected shadow dependencies with their confidence scores, detector basis, and pattern windows. To open it:

  1. The panel appears automatically in the Gantt view when shadows are detected.
  2. Or toggle it via Settings → Feature Toggles → Shadow Dependencies → Show Observation Panel.

Actions on Shadow Dependencies

For each detected shadow, you can:

ActionWhat happens
PromoteConverts the shadow into a real declared dependency — it becomes a standard Gantt arrow
SnoozeHides the observation for 30 minutes. It resurfaces if confidence rises by ≥0.15
DismissHides the observation for 7 days. It resurfaces only if confidence jumps significantly

Drift Score

The Shadow engine also computes a Drift Score — a single percentage that measures how much of your project's execution flow is not represented in your declared dependencies:

Shadow Dependencies are computed from progressHistory — the more you update task progress over time, the more accurate the detections become. A project with only a single progress snapshot won't generate meaningful shadows.

Settings

Configure the Shadow engine in Settings → Feature Toggles → Shadow Dependencies: