CONSTRAINTS / WHAT MAKES A PLACEMENT LEGAL

A placement is useful only while every rule still holds.

Each rule is a request field, enforced during the search by every engine and recomputed afterwards by a validator that shares no code with it.

+
CONSTRAINT / 01

Geometry

inner_dimensions + clearance

Every placement stays inside the container's usable volume, and collision is decided on exact integer coordinates.

✓ enforced during search, recomputed from the result
REFERENCE / EVERY RULE
01

Geometry

inner_dimensions + clearance

Every placement stays inside the container's usable volume, and collision is decided on exact integer coordinates.

Open ↗
02

Units and numerics

exact fixed-point ticks

Lengths and weights accept fractional, decimal or unit-suffixed input and are carried as exact ticks, with no floating point before the score.

Open ↗
03

Rotations

allowed_rotations · keep_upright

Orientation is restricted per axis, not as a single on/off switch, and 'this side up' is expressible on the item that needs it.

Open ↗
04

Obstacles and clearance

obstacles + additional_boxes

Reserved volumes are geometry: unions of exact boxes approximate a wheel arch, a post or a roof shelf, and placements route around them.

Open ↗
05

Support

minimum_support_ratio · ground_contact_rule

The supporting footprint is computed as exact contact area against the floor or the items below, including loads bridged across two neighbours.

Open ↗
06

Top load

max_top_load · cumulative

Load is propagated through the contact graph, so a bearing limit is checked against the whole stack above an item rather than its direct neighbour.

Open ↗
07

Stacking

stackable · max_stacked_items · nesting_height · max_stack_density

Stackability, stack counts, interlocking height and density limits shape a legal column. Density is checked at every level, not only the floor.

Open ↗
08

Weight and payload

weight · max_payload · tare_weight

Item weight, container tare and payload capacity are exact, and an overloaded candidate is refused during search with payload_exceeded.

Open ↗
09

Centre of mass and axle load

centre of mass · support polygon · axles

The aggregate centre of mass, the support polygon and exact gross two-axle reactions are enforced through the same constraint layer as geometry.

Open ↗
10

Compatibility and policy

incompatible_tags · group · policy

Items can be required to stay together or apart, and versioned eligibility rules travel in the request with the context they select on.

Open ↗
11

Load order

stop_index · loading sequence

A geometrically reachable loading and unloading sequence, so an item due at a later stop is never buried under one that comes off earlier.

Open ↗
12

Independent validation

recompute from the result

A validator that shares no code with the solver recomputes the objective and every affected rule from the returned placements, in every runtime.

Open ↗
13

Objectives

lexicographic exact integers

Six selectable rankings, from fewest containers to cheapest landed cost. Every one of them starts with unpacked_count.

Open ↗
WHEN IT SAYS NO

A refusal carries the rule, the measurement and a proof level.

Every unpacked item comes back with a reason code, the details behind it, and how strongly that reason is backed. This is what support, a warehouse operator or a retry policy actually needs.

01
rotation_restricted / PROVEN

ITEM 31

keep_upright

would only fit lying down, and the item may not be laid down

02
no_feasible_placement / PROVEN

ITEM 08

support 0.42 / 0.65

every candidate position left the footprint below the required support ratio

03
group_cannot_fit_together / PROVEN

KIT 04

2 of 2 units

the group travels whole or not at all, so neither unit was placed