Diagnostics And Labs
Launchpad
Reports, QA, terminal, and lab-only tools.
Open a target
Diagnostics
Inspection routes for reports, terminal scrollback, route behavior, and search probes.
Labs
Development-only surfaces that are useful, but should not shape primary operator navigation.
Terminal release note
Pseudo-terminal display paths are not marked validated here. Reprove
POST /api/terminal
to /xterm-queue and /terminal-local before treating terminal display behavior as release-ready.
Integration Catalog
Source-backed route, owner, transport, readiness, health, and smoke-path facts for cross-repo operator surfaces.
7 account routes
26 launch surfaces
7 audience-game surfaces
46 overlay links
5 overlay ingress surfaces
26 sidecar smoke routes
5 resident agents
5 twitch/chat surfaces
6 Kick surfaces
3 game-server surfaces
6 AI/memory surfaces
6 music surfaces
7 terminal/voice surfaces
5 Frotz surfaces
9 OpenClaw/access surfaces
5 live scene surfaces
10 Ikemen economy surfaces
5 MCP surfaces
5 notification surfaces
8 auto probes
8/8 auto ready
Automatic readiness snapshot
Hydrates safe server-side probes only. Runtime-context, hub, browser, and sidecar checks stay cataloged but skipped here.8/8 auto ready
| Surface | Check | Status | Code | Message |
|---|---|---|---|---|
| Twitch | /api/twitch/diagnostics/auth-url |
Ready | 200 | OK |
| Kick | /api/kick/diagnostics/auth |
Ready | 200 | OK |
| Discord | /api/config/diagnostics/runtime |
Ready | 200 | OK |
| Spotify | /api/spotify/diagnostics/auth |
Ready | 200 | OK |
| YouTube | /api/oauth/diagnostics/providers |
Ready | 200 | OK |
| Google Health | /api/config/diagnostics/runtime |
Ready | 200 | OK |
| Patreon | /api/oauth/diagnostics/providers |
Ready | 200 | OK |
| Music Jukebox | /api/spotify/diagnostics/auth |
Ready | 200 | OK |
Account route aliases
| Provider | Focus target | Section | Owner | Transport | Check | Probe support | Health signal | Diagnostics | Routes | Callbacks |
|---|---|---|---|---|---|---|---|---|---|---|
| Twitch | twitch |
StreamingIdentity | ChannelCheevos OAuth / Api.Twitch | OAuth redirect + Twitch diagnostics endpoint | HttpGet | AutomaticServerProbe | Twitch auth-url diagnostics reports owner/bot account readiness. | /api/twitch/diagnostics/auth-url |
/twitch |
/twitch/callback, /auth/twitch/callback |
| Kick | kick |
StreamingIdentity | ChannelCheevos OAuth / Kick | OAuth redirect + Kick diagnostics endpoint | HttpGet | AutomaticServerProbe | Kick diagnostics reports auth-url and token configuration readiness. | /api/kick/diagnostics/auth |
/kick |
/auth/kick/callback |
| Discord | discord |
SecurityAndAi | ChannelCheevos local Discord integration | Local bot/webhook secrets + config diagnostics endpoint | HttpGet | AutomaticServerProbe | Runtime config diagnostics reports local Discord credential presence without exposing secrets. | /api/config/diagnostics/runtime |
/discord |
- |
| Spotify | spotify |
MediaHealthProviders | ChannelCheevos Spotify | OAuth redirect + Spotify diagnostics endpoint | HttpGet | AutomaticServerProbe | Spotify diagnostics endpoint reports auth/config readiness. | /api/spotify/diagnostics/auth |
/spotify |
/spotify |
| YouTube | youtube |
MediaHealthProviders | ChannelCheevos OAuth / Api.Youtube | OAuth redirect + shared provider diagnostics endpoint | HttpGet | AutomaticServerProbe | OAuth provider diagnostics reports YouTube callback/config readiness. | /api/oauth/diagnostics/providers |
/youtube |
/youtube |
| Google Health | google-health |
MediaHealthProviders | ChannelCheevos Health providers | OAuth callback route + runtime config diagnostics endpoint | HttpGet | AutomaticServerProbe | Runtime config diagnostics reports health-provider credential presence without exposing secrets. | /api/config/diagnostics/runtime |
/fitbit |
/google-health |
| Patreon | patreon |
MediaHealthProviders | ChannelCheevos OAuth / Patreon | OAuth redirect + shared provider diagnostics endpoint | HttpGet | AutomaticServerProbe | OAuth provider diagnostics reports Patreon callback/config readiness. | /api/oauth/diagnostics/providers |
/patreon |
/patreon |
Game and media launches
| Surface | Route | Owner | Transport | Check | Probe support | Readiness | Health signal | Smoke path |
|---|---|---|---|---|---|---|---|---|
| Ikemen Launcher | /ikemen |
Api.Ikemen / LanceroMugen | Blazor route + local launcher | PageSmoke | BrowserSmoke | /ikemen |
Launcher state visible from the route. | /ikemen |
| CAH State | /cah-state |
ChannelCheevos Core | Blazor route + game state service | PageSmoke | BrowserSmoke | /cah-state |
Live round state renders without route failure. | /cah-state |
| CAH Channel State | /cah-state/{ChannelId} |
ChannelCheevos Core | Parameterized Blazor route | PageSmoke | BrowserSmoke | /cah-state/{ChannelId} |
Channel-scoped state renders for the active channel. | /cah-state/{ChannelId} |
| Spottie RPG | /streamer/rpg |
ChannelCheevos Core | Admin Blazor route | PageSmoke | BrowserSmoke | /streamer/rpg |
Quest controls render for authorized streamers. | /streamer/rpg |
| Trivia Console | /triviaconsole |
ChannelCheevos Core | Admin Blazor route | PageSmoke | BrowserSmoke | /triviaconsole |
Console route renders and can resolve trivia state. | /triviaconsole |
| Trivia Display | /triviadisplay |
ChannelCheevos Core | Display Blazor route | PageSmoke | BrowserSmoke | /triviadisplay |
Display route renders for viewer playback. | /triviadisplay |
| Valheim Dashboard | /valheim |
Valheim-Support | Plugin package + SignalR agent | SignalRHub | RequiresHubClient | /valheim-server |
Server bridge publishes state and accepts admin actions. | /valheim |
| Valheim Commands | /valheimcommands |
Valheim-Support | Plugin package + command route | SignalRHub | RequiresHubClient | /valheim-server |
Command dashboard renders with server status. | /valheimcommands |
| Windrose Observability | /windrose-observability |
Windrose package / sidecar | Read-only plugin API | SignalRHub | RequiresHubClient | /windrose-state |
Observability route reports plugin and sidecar health. | /windrose-observability |
| Windrose Control | /windrose-control |
Windrose package / sidecar | Approval-gated plugin API | SignalRHub | RequiresHubClient | /windrose-state |
Control route reports dry-run or approval status. | /windrose-control |
| Frotz | /frotz |
ChannelCheevos Core Frotz | Blazor operator route + Gru hub | HttpGet | RequiresRuntimeContext | /api/FrotzState/GetState?webkey={webkey} |
Legacy/admin controls render and can reach Frotz state for an active channel. | /frotz |
| Frotz Station | /frotz-station |
ChannelCheevos Core Frotz + cc-sidecar | Blazor station + sidecar base profile | HttpGet | RequiresRuntimeContext | /api/FrotzState/GetState?webkey={webkey} |
Station route renders and sidecar exposes frotz-station profile for an active channel. | /frotz-station |
| Retro Art | /retroart |
Api.RetroAchievements / Batocera | Blazor route + gameplay hub | SignalRHub | RequiresHubClient | /gameplay |
RetroArt route renders with collapsed diagnostics. | /retroart |
| Batocera Companion | /game-integrations#batocera |
ChannelCheevos.Batocera.Contracts | Resident agent + embedded card | HttpGet | RequiresRuntimeContext | /bff/batocera/status |
Agent snapshot and companion controls render from Games Home. | /game-integrations#batocera |
| RetroAchievements | /ra |
Api.RetroAchievements | Review route + API package | PageSmoke | BrowserSmoke | /ra |
Recent activity review route renders for authorized operators. | /ra |
| Steam Keys | /steamkeys |
Api.Steam | Blazor route + Steam API package | PageSmoke | BrowserSmoke | /steamkeys |
Steam key route renders key-management state. | /steamkeys |
| Steam Gift Picker | /steam-gift-picker |
Api.Steam | Blazor route | PageSmoke | BrowserSmoke | /steam-gift-picker |
Gift picker route renders selectable pool state. | /steam-gift-picker |
| Backlog Wheel | /game-backlog-wheel |
Api.Steam / Batocera contracts | Blazor route + local catalog state | PageSmoke | BrowserSmoke | /game-backlog-wheel |
Backlog wheel route renders without promotion to default nav. | /game-backlog-wheel |
| Music Jukebox | /music-jukebox |
Spotify / cc-jukebox / cc-radio | Blazor route + Spotify APIs | HttpGet | AutomaticServerProbe | /api/spotify/diagnostics/auth |
Jukebox route renders; credentials remain on Accounts. | /music-jukebox |
| Chop-It Companion | /game-integrations#chop-it |
Chop-It media package | Embedded companion card | PageSmoke | BrowserSmoke | /game-integrations#chop-it |
Companion card renders from Games Home. | /game-integrations#chop-it |
| Kodi / Svengoolie | /kodi |
PolyhydraGames.Kodi.API / cc-sidecar | Kodi hub + external display route | SignalRHub | RequiresHubClient | /kodihub |
Kodi route renders and media-launch health probe can resolve station state. | /kodi |
| Media Launch | /media-launch |
ChannelCheevos.StreamBoxAgent | Resident media-launch agent | HttpPost | RequiresRuntimeContext | /bff/media-launch/stream-box/health?deviceId={deviceId} |
Media launch route exposes station diagnostics and Kodi health probe. | /media-launch |
| Svengoolie Voting | /overlay/svengoolie/voting |
cc-sidecar | Sidecar-owned browser overlay | SidecarRoute | SidecarSmoke | /overlay/svengoolie/voting |
Sidecar smoke manifest covers the voting overlay route. | /overlay/svengoolie/voting |
| Ikemen Admin | /admin/ikemen |
Api.Ikemen / LanceroMugen | Admin Blazor route | PageSmoke | BrowserSmoke | /admin/ikemen |
Admin route stays labs/review only. | /admin/ikemen |
| RA Test | /ra-test |
Api.RetroAchievements | Diagnostic Blazor route | PageSmoke | BrowserSmoke | /ra-test |
Diagnostic route stays out of default navigation. | /ra-test |
| Song Trivia | /song-trivia |
ChannelCheevos Core | Lab Blazor route | PageSmoke | BrowserSmoke | /song-trivia |
Review route remains labs-only. | /song-trivia |
Audience games and viewer runtimes
| Surface | Owner route | Owner | Provider | Transport | Health signal | Validation |
|---|---|---|---|---|---|---|
| CAH Operator State | /cah-state |
ChannelCheevos CAH control surface | ChannelCheevos Core CAH | Blazor operator route + CahGameStateManager | Operator surface shows phase, reveal step, timer, players, submissions, and generated viewer link for the active channel. | Open /cah-state as an owner or run WholeAppSmokeTests.CahStateRoute_RendersSeededOperatorState_ForSmokeOwner. |
| CAH Viewer Runtime | /api/cah/viewer/{channelId} |
CahController | cc-play CAH route and cc-mobile CAH controller | Signed CAH session token + REST viewer hand/submission endpoints | Viewer routes require a valid CAH session token for private hand state while keeping bootstrap and pairing anonymous at the HTTP boundary. | Bootstrap with POST /api/cah/bootstrap/{channelId}, then GET /api/cah/viewer/{channelId} and POST /api/cah/viewer/{channelId}/submit. |
| CAH Realtime Hub | /cah |
CahHub | cc-play / browser overlays / ChannelCheevos CAH display | SignalR cah hub with read-only display and token-gated viewer groups | Display clients can resolve channel state from webkey/channel context; viewer group joins require a matching CAH session token unless read-only display context is present. | Connect to /cah, join cah-{channelId}, and verify GameState broadcasts after an operator action. |
| Arcade Backend API | /api/arcade |
ArcadeController | cc-sidecar arcade launcher and Phaser displays | REST catalog, leaderboard, active-session, and session snapshot endpoints | ChannelCheevos owns available games, leaderboards, active sessions, and score snapshots; cc-sidecar renders visual game loops. | GET /api/arcade/games, /api/arcade/leaderboard, /api/arcade/active/{channelId}, and /api/arcade/session/{sessionId}. |
| Arcade Realtime Hub | /arcade |
ArcadeHub | cc-sidecar ArcadeHubService | SignalR arcade hub + grouped session broadcasts | Arcade clients join arcade-{channelId} groups and receive GameStarted, GameCompleted, HighScoreUpdated, LeaderboardUpdated, and PachinkoIntentUpdated events. | Connect to /arcade, call JoinChannelGroup, then run ArcadeHubTests and ArcadeSessionManagerTests. |
| Spottie RPG Operator | /streamer/rpg |
ChannelCheevos Spottie RPG page | cc-sidecar operator cockpit and Twitch chat commands | Blazor operator controls + !rpg/!quest command path | Operator can start/end quests while viewer participation stays on chat commands and public sidecar display snapshots. | Open /streamer/rpg; run SpottieRpgPageMarkupTests and SpottieRpgManagerTests before changing quest controls. |
| Spottie RPG Public Session | /api/rpg/session/{channelId} |
RpgController | cc-sidecar quest display | Public REST session projection + WebKey/OpenClaw operator start/end endpoints | Session projection returns null/404 when no quest is active and excludes private owner data from public participant DTOs. | GET /api/rpg/state and /api/rpg/session/{channelId}; run RpgControllerTests and SpottieRpgSessionProjectionServiceTests. |
Overlay and browser sources
| Source | Category | Status | URL |
|---|---|---|---|
| Stream Start | Retro | OBS-safe | https://sidecar.channelcheevos.com/retrostart?env=prod&id=catalog-preview-webkey |
| Be Right Back | Retro | OBS-safe | https://sidecar.channelcheevos.com/retrobrb?env=prod&id=catalog-preview-webkey |
| Stream End | Retro | OBS-safe | https://sidecar.channelcheevos.com/retroend?env=prod&id=catalog-preview-webkey |
| Text Adventure | Retro | OBS-safe | https://sidecar.channelcheevos.com/textadventure?env=prod&id=catalog-preview-webkey |
| Now Playing | Music | OBS-safe | https://sidecar.channelcheevos.com/music?env=prod&id=catalog-preview-webkey |
| Queue | Music | OBS-safe | https://sidecar.channelcheevos.com/queue?env=prod&id=catalog-preview-webkey |
| Chat | Chat | OBS-safe | https://sidecar.channelcheevos.com/chat?env=prod&id=catalog-preview-webkey |
| Overlay | Canonical base layouts | OBS-safe | https://sidecar.channelcheevos.com/overlay?env=prod&id=catalog-preview-webkey |
| Modern Base Layout | Canonical base layouts | OBS-safe | https://sidecar.channelcheevos.com/overlay/base?profile=modern&env=prod&id=catalog-preview-webkey |
| Retro Base Layout | Canonical base layouts | OBS-safe | https://sidecar.channelcheevos.com/overlay/base?profile=retro&env=prod&id=catalog-preview-webkey |
| Jukebox Base Layout | Canonical base layouts | OBS-safe | https://sidecar.channelcheevos.com/overlay/base?profile=jukebox&env=prod&id=catalog-preview-webkey |
| Coding Base Layout | Canonical base layouts | OBS-safe | https://sidecar.channelcheevos.com/overlay/base?profile=coding&env=prod&id=catalog-preview-webkey |
| Frotz Base Layout | Canonical base layouts | OBS-safe | https://sidecar.channelcheevos.com/overlay/base?profile=frotz&env=prod&id=catalog-preview-webkey |
| Frotz Station Base Layout | Canonical base layouts | OBS-safe | https://sidecar.channelcheevos.com/overlay/base?profile=frotz-station&env=prod&id=catalog-preview-webkey |
| Retro Layout | Canonical base layouts | OBS-safe | https://sidecar.channelcheevos.com/overlay/retro?env=prod&id=catalog-preview-webkey |
| Arcade Layout | Canonical base layouts | OBS-safe | https://sidecar.channelcheevos.com/overlay/arcade?env=prod&id=catalog-preview-webkey |
| Modern Layout | Canonical base layouts | OBS-safe | https://sidecar.channelcheevos.com/overlay/modern?env=prod&id=catalog-preview-webkey |
| Kodi TV Layout | Canonical base layouts | OBS-safe | https://sidecar.channelcheevos.com/overlay/kodi?env=prod&id=catalog-preview-webkey |
| Frotz Station Launcher | Compatibility launchers | launcher/compatibility | https://sidecar.channelcheevos.com/overlay/base?profile=frotz&env=prod&id=catalog-preview-webkey |
| Active Users QR | Widgets | OBS-safe | https://sidecar.channelcheevos.com/active-users-qr?env=prod&id=catalog-preview-webkey |
| QR Code Center | Widgets | OBS-safe | https://sidecar.channelcheevos.com/qr-code-center?env=prod&id=catalog-preview-webkey |
| Chat Widget | Widgets | OBS-safe | https://sidecar.channelcheevos.com/overlay/widget/chat?env=prod&id=catalog-preview-webkey |
| Game Info | Widgets | OBS-safe | https://sidecar.channelcheevos.com/overlay/widget/game-info?env=prod&id=catalog-preview-webkey |
| QR Code | Widgets | OBS-safe | https://sidecar.channelcheevos.com/overlay/widget/qr?env=prod&id=catalog-preview-webkey |
| Status | Widgets | OBS-safe | https://sidecar.channelcheevos.com/overlay/widget/status?env=prod&id=catalog-preview-webkey |
| Achievements | Widgets | OBS-safe | https://sidecar.channelcheevos.com/overlay/widget/achievements?env=prod&id=catalog-preview-webkey |
| New Challenger | Widgets | OBS-safe | https://sidecar.channelcheevos.com/overlay/widget/challenger?env=prod&id=catalog-preview-webkey |
| Shoutouts | Widgets | OBS-safe | https://sidecar.channelcheevos.com/overlay/widget/shoutouts?env=prod&id=catalog-preview-webkey |
| Sims Chaos | Widgets | OBS-safe | https://sidecar.channelcheevos.com/overlay/widget/sims-chaos?env=prod&id=catalog-preview-webkey |
| Game Backlog Wheel | Widgets | OBS-safe | https://sidecar.channelcheevos.com/overlay/widget/game-backlog-wheel?env=prod&id=catalog-preview-webkey |
| YouTube Clip | Other | OBS-safe | https://sidecar.channelcheevos.com/youtube?env=prod&id=catalog-preview-webkey |
| Channel Redeems | Other | OBS-safe | https://sidecar.channelcheevos.com/channelredeem?env=prod&id=catalog-preview-webkey |
| Play Overlay | Other | OBS-safe | https://sidecar.channelcheevos.com/inplay?env=prod&id=catalog-preview-webkey |
| Valheim Status | Other | OBS-safe | https://sidecar.channelcheevos.com/overlay/widget/game-telemetry?fixture=valheim&env=prod&id=catalog-preview-webkey |
| TTS | Other | OBS-safe | https://sidecar.channelcheevos.com/tts?env=prod&id=catalog-preview-webkey |
| Svengoolie Voting | Other | OBS-safe | https://sidecar.channelcheevos.com/overlay/svengoolie/voting?env=prod&id=catalog-preview-webkey |
| Popup Video | Other | OBS-safe | https://sidecar.channelcheevos.com/popupvideo?env=prod&id=catalog-preview-webkey |
| Gru | Other | operator/utility | https://sidecar.channelcheevos.com/gru?env=prod&id=catalog-preview-webkey |
| Gru Lite | Other | operator/utility | https://sidecar.channelcheevos.com/grulite?env=prod&id=catalog-preview-webkey |
| Terminal Queue | Other | operator/utility | https://sidecar.channelcheevos.com/xterm-queue?env=prod&id=catalog-preview-webkey |
| Player 2 | Other | OBS-safe | https://sidecar.channelcheevos.com/player2?env=prod&id=catalog-preview-webkey |
| Kodi Now Playing | Self-hosted | self-hosted | https://channelcheevos.com/kodi |
| Suggestion Box | Self-hosted | self-hosted | https://channelcheevos.com/suggestion-box/catalog-preview-webkey |
| News Overlay | Self-hosted | self-hosted | https://channelcheevos.com/overlay/news |
| RetroAchievements | Self-hosted | self-hosted | https://channelcheevos.com/ra |
| Windrose Observability | Self-hosted | self-hosted | https://channelcheevos.com/windrose-observability |
Overlay ingress and legacy device sinks
| Surface | Owner route | Owner | Provider | Transport | Health signal | Validation |
|---|---|---|---|---|---|---|
| Overlay Webhook Emit | /api/emit/{webKey} |
ChannelCheevos overlay ingress controller | StreamerBot / sidecar / custom webhook senders | WebKey-scoped JSON webhook -> normalized overlay event | WebhookInboundSource validates the webkey, payload, and rate limit before publishing to the overlay bus only. | POST a valid overlay payload to /api/emit/{webKey}; invalid keys return 404 and rate limits return 429. |
| Floating Head Legacy Viewer | /floatinghead/{key} |
ChannelCheevos floating-head controller | legacy iPad/browser displays and slideshow sinks | Self-hosted HTML route with XHR polling | Viewer markup intentionally avoids fetch, promises, modules, and SignalR so old embedded browsers keep rendering. | GET /floatinghead/{key}; verify the shell polls /floatinghead/{key}/state and stays nonblank. |
| Floating Head State Poll | /floatinghead/{key}/state |
ChannelCheevos floating-head controller | legacy iPad/browser displays and slideshow sinks | No-store JSON polling endpoint | State responses set no-cache headers and return text, rev, gif, and mood for the current key. | GET /floatinghead/{key}/state and verify Cache-Control, Pragma, Expires, and state fields. |
| Floating Head State Update | /api/floatinghead/{key}/update |
ChannelCheevos floating-head controller | bots, agentic message side effects, and local helper tools | REST state update into IFloatingHeadStore | Update requests preserve existing state fields when omitted and auto-increment rev when no explicit rev is supplied. | POST text/gif/mood to /api/floatinghead/{key}/update; verify the next state poll reflects the new revision. |
| Floating Head Asset Fallback | /floatinghead/{key}/{file} |
ChannelCheevos floating-head controller | legacy iPad/browser displays and slideshow sinks | Per-key asset lookup with shared and embedded GIF fallback | Image requests search per-key files, shared files, hard default.gif, then return an embedded transparent GIF. | GET /floatinghead/{key}/missing.gif and verify an image/gif fallback instead of a blank page. |
Twitch relay and chat
| Surface | Owner route | Owner | Provider | Transport | Health signal | Validation |
|---|---|---|---|---|---|---|
| Streaming Platform Overview | /streaming-platform-overview |
ChannelCheevos Twitch cockpit | twitchlib / TwitchySharp | Blazor route + Twitch API state | Live console and audience state render for the active channel. | Open /streaming-platform-overview and verify the live console plus follower state render. |
| Events | /events |
ChannelCheevos event manager | twitch-relay / EventSub rules | Event manager route + Twitch relay configuration | Event rules and command reports render for authorized streamers. | Open /events and verify EventManager plus command reports are available. |
| Eventing Inspector | /eventing-inspector |
ChannelCheevos local eventing store | ChannelCheevos.Core.Messaging | Local JSONL event/checkpoint/dead-letter inspection | Local event, checkpoint, and dead-letter counts report healthy or degraded state. | Run an eventing smoke or publish a fake event, then inspect /eventing-inspector. |
| Chat Hub | /chatbot |
ChannelCheevos chat runtime | twitchbot / stream-elements | SignalR chathub + chatbot settings | Chatbot route owns chat runtime settings and the chat hub fans out inbound messages. | Send a fixture inbound message through chathub SendInbound and verify OnChatMessage fanout. |
| Twitch Relay Hub | /events |
ChannelCheevos Twitch relay | twitch-relay | SignalR twitchrelayhub + relay event envelope | Relay events can be replayed into operator event surfaces without exposing secrets. | Replay a fixture RelayEventEnvelope and verify route-specific event rendering. |
Kick OAuth, chat, and webhooks
| Surface | Owner route | Owner | Provider | Transport | Health signal | Validation |
|---|---|---|---|---|---|---|
| Kick Account Link | /accounts |
ChannelCheevos Accounts | PolyhydraGames.API.Kick / KickLib | OAuth route alias + Accounts provider card | Accounts renders the Kick focused card, auth status, connected identity, and copyable authorization URL without exposing client secrets. | Run AccountsDashboardMarkupTests and AccountsKickCardTests; verify /kick and /auth/kick/callback stay catalog-backed aliases. |
| Kick Auth Diagnostics | /api/kick/diagnostics/auth |
Kick diagnostics controller | KickConfigurationDiagnostics | AllowAnonymous GET config readiness endpoint | Reports enabled/auth/webhook/chat readiness plus missing setting names without returning Kick:ClientSecret. | GET /api/kick/diagnostics/auth or scripts/check-oauth-config.sh --provider kick. |
| Kick PKCE Authorization Probe | /api/kick/diagnostics/auth-url |
Kick diagnostics controller | KickLib OAuth generator + PkceStateStore | AllowAnonymous GET auth-url shape probe | Verifies authorization host, response type, opaque state, PKCE challenge, scope, and state-store round trip without returning authorizationUrl, verifier, challenge, or secret. | Run KickDiagnosticsControllerTests.GetAuthUrlDiagnostics_ReturnsAuthUrlProbeWithoutConfiguredSecret. |
| Kick Linked Account Probe | /api/kick/diagnostics/linked-account |
Kick diagnostics controller | PolyhydraGames.API.Kick token refresh + Kick linked account API | Authorize-protected GET probe using stored owner refresh token | Refreshes the account token and calls the configured Kick authenticated probe path, returning status/state/detail without exposing tokens. | Run KickDiagnosticsControllerTests around linked-account auth and KickLinkedAccountApiProbe tests. |
| Kick Webhook Intake | /api/kick/webhook |
Kick webhook controller | PolyhydraGames.API.Kick webhook parser + KickInboundSource | AllowAnonymous POST webhook with package signature/parser validation | Rejects unparsable webhooks, resolves channel metadata when present, falls back to configured channel key, and publishes accepted inbound envelopes. | Run KickWebhookControllerIntegrationTests; verify TryParseAsync rejection returns Unauthorized. |
| Kick Site Readiness | /site |
Site Kick readiness panel | KickConfigurationDiagnostics | Read-only site dashboard panel + diagnostics links | Shows auth, webhook config, chat, linked-token probe, and subscription-proof readiness states with explicit diagnostics links. | Verify SiteDashboard renders SiteKickReadinessPanel and data-smoke-id=site-kick-readiness. |
AI and memory
| Surface | Owner route | Owner | Provider | Transport | Health signal | Validation |
|---|---|---|---|---|---|---|
| AI Provider Setup | /accounts |
ChannelCheevos Accounts | Api.AI / OpenAI-compatible / Ollama | Accounts AI provider card + Ollama model preflight | Provider rows mask API keys, report endpoint/model shape, and expose the Ollama plus memory preflight action. | Run scripts/cc.sh diagnostics ai and verify accountsPreflightButtonPresent plus accountsMasksApiKeys are true. |
| AI / Automation Dashboard | /admin |
ChannelCheevos admin workbench | Api.AI / Loggy / Chop-It | Admin AI dashboard + Chop-It status readback | OpenAI-compatible, Ollama, RAG, and Chop-It automation readiness render as secret-safe status chips. | Open /admin, expand Surface map and admin workbench, then verify the AI / Automation tab renders ai-service-dashboard. |
| Chatbot Runtime | /chatbot |
ChannelCheevos chatbot runtime | Api.AI / ChannelCheevos chatbot services | Streamer chatbot route + settings view model | Runtime, identity, response rules, context sources, and model behavior stay reachable from one streamer route. | Open /chatbot and verify the runtime settings surface links to Chat Memory Insights and Site Settings. |
| Chatbot Memory Controls | /chat-memory-settings |
ChannelCheevos chatbot memory settings | Loggy / Qdrant / Ollama embeddings | Focused chatbot settings alias | Memory extraction, context window, and injected-memory controls render without repeating the full chatbot dashboard. | Open /chat-memory-settings and verify the header reads Chatbot Memory Controls. |
| Chat Memory Insights | /chat-memory |
ChannelCheevos chat memory inspector | ChatbotMemoryDatabase / RichMessage capture | Streamer memory insight route | Recent chat messages, RetroAchievements rich messages, and game filters render for the current channel. | Open /chat-memory and verify chat-memory-surface-map plus the current channel memory tables render. |
| Memory Wiki | /memory |
ChannelCheevos admin knowledge base | MemoryWikiCatalog / markdown corpus | Admin wiki route + published markdown catalog | Internal subject and daily-log markdown stays browseable behind admin authorization. | Open /memory as an admin and verify memory-wiki-primary plus the route context details render. |
Music and now playing
| Surface | Owner route | Owner | Provider | Transport | Health signal | Validation |
|---|---|---|---|---|---|---|
| Music Jukebox | /music |
ChannelCheevos music operator route | Spotify / cc-jukebox / cc-radio | Blazor route + Spotify APIs | Jukebox route renders; credentials remain on Accounts. | Open /music and verify music-jukebox-primary-task plus Now Playing render. |
| Spotify Account Setup | /accounts |
ChannelCheevos Accounts | Spotify | OAuth redirect + Spotify diagnostics endpoint | Spotify diagnostics endpoint reports auth/config readiness and Accounts renders the focused Spotify setup card. | Open /spotify and verify accounts-focus-spotify plus the focused contract strip render. |
| Spotify Now Playing Snapshot | /accounts |
ChannelCheevos Accounts | Spotify | Accounts now-playing card + server-side Spotify snapshot | Now Playing card reports connection, running state, last track, queue size, snapshot age, and refresh result. | Open /accounts and verify accounts-card-spotify-now-playing renders. |
| Jukebox Join Code | /Jukebox/{Code} |
ChannelCheevos jukebox route | Spotify / channel manager jukebox | Join-code route + JukeboxCurrentPlaying | Valid channel codes resolve a channel manager; invalid codes render jukebox-route-warning instead of failing. | Open /Jukebox/{CHANNEL_CODE} and verify jukebox-surface-map plus current track/search state render. |
| Sidecar Jukebox Browser Source | /overlay/base?profile=jukebox |
cc-sidecar | cc-sidecar / cc-jukebox / cc-radio | Sidecar base profile + browser-source URL catalog | Browser-source catalog advertises the jukebox base layout and queue/music overlay paths for OBS. | Verify docs/howto/stream-setup/browser-source-url-catalog.md contains overlay/base?profile=jukebox. |
| Now Playing API Smoke | /api/now-playing |
ChannelCheevos now-playing APIs | Spotify / Nugs / SoundCloud / Bandcamp / YouTube source adapters | Now-playing catalog, capability, policy, and snapshot endpoints | run-now-playing-smoke.sh exercises catalog, capabilities, policy, and snapshot endpoints with smoke credentials. | Run scripts/run-now-playing-smoke.sh after build artifacts exist. |
Terminal, TTS, and voice
| Surface | Owner route | Owner | Provider | Transport | Health signal | Validation |
|---|---|---|---|---|---|---|
| Pseudo Terminal Emit API | /api/terminal |
ChannelCheevos terminal controller | TerminalPipelineService / ChannelRewardBroadcaster | POST API + WebKey/OpenClaw API auth + channelrewardhub broadcast | Accepted requests create work items, append scrollback, and publish TerminalRenderPack events. | POST /api/terminal, then verify /api/terminal/scrollback and sidecar /xterm-queue receive the emitted line. |
| Terminal Local Mirror | /terminal-local |
ChannelCheevos Diagnostics Labs | TerminalScrollbackService / TerminalDetailService | Admin Blazor route + in-memory scrollback/detail services | Local mirror reloads shared scrollback and opens truth-layer details only on inspect. | Open /terminal-local and verify terminal-local-primary plus the inspect drawer flow render. |
| Sidecar Terminal Queue | /xterm-queue |
cc-sidecar | cc-sidecar terminal queue | channelrewardhub OnTerminalEvent + TerminalRenderPack | Sidecar queue displays structured command, summary, queue, telemetry, alert, and completion buckets. | Follow docs/howto/pseudo-terminal.md and validate POST /api/terminal -> /xterm-queue -> /terminal-local. |
| Terminal Display Configuration | channelrewardhub |
ChannelCheevos ChannelRewardHub | TerminalFeatureConfigService | SignalR config readback + OnTerminalConfigUpdated push | Display mode, debug mode, chrome, EPS, and filters persist per channel and republish to connected clients. | Run TerminalHubReconnectTests when live hub registration is available; source check ChannelRewardHub.GetTerminalConfig. |
| TTS Provider API | /api/tts |
ChannelCheevos TtsController | PolyhydraGames.Tts / ElevenLabs / Piper | Controller endpoints for status, voices, models, speak, and speak-url | Status reports preferred provider, selected provider, ElevenLabs configuration, subscription, and voice counts without returning API keys. | GET /api/tts/status; POST /api/tts/speak-url with a valid webkey when live playback is desired. |
| TTS Playback Hub | tts |
ChannelCheevos TtsHub | cc-sidecar TTS player | Typed SignalR hub events OnTtsStart, OnTtsOutput, and OnTtsEnd | TTS broadcasts record hub operation success/failure telemetry and include request id, provider, voice, text, audio, and volume. | Verify AddHubsMappingSetupExtensions maps tts and ITtsHub exposes OnTtsStart/OnTtsOutput/OnTtsEnd. |
| Streamer Output Provider Settings | /StreamerAdmin |
ChannelCheevos streamer settings | TTS settings + terminal settings | SettingsTts + TerminalSettings + ChannelSettingManagerModel | Channel-level TTS default volume and pseudo-terminal settings stay grouped with output-provider configuration. | Open streamer settings and verify Output Providers renders SettingsTts and TerminalSettings. |
Frotz station, state, and AI context
| Surface | Owner route | Owner | Provider | Transport | Health signal | Validation |
|---|---|---|---|---|---|---|
| Frotz Station | /frotz-station |
ChannelCheevos Core Frotz + cc-sidecar | cc-sidecar frotz-station profile | Blazor station shell + state API hydration + sidecar browser-source profile | Station route renders the current story lane, runtime status, command controls, and sidecar profile facts for an active channel. | Open /frotz-station and verify /api/FrotzState/GetState?webkey={webkey} hydrates current turn state. |
| Frotz Legacy Admin | /frotz |
ChannelCheevos Core Frotz | ChannelCheevos operator console | Blazor compatibility/admin controls + Gru hub | Legacy controls remain available for session start/restart, command entry, and compatibility with existing operator smoke checks. | Open /frotz; verify the page renders the source-backed Frotz contract strip and links to /frotz-station. |
| Frotz Public State API | /api/FrotzState/GetState?webkey={webkey} |
FrotzStateController | ChannelCheevos Core GruManager | WebKey-scoped HTTP GET state snapshot | Endpoint validates the webkey, clamps maxTurns, and returns running state, last turn, and recent parsed turns. | GET /api/FrotzState/GetState?webkey={webkey}&maxTurns=8; verify 400 for missing/invalid webkeys and 200 for an active channel. |
| Gru Realtime Hub | /gruhubapi |
GruHub | cc-sidecar / legacy Gru clients / ChannelCheevos Frotz pages | SignalR OnMessage and OnTurnState broadcast | GruManager publishes terminal lines and parsed turn DTOs through IGruHub after accepted commands and session output. | Connect to /gruhubapi with a webkey, send a Frotz command, and verify OnTurnState updates the station or sidecar surface. |
| Frotz AI And Chat Context | IFrotzContextProvider |
ChannelCheevos chat memory and command pipeline | OpenAI/Ollama chat services and Twitch chat commands | In-process context provider + command legality boundary | Frotz context exposes current room, recent turns, room memory, and legal command state without giving AI or chat direct process control. | Run the Frotz context, command legality, prompt builder, and Spottie Plays tests before changing AI/chat behavior. |
OpenClaw and API access
| Surface | Owner route | Owner | Provider | Transport | Health signal | Validation |
|---|---|---|---|---|---|---|
| OpenClaw Support Diagnostics | /api/openclaw |
ChannelCheevos OpenClaw status controller | OpenClaw / support automations | OpenClawApiKey-authenticated GET endpoints | Status, dependency health, health summary, metrics, diagnostics, and statistics endpoints stay read-only and support-first. | GET /api/openclaw/status, /api/openclaw/health/summary, and /api/openclaw/health/dependencies with OpenClawApiKey auth. |
| OpenClaw Approval-Gated Ops | /api/openclaw/ops |
ChannelCheevos OpenClaw ops controller | OpenClaw / terminal / TTS | OpenClawApiKey POST endpoints + X-OpenClaw-Confirm + idempotency + terminal/TTS side effects | Mutating queue, sync, and cache operations require confirmation, rate-limit through OpenClawOpsProtectionStore, and return X-Correlation-Id. | POST /api/openclaw/ops/queue/pause with X-OpenClaw-Confirm: CONFIRM and Idempotency-Key when an operator approves live mutation. |
| OpenClaw Operational Statistics | /api/openclaw/statistics |
ChannelCheevos OpenClaw statistics controller | OpenClaw / Twitch EventSub / channel feature diagnostics | OpenClawApiKey-authenticated GET endpoints over channel, chatbot, memory, uptime, Twitch connection, and EventSub diagnostics | Statistics endpoints expose aggregate channel/runtime health and EventSub registration summaries without requiring OpenClaw clients to scrape admin pages. | GET /api/openclaw/statistics/twitch/events with OpenClawApiKey auth; verify ready/blocked/partial EventSub counts and channel diagnostics fields. |
| OpenClaw Achievement Read APIs | /api/openclaw/cheevos |
ChannelCheevos OpenClaw cheevos controller | OpenClaw / ChannelCheevos achievement services | OpenClawApiKey-authenticated GET endpoints for achievement and viewer achievement data | Achievement stats and viewer recent-cheevo reads stay available to OpenClaw without granting mutation rights. | GET /api/openclaw/cheevos/stats and /api/openclaw/viewers/{channelRecordId}/recent with OpenClawApiKey auth. |
| OpenClaw Stream Celebration | /api/openclaw/stream |
ChannelCheevos OpenClaw stream controller | OpenClaw stream overlay / configured webhook target | OpenClawApiKey overlay readback + optional POST webhook publish | Overlay state is readable by default; celebration publish reports webhook configured/delivered status without making webhook delivery an implicit requirement. | GET /api/openclaw/stream/overlay; POST /api/openclaw/stream/celebrate only when OpenClaw:StreamWebhookUrl is intentionally configured. |
| OpenClaw Matrix Overlay Control | /api/openclaw/matrix |
ChannelCheevos OpenClaw matrix controller | OpenClaw matrix overlay / IMatrixControllerService | OpenClawApiKey GET/POST channel-scoped matrix settings and activation endpoints | Matrix settings, activation, and deactivation flow through IMatrixControllerService so overlay changes are explicit channel-scoped commands. | GET /api/openclaw/matrix/{channelId}/config, then POST activate/deactivate with OpenClawApiKey auth in an approved overlay session. |
| Scoped API Access Grants | /api/access-grants |
ChannelCheevos access grant controller | PolyhydraGames.ScopedAccess / Batocera resident agent | Authenticated request/approve/reject/revoke workflow + one-time access-key pickup | Access grants store requested/granted scopes, support Batocera device bootstrap, and avoid reissuing reusable keys unnecessarily. | Run BatoceraE2EHarnessTests for request, approval, one-time pickup, resolver, and revocation behavior. |
| WebKey Lifecycle | /api/webkeys |
ChannelCheevos webkey controller | WebKey auth / OpenClaw API key auth | Create, list, revoke, and set-default endpoints scoped to the authenticated identity | Key list hides full non-default values, generated keys carry scope and expiry, and both WebKey/OpenClaw callers can manage scoped credentials. | Verify WebKeysController requires WebKey or OpenClawApiKey auth and list responses only expose partial default key text. |
| Agentic Message Webhook | /api/agentic-message |
ChannelCheevos agentic message webhook | Codex/Hermes agents + side-effect pipeline + floating head | WebKey/OpenClawApiKey JSON webhook + reaction action factory + ChannelReward side effects | Accepted recommendations normalize raw/pseudo/chat text, preserve visibility flags, update floating head when enabled, and emit an agentic.message side effect. | POST /api/agentic-message with WebKey or OpenClawApiKey auth; verify accepted=true and side-effect emission in AgenticMessageWebhookController tests. |
Live scene and inplay automation
| Surface | Owner route | Owner | Provider | Transport | Health signal | Validation |
|---|---|---|---|---|---|---|
| OBS Production State Bridge | /api/ObsBridge |
ChannelCheevos OBS bridge controller | DesktopApps.OBS / desktop bridge | WebKey query + REST state publish/read | PublishState rejects missing or mismatched webkeys and GetLatestState returns the latest keyed OBS production state. | POST /api/ObsBridge/PublishState?webkey={webkey} from the trusted bridge, then GET /api/ObsBridge/GetLatestState?webkey={webkey}. |
| Visualizer Remote Control | /api/visualizer-control/{webkey}/commands |
ChannelCheevos visualizer control controller | MilkDrop visualizer sidecar / ChannelAppHub | WebKey-authenticated REST command dispatch + milkdrophub SignalR request | Route webkey must match request.webKey and accepted commands dispatch through IVisualizerControlHubService. | POST a VisualizerControlRequest with WebKey auth; verify RequestVisualizerControl reaches /milkdrophub. |
| Inplay Operator Control | /api/inplay/operator/control |
RetroArt in-play operator panel | ChannelCheevos GameHub state store | Admin-authenticated REST command + webkey-scoped shared state | Only site admins can enqueue allowlisted actions such as freeze, publish, refresh, and enrichment commands. | Open /retroart with a webkey and issue a control action; verify inplayOperatorControl appears in GameSharedState.Custom. |
| Sims Interaction Simulator | /api/sims-interactions |
ChannelCheevos Sims interactions controller | The Sims bridge / simshub | REST status/simulate endpoints + TheSimsHub broadcast | Manual operator actions normalize viewer/action payloads, update per-webkey state, and broadcast OnSimsInteractionUpdated. | POST /api/sims-interactions/simulate-action with a webkey; verify /simshub receives OnSimsInteractionUpdated. |
| Sims Command Outbox | /api/sims-interactions/outbox |
ChannelCheevos Sims command outbox controller | The Sims helper app | REST snapshot and claim queue | Helper clients can poll current command state and claim the next queued command without exposing unrelated channel state. | GET /api/sims-interactions/outbox?webkey={webkey}, then POST /api/sims-interactions/outbox/claim with the same webkey. |
Ikemen economy, interactions, and auctions
| Surface | Owner route | Owner | Provider | Transport | Health signal | Validation |
|---|---|---|---|---|---|---|
| Ikemen Viewer Identity Resolution | /api/ikemen/viewer-identity/provider-login |
ChannelCheevos Ikemen viewer identity controller | Api.Ikemen / LanceroMugen website | WebKey or OpenClawApiKey REST provider identity mapping | LanceroMugen sends an authenticated provider identity and receives the stable ChannelCheevos userId for later economy calls. | POST provider/providerUserId/source to /api/ikemen/viewer-identity/provider-login and verify userId plus linked/seen timestamps. |
| Ikemen Currency Context | /api/ikemen/currency/contexts/{contextId} |
ChannelCheevos Ikemen currency controller | Api.Ikemen / LanceroMugen economy | WebKey or OpenClawApiKey REST currency configuration | Context configuration defines labels, symbols, starting balances, grants, and interaction/auction costs without code changes. | POST currency config and costs to /api/ikemen/currency/contexts/{contextId}; verify the returned context config. |
| Ikemen Currency Balance | /api/ikemen/currency/contexts/{contextId}/users/{userId}/balance |
ChannelCheevos Ikemen currency controller | Api.Ikemen / LanceroMugen economy | WebKey or OpenClawApiKey REST balance read | Balance reads return available, reserved, total, labels, symbol, and active cost table for the resolved user. | GET the balance route after identity resolution and verify available/reserved/total fields. |
| Ikemen Currency Grants and Reservations | /api/ikemen/currency/contexts/{contextId}/users/{userId} |
ChannelCheevos Ikemen currency controller | Api.Ikemen / LanceroMugen economy | REST grant/reserve/capture/refund settlement workflow | Grant and reserve reject non-positive amounts; capture/refund settle reservation ids with reason defaults. | POST grant or reserve for a user, then POST reservations/{reservationId}/capture or refund. |
| Ikemen Interaction Catalog | /api/ikemen/interactions/contexts/{contextId} |
ChannelCheevos Ikemen interaction controller | Api.Ikemen / LanceroMugen economy | WebKey or OpenClawApiKey REST catalog read | Authenticated consumers can read the context-scoped interaction catalog without exposing command secrets. | GET /api/ikemen/interactions/contexts/{contextId} with WebKey or OpenClawApiKey auth. |
| Ikemen Interaction Request | /api/ikemen/interactions/request |
ChannelCheevos Ikemen interaction controller | Api.Ikemen / LanceroMugen economy | WebKey or OpenClawApiKey REST request -> signed command envelope | Requests reject missing user ids and return service-validated cost/cooldown results plus command envelopes. | POST an interactionId/contextId/userId payload and verify the response contains the request result. |
| Ikemen Command Validation | /api/ikemen/interactions/commands/validate |
ChannelCheevos Ikemen interaction controller | Api.Ikemen / LanceroMugen sidecar | Signed command envelope verification | Consumers validate signatures and expiry before applying effects, then report accept/reject outcomes. | POST a signed envelope to commands/validate, then POST commands/{commandId}/outcome. |
| Ikemen Collectible Minting | /api/ikemen/auctions/collectibles |
ChannelCheevos Ikemen auction controller | Api.Ikemen / LanceroMugen economy | WebKey or OpenClawApiKey REST collectible write | Collectible minting rejects empty payloads and keeps stream-native collectible records in the auction service. | POST a collectible payload and verify the minted collectible is returned. |
| Ikemen Auction Flow | /api/ikemen/auctions |
ChannelCheevos Ikemen auction controller | Api.Ikemen / LanceroMugen economy | REST create/bid/complete auction workflow | Auction creation rejects non-positive minimum bids; bids reject missing users or non-positive amounts. | POST an auction, POST {auctionId}/bids, then POST {auctionId}/complete. |
| Ikemen Viewer Inventory | /api/ikemen/auctions/contexts/{contextId}/users/{userId}/inventory |
ChannelCheevos Ikemen auction controller | Api.Ikemen / LanceroMugen economy | WebKey or OpenClawApiKey REST inventory read | Context-scoped inventory reads return collectibles assigned through completed auctions. | GET the inventory route for a known context/user after completing an auction. |
MCP bridge
| Surface | Owner path | Owner | Provider | Transport | Health signal | Validation |
|---|---|---|---|---|---|---|
| MCP Bridge Project | src/Mcp.ChannelCheevos |
Mcp.ChannelCheevos | Hermes / MCP agent clients | Standalone bridge project + README + feature doc | Project, tests, README, feature doc, config, and catalog files are present before live bridge smoke work. | Run scripts/cc.sh diagnostics mcp and verify projectPresent, testsProjectPresent, readmePresent, and featureDocPresent are true. |
| Runtime Tool Discovery | src/Mcp.ChannelCheevos/Program.cs |
Mcp.ChannelCheevos startup | ChannelCheevosToolCatalog | Startup publishes ChannelCheevosToolCatalog.All through the secure hub bridge | Runtime discovery publishes the canonical tool catalog without making operators inspect startup code. | Run scripts/cc.sh diagnostics mcp and verify catalogPublishedAtStartup is true. |
| Canonical Tool Catalog | src/Mcp.ChannelCheevos/Registration/ChannelCheevosToolCatalog.cs |
Mcp.ChannelCheevos tool catalog | MCP tools + scoped webkey actions | Read/write allowlisted tools with WebKeyScope classifications | Health, debug, message, event, terminal, TV, and Windrose tools stay registered in one catalog. | Run scripts/cc.sh diagnostics mcp and verify toolCount is at least 10 with zero missing required tools. |
| Secure Hub Bridge | src/Mcp.ChannelCheevos/Security/SecureHubConnection.cs |
Mcp.ChannelCheevos secure transport | ChannelCheevos SignalR | Scoped webkey handshake + audit-first connection | Live hub connectivity stays behind CC_BASE_URL, CC_HUB_PATH, CC_WEBKEY, and CC_WEBKEY_SCOPE without printing secrets. | Run scripts/cc.sh diagnostics mcp with bridge env present, then run live bridge smoke only after the source contract is ready. |
| MCP Source Readiness | scripts/check-mcp-readiness.sh |
ChannelCheevos diagnostics wrapper | mcp-readiness.summary.v1 | Secret-safe source-level readiness script | Sibling jobs can consume project/doc/catalog/tool counts plus env-presence booleans without knowing raw webkeys. | Run scripts/cc.sh diagnostics mcp --output-dir artifacts/integration-readiness and inspect mcp-readiness-summary.json. |
Account notifications and inbox
| Surface | Owner route | Owner | Provider | Transport | Health signal | Validation |
|---|---|---|---|---|---|---|
| Header Notification Gem | ShellHeader / AccountNotificationGem |
ChannelCheevos shared shell | Authenticated ChannelCheevos users | Blazor shell link + unread-count service lookup | Gem renders only for logged-in users with a resolved account id and reads only the unread count. | Run ShellHeaderRenderTests and verify shell-notification-gem plus shell-notification-unread-count. |
| Account Notification Inbox | /notifications |
AccountNotifications page | Current account inbox | Blazor route aliases /notifications and /account/notifications + direct service calls | Inbox lists only StreamerContext.UserId items, shows read/unread state, and marks items read through the account-scoped service. | Run AccountNotificationsRenderTests and open /notifications as the smoke owner after seeding. |
| Account Notification API | /api/account/notifications |
AccountNotificationsController | Authenticated browser/API clients | Authorize-protected REST list, unread-count, and mark-read endpoints | Controller resolves the ChannelCheevos identity id from the authenticated principal before listing or mutating notification state. | Run AccountNotificationsControllerTests for list, unread-count, mark-read, and missing-identity failure paths. |
| Notification Persistence | IAccountNotificationService |
ChannelCheevos data store | Shell, inbox, API, stream-event producer, and smoke seeder | IAccountNotificationService with SQL production registration and in-memory SQLite/test fallback | PostgreSQL owns account_notifications and account_notification_recipient_state with per-recipient unread indexes; SQLite/test flows use the in-memory service. | Run AccountNotificationSchemaTests, SqlAccountNotificationServiceTests, and AccountNotificationServiceTests. |
| Stream Event Notification Producer | IAccountNotificationEventProducer |
ChannelCheevos Twitch runtime and smoke seed endpoint | Twitch follow/unfollow and future financial gift sources | In-process producer boundary + smoke-only deterministic notification seed | Twitch follow callbacks publish account notifications through IAccountNotificationEventProducer; _smoke/seed?persona=owner creates a deterministic inbox row for browser smoke. | Run AccountNotificationEventProducerTests and SmokeSeedControllerTests before adding new notification producers. |
Game servers and admin
| Surface | Owner route | Owner | Provider | Transport | Health signal | Validation |
|---|---|---|---|---|---|---|
| Admin Game Servers | /admin |
ChannelCheevos admin workbench | API.GameServerInterop / Api.7DaysSharp / Valheim-Support | Admin Blazor route + capability-aware inventory | Approved, pending, disabled, and active-context server entries stay visible from the Manage shell. | Open /admin, expand Surface map and admin workbench, then verify the Game Servers tab renders the Manage shell. |
| Valheim Dashboard | /valheim |
ChannelCheevos Valheim admin route | Valheim-Support | Plugin package + SignalR agent | Server bridge publishes state and accepts admin actions. | Open /valheim and verify the read-only server readback status strip plus collapsed command panels render. |
| Valheim Commands | /valheimcommands |
ChannelCheevos Valheim live-ops route | Valheim-Support | Plugin package + command route | Command dashboard renders with server status. | Open /valheimcommands and verify chat/warning controls plus collapsed server stats render. |
Sidecar route smoke contract
| Route | Category | Status | Path | Probe support | Smoke manifest |
|---|---|---|---|---|---|
| Stream Start | Retro | OBS-safe | retrostart |
SidecarSmoke | required |
| Be Right Back | Retro | OBS-safe | retrobrb |
SidecarSmoke | required |
| Stream End | Retro | OBS-safe | retroend |
SidecarSmoke | required |
| Text Adventure | Retro | OBS-safe | textadventure |
SidecarSmoke | catalog only |
| Now Playing | Music | OBS-safe | music |
SidecarSmoke | required |
| Queue | Music | OBS-safe | queue |
SidecarSmoke | required |
| Chat | Chat | OBS-safe | chat |
SidecarSmoke | required |
| Overlay | Canonical base layouts | OBS-safe | overlay |
SidecarSmoke | catalog only |
| Modern Base Layout | Canonical base layouts | OBS-safe | overlay/base?profile=modern |
SidecarSmoke | required |
| Retro Base Layout | Canonical base layouts | OBS-safe | overlay/base?profile=retro |
SidecarSmoke | required |
| Jukebox Base Layout | Canonical base layouts | OBS-safe | overlay/base?profile=jukebox |
SidecarSmoke | required |
| Coding Base Layout | Canonical base layouts | OBS-safe | overlay/base?profile=coding |
SidecarSmoke | required |
| Frotz Base Layout | Canonical base layouts | OBS-safe | overlay/base?profile=frotz |
SidecarSmoke | required |
| Frotz Station Base Layout | Canonical base layouts | OBS-safe | overlay/base?profile=frotz-station |
SidecarSmoke | required |
| Retro Layout | Canonical base layouts | OBS-safe | overlay/retro |
SidecarSmoke | catalog only |
| Arcade Layout | Canonical base layouts | OBS-safe | overlay/arcade |
SidecarSmoke | catalog only |
| Modern Layout | Canonical base layouts | OBS-safe | overlay/modern |
SidecarSmoke | catalog only |
| Kodi TV Layout | Canonical base layouts | OBS-safe | overlay/kodi |
SidecarSmoke | catalog only |
| Active Users QR | Widgets | OBS-safe | active-users-qr |
SidecarSmoke | catalog only |
| QR Code Center | Widgets | OBS-safe | qr-code-center |
SidecarSmoke | required |
| Chat Widget | Widgets | OBS-safe | overlay/widget/chat |
SidecarSmoke | required |
| Game Info | Widgets | OBS-safe | overlay/widget/game-info |
SidecarSmoke | required |
| QR Code | Widgets | OBS-safe | overlay/widget/qr |
SidecarSmoke | catalog only |
| Status | Widgets | OBS-safe | overlay/widget/status |
SidecarSmoke | catalog only |
| Achievements | Widgets | OBS-safe | overlay/widget/achievements |
SidecarSmoke | required |
| New Challenger | Widgets | OBS-safe | overlay/widget/challenger |
SidecarSmoke | required |
| Shoutouts | Widgets | OBS-safe | overlay/widget/shoutouts |
SidecarSmoke | required |
| Sims Chaos | Widgets | OBS-safe | overlay/widget/sims-chaos |
SidecarSmoke | required |
| Game Backlog Wheel | Widgets | OBS-safe | overlay/widget/game-backlog-wheel |
SidecarSmoke | required |
| YouTube Clip | Other | OBS-safe | youtube |
SidecarSmoke | catalog only |
| Channel Redeems | Other | OBS-safe | channelredeem |
SidecarSmoke | required |
| Play Overlay | Other | OBS-safe | inplay |
SidecarSmoke | required |
| Valheim Status | Other | OBS-safe | overlay/widget/game-telemetry?fixture=valheim |
SidecarSmoke | required |
| TTS | Other | OBS-safe | tts |
SidecarSmoke | required |
| Svengoolie Voting | Other | OBS-safe | overlay/svengoolie/voting |
SidecarSmoke | required |
| Popup Video | Other | OBS-safe | popupvideo |
SidecarSmoke | catalog only |
| Gru | Other | operator/utility | gru |
SidecarSmoke | catalog only |
| Gru Lite | Other | operator/utility | grulite |
SidecarSmoke | catalog only |
| Terminal Queue | Other | operator/utility | xterm-queue |
SidecarSmoke | required |
| Player 2 | Other | OBS-safe | player2 |
SidecarSmoke | catalog only |
Resident agents and hubs
| Agent | Owner | Server hub | Canonical hub | Compatibility hub | Alias policy | Status source | Contract | Last-seen fields | Recovery |
|---|---|---|---|---|---|---|---|---|---|
| Batocera Agent | ChannelCheevos.BatoceraAgent | BatoceraAgentHub |
batocera-agent |
hubs/batocera-agent |
Permanent until deployed Batocera agents are inventoried and confirmed migrated. | /bff/batocera/devices?channelKey={channelKey} |
BatoceraDeviceSummary | RegisteredAtUtc, LastSeenAtUtc, IsActive, ConnectedAtUtc, LastEvent, LastError | /game-integrations#batocera |
| Media Launch Agent | ChannelCheevos.StreamBoxAgent | MediaLaunchAgentHub |
media-launch-agent |
hubs/media-launch-agent |
Preserve until media launch agent configs are inventoried and canonicalized. | /bff/media-launch/devices?channelKey={channelKey} |
MediaLaunchDeviceSummary | RegisteredAtUtc, LastSeenAtUtc, IsActive, ConnectedAtUtc, LastEvent, LastError | /media-launch |
| Valheim Server Bridge | Valheim-Support | ValheimServerHub |
valheim-server |
hubs/valheim-server |
Preserve until deployed Valheim server receivers are confirmed on the canonical route. | /valheim |
SignalR server status events | ConnectedAtUtc, operation success/failure telemetry, last server payload | /valheim |
| Windrose State Bridge | Windrose package / sidecar | WindroseHub |
windrose-state |
hubs/windrose-state |
Preserve until all sidecar receivers are confirmed on the canonical route. | /windrose-observability |
SignalR state stream | sidecar health, plugin version, recent events, failed-command diagnostics | /windrose-observability |
| Kodi Hub | PolyhydraGames.Kodi.API / cc-sidecar | KodiHub |
kodihub |
- |
- | /kodi |
Kodi hub state | media title, playback state, sidecar reachability | /kodi |