diff --git a/TASKS.md b/TASKS.md index 5854ec5..bdb96e5 100644 --- a/TASKS.md +++ b/TASKS.md @@ -70,6 +70,7 @@ | 52 | **Zoom box (anchored 2× magnifier)** | ✅ Done — shipped 2026-10-08 (3 creator corrections during the build: loupe → anchored capture over the full composite, drawn last → never shows the dim shading) | [`TASKS/task-52-zoom-box.md`](TASKS/task-52-zoom-box.md) | | 53 | **Output-format verification: Shorts/TikTok geometry (9:16)** | ☐ Queued (2026-10-08) — output formats never tested end-to-end; pin + prove the vertical geometry | [`TASKS/task-53-output-formats.md`](TASKS/task-53-output-formats.md) | | 54 | **Marcom round: free-forever positioning + merch storefront** | 🔶 In progress — llamacasty.com copy live 2026-10-08 (pricing stripped); merch POD + app About links queued | [`TASKS/task-54-marcom-free-merch.md`](TASKS/task-54-marcom-free-merch.md) | +| 55 | **Disk hygiene: log rotation + low-disk guard** | ☐ Queued (2026-10-09) — `startup.log` appears uncapped; also temp alert-clip cleanup + free-space check before recording | [`TASKS/task-55-disk-hygiene.md`](TASKS/task-55-disk-hygiene.md) | --- diff --git a/TASKS/task-55-disk-hygiene.md b/TASKS/task-55-disk-hygiene.md new file mode 100644 index 0000000..d7446a7 --- /dev/null +++ b/TASKS/task-55-disk-hygiene.md @@ -0,0 +1,29 @@ +# TASK 55 — Disk hygiene: log rotation + low-disk guard (queued 2026-10-09) + +> Catalog: [`TASKS.md`](../TASKS.md) — status and requirements live here. + +**Why (creator ask, 2026-10-09):** "we need some sort of log-rotation so that we don't +inadvertently fill up a user's drive." A free app that quietly eats disk space is a support +ticket and a trust breach. + +**What's known (from the 2026-10-09 privacy-policy code research — re-verify before building):** +- `Helpers/AppLog.cs` appends to `%APPDATA%\ytLlive\startup.log`, a timestamped line per entry, + with **no size cap or rotation found** (not specifically searched — confirm first). +- `Services/Encoder/FfmpegEncoder.cs` (~:371) logs **every non-progress ffmpeg stderr line** + (≤400 chars each) — the main growth source over long streams. +- Default alert clip is written to `%TEMP%\ytLive-alert-.mp4` + (`ViewModels/MainViewModel.Chat.cs` ~:106) — confirm whether it's ever deleted. +- Recordings (`.mp4`, default `Downloads`) are user-directed, but nothing checks free space. + +**Slices (one integration test each, in order):** + +1. ☐ **Size-capped log rotation** — when `startup.log` passes a cap (~5 MB), roll it to + `startup.1.log` (keep 1–2 old files), start fresh. Test: write past the cap, assert the roll + and the bounded total. Standard pattern (NLog/Serilog `fileSizeLimitBytes` + + `retainedFileCountLimit`) — cite in the commit. +2. ☐ **Temp alert clip cleanup** — delete the `%TEMP%` alert clip on app close (and sweep + stale ones at startup). Test: create, close, assert gone. +3. ☐ **Low-disk guard for recordings** — check free space on the record folder's drive before + Record starts, and warn (toast) when it runs low mid-recording. Thresholds TBD with the creator. + +**Design decisions:** keep `AppLog`'s call surface unchanged — rotation lives inside it.