132 lines
8.1 KiB
Markdown
132 lines
8.1 KiB
Markdown
# 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 `LICENSE` file 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.
|