Files
LlamaCasty/TASKS/task-55-disk-hygiene.md
T

30 lines
1.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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-<id>.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.