Contract changelog
2026-10-17 — numeric safety and request validation
- Breaking validation correction: Reject unknown request, item, warehouse and box fields with 400
unknown_field, rather than silently ignoring them. - Breaking validation correction: Reject dimensions and masses outside the published numeric range with 400
numeric_range. - Fix: Use consistent packing precision for fractional exact fits; keep final geometry, fill, mass and stock checks.
- Additive: Echo the applied goal in
metadata.optimization_goal. Unfitted outcomes have specific reason codes and explicit mass units; synchronous outcome masses use the request unit. - Documentation: Permanent redirects consolidate concepts, examples and errors into the guide.
2026-10-17 — packing and documentation fixes
- Fix: Repack eligible packages into smaller stocked boxes while preserving
unit counts, fill and weight limits. The API default remains
minimize_boxes;minimize_boxes_then_volumeis recommended for explicit count-first selection. - Additive: Full hazmat class divisions, per-material details and conservative package policy metadata.
- Fix: Split eligible hazmat units at package quantity limits; report an over-limit sealed unit as unfitted.
- Documentation: Use response-body timing; no timing-header delivery guarantee. Quick-start now redirects to the integration guide. No request fields or packing routes were removed.
2026-10-16 — contract 1.1.0 corrections
- Require explicit item weight and box maximum weight.
- Reject unsupported instructions with 400; keep genuine provider failures as 502.
- Retry overweight nested bundles as separate units.
- Validate battery state of charge from 0 to 100.
- Replace legacy capability feedback with the current public contract.
- Use a single packing guide, checked example and short async appendix.
The earlier 1.5.0 documentation label was replaced by contract line 1.1.0; runtime features were not rolled back. The contract applies at /api/optimize, /api/v1/optimize and /api/v1.1/optimize.