You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Epic: add a lightweight Fluxer messenger, TrainerOS Link activities and in-game multiplayer #98
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.
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
Friends, requests, blocking, private/group conversations, text, emoji, images and recorded voice messages.
Compact Fluxer Community browsing/joining plus TrainerOS-created Communities that can be identified and filtered as TrainerOS-aware.
Simple private voice rooms: participants, join/leave and basic audio controls.
Native system activities supplied by exact-game adapters without requiring the game/emulator to run or implement multiplayer.
Separate in-game multiplayer invitations/launch for explicitly supported runtime/game combinations.
Investigate carrying system events and, separately, gameplay data through Fluxer; evaluate direct P2P and authorized relay paths where appropriate.
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.
Preserve device-specific Direct radio safety policy and unresolved recovery gates. Online work does not authorize re-enabling a disabled route.
Isolate network tests from live handheld namespaces and production listeners.
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.
#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.
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.
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
Start stays unchanged: existing Settings, Power, Switch Trainer, system modes and quick device controls are not moved to or duplicated in Home. The earlier conversational suggestion to replace Start was rejected by the owner and is not a product requirement.
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.
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.
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:
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
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
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
This epic tracks requirements and dependencies. Updating it does not mean that the features are implemented or deployed.