49 lines
3.9 KiB
Markdown
49 lines
3.9 KiB
Markdown
# HANDOFF — Session State
|
||
|
||
## Branch
|
||
`task24-notifications` (from `main` @ `809c066`, which is pushed) — **dirty, uncommitted**, TASK 24 complete and green.
|
||
|
||
## Uncommitted work: TASK 24 toast notifications — COMPLETE, ready to commit
|
||
|
||
1. **Library:** `Notification.Wpf` 11.0.0 added to `ytLive.csproj` (MIT; notice #10 in `THIRD-PARTY-NOTICES.txt`). Restore pulls `Notification.CoreUI` 11.0.0 + `Microsoft.Xaml.Behaviors.Wpf` 1.1.142 + DI.Abstractions 10.0.8.
|
||
2. **Seam:** `Services/INotificationService.cs` (`Show(title, message, AppNotificationSeverity)` + Info/Success/Warning/Error extensions); `Services/NotificationService.cs` impl — pure `BuildRequest` mapping + `Cards` tint table, Dispatcher-marshalled Show. Host: `NotificationArea x:Name="ToastArea"` last child of MainWindow root grid (`RowSpan=4`, bottom-right above footer, `Margin="0,0,12,96"`).
|
||
3. **Call sites** (`ViewModels/MainViewModel.cs`): 5 MessageBox migrations (webcam ×2 → Warning, image read → Warning, sign-in unsuccessful → Warning / failed → Error) + 7 log-only promotions (go-live prep ×3 Error, frame-pump death Error, mic-missing Warning, premium-lapse Warning, saved-session sign-out Info). Offline license re-validation skip left log-only on purpose; SocialsDialog slot-delete confirm stays modal. `_notifications` field initialized at declaration (VM built from XAML).
|
||
4. **Tests:** unit `NotificationServiceTests` (8 cases: routing/lifetimes/tints) + the ONE integration `NotificationAreaIntegrationTests.Info_Auto_Dismisses_And_Error_Sticks` (real window-hosted area; visual-tree reads marshalled via `_app.Run`).
|
||
5. Build **0 warnings**; **221 total, 218 pass** — only the 3 pre-existing failures below.
|
||
|
||
## ⚠️ Landmines
|
||
|
||
- **User verdict (2026-08-23):** "The AI wrote fucked up code after repeatedly and intentionally misunderstanding instructions." Extends the ai.md 2026-08-22 audit flag — trust nothing from those sessions without manual verification.
|
||
- **Pre-existing test failures are THREE (not caused by this branch):**
|
||
1. `AudioPipelineTests.Mix_HonorsProviderGains_AndGameMute_KillsTheLoopback`
|
||
2. `SourceNamingTests.Duplicate_Sources_Get_Next_Free_Numbered_Name` (StagedScene seeds a "Game Capture" the test doesn't filter)
|
||
3. `SceneCatalogTests.EnforceBackgroundPolicy_Sets_Flag_For_All_Scenes` (asserts against elements never inserted)
|
||
- **Real-MainWindow tests MUST set `LayoutPathOverride`** (ai.md) — DB pollution wiped real data once.
|
||
- Notification.Wpf gotchas (recorded in ai.md/TASKS.md): area routing by XAML `Name`; unknown AreaName silently drops; `NeverExpires()` = `TimeSpan.MaxValue`; `ToHex()` = `#AARRGGBB`.
|
||
|
||
## Next steps
|
||
1. Commit this branch (code + docs + notices, one commit), then merge/PR per Good Dog Rule (one integration test ✓).
|
||
2. User visual pass on Windows: toasts look right bottom-right, error sticky with close button, no overlap with footer/chat.
|
||
3. Then the stale background tests repair queue (unit-level): SourceNaming filter + SceneCatalog policy test.
|
||
|
||
## Build
|
||
```bash
|
||
taskkill.exe /F /IM ytLive.exe # if running
|
||
"/mnt/c/Program Files/dotnet/dotnet.exe" build "C:\Users\gramp\Documents\Code\projects\ytLive\ytLive.csproj"
|
||
"/mnt/c/Program Files/dotnet/dotnet.exe" vstest "C:\Users\gramp\Documents\Code\projects\ytLive\ytLive.Tests\bin\Debug\net8.0-windows10.0.19041.0\ytLive.Tests.dll"
|
||
```
|
||
|
||
## Polar.sh resources
|
||
| Resource | ID |
|
||
|---|---|
|
||
| Org ID | `c05fb364-b967-4f6c-adf2-8a144e46d085` |
|
||
| Product | `d105dfa1-497e-423b-8cd4-e0ee2e3abbc0` |
|
||
| Price | `7c1b6f70-cf8c-46df-9bc8-6703f9fa64d0` |
|
||
| Benefit | `80f66bc1-d5a3-44a1-b9ea-1709ae508535` |
|
||
| Checkout URL | `https://buy.polar.sh/polar_cl_ueMy8AyAClO0o0yo19IroZwKTbD587gzUsjEW3bFapw` |
|
||
| Validate endpoint | `POST https://api.polar.sh/v1/customer-portal/license-keys/validate` |
|
||
| Key prefix | `LCYT-` |
|
||
|
||
## v1 vision
|
||
> A streaming tool so intuitive it needs no manual — go live or record in minutes, OBS-free.
|