From 9611cee199e14b528e482dd10be0a8e5486f2908 Mon Sep 17 00:00:00 2001 From: gramps Date: Thu, 5 Nov 2026 15:08:53 -0800 Subject: [PATCH] =?UTF-8?q?docs(steam):=20record=20the=20real=20onboarding?= =?UTF-8?q?=20state=20=E2=80=94=20a=20wait=20on=20Valve,=20not=20a=20task?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The docs described Steamworks onboarding as pending work. It is pending VALVE: the partner account exists, identity verification is under review, and the tax interview is in their queue with a quoted turnaround of up to 30 business days. No app IDs are assigned, no store page exists, and Release entitlement therefore still fails closed — by design. Distribution.md §2 becomes a status table plus the critical path computed from Valve's own published windows (30 business days verification → fee/app IDs → up to 12 business days store review → page public ≥2 weeks before release → up to 12 business days build review). Earliest realistic launch: early-to-mid February 2027, leaving ~7 weeks before the 2027-04-01 launch price ends. Nothing in this blocks the code; commercial.md, TASKS 54 and HANDOFF now say so instead of implying Steam is an outstanding coding task. --- Distribution.md | 39 ++++++++++++++++++++++++++------------- HANDOFF.md | 4 ++++ TASKS.md | 2 +- docs/ai/commercial.md | 5 +++++ 4 files changed, 36 insertions(+), 14 deletions(-) diff --git a/Distribution.md b/Distribution.md index 3df9888..88c55b1 100644 --- a/Distribution.md +++ b/Distribution.md @@ -62,19 +62,32 @@ on the partner dashboard — the dashboard's Downloads page only re-offers the S | Partner support | `help.steampowered.com/en/wizard/HelpWithPublishing` | | Steamworks.NET (managed wrapper) | `nuget.org/packages/Steamworks.NET` | -1. **Steamworks account** → onboarding (NDA, identity, company details, tax interview, payout bank, - then the **$100 Steam Direct fee** per app). The store page cannot be configured before the fee. -2. **App IDs.** One paid app and its associated free Demo. The Demo has its own App ID; it checks - ownership of the paid app with `BIsSubscribedApp(paidAppId)`. -3. **Builds.** Keep one codebase. Steam gives the Demo a separate release checklist/build setup; - shared depots can avoid duplicating common files once the paid app is released. -4. **Steamworks SDK.** `./scripts/steam-sdk.sh ~/Downloads/steamworks_sdk_165.zip` extracts - `steam_api64.dll` from `sdk/redistributable_bin/win64/` into `steam/` (gitignored) and stages - `steam_appid.txt` = 480 — Valve's Spacewar app, so `SteamAPI.Init()` works locally before - LlamaCasty has an App ID. Add `--contentbuilder` on the machine that uploads a depot. The csproj - copies the DLL **beside the exe** (`Link`) with `ExcludeFromSingleFile`, and copies - `steam_appid.txt` in Debug only — never into a depot. The managed side is the `Steamworks.NET` - package (`SteamApps.BIsSubscribedApp`). +### Status (updated 2026-11-05 — this is a WAIT on Valve, not a task of ours) + +| Step | State | +|---|---| +| Partner account created | ✅ done by the creator | +| Identity verification | ⏳ **pending** — Valve reviewing | +| Tax interview | ⏳ submitted; Valve quotes **up to 30 business days** to review | +| $100 Steam Direct fee (per app) | not yet — a store page cannot be configured before it | +| App IDs (paid app + free Demo) | **not yet assigned** | +| Store page | not created | +| Build review | not started | + +**Critical path from 2026-11-05**, using Valve's own published windows: + +1. identity + tax review — up to **30 business days** (~6 calendar weeks) → mid-December +2. fee paid, app IDs assigned, store page built and submitted +3. store page review — **up to 12 business days** (Valve's current backlog; docs still say 3–5) +4. page public **≥2 weeks before release** (Valve's rule) +5. build review — **up to 12 business days** + +**Earliest realistic launch: early-to-mid February 2027.** The launch price ends 2027-04-01, so there +is roughly seven weeks of buffer — *provided* verification clears in the window Valve quotes. If it +slips, the promo date is the thing to move (see `docs/ai/commercial.md`), not the code. + +Nothing below can start until step 1 clears; none of it blocks the app work. + 5. **Store page** configured and made public **two weeks before release** — Valve's rule, and it is the window where wishlists accumulate. diff --git a/HANDOFF.md b/HANDOFF.md index e59581f..18ecf99 100644 --- a/HANDOFF.md +++ b/HANDOFF.md @@ -25,6 +25,10 @@ - Open loop: `32·4` is proven by construction only — kill ffmpeg mid-recording and play the file. - Do not push absent a checkpoint request. +- **Steam is a wait, not a task:** partner account exists, identity verification pending, tax review in + Valve's queue (up to 30 business days). No app IDs, no store page, Release entitlement still fails + closed. Earliest realistic launch early-to-mid February 2027 — see `Distribution.md` §2. + ## Landmines - **The preview pane draws frame-source layers from a whitelist of DataTriggers.** A layer type with no diff --git a/TASKS.md b/TASKS.md index a805e1d..31000d0 100644 --- a/TASKS.md +++ b/TASKS.md @@ -57,7 +57,7 @@ blocker; the smallest slice is 32·4 (fragmented MP4 on the record block). | 39·2 | ☐ | YPP slice 2: Analytics scopes, watch-hours/Shorts velocity + ETA | [`task-39`](TASKS/task-39-ypp-journey-tracker.md) | | 49 | ❌ | Chat profanity filter — **retired 2026-11-05**: YouTube owns moderation (blocked words + hold for review run before the API). Replaced by not rendering YouTube's moderation markers (tombstones / no-display events) | [`task-49`](TASKS/task-49-chat-profanity-filter.md) | | 50 | ☐ | One-button publish of the local recording (resumable upload) | [`task-50`](TASKS/task-50-publish-recording.md) | -| 54 | 🔶 | Freemium: EULA + privacy shipped; free Steam Demo and paid app use one codebase; paid app ID and Steam Demo setup still pending | [`task-54`](TASKS/task-54-marcom-free-merch.md) | +| 54 | 🔶 | Freemium: EULA + privacy shipped; one codebase for free Demo + paid app. **Blocked on Valve**: identity verification pending, tax review up to 30 business days; app IDs, store page and build review all follow | [`task-54`](TASKS/task-54-marcom-free-merch.md) | | — | 🔶 | **Steam ownership** — `BIsSubscribedApp(paidAppId)` + Debug fake + app-wide `IsAppOwned`; paid app ID awaits Steamworks | [`commercial`](docs/ai/commercial.md) | | — | ❌ | **Polar subscription path** — retired 2026-11-01 with the one-price model. Design kept in `decisions.md`, not built | [`decisions`](docs/ai/decisions.md) | | — | ✅ | **OutputProfile gate** — resolver + `EncoderOptions` wiring (`Models/OutputProfile.cs`, one ffmpeg/two outputs, dev override); higher tiers follow `IsAppOwned` | [`commercial`](docs/ai/commercial.md) | diff --git a/docs/ai/commercial.md b/docs/ai/commercial.md index 63b35ce..bca555f 100644 --- a/docs/ai/commercial.md +++ b/docs/ai/commercial.md @@ -75,6 +75,11 @@ the purchase funnel. Both use the same code. The demo checks whether the current the paid app, then exposes the higher output tiers. The app-wide `IsAppOwned` value is the binary ownership result used by later feature checks. +- **Steamworks status (2026-11-05):** partner account created; **identity verification pending** and the + tax interview is in Valve's queue (they quote up to **30 business days**). No app IDs are assigned and + no store page exists yet, so the Release build still fails closed on entitlement — by design. Earliest + realistic launch is early-to-mid February 2027; the 2027-04-01 launch-price deadline therefore has + ~7 weeks of buffer. Detail: [`Distribution.md`](../../Distribution.md) §2. - **Steam owns the purchase.** The demo calls `BIsSubscribedApp(paidAppId)` after `SteamAPI.Init`, behind `IEntitlement` (`Services/Entitlement/`). It is a local check against Steam's own state — no server, key, lease, or LlamaCasty account.