# MyMistakes.md > One task at a time. Updated before every commit touching that task: current iteration + > why the last one failed. On task complete, committed AND pushed → truncate to this stub. > A new task does NOT seed this file until its first failure. ## Task (active — committed `582d1f4`, NOT pushed, awaiting creator verification) Stream widget bounding box: hug the widget on all four sides, pinned to canvas (0,0). ## Iterations that failed 1. **e917c41 — fixed 1920×1080 viewport + `Stretch="Uniform"` + startup registration.** Failed: `Uniform` letterboxed the 16:9 canvas into arbitrary‑sized boxes → asymmetric dead padding read as a "gap". Lesson: Fill the box with the cropped frame, never Uniform. 2. **9d4103c — per‑document CSS reset (`html/body` width/height 100%) + (0,0) anchor.** Failed ("enlarged the gap"): forcing dimensions overrode the widget's own layout and expanded the dead space. Lesson: inject only `overflow:hidden` + transparent background — never set sizes. 3. **8d793af — viewport == element‑box size + `Stretch="Fill"`.** Failed (janky / truncating / scrollbars): hosting at the box size clips full‑bleed widgets to their upper‑left chunk, and tracking the box reflows the page on drag. Lesson: render at a fixed canvas size, never track the box. 4. **f39ebd9 — crop capture to `scrollWidth/scrollHeight` bounds + (0,0) + Fill.** Partially passed (panel fixes 1a/1b/4 confirmed) but the box stayed loose; the apparent "tight right/bottom" was just the small‑viewport clip edge. **ROOT CAUSE: the crop never ran.** The script returned `JSON.stringify(...)` (a string); `ExecuteScriptAsync` JSON‑encodes every result, so the JSON was double‑encoded → `JsonDocument.Parse` got a string node → `GetProperty` threw → try/catch swallowed → bounds unset → no crop. Lesson: return a real JS object, never a stringified one. Also: scroll extents ≠ widget rect (they include page margins). 5. **70fe2b8 — fixed canvas‑size viewport (1920×1080) + crop + Fill.** Image render/resize became solid (creator confirmed) but the box still gapped right/bottom and wasn't 0,0. Same silent JSON bug — the crop still never executed — and the measure was scroll extents regardless. Lesson: verify declared mechanics actually execute; assume nothing ran. ## Current iteration (web bounding box — UNCOMMITTED, verification pending) CONTAINER == CONTENT. The element grid and the selection box now SIZE to the cropped frame: `WebView2Manager.ContentCanvasSize` maps the alpha-crop pixel rect to MASTER CANVAS units (1920/pixW per axis, DPI-correct) and the preview event carries it; `MainViewModel` sets the Source.Width/Height (the grid + SelectionOverlay bindings) to that size. No Fill-stretching of a cropped bitmap into a larger frame — the box IS the widget. Auto-fit is suppressed while the drag/resize gesture is active (`IsPreviewDragging`, set by MainWindow code-behind). ## Iteration that just failed (`bccdb48` — alpha crop, but container stayed at Source.Width/Height) Crop trimmed the bitmap but the element grid/box still rendered at the UNcropped user-set size, so Fill stretched the tight widget across a larger frame and dead space floated between content bounds and the selection border. Lesson: fixing the BITMAP is not fixing the BOX — the layout container must match the cropped dimensions or the gap persists by construction.