diff --git a/apps/website/__tests__/components/ReceiptsBand.test.tsx b/apps/website/__tests__/components/ReceiptsBand.test.tsx index d3ca0b5..bafc3a0 100644 --- a/apps/website/__tests__/components/ReceiptsBand.test.tsx +++ b/apps/website/__tests__/components/ReceiptsBand.test.tsx @@ -19,6 +19,15 @@ it("renders the receipts headline numbers", () => { expect(screen.getByText("9ms")).toBeInTheDocument(); }); +it("renders the streaming-pipeline capability anchor (B2 follow-up #7)", () => { + render(); + // After S5/S7 cross-validation showed AG Grid ties on raw streaming + // numerics, the fourth slot is a capability anchor (the integration + // pretable ships, not a throughput number). + expect(screen.getByText(/streaming sources/i)).toBeInTheDocument(); + expect(screen.getByText(/openai/i)).toBeInTheDocument(); +}); + it("does not render the positioning cards anymore (moved to CredibilityCards)", () => { render(); expect(screen.queryByText(/ai-native/i)).not.toBeInTheDocument(); diff --git a/apps/website/app/components/ComparisonTable.tsx b/apps/website/app/components/ComparisonTable.tsx index 3c2a66b..a07b234 100644 --- a/apps/website/app/components/ComparisonTable.tsx +++ b/apps/website/app/components/ComparisonTable.tsx @@ -22,6 +22,13 @@ const NA_MARKER = "n/a"; // Same slice for pretable + mui at 20 repeats. Confirms parity (mean // diff −0.065 ms, well inside the 2σ noise floor of 0.40 ms). // +// status/milestones/2026-05-09-b2-s5-s7-cross-validation.hypotheses.json +// S5/updates × {1000, 25000}/sec and S7/scroll × 4 adapters × 3 repeats. +// Cross-validates H1 on S7 (satisfied) and surfaces H13/H14/H15 as +// directional — AG Grid's native applyTransaction matches pretable on +// streaming p95, the 25k/sec envelope, and visible-row drift. The +// streaming-uniqueness wedge is package surface, not raw throughput. +// // status/milestones/2026-05-10-b2-sort-filter-summary.json // S2/hypothesis/Chromium × 3 repeats × 4 adapters × 3 interaction // scripts. Pretable beats AG Grid 3-3.5× and MUI 2× across sort, @@ -34,9 +41,9 @@ const NA_MARKER = "n/a"; // The wedge: parity with the best full-grid comparator (MUI) on raw frame // p95, with ~1.7× headroom over AG Grid + TanStack, and the only adapter // here that combines zero blank gaps + zero anchor shift + ≤1 px row-height -// fidelity at full-grid feature weight. Streaming rows are absent until a -// future runset captures comparative S5 evidence — see -// project_b2_followups.md item 6. +// fidelity at full-grid feature weight. The streaming row is capability- +// anchored (not numeric): pretable ships the SSE/partial-JSON/batcher/ +// applyTransaction pipeline; AG Grid users wire that themselves. const ROWS: readonly Row[] = [ { metric: "frame p95 (ms) — wrapped scroll", @@ -103,7 +110,8 @@ const ROWS: readonly Row[] = [ budget: "—", }, { - metric: "purpose-built streaming pipeline", + metric: + "streaming pipeline (SSE → partial JSON → batcher → applyTransaction)", pretable: "yes", agGrid: NA_MARKER, tanstack: NA_MARKER, diff --git a/apps/website/app/components/FeatureGrid.tsx b/apps/website/app/components/FeatureGrid.tsx index 8178491..843f7c6 100644 --- a/apps/website/app/components/FeatureGrid.tsx +++ b/apps/website/app/components/FeatureGrid.tsx @@ -25,7 +25,7 @@ const FEATURES: readonly Feature[] = [ { title: "Stream-aware", description: - "Token-by-token rendering for OpenAI, Anthropic, your own SSE — sustained from 100 to 25,000 updates/sec.", + "Token-by-token rendering for OpenAI, Anthropic, and your own SSE. The full pipeline — partial-JSON parser, frame-budget batcher, applyTransaction wiring — ships as one import.", marker: "black", markerLabel: "Advanced — bring your own SSE", }, diff --git a/apps/website/app/components/ReceiptsBand.tsx b/apps/website/app/components/ReceiptsBand.tsx index 418846c..c5a66cc 100644 --- a/apps/website/app/components/ReceiptsBand.tsx +++ b/apps/website/app/components/ReceiptsBand.tsx @@ -3,29 +3,41 @@ interface Stat { caption: string; /** First stat anchors with accent color (warm orange) on the dark band. */ accent?: boolean; + /** + * Render the value at a smaller size for non-numeric labels (e.g., a + * source list). The grid still uses four cells; this slot just trades + * hero-number weight for legible text. + */ + compact?: boolean; } // Receipts snapshot — numbers from the committed B2 comparative runset -// and its high-repeat correction: +// and its high-repeat correction; final slot is a capability anchor. // // status/milestones/2026-05-09-b2-h1-high-repeat-correction.json // S2/hypothesis/scroll × 20 repeats. Pretable mean p95 = 9.07 ms ± 0.20; // parity with MUI X DataGrid Community. Quality wedge: 0 blank gaps, // 0 anchor shift, ≤1 px row-height drift. // -// status/milestones/2026-05-01-streaming-revalidated.hypotheses.json -// S5/updates × 6 rates × 3 repeats. Pretable max sustained update rate -// = 25k/sec (pretable's own — comparative S5 evidence pending; see -// project_b2_followups.md item 6). +// status/milestones/2026-05-09-b2-s5-s7-cross-validation.hypotheses.json +// S5/updates × 4 adapters × 3 repeats. AG Grid Community matches +// pretable on raw streaming throughput (9.2 ms p95, 25k/sec, 0 drift), +// so the streaming wedge is reframed as the shipped pipeline rather +// than the throughput number. Final receipts slot is the source list +// pretable ships integrations for. // // First stat (0) anchors the quality wedge with accent (warm orange). All -// numbers are pretable's own; the comparative ranking lives on the /bench +// numerics are pretable's own; the comparative ranking lives on the /bench // page and ComparisonTable. const STATS: readonly Stat[] = [ { value: "0", caption: "blank gaps under scroll", accent: true }, { value: "9ms", caption: "frame p95 / wrapped scroll" }, { value: "≤1px", caption: "row-height fidelity" }, - { value: "25k/s", caption: "max sustained update rate" }, + { + value: "OpenAI · Anthropic · SSE", + caption: "streaming sources, one import", + compact: true, + }, ]; export function ReceiptsBand() { @@ -43,7 +55,10 @@ export function ReceiptsBand() {
  • diff --git a/docs/research/repo-memory.md b/docs/research/repo-memory.md index 45c4d72..073954a 100644 --- a/docs/research/repo-memory.md +++ b/docs/research/repo-memory.md @@ -364,6 +364,20 @@ No other hypothesis status changed (S2-dependent ones — H1, H6–H8, H10–H12 - Editorial homepage refresh (potentially repopulating the deleted streaming row from this evidence) — distinct prose work. - Comparative interaction scripts (sort, filter-text, filter-metadata, cell-renderer) on S7 — still pretable-only per the supportedScripts gate; tracked as B2 follow-up #5. +### B2 follow-up #7: streaming wedge reframed as capability-anchored + +Direct consequence of follow-up #6's finding. AG Grid Community matches pretable on every measured streaming numeric (frame p95, 25k/sec envelope, visible-row drift), so the homepage can no longer claim a numeric streaming win. The wedge moves to package surface: pretable ships the SSE → partial-JSON → batcher → applyTransaction pipeline as a single import; AG Grid expects you to wire that yourself. + +Three editorial edits across `apps/website`: + +- **`ComparisonTable.tsx`** — the streaming row was titled `purpose-built streaming pipeline` (vague). Renamed to `streaming pipeline (SSE → partial JSON → batcher → applyTransaction)` to spell the wedge out concretely. Still capability-anchored (`yes / n/a / n/a / n/a`); no numeric streaming row added because the n=3 numerics tie. +- **`ReceiptsBand.tsx`** — replaced the `25k/s · max sustained update rate` hero stat (no longer pretable-unique) with `OpenAI · Anthropic · SSE · streaming sources, one import`. Added a `compact: true` flag to the `Stat` interface so the longer label renders at a smaller font size, preserving the four-cell grid without overflowing the hero font scale. +- **`FeatureGrid.tsx`** — Stream-aware card: dropped the "sustained from 100 to 25,000 updates/sec" tail; rewrote the description around the pipeline that ships as one import. + +Test added: `ReceiptsBand.test.tsx` regression-guards the new capability anchor (`streaming sources` + `openai`). The `verdictFor` / trail-marker tests are unchanged. + +The "Stream-aware" card in FeatureGrid retained its `markerLabel: "Advanced — bring your own SSE"` because that's still accurate — pretable ships the post-SSE pipeline; the SSE source itself is consumer-supplied. + ## 2026-05-10 ### B2 follow-up #5a: cell-renderer scripts opened to comparators