Three creator directives (2026-11-01), done ahead of the surge. **Gear moved to the preview rail** — first tab, orange (Brush.Attention), gear icon only. Left-click opens the same app menu the top bar gear owned (Settings / Bug / Feature / About), right-click goes straight to App Settings; both behaviours moved with it, so nothing lost an entry point. TopBar keeps the wordmark and EDIT. **EDIT right edge aligned to the layers panel.** The work area is margin 8 + a 360px column, the top bar is padding 16, so the shared edge is 352 inside the bar. TopBar column 0 is now a fixed 352 grid with EDIT right-aligned in it — alignment by arithmetic instead of by eye. **Preview undo/redo: Ctrl+Z / Ctrl+Shift+Z.** Models/PreviewHistory snapshots element REFERENCES plus geometry, visibility, order and membership — a deep clone would mirror every property of a dozen element subclasses and quietly miss the next one added. One snapshot per gesture (pushed at drag/resize start, never in the move loop), bounded at 50, redo survives multiple undos, cleared on layout load. Gated on EditingActive: undo while the preview shows program output would rewrite a scene nobody is looking at. Honest scope, in the type's doc comment: layout edits only. Colour/opacity/border/font edits are not captured yet, so Ctrl+Z after one of those restores the last layout change. 6 tests in PreviewHistoryTests; 19 pass across it and the neighbouring UI classes; Debug and Release both build at 0 warnings.
41 lines
2.7 KiB
Markdown
41 lines
2.7 KiB
Markdown
# HANDOFF — 2026-11-01 (exe renamed, depot builds, output rule enforced)
|
||
|
||
## State
|
||
|
||
- Branch `main`, level with `origin` through `8f79b20`; this unit is local.
|
||
- **The shipped exe is `LlamaCasty.exe`** (`AssemblyName` renamed; four pack URIs fixed — the docs
|
||
said three, `KeepBroadcastDialog.xaml:5` was the fourth). Guarded by `AssemblyIdentityTests`.
|
||
- **`scripts/publish.sh`** stages `artifacts/steam-stage` and refuses to finish if `ffmpeg\`, the
|
||
licence, privacy or notices file is missing, or test assemblies leaked in. Output 257 MB.
|
||
- **The output-profile rule is built and enforced**: `Models/OutputProfile.cs` (921,600 px / 30 fps,
|
||
fail closed) resolved once in `BuildEncoderOptions` — one ffmpeg process, two outputs.
|
||
`MainViewModel.DeveloperMode` bypasses it in Debug only.
|
||
- **Distribution is Steam-exclusive** (2026-10-31): free app + paid edition as a Steam **DLC**; the
|
||
**$10/month** plan sold off-Steam by Polar, *stated, never sold*, in-app. Entitlement is
|
||
`steamDlcOwned || polarKeyValid`; the app must start without Steam, falling back to free.
|
||
- **Site live with Steam** (`a9d07ce`); `www.llamacasty.com` 301s to the apex.
|
||
|
||
## Next action
|
||
|
||
**Surge, 2026-11-02 → 11-07 — six days, all remaining code.** Undo/redo, the rail gear and the
|
||
EDIT alignment landed early on 11-01, so day 6 has room. Day 1 unchanged: licensing —
|
||
`IEntitlement` + Steam DLC + fake, `HasProOutput` on the seam, greyed tiers, licence UI's four
|
||
states, system messages, licence ID in About. Days 2–6 in `TASKS.md` → "The surge".
|
||
No scope beyond that list. No polish before day 6.
|
||
|
||
## Landmines
|
||
|
||
- **⛔ `ExcludeFromSingleFile="true"` on the ffmpeg content** — without it the publisher bundles
|
||
libav\*.dll into the exe and the app ships unable to find ffmpeg. Recipe in `MyMistakes.md`.
|
||
- **Dev affordances are compiled out, not hidden** — `DeveloperPanel` is removed from the Release
|
||
build; `Helpers/DevBuild.cs` is the single source for the flag (never `const`).
|
||
- **Nothing may gate a feature.** The only paid delta is the output profile; `ShowBrandFlash` stays
|
||
`false` and entitlement must never enable it.
|
||
- **No checkout inside a Steam build** — the Wallet rule. The monthly is named, never sold, in-app.
|
||
- **The org access token never ships.** `organization_id` is public; the token is not.
|
||
- **The site publishes the model, never the numbers**, and never takes payment or links a checkout.
|
||
- **No self-updater and no version banner**: Steam updates the app.
|
||
- Pre-existing: the **full test suite hangs** (WASAPI teardown) — per-class runs; `ytLive.Tests`
|
||
carries 3 xUnit warnings the app-only gate does not see.
|
||
- Not every hex is a theme colour — `BorderColorPalette`/chat defaults are USER DATA, not tokens.
|