# Pre-Commit Test Checklist Run through these checks before every commit to ensure consistent feature coverage. ## Build - [ ] `cargo build` succeeds with no errors - [ ] `cargo build --bin mudtool` succeeds ## Server Startup - [ ] Server starts: `RUST_LOG=info ./target/debug/mudserver` - [ ] World loads all rooms, NPCs, objects, races, classes (check log output) - [ ] Database opens (or creates) successfully ## Character Creation - [ ] New player SSH → gets chargen flow (race + class selection) - [ ] Chargen accepts both number and name input - [ ] After chargen, player appears in spawn room with correct stats - [ ] Player saved to DB after creation ## Player Persistence - [ ] Reconnecting player skips chargen, sees "Welcome back!" - [ ] Room, stats, inventory, equipment all restored from DB - [ ] Verify with: `sqlite3 mudserver.db "SELECT * FROM players;"` ## Movement & Navigation - [ ] `go north`, `n`, `south`, `s`, etc. all work - [ ] Invalid direction shows error - [ ] Room view shows: NPCs (colored by attitude), objects, exits, other players ## NPC Interaction - [ ] `examine ` shows description, stats, attitude label - [ ] `talk ` shows greeting dialogue - [ ] `talk ` shows snarl message - [ ] Dead NPCs don't appear in room view ## Combat - [ ] `attack ` initiates combat - [ ] Can't attack friendly/neutral NPCs - [ ] Combat rounds show damage dealt and received - [ ] NPC death: awards XP, shifts attitude -10, shifts faction -5 - [ ] Player death: respawns at spawn room with full HP - [ ] NPCs respawn after configured time - [ ] Combat lockout: can only attack/flee/look/quit during combat - [ ] `flee` exits combat ## Items - [ ] `take ` picks up takeable objects - [ ] `drop ` places item in room - [ ] `equip ` works, old gear returns to inventory - [ ] `use ` heals and removes item - [ ] `inventory` shows equipped + bag items ## Attitude System - [ ] Per-player NPC attitudes stored in DB - [ ] `examine` shows attitude label per-player - [ ] Killing NPC shifts attitude (individual -10, faction -5) - [ ] Verify: `sqlite3 mudserver.db "SELECT * FROM npc_attitudes;"` ## Admin System - [ ] Non-admin can't use `admin` commands (gets error) - [ ] Set admin via mudtool: `mudtool players set-admin true` - [ ] `admin help` shows admin command list - [ ] `admin promote ` grants admin (verify in DB) - [ ] `admin demote ` revokes admin - [ ] `admin kick ` disconnects target player - [ ] `admin teleport ` warps to room (shows room list on invalid) - [ ] `admin registration off` blocks new player creation - [ ] `admin registration on` re-enables it - [ ] `admin announce ` broadcasts to all players - [ ] `admin heal` heals self; `admin heal ` heals target - [ ] `admin info ` shows detailed stats + attitudes - [ ] `admin setattitude ` modifies attitude - [ ] `admin list` shows all players with online/offline status ## Registration Gate - [ ] With registration open (default), new players can create characters - [ ] With registration off, new SSH connections get rejection message - [ ] Existing players can still log in when registration is closed ## MUD Tool - CLI - [ ] `mudtool players list` shows all players - [ ] `mudtool players show ` shows details - [ ] `mudtool players set-admin true` works - [ ] `mudtool players delete ` removes player + attitudes - [ ] `mudtool settings list` shows settings - [ ] `mudtool settings set registration_open false` works - [ ] `mudtool attitudes list ` shows attitudes - [ ] `mudtool attitudes set ` works ## MUD Tool - TUI - [ ] `mudtool tui` launches interactive interface - [ ] Tab/1/2/3 switches between Players, Settings, Attitudes tabs - [ ] Arrow keys navigate rows - [ ] 'a' toggles admin on Players tab - [ ] 'd' prompts delete confirmation on Players tab - [ ] Enter edits value on Settings and Attitudes tabs - [ ] ←→ switches player on Attitudes tab - [ ] 'q' exits TUI ## Quick Smoke Test Script ```bash # Start server in background RUST_LOG=info ./target/debug/mudserver & SERVER_PID=$! sleep 2 # Test 1: New player creation + basic commands ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -p 2222 smoketest@localhost <<'EOF' 1 1 look stats go north talk barkeep go south go south examine thief attack thief flee quit EOF # Test 2: Persistence - reconnect ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -p 2222 smoketest@localhost <<'EOF' look stats quit EOF # Test 3: Admin via mudtool ./target/debug/mudtool players list ./target/debug/mudtool players set-admin smoketest true ./target/debug/mudtool players show smoketest ./target/debug/mudtool settings set registration_open false ./target/debug/mudtool settings list # Test 4: Admin commands in-game ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -p 2222 smoketest@localhost <<'EOF' admin help admin list admin registration on admin info smoketest quit EOF # Test 5: Registration gate ./target/debug/mudtool settings set registration_open false ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -p 2222 newplayer@localhost <<'EOF' quit EOF # Cleanup ./target/debug/mudtool settings set registration_open true ./target/debug/mudtool players delete smoketest kill $SERVER_PID ```