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:
+35
-7
@@ -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
@@ -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,
|
||||
|
||||
@@ -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).
|
||||
|
||||
@@ -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 |
|
||||
|
||||
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user