Skip to content

Player identity vs game progression: decouple universal Trainer profile from adapter-specific history #178

Description

@EriArk

Child of #174. Closely related to #175 (dynamic tabs) and #176 (Pokémon package extraction).

The hidden Pokémon assumption

Today the primary Trainer tab bundles:

  • universal TrainerOS person (local profile/name/emblem, profile editing, ownership and personal preferences);
  • Pokémon-specific persona (favorite Pokémon, game trainer context);
  • game-specific progress (badges, Journey milestones, Champion Hall);
  • cross-game/external integrations (RetroAchievements and actual play history).

This makes a selected Diablo or racing title implicitly show Pokémon progression even though the shell should follow its own game's adapter.

Separate the ownership domains

Host always owns:

  • current local Player/Trainer identity, PIN, account links, settings, safe switching and per-user store;
  • actual launch/play session history, game registration, media, notification/activity provenance;
  • verified RetroAchievements account/provider. Whether a given game has a compatible achievement set is capability-driven.
  • one consistent way to view/edit user identity even if no game integration is installed.

Game experience owns:

  • names, widgets/faces and progress policies for its second contextual primary slot (e.g. Pokémon Trainer/Journey/Hall, Diablo Chronicle, racing Career);
  • Pokémon badges, real Champion snapshots, quest completion, stage/race records, RPG character fields, game-only favorites and milestones only when sourced from verified adapter data;
  • context-specific filtering/metadata and optional in-game/Select actions without shell title checks.

A generic Playtime/History view can be shared by any game; it must not be interpreted as evidence of finishing the game. RA achievements remain externally sourced and must not be invented to substitute milestones or embedded in Pokémon-specific logic.

UX decision to finalize in implementation

The label Trainer is not permanent for slot B; it may become Chronicle, Career, Records or another meaningful adapter name. Do not rename the entire user's OS identity or Fluxer profile whenever they select a game.

Ensure universal profile editing, account access and switching remain consistently reachable — as a shared face where appropriate and/or a stable global settings/profile route. Reconcile with Start's existing Switch Trainer and the universal Options (#168) without duplicating power/system controls or trapping a profile behind an incompatible game package. No requirement to keep an oversized permanent Profile panel in every deep game experience.

Acceptance

  • Changing selected Adventure does not change or corrupt the current real local user/profile/account identity.
  • Pokémon still has true badges/Champion/progression for exact supported saves.
  • Generic game or non-Pokémon experience never displays Pokémon-specific favorites, badges or Champion Hall.
  • General play history and verified RA remain discoverable when meaningful, without pretending to be game progress.
  • Profile creation/edit/PIN/switch/restore works regardless of adapter installation, game selection, or runtime minimized state.
  • Navigation by semantic IDs and legacy Trainer/Journey/Hall/RA checkpoint migration preserve same account and history; no cross-user data leaks.
  • Help/onboarding, context Select and visual labels consistently distinguish the person/profile from per-game character/progression.

Related: #12, #24, #25, #47, #48, #49, #89, #90, #111, #167–#169, #174–#176.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions