Skip to content

Epic: add a lightweight Fluxer messenger, TrainerOS Link activities and in-game multiplayer #98

Description

@EriArk

Product goal

Add a complete but deliberately small social experience to TrainerOS: the ease of a handheld-console friends/chat app, not an embedded Discord-style workspace.

System-level network interactions are a first-class track, independent of multiplayer inside a launched game. Existing Pokémon Link is the first OS example; future game adapters expose their own appropriate interactions.

Friends / conversation
    ├─ text / emoji / pictures / voice messages / simple voice
    ├─ TrainerOS Link → exchange / gift / in-game-currency sale / adapter-defined activity
    └─ Play Together → actual game or emulator multiplayer

Fluxer is the intended social backend. TrainerOS owns native UI, activity coordination and game integration. This is accepted product direction, not a claim that online integration already works.

Confirmed navigation and Home/Start boundary

#111 owns the five-primary layout:

Home | Worlds | Companions | Trainer | Social

Trainer combines Profile ↔ Journey ↔ Hall of Fame ↔ RetroAchievements through L2/R2. Social occupies the rightmost tab and contains #101's Messages ↔ Groups ↔ Communities ↔ Search. Do not add a sixth primary or put the messenger back inside Trainer. #85's former separate Journey placement is superseded; its content semantics are retained.

#112 owns the adaptive physical Home/Guide overlay: contextual game/social actions during gameplay, appropriate social/activity actions in the shell, and return to the exact origin. It reuses the same social services rather than creating another messenger.

Start stays unchanged: settings, power, Trainer switching, system modes and quick device controls remain in the existing Start menu. No duplicate Start controls in Home or Social.

Home's game Appearance surface is a small set of shader presets, aspect-ratio choices, exact supported widescreen hacks and decorative bezels, not a full emulator configuration panel or Performance/Quality/Battery mode collection. Visual controls and the local overlay do not depend on Fluxer readiness.

Opening Home is not Exit. Only explicit Exit game invokes #49's clean capture → save-policy question when required → graceful close. Continue returns to the same running process, not a savestate or new launch.

Required scope and boundaries

No full server-administration workspace, role-management UI, forums, video, streaming, soundboards, public matchmaking or social feed. Community browsing and existing text channels are intentionally in scope; administration stays deliberately small. Trading does not imply a global inventory, universal currency, marketplace or real-money economy.

Independent lifecycles

Conversation, voice, native Link activity and launched multiplayer session remain distinct. A shared accepted peer connection may serve eligible activities but does not authorize their side effects.

Opening chat never activates capture. Joining voice never authorizes launch or save mutation. Opening a native trade does not start an emulator. Friendship, connection acceptance, activity acceptance and approval of exact save-changing terms remain separate.

A game may expose system activities without runtime multiplayer, runtime multiplayer without system activities, both or neither. Do not use one multiplayer flag for all of them. Native save-changing actions requested from Home still require the safe closed-game/source-revision/approval gates; pausing is not permission to write a save.

Architecture direction

Social tab / adaptive Home overlay / native game-feature UI
    ↓ shared narrow owner-scoped C++ controllers
Fluxer social provider + invitation/peer-session boundary
    ├─ native activity coordinator ← exact semantic game adapters
    │      └─ TrainerOS-owned safe transactions and recovery
    └─ runtime multiplayer coordinator ← launch/netplay adapters
                  ↓
    suitable delivery/transport per operation
    nearby / approved Fluxer events or data / direct P2P / authorized relay

These are responsibility boundaries, not new mandatory daemons or a universal plugin framework. Reuse working interfaces. Do not embed the full Fluxer web UI, Chromium or a Node service as the normal messenger. Portable game adapters must not gain Fluxer login, socket, filesystem or process ownership.

Fit the current repository

Read README, architecture, Nearby Play, Emerald Link and #111/#112's inspected source references.

Evidence and traffic classes

#99 verifies supported user-client authentication and deployed API/native feasibility. A bot or identity-only OAuth token is not automatically a user messaging session; a roadmap is not a deployed protocol.

