Changelog - v1.6.0 - Path of Mastery
A major progression update introducing Gladiator Disciplines — per-gladiator skill trees with combat, rest and training effects — plus a redesigned Achievements page, senator-run elite training schools, and a long list of bug fixes and security hardenings.
Gladiator Disciplines — New Skill System
- Three discipline lines per gladiator: Martial, Endurance, Spectacle, with 24 seeded skills across Tier 1–3 and capstones
- Discipline points awarded on level-up (level-based formula); points persist across the run
- New Discipline Tree modal on the Roster with locked/unlocked tiers, effect descriptions, and rank-up previews
- Secure server-side allocation via
allocate_discipline_pointRPC (ownership, dead-gladiator and unlock-rule checks) - Combat effects active in fights: initiative bonuses, max-HP bonuses, conditioned-body and measured-blows handlers, asymptotic-safe damage scaling
- Reward & morale effects active end-of-fight: bonus fame/gold/morale handlers with full effect logging
- Management effects active outside combat: Disciplined Rest (extra healing when low HP) and Iron Routine (reduced training morale cost)
- "Unspent Discipline Points" priority surfaces on the Dashboard and deep-links into the roster
- Admin tools: discipline manager, debug panel, and DB-validated effect-config schema
- Existing gladiators auto-backfilled with the correct point budget for their level
Achievements — Hall of Deeds Redesign
- New unified two-column Hall of Deeds layout (list + detail panel) with category and status filters
- Mobile layout collapses the detail panel inline under the selected entry
- Achievement progress is now persisted server-side and visible even for already-claimed achievements (e.g. "0/200 Fame" backfill bug fixed)
- New achievement Arcane Reflexes: reach Day 50 with ≥90% QTE success rate (min. 10 QTEs) → unlocks the animated Legendary Electric (Arcane) card frame
- Four achievements now grant final portrait rewards instead of placeholders — Lanista portraits and exclusive gladiator portraits selectable from a new Roster portrait picker
- AssetManager extended with English labels for the new portrait reward keys
Senate & Prestige
- Prestige bar with three Elite Training milestones (105 / 110 / 115 stat caps) shown directly under the bar — same visual language as the Act I Fame milestones
- Senator Schools: each senator now offers their own elite training path, gated by per-senator favor, with custom backgrounds and tooltips on the audience page
- Sidebar / mobile header now show three independent Seal counters per senator
- Bug fix: Prestige bar no longer renders empty when prestige > 0; bar heights harmonized with the Fame bar
Featured Duels — Scaling Overhaul
- Opponent stats now scale from the best gladiator in the player's roster instead of the average — no more trivial duels for mixed-strength rosters
- New Champion Profile system adds controlled stat variance per opponent for replayability
- Multiple duel-scaling bug fixes and config-driven multipliers
Staff Overhaul
- Trainer now displays an estimated win chance % on fight contracts
- Scout auto-reveals opponent stats — no more per-fight scouting action
- All trainer/scout level descriptions and tooltips updated to match the new behaviour
- All bonus values exposed via
game_configkeys for tuning - Staff cards on the Roster page redesigned to a compact horizontal layout (~85px instead of ~300px), artwork on hover
Combat & Replays
- Combat ambience now fades in over 2 seconds on combat-screen load instead of starting abruptly
- Replay viewer initializes health bars with the actual start HP and shows a "Wounded — X/Y HP" label for gladiators entering wounded
- Cross-row replay linking: defender mirror rows for Shadow Duels now resolve to the attacker's replay
- 20 new keyboard-safe QTE prompts (avoiding Q/W/A/Z/M for AZERTY/QWERTZ compatibility), split between Act 1 short words and Act 2 Featured Duel phrases
Onboarding & Auth
- New Confirm Email banner after sign-up with a resend button (cooldown) and an option to change the email — replaces the silent failed-login experience
- Tutorial / onboarding flow stabilized (regression pass after the Discipline rollout)
Vita & History
- New tooltip on Shadow Duel entries in the Vita Fight Record with purse, gold, fame and timestamp
- Shadow Duel mirror rows backfilled for defenders so both gladiators see the fight in their history
- Fight history correctly explains "combat log unavailable" for replay-less defender mirror rows
Public Arena (Spectare)
- Praeco card and "Last Champion Fight" panel rebuilt for mobile (responsive stacking, scaled portrait)
- "Recent Shadow Duels" capped to the last 3 entries; Victory/Defeat badges removed (they made no sense for shadow PvP)
- Mirror rows now stored with
difficulty = 'medium'to satisfy the DB constraint while remaining identifiable viais_shadow_contract
My Ludus Navigation
- "My Ludus" tab bar is now horizontally swipeable on mobile with hidden scrollbar, no more overlapping tab labels
- Mobile labels shortened where they collided with the icons
Soft-Disabled Features
- Challenges are soft-hidden from the player UI (admin-only access preserved); code and data remain for a future Season v2
Balance & Self-Healing
- "Market Now Open" (50 Fame) milestone now triggers reliably and is auto-self-healed on page load if missed
- Champion fights for Act 2-eligible players no longer expire after one day in the bulk-expiry routine
- Featured Duel and Champion fight expiry edge cases hardened
Security
- AI-generation edge functions (
generate-market-portraits,generate-equipment-image,generate-changelog-image) now require authentication — closes the cost-abuse vector senator_favorno longer publicly readable; race board uses a dedicated server-side pathmarket_*tables: removed user INSERT/UPDATE/DELETE policies — only server-side generation and SECURITY DEFINER purchase RPCs may write- Multiple SECURITY DEFINER functions hardened with explicit ownership checks, including
reset_ludusandget_inbox_summary
Bug Fixes
- Market refresh: fixed boot crash in
refresh-marketedge function caused by a duplicatecurrentDaydeclaration - Duplicate market items: race condition that generated 18 items instead of 9 fixed via a sync useRef lock
- Gold-cost events: events that require gold (e.g. "A Champion's Due") can no longer be approved when the player can't afford them — server returns
insufficient_fundsand the client disables the Accept button with a clear hint - Gladiator portraits: deterministic DD-style fallback restored across Spectare feed, Discipline Tree, Equipment Loadout, Event Resolution, Vita Biography, Roster gladiator picker — and the expanded Spectare row now uses the correct DD variant via a new
avatarUrlDDprop
