You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Figma-style measurement in the new trace viewer: with a span selected, hold Alt and hover any other row to see the time delta between the two spans, drawn as a single measurement line.
CleanShot.2026-07-17.at.11.26.19.mp4
How it works
Selection + Alt + hover → one measurement between the selected (anchor) span and the hovered row's span: a stub + vertical guide off the anchor bar's measured edge, elbowing into a 1px line that ends at the hovered span's start, with a duration chip.
Delta rule: disjoint spans → gap (anchor end → later start, same semantic as the existing sibling gaps); overlapping/contained spans → start-to-start offset ("how far into the run did this step start").
No selection → the existing all-consecutive-gaps overlay, restyled to the same measurement-line design (the old I-beam + pill DeltaIndicator is deleted; both modes render through one DeltaMeasureLine component).
Edges clamped by the viewport keep the true duration in the label; if the hovered span is fully off-screen, the line stops short of the row's edge arrow.
Implementation
New pure computeSpanDelta() in utils.ts next to computeSpanGaps, unit-tested (disjoint both directions, overlap, containment, identical starts, zero-duration, clamping, off-screen).
Hovered row derived from clientY in the existing timeline mousemove handler (now a single TimelineHover {fraction, rowIndex} state) — no per-row listeners, TimelineBar memoization untouched.
Overlay renders in the existing absolute, pointer-events-none layer, so it works across virtualized rows.
Replaces #2976 (was opened from the wrong branch and included stale commits).
All non-changeset changes are confined to packages/web-shared/src/components/new-trace-viewer/, which does not exist on stable (verified via git ls-tree origin/stable — stable only has the older trace-viewer directory). This is a feature for the main-only new trace viewer and has nothing to apply against on stable.
To override, re-run the Backport to stable workflow manually via workflow_dispatch and paste this commit SHA into the ref input:
* origin/main: (21 commits)
docs(agents): note lint/format/typecheck are advisory, not blocking (#2886)
Retry transient connection timeouts (#3013)
fix(world-vercel): append caller User-Agent products instead of discarding them (#2998)
[ci] Enable NestJS e2e-vercel-prod and add to docs as "experimental" (#3011)
[ci] Benchmark comment: Best column + best/p75/p99 deltas (drop Avg/P10) (#3005)
docs: fall back to first child page for sidebar folders without an index (#3009)
[nest] Fix NestJS Vercel build output (#2988)
Avoid resolving run data for background steps (#2993)
chore(docs): update @vercel/geistdocs to 1.14.0 (#3002)
fix(docs): add version-switcher fallback redirects for pages missing in one version (#3003)
ci: update opencode to 1.18.4 and switch backport AI model to claude-fable-5 (#3006)
fix(core): batch stream writes via writeMulti (#2995)
perf(core): cache port discovery in step invocations for self-hosted worlds (#2996)
feat(web-shared): Alt+hover span measurement in the new trace viewer (#2985)
fix(world-postgres): throw EntityConflictError on duplicate run_created (#2983)
[ci] Run benchmarks in-deployment to avoid proxy overhead (#2967)
Enable additional perf optimizations when correctness guarantees are met (#2970)
perf(core): prepare replay payloads concurrently (#2980)
Fix dotted tsconfig alias workflow discovery (#2963)
Adjust helper position on trace viewer (#2968)
...
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Figma-style measurement in the new trace viewer: with a span selected, hold Alt and hover any other row to see the time delta between the two spans, drawn as a single measurement line.
CleanShot.2026-07-17.at.11.26.19.mp4
How it works
DeltaIndicatoris deleted; both modes render through oneDeltaMeasureLinecomponent).Implementation
computeSpanDelta()inutils.tsnext tocomputeSpanGaps, unit-tested (disjoint both directions, overlap, containment, identical starts, zero-duration, clamping, off-screen).clientYin the existing timeline mousemove handler (now a singleTimelineHover {fraction, rowIndex}state) — no per-row listeners,TimelineBarmemoization untouched.Replaces #2976 (was opened from the wrong branch and included stale commits).
🤖 Generated with Claude Code