#105 evaluates native activity events/transactions separately from latency-sensitive runtime multiplayer. A permitted bounded Fluxer message-envelope route may be worth testing for low-rate events; this does not authorize gameplay-frame or keepalive spam through chat. No undocumented invisible messages or custom Gateway opcodes.

A delivery receipt is not a save commit. Durable transactions and recovery remain TrainerOS-owned under every route. A server-carried path is a relay, not direct P2P. Virtual LAN is conditional runtime infrastructure, not a native-activity prerequisite or proof of arbitrary game compatibility.

Linked implementation plan

Dependencies and delivery order

Track Dependency / gate
Navigation #111 can proceed with existing personal views and honest social fixtures/unlinked state; no live Fluxer prerequisite
Local Home and visuals #112 reuses #49 and current platform/runtime boundaries; no voice/P2P prerequisite
Accounts and chat #99 → #100 → #101, following #111 placement; UI fixtures may start earlier
Media and voice #102/#103 build on social; neither blocks native Link or netplay
Home social integration #112 consumes the same #101/#103/#104 services when ready, not a second implementation
Shared activity contract #104 designed together with #109, not launch-only
Native system model #109 reuses existing Link; no dependency on #107
Fluxer delivery research #105 uses #99 and each actual activity's workload
Online system Link #109 + #104 + a suitable #105-proven route OR needed #106 implementation → #110
Runtime multiplayer #104 plus a suitable runtime/direct/relay route → #107
Acceptance #108 applies throughout; #111/#112 retain their local navigation/overlay tests and physical gates

These are independent increments, not one giant release. Basic chat, online system Link, runtime multiplayer and local shell improvements need not wait for one another's complete implementation. Existing native Link is the first reusable system-activity proof, not dependent on a full VPN or an emulator multiplayer demonstration. Unrelated roadmap priorities are not automatically reordered.

Definition of done

  • Five tabs follow Navigation: merge Trainer and Journey, and dedicate the rightmost primary tab to Social #111; Profile/Journey/Hall/RA remain usable inside Trainer and Social is rightmost.
  • Home adapts to shell/game context under Home button: add an adaptive activity overlay with game appearance presets, without duplicating Start #112 without duplicating Start or asking about saving on opening.
  • Required messaging features work through native controller UI with shared state in Social/Home.
  • An existing native Link exchange works across different internet connections with both runtimes closed, preserving bilateral settlement and ordinary-game readback.
  • Future non-Pokémon activities fit the bounded adapter contract; synthetic tests are not claimed as real-game support.
  • Separately, one exact game's multiplayer is verified; this closes only that feature's gate.
  • Fluxer delivery has an evidence-based answer per traffic class, including rejected outcomes.
  • Offline use, local Link, owner isolation, ordinary saves, historical records and return-route migration remain intact.
  • Chat/friendship/Home opening grants neither microphone, save-write nor broad home-LAN access.
  • Independent release decisions and actual handheld results are recorded in the owning issues.
  • Active docs/Help are reconciled; planned, automatically tested and physically verified behavior remain distinct.

This epic tracks requirements and dependencies. Updating it does not mean that the features are implemented or deployed.

Activity

  1. changed the title [-]Epic: add a lightweight Fluxer messenger and Play Together to TrainerOS[/-] [+]Epic: add a lightweight Fluxer messenger, TrainerOS Link activities and in-game multiplayer[/+] on Sep 30, 2026
  2. EriArk commented on Sep 30, 2026

    @EriArk
    OwnerAuthor

    Owner navigation/Home clarification — 2026-10-01

    Add #111 and #112 to this epic's implementation map:

    Home quick access and the Social tab reuse the same friends/conversations/activity services. Native Link and runtime multiplayer remain independent under #104/#109/#110. Save mutation still requires the existing safe closed-game/owner/transaction gates.

    These are specification/implementation tasks, not a claim that the deployed binary has changed. The navigation migration can be developed independently of live Fluxer access; Home's local overlay/exit foundation need not wait for all social or P2P features.

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