Loading issues
Builds on PAR-98 (group+capability RBAC) and the reconciliation cron (PAR-99).
Problem: the financial-oversight capability exists internally as staff.audit but is never surfaced as a first-class, documented, grantable role. It's not in the user-facing roles doc, and there's no clear "viewer" identity for admins to attach to a LuckPerms-fed group.
Change — make viewer the canonical, user-facing financial-oversight role:
staff.audit → viewer in the explorer vocabulary (lib/auth/capabilities.ts), keeping staff.audit as a recognized legacy alias (normalizeCapability) so existing group rows never silently lose access.isStaff now keys off viewer; all existing financial gates (account history, ChestShop firm/item drilldowns, leaderboards) honor it unchanged.getViewer normalizes stored strings (legacy staff.audit → viewer); the admin group editor shows the legacy row as the Viewer checkbox.viewer badge for a linked player who holds it without higher tier; /me notes the access.explorer_group_member source='luckperms' → linked player's getViewer caps → isStaff). Added an integration assertion for a LuckPerms-sourced viewer member.V21: data migration renaming existing explorer_group_capability.capability rows staff.audit → viewer.docs/admin/roles.md documents the Viewer role and that it's granted via a (LuckPerms-fed) group, requiring the player to be linked.Components: economy-explorer (primary), economy-flyway (V21 data migration).