itemexchangesource.bss
Binary layout, byte coverage, field semantics, and validation evidence for the BSD itemexchangesource decoder.
Investigation status
| Status | Value |
|---|---|
| Coverage | 100% |
| Iteration | 5 |
| Review state | BSD migration reconciled |
| Last reviewed | 2026-07-31 |
| Captures examined | Installed build 2938; pad00000.meta SHA-256 b7eefe6059818f84c0545f10020fe93bd3bd5d0647e043120caf78726ccafe8f; 3,070,926-byte table SHA-256 57c34d72111fd69787624fd730ef7291714b92f3eb379facd81124de4a0d6640; 13,551 rows; normalized SHA-256 81634904c28e9bd5bf6c0ac9d9974681d51e82e269f91c3f4de9e88a19199a55 |
| Decoder | packages/scraper/src/tables/itemexchangesource.bss.ts |
| Remaining blockers | None |
See Decoder methodology for the confidence scale and evidence rules.
Field ledger
| Field/path | Offset and width | Representation | Claimed meaning | Physical confidence | Representation confidence | Semantic confidence | Evidence | Status |
|---|---|---|---|---|---|---|---|---|
| PABR signature | table +0..+3; four bytes |
validated as PABR framing and omitted as a reserved byte range |
Pearl Abyss record-table signature | Certain | Certain | Certain | Shared bss framing validates all four bytes before row decoding |
Closed |
| encoded row count | table +4..+7; u32 |
consumed by array; not emitted |
number of production recipes | Certain | Certain | Certain | Count selects 13,551 union rows and the row region ends exactly at byte 2,960,896 | Closed |
rows |
table +8..+2,960,895; variable-width |
retained in physical order | worker and workshop production recipes | Certain | Certain | High | Complete transformed-reference equality; all three union profiles reach the shared trailer without an offset table | Closed |
rows[].layout |
zero-width BSD literal | "ordinary", "retired-short", or "content-option" retained |
physical serializer profile | Certain | Certain | Certain | Ordered union coverage is 13,547 / 2 / 2; the extended markers and retired branch controls intrinsically discriminate every row | Closed |
ordinary recipeId, repeatedRecipeId |
ordinary row +0..+7; two u32 |
both copies retained and equality-checked | stable production-recipe identity | Certain | Certain | Certain | All 13,549 ordinary-prefix rows have equal copies; zero validation mismatches | Closed |
ordinary reserved08, reserved10 |
ordinary row +8 and +10..+45; 37 bytes |
explicit reserved byte ranges omitted | separator and retired recipe controls | Certain | Certain | High | Exact prefix widths lead to the material count for all ordinary and retired-short rows; historical serializer lineage identifies the block | Closed |
ordinary exchangeTypeCode |
ordinary row +9; u8 |
retained | exchange family | Certain | Certain | High | Exact reference equality and preserved archived ExchangeType lineage |
Closed |
| content-option layout markers | extended row +0..+7; two u32 = 256 |
reservedMarker00 and reservedMarker04 retained and validated |
extended-layout discriminator | Certain | Certain | Certain | Both marker checks select exactly two rows before the more permissive union branches | Closed |
content-option reserved08, reserved10, reserved17, reserved29, reserved31, reserved46, reserved50 |
extended row +8, +10..+12, +17..+20, +29, +31..+66; 45 bytes |
seven explicit reserved byte ranges omitted | separators, alignment, and retired extended controls | Certain | Certain | Unknown | Declarative widths place every retained control and the real material count with exact full-snapshot parity | Closed neutral |
selectorContentOptionHash |
extended row +13..+16; u32 |
retained | content option selecting the extended recipe | Certain | Certain | High | Both current rows retain established hashes and match the reference representation | Closed |
extended recipeId, repeatedRecipeId |
extended row +21..+28; two u32 |
both retained and equality-checked | stable production-recipe identity | Certain | Certain | Certain | Both extended rows have equal real identities; marker 256 is not exposed as a recipe ID |
Closed |
outerProductDataTypeCode |
extended row +30; u8 |
retained and equality-checked against the common-body copy | repeated product execution family | Certain | Certain | High | Two current extended rows, zero equality mismatches | Closed |
materials count |
ordinary row +46..+49; extended row +67..+70; u32 |
consumed by array; not emitted |
number of ordered production inputs | Certain | Certain | Certain | Counts frame 19,837 complete twelve-byte material records across all 13,551 rows | Closed |
materials[].itemId, enhancementLevel |
material +0..+3; packed u24 plus u8 |
components retained separately | packed input item and enhancement key | Certain | Certain | High | First-material repetition has zero mismatches; 34 current material entries carry a nonzero enhancement byte | Closed |
materials[].quantity |
material +4..+11; u64 |
exact decimal string retained | required input quantity | Certain | Certain | High | Lossless decimal conversion and complete reference equality cover all 19,837 values | Closed |
keyMaterialItemId, keyMaterialEnhancementLevel, keyMaterialQuantity |
common body +0..+11; packed key plus u64 |
all three components retained; quantity is an exact decimal string | first material lookup key and quantity, or all-zero empty sentinel | Certain | Certain | Certain | Component-wise check succeeds for every nonempty row and the all-zero check succeeds for every empty row; zero mismatches | Closed |
productDataTypeCode |
common body +12; u8 |
retained | product execution family | Certain | Certain | High | Reference lineage and equality to the extended outer copy on both applicable rows | Closed |
reservedAfterProductDataType, reservedCraftingZone, reservedBeforeWorkAnimation |
common body +13..+24, +33..+34, and +57..+116; 74 bytes |
three explicit reserved byte ranges omitted | retired requirements, crafting-zone selector, and presentation controls | Certain | Certain | High | Exact widths partition the common body for all variants; historical serializer lineage identifies the retired channels | Closed |
productionWorkloadMilliseconds |
common body +25..+32; u64 |
exact decimal string retained | base worker workload in milliseconds | Certain | Certain | High | Complete reference equality, established CraftingTime lineage, and client time formatting |
Closed |
resultDropGroupId, luckyResultDropGroupId |
common body +35..+42; two u32 |
retained | normal and lucky-worker result groups | Certain | Certain | High | Exact reference equality and preserved archived result-column lineage | Closed |
guildHouseCharacterKey |
common body +43..+44; u16 |
retained | guild-house craft-object character key, or zero | Certain | Certain | High | Exact reference equality and established guild-house character joins | Closed |
resultIconPoolIndex, namePoolIndex, descriptionPoolIndex |
common body +45..+56; three u32 |
retained | one-based shared-string-pool slots | Certain | Certain | Certain | All 40,653 current row index checks are in range; zero mismatches | Closed |
workAnimationTypeCode |
common body +117; u8 |
retained | worker animation family | Certain | Certain | High | Exact reference equality and archived WorkAniType lineage |
Closed |
enduranceCost |
full suffix +0..+3; retired suffix +0..+3; i32 |
retained | endurance cost; -1 is currently disabled |
Certain | Certain | High | Exact reference equality and preserved archived UsingEndurance lineage |
Closed |
repeatGroupStateSlots |
full suffix +4; counted u16 entries after a u32 count |
array retained; count consumed | repeat-group state slots | Certain | Certain | High | 1,812 current slots consume exactly; prior lineage establishes their correlation with repeat groups | Closed |
firstWorkingIndex, repeatGroupKey |
after repeat slots; two u16 |
retained | initial repeat-work index and shared repeat group | Certain | Certain | High | Exact reference equality and preserved archived FirstWorkingIndex / repeat-group lineage |
Closed |
dailyWorkingCount, legacyContentsGroupKey |
next eight bytes; u32 plus i32 |
retained | daily start limit and retired single content gate | Certain | Certain | High | Exact reference equality and preserved archived column lineage | Closed |
contentOptionHashes |
counted u32 entries after a u32 count |
array retained; count consumed | modern content-option gates | Certain | Certain | High | 15,804 current references consume exactly; semantic identity is preserved from the reconciled source evidence | Closed |
reservedTerminator |
final four bytes of a full row | explicit reserved byte range omitted | structural full-row terminator | Certain | Certain | High | The full profiles land exactly on the next row or trailer for all 13,549 applicable rows | Closed |
reservedAfterEndurance |
seven bytes after enduranceCost |
explicit reserved byte range omitted | empty repeat count and legacy terminator | Certain | Certain | High | Keys 7901 and 7927 are the only rows selected by the key, product-family, and animation checks; both end exactly at the next row | Closed |
trailer.slotCount and trailer reserved range |
table +2,960,896..+2,960,904; u32 plus five bytes |
slot count retained; five-byte reserved range omitted | shared string-pool framing | Certain | Certain | Certain | Slot count is 3,155 and exactly 3,154 physical entries follow | Closed |
trailer.entries[].encodingCode |
entry +0; strict u8 in {0,1} |
retained and validated | ASCII or UTF-16LE encoding tag | Certain | Certain | Certain | Complete pool contains 209 ASCII and 2,945 UTF-16LE entries; no invalid tags | Closed |
trailer.entries[].value |
entry +1; u32 byte length followed by text |
length consumed; decoded string retained; UTF-16 lengths checked even | icon path, Korean display name, or Korean description | Certain | Certain | High | All 3,154 variable-length entries consume the 110,022-byte trailer exactly and match the reference strings | Closed |
footer.trailerOffset |
table +3,070,918..+3,070,921; u32 |
retained in informational footer | absolute shared-trailer start | Certain | Certain | Certain | Stored value is 2,960,896, the exact end of all decoded rows | Closed |
footer.reserved04 |
table +3,070,922..+3,070,925; four bytes |
bytes(4).reserved() omitted; no footer validation |
informational file trailer | Certain | Certain | Unknown | Separate footer schema consumes the final four bytes and strict decoding reaches EOF | Closed neutral |
For ordinary rows, the common body begins after
50 + materials.length × 12 bytes. Content-option rows add 21 prefix bytes.
Full rows are 196 + prefixExtension + materials × 12 + repeatSlots × 2 + contentHashes × 4 bytes; retired-short rows are 179 + materials × 12 bytes.
Active assumptions
Findings
| ID | Finding | Evidence | Schema/documentation impact | Status |
|---|---|---|---|---|
| IES-01 | The table is intrinsically framed by three exact row grammars. | The ordered BSD union consumes all 13,551 rows and lands at footer-designated byte 2,960,896 without an offset table or boundary scan. | Production uses declarative union branches only. | Closed |
| IES-02 | The repeated numeric controls are physical evidence and belong in destination output. | Recipe IDs match in all 13,551 rows; content rows repeat product type; marker words are both 256. | The migration adapter restores values hidden by the legacy projection, and BSD retains them. | Closed |
| IES-03 | Four-byte material identities use a packed item/enhancement representation. | All first-material component and quantity checks pass; 34 current material entries have enhancement level 10. | Item and enhancement components are retained separately without changing physical width. | Closed |
| IES-04 | The trailer is a typed shared string pool. | 209 ASCII plus 2,945 UTF-16LE entries consume the trailer exactly; all 40,653 row references are in range. | Typed strings and encoding tags replace an opaque trailer while preserving every emitted value. | Closed |
| IES-05 | The footer is informational framing, not a runtime policy gate. | Its pointer agrees with the independently decoded row boundary, and strict decoding consumes its final reserved range; no footer check selects a branch. | The numeric pointer remains in output while footer byte ranges are represented only with bytes(n).reserved(). |
Closed |
Archived database columns and client consumers remain corroboration for semantic names only; neither is a production decoder dependency.