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
+15
View File
@@ -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