BALANCED VILLAGER TRADES 26.2 - VALIDATION REPORT
===================================================

FINAL RESULT: PASS
Release version: 1.0.1
Number of new trades: 295
Format source: Minecraft Java 26.2, data pack 107.1
Official server.jar SHA-1: 823e2250d24b3ddac457a60c92a6a941943fcd6a
Inner server-26.2.jar SHA-256: 183c0499c5f855570ee487dd38e141a53f0121f83a0b07a3bac2d8b6698823e8

TRADES BY PROFESSION
- armorer: 18
- butcher: 18
- cartographer: 18
- cleric: 19
- farmer: 36
- fisherman: 18
- fletcher: 18
- leatherworker: 18
- librarian: 19
- mason: 29
- shepherd: 48
- toolsmith: 18
- weaponsmith: 18

TRADES BY CAREER LEVEL
- novice (level_1): 60
- apprentice (level_2): 65
- journeyman (level_3): 66
- expert (level_4): 56
- master (level_5): 48

TESTS PERFORMED
- PASS: datapack root directory exists — /workspace/scratch/4d205cdd6a7a/release_1_0_1
- PASS: pack.mcmeta exists at pack root — /workspace/scratch/4d205cdd6a7a/release_1_0_1/pack.mcmeta
- PASS: pack.mcmeta is valid JSON
- PASS: min_format is exactly 107.1 — [107, 1]
- PASS: max_format is exactly 107.1 — [107, 1]
- PASS: obsolete supported_formats is absent
- PASS: legacy pack_format is not used
- PASS: pack description is present
- PASS: data/tool paths use lowercase ASCII; required root docs use canonical names
- PASS: no tick/load functions or command workaround — 0
- PASS: all publication files are present
- PASS: MIT license text and copyright holder are present
- PASS: Minecraft affiliation disclaimer is present
- PASS: pack.png is a square PNG of at least 64x64 — (128, 128)
- PASS: Modrinth icon is a square PNG of at least 128x128 — (256, 256)
- PASS: Modrinth icon is at most 256 KiB — 12946
- PASS: all human-facing publication files are English-only
- PASS: publication metadata identifies release 1.0.1
- PASS: all JSON files parse as JSON objects
- PASS: JSON file set is non-empty — 425
- PASS: official item registry snapshot is present — 1537
- PASS: stack-size table covers every official item — items=1537 stacks=1537
- PASS: vanilla buy-offer audit table is present — 87
- PASS: vanilla simple-offer audit table is present — 347
- PASS: trade files use 26.2 villager_trade paths
- PASS: trade JSON uses only 26.2 schema fields
- PASS: no legacy trade fields from older versions
- PASS: all referenced item IDs exist in official 26.2 registry
- PASS: counts, max_uses and XP are positive integral numbers within stacks
- PASS: all trades are unique
- PASS: at least 220 new trades exist — 295
- PASS: all 13 trading professions are covered — ['armorer', 'butcher', 'cartographer', 'cleric', 'farmer', 'fisherman', 'fletcher', 'leatherworker', 'librarian', 'mason', 'shepherd', 'toolsmith', 'weaponsmith']
- PASS: all five career levels are covered — Counter({3: 66, 2: 65, 1: 60, 4: 56, 5: 48})
- PASS: every profession has trades on every level
- PASS: no forbidden premium output is present
- PASS: no generated enchantment modifiers are present
- PASS: all 65 additive villager_trade tags and 65 trade_sets exist
- PASS: every trade tag uses replace=false and correct count
- PASS: every tag entry resolves to an existing custom trade
- PASS: every custom trade is referenced exactly once — refs=295 ids=295
- PASS: trade_set files use exact 26.2 fields and vanilla tags
- PASS: 1 emerald -> 32 dirt is guaranteed for vanilla novice mason
- PASS: all mandatory trades or documented exploit-safe equivalents exist
- PASS: lossy wood-type exchanges are present — 9
- PASS: lossy stone-variant exchanges are present — 3
- PASS: item-for-item trades are present — 19
- PASS: 1.0.1 progression-sensitive prices and restock limits are enforced
- PASS: blaze powder is available only at master level
- PASS: TRADES.csv exists
- PASS: TRADES.csv has one row per trade — csv=295 json=295
- PASS: TRADES.csv numbers are unique and sequential
- PASS: TRADES.csv JSON paths are unique and exist
- PASS: TRADES.csv contains all requested columns
- PASS: all new trades are representable in exact one-resource cycle audit
- PASS: no break-even or profitable cycle introduced at normal prices
- PASS: all custom payments use one normal input slot
- PASS: official 26.2 inner server JAR SHA-256 matches — 183c0499c5f855570ee487dd38e141a53f0121f83a0b07a3bac2d8b6698823e8
- PASS: ZIP file exists — candidate_1_0_1/Balanced_Villager_Trades_26.2_1.0.1.zip
- PASS: ZIP opens and contains safe relative paths
- PASS: pack.mcmeta is directly at ZIP root — []
- PASS: all JSON inside ZIP parses
- PASS: Minecraft Java 26.2 server reached Done with datapack
- PASS: 26.2 server log has no datapack parse/load error

WARNINGS / DESIGN DECISIONS
- Regular stone 1->24 and clay balls 1->16 were replaced by smooth stone and terracotta because vanilla masons buy stone/clay; curing and Hero V would make the exact requested prices exploitable.
- Item-for-item exchanges use one normal input slot so the GUI does not display split stacks such as 1+63.
- Version 1.0.1 raises prices and lowers restock limits for 11 progression-sensitive or farm-replacing offers; blaze powder is master-only.
- reputation_discount=0.0 disables reputation discounts and demand increases for new offers; Hero still discounts the complete first slot.
- Offers already stored in existing villager NBT are not rewritten by /reload.
- Another mod or datapack changing the same tags or trade sets can alter selection and the novice mason guarantee.
- The graph audit skipped 3 vanilla offers with two different inputs; they cannot independently form a one-resource conversion edge.
- 9 lossy wood exchanges connect to the existing vanilla Wandering Trader logs -> sticks -> Fletcher loop, but every exchange is worse than the existing vanilla route and creates no new profit method.
- With maximum Hero of the Village V, single-slot exchanges may form profitable cycles (3 affected edges detected). This is an intentional compromise for a normal-looking trade interface.

INSTALLABILITY
Archive: Balanced_Villager_Trades_26.2_1.0.1.zip
Confirmation: the archive can be placed directly in the datapacks folder without extraction.
pack.mcmeta is located directly at the ZIP root.
