Skip to content

docs(research): interaction borderline perf diagnostic (real over-budget on pretable filter-text)#134

Merged
blove merged 3 commits into
mainfrom
interaction-borderline-perf-diag
May 13, 2026
Merged

docs(research): interaction borderline perf diagnostic (real over-budget on pretable filter-text)#134
blove merged 3 commits into
mainfrom
interaction-borderline-perf-diag

Conversation

@blove
Copy link
Copy Markdown
Contributor

@blove blove commented May 11, 2026

Summary

Tightens PR #131's two borderline numbers via n=20 re-run. No auto-merge — real-over-budget verdict on pretable filter-text requires editorial review.

Slice Verdict Detail
pretable filter-text over budget? real-over-budget 16.79 ± 0.31 ms at n=20; mean−2σ = 16.17 > 16 ms budget. Reliably ~0.8 ms over.
tanstack vs pretable filter-metadata parity noise-tied 1.6 ms mean diff vs 23.2 ms 2σ noise floor (tanstack σ=11.6 ms at n=8). PR #131's tie was sample noise.

Incidental finding: pretable filter-metadata is also over budget at the mean (17.51 ± 2.44 ms at n=20). PR #131's 16.0 ms n=3 reading was a low-end sample.

Full data

(adapter, script) n mean (ms) σ (ms) min median max
pretable, filter-text 20 16.79 0.31 16.10 16.70 17.50
pretable, filter-metadata 20 17.51 2.44 15.80 16.75 24.80
tanstack, filter-metadata 8 19.11 11.60 8.20 17.25 41.70
tanstack, filter-text 6 27.97 17.23 8.30 29.45 49.60

Recommendations (in the memo)

  1. Update /bench page prose: move filter-text + filter-metadata out of the "clears the budget" set.
  2. Update ComparisonTable.tsx interaction rows: decide whether to keep the "≤ 16" budget column for interaction (would show pretable failing it).
  3. Update TanStack trail-marker label: drop the "filter-metadata ties pretable" parenthetical (the high-repeat data shows no real tie).
  4. Scope a perf-fix investigation for pretable filter-metadata + filter-text. Both reliably over budget; likely shared root cause in the wrapped-text filter pipeline.

All four are editorial / scoping decisions the user should weigh in on before any homepage change ships.

Matrix wall-clock note

Original matrix flaked at ~22% (PR #133 had the same pattern); ran a follow-up tanstack-only matrix that also flaked early. Final sample counts: pretable 20+20, tanstack 8+6. Tight enough for unambiguous verdicts.

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 3 commits May 11, 2026 14:10
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>
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>
@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 9:16pm

@github-actions
Copy link
Copy Markdown
Contributor

Vercel preview ready

Preview: https://pretable-9q0cp73pq-cacheplane.vercel.app
Commit: b2474b6531adf95b14f295c5638367a3dc602373

Updated automatically by the deploy-preview job.

@blove blove enabled auto-merge (squash) May 13, 2026 16:51
@blove blove merged commit c72a8d2 into main May 13, 2026
14 checks passed
@blove blove deleted the interaction-borderline-perf-diag branch May 13, 2026 16:51
blove added a commit that referenced this pull request May 13, 2026
…indings (#141)

* fix(website): editorial follow-up to PR #134 interaction borderline findings

Acts on the four recommendations from PR #134's interaction borderline
memo (decisions captured in repo-memory):

- /bench Interactions section prose: honest reframe — "~1 ms over
  budget on all three scripts; 2-3.5× faster than every measured
  comparator." Includes the n=20 numbers (sort 17.10 ± 1.83;
  filter-metadata 17.51 ± 2.44; filter-text 16.79 ± 0.31).
- ComparisonTable interaction rows: dropped the ≤ 16 budget reference
  (set to "—"); scroll rows keep their budget column. Replaced PR #131's
  n=3 numbers with the n=20 set; sort n=20 captured fresh in this PR
  (pretable-only matrix run, 17.10 ± 1.83 ms).
- TanStack trail-marker label: dropped the "(filter-metadata ties
  pretable)" parenthetical. Tie was sampling noise at n=3; tanstack's
  distribution at higher repeats spans 8-42 ms.
- Perf-fix investigation queued as a follow-up PR (wrapped-text filter
  pipeline is the shared root cause for all three interaction scripts
  landing over the single-frame budget).

No test changes required: the TanStack regex
(/headless.*slower interaction/i) still matches the shortened label.

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

* fix(website): drop ties-pretable parenthetical from /bench interaction verdict helper

Mirrors the homepage TanStack trail-marker change. The n=20 verdict
in PR #134 showed the n=3 'tie' was sampling noise; the page's
verdict helper no longer renders the parenthetical even when the
underlying summary still has the n=3 numbers that triggered the
< 5% ratio test.

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

---------

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