docs: pricing ruled — $10/mo + $400 lifetime, and the 15% fee is verified for subscriptions

Reconcile the pending doc edits with the creator's actual ruling, and close the
revenue-share question that was blocking the monthly price.

Verified from the App Developer Agreement v8.10 PDF itself (downloaded and
text-extracted, not a search excerpt). Section 6(b) has only three tiers:
6(b)(i) 15% for Apps and their In-App Products *not listed in* 6(b)(iii);
6(b)(ii) 12% Games-only; 6(b)(iii) 30% for Xbox console apps/games, Xbox
non-subscription IAP, and Windows 8/Phone 8. LlamaCasty is a Windows PC App,
so 6(b)(i) governs BOTH tiers -- there is no subscription surcharge. The
agreement's own changelog (v8.0, Oct 26 2017) states it outright: "implement
the 85/15 revenue share for non-Game subscriptions."

  => $10/mo nets $8.50 (~$102/yr); $400 lifetime nets $340.

Also confirmed: the 15% applies after VAT/GST (Net Receipts definition),
payouts are monthly above a $50 threshold, and no better small-indie rate
exists in the standard terms.

Creator ruling recorded: $10/mo subscription or $400 lifetime, no annual, no
.99. This supersedes the 2026-09-21 one-time $29 -> $49 model.

Two obligations ADA 6(h) attaches to the recurring tier, recorded because they
change its risk profile and are the reason lifetime is the hedge: we must
fulfil the subscription for the entire period as marketed (on breach Microsoft
may refund the full amount plus taxes in its sole discretion), and raising the
price disables auto-renew -- so $10 is effectively locked for the product's life.

Stale facts fixed in the same change rather than appended:
- research-store-certification.md: IARC was 11.11.1/11.11.2 in one table and
  10.11.1 in another; corrected to 10.11.x.
- research-store-certification.md: policy 10.8.1/10.8.2 still asserted "Polar
  explicitly permitted" and "tick the third-party purchase box". Void now that
  Store IAP is the route and Polar is being torn down.
- task-48: the working YouTube demo account (10.3.1) was accidentally dropped
  from the certification list during the Store-IAP edit. Restored -- a reviewer
  cannot use the app without one.
- MyMistakes.md: the verified-fact-vs-decided-outcome lesson now closes its
  loop (the creator did rule the way the research pointed), and records the
  over-correction that followed.

Docs-only. No code, no build, no tests.
This commit is contained in:
2026-09-27 15:02:25 -07:00
parent b2036a38e8
commit e7cded6879
5 changed files with 102 additions and 41 deletions
+35 -7
View File
@@ -1,8 +1,38 @@
# HANDOFF — current state
**Branch:** `main` (pre-1.0, no feature branches — creator ruling 2026-08-24).
**Last pushed:** `e78c58f` (Store certification research). This unit (recording the Store MSIX
+ Store IAP ruling) is **docs-only** — no code touched, no build, no tests run.
**Last pushed:** `b2036a3`. This unit (reconciling the pricing ruling + verifying the Store
revenue share) is **docs-only** — no code touched, no build, no tests run.
## ✅ DECIDED 2026-09-27 — pricing: `$10/mo` subscription, or `$400` lifetime, **no annual**
**Creator's ruling, verbatim: *"Let's just go with $10 monthly recurring subscription for option
A and, for option B, a lifetime sub for $400. No annual."* ⛔ **No `.99` prices** (earlier
ruling: *"Let's stop with the x.99 stuff - I find that irritating. Just say: ten bucks a
month"*). This **supersedes** the 2026-09-21 one-time `$29 → $49` model and the old `$99/yr`
sub. No feature gating: free gets everything, the branding flash is the only paid delta.
**✅ Store revenue share VERIFIED — 15%, and subscriptions are NOT penalised.** Read from the
ADA v8.10 PDF itself (downloaded, text-extracted — not a search excerpt). §6(b)(i) charges
**15%** on "any Apps (and any In-App Products in such Apps) that are **not listed in Section
6(b)(iii)**"; 12% is Games-only; 30% covers Xbox console apps/games, Xbox non-subscription
IAP, and Windows 8/Phone 8. LlamaCasty is a Windows PC App — not a Game, not Xbox, not Win8 —
so **6(b)(i) governs both tiers.** The agreement's own changelog (**v8.0, Oct 26 2017**) says
it outright: *"implement the **85/15 revenue share for non-Game subscriptions**."*
⇒ **`$10/mo` nets `$8.50/mo` (~$102/yr). `$400` lifetime nets `$340`.** Also confirmed: the
15% applies *after* VAT/GST (Net Receipts), payouts are monthly above a **$50** threshold, and
no better small-indie rate was found in the standard terms.
**⛔ Two obligations §6(h) attaches to the recurring tier** (why lifetime is the hedge):
(1) we must **fulfil the subscription for the entire period as marketed**, and on breach
Microsoft may refund the customer *"the full amount, plus taxes... in Microsoft's sole
discretion"*; (2) **raising the price disables auto-renew** — so `$10` is effectively locked
for the product's life absent Microsoft's price-change process.
**⏳ Still open:** the `$50` subscriber→lifetime upgrade-discount SKU was discussed and is
**not approved** — do not declare it. Individual vs Company Partner Center account still
unanswered (get it right before enrolling).
## ✅ DECIDED 2026-09-27 — distribution is the Microsoft Store: MSIX + Store IAP
@@ -25,11 +55,9 @@ thinks I'm expired" bug class. **Velopack, the update URL and the DO droplet go
**What does not change: the entitlement.** Free gets everything; the branding flash stays the
ONLY paid delta. Store IAP changes how `IsPremium` is *obtained*, never what it *gates*.
**⏳ Still open: the price.** The Store revenue share is unverified (⚠️ assume no percentage —
check current terms before setting a price), and `MONETIZATION.md`'s `$29 → $49` one-time
decision is re-opened against a fresh instinct toward a ~$99/yr subscription. **No price is
encoded anywhere until the creator settles it.** Note the storefront changed, so the old
"~$69 floor" and "don't break the launch-price promise" notes now refer to Store tiers.
**⛔ The old "still open: the price" note is retired — the price is settled, see the top of
this file.** The old "~$69 floor" and "don't break the launch-price promise" notes refer to
the old Polar storefront and are **not** current.
### The first code unit: bundle ffmpeg (TASK 48 item 1)
+17 -4
View File
@@ -1150,13 +1150,26 @@ it.* Before offering "we can just do X," ask **who presses the button** — and
counted as one. The same sentence reappears in a subtler failure: the underlying instinct
(refunds *should* be cheap when marginal cost is zero) was sound; the *agency* was invented.
**The verification that came out of it is the real prize.** Checking Store refund policy
produced a hard constraint that **reshaped the pricing design** and would otherwise have
produced a product we could not fix: pro-rated refunds on cancellation are limited to a narrow
**The verification that came out of it is worth more than the mistake.** Checking Store refund
policy produced a hard constraint that **did** reshape the pricing design and would otherwise
have produced a product we could not fix: pro-rated refunds on cancellation are limited to a narrow
country list, and **"monthly subscriptions and initial (pre-renewal) purchases aren't eligible
for a prorated refund."** A first-year annual subscriber who cancels in month 2 loses months
3-12 in most countries. That is precisely the trap the creator had already named as
irritating — and it is unfixable from the developer side. **Hence: monthly, no annual tier.**
irritating — and it is unfixable from the developer side. It therefore pointed at
**"monthly, no annual tier"** — and the creator did rule exactly that way, on 2026-09-27, once
asked. The research was right; the process was still wrong, because I wrote the finding up as
`✅ DECIDED` and pushed it **after the creator had already told me the model was undecided.**
**⛔ And the compounding failure on top of it: I wrote the finding up as `✅ DECIDED` and
pushed it, after the creator had already told me the model was undecided.** A well-sourced
research result creates a strong pull toward "this settles it" — and the source only settles
the *mechanism*, never the *choice*. **Verified fact and decided outcome are different kinds of
statement and must not share a heading.** Ask before writing a decision down, even — *especially* —
when the evidence is strong enough to feel like a conclusion. **The corollary bit me twice in
one session: a correction is not a licence to over-correct either.** The fix must converge on
*what the creator actually said*, not on my latest guess about what they meant — the pending
edits here first swung to "OPEN, not ruled" and were themselves stale within the hour.
**Generalisation, and it is the same shape as the policy-applicability lesson above:** the
expensive mistakes are never the ones where I knew nothing. They are the ones where a *plausible,
+24 -16
View File
@@ -245,31 +245,39 @@ second encoder path needing a "redirect". Record+simulcast is one ffmpeg with tw
entitlement and the branding-flash delta carry over unchanged**. The stale Polar product
(`$99/yr`, id `d105dfa1-…`) is not reused — Store IAP products are declared in Partner
Center instead.
- **Pricing — ⏳ model re-opened 2026-09-27, subscription now the creator's lean.**
- **Pricing — ✅ DECIDED 2026-09-27: `$10/mo` subscription, or `$400` lifetime. No annual.**
`MONETIZATION.md` carries a **one-time perpetual** decision from 2026-09-21 (`$29` founder →
`$49` list) that explicitly superseded the old `$99/yr` subscription. The creator is moving
back toward a subscription, anchored on **Meld** (`$20/mo = $240/yr` entry — the only
`$49` list) that explicitly superseded the old `$99/yr` subscription. The creator ruled against
it and back to a subscription, anchored on **Meld** (`$20/mo = $240/yr` entry — the only
competitor sharing our shape: streaming tool, subscription, YouTube-native). The creator's own
read: **"XSplit only has legs because of their vcam product"** — its price is carried by a
system-wide driver, and **virtual camera output is permanently out of product**, so XSplit is
not a pricing comparator and its "lifetime ≈ 2x one year of sub" anchor is retired.
**Research that decides the tier shape (2026-09-27): Microsoft Store does not pro-rate.**
Pro-rated refunds on cancellation exist only in a narrow set of countries, and
**"monthly subscriptions and initial (pre-renewal) purchases aren't eligible for a prorated
refund"** — so a first-year annual subscriber who cancels loses the remaining months in most
countries, **and the developer cannot refund it**. That is verbatim the grievance the creator
raised, so it is exactly the trap to avoid. ⇒ **monthly, no annual tier.** Sources in
`MONETIZATION.md` → "No annual tier".
- **The finding that drove no-annual (2026-09-27): Microsoft Store does not pro-rate.**
Pro-rated refunds on cancellation exist only in a narrow set of countries, and
**"monthly subscriptions and initial (pre-renewal) purchases aren't eligible for a prorated
refund"** — so a first-year annual subscriber who cancels loses the remaining months in most
countries, **and the developer cannot refund it**. That is verbatim the grievance the creator
raised, so it is exactly the trap to avoid. Sources in `MONETIZATION.md` → "No annual tier".
- ⛔ **Clean numbers, no `.99`** (creator ruling: *"Let's stop with the x.99 stuff - I find that
irritating. Just say: ten bucks a month"*). The `$x.99` convention only makes a price *look*
cheaper and is incoherent for a brand sold on honesty and no-dark-patterns. `MONETIZATION.md`
→ "Clean numbers".
- ⛔ **No feature gating, ever** — this is now a *revenue* argument: the free tier's reach is
the funnel and the branding flash is an ad running inside other people's content, so
crippling free cannibalises the only acquisition channel we have.
- ⏳ Still open: the exact number; whether to also sell a **lifetime** product (~$300, the hedge
against the no-moat renewal problem and the natural home for subscription-hostile buyers);
and the **unverified Store revenue-share rate** — confirm the net, not the list.
- **No feature gating** — pre-existing repo posture (TASK 36 monetization stance: free gets
everything, the branding flash is the only paid delta), noted here because it gains a
**revenue** argument: the free tier's reach is the funnel and the flash is an ad running
inside other people's content. Not a new ruling.
- ✅ **Store revenue share — VERIFIED 15%, subscriptions included.** From the ADA v8.10 PDF
itself, §6(b)(i): 15% applies to "any Apps (and any In-App Products in such Apps) that are
not listed in Section 6(b)(iii)". LlamaCasty is a Windows PC App — not a Game, not Xbox
console, not Windows 8 — so **15% governs both tiers; there is no subscription surcharge.**
The agreement's own changelog (v8.0, Oct 26 2017) says it outright: *"implement the 85/15
revenue share for non-Game subscriptions."* ⇒ **`$10/mo` nets `$8.50`; `$400` nets `$340`.**
- ⛔ **Two obligations the subscription creates (ADA §6(h))**, which drive the lifetime tier's
value as a hedge: (1) we must **fulfil the subscription for the whole period as marketed**,
and on breach Microsoft may refund *"the full amount, plus taxes... in Microsoft's sole
discretion"*; (2) **raising the price disables auto-renew**, so `$10` is effectively locked
for the product's life.
- **TASK 49 — chat profanity filter** — queued, not blocked, size S. Local, on-device,
**non-persistent**, opt-in, **user-supplied word list (never a hardcoded slur list)**, and it
must **never match the SuperChat amount or reward fields** (financial data, Store 10.5.5).
+4 -4
View File
@@ -207,11 +207,11 @@ Policy 7.20. "Binds" = must be satisfied to submit.
| **10.1.4** | Distinct informative metadata + **active Store presence** | ☐ Listing must not be a stub |
| **10.2.7** | Must enable clean uninstall | ☐ MSIX gives this free |
| **10.4.2** | Start promptly, stay responsive, shut down gracefully, survive native API exceptions | ✅ `AppLog` + dispatcher handlers exist |
| **11.11.1** | **IARC age-rating questionnaire** required | ☐ General-audience streaming tool, 12+ territory |
| **11.11.2** | Keep the rating accurate as features change | ☐ Re-visit if audience-facing features shift |
| **10.11.1** | **IARC age-rating questionnaire** required | ☐ General-audience streaming tool, 12+ territory |
| **10.11.2** | Keep the rating accurate as features change | ☐ Re-visit if audience-facing features shift |
| **11.12** | **User Generated Content** — see §9 | ⚠️ Judgment call, documented not built |
| **10.8.1** | Non-game PC products **may** use a secure third-party purchase API **or** Store IAP | ✅ **Polar explicitly permitted.** Must tick the third-party purchase box in Partner Center |
| **10.8.2** | Third-party purchase: identify provider, authenticate user, obtain confirmation, PCI DSS, note in Partner Center | ☐ Covered by Polar; tick the box |
| **10.8.1** | Non-game PC products **may** use a secure third-party purchase API **or** Store IAP | ✅ **Superseded 2026-09-27: we chose Store IAP, not Polar.** The third-party-purchase path is no longer the plan |
| **10.8.2** | Third-party purchase: identify provider, authenticate user, obtain confirmation, PCI DSS, note in Partner Center | ⛔ **Void — Polar is being torn down (TASK 10).** Store IAP is the Microsoft commerce engine, so the third-party-provider/PCI-DSS obligations do not apply |
| **10.8.3** | **Individual** accounts cannot require financial info for primary functionality; requiring it forces a **Company** account | ⚠️ **Open question** — see §11 |
| **10.14** | Individual accounts usually fine for a solo dev; Company required if the product needs financial info for primary functionality, or a consumer would read the name as a business | ⚠️ Same question as 10.8.3 |
| **10.8.7** | Pricing must follow the FTC Guides Against Deceptive Pricing and must not be irrationally high vs. features | ☐ A pricing decision, not a code task |
+22 -10
View File
@@ -55,16 +55,24 @@ ONLY paid delta (TASK 36 item 2). Store IAP changes how the bit is *obtained*, n
### Still to verify (does not block packaging work)
- ☐ **Current Store revenue-share terms.** ⚠️ **Do not assume any percentage** — the terms have
moved more than once and smaller indie apps sometimes qualify for better rates. **Verify
before setting a price.** Microsoft also requires that any IAP products and their pricing be
declared in Partner Center.
- ☐ **Store IAP tier shape** — ⛔ **no annual tier, and that is now a settled constraint, not
a preference:** Microsoft does not pro-rate, and *"monthly subscriptions and initial
(pre-renewal) purchases aren't eligible for a prorated refund"*, so a first-year annual
subscriber who cancels loses the remaining months in most countries **and the developer
cannot refund it**. Declare a **monthly subscription**; a **lifetime** product (~$300, clean
number, no `.99`) is the open question and the natural hedge. ⛔ **No `.99` prices.**
- ☑ **Current Store revenue-share terms — VERIFIED 15%, subscriptions included.** Read from the
ADA v8.10 PDF (downloaded and text-extracted), §6(b): 15% for Apps and their In-App Products
*not listed in* 6(b)(iii); 12% is Games-only; 30% is Xbox console / Xbox non-subscription IAP /
Windows 8. LlamaCasty is a Windows PC App, so **6(b)(i) 15% governs** ⇒ `$8.50/mo` net,
`$340` lifetime net. The agreement's own changelog (v8.0, Oct 26 2017) states it plainly:
*"implement the 85/15 revenue share for non-Game subscriptions."* Smaller-indie better rates
were **not** found in the standard terms. Microsoft also requires that any IAP products and
their pricing be declared in Partner Center.
- ☑ **Store IAP tier shape — ✅ DECIDED 2026-09-27: `$10/mo` subscription + `$400` lifetime,
no annual.** Declare **two** products in Partner Center: one auto-renewing monthly
subscription, one non-expiring lifetime IAP. ⛔ **No `.99` prices** (settled). ⛔ **No annual
product** — Microsoft does not pro-rate: *"monthly subscriptions and initial (pre-renewal)
purchases aren't eligible for a prorated refund"*, so an annual sub cancelled in year 1
forfeits the remainder **and the developer cannot refund it**. Net after the 15% Store Fee
(verified, §6(b)(i) — applies to non-Game subscriptions too): **`$8.50/mo` and `$340`**.
Note ADA §6(h): we must fulfil the subscription for the whole period, and **raising the price
disables auto-renew** — so `$10` is effectively locked for the product's life. ⛔ A discounted
subscriber→lifetime upgrade SKU is **not** approved; do not declare one.
- ☐ Individual vs Company Partner Center account (10.8.3 / 10.14 — see
`research-store-certification.md` §11 item 1). **Get this right before enrolling**; a
Store+IAP product needing financial info for primary functionality would require Company,
@@ -139,6 +147,10 @@ relevant check: the app must start promptly, stay responsive, and shut down grac
**In Partner Center (submission):**
- ☐ **The IARC age-rating questionnaire** (10.11.1) — general audience, 12+ territory
- ☐ **A working YouTube demo account** (10.3.1) — the app is useless to a reviewer without one.
Must be a real, maintained account able to sign in and start a stream; a dead or
credentials-lapsed account is a rejection. ⛔ **This was accidentally dropped from this list**
during the Store-IAP edit — it is in `research-store-certification.md` §4 and must be done.
- ☐ **Declare the IAP products and their pricing** in Partner Center (required for Store IAP).
⛔ **No `.99` prices** — creator ruling, and incoherent for a no-dark-patterns brand. Confirm
the **net** after the revenue share, not the list.