Files
LlamaCasty/HANDOFF.md
T
gramps fe80e8c994 Docs: record the zoom box as TASK 52 and fix the task-numbering drift (Unit: zoom docs)
The zoom feature shipped without a task record while its index rows carried the
"TASK 51" label — which belongs to the webcam background effects (Remove + Blur).
For an honest catalogue and handoff:

- TASKS/task-52-zoom-box.md: feature provenance (creator-requested), the three
  2026-10-08 corrections (loupe -> anchored capture over the full composite drawn
  last -> never show the dim shading), shapes, implementation map, tests, DONE.
- TASKS.md: row 52 added (shipped); row 51 reworded — unblocked now that the
  zoom build shipped.
- TASK 51 -> TASK 52 in Models/index.md, ViewModels/index.md, and the two code
  comments that pointed at the zoom as "TASK 51".
- HANDOFF.md: pre-push readiness notes (5 commits ahead, push-safe).
2026-10-08 08:52:36 -07:00

4.1 KiB

HANDOFF — 2026-10-08 (zoom box shipped, READY FOR PUSH)

Branch

  • main (no feature branch)

Push readiness

  • 5 commits ahead of origin/main, clean to push (fetch confirmed origin has not moved): 966e718 zoom box visuals → 4b3d82f zoom as layered + TASK 51 booking → 6bff21b anchored-capture rework → 948dd08 dims-shading fix → (docs unit: TASK 52 record + numbering fixes + this HANDOFF).
  • The pinned-chat work unit below is uncommitted on purpose — git push sends only commits, so pushing is safe; the dirty files stay local.

Dirty files (NOT mine — the in-flight "pinned chat" work unit; do NOT commit or co-edit)

  • Models/YouTube.cs
  • ViewModels/MainViewModel.Chat.cs
  • Controls/LeftPanel.xaml (pinned-message UI)
  • Untracked: Helpers/RelayCommandGeneric.cs

What just happened (2026-10-08, third zoom pass — dims shading)

The zoom box shipped as a loupe (4b3d82f), then was corrected to an anchored-capture magnifier over the full composite drawn last (commit 6bff21b). The final correction: as the box is dragged, the dim rectangles (55% black "div shading" around the box) were sliding under the capture region — shown inside the box because its VisualBrush samples all of CanvasGrid, and the DimRects ItemsControl previously lived INSIDE CanvasGrid.

Fix: the DimRects overlay is now a sibling of CanvasGrid (renders above the composed content, below the ZoomBox), never a descendant — so the zoom sample can never pick up the shading and the captured area stays clear no matter where the box is dragged. Behavior consequence to note: in non-zoom ("quality dims") mode the dims now also shade the global overlays (brand flash, alert ticker, social bar) that sit above them in the old tree — consistent with "chrome outside the crop is dimmed". Structural invariant added to ZoomBoxInteractionTests: DimRectsLayer is a direct child of PreviewCanvas, not inside CanvasGrid, and renders below the ZoomBox.

Zoom feature state

  • TASK 52 (zoom box) is now a first-class record — see TASKS/task-52-zoom-box.md: feature provenance + the three creator corrections, shapes, implementation map, tests. TASK 51 (webcam background Remove + Blur) is unblocked for the next unit.
  • Models: ZoomState.cs, ZoomShape.cs (Circle/VerticalRectangle/HorizontalRectangle), ZoomSceneElement.cs.
  • ViewModel (MainViewModel.Zoom.cs): ActivateZoom/ToggleZoom/DismissZoom/StartZoomMove/UpdateZoomMove/EndZoomMove + RebuildDimRectsForZoom; transient element healed/mirrored by HealZoomLayers/EnsureZoomLayer.
  • Output: box composited last via BlitZoom/ZoomMagnifier; output crop = tier (box never the crop).
  • Preview: ZoomBox + DimRectsLayer are both SIBLINGS of CanvasGrid (box above dims above content); box samples the full composite at the fixed capture, 2x; circle→ellipse clip, rect/square outline per shape; LeftPanel hides the placeholder row via IsZoomLayer.
  • Rectangle shape = 4:3; Circle square; Phone 9:16. Capture anchored on click (CaptureX/Y); dragging the box never changes it.

Tests

  • Full suite: 406 passed / 0 failed on a clean full run (the pre-existing audio-loopback timing flake and RealMouseDrag's interactive-desktop requirement recur occasionally — not zoom regressions). Zoom tests 3/3 green, 0 build warnings.

Known issues / follow-ups

  • Background "Use default background" toggle still not working (carried from 2026-10-07): binding exists (UseDefaultBackground), VM handler invalidates bake; investigate when time permits.
  • The 3px selection / crop-outline strokes could still show in the zoom box IF the capture overlaps them in edit mode — not shading, thin outlines only; the dims (the user's complaint) are gone.

Next step

  • User runs the app live to eyeball: drag the zoom box anywhere and the captured content stays clean (no dim shading in the box; the scene outside the box stays dimmed). Then TASK 51 (webcam background Remove + Blur) per TASKS/task-51-webcam-bg-effects.md, and the background-toggle investigation if still open.