Files
LlamaCasty/HANDOFF.md
T
gramps 7827d239e2 docs(commercial): one source of truth for the money — prices, entitlement, channels
The commercial plan was spread over five documents written in five different weeks,
and they contradicted each other: product.md sold the Store, decisions.md called the
Store dead then re-opened, Distribution.md (736 lines) still described Polar as a
download host, MARCOM.md quoted "no subscription" next to a paid tier, and README.md
promised "free forever". An outsider could not tell what ships.

docs/ai/commercial.md is now the only place money is decided: free = whole app at a
921,600 px / 30 fps output profile covering the recording as well as the stream; Pro =
$10/mo or $400 lifetime through Polar, key bound to the buyer's YouTube channel ID via
a claim page, 2 activations, 7–14 day lease with offline grace, fail closed, never
downgrade a running stream; one portable zip + winget primary, Steam and the Store
parked; Azure Trusted Signing (~$9.99/mo), no EV; Founding 200 promo; ~$135/yr costs;
anti-piracy posture and what is permanently rejected.

Everything else now points at it instead of restating it:
- product.md — money sections replaced with pointers; packaging rewritten to
  winget-first, Store parked; signing updated to Trusted Signing.
- decisions.md — graveyard with cause of death for free-forever, the Store ordering,
  the updater, and the 2026-10-30 reversal of the quality-ceiling rejection.
- Distribution.md — rewritten to release mechanics only (artifact, GitHub Releases,
  winget manifest, signing, checklist, takedown): 736 → 120 lines.
- TASKS.md — TASK 54 rewritten, TASK 48's route settled, TASK 10 superseded, five new
  rows (entitlement seam, output-profile gate, licence UI, system messages, packaging).
- README.md — "free forever" replaced with the real split.
- capture.md — obs-backgroundremoval is GPL-3.0 and so licence-INCOMPATIBLE since the
  proprietary EULA; the old "compatible" line was falsified by that change.
- TASKS/task-10, task-48, task-51, task-54 — superseded-banner at the top of each, so
  none of them reads as current policy.
- HANDOFF.md — rewritten: plan settled, next code unit is the entitlement seam.

MARCOM.md and MONETIZATION.md (gitignored) were corrected in place: policy pointer at
the top of each, the flash removed from every live claim, the Polar fee break-even
corrected to ~$900/mo, and the projections flagged as written against a dead model.
2026-10-31 08:32:25 -07:00

37 lines
2.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# HANDOFF — 2026-10-31 (commercial plan settled in docs; next code unit is the entitlement seam)
## State
- Branch `main`. Pushed through `c72b61b`; **`90d5140` + this commit are local only** (push at a
checkpoint, not per commit).
- **Commercial plan is settled and written down**: freemium (free = whole app at a 921,600 px /
30 fps profile, stream **and** recording), Pro = $10/mo or $400 lifetime through **Polar** (key
bound to the buyer's YouTube channel ID via a claim page, 2 activations, 7–14 day lease), one
portable zip + **winget** as the primary channel, **Steam and the Store parked**, Azure Trusted
Signing, Founding 200 promo. New single source of truth: [`docs/ai/commercial.md`](docs/ai/commercial.md).
- Docs consolidated this unit: `product.md` (money section → pointer), `decisions.md` (banners +
history), `index.md`, `ai.md`, `README.md`, `Distribution.md` (rewritten to release mechanics,
736 → 120 lines), `TASKS.md` (five new rows), `capture.md` (GPL line falsified by the proprietary
EULA), plus gitignored `MARCOM.md` / `MONETIZATION.md`. Site repo: `AGENTS.md`, `README.md`,
`build-this.md`.
- Scoreboard: built, unchanged from the last handoff (HTTP providers + goal inputs still missing).
## Next action
1. **Entitlement seam** — `IEntitlement` over Polar activate/validate/deactivate, channel-ID match,
2 activations, lease + offline grace, `--activate LCYT-…` CLI, fail closed. One Good Dog test.
2. Then the **OutputProfile gate** (one profile consumed by both the stream encoder and the
recorder; greyed tier entries; never downgrade mid-stream), the licence UI, and system messages.
3. Scoreboard HTTP providers + goal inputs whenever the creator queues them.
## Landmines
- **Nothing may gate a feature.** The only paid delta is the output profile. `ShowBrandFlash` stays
`false` and entitlement must never enable it.
- **The site publishes the model, never the numbers** — and its CTA ("Coming soon to the Microsoft
Store") stays until the creator says the download exists.
- **No self-updater, by policy**: `winget upgrade` + a version banner. `StorePackagingTests` asserts it.
- Pre-existing: the **full test suite hangs** (WASAPI teardown). Per-class runs are the way.
- Not every hex is a theme colour — `BorderColorPalette`/chat defaults are USER DATA; on-stream
graphics come from `OutputPalette`. A red settings control is still a bug.