Files
LlamaCasty/TASKS.md
T

11 KiB
Raw Blame History

TASKS — the active queue

One line per live item; the detail lives in TASKS/task-*.md. Done work is in TASKS/archive.md (2026-10-29 snapshot of the old catalogue). Retired decisions are in docs/ai/decisions.md. Markers: ☐ queued · 🔶 in progress · ⏳ blocked · ⏸ deferred · ❌ retired.

The surge — six days, all remaining coding (2026-11-02 → 11-07)

Every open coding row is assigned below. No later phase, no "after launch" list. Target is 6–8 units a day (above the measured 3–5 baseline — that is the point of a surge). If a day overruns, the smallest item moves to the next day; a launch blocker never moves.

Rules, every unit, no exceptions: one Good Dog test · clean build 0 warnings · per-class tests green · ./scripts/verify.sh on the declared scope · commit with the doc fact it falsifies corrected. No new scope mid-week; anything discovered goes on a list for day 6.

Day Units Done when
1 · Mon — licensing Paid-app ownership check (BIsSubscribedApp) + Debug fake + app-wide IsAppOwned · greyed tier entries · About conversion copy + llamacasty.com link · current-launch Logs tab (replaces the separate system-message strip) · Debug-only InternalsVisibleTo A locked tier opens About without changing the selected free tier or leaving the app; the site opens only from its link
2 · Tue — release blockers Visibility flow (creator-selected at release; development/test stays Private) · OutputProfile entitlement: 30 fps free / 60 fps paid regardless of resolution · StreamConfig defaults retired (no production call sites) · TASK 53 (vertical resolution check ✅; remaining output contract open) · 9·5 webcam identity key · Move transitions (per-layer carry-across-scenes) Visibility is selectable at creation and live-editable; the 30/60-fps gate is tested; remaining Day 2 items stay queued
3 · Wed — resilience TASK 32: blip retry → measured grace → amber RECONNECTING → one-click Back on air → fragmented MP4 → ingest pre-flight · 33 bandwidth step-down Killing the network mid-broadcast recovers without ending it
4 · Thu — content & media 3·17 Text layer · 21 media acquisition wiring + file picker + loop/volume UI · 49 chat profanity filter · 34 scheduled streams Text layer renders/persists; media file plays, loops, has volume; scheduled stream created
5 · Fri — data & settings 3·20 RewardEvent persistence + superChatEvents.list backfill · 39·2 YPP slice 2 · 37 defaults-vs-current split · 35 scene-linked audio · 40·A/C/D settings round · 55·2–3 disk hygiene Session report reads persisted events; defaults can be reverted; temp clips cleaned
6 · Sat — finish & prove 50 publish recording · preview undo (Ctrl+Z) · 14 creator feedback batch · 36 gold pass · full sweep: clean build, whole per-class suite, publish.sh artifact, EULA/privacy/notices in the artifact · commit + push Gold pass list empty; artifact stages; suite green; pushed

Day 6 is the only polish day. No polish passes before it — a surge dies on cosmetic passes taken in the middle.

Next up (after the surge slice)

TASK 3·17 — the Text layer is scheduled in the surge (day 4). Placeholder detail retained for the unit itself: AddSource creates it 0×0, all four compositor paths continue past it, FramePump's hash skips it, it is not draggable, and it has no text/font/colour properties or persistence. Text content, font family/size/weight/style, colour, alignment, drag/resize, persisted; renderer mirrors Services/ChatBoxRenderer.cs.

Queue

Every open coding row here is assigned to a surge day above. Rows still marked ☐ on 2026-11-07 are a failure of the plan, not a scheduling note.

