Build: every tool pinned (JDK, packwiz, Gradle plugins, Python packages), exports
normalised, tools/check_reproducible.py proves two clean builds are byte-identical.
Server-side balance: a server can load config/cobblesurvival/datapack.zip in place of
the jar's data, /reload applies it, tools/server_update.py packages it and refuses
when a client change is needed. JEI drop pages are sent by the server. Code-held
balance numbers moved to tuning/server.json.
Performance: spark in the pack (server only), tools/perf_test.py with fake players
whose chunks really are active, docs/performance.md.
Adrian's feedback: default keys R, U, J, §; drop pages link to Cobblemon Info and show
real chances; bosses only hurt in battles; battle XP halved; channels between the
islands low level; temperature ×3 with insulation doubled; hazards start at once; no
item dots on the map; a wild attack starts a battle; the starter only faints; quest
book on join with a basics page and an HMs page; regional forms obtainable.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
From Adrian's Mining test (2026-10-31):
- A gated job assigned to a pastured Pokemon that doesn't pass its gate
is taken back at once (BaseManager assignment cleared, Cobblebase's
assignment sync sent, owner told what the Pokemon needs), so it no
longer sticks or shows under Buffs -> Active.
- Mining, Ore Finder and Evolution-item Finder only give the ores and
evolution stones of the pasture's zone: new loot condition
cobblesurvival:in_zone, the pack's versions of the 12 Cobblebase
tables (tools/cobblebase_loot.py), Cobblebase's built-in copies
removed at server start (ore/BaseLoot.kt). Mining adds quartz and the
evolution stones, drops the type gems.
- Mining's loot reaching the chest needs an Item Gatherer in the same
pasture (Cobblebase's design); documented, not changed.
- Self-tests gated_jobs_are_taken_back, base_jobs_dig_their_zones_ores;
docs, balance table, licenses, Phase 5 checklist.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>