mirror of
https://github.com/block/buzz.git
synced 2026-08-18 06:50:31 +02:00
Fetched pages already mount fully into the DOM (no virtualizer since #1338; the markdown parse is paid eagerly at the deferred commit from #1022). But each row wears content-visibility:auto with a heuristic contain-intrinsic-size reserve, so offscreen rows skip layout until they scroll near the viewport — and since the estimate never exactly matches the true height, every realization during a fling changes scrollHeight and forces useAnchoredScroll to compensate mid-momentum. That estimate→true re-realization is the root the reserve heuristic only approximates away. This flag removes the root: with eagerTimelineLayout on, timeline rows opt out of content-visibility skipping entirely. The full fetched window lays out once, at exact heights, at commit time; scrolling through already-loaded history triggers zero height re-realizations and zero anchored-scroll corrections. Cost is a one-time layout of the loaded window (~50 rows/page) instead of pay-as-you-scroll. Mechanics: - preview-features.json: new eagerTimelineLayout entry (desktop), toggled in Settings → Experiments like the other preview lanes. - TimelineMessageList: rows add timeline-row-cv-eager when the flag is on. The reserve style stays on the wrapper — inert without size containment — so flag-off behavior is byte-identical to main. - utilities.css: .timeline-row-cv.timeline-row-cv-eager flips content-visibility to visible. - timeline-no-shift e2e: the wiring guard now asserts the eager path (the e2e bridge opts every preview feature in), and a new sibling spec with seedPreviewFeatures:false pins the default auto path. Portable classifier (sami/portable-classifier 5e5bd4a5, advisory per arc law — Tyler's trackpad judges): baseline at this tip scores 19 post-momentum bites @60px max (chromium) / 22 @60px (webkit); flag-ON scores 0 bites / 0.0px max on both engines, stable across repeat runs, with healthy momentum-frame populations (~226-238). Verified: typecheck, biome, 2217 unit tests, timeline-no-shift 6/6, scroll-history + overscroll-boundary + channel-window-mock-paging + live-broadcast-reply-timeline 20/20, messaging 31/31. Co-authored-by: Tyler Longwell <tlongwell@block.xyz> Signed-off-by: Tyler Longwell <tlongwell@block.xyz>
54 lines
1.4 KiB
JSON
54 lines
1.4 KiB
JSON
{
|
|
"version": 1,
|
|
"features": [
|
|
{
|
|
"id": "workflows",
|
|
"name": "Workflows",
|
|
"description": "YAML-defined automations with approval gates",
|
|
"platforms": [
|
|
"desktop"
|
|
]
|
|
},
|
|
{
|
|
"id": "projects",
|
|
"name": "Projects",
|
|
"description": "Git repository browser and collaboration",
|
|
"platforms": [
|
|
"desktop"
|
|
]
|
|
},
|
|
{
|
|
"id": "pulse",
|
|
"name": "Pulse",
|
|
"description": "Activity feed with notes, social posts, and agent activity",
|
|
"platforms": [
|
|
"desktop"
|
|
]
|
|
},
|
|
{
|
|
"id": "workspaceRail",
|
|
"name": "Workspace Rail",
|
|
"description": "Far-left rail for switching relays with cross-relay unread indicators",
|
|
"platforms": [
|
|
"desktop"
|
|
]
|
|
},
|
|
{
|
|
"id": "forum",
|
|
"name": "Forum Channels",
|
|
"description": "Forum-style threaded channels for long-form discussions",
|
|
"platforms": [
|
|
"desktop"
|
|
]
|
|
},
|
|
{
|
|
"id": "eagerTimelineLayout",
|
|
"name": "Eager timeline layout",
|
|
"description": "Lay out every fetched message row immediately instead of skipping offscreen rows (content-visibility). Heights are exact from the start, so scrolling never triggers height re-realizations or position corrections mid-fling — at the cost of a one-time layout of the full loaded window.",
|
|
"platforms": [
|
|
"desktop"
|
|
]
|
|
}
|
|
]
|
|
}
|