From b2036a38e8130b0e878b4a83d76fa141816b0ffd Mon Sep 17 00:00:00 2001 From: gramps Date: Sun, 27 Sep 2026 14:33:25 -0700 Subject: [PATCH] =?UTF-8?q?docs:=20no=20annual=20tier=20=E2=80=94=20Micros?= =?UTF-8?q?oft=20does=20not=20pro-rate,=20and=20that=20is=20unfixable=20fr?= =?UTF-8?q?om=20our=20side?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The creator raised it as instinct: "who hasn't been screwed over cancelling a sub early to be told that the extra six months remaining are your loss?" Checking the mechanism confirms it, and worse than expected. Microsoft's general position: "Digital goods like apps, add-on content, subscriptions... aren't refundable unless the offer or applicable law states that you're eligible for a refund." Pro-rated refunds on cancel exist only in Canada, Denmark, France, Israel, Korea, Turkey (all lengths) and Finland, Germany, Netherlands, Poland, Portugal (renewals only). Critically: "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, and the developer cannot refund it. That is verbatim the trap the creator named, so we must not build it. => monthly only. Max loss $10, max grievance a rounding error, one fewer product to declare, less support surface. The chargeback argument gets stronger, not weaker: a customer down $89 on an annual cliff disputes through their bank, which is frozen funds and account risk against a solo dev. Monthly bounds that at $10. Also records two rulings: - No .99 prices. "Let's stop with the x.99 stuff - I find that irritating. Just say: ten bucks a month." The convention only makes a price look cheaper, which is incoherent for a brand sold on honesty and no-dark-patterns. - No feature gating, now argued as revenue rather than taste: the free tier's reach is the funnel and the branding flash is an ad running inside other people's content. Pricing model itself stays OPEN in TASKS.md — $10/mo is the lean, and a lifetime product (~$300, the hedge against the no-moat renewal problem) is undecided. The Store revenue share is still unverified: confirm the net, not the list. MyMistakes.md records the actual error: I had offered "just refund anyone who asks" as a mitigation without checking who holds the authority to execute it. Store refunds run through Microsoft, not the developer. The check that followed is what produced this constraint. MONETIZATION.md got the full analysis but is gitignored, so it stayed local. --- MyMistakes.md | 33 ++++++++++++++++++++++++++++++ TASKS.md | 31 ++++++++++++++++++++++------ TASKS/task-48-distribution-msix.md | 12 ++++++++--- 3 files changed, 67 insertions(+), 9 deletions(-) diff --git a/MyMistakes.md b/MyMistakes.md index d8f924b..0dec21a 100644 --- a/MyMistakes.md +++ b/MyMistakes.md @@ -1131,3 +1131,36 @@ the same class as the dead-Pin incident in `FfmpegLocator` (`ai.md` → FFmpeg l external thing changed, our record of it did not, and the mismatch was discovered by a user rather than by a test. **Records of the outside world rot silently and are believed until they cost money.** + +--- + +## 2026-09-27 — I offered a mitigation I had not checked the mechanics of: "just refund anyone who asks" + +While discussing a subscription price, I wrote that at `$99/yr` with zero marginal cost the +creator could **"just refund anyone who asks"** — presented as a free mitigation against the +churn/refund burden of a subscription. **That lever does not exist for Microsoft Store IAP.** +Refunds run through Microsoft, not the developer; the buyer requests them from the Store, and +the developer cannot unilaterally issue one. I proposed it before ever checking how Store +refund mechanics work, and it sounded confident because it was arithmetically true and +operationally impossible. + +**The rule:** *a mitigation is not an answer until you know who has the authority to execute +it.* Before offering "we can just do X," ask **who presses the button** — and if the answer is +"Microsoft, or the user's bank, or a regulator," then it is not our mitigation and must not be +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 +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.** + +**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, +well-formed, unverified* claim got to speak without a check — a dead EV-certificate benefit, a +policy number with no scope, a refund lever I did not control. **Sound reasoning about a +mechanism I had not verified is the failure mode, not the safety net.** Before any external +mechanism drives a decision, name the one fact that would falsify it, then go get that fact. diff --git a/TASKS.md b/TASKS.md index 5176ad7..8a7efaa 100644 --- a/TASKS.md +++ b/TASKS.md @@ -245,12 +245,31 @@ 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 is re-opened** (2026-09-27) — `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's current instinct is back toward a subscription. - **Unresolved — do not encode a price until it is settled**, and note that Store IAP moves - pricing into fixed Store tiers, so the "floor" (`~$69` per `MONETIZATION.md`) and the - "don't break the launch-price promise" note now refer to a different storefront. +- **Pricing — ⏳ model re-opened 2026-09-27, subscription now the creator's lean.** + `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 + 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". + - ⛔ **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. - **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). diff --git a/TASKS/task-48-distribution-msix.md b/TASKS/task-48-distribution-msix.md index dd9337c..cb1c7a6 100644 --- a/TASKS/task-48-distribution-msix.md +++ b/TASKS/task-48-distribution-msix.md @@ -59,8 +59,12 @@ ONLY paid delta (TASK 36 item 2). Store IAP changes how the bit is *obtained*, n 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** — one-time vs subscription. The creator's one-time-vs-both - question is still open; the storefront it is sold through is now decided. +- ☐ **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.** - ☐ 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, @@ -135,7 +139,9 @@ 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 -- ☐ **Declare the IAP products and their pricing** in Partner Center (required for Store IAP) +- ☐ **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. - ☐ Note that the product is **general audience, not directed at under-13s** - ☐ The 11.12 UGC position is **less load-bearing now that Polar is gone** — the strong part of the original argument was "we render transiently, persist nothing, and provide no