Files
LlamaCasty/HANDOFF.md
T

70 lines
4.3 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.
# HANDOFF — 2026-09-25 (TASK 46 shipped + PUSHED: drawers close on any outside click, TEST included)
## Branch / Commit State
`main` HEAD = new commit for TASK 46 (drawer click-outside dismiss for all three tabs);
previous: TASK 45 commit (chat-insert 400 fix), `0981a72`. **PUSHED 2026-09-25
(creator directive after successful testing): `origin/main` = `197ee81..ecb329e`,
up to date, 0 ahead.**
**Working tree CLEAN after this unit's commit.**
## ⚠️ The unit that just shipped (creator directive)
"when the test slide-out is active, then any click off the div should close the div —
this behaviour applies to all tabs, not just TEST."
- **Root cause:** right-rail slides (Stream Settings / YPP / TEST, all inside
`TextPullOutHost`) close on outside clicks via `MainWindow.Window_PreviewMouseLeftButtonDown`
— but that handler only closed `BroadcastForm` + `Ypp`; **`TestSession` was never in the
close list**, so the TEST drawer ignored outside clicks. The XAML comment even said "both".
- **Fix (TASK 46, `TASKS/task-46-drawer-click-outside-close.md`):** add
`TestSession.CloseDrawerCommand` to the same `!IsClickInsideDrawer` branch; corrected
the stale "both" comment. No containment change needed — all three share the rail host.
**Good Dog:** ONE integration test — the existing
`TestStream_DockTooling_And_ThreeWayDrawerExclusivity` section-2 window test was extended:
opens TEST and Stream Settings, raises a window-root `PreviewMouseLeftButtonDown` (source =
window ⇒ outside the rail; deterministic, no OS mouse, immune to the fullscreen mouse-steal
flake), asserts each closes.
**Gate: clean build 0 warnings; full vstest 318/318 passed** (the LayerReorder
real-mouse-drag test passed this run too).
## Follow-ups queued (NOT done in this unit)
- **TASK 3 item 20 persistence half** — the canonical `RewardEvents` SQLite table +
`superChatEvents.list` (30-day) backfill + session-report rollup (events still parse to
`ChatMessage` in memory only).
- TASK 3 item 16 (Text source) still open; TASK 40 units A/C/D queued; TASK 32–36 queued.
## Around the task (carried facts)
- RealMouseDrag tests no-op while a game/fullscreen window steals the mouse (POE 2 seen
2026-09-22) — **close fullscreen windows before full-suite runs**; the single test
passes in isolation when re-run alone. AudioPipeline timing flake similar.
- Test-env trap: saved OAuth session loads synchronously → force `vm.IsConnected` in signed-in tests.
- `subscriberCount` YPP slice 2 needs re-consent — do not merge with other units. `$99/yr` Polar
must become one-time before launch. `MARCOM.md`/`MONETIZATION.md` gitignored — never commit.
- Latent bug the YPP 403 masked: statistics are JSON **strings** — always the ValueKind-first
`ReadInt64` (MyMistakes recipe), never `GetInt64`.
- **API facts (TASK 44 + 45):** a liveChatId fetch at broadcast-insert time (lifecycleStatus
`ready`) returns nothing by design — missing liveChatId ≈ "broadcast not live yet", not an
auth failure, until ~20s post push. And `400 MISSING_REQUIRED_FIELD` from
`liveChat/messages.insert` = wrong body shape (missing `snippet.type`), NOT auth/scope.
- **WPF test technique (TASK 46):** a `MouseButtonEventArgs { RoutedEvent = Mouse.PreviewMouseLeftButtonDownEvent }` raised on the window root deterministically simulates an "outside the drawer rail" click — InputBindings/MouseBindings are NOT triggered by `RaiseEvent` (only by the real InputManager), so no tab toggles fire.
- Every committed change needs a **close + relaunch** of the running app to be seen — running
builds are live; verify can't run while the exe is locked.
## Next step
1. Nothing is in-flight to verify on the drawer path (creator confirmed the behavior
on the last run).
2. When scoped: TASK 3 item 20 (RewardEvents persistence half) draws next.
3. `origin/main` is current (`ecb329e`); future commitments push at the next creator-approved milestone.
## Critical working rules (unchanged, still binding)
- **Good Dog = ONE integration test per change.** Scope lock + `./scripts/scope-check.sh` before commit.
- Windows dotnet host for all WSL builds (`/mnt/c/Program Files/dotnet/dotnet.exe`, quoted paths).
- 0 warnings on real clean builds (verify only, never incremental). One runtime model.
- No menus/polls with the creator; decisions asked once then held; do the work, then report.