ReadonlydurationReadonlyendLatest endDate across all tasks — the timeline's upper bound.
ReadonlymilestonesJust the milestone tasks (zero-duration or milestone: true).
Returned in startDate order so UI scrubbers can plot them as
chevrons along the timeline.
ReadonlystartEarliest startDate across all tasks — the timeline's lower bound.
ReadonlytasksTasks indexed by their id for O(1) lookup.
ReadonlytasksTasks listed in startDate order — the order the SchedulePlayer
iterates for state classification.
All tasks active at the given moment (status InProgress).
Linear scan over tasksList — fine for the few-hundred-task
schedules typical of construction projects.
Convenience: total duration covered by the schedule, in days.