Skip to content

feat(website): homepage section — when the data goes bad - #566

Merged
blove merged 9 commits into
mainfrom
blove/rejected-writes-homepage
Sep 2, 2026
Merged

blove merged 9 commits into
mainfrom
blove/rejected-writes-homepage

Conversation

@blove

@blove blove commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

What

New homepage section 10 · when the data goes bad, slotted between the column-layout showcase and the CTA. It demos the rejected-writes API shipped in #564 with a live, visitor-driven fault:

  • A small portfolio-positions grid streams a clean page every 1.5s, with a mono status line (server sent tick N · grid shows tick N).
  • "Corrupt the next server page" arms the next tick with a duplicate-row-id fault. The grid keeps the last good rows, the tick counters split (sent 42 · shows 41), and a stale-data banner appears — consumer UI built on onRejectedWriteChange, not something pretable ships; the section says so, and a code strip shows the real wiring (rejected?.rows, onRejectedWriteChange).
  • "Refetch positions" recovers immediately; an auto-heal at 6s recovers for passive scrollers, so the section resets itself. A second corruption duplicates a different id — nothing latches.

Verification

  • 3 new unit suites (data module, grid component, section shell): website suite 107 files / 624 tests green. Load-bearing behavior mutation-pinned: banner driven by the record (not the stream), stream pause while diverged, landed-tick freeze, variant rotation, code-strip drift guard.
  • New Playwright smoke test (drawer → scroll → corrupt → banner + kept rows + counter split → refetch): 4 local runs, chromium + webkit, 8/8 green.
  • No packages/ changes — react.api.md untouched.

Design spec: docs/superpowers/specs/2026-09-02-rejected-writes-homepage-section-design.md (in this PR).

🤖 Generated with Claude Code

blove and others added 9 commits September 2, 2026 11:04
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Section shell wraps the rejected-writes showcase grid with the eyebrow/
headline/prose pattern from ScaleShowcase, a code strip teaching the real
onRejectedWriteChange wiring, and wires into page.tsx between
ColumnLayoutShowcase and CtaSection. No section-nav registry exists to
update (grep for #scale/#columns anchors found none).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@vercel

vercel Bot commented Sep 2, 2026 •

Copy link
Copy Markdown

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

1 Skipped Deployment
Project Deployment Actions Updated
pretable Ignored Ignored Sep 2, 2026 6:43pm UTC

Request Review

@blove
blove enabled auto-merge (squash) September 2, 2026 18:42
@github-actions

github-actions Bot commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

Vercel preview ready

Preview: https://pretable-5wkq7q3m6-cacheplane.vercel.app
Commit: 66768b8a0923ffd86d945bd6dd01b2a8b01350cc

Updated automatically by the deploy-preview job.

@blove
blove merged commit 7959ae6 into main Sep 2, 2026
21 checks passed
@blove
blove deleted the blove/rejected-writes-homepage branch September 2, 2026 19:01
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