mirror of
https://github.com/block/buzz.git
synced 2026-08-18 06:50:31 +02:00
Answers Eva's leg question (thread 0a496379): are the felt −240-class media reflow snaps on scroll-up momentum-class (killed by w4a-gate-1), walk-blind (RO-path, a separate leg), or SHRINK-class (needs Max's pre-realization band)? Adds a committed media corpus + classifier so the answer is reproducible from the tip on a fresh build, mirroring the jitter/fast-classify arm. Corpus (e2eBridge `mediaCorpusBody`, channel `media-corpus`, 400 rows, 8 kinds). Row-height error is MEDIA reserve-vs-true mismatch, not text mis-estimation, from three in-source-verified divergence sources: - Link-preview cards reserved flat at PREVIEW_CARD=70 but rendered taller (GROW). - Width-clamp images: CORRECT dims, but the estimator hardcodes MEDIA_MAX_WIDTH=384 while render clamps to max-w-[min(24rem,100%)]; in a column < 384px the render is width-limited shorter than reserved (SHRINK, no lying dim, no decode timing). - Dim-mismatch images in BOTH directions: overstate height (SHRINK) and understate (GROW), so the corpus CAN produce SHRINK — the GROW-dominant prediction is falsifiable, not baked in. No dim-less band: that path is pinned to a fixed 256px box (reserve==mount) and provably cannot reflow. Images use a tiny inline PNG data-URL so they realize without network. (Eva verified the mechanism chain independently in mainbase 2cc0eb53.) Fixture (upscroll-media.perf.ts) clones the fast classifier verbatim — probeLen append-count join, SKIP/GROW/SHRINK/UNATTRIBUTED discriminator, dev, ±2-frame firedNear admission — and only: - navigates to channel-media-corpus, then narrows the viewport to 450px so the timeline column lands below 384px; asserts the measured media-container width is < 384 so the width-clamp SHRINK source provably bites (else it fails loudly); - adds a MEDIA-REFLOW CENSUS: for every above-anchor reflow (|signedShift|>3px), whether it landed on a tracked in-band row and the worst (most-backward) rowMove across it, collapsing a persistent gate-held reflow's per-rAF re-measure into one run so a stuck 198px GROW isn't inflated into hundreds; - asserts MEDIA LIVENESS (>=1 in-band reflow) so a zero-reversal result cannot be a dead corpus; drops the fast arm's decomposition self-test (that re-proves the gate mechanism the jitter arm already ratifies — off-charter here). Result, fresh w4a-gate-1 build, BOTH engines, reproducible from this tip: - Chromium: 0 reversals. 9 reflow runs (5 in-band), 7 GROW / 2 SHRINK. Every in-band reflow worstRowMove >= 0 — incl. a persistent +198 GROW held 170 frames at rowMove 0.0. - WebKit: 0 reversals. 8 reflow runs (4 in-band), 6 GROW / 2 SHRINK. GROW runs gate-SKIPed to rowMove 0.0; SHRINK runs (−14.5) fired-and-corrected to +0.5 (forward). CLASSIFICATION: the media reserve-vs-true reflows are momentum/absorbed-class — the landed w4a-gate-1 fix + correction eat them; not one renders a felt backward snap on either engine. NOT walk-blind, NOT needing Max's pre-realization band. Neither Dawn's GROW-likely nor Eva's SHRINK-likely prediction "wins" in the felt sense: both classes fire, both are absorbed. HONESTY BOUND: this is a deterministic proxy for media reflow, not a claim to reproduce Tyler's exact frames. His live trackpad still owns acceptance; #1662 stays draft. Co-authored-by: Tyler Longwell <tlongwell@block.xyz> Signed-off-by: Tyler Longwell <tlongwell@block.xyz>
Buzz
Desktop chat shell with:
- Tauri + React + TypeScript + Vite
- Tailwind CSS
- shadcn/ui-ready shared components
- Biome (lint/format/check)
- Feature-driven frontend structure
Scripts
pnpm dev- run the web frontendpnpm tauri dev- run the desktop apppnpm build- typecheck and build frontendpnpm typecheck- TypeScript checkspnpm lint- Biome lintpnpm format- Biome format (write)pnpm check- Biome check
Structure
src/shared- reusable app-wide code (ui,lib,styles)src/features- feature modules (vertical slices)src/app- top-level app composition