Task Status Scope Detail
53 🔶 NEXT Output-format contract — next slice: 9:16 safe-zone and caption geometry; six emitted size/FPS modes have been verified from recordings task-53
— ☐ Output entitlement: change OutputProfile and its tests to free at 30 fps / paid at 60 fps, independent of resolution commercial
3·17 ☐ Text layer — content, font family/size/weight/style, colour, alignment, drag/resize, persisted task-03
21 🔶 Media source: acquisition wiring + file picker + loop/volume UI (decoder, manager, pacing, loop all shipped — no AcquireAsync caller exists) task-21
— ☐ Transitions Move: per-layer carry-across-scenes flag, per-scene placement, fixed z band ui-surface
55·2–3 ☐ Disk hygiene: delete %TEMP% alert clips on close + sweep at startup; low-disk guard before REC (slice 1 shipped) task-55
40·A/C/D ☐ App Settings: active-camera picker; persist output resolution + surface transition defaults + confirm-before-End; accent consolidation task-40
3·20 ☐ RewardEvent persistence: canonical RewardEvents table + superChatEvents.list 30-day backfill (the session report and journey read it) task-03
32 ☐ Stream resilience: blip retry → measured grace + amber "RECONNECTING" → one-click Back on air → fragmented MP4 → ingest pre-flight task-32
33 ☐ Bandwidth auto step-down: pure policy over dropped-frame rate, one-way within a broadcast task-33
34 ☐ Scheduled streams (Text-drawer version) task-34
35 ☐ Scene-linked audio task-35
37 ☐ Defaults vs current layout split (build-id); enables one-click revert to defaults task-37
— ✅ Preview undo (Ctrl+Z / Ctrl+Shift+Z) — done 2026-11-01: Models/PreviewHistory + MainViewModel.Preview, one step per gesture, gated on EditingActive, cleared on layout load. Property edits not yet in the stack ui-surface
39·2 ☐ YPP slice 2: Analytics scopes, watch-hours/Shorts velocity + ETA task-39
49 ☐ Chat profanity filter: local, opt-in, non-persistent, user-supplied word list task-49
50 ☐ One-button publish of the local recording (resumable upload) task-50
54 🔶 Freemium: EULA + privacy shipped; free Steam Demo and paid app use one codebase; paid app ID and Steam Demo setup still pending task-54
— 🔶 Steam ownership — BIsSubscribedApp(paidAppId) + Debug fake + app-wide IsAppOwned; paid app ID awaits Steamworks commercial
— ❌ Polar subscription path — retired 2026-11-01 with the one-price model. Design kept in decisions.md, not built decisions
— ✅ OutputProfile gate — resolver + EncoderOptions wiring (Models/OutputProfile.cs, one ffmpeg/two outputs, dev override); higher tiers follow IsAppOwned commercial
— ✅ Demo conversion UI — owned users get higher tiers; non-owners see greyed tiers, and selecting one opens About with conversion copy and an explicit llamacasty.com link. No browser opens until the link is clicked commercial
— ✅ System-message strip replaced by Logs tab — current launch's newest 500 raw AppLog entries, newest-first; no prior-launch import or logging-policy changes ui-surface
— ☐ Steam packaging — publish output + steam_api64.dll, paid app and associated Demo setup, depot, steamcmd upload, store pages + assets Distribution.md
— ☐ Training-video series — capture the first 8–10 recurring questions as videos on @llamacasty; each is documentation, channel content and monetization at once MARCOM → support→content loop
9·5 ☐ Webcam identity key reconciliation task-09
14 🔶 Creator feedback batch — branch 3+ task-14
— ❌ Retired: StreamConfig defaults are unused; encoder output comes from the selected quality tier Models/index.md
36 ☐ Gold pass — the v1 gate, always the last unit (see 1.0 gates) task-36
48 ⏸ Distribution & packaging — route settled 2026-10-31 (winget/portable first; Steam + Store parked). Build steps: Distribution.md; starts after the entitlement seam task-48
10 ❌ Retired 2026-10-08; superseded by the TASK 54 rows above — the Polar design it described is rebuilt as a lease (commercial.md), not revived as written task-10

Pending the creator's hands (not programming)

  • ✅ App Settings grouping + right-click gear — reported working 2026-10-29.
  • ✅ Transition picker/durations, Wipe, preview + program transitions — reported working 2026-10-29.
  • ✅ Brand logo layer — reported working 2026-10-29.
  • ⏳ Vertical-tier camera check (Live tile inside the band, Chat rect-only) — outstanding.
  • ⏳ Webcam cadence: a Release take in the failing geometry (vertical tier first) blocks Units 1–2. No fix until a reading names the stage.

Creator-requested follow-ups (park for Day 6)

  • Group controls under This PC and YouTube.
  • ON-AIR opens a preflight using the saved visibility default and an explicit Start Broadcast — [scope] action.
  • Persistent Help icon immediately left of Edit opens the creator-triggered, app-only 1-2-3 first-broadcast guide. Keep copy top-aligned and high-contrast; never composite the guide into broadcast output.
  • Add YouTube category selection; send tags through the video API; support thumbnail upload.
  • Add tooltips to settings tabs and make Logs wrapping effective.

1.0 gates (before the first shipped build)

  • Release visibility flow — default to Private; let the creator choose Private/Unlisted/Public in the ON-AIR preflight and change it live through UpdateBroadcast; keep development/test runs forced Private. Hide the separate TEST button as already decided for v1.
  • Kill the dev multi-instance affordance — Helpers/InstanceProfile.cs is already #if DEBUG; re-prove it on a Release build.
  • Release engineering — scripts/publish.sh done (self-contained win-x64, ffmpeg\ guarded, no test artifacts), LlamaCasty.exe assembly rename done, full license texts beside THIRD-PARTY-NOTICES.txt (TASK 4 req 9). Outstanding: Debug-only InternalsVisibleTo.
  • Gold pass (TASK 36): the screens/layers audit, native-Windows verification, and the branding-flash decision.

Research

research-youtube-api.md · research-store-certification.md