A functional toolkit for authoring resource-leveling algorithms — compose constraint and scoring blocks, enumerate feasible schedules

feat(level-core): currentSchedule and materialize bridges master

The two bridges between a ResolvedProject and a Schedule. currentSchedule reads existing source dates into Schedule form, so round-trip identity holds before any search has run — the no-search-yet case is first-class. materialize goes the other way, carrying the entire source ProjectFile through and overriding only start/finish/duration for tasks present in the schedule, so a partial schedule passes the rest through untouched. Durations are re-emitted in the source unit via the project's unit conversions, and both honor per-task calendars. A mode change throws until mode selection is implemented.


+436
3 changed files