Four things derived this session superseded what the plan said twenty-four hours earlier,
and the docs are corrected where each one died:
**Licensing needs no server.** Polar's customer-portal endpoints authenticate on the key
itself plus the public organization_id; the org access token is only needed to create
products. Channel binding rides in `conditions: {channel_id}`, re-checked on every
validate — so the "claim page" (a hosted OAuth flow that wrote the UC id onto the key)
and the key database it implied are deleted. Device management, key rotation and
subscription auto-revocation are Polar's; four states, one lease, no callback endpoint.
**Signing is deferred until two subscribers.** It never removes the day-one SmartScreen
warning (EV's instant-bypass died in 2024), so buying it before revenue buys only the
publisher line. Renamed to Azure Artifact Signing, $9.99/mo Basic, and it requires a
paid Azure subscription. Year-one fixed cost drops from ~$135 to ~$15.
**The Store account is free.** Microsoft waived the $19 individual fee and removed the
$99 company fee in May 2026, which makes the Store the only zero-cost route to a
Microsoft-signed install — the free answer to SmartScreen, noted beside the paid one.
**Support is a filter, not a promise.** Email, best effort, no SLA, refunds on request
without argument; no training service, no helpdesk. A repeated question becomes a
training video on @llamacasty, which is content and monetization instead of a ticket.
GitHub issues on the releases repo are the deliberate friction.
Also settled: binaries live in a second Gitea repo (`llamacasty-releases`) push-mirrored
to a public GitHub repo — issues and assets public, code private, one publish direction
(a git mirror carries refs, not GitHub Release assets); `@llamacasty` is
standard-verified with intermediate features, so live streaming, >15 min uploads and
custom thumbnails work today and no SIM or ID is needed; and OAuth comes out of Testing
mode by publishing the app (100-user lifetime cap, no 7-day token death).
TASKS.md now opens with the four-day surge slice — artifact shape, output gate,
entitlement seam, real-machine day — because those are what the first public release
waits on. HANDOFF.md rewritten. MyMistakes.md gains the Polar recipe and the
"verify means three different things" entry. MARCOM.md gains the support→content loop
and the surface roles.
162 lines
11 KiB
Markdown
162 lines
11 KiB
Markdown
# Decisions log — retired paths, kept so they are not re-litigated
|
||
|
||
One dated line per decision that **no longer governs**, plus the reason it died. Read only when
|
||
you are about to re-open one of them. **Live commercial rules (prices, entitlement, channels,
|
||
signing, support, promo) are in [`commercial.md`](commercial.md)**; the other live rules live in
|
||
the subsystem files. This is the graveyard with cause of death.
|
||
|
||
## Commercial mechanics — died 2026-10-31 (same week they were written)
|
||
|
||
- **The licence "claim page" is dead.** The binding was going to be an OAuth web page that wrote
|
||
the buyer's `UC…` channel ID onto the key, because we assumed binding needed a browser. Polar's
|
||
**`conditions`** object does it natively: the client calls `activate` with
|
||
`conditions: { channel_id }` and repeats it on every `validate`. **No claim page, no hosted
|
||
endpoint, no key database, no OAuth redirect URI.**
|
||
- **"Signing is a year-one cost" is dead.** Artifact Signing is **deferred until two subscribers**
|
||
— it never removes the day-one SmartScreen warning, so buying it before revenue buys nothing but
|
||
the publisher line. It is also now called **Azure Artifact Signing** and **requires a paid Azure
|
||
subscription**.
|
||
- **"The Store developer account costs $19" is dead.** Microsoft waived the individual fee (and
|
||
removed the $99 company fee in May 2026), which makes the Store the **only zero-cost route to a
|
||
Microsoft-signed install** — the free answer to SmartScreen.
|
||
- **"Binaries on GitHub Releases" was half a plan.** There was no GitHub presence at all (the only
|
||
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.
|
||
|
||
## Support — decided 2026-10-31
|
||
|
||
- **No training service, no helpdesk, no SLA.** Email, best effort, refunds on request without
|
||
argument. A repeated question becomes a training video on `@llamacasty`, which is content and
|
||
monetization rather than a ticket. See `commercial.md` → Support and `MARCOM.md` → support →
|
||
content loop.
|
||
- **Rejected as support surfaces:** a paid Discord, live chat, onboarding calls, a ticketing system.
|
||
GitHub issues on the releases repo is the deliberate filter — an account is enough friction to
|
||
keep the list short.
|
||
|
||
## Monetization
|
||
|
||
### 2026-10-30 — freemium replaces free-forever (creator ruling)
|
||
|
||
Free tier caps output at **720p30**; **$10/month** or **$400 lifetime** unlocks the higher tiers.
|
||
Reverses the 2026-10-08 free-forever ruling below, which was a *current decision*, not an absolute.
|
||
The live detail — pixel budget, stream + recording, channel binding, lease, notice cadence — is in
|
||
[`commercial.md`](commercial.md); do not re-derive it here.
|
||
|
||
**The website publishes the model, never the numbers** (free forever, every feature unlocked, a paid
|
||
edition at launch) — the terms may still change. The real plan is recorded internally in the site's
|
||
`build-this.md`; keep both in step when it moves.
|
||
|
||
### Superseded: free forever (2026-10-08, TASK 54)
|
||
|
||
- **2026-09-21** one-time perpetual licence `$29` founder → `$49` list — superseded 6 days later.
|
||
- **2026-09-27** `$10/mo` subscription or `$400` lifetime, **no annual**. Store revenue share was
|
||
verified at **15%** (ADA v8.10 §6(b)(i) → `$8.50` / `$340` net), including subscriptions.
|
||
- **No annual tier** because Microsoft does not pro-rate: *"monthly subscriptions and initial
|
||
(pre-renewal) purchases aren't eligible for a prorated refund"* — a first-year subscriber who
|
||
cancels loses the remaining months and the developer cannot refund it.
|
||
- **Clean numbers, no `.99`** (creator: *"Let's stop with the x.99 stuff"*). The convention exists
|
||
only to make a price look cheaper, which is incoherent for a brand sold on honesty.
|
||
- **Escalation model** (2026-09-01): the credit was deliberately obnoxious self-promo; the cadence
|
||
*is* the nagware — no modals, no feature locks, no stream-time cutoffs.
|
||
- **Pre-GA posture — preview-only flash** (reversed 2026-09-26): the credit used to render in the
|
||
preview and never on the broadcast, to keep test VODs clean. The creator ruled the free tier must
|
||
be honest advertising; it now composites into output and recordings when enabled.
|
||
- **Rejected**: always-on watermark (obscurable — replaced by the flash), hard stream-time cutoffs
|
||
(a stream dying mid-broadcast reads as broken), soft-limit nagging, freemium feature tiers,
|
||
donation-only, and any resolution/quality ceiling. Auto step-down (TASK 33) is a *protect the
|
||
stream* feature, never a monetization penalty. ⚠️ **The quality-ceiling and feature-tier halves
|
||
were reversed on 2026-10-30** (freemium, output-quality delta); the watermark, cutoff and
|
||
nagging rejections still stand.
|
||
- **Polar** — $50 already paid, 5% + $0.50 Starter, merchant of record. **Live again as of
|
||
2026-10-31** (`commercial.md`). The org ID `c05fb364-…`, the `LCYT-` key prefix and the
|
||
customer-portal validate endpoint are recorded in `CREDENTIALS.md`; no product, licence keys or
|
||
discount codes exist yet. The old `PolarLicenseService`/`Helpers/PolarLicense.cs` are still gone
|
||
— the 14-day-grace design has to be rebuilt (as a lease, not a permanent cache).
|
||
- **Store IAP** was never implemented — `Windows.Services.Store` appears nowhere in the repo.
|
||
- ⚠️ **Two obligations any future subscription would create** (ADA §6(h)): fulfil the whole period
|
||
as marketed (breach → Microsoft may refund in full at its discretion), and **raising the price
|
||
disables auto-renew** — the launch price is effectively locked for the product's life.
|
||
|
||
## Distribution — Store PARKED as the third channel (2026-10-31)
|
||
|
||
**2026-10-31:** **winget over a portable zip is the primary channel** — one self-contained
|
||
`LlamaCasty.exe` + bundled `ffmpeg\`, zipped, hosted on GitHub Releases, manifest in
|
||
`microsoft/winget-pkgs` with a pinned SHA-256. Steam is second and parked at $100 (lifetime Pro as
|
||
DLC only — Steam has no subscriptions). The **Microsoft Store is third and parked** until the
|
||
creator opens the **$19 Individual** developer account: it is the only storefront that bills a
|
||
subscription natively and installs without a SmartScreen warning, and it bans self-updaters.
|
||
Channels, costs, artifact and signing: [`commercial.md`](commercial.md).
|
||
|
||
**Why the ordering inverted:** winget has no discovery, but neither does the Store for utilities,
|
||
and winget costs nothing, needs no account, no certification and no MSIX pipeline — while the
|
||
audience installs Windows tools from a command line. The site and the YouTube channel are the
|
||
funnel in both cases.
|
||
|
||
## Superseded: Store was "the route again" — 2026-10-30 (ordering only)
|
||
|
||
**2026-10-30:** a **Microsoft Individual developer account** (not Company) removed the legal-entity
|
||
blocker — the publisher line shows the verified individual name, and Partner Center does not
|
||
convert Individual → Company later. That finding stands; what it no longer implies is *primary*.
|
||
The site copy ("Coming soon to the Microsoft Store") stays true until the download page lands, then
|
||
the Store line becomes the secondary note.
|
||
|
||
## Superseded: Store route withdrawn 2026-10-22
|
||
|
||
- **2026-09-27 Store MSIX + Store IAP decided; 2026-10-22 withdrawn.** A brand name on the
|
||
Store's *publisher* line requires a **Company** account → a registered legal entity (LLC ~$85
|
||
New Mexico with a ~2-week SOS backlog, ~$143 Wyoming). Partner Center does **not** convert an
|
||
Individual account to a Company account later, and an Individual account publishes under the
|
||
verified legal name. The creator will not fund an entity for a nameplate.
|
||
- **2026-10-22 Velopack deleted** — it downloaded and executed, which Store policy 10.2.2 forbids
|
||
(and which the 2026-10-31 plan keeps forbidden). The app has **no self-updater by policy**:
|
||
`winget upgrade` plus an in-app "newer version exists" banner is the update path, and
|
||
`StorePackagingTests` asserts that no self-updater returns.
|
||
- **The MSIX package still builds** (159 MB `artifacts/LlamaCasty.msix`, submitted nowhere) — it
|
||
is the parked Store channel's artifact.
|
||
- **Signing**: Microsoft removed the EV instant-bypass for SmartScreen in March 2024, so EV buys
|
||
what OV buys. The 2026-10-22 ruling was *ship unsigned*; **2026-10-31 supersedes it with Azure
|
||
Trusted Signing (~$9.99/month)**, which is Microsoft-issued and accrues reputation.
|
||
- **Steam when $100 exists**: Steam Direct $100/product (recoupable after $1,000 AGR), categories
|
||
*Audio/Video Production* / *Player Tools* (OBS precedent), developer/publisher name self-chosen
|
||
(no entity needed), 5+ 1920×1080 screenshots + capsule art, a build Valve runs, a 2-week live
|
||
page, 30% cut, and no subscription support.
|
||
|
||
## Product surface — retired
|
||
|
||
- **2026-09-24 StreamElements replaced by native alerts** (TASK 43). No third-party widget feed:
|
||
the chat poll *is* the event feed.
|
||
- **2026-09-01 the screens/layers settings audit** was retired into the gold pass (TASK 36 item 3)
|
||
rather than run as session debt.
|
||
- **2026-10-04 launch position**: restoring the saved position was rejected for a derived
|
||
top-left placement. The live rule is in `ui-surface.md`; the old clamp's tolerance range is why
|
||
it must not come back.
|
||
- **D3D11 swap compositor** — superseded by the software compositor (TASK 3 item 16).
|
||
- **Windows 8 / 32-bit support** — 64-bit Windows 10/11 only (creator ruling 2026-10-09).
|
||
- **"There is no v1.x"** (2026-09-01): everything queues to v1 or to *out of product,
|
||
permanently* — no feature parks "for a later version".
|
||
|
||
## Out of product — permanently
|
||
|
||
Do not build these; each was explicitly ruled out.
|
||
|
||
- **Anti-piracy theatre (2026-10-31)**: a native helper DLL for "IP protection", obfuscation,
|
||
hardware locking, remote code that downloads and executes, and gating asset downloads as an auth
|
||
check. None make a licence enforceable; see `commercial.md` → "Anti-piracy posture".
|
||
- **Commercial structures (2026-10-31)**: Patreon or any subscription platform of our own, paid
|
||
early access, a paid beta, a gated Discord, and a Pro trial (the free tier is the trial).
|
||
- D3D11 swap compositor (superseded by the software compositor).
|
||
- OBS-style source expansion — game capture, browser-source zoo, media playlist, VLC, colour-key,
|
||
MIDI. The minimal source set is deliberate; creators who need more have graduated to OBS.
|
||
- Multi-layout / profiles / presets — that is what OBS is for.
|
||
- Cross-process stream resume (impossible via the API; creator ruling 2026-09-01).
|
||
- Stream Deck / Loupedeck integration — the device sends keystrokes, and global hotkeys already
|
||
*are* the integration.
|
||
- Per-source audio sync offset — global offset shipped (TASK 22); per-source is the OBS mixer
|
||
rabbit hole and breaks the one-knob audio rule.
|
||
- Chroma key / NVIDIA-only background removal (the bundled ONNX path is the one shipped).
|
||
- Virtual camera output — a different product and a device-driver swamp; our output is one
|
||
YouTube stream.
|
||
- Replay buffer, stream clipping, multi-destination restreaming, an in-app bug reporter, and an
|
||
advanced broadcast-form tab (latency/DVR/embed/projection/CC/region are fixed at sane defaults;
|
||
every exposed field is a support ticket).
|