Files
elysium/verify.md
T
hikari 29c817230d
Security Scan and Upload / Security & DefectDojo Upload (push) Successful in 1m1s
CI / Lint, Build & Test (push) Successful in 1m6s
feat: initial prototype — core game systems (#30)
## Summary

This PR represents the full v1 prototype, implementing the core game systems for Elysium.

- Full idle/clicker RPG loop: resource collection, crafting, boss fights, exploration, and quests
- Adventurer hiring with batch size selector and progressive tier cost scaling
- Prestige, transcendence, and apotheosis systems with auto-prestige support
- Character sheet, titles, leaderboards, companion system, and daily login bonuses
- Auto-quest and auto-boss toggles
- Discord webhook notifications on prestige/transcendence/apotheosis
- Discord role awarded on apotheosis
- Responsive design and overarching story/lore system
- In-game sound effects and browser notifications for key events
- Support link button in the resource bar
- Full test coverage (100% on `apps/api` and `packages/types`)
- CI pipeline: lint → build → test

## Closes

Closes #1
Closes #2
Closes #3
Closes #4
Closes #5
Closes #6
Closes #7
Closes #8
Closes #9
Closes #10
Closes #11
Closes #12
Closes #13
Closes #14
Closes #16
Closes #19
Closes #20
Closes #21
Closes #22
Closes #23
Closes #24
Closes #25
Closes #26
Closes #27
Closes #29

 This issue was created with help from Hikari~ 🌸

Co-authored-by: Naomi Carrigan <commits@nhcarrigan.com>
Reviewed-on: #30
Co-authored-by: Hikari <hikari@nhcarrigan.com>
Co-committed-by: Hikari <hikari@nhcarrigan.com>
2026-03-08 15:53:39 -07:00

7.7 KiB
Raw Blame History

Manual Verification Checklist

Things our unit tests cannot verify — these need manual testing in a real browser with a live server.


Auth & Login

  • Discord OAuth login flow works end-to-end (redirect → callback → JWT → game loads)
  • Logging out and back in restores the correct game state
  • A brand-new player (no existing save) gets a fresh game state with no errors
  • A player with an outdated save (no schemaVersion) sees the OutdatedSchemaModal on login
    • "Reset Progress" button nukes the save and starts fresh
    • "Proceed with Bugs" dismisses the modal for the session but reappears on next login
    • Cloud save attempts while on an outdated save are rejected (save button should fail gracefully)
  • A player whose save was nuked server-side (v1 release reset) gets a fresh state, not a 404

Cloud Save

  • Auto-save triggers every 60 seconds while the game is open
  • Manual save (if applicable) works correctly
  • Saving and reloading in a new tab preserves all progress
  • Save is rejected with a helpful error if the schema version is outdated (HTTP 409)

Offline Progress

  • Closing the tab and reopening after 30+ minutes shows the offline earnings modal
  • Offline gold is calculated correctly (passive income × elapsed time, capped appropriately)
  • Offline essence is calculated correctly
  • Resetting progress clears offline earnings — after a reset, no offline modal should appear

Daily Login Bonus

  • First login of a new day shows the login bonus modal with correct reward
  • Consecutive days increment the streak counter
  • Missing a day resets the streak to 1
  • Day 7 reward (crystals) is awarded correctly
  • Week multiplier applies for streaks beyond 7 days
  • Streak is displayed correctly on the Character Sheet

Discord Integration

  • Webhook on prestige: posting to the Discord webhook channel with correct message and player mention
  • Webhook on transcendence: same as above
  • Webhook on apotheosis: webhook fires AND Discord role is granted to the player
  • Discord role grant requires the bot to have Manage Roles permission and the bot role to be above the target role
  • If Discord env vars are missing (dev environment), these silently no-op without crashing

Prestige / Transcendence / Apotheosis

  • Prestige resets gold and adventurers but preserves story/titles/companions/achievements
  • Prestige increments the prestige count correctly
  • Transcendence resets prestige progress but preserves correct fields
  • Apotheosis resets transcendence progress but preserves correct fields
  • Story chapters unlock at correct milestone points (1st prestige, 5th prestige, 1st transcendence, 1st apotheosis)

Boss Fights

  • Boss fight UI opens correctly and shows HP bar
  • Win/loss outcomes are applied correctly
  • Boss rewards (gold, equipment) are granted on win
  • Zone unlock happens after final zone boss is defeated and final zone quest is completed
  • bossesDefeated daily challenge counter increments in the UI after a win
  • Auto-boss toggle fires when a boss is available and the player is actively on the page

Quests

  • Quest starts and the timer counts down in real time
  • Quest completes and rewards are granted
  • Quest failure (chance-based) resets the quest to available with ⚠️ indicator
  • questsCompleted daily challenge counter increments in the UI
  • Auto-quest toggle fires when a quest becomes available
  • Active companion quest-time reduction (Wren, Zuri) visibly shortens the timer

Exploration

  • Starting an exploration works and shows in-progress state
  • Cannot start a second exploration while one is in progress (all Explore buttons disabled)
  • Exploration completes and rewards/codex entries are granted
  • "Found nothing" outcome is handled gracefully (no crash, no reward)
  • adventurer_loss event properly removes adventurers

Companions

  • Companions unlock when the correct threshold is met (bosses defeated, quests completed, prestige, etc.)
  • Setting an active companion applies the bonus correctly:
    • Passive gold bonus (Lyra, Mira, Pria) — check gold income rate
    • Click gold bonus (Finn) — check click power
    • Boss damage bonus (Aldric, Kael) — check boss fight outcomes
    • Quest time reduction (Wren, Zuri) — check quest timer
    • Essence income bonus (Sera, Vex) — check essence accumulation
  • Changing active companion takes effect immediately

Story System

  • First zone boss defeat unlocks Chapter 1 and shows a toast notification
  • Story tab shows unread dot badge when new chapters are available
  • Reading a chapter and making a choice saves the selection
  • Choice outcome is displayed after selection
  • Completed choices are visible on the Character Sheet
  • Story progress is preserved through prestige, transcendence, and apotheosis
  • {characterName} is substituted correctly with the player's character name

Titles

  • Titles unlock when the correct milestones are reached
  • Active title is selectable in the Character Sheet edit mode
  • Active title displays on the public /character/:id page
  • Titles are preserved through prestige, transcendence, and apotheosis

Leaderboards

  • Leaderboard page loads and displays real player data
  • All 7 categories (gold, bosses, quests, achievements, prestige, transcendence, apotheosis) work
  • Top 3 rows have medal highlighting
  • Clicking a player's row navigates to their /character/:id page
  • showOnLeaderboards: false hides the player from all categories
  • Default is opted-in (new players appear on leaderboards)

Character Sheet & Public Profile

  • Character Sheet tab loads and displays correctly
  • Edit mode saves all fields (name, pronouns, race, class, bio, guild name, guild description, active title)
  • Share button copies the correct /character/:id URL and shows ✓ Copied!
  • Public /character/:id page renders for another player's ID
  • Equipped items (weapon, armour, trinket) display correctly with rarity colours
  • Profile settings (showOnLeaderboards, etc.) persist correctly

Batch Hire

  • Batch selector (×1, ×5, ×10, ×25, ×100, ×Max) updates all hire buttons
  • Cost display updates to reflect batch price
  • ×Max hires as many as the player can afford, down to 1
  • ×Max is disabled (or shows ×0) if the player cannot afford even 1

Responsive Layout

  • Game is usable on a 375px wide mobile screen
  • Sidebar collapses to a horizontal strip on mobile
  • Tabs scroll horizontally when there are too many to fit
  • Resource bar wraps cleanly on small screens

Notifications / Toasts

  • Achievement toast appears when an achievement is unlocked
  • Codex toast appears when a new codex entry is discovered
  • Story toast appears when a new chapter unlocks
  • Login bonus modal appears on first daily login
  • Offline progress modal appears when returning after time away
  • Outdated schema modal appears for players with old saves
  • All toasts auto-dismiss after a few seconds

Crafting

  • Crafting a recipe deducts the correct materials
  • Crafted item appears in inventory / updates stats
  • Cannot craft without required materials (error shown)

1Password Secrets (Production Only)

  • DISCORD_MILESTONE_WEBHOOK is set and webhook posts succeed
  • DISCORD_BOT_TOKEN, DISCORD_GUILD_ID, DISCORD_APOTHEOSIS_ROLE_ID are set and role grant succeeds
  • JWT secret is correctly injected
  • MongoDB connection string is correctly injected