Solved at Scale
Cross-Checking the Makespan
A solver schedule becomes a certificate when independent computations agree. Every constraint class is re-checked on the decoded values at build time, the solver's own bound meets its objective, and an exhaustive search over every machine-ordering combination independently reaches the same minimum makespan — three agreements, not one claim taken on trust.
Independent re-verification
This repo's own exact integer arithmetic re-checks the decoded schedule at every build: all 8 interval durations, all 5 precedence rules, and all 3 machine no-overlap rules, plus the makespan variable must equal the latest task end and the reported objective. Why: an independent check must not reuse the solver's code path, and any violation would stop the build rather than let a wrong schedule through.
The contention gap
Every job needs 7 time units end to end, and the busiest machine carries 10, so the best bound obtainable without choosing any task order is 10 — yet the certified makespan is 11. Why: the gap is exactly resource contention, machines being busy when a job is ready, and closing it needs an actual sequencing decision, not just a load count.
An exhaustive second proof
This repo also enumerates every combination of per-machine task orderings, 72 in all, discards the 28 that conflict with job precedence, and takes the minimum makespan over the remaining 44. Why: the true optimum is always attained by some choice of per-machine ordering, so this exhaustive search is a genuine second, solver-independent proof, tractable enough to run on every build rather than a claim that no such check is possible.
Provable makespan
The schedule is provably correct and provably shortest three ways: re-verified by our own arithmetic, matched by the solver's own best-bound proof, and matched again by the exhaustive ordering search above. Why: three independent computations landing on the same number is a certificate, not a claim that any one of them alone was the only way to know.
Diagram note
The bars are the same decoded schedule, J1 through J3 across machines M1 through M3; the loads and job lengths are recomputed from the job data on every build, and the lower bound and exhaustive-search result are recomputed from that same data, not from the schedule itself. Pixel positions are rounded for layout; every number shown is exact.