8.1 KiB
Shop System Decision — racked.ru
Date: 2026-05-07 Author: s8n Status: Decision — supersedes AUDIT-2026-05-07 F-11 Inputs: RESEARCH-SHOP-GUI.md (S1), RESEARCH-AUCTION-HOUSE.md (S2), RESEARCH-SHOP-AH-HYBRID.md (S3)
1. Problem statement
Three things land on the same hot spot:
- EZShop is bespoke, hardcoded 27-slot, drop+click-only, ugly title — YOU500 wants 54-slot polish.
- AuctionHouse 1.4.6 (Kiranhart) works, but ships ARR with no
LICENSEfile and a recurring dupe history. - We want a single coherent marketplace experience under
/pm(canonical exec), not a salad of mismatched plugins.
Three agents researched independently. They disagree on the shape of the answer:
| Agent | Recommendation | Core argument |
|---|---|---|
| S1 (shop GUI) | EconomyShopGUI free + keep AH separate | Best free-tier shop UX, drop-in replacement |
| S2 (auction house) | Keep Kiranhart short-term, swap to Nexus or Elaine Qheart | License + dupe risk; UX parity in the GPL fork |
| S3 (hybrid) | ExcellentShop unified, GPL-3 | One jar, one theme, one update path |
This doc reconciles them.
2. Stack candidates side-by-side
| Stack | Plugins | Shop license | AH license | Unified GUI? | Player shops? | Dependency surface |
|---|---|---|---|---|---|---|
| A. ExcellentShop unified | ExcellentShop + CoinsEngine (or Vault bridge) + NightCore | GPL-3 | GPL-3 | Shared theme, separate menus | Optional Chest module | NightCore framework jar |
| B. EconomyShopGUI + NexusAuctionHouse | EconomyShopGUI free + NexusAH | Proprietary free-tier | MIT | No (two themes) | No | Vault |
| C. Genesis (BSP) + Elaine Qheart AH | Genesis + AuctionHousePlugin | MIT | GPL | No | Genesis addon | Vault |
| D. Status quo | EZShop + AuctionHouse 1.4.6 | Bespoke (us) | ARR no LICENSE | No | No | Vault |
3. License + project-health matrix
| Stack | License fit (AGPL-leaning) | Active? | 1.21.x verified | Dupe / exploit history | FOSS-ethics score |
|---|---|---|---|---|---|
| A. ExcellentShop | GPL-3, sources self-buildable | Yes — push 2026-04-27 | 1.21.8+ Java 21 | Clean | 5/5 |
| B. EconomyShopGUI + Nexus | Proprietary free + MIT | Both active; Nexus quieter | 1.21.11 / 1.21.6 | Clean | 3/5 |
| C. Genesis + Elaine | MIT + GPL | Genesis active; Elaine open beta | 1.21.1 (Genesis untested 1.21.4+) | Clean | 5/5 |
| D. Status quo | Bespoke + ARR | EZShop dead-bespoke; Kiranhart active | 1.21.x | Recurring dupes (AntiDupe band-aid exists) | 1/5 |
ExcellentShop is the only stack where both halves are GPL-3, both are actively maintained by the same dev (NightExpress), and source is self-buildable so we never ship a paywalled binary. Everything else either splits the license story across two projects or carries one proprietary half.
4. Visual mockup — recommended /pm shop GUI
ExcellentShop's Virtual Shop module, themed and aliased. Title kept clean per YOU500 ask.
+------------------------------------------------------------+
| racked.ru / pm shop |
+------------------------------------------------------------+
| [BLK] [ORE] [FOO] [MOB] [RED] [DYE] [TLS] [MSC] | <- 8 categories
| |
| [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] |
| [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] | <- 36 item slots
| [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] | (4 rows x 9)
| [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] |
| |
| [<] [SELLALL] [/pm market] [BAL: 1,234] [>] | <- nav + AH jump
+------------------------------------------------------------+
54 slots total: 8 category icons (top), 36 items (4x9 grid), 9 footer (page nav, sellall shortcut, AH cross-link, balance, page indicator). Right-click any item = sell, left-click = buy. No donor stars, no rank-locked items in the default tier.
/pm market opens the shared-theme Auction House (ExcellentShop AH module) in the same skin, same fonts, same border palette — the polish unification S3 was after.
5. Recommendation — Stack A (ExcellentShop unified)
Pick ExcellentShop + CoinsEngine.
Why this beats S1's EconomyShopGUI:
- EconomyShopGUI's free tier is genuinely good for the shop but the auction module is paywalled. S1 was right that the shop is excellent; S1 was wrong to treat AH as out-of-scope, because we already need to swap Kiranhart (S2's finding). If we have to touch both anyway, replacing both with one GPL plugin beats replacing both with two unrelated plugins.
- "Free binary, closed source" is exactly the trap our philosophy memo (
project_racked_philosophy.md) tells us to avoid when a real GPL alternative exists at parity.
Why this beats S2's Nexus / Elaine path:
- Nexus is BIN-only (no bidding). Players already use bidding on Kiranhart; removing it is a regression.
- Elaine Qheart's plugin is open beta with ~1k installs. The license is right, the maturity is not.
- ExcellentShop's AH module has BIN+bid+per-rank caps+tax — feature-parity with Kiranhart, GPL license, single-vendor support story.
S3 was directionally right. The fix vs S3 is mostly operational (alias commands under /pm, disable Chest module, build from source).
6. Migration cost
| Step | Effort | Risk |
|---|---|---|
| 1. Build ExcellentShop + CoinsEngine + NightCore from source on a builder pod | 1 evening | Low — mvn package, output jars |
2. Stage on dev container, replicate EZShop 8 categories into virtual-shop/ YAML |
2-3 hours | Low — YAML, no schema gotchas |
| 3. Migrate AuctionHouse listings | Cannot migrate active listings — drain or expire current AH first; new AH starts empty | Medium — communicate to players |
4. Alias /pm shop → /vshop, /pm market → /ah, hide native cmds |
30 min via commands.yml |
Low |
| 5. Disable Chest Shop module (we don't need it; QuickShop-Hikari is the future story) | 5 min config flag | None |
| 6. Smoke-test on staging: 54-slot layout, per-rank discount perms, sellall, AH listing+bid | Half day | Low |
| 7. Maintenance-window swap on live: stop server, drop EZShop+AuctionHouse jars, drop new jars, reload configs | 30 min downtime | Medium — see risk register |
8. Update AUDIT-2026-05-07.md F-11, update /pm help, post player notice |
1 hour | None |
Total: roughly one evening of build+stage + one half-day staging trial + one short maintenance window. No code changes to other plugins. AuthLimbo, chat plugin, LP prefixes — all untouched.
7. Risk register
| Risk | Likelihood | Impact | Mitigation |
|---|---|---|---|
| ExcellentShop GPL build breaks on a future Paper API rev | Low | Medium | Pin a known-good tag; CI build on Forgejo runner |
| NightCore framework jar drift between ExcellentShop and CoinsEngine | Low | Medium | Lock both to the same release wave; smoke-test on each upgrade |
| Player backlash over draining current AH listings | Medium | Low | Two-week heads-up in /pm news; offer to refund stuck items manually |
/pm alias collisions with existing chat plugin commands |
Low | Low | Audit /pm namespace before swap; document in SYSTEM.md |
| ExcellentShop dev (NightExpress) goes dark | Low | High | Source is GPL-3 — we keep buildable copy; fall back to Stack C (Genesis + Elaine) only if needed |
| Per-rank discount permissions clash with LP prefixes-locked rule | Low | Low | Discount perms ride on rank perms, not prefix metadata — orthogonal to feedback_lp_prefixes_locked.md |
| YOU500-style player wants bidding back in identical Kiranhart UX | Medium | Low | ExcellentShop AH supports bid+BIN; theme tweaks deliver familiar feel |
| Build-from-source policy adds ops overhead | Certain | Low | Document in nullstone-server/build-shop.md; one-line mvn package script |
8. Decision
Adopt Stack A — ExcellentShop unified, GPL-3, built from source. Schedule the migration after the next AuthLimbo release window. Update audit F-11 to reference this doc. Keep S1's EconomyShopGUI and S2's Nexus / Elaine in the back pocket as fallbacks if ExcellentShop ever goes dark.