# Actual original commodity UID definitions Static source image: `6891f70a021fa9f3a0e00458c284f48d1226e68ae7fc02ad48081aed47857e93`. Current ED5A source bindings are independently paired by `galaxy_commodity_compatibility.py`; the sidecar is `artifacts/galaxy-query-research/commodity-tree/compatibility.json`. Its fourteen complete bodies, eleven bound virtual slots and two name/category leaves are read-only offline evidence. Runtime acceptance remains separate. Original `3A603C0` publishes `PlayerData/CommodityList` from the actually registered enumeration type `5F05CE8` and definition type `5F05C34`. The current map constructor binds these dependencies independently; they are not market files, market IDs or the frozen TradeRoutes thirteen-parent tree. | Source | Pinned binding | Current independently matched binding | Pure container | | --- | --- | --- | --- | | Enumeration | ctor `1DD20C0`, tables `5241918/5241948/5241A48`, registration `1E2A6C0` | tables `52418E8/5241918/5241A18` | interface+58 / object+B0 open hash; key node+8 uint32; publisher kind node+14 int32 | | Definitions | ctor `1B29840`, tables `5219630/5219660/5219760`, registration `1B3C0B0` | tables `5219600/5219630/5219730` | lookup `1B31E60` reads interface+160 / object+1B8 open hash; key node+8 uint32; value node+10 inline | Both registrations expose object+58 interfaces. `1DF3740`/`1E08E20` are the exact begin/end enumeration methods. Hashing uses the original uint32 multiply/xor sequence and sentinel buckets. `1B3B800` leaves object+284 zero while building and sets it to1 only after the definition build. The active enumeration's loaded gate is independently closed through its resource callback, not guessed from another class with a similar layout. Secondary-vtable resource initialiser `1E28E90` uses `5F85C40`; static initialiser `0BF140` installs the preceding resource vtable `523FF58`. Its callback `1DA7760` subtracts60 from the resource handle and jumps to `1DF25B0`, restoring the actual enumeration object. Only a successful response sets object+A8=1, clears the B0 hash and synchronously calls `1E34530` to parse all rows. The owning-thread reader requires A8=1 and stable source bytes, so a structurally valid initial empty hash does not masquerade as a loaded empty catalogue. The poller and parser have complete independently matched ED5A bodies. Source evidence is in `balance-provider-evidence.json`, `enum-resource-owner-refs.json` and `enum-resource-descriptor-refs.json`. No callback, loader or network method is invoked by the adapter. `1B3AC10` returns the definition+8 FGDK name reference. `1B39630` follows definition+60 → reference+8 with low two tag bits cleared → frozen+30 → string+8 UTF8 category. The reader copies those exact chains with bounded UTF8, validates source tables and owners, hash count/buckets/keys and final byte stability, and never calls the original lookup (which would adjust reference counts or log a miss). Original publisher rules remain distinct from definition identity. Kind1 is included. Kind2 requires the actual selected actor's cargo predicate; other kinds are excluded. The read-only adapter selects the original kind3 actor with the already verified priority rule and copies its actual cargo interface: rows are stride60 at interface+388/count+380. Predicate3A2F7A0 compares the exact FGDK definition name through1EC2CA0, cargo row+8 against the original5F05E70 scope getter+68, and requires row+28==-1. Getter2560FD0 reads scope+160, falls back to+138 for all-ones, and the original publisher then maps all-ones to owner0. No FID number, Journal cargo or mission title supplies these values. A known empty valid actor/cargo table can prove false; malformed or unbound context stays null. The copy rechecks actor rows, life, registry bindings, scope and cargo bytes. Missing definitions contribute `unresolvedCount` and do not become fabricated names, inferred catalogue rows or confirmed absence. The local enumeration and definition loaded gates are now explicit; `complete=false` still avoids claiming a complete account/server or final ship-filtered UI when cargo context or definitions are unresolved. Original settings slot31 is `CommodityIndex`, confirmed by `3B3ED60`'s actual instruction `3B3FB4A: mov edx,1F` before settings getter+1F0. Saved signed or unsigned32 values resolve only against the actual source UID. Zero is not a proven sentinel and is accepted; FFFFFFFF is the original invalid lookup value. An observed Market.json numeric ID never supplies a missing UID. A known symbol/name alias may provide a label, while the actual definition supplies its parent. Unknown parents remain unknown. Pending imports can resolve after the runtime source becomes available; manual edits clear the pending UID so refresh cannot overwrite the user's selection. Slot32 `CommodityPriceMode` is read by `3B3DF50` and clamped0..3. In the actual regional balance classifier `3B27B00`, positive balance selects Import, negative selects Export; mode1 excludes Export and mode2 excludes Import. Modes0/3 allow both signs, with additional zero/unknown `ImportNothing`/`ExportNothing` branches. The current import restores only the verified single-direction1/2 mappings. It retains0/3 explicitly and does not pretend public station supply/demand is the original regional balance source. Native own-allocation and wire fixtures cover real UID671333304, uint values above Int32, zero/high IDs, actual category tags, source readiness/ownership, kind2 unknown and the separate exact owner/cargo predicate, missing definitions, malformed maps/strings, serialization and no writes. Core tests cover stable multi-page identity, context changes, unsupported completeness claims, exact saved UID resolution independent of Market IDs, parent provenance, deferred selection and manual edits. Final live and visual acceptance remain separate.