reschedule_and_propagate
Compute the downstream impact of shifting a single task. Default is dry_run (no DB writes); set mode='commit' to actually persist the changes. Cascades forward only (no pull): successors are pushed only if their predecessor's new end + lag would violate their current start. Tasks with progress=100 are treated as pinned; pass pinned_task_ids for additional pins. When a pin would be violated, the change is recorded in 'conflicts' and not propagated further. In mode='commit', if any conflicts exist nothing is written (all-or-nothing transaction). Same v1 limitations as get_critical_path: FS only, calendar days by default, no holiday table, ignores multi-period segments.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | dry_run (default): compute and return; do not modify DB. commit: write to DB in a single transaction, but only if no conflicts. Audit logged on commit. | |
| shift | No | Relative shift like '+3d' (push back) or '-2d' (pull earlier). Specify exactly one of shift or new_start_date. | |
| task_id | Yes | Task ID (UUID) to shift | |
| business_days | No | If true, skip Sat/Sun in duration math. Defaults to false. | |
| new_start_date | No | Absolute new start date as YYYY-MM-DD. Specify exactly one of shift or new_start_date. | |
| pinned_task_ids | No | Additional task IDs to treat as pinned (in addition to progress=100 tasks). | |
| respect_dependencies | No | If false, only the named task moves; successors are not cascaded. Default true. |