diff --git a/TASKS.md b/TASKS.md index 243a436..e238f3e 100644 --- a/TASKS.md +++ b/TASKS.md @@ -71,6 +71,24 @@ - **TASK 3** — items 16 (Text source) + 20 (RewardEvent capture → SQLite, Alerts' persistence half) open; **17 (Alerts) is DONE via TASK 43 (2026-09-24) — native six-event alert box** - **TASK 9** — item 5 open (webcam identity key reconciliation) - **TASK 10** — Velopack update URL pending +- **Shipping / release build (creator-queued 2026-09-26)** — no publish config exists yet: + the csproj has only `OutputType=WinExe` + `TargetFramework`, so a plain `dotnet publish` + is **framework-dependent** (customer needs the .NET 8 Desktop Runtime preinstalled). + `Distribution.md` targets a self-contained ~80–120MB `LlamaCasty.exe` uploaded to Polar + as a File Download benefit. Two deliverables: + 1. **`scripts/publish.sh`** wrapping + `dotnet publish ytLive.csproj -c Release -r win-x64 --self-contained true -o ./publish/win-x64`, + and **asserting the output contains no test/xunit artifacts**. (The compile side needs + nothing — the tests are a separate project with a one-way reference, plus explicit + `` in `ytLive.csproj`; the risk is *packaging*: + `ytLive.Tests/bin/.../ytLive.exe` exists and would ship a Debug build + test DLLs if + anyone ever zips a bin folder by hand. Never copy folders; always publish.) + 2. **Condition `InternalsVisibleTo("ytLive.Tests")` to Debug only** (`ytLive.csproj:78-82` + is unconditional, so it ships in Release) — it hands the test assembly name to anyone + decompiling and advertises that `internal` members are externally reachable, which + conflicts with the obfuscation posture in `Distribution.md` §1.2. + Do **NOT** add `-p:PublishTrimmed=true`: WPF is not trim-compatible and it fails at + runtime (BAML/XAML resource resolution), not at build time. `PublishReadyToRun` is safe. - **TASK 12** — queued future - **TASK 13** — queued post-v1 - **TASK 14** — Branch 2 shipped; branch 3+ in progress