docs: revert record + spin guard — web transparency fix (0f441d8) FAILED and reverted (1295e0e)

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.
This commit is contained in:
2026-09-05 16:22:41 -07:00
parent 1295e0ed80
commit 98d30c2056
2 changed files with 55 additions and 11 deletions
+40 -11
View File
@@ -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