Skip to content

docs(research): pretable scroll-with-render perf diagnostic (noise verdict)#133

Merged
blove merged 4 commits into
mainfrom
pretable-scroll-with-render-perf-diag
May 11, 2026
Merged

docs(research): pretable scroll-with-render perf diagnostic (noise verdict)#133
blove merged 4 commits into
mainfrom
pretable-scroll-with-render-perf-diag

Conversation

@blove
Copy link
Copy Markdown
Contributor

@blove blove commented May 11, 2026

Summary

Diagnoses whether pretable's `scroll-with-render` 6 ms gap from PR #130 (16.4 ms vs ~10.3 ms for format + heavy-render at n=3) is real or a low-sample artifact. Verdict: noise. Mirrors PR #124's pattern at larger magnitude.

Verdict

At higher repeats, `scroll-with-render` is at parity with (in fact marginally faster than) `scroll-with-format` and `scroll-with-heavy-render`:

Script n mean (ms) σ (ms)
scroll-with-format 8 9.36 0.80
scroll-with-render 7 8.97 0.35
scroll-with-heavy-render 6 9.15 0.13

Both 2σ pairs are well within the noise floor:

  • cheap vs format: 0.39 ms diff vs 1.60 ms noise floor → within noise
  • cheap vs heavy: 0.18 ms diff vs 0.70 ms noise floor → within noise

The PR #130 cheap-render value of 16.4 ms is ~21σ away from the observed distribution — statistically impossible at this sample size.

No perf-fix PR needed. No React-reconciliation cliff exists between single-text-child and multi-child spans in pretable's MemoizedCellContent path.

Sample size caveat

The matrix completed only ~36 % of planned repeats (Playwright flake; not investigated). Sample counts came out 6–8 per script instead of n=20. Documented in the memo; the observed σ values make the verdict unambiguous regardless — a 6 ms gap couldn't hide in this distribution.

What's NOT in this PR

  • Code changes — verdict is noise; no fix needed.
  • Trace capture (Phase B) — skipped per the plan's noise-verdict branch.
  • Bench-matrix default-repeat protocol changes — recommendation noted in the memo but not actioned.

Test plan

  • `pnpm -w typecheck` passes (no source changes)
  • `pnpm -w lint` 0 errors
  • `pnpm format` clean
  • Milestone JSON + memo committed under `status/milestones/` and `docs/research/`

🤖 Generated with Claude Code

blove and others added 4 commits May 11, 2026 13:28
Three-phase research PR mirroring PR #124's pattern: high-repeat (n=20)
re-run, conditional Playwright trace capture, research memo. Diagnoses
whether the PR #130 cheap-render anomaly (16.4 ms vs 10.3 ms for format
and heavy-render) is real or a low-sample artifact.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Seven-task plan mirroring PR #124's three-phase pattern: n=20 matrix
re-run, conditional Playwright trace capture, research memo.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Verdict: noise. The PR #130 cheap-render anomaly (16.4 ms vs ~10.3 ms
for format and heavy-render at n=3) was a sampling artifact. At higher
repeats, scroll-with-render is at parity with (in fact marginally
faster than) the other two:

| Script                     |   n | mean (ms) |   σ (ms) |
| -------------------------- | --: | --------: | -------: |
| scroll-with-format         |   8 |      9.36 |     0.80 |
| scroll-with-render         |   7 |      8.97 |     0.35 |
| scroll-with-heavy-render   |   6 |      9.15 |     0.13 |

Both 2σ pairs (cheap-vs-format, cheap-vs-heavy) are well within the
noise floor. Same shape as PR #124's finding at larger magnitude.

The matrix run completed only ~36% of planned repeats (Playwright
flake; not investigated) but the observed σ values make the verdict
unambiguous — PR #130's 6 ms gap is ~21σ away from the observed
distribution. No perf-fix PR needed.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@blove blove enabled auto-merge (squash) May 11, 2026 20:34
@vercel
Copy link
Copy Markdown

vercel Bot commented May 11, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
pretable Ready Ready Preview, Comment May 11, 2026 8:35pm

@blove blove merged commit e88d3d6 into main May 11, 2026
13 checks passed
@blove blove deleted the pretable-scroll-with-render-perf-diag branch May 11, 2026 20:37
@github-actions
Copy link
Copy Markdown
Contributor

Vercel preview ready

Preview: https://pretable-d07kph9m5-cacheplane.vercel.app
Commit: a19d62309cbb6137ce1841f21ce0a79cd2760e08

Updated automatically by the deploy-preview job.

blove added a commit that referenced this pull request May 13, 2026
…get on pretable filter-text) (#134)

* docs(specs, plans): interaction borderline perf diagnostic

Tightens PR #131's two borderline numbers (pretable filter-text 17.7 ms,
tanstack vs pretable filter-metadata 15.7/16.0 ms) via n=20 re-run.
Mirrors PR #124 / PR #133's pattern.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* docs(research): interaction borderline perf diagnostic memo

Verdict: pretable filter-text is real-over-budget (16.79 ± 0.31 ms at
n=20); tanstack vs pretable filter-metadata is noise-tied (1.6 ms
mean diff vs 23 ms 2σ noise floor — tanstack's σ at n=8 is 11.6 ms).

Incidental finding: pretable filter-metadata is also over budget at
the mean (17.51 ± 2.44 ms). PR #131's 16.0 ms n=3 reading was a
low-end sample. Homepage prose claims filter-metadata is "clear of"
the single-frame budget; that's no longer accurate.

Three recommendations queued (editorial cleanup + perf-fix
investigation); see memo for details.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* chore: prettier-format borderline diag artifacts

---------

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
blove added a commit that referenced this pull request May 13, 2026
* docs(specs): pretable wrapped-text filter perf diagnostic design

Three-phase pattern (trace + analyze + memo) with conditional fix in
same PR. Mirrors PR #124 / PR #133 with a Phase D escape hatch for
single-cause low-risk fixes. Targets pretable's interaction scripts
landing 1-2 ms over the 16 ms single-frame budget on Chromium
S2/hypothesis (PR #134 finding).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* docs(plans): pretable wrapped-text filter perf diagnostic plan

Five-task plan: trace capture, manual analysis, memo, conditional fix,
gates + PR. Auto-merge if memo-only; hold if a fix ships.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* chore(bench): Playwright trace for pretable filter-text perf diagnostic

* docs(research): pretable wrapped-text filter perf diagnostic memo

* style(docs): prettier format perf diagnostic memo + plan + spec

* chore: remove force-added trace binary; project convention is no committed traces

The trace was captured locally per the spec but force-added past
.gitignore — the project's standing pattern is `status/traces/*.zip` is
gitignored. Removing the binary; memo updated to note the trace is
local-only and that Playwright's default action-trace format doesn't
capture per-function timeline data anyway (the real blocker for this
investigation, separately documented in the memo's "bench-harness gap"
follow-up).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* docs(research): memo references local-only trace; no committed binary

The trace path reference in the memo was pointing at a binary that
was force-added past .gitignore and then removed in the prior commit.
Update the reference to note the trace is local-only and the Playwright
action-trace format wouldn't have given flame-graph data anyway.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant