Skip to content

fix(app): add timeline layout transactions - #832

Merged
Astro-Han merged 24 commits into
devfrom
pawwork/issue-747-pr2-layout-transactions
May 22, 2026
Merged

fix(app): add timeline layout transactions#832
Astro-Han merged 24 commits into
devfrom
pawwork/issue-747-pr2-layout-transactions

Conversation

@Astro-Han

@Astro-Han Astro-Han commented May 21, 2026

Copy link
Copy Markdown
Owner

Summary

  • Add a minimal timeline layout transaction coordinator for dock/content resize windows.
  • Tag scroll-command diagnostics with transaction metadata and report transaction violations.
  • Widen virtualized row overscan only while a transaction is active, then return to the normal long-session budget.

Why

This PR lands #747 PR2's minimal layout transaction layer for controlled dock/content resize windows. It does not complete the later PR3+ TimelineLayoutEngine migration and does not retire all legacy scroll owners.

Related Issue

Refs #747

Human Review Status

  • Pending — waiting for a human reviewer to approve.

Review Focus

  • Whether transaction-scoped restore paths keep scroll execution behind TimelineScrollCommandSink.
  • Whether legacy bottom-follow behavior is preserved when the user is pinned to latest.
  • Whether the temporary virtualizer overscan increase is narrowly scoped to active transactions.

Risk Notes

This is #747 PR2 only. It does not complete the later TimelineLayoutEngine migration and does not retire every legacy scroll owner. The coordinator still delegates final scroll execution to TimelineScrollCommandSink.

Skipped checklist items:

  • Manual visual check: no intended visual or copy change; the user-visible surface is scroll stability. Targeted E2E checks were attempted but currently fail before reaching the changed surface because project.open() lands on a 404 during waitSession in this worktree.
  • Platform impact: no platform, packaging, updater, signing, shell, permission, or installer surface touched.
  • Docs/release/dependencies/local files: no shipped docs, release notes, dependencies, permissions, credentials, generated files, deletion behavior, or staged local-only files included.

Content-resize E2E deferred because deterministic streaming resize seed is unavailable; coordinator unit tests cover fallback semantics and existing runtime gate covers dock resize windows.

How To Verify

Focused session/unit tests: PASS — 70 pass, 0 fail
Command: bun test --preload ./happydom.ts src/pages/session/timeline-layout-transaction.test.ts src/pages/session/timeline-layout-stable-band.test.ts src/pages/session/timeline-scroll-command-sink.test.ts src/pages/session/timeline-scroll-ownership-guard.test.ts src/pages/session/use-session-scroll-dock.test.ts src/pages/session/session-timeline-scroll-controller.test.ts src/pages/session/session-timeline-scroll-anchors.test.ts src/pages/session/timeline-virtualization-strategy.test.ts src/pages/session/timeline-row-layout.test.ts

Runtime CLS probe unit tests: PASS — 8 pass, 0 fail
Command: bun test ./e2e/perf/runtime-cls-probe.unit.ts

Typecheck: PASS — 8 successful, 8 total
Command: bun run typecheck

Whitespace: PASS — no output
Command: git diff --check

Runtime CLS E2E gate: ATTEMPTED, blocked before changed surface — 3/3 failed at project.open() / waitSession with 404 page snapshots
Command: bun test:e2e -- e2e/perf/runtime-cls-gate.spec.ts -g \"runtime CLS source gate\"

Session scroll E2E: ATTEMPTED, blocked before changed surface — 4/4 failed at project.open() / waitSession with 404 page snapshots
Command: bun test:e2e -- e2e/session/session-scroll-position.spec.ts

Low-end scroll perf smoke: ATTEMPTED, blocked before changed surface — failed at project.open() / waitSession with 404 page snapshot
Command: PAWWORK_PERF_PROFILE=low-end PAWWORK_PERF_SCENARIOS=session-scroll-reading-long bun test:e2e -- e2e/perf/perf-probe.spec.ts -g \"session-scroll-reading-long\"

Screenshots or Recordings

Not applicable: no intended visual or copy change. Failed E2E attempts produced 404 screenshots under packages/app/e2e/test-results/, before reaching the changed timeline surface.

Checklist

  • Type label — this PR carries exactly one of bug, enhancement, task, documentation. Type labels are author-added; the labeler bot does NOT assign them. Add the label in the GitHub UI, then tick this.
  • Routing labels — this PR carries at least one of app, ui, platform, harness, ci. The labeler bot assigns these on PR open based on changed paths. Confirm the bot's choice (or override if wrong), then tick this.
  • Priority label — this PR carries exactly one of P0, P1, P2, P3. The priority-triage bot suggests one on PR open. Confirm or override, then tick this.
  • Human Review Status above is set to Pending, Approved by @<reviewer>, or Not required: <reason> (default is Pending; "not required" is restricted to bot-authored low-risk PRs).
  • I linked the related issue, or stated in Summary why there is no issue.
  • I described the review focus and any meaningful risks.
  • I replaced the example block in How To Verify with the real verification steps and the key result for each.
  • I did not introduce unrelated refactors, dependencies, generated files, or file changes beyond the stated scope.
  • (conditional) I manually checked visible UI or copy changes when needed, with screenshots or recordings. Leave unticked only if no visible UI or copy changed.
  • (conditional) I considered macOS and Windows impact for platform, packaging, updater, signing, paths, shell, or permissions changes. Leave unticked only if no platform/packaging surface was touched.
  • (conditional) I called out docs, release notes, dependencies, permissions, credentials, deletion behavior, generated content, or local file changes when relevant. Leave unticked only if none of those surfaces was touched.
  • I reviewed the final diff for unrelated changes and suspicious dependency changes.
  • I am targeting dev, and my PR title and commit messages use Conventional Commits in English.

Summary by CodeRabbit

  • New Features

    • Improved timeline stability during interactive layout transactions (dock/content resize) with transaction-aware scroll handling and adaptive overscan.
    • Added a test-mode timeline driver to reliably reveal and drive cached timeline history during performance tests.
    • Enhanced diagnostics to include layout-transaction metadata for clearer performance failure summaries.
  • Tests

    • Expanded unit and end-to-end coverage for timeline layout transactions, scroll-command behavior, and perf-comparison scenarios.

Review Change Stack

@coderabbitai

coderabbitai Bot commented May 21, 2026

Copy link
Copy Markdown
Contributor

Warning

Rate limit exceeded

@Astro-Han has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 17 minutes and 25 seconds before requesting another review.

You’ve run out of usage credits. Purchase more in the billing tab.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 226fa2ae-4a4b-444d-83f6-92f222287f83

📥 Commits

Reviewing files that changed from the base of the PR and between 1f4cf7c and d697e08.

📒 Files selected for processing (3)
  • packages/app/e2e/perf/perf-probe.spec.ts
  • packages/app/src/testing/perf-metrics.test.ts
  • packages/app/src/testing/perf-metrics.ts
📝 Walkthrough

Walkthrough

This PR introduces timeline layout transaction coordination to safely handle dock and content resize events while preventing cumulative layout shift. A new transaction coordinator manages mutation, scroll anchor restoration via immediate or fallback frame scheduling, and diagnostic lifecycle events. The system integrates transaction context into scroll command recording, extends scroll dock to route resize operations through transactions, and threads transaction state through the timeline UI for dynamic overscan adjustment. Runtime CLS probe monitoring is extended to capture and report transaction metadata.

Changes

Timeline Layout Transaction Coordination

Layer / File(s) Summary
Transaction coordinator and types
packages/app/src/pages/session/timeline-layout-transaction.ts, packages/app/src/pages/session/timeline-layout-transaction.test.ts
createTimelineLayoutTransactionCoordinator implements stateful transaction run/cancel: generates transaction ID, selects anchor by scroll mode, applies mutation, attempts immediate restore, schedules up to two frame-based fallback restores on failure, emits diagnostic events across phases (start, fallback, settled, violation), toggles stable-band/transaction-active state, and cancels pending frames on error. Comprehensive test suite validates before-paint restore, latest-anchor preservation, fallback scheduling, violation transitions, stale-frame cleanup, and cancel semantics.
Scroll command sink transaction tracking
packages/app/src/pages/session/timeline-scroll-command-sink.ts, packages/app/src/pages/session/timeline-scroll-command-sink.test.ts
Sink now supports transaction-scoped commands via TimelineScrollCommandTransaction type and withTransaction(txn) method returning a bound sink. createTimelineScrollCommandSink accepts activeTransaction option and emits session.timeline.layout_transaction_violation diagnostics when unscoped commands execute during active transactions. Command records attach transaction identifiers and kind from command, bound sink, or default context. Tests validate transaction metadata recording and violation emission.
Dock/content resize transaction integration
packages/app/src/pages/session/use-session-scroll-dock.ts, packages/app/src/pages/session/use-session-scroll-dock.test.ts
createSessionScrollDock accepts optional runLayoutTransaction callback. New restoreLatestThroughSink helper routes restore-latest via scroll command sink with transaction context. Content-resize and dock-height ResizeObserver callbacks conditionally wrap operations in layout transactions when callback available, falling back to previous inline behavior otherwise. Tests validate transaction event ordering, restore command recording, and CSS updates.
Timeline interaction with transaction coordinator
packages/app/src/pages/session/use-session-timeline-interaction.ts
Introduces shared layoutTransactionState store (active/transactionID/kind) fed to sink as activeTransaction. Creates layoutTransactionCoordinator sampling/restoring anchors from scroll-dock viewport and history window, syncing stable-band/state, and emitting renderer diagnostics. Wires runLayoutTransaction callback to coordinator. Cancels coordinator during session changes, scroll gestures, navigation, and bottom-follow lock cancellation. Extends return with transaction getters.
Transaction state props through UI components
packages/app/src/pages/session.tsx, packages/app/src/pages/session/session-main-view.tsx, packages/app/src/pages/session/message-timeline.tsx, packages/app/src/pages/session/timeline-row-renderer.tsx
Props thread transaction active/id/kind from timelineInteraction through component chain. MessageTimeline adds data-layout-transaction-* DOM attributes for debugging. TimelineRowRenderer accepts transactionActive and uses chooseTimelineVirtualizerOverscan to derive dynamic overscan.
Overscan selection during transactions
packages/app/src/pages/session/timeline-layout-stable-band.ts, packages/app/src/pages/session/timeline-layout-stable-band.test.ts
chooseTimelineVirtualizerOverscan helper selects TIMELINE_TRANSACTION_OVERSCAN when transactionActive is true, otherwise TIMELINE_BASE_OVERSCAN. Tests verify overscan switching and that transaction value exceeds base.
CLS probe transaction snapshot capture
packages/app/e2e/perf/runtime-cls-probe.ts, packages/app/e2e/perf/runtime-cls-probe.unit.ts
RuntimeClsSnapshot gains optional transaction field with before/after active/id/kind. Probe reads transaction attributes from session-turn list on read, captures before-values at start, after-values at stop. formatRuntimeClsFailure synthesizes transaction summary and includes in failure message. Unit test validates transaction metadata integration.
E2E perf probe wheel event dispatching & timeline driver
packages/app/e2e/perf/perf-probe.spec.ts, packages/app/src/testing/timeline.ts, packages/app/src/testing/timeline.test.ts
Perf probe reveal flows switched to bounded retry loops with short guarded polls; adds markTimelineWheelIntent to dispatch wheel intent to timeline viewport, installTimelinePerfDriver to enable a test driver, and driver-based reveal helpers. Timeline testing/utilities added to bind a reveal-cached listener and a TimelineE2EDriverBoundary Solid component. Tests validate enablement and listener behavior.
Runtime CLS natural reveal test
packages/app/e2e/perf/runtime-cls-gate.spec.ts
Adds a natural-history reveal helper that uses real wheel gestures plus wheel-intent marking and driver reveal events to reveal earlier virtualized runtime CLS rows, and adds a test asserting mounted-row and total-row constraints after natural reveal.
Perf compare and metrics filtering
packages/app/script/compare-perf.ts, packages/app/src/testing/perf-metrics.ts, packages/app/src/testing/perf-metrics.test.ts
Adds --failures-from option and helpers to read inferred failure scenario keys, extends comparePerfBaselines to accept scenarioKeys to restrict comparisons, and updates tests to exercise scenario-key filtering.
Timeline driver utilities and tests
packages/app/src/testing/timeline.ts, packages/app/src/testing/timeline.test.ts
Adds timelineEvent constant, typed event payloads, driver enablement helpers, bindTimelineDriver listener binding with session filtering, and TimelineE2EDriverBoundary component; tests verify runtime guard, listener binding, and cleanup.

Sequence Diagram(s)

sequenceDiagram
  participant Client
  participant Coordinator
  participant FrameScheduler
  participant StateSync
  Client->>Coordinator: run(mutation, restoreLatest)
  Coordinator->>Coordinator: apply mutation
  Coordinator->>Coordinator: attempt immediate restore
  alt immediate restore succeeds
    Coordinator->>StateSync: settled
  else restore fails
    Coordinator->>FrameScheduler: schedule fallback frame
    FrameScheduler->>Coordinator: frame ready
    Coordinator->>Coordinator: attempt restore
    alt second restore succeeds
      Coordinator->>StateSync: settled
    else budget exceeded
      Coordinator->>StateSync: violation
    end
  end
  Coordinator->>Client: emit diagnostics
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related issues

Possibly related PRs

  • Astro-Han/pawwork#607: Overlaps in Playwright perf probe changes and timeline reveal probing.
  • Astro-Han/pawwork#786: Prior work on the timeline scroll command sink that this PR extends with transaction-scoped commands and diagnostics.
  • Astro-Han/pawwork#635: Related changes to perf probe long-scroll driving and reveal helpers.

"I hop in tests and driver lands,
wheel intents marked by gentle hands,
transactions guard the shifting page,
overscan widens for the stage,
and CLS snapshots keep their stands." 🐇✨

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The PR title 'fix(app): add timeline layout transactions' clearly and concisely summarizes the primary change—adding transaction coordination for timeline layout stability—using conventional commit format.
Description check ✅ Passed The PR description covers all required sections: summary of changes, rationale, related issue reference, human review status, review focus, risk notes with conditional checklist explanations, comprehensive verification results, and complete checklist.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch pawwork/issue-747-pr2-layout-transactions

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@Astro-Han Astro-Han added bug Something isn't working app Application behavior and product flows ui Design system and user interface P2 Medium priority labels May 21, 2026

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested priority: P2 (includes user-path files (packages/app/src/pages/session.tsx, packages/app/src/pages/session/message-timeline.tsx, packages/app/src/pages/session/session-main-view.tsx, packages/app/src/pages/session/timeline-layout-stable-band.test.ts, packages/app/src/pages/session/timeline-layout-stable-band.ts, packages/app/src/pages/session/timeline-layout-transaction.test.ts, packages/app/src/pages/session/timeline-layout-transaction.ts, packages/app/src/pages/session/timeline-row-renderer.tsx, packages/app/src/pages/session/timeline-scroll-command-sink.test.ts, packages/app/src/pages/session/timeline-scroll-command-sink.ts, packages/app/src/pages/session/use-session-scroll-dock.test.ts, packages/app/src/pages/session/use-session-scroll-dock.ts, packages/app/src/pages/session/use-session-timeline-interaction.ts)).

P1/P0 are reserved for maintainer confirmation. Please relabel manually if this is a release blocker, security issue, data-loss risk, or updater/runtime failure.

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces a layout transaction system designed to stabilize the session timeline's scroll position during layout shifts, such as dock resizes and content updates. Key additions include a TimelineLayoutTransactionCoordinator for managing scroll anchor restoration and updates to the scroll command sink to track transaction metadata. Feedback from the review highlights critical logical errors in the asynchronous fallback loop of the coordinator, which would trigger premature violations. The reviewer also pointed out a race condition where reactive state is cleared before asynchronous operations finish and noted that the provided cancelFrame functionality is currently unused, potentially leading to conflicting scroll commands.

Comment thread packages/app/src/pages/session/timeline-layout-transaction.ts Outdated
Comment thread packages/app/src/pages/session/use-session-timeline-interaction.ts
Comment thread packages/app/src/pages/session/timeline-layout-transaction.ts
@github-actions

github-actions Bot commented May 21, 2026

Copy link
Copy Markdown

Perf delta summary

Comparator: pass

Profile / Scenario interaction median interaction worst long task max tbt frame gap p95 frame gap max jank count cls status
default / homepage-cold 24 -> 24 (0) 40 -> 48 (+8) 70 -> 54 (-16) 20 -> 4 (-16) 16.8 -> 16.8 (0) 99.9 -> 100 (+0.1) 3 -> 2 (-1) 0 -> 0 (0) pass
default / long-session-input-lag 48 -> 48 (0) 48 -> 56 (+8) 0 -> 0 (0) 0 -> 0 (0) 16.7 -> 16.7 (0) 16.8 -> 16.8 (0) 0 -> 0 (0) 0 -> 0 (0) pass
default / session-streaming-long 40 -> 40 (0) 48 -> 48 (0) 0 -> 0 (0) 0 -> 0 (0) 16.7 -> 16.7 (0) 16.8 -> 16.8 (0) 0 -> 0 (0) 0 -> 0 (0) pass
default / tool-call-expand 16 -> 16 (0) 24 -> 24 (0) 0 -> 0 (0) 0 -> 0 (0) 16.7 -> 16.7 (0) 16.7 -> 16.7 (0) 0 -> 0 (0) 0 -> 0 (0) pass
default / tool-default-open-heavy-bash 16 -> 16 (0) 16 -> 24 (+8) 50 -> 55 (+5) 0 -> 7 (+7) 33.3 -> 50 (+16.7) 66.8 -> 83.3 (+16.5) 3 -> 3 (0) 0 -> 0 (0) pass
default / terminal-side-panel-open 48 -> 40 (-8) 48 -> 40 (-8) 0 -> 0 (0) 0 -> 0 (0) 16.8 -> 16.8 (0) 16.8 -> 16.8 (0) 0 -> 0 (0) 0 -> 0 (0) pass
default / session-scroll-reading 24 -> 32 (+8) 24 -> 40 (+16) 0 -> 0 (0) 0 -> 0 (0) 16.7 -> 16.8 (+0.1) 16.7 -> 16.8 (+0.1) 0 -> 0 (0) 0 -> 0 (0) pass
low-end / session-scroll-reading-long 80 -> 0 (-80) 88 -> 0 (-88) 120 -> 62 (-58) 137 -> 22 (-115) 33.3 -> 33.4 (+0.1) 116.7 -> 66.7 (-50) 4 -> 3 (-1) 0.011 -> 0.011 (0) pass
low-end / session-timeline-recompute 24 -> 32 (+8) 32 -> 40 (+8) 0 -> 0 (0) 0 -> 0 (0) 16.8 -> 33.2 (+16.4) 16.8 -> 33.3 (+16.5) 0 -> 0 (0) 0 -> 0.214 (+0.214) warn: cls_delta
low-end / concurrent-shimmer-extreme 0 -> 0 (0) 0 -> 0 (0) 0 -> 0 (0) 0 -> 0 (0) 16.7 -> 16.7 (0) 16.8 -> 16.8 (0) 0 -> 0 (0) 0 -> 0 (0) pass

@github-actions github-actions Bot added ci Continuous integration / GitHub Actions task Narrow execution, audit, spike, migration, tracking, or upstream follow-up work labels May 21, 2026
@github-actions github-actions Bot removed ci Continuous integration / GitHub Actions task Narrow execution, audit, spike, migration, tracking, or upstream follow-up work labels May 21, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (1)
packages/app/e2e/perf/perf-probe.spec.ts (1)

232-240: ⚡ Quick win

Use the shared timeline event constant instead of a string literal.

"opencode:e2e:timeline" is a cross-layer contract; hardcoding it here can drift from the app/testing driver constant.

Proposed diff
 import { composerEvent, type ComposerDriverState, type ComposerWindow } from "../../src/testing/session-composer"
+import { timelineEvent } from "../../src/testing/timeline"
@@
 async function revealCachedSessionMessagesThroughDriver(page: Parameters<typeof snapshotPerfProbe>[0]) {
   await page.evaluate(() => {
     window.dispatchEvent(
-      new CustomEvent("opencode:e2e:timeline", {
+      new CustomEvent(timelineEvent, {
         detail: { action: "reveal-cached" },
       }),
     )
   })
 }
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/app/e2e/perf/perf-probe.spec.ts` around lines 232 - 240, The test
function revealCachedSessionMessagesThroughDriver hardcodes the event name
"opencode:e2e:timeline"; replace this string with the shared timeline event
constant exported by the app/testing driver (import it into the file and use it
in the window.dispatchEvent call) so the test uses the canonical cross-layer
contract rather than a literal; update the import list at the top (alongside
snapshotPerfProbe) and reference that constant in the CustomEvent constructor.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@packages/app/src/testing/perf-metrics.ts`:
- Around line 423-437: The missing_base_scenario checks in comparePerfBaselines
currently run against all head entries even when input.scenarioKeys restricts
the comparison; update the post-iteration that scans input.head (or the Map
headByScenario) for head-only scenarios to skip any head scenario whose
scenarioKey is not in the requestedScenarioKeys Set (i.e., if
requestedScenarioKeys is defined and !requestedScenarioKeys.has(key) then
continue), so that missing_base_scenario failures are only reported for
scenarios the caller requested; keep existing behavior when scenarioKeys is
undefined (check all head entries).

---

Nitpick comments:
In `@packages/app/e2e/perf/perf-probe.spec.ts`:
- Around line 232-240: The test function
revealCachedSessionMessagesThroughDriver hardcodes the event name
"opencode:e2e:timeline"; replace this string with the shared timeline event
constant exported by the app/testing driver (import it into the file and use it
in the window.dispatchEvent call) so the test uses the canonical cross-layer
contract rather than a literal; update the import list at the top (alongside
snapshotPerfProbe) and reference that constant in the CustomEvent constructor.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 5e9f4342-024a-493e-9dce-785ce94e8eb5

📥 Commits

Reviewing files that changed from the base of the PR and between ecebc11 and 1f4cf7c.

📒 Files selected for processing (14)
  • packages/app/e2e/perf/perf-probe.spec.ts
  • packages/app/e2e/perf/runtime-cls-gate.spec.ts
  • packages/app/script/compare-perf.ts
  • packages/app/src/pages/session/session-main-view.tsx
  • packages/app/src/pages/session/session-timeline-scroll-controller.ts
  • packages/app/src/pages/session/timeline-layout-recovery-policy.ts
  • packages/app/src/pages/session/use-session-scroll-dock.test.ts
  • packages/app/src/pages/session/use-session-scroll-dock.ts
  • packages/app/src/pages/session/use-session-timeline-interaction.test.ts
  • packages/app/src/pages/session/use-session-timeline-interaction.ts
  • packages/app/src/testing/perf-metrics.test.ts
  • packages/app/src/testing/perf-metrics.ts
  • packages/app/src/testing/timeline.test.ts
  • packages/app/src/testing/timeline.ts

Comment thread packages/app/src/testing/perf-metrics.ts
@Astro-Han
Astro-Han merged commit 9334317 into dev May 22, 2026
26 checks passed
@Astro-Han
Astro-Han deleted the pawwork/issue-747-pr2-layout-transactions branch May 22, 2026 07:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

app Application behavior and product flows bug Something isn't working P2 Medium priority ui Design system and user interface

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant