101 lines
2.8 KiB
Markdown
101 lines
2.8 KiB
Markdown
# GameCult Access Implementation Plan
|
|
|
|
## What this file is
|
|
|
|
This file is the forward plan and active hypothesis ledger for GameCult Access.
|
|
|
|
It is not the canonical shared architecture note. That lives in
|
|
`docs/architecture.md`.
|
|
|
|
If the code or the architecture note disagrees with this plan, trust the code
|
|
and the architecture note first, then fix this file.
|
|
|
|
## Current machine
|
|
|
|
There is no landed auth machine here yet.
|
|
|
|
What exists right now is:
|
|
|
|
- the extracted shared architecture note
|
|
- app-binding notes for Repixelizer and StreamPixels
|
|
- explicit state/doctrine scaffolding so the plan does not immediately turn into
|
|
soup
|
|
|
|
## Primary objective
|
|
|
|
Build a reusable `gamecult_access` layer that can:
|
|
|
|
- own provider OAuth and identity linking
|
|
- issue signed local sessions
|
|
- refresh Discord and Patreon entitlements
|
|
- evaluate per-app capability rules
|
|
- stay separate from app-domain data
|
|
|
|
## Current priorities
|
|
|
|
### 1. Lock the shared boundary
|
|
|
|
Goals:
|
|
|
|
- keep the shared layer scoped to auth/control-plane machinery
|
|
- keep app-domain data in app-owned stores
|
|
- keep app profiles thin and explicit
|
|
|
|
### 2. Prefer embedded-package mode first
|
|
|
|
Goals:
|
|
|
|
- define the reusable package/module seam
|
|
- avoid a dedicated shared service until a second real app proves the need
|
|
- keep initial blast radius small
|
|
|
|
### 3. Make Repixelizer the first binding
|
|
|
|
Goals:
|
|
|
|
- gate hosted access and queue submission through local sessions
|
|
- attach queue ownership to `account_id` and `session_id`
|
|
- preserve the existing hosted GUI and queue runtime
|
|
|
|
### 4. Keep StreamPixels separate where it matters
|
|
|
|
Goals:
|
|
|
|
- let StreamPixels reuse auth/control-plane machinery
|
|
- keep viewer profiles, creator memberships, connector creds, and audience data
|
|
in StreamPixels
|
|
|
|
## Proposed phases
|
|
|
|
### Phase 1: Shared package scaffold
|
|
|
|
- create package/module boundaries for:
|
|
- provider adapters
|
|
- signed session issuance/verification
|
|
- linked identity persistence interfaces
|
|
- entitlement refresh/evaluation
|
|
- capability rule evaluation
|
|
|
|
### Phase 2: Repixelizer binding
|
|
|
|
- integrate the shared layer into the hosted demo
|
|
- gate `POST /api/jobs`
|
|
- gate per-job read/cancel/event routes by local session ownership
|
|
|
|
### Phase 3: StreamPixels control-plane fit check
|
|
|
|
- map the shared access layer onto StreamPixels creator/operator auth seams
|
|
- explicitly reject audience-data centralization
|
|
|
|
### Phase 4: Shared-store decision
|
|
|
|
- only after two real bindings exist, decide whether auth/control-plane state
|
|
should stay embedded or move into a shared service/store
|
|
|
|
## Guardrails
|
|
|
|
- do not let auth reuse become data mixing
|
|
- do not build a central service first just because it sounds grand
|
|
- do not duplicate the shared architecture note into app profiles
|
|
- keep one clear hypothesis per pass
|
|
- commit completed work before the planning notes start breeding
|