# Player smoke-test — racked.ru

A regression checklist for "things a default-rank player must be able to do".
Pair with `scripts/test-default-perms.sh` to spot LP/PAT regressions before
asking the test rig to log in.

**Test rig:** YOU500 (LuckPerms group `default`, weight 10). He stays on
`default` permanently — never elevate him; he is the canary. Operator
gear-loads him via RCON `give` commands; that's fine and doesn't change
his perms.

**When to run:** before any of these:
- plugin update (jar swap)
- LuckPerms group/perm change (anything affecting `default`, `settler`, or inheritance)
- ProAntiTab `storage.yml` edit (whitelist add/remove)
- `commands.yml` or `help.yml` edit
- AuthMe / AuthLimbo config change
- After server restart following a config-only change

---

## A — Authentication path (AuthLimbo + AuthMe)

| # | Step | Expected | Pass? |
|---|------|----------|-------|
| A1 | Log in cold (server restart, fresh session) | Lands at `auth_limbo` (0.5 / 128 / 0.5) facing void | |
| A2 | Type `/login <pw>` | `[AuthLimbo] Restoring YOU500 to world(...)` in logs; teleported back to last location | |
| A3 | Movement keys before `/login` | No movement; chat-prompt visible | |
| A4 | Re-login within session timeout | Auto-login, no prompt | |

## B — Help and discovery

| # | Step | Expected | Pass? |
|---|------|----------|-------|
| B1 | `/help` | Branded HelpCommand page 1 (racked.ru header, list of basic commands) | |
| B2 | `/help 2` (or arrow `>>`) | Page 2 with /bal, /pay, /hs, /shop entries | |
| B3 | `/rules` | Server rules from RULES.md displayed | |
| B4 | `/list` | Player count + groups (default/Admins) | |

## C — Skin (SkinsRestorer)

| # | Step | Expected | Pass? |
|---|------|----------|-------|
| C1 | `/skin set <name>` (e.g. `/skin set Notch`) | Skin updates within ~3s | |
| C2 | `/skin url <https-png-url>` | Custom URL skin applied | |
| C3 | `/skins` (GUI) | Skin browser opens | |
| C4 | `/skin clear` | **Should be denied** (admin-only) | |

## D — Land claiming (Homestead)

| # | Step | Expected | Pass? |
|---|------|----------|-------|
| D1 | `/hs create test1` | "Successfully created a new region: test1" + clickable hover-link | |
| D2 | `/hs set target test1` | "test1 is now set as the target region" | |
| D3 | Stand in unclaimed chunk → `/claim` | "This chunk is now part of the region test1" | |
| D4 | `/unclaim` (in same chunk) | "This chunk has been unclaimed" | |
| D5 | `/hs menu` | Region GUI opens | |
| D6 | `/region info` (or `/rg info`) | Region data printed | |

If D1 returns "Unknown command" or the silent-PAT-block, the PAT whitelist
regressed — see `docs/DEFAULT-RANK-COMMANDS-2026-05-07.md` §5a.

## E — Homes & teleport (Essentials)

| # | Step | Expected | Pass? |
|---|------|----------|-------|
| E1 | `/sethome base` | "Home set" | |
| E2 | `/home base` | TP to base | |
| E3 | `/homes` | List of saved homes | |
| E4 | `/deletehome base` | Home removed | |
| E5 | `/spawn` | TP to spawn | |
| E6 | `/back` | TP to prior location | |
| E7 | `/tp <player>` | Sends TPA request (aliased) | |
| E8 | `/tpaccept` | Accept incoming TPA | |

## F — Economy (Vault + EZShop + AuctionHouse)

| # | Step | Expected | Pass? |
|---|------|----------|-------|
| F1 | `/bal` | Balance shown | |
| F2 | `/baltop` | Top-balance leaderboard | |
| F3 | `/pay <player> <n>` | Transfer succeeds (or "insufficient funds") | |
| F4 | `/shop` | EZShop GUI opens | |
| F5 | `/ah` (or `/auctionhouse`) | AuctionHouse GUI opens | |

## G — Chat (CarbonChat)

| # | Step | Expected | Pass? |
|---|------|----------|-------|
| G1 | Plain chat message | Visible to others, prefix per LP rank (Adventurer for default, but operator manages prefix display elsewhere) | |
| G2 | `/msg <player> hi` | DM delivered, both sides see it | |
| G3 | `/r hi` | Reply works after a DM | |
| G4 | `/pm <player> hi` (alias) | Same as `/msg` | |

## H — Negative tests (must NOT work for default)

| # | Step | Expected | Pass? |
|---|------|----------|-------|
| H1 | `/op` | "Unknown command" or PAT-block | |
| H2 | `/gamemode creative` | Denied | |
| H3 | `/give @s diamond 64` | Denied | |
| H4 | `/lp ...` | PAT-blocks at execution (lp is global-whitelisted but LP itself denies non-ops) | |
| H5 | `/hsadmin reload` | Denied (op-only by Homestead plugin.yml) | |
| H6 | `/skin clear` | Denied (LP `false` override) | |

## I — Voicechat

| # | Step | Expected | Pass? |
|---|------|----------|-------|
| I1 | Connect with simple-voice-chat client | Mic + speaker work | |
| I2 | Group chat | Spatial audio normal | |

---

## Operator workflow

1. Run `bash scripts/test-default-perms.sh > /tmp/perms-before.txt` (snapshot).
2. Make config / plugin / LP change.
3. Run `bash scripts/test-default-perms.sh > /tmp/perms-after.txt`.
4. `diff /tmp/perms-before.txt /tmp/perms-after.txt` — anything unexpected
   means the change had collateral effects on the default group.
5. Have YOU500 walk through sections A → I above. Mark Pass/Fail.
6. If anything regressed, see `docs/DEFAULT-RANK-COMMANDS-2026-05-07.md`
   for last-known-good state and fix recipes.

The diff in step 4 is the cheap pre-flight; the YOU500 walk-through is the
authoritative regression test.

---

## What we explicitly are NOT testing here

- **Rank-prefix display** — operator manages LP prefixes/suffixes manually
  (locked behaviour per workspace memory). YOU500 will show "Adventurer"
  with `false` weight; that's intentional and not a regression.
- **Premium Lands plugin** — the `/data/plugins/Lands/` config tree exists
  but the jar is not loaded. If/when re-installed, this checklist needs a
  Lands section.
- **AuthMe registration of new accounts** — separate flow, not part of the
  default-rank smoke test.
