docs(distribution): Steam is the only channel — the zip, winget and the Store are dead
The site said "Coming soon to Steam" while the app docs still said direct download plus winget primary with Steam parked. One of them had to move, and the creator's ruling is Steam exclusive: a free app on Steam with the paid edition as a Steam DLC, and the $10/month plan sold off-Steam by Polar. Records the constraint that shapes the code, not just the prose: - Steamworks requires in-app purchases to use the Steam Wallet (Microtransactions doc, quoted in commercial.md), so the monthly is *stated*, never *sold*, inside a Steam build; the lifetime is plain DLC bought on the store page and read with BIsDlcInstalled. - Entitlement is `steamDlcOwned || polarKeyValid`, both resolving to one OutputProfile. steam_api64.dll ships beside the exe and is a functional dependency, not the rejected "IP protection" native DLL — without it DLC ownership cannot be read. Launched without Steam, the app falls back to the free profile rather than refusing to start. - Signing is moot: Steam installs never meet SmartScreen. Artifact Signing stays on the shelf for the day a non-Steam download exists. Year-one fixed cost is ~$115. - The exe rename must land before the first depot upload — Steamworks warns about renaming a live exe. Distribution.md is rewritten to SteamPipe mechanics (publish output, depot, steamcmd, DLC wiring, clean-account purchase/refund test). product.md, decisions.md (a new "Steam exclusive" entry with every dead vector), TASKS.md (Steamworks entitlement row, Steam packaging row), ai.md, index.md and the TASK 48 banner follow. MyMistakes.md gains the Steam rules that cost real time today: installs skip SmartScreen, updates are free, the Wallet rule, and the recurring-billing caveat.
This commit is contained in:
@@ -23,6 +23,30 @@ the subsystem files. This is the graveyard with cause of death.
|
||||
remote is Gitea). The route is a separate **`llamacasty-releases`** Gitea repo push-mirrored to a
|
||||
public GitHub repo: issues and assets public, code private, one publish direction.
|
||||
|
||||
## Distribution — Steam exclusive (2026-10-31, final)
|
||||
|
||||
**Steam is the only vector.** A free app on Steam with the paid edition as a Steam **DLC**; the
|
||||
monthly plan is sold outside Steam and never purchasable in a Steam build. Live rules:
|
||||
[`commercial.md`](commercial.md).
|
||||
|
||||
**Why the other vectors died, all on the same day:**
|
||||
|
||||
- **Direct download + winget** (the plan of that morning) — a zip on a second Gitea repo mirrored to
|
||||
public GitHub, hash-pinned into winget. Superseded because Steam supplies delivery, stats,
|
||||
discovery, install trust and updates in one move, and because an unsigned zip meets SmartScreen on
|
||||
every single release while a Steam install never meets it at all.
|
||||
- **Microsoft Store** — was free, and free is not the same as wanted. It was the last thing keeping
|
||||
a Microsoft account, an MSIX pipeline and a publisher line in the plan.
|
||||
- **Azure Artifact Signing** — never needed once Steam delivers the install. Kept on the shelf for
|
||||
the day a non-Steam download exists.
|
||||
- **The public `llamacasty-releases` repo** survives only as the **issue tracker**; it holds no
|
||||
binaries, no manifest and no version file.
|
||||
|
||||
**The constraint that shapes the app:** Steamworks requires in-app purchases to use the **Steam
|
||||
Wallet**. Therefore the monthly is *stated*, never *sold*, inside the Steam build — no checkout, no
|
||||
price, no payment fields. The lifetime is plain DLC bought on the store page, so it needs no
|
||||
transaction code at all.
|
||||
|
||||
## Support — decided 2026-10-31
|
||||
|
||||
- **No training service, no helpdesk, no SLA.** Email, best effort, refunds on request without
|
||||
|
||||
Reference in New Issue
Block a user