From 98d30c205660040badcbca9e4e0dba2673379838 Mon Sep 17 00:00:00 2001 From: gramps Date: Sat, 5 Sep 2026 16:22:41 -0700 Subject: [PATCH] =?UTF-8?q?docs:=20revert=20record=20+=20spin=20guard=20?= =?UTF-8?q?=E2=80=94=20web=20transparency=20fix=20(0f441d8)=20FAILED=20and?= =?UTF-8?q?=20reverted=20(1295e0e)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit User tested: 'didn't work at all, and broke additional crap.' Second failed remedy for web-source-over-webcam dark composite -> AGENTS.md spin guard: no third guess; next attempt requires external research (OBS/CEV browser-source transparency in recorded output, cited URL) plus the blank-page falsifier. HANDOFF OPEN list updated: research-first step added, #11 noted landed as d35823a. --- HANDOFF.md | 51 ++++++++++++++++++++++++++++++++++++++++----------- MyMistakes.md | 15 +++++++++++++++ 2 files changed, 55 insertions(+), 11 deletions(-) diff --git a/HANDOFF.md b/HANDOFF.md index 65f5cf5..dfc6a64 100644 --- a/HANDOFF.md +++ b/HANDOFF.md @@ -2,9 +2,10 @@ ## Branch / Commit State -**`main` HEAD = `c46f3a1` (#9)** — tree identical to `fbc8562` (slice 8, single-loop pump). Working tree -CLEAN. This is the user-confirmed **last working commit** — output recordings were tear-free here and -time-lapse again (the 7fcb2ad-era pacing, expected pre-buffer-ring). +**`main` HEAD = `1295e0e`** — a revert; see "REJECTED this session" below. **`#11` from the roll-forward +landed as `d35823a`** (release counter in wordmark; capture/camera/web rings 4→8 + Epoch — three-loop +hunks dropped per plan). User tested take-15 frame (~clean). Recording output since then: webcam +"black square" regression under the web overlay is OPEN (details below). **`today-slices` branch @ `ce87490` (#17)** — preserves ALL 17 commits of the 7fcb2ad→ce87490 chain (1 `716a77f` … 17 `ce87490`), including the two-loop producer, encoder staging fix, chat fix, e2e @@ -17,6 +18,32 @@ harness. Nothing is lost; never hard-reset away from it without preserving. this commit. - **`today-slices` @ `ce87490`** preserves the entire 17-commit chain — the fallback recovery point. +## REJECTED this session (2026-09-05) — web transparency fix FAILED, reverted + +**`0f441d8` "composite consumes the FULL canvas" was wrong.** Theory: the alpha-crop fed to the +compositor's UniformToFill zoomed opaque content over the whole element rect → black box. Fix: hand +the compositor the full transparent-background canvas (8-deep ring + Epoch), keep the alpha crop for +the preview/selection only. User tested: **"didn't work at all, and broke additional crap."** Reverted +as `1295e0e`. Tree verified back at the #11 state; builds 0 warnings both projects. + +Two hard facts the theory did NOT anticipate: +1. An opaque dark band still covers the webcam region in the RECORDING (the "broke additional crap" + may be the widget reappearing over the webcam in the preview/preview sizing — unconfirmed). +2. The preview half looked fine while the recording half was dark, per the user, all along. + +**SPIN GUARD TRIGGERED (AGENTS.md Working rules):** this is the second failed remedy for the same +symptom (web sources composite dark/opaque over other layers in the recording). Third-guessing over +the same code is forbidden. Next attempt MUST start with external research — how OBS / CEV / +other overlay toolchains keep browser-source transparency in the *recorded* output, cited in the +commit message AND MyMistakes.md before coding. Likely seams to revisit after that research: +`CapturePreviewAsync` PNG alpha → `FormatConvertedBitmap` w/ `PixelFormats.Bgra32` (does the +premultiplied/straight-alpha conversion drop alpha?), and the preview-vs-recording consumer +difference (preview = WriteableBitmap on the dispatcher; recording = composite read on the pump +thread) — but NO code until the research says what to do. Also: the user's very first observation — +"webcam blacked out by the animated web resource layer" — may mean the widget's HOST page itself +paints an opaque/dark background (injection script wouldn't fix a page that sets its own bg) — verify +against a blank page, not an alert host, before blaming the compositor again. + ## The commit list (for picking this up anytime) Numbered oldest→newest (#0 = the working baseline the user picked: `7fcb2ad` "zero known failures era @@ -97,16 +124,18 @@ and apply cleanly. ## OPEN — next, in order -1. **#11 `6fd1d9c`** — tell user what it does (release counter; capture rings 4→8 + new camera/web - rings), apply via cherry-pick with the two-loop-only FramePump hunk dropped; user tests; proceed or drop. -2. **#12 `d1126dd`** — compositor raster reuse + MJPEG camera negotiation + stats formatting (FramePump +0. **Webcam-black-square-under-web transparent: research FIRST.** Second failed remedy → spin guard. + Externally research how OBS/CEV keep browser-source transparency in recorded output; cite the URL + in the commit AND MyMistakes before any code (see REJECTED section above). User tests each attempt. + Do NOT touch the compositor/web code until the research is done. +1. **#12 `d1126dd`** — compositor raster reuse + MJPEG camera negotiation + stats formatting (FramePump hunk dropped). -3. **#13 `e4621c1`**, **#14 `b4f6a92`** — docs. -4. **#15 `7bf00a9`** — e2e smoothness bar (re-tune thresholds to single-loop measurements if needed). -5. **#16 `1a808ae`** — chat empty-buffer composite fix + test. -6. **#17 `ce87490`** — encoder staging snapshot (the genuine tear cure — applies on the single loop as +2. **#13 `e4621c1`**, **#14 `b4f6a92`** — docs. +3. **#15 `7bf00a9`** — e2e smoothness bar (re-tune thresholds to single-loop measurements if needed). +4. **#16 `1a808ae`** — chat empty-buffer composite fix + test. +5. **#17 `ce87490`** — encoder staging snapshot (the genuine tear cure — applies on the single loop as belt-and-suspenders). -7. **Unit B (top bar + session logic)** — spec + settled decisions are in the old HANDOFF history on +6. **Unit B (top bar + session logic)** — spec + settled decisions are in the old HANDOFF history on `today-slices`; don't re-ask. ## Landmines diff --git a/MyMistakes.md b/MyMistakes.md index 4d1f467..51ecc49 100644 --- a/MyMistakes.md +++ b/MyMistakes.md @@ -15,6 +15,21 @@ ## 🔬 Recipes registry +### ⚠ FAILED remedy (spin guard, 2nd strike) — web overlay composites dark over the webcam + +(2026-09-05, takes 19-2/20 + user re-test) Attempt `0f441d8`: feed the compositor the FULL +transparent-background canvas instead of the alpha crop (crop = measure-only). User verdict: +**"didn't work at all — broke additional crap."** Reverted (`1295e0e`). I hypothesized the +alpha-crop→UniformToFill zoom; the fix changed that and the recording was still dark, so the +crop→zoom was NOT the mechanism. **Due to AGENTS.md's spin guard this is the second failed remedy — +NO third guess over the same code.** Before the next attempt: research externally how OBS/CEV keep +browser-source transparency in the *recorded* composite (cite URL), AND test the simplest falsifier +first — a blank transparent page with no widget content — to decide whether the dark band is the +widget's own page background (host pages that set their own bg defeat the injection script) rather +than the compositor. Do not re-derive; the seam candidates (CapturePreviewAsync PNG alpha through +FormatConvertedBitmap premultiplied/straight; preview-dispatcher vs pump-thread consumers) stay +unconfirmed and untouched until the research names one of them. + ### Shrink / re-encode an image for the README (screenshots → small hero image) Worked out 2026-08-29 (the recipe was NEVER recorded the first time it was done, so