Optimization runs now provide specific, accurate reasons why Jobs could not be assigned to Resources, replacing the previous generic "ran out of availability" fallback that was frequently misleading on complex schedules. When multiple reasons apply to the same Job, they are now reported in a consistent priority order, surfacing the most relevant reason first.
We've fully refactored the infeasibility reasoning engine to cover a broader set of real-world constraints, including those introduced by extensions. Results are visible in the run results page.
What's new
- Maximum working hours: Jobs are flagged when a Resource's configured work hour limits prevent assignment.
- Travel time reasoning: The system now evaluates actual availability blocks for feasible slots, including any padding and snapping requirements, rather than approximating availability.
- Availability attributes and preferences: Reasons now reflect availability attributes and preferences configured on Resources.
- Full allocation required: Where a Job requires all Resources to be scheduled together, the system correctly attributes infeasibility to the constraining Resource rather than applying a generic reason to the group.
- Prioritized reason ordering: Where multiple reasons apply, constraint-related reasons are surfaced first, followed by disallowed resource reasons, ensuring the most actionable information is always shown.
Why it matters
With no fallback reason remaining and a clear priority order, schedulers and operations teams can now identify when a Job has a genuinely feasible slot that the solver did not fill, making it easier to surface real scheduling gaps and act on them with confidence.