docs(steam): record the real onboarding state — a wait on Valve, not a task
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.
This commit is contained in:
+26
-13
@@ -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.
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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) |
|
||||
|
||||
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user