ChestShop doesn't apply io.paradaux.paper-server-conventions (its repos/shadow/resources diverge), so unlike treasury/business/treasury-api-plugin it had no copyPlugin task — ./gradlew build never staged its shaded jar into server/plugins/, leaving a stale, manually-placed ChestShop.jar there.
Added a copyPlugin task to chestshop/build.gradle.kts mirroring the convention: copies the shaded chestshop-<version>.jar into ../server/plugins after shadowJar (via finalizedBy), gated by -Pci, and its doFirst removes any previously-staged ChestShop jar — both the current chestshop-<version>.jar and the legacy capitalised ChestShop.jar (case-insensitive) — so the dev server never loads two copies of the plugin.
Verified: ./gradlew build now runs :chestshop:copyPlugin; the 7 MB shaded jar is staged and the stale 2 MB ChestShop.jar is removed.