docs: record live Twitch concept milestone
This commit is contained in:
@@ -0,0 +1,70 @@
|
|||||||
|
_model: devlog-entry
|
||||||
|
---
|
||||||
|
schema_version: 1
|
||||||
|
---
|
||||||
|
title: Twungeon reaches a live Twitch concept milestone
|
||||||
|
---
|
||||||
|
date: 2026-08-17
|
||||||
|
---
|
||||||
|
author: Codex and Christopher Chambers
|
||||||
|
---
|
||||||
|
summary: Twungeon moved from a local proof of concept to a live Twitch-connected deployment with broadcaster OAuth, Extension identity sharing, Channel Points resurrection, a focused viewer control panel, and an authenticated spawn button.
|
||||||
|
---
|
||||||
|
tags: implementation, concept validation, deployment, Twitch, Twitch Extension, OAuth, Channel Points, Twurple, Cloudflare, testing
|
||||||
|
---
|
||||||
|
source_commit: df984690cedf84fc58d3eb6e2000d2df567a8d5d
|
||||||
|
---
|
||||||
|
body:
|
||||||
|
|
||||||
|
Twungeon is now running as a live Twitch-connected concept on the
|
||||||
|
[Labyricorn Twitch channel](https://www.twitch.tv/labyricorn). The deployed
|
||||||
|
service connects Twurple chat and EventSub to the broadcaster account, verifies
|
||||||
|
Twitch Extension identity on the server, and serves the Extension through the
|
||||||
|
public Cloudflare tunnel at `https://twungeon.labyricorn.com`.
|
||||||
|
|
||||||
|
The authentication path required more than supplying a static token. Twungeon
|
||||||
|
now provides a confidential OAuth authorization-code flow with state
|
||||||
|
validation, checks that Twitch returned the configured broadcaster and required
|
||||||
|
scopes, stores access and refresh credentials outside the repository with
|
||||||
|
restricted permissions, and persists refreshed credentials atomically. The
|
||||||
|
Extension exchanges its signed Twitch JWT for a short-lived Twungeon session;
|
||||||
|
the shared Extension secret remains server-side.
|
||||||
|
|
||||||
|
The first setup attempt exposed several integration mismatches. The original
|
||||||
|
Twitch application had been registered as a public client before the callback
|
||||||
|
endpoint existed, so live server authorization required a new confidential
|
||||||
|
application and the exact HTTPS `/oauth/callback` redirect. Enabling identity
|
||||||
|
linking also made a privacy notice mandatory before the Extension version could
|
||||||
|
advance. Both requirements are now reflected in the implementation and operator
|
||||||
|
documentation.
|
||||||
|
|
||||||
|
The first live Extension view rendered the complete broadcast game instead of
|
||||||
|
a compact control surface. The shared frontend now switches to a controller-only
|
||||||
|
layout at `/extension`, while `/` remains the full game view used by the stream.
|
||||||
|
Cloudflare also continued serving an older JavaScript bundle during testing;
|
||||||
|
static responses now use `Cache-Control: no-store`, and the Extension loads a
|
||||||
|
versioned script URL to force the current controller code.
|
||||||
|
|
||||||
|
Spawning revealed one final usability gap. Chat `!spawn` was not sufficient for
|
||||||
|
the broadcaster because a channel owner cannot follow their own channel, and
|
||||||
|
the Extension offered no direct alternative. The control panel now includes a
|
||||||
|
**Spawn character** button backed by an authenticated server endpoint. It uses
|
||||||
|
the verified Twitch viewer ID, applies the normal follower rule, and treats the
|
||||||
|
configured broadcaster as eligible. The same eligibility correction also
|
||||||
|
allows broadcaster chat spawning.
|
||||||
|
|
||||||
|
The current deployment reports healthy with the Twitch adapter ready. Viewers
|
||||||
|
can authorize their identity, spawn from the Extension, and use the movement,
|
||||||
|
attack, heal, and pass controls for their own character. The configured custom
|
||||||
|
Channel Points reward drives resurrection through EventSub. The final automated
|
||||||
|
run passed linting, strict type checking, 24 domain tests, 10 integration and
|
||||||
|
multi-viewer tests, and the production build.
|
||||||
|
|
||||||
|
This establishes the live interaction concept, but it is not a claim that every
|
||||||
|
MVP acceptance gate is complete. Broader real-viewer, multi-viewer, usability,
|
||||||
|
fault-injection, soak, and independent-operator evidence remains to be recorded.
|
||||||
|
Game state is still intentionally in memory, so restarting the service starts a
|
||||||
|
new run.
|
||||||
|
|
||||||
|
The live Twitch integration and spawn-control milestone are recorded in
|
||||||
|
[commit `df984690cedf84fc58d3eb6e2000d2df567a8d5d`](https://git.labyricorn.com/Labyricorn/Twungeon/commit/df984690cedf84fc58d3eb6e2000d2df567a8d5d).
|
||||||
Reference in New Issue
Block a user