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

Configure Feed

Select the types of activity you want to include in your feed.

docs(readme): ModeSelection is enforced by serialSGS, not annotation-only

The constraint table predated the engine's multi-mode support landing
(preprocess modesByTask + per-mode placement); supports("ModeSelection")
returns true and constraintMeta.test.ts asserts it.

Russ T. Fugal (Jul 16, 2026, 4:12 PM -0600) 0deb1b4f 99b3ec41

+1 -1
+1 -1
README.md
··· 192 192 | `PeakCap` | Sum of fractional units on a resource ≤ cap (optionally windowed) | Yes | 193 193 | `ConcurrentUnitsLimit` | ≤ N units have active work on any day; optional `discipline` scope (WIP) | Yes | 194 194 | `Release` / `Deadline` | Earliest start / latest finish bounds per task | Yes | 195 + | `ModeSelection` | Multi-mode RCPSP — crew-size × duration trade-off per task | Yes | 195 196 | `Calendars` | Baked into `resolveCalendar` upstream | n/a | 196 197 | `UnitPrecedence` | A unit may not start until other units finish | No (annotation) | 197 198 | `UnimodalProfile` | One-ramp-up-one-ramp-down shape on a resource histogram | No (annotation) | 198 - | `ModeSelection` | Multi-mode RCPSP — crew-size × duration trade-off per task | No (annotation) | 199 199 | `CrewFlowContinuity` | Keep a crew flowing through a unit sequence without idle gaps | No (annotation) | 200 200 201 201 `ConcurrentUnitsLimit` is the hard WIP cap that prioritizes **completion**: cap how many units are open at once so the search finishes started units before opening more. Omit `discipline` for a whole-unit cap; set it to a `resourceUniqueId` for a per-discipline cap ("≤ 2 units in a given phase at once"). It subsumes the former `LaydownSpaceCap`.