docs: decisions log, queue trim, HANDOFF rewrite — the map stops being a treadmill
TASKS.md 467 → 66 lines: one line per live item, detail stays in TASKS/ task-*.md. The old catalogue (63 rows of paragraph status prose plus the historical narration) is preserved verbatim as TASKS/archive.md — a 2026-10-29 snapshot, not the live queue. The "out of product" list and every retired decision moved to docs/ai/decisions.md with cause of death. HANDOFF.md 440 → 40 lines, and it is now OVERWRITTEN, not appended: branch, what's in flight, next action, live landmines, pending creator checks. History belongs to git log; the previous handoff is reachable at ee3c592:HANDOFF.md. docs/ai/decisions.md (new) collects what no longer governs: the paid tier and its pricing, Polar, Store IAP, the Store route and why it died, the deleted Velopack updater, signing economics, the retired monetization ideas, and the permanent out-of-product list. Facts that lived in the old ai.md "Current limitations" section were re-homed rather than dropped with the router rewrite: OAuth/DPAPI/session behaviour → docs/ai/youtube-api.md; paths, persistence and the Google project number → docs/ai/environment.md. verify.sh caps now cover all four always-read files (AGENTS 210, ai 100, HANDOFF 40, TASKS 120). Docs-only unit: scope-check run, no build.
This commit is contained in:
@@ -0,0 +1,89 @@
|
||||
# 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 rules live in the subsystem files; this is the
|
||||
graveyard with cause of death.
|
||||
|
||||
## Monetization — all superseded by the free-forever ruling (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.
|
||||
- **Polar** — $50 already paid, 5% + $0.50 Starter, merchant of record. Dormant, not
|
||||
deleted-in-principle: no product, org ID, key prefix or discount code exists
|
||||
(`d105dfa1-…`, `c05fb364-…`, `LCYT-`, `LLAMAFOUNDER`/`LLAMA50`, the portal-validate endpoint and
|
||||
the 14-day offline-grace machine are all gone). `Distribution.md` §4.2/§4.5 keeps the design.
|
||||
- **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 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.
|
||||
The Store was going to update the app, so that premise died with the route: **the app now has no
|
||||
update path**, and `StorePackagingTests` currently asserts that no updater exists — rewrite that
|
||||
guard with the chosen updater, never leave it to veto one.
|
||||
- **The MSIX package still builds** (159 MB `artifacts/LlamaCasty.msix`, submitted nowhere). The
|
||||
route contradiction between `ai.md`'s older text and the TASKS files is settled in one sweep at
|
||||
the distribution revisit, not patched piecemeal.
|
||||
- **Signing**: Microsoft removed the EV instant-bypass for SmartScreen in March 2024, so EV buys
|
||||
what OV buys; the 2026-10-22 ruling is **ship unsigned** and accept the "unrecognized publisher"
|
||||
warning until download reputation accrues. Deferred, not rejected.
|
||||
- **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.
|
||||
|
||||
## 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.
|
||||
|
||||
- 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).
|
||||
Reference in New Issue
Block a user