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.