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.
Every time you update task progress, DPlan's Shadow engine runs five detectors against the progress history to identify patterns:
| Detector | What it finds |
|---|---|
| Gate-Release | Task B consistently starts (or jumps in progress) only after Task A passes a threshold — A is "gating" B |
| Opportunity Gap | A task's start date has passed but progress hasn't begun — something untracked is holding it back |
| Velocity Correlation | Two tasks' progress moves in sync (Pearson correlation) even though they have no declared link |
| Stall Cascade | Task A stalls and Task B stalls shortly after — a hidden blocking chain |
| Resource Contention | A shared resource causes tasks to compete — when one advances, the other slows |
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.
The Observation Panel shows all detected shadow dependencies with their confidence scores, detector basis, and pattern windows. To open it:
For each detected shadow, you can:
| Action | What happens |
|---|---|
| Promote | Converts the shadow into a real declared dependency — it becomes a standard Gantt arrow |
| Snooze | Hides the observation for 30 minutes. It resurfaces if confidence rises by ≥0.15 |
| Dismiss | Hides the observation for 7 days. It resurfaces only if confidence jumps significantly |
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:
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.Configure the Shadow engine in Settings → Feature Toggles → Shadow Dependencies: