Pallets.
A pallet is a logistic unit with an SSCC. Aggregation events bind the cases on it; a later disaggregation records the split. Append-only storage keeps both, so the unit's history is the sequence of events, not a mutable current state.
epcListquantityList
The SSCC nesting, drawn as it is stored.
sscc:109520123456788120 // the pallet
├─ sscc:109520123456788137 // case 1 of 40
│ ├─ sgtin:09506000134352.21.A1-1
│ └─ … 23 more eaches
├─ sscc:109520123456788144 // case 2 of 40
└─ …
AggregationEvent ADD ×41 → the tree above
AggregationEvent DELETE ×1 → the split at the DC, appended, not edited
Illustrative: one pallet's containment tree at pack-out. Each level is an AggregationEvent that validated against the official schema; the tree is derived from the events, never stored as a mutable structure.
For the engineer who reconciles at the dock.
When a case goes missing between two docks, the question is which nesting it was last inside and who says so. The containment tree at any moment is a fold over appended events — so the answer is computable for any past moment, not just the current one.