3.3 KiB
Stage 3 — multi-page / whole-site results
clone-site <url> crawls a site from one entry URL, selects a bounded, deterministic
route set (singletons reproduce, pairs reproduce, larger CMS-like collections collapse
to a listing plus one representative),
captures each route, and generates one Next.js App Router app with shared chrome,
internal links rewritten to the clone routes, and content-addressed shared assets.
bench-site builds + grades it: per-route Gates 0–6 + stage-2 pollution/perceptual,
plus site-level link-integrity and site-determinism gates.
The composites in this folder show SOURCE vs CLONE for the first few routes of each site at the 1280px viewport.
Results
| Site | Discovered → reproduced | Routes pass G0–6 | Collections collapsed | Shared chrome | Links | Determinism |
|---|---|---|---|---|---|---|
| overreacted.io | 59 → 2 | 2 / 2 | 1 (58 posts → 1) | header | ✅ | ✅ |
| brew.sh | 88 → 12 | 12 / 12 | 6 (27 → 6) | footer | ✅ | ✅ |
| jamstack.org | 552 → 11 | 11 / 11 | 3 (534 → 3) | — | ✅ | ✅ |
| gatsbyjs.com | 281 → 12 | 11 / 12 | 2 (62 → 2) | — | ✅ | ✅ |
| 11ty.dev | 1085 → 12 | 11 / 12 | 4 (1076 → 4) | — | ✅ | ✅ |
Totals: 47 / 49 routes pass Gates 0–6; link-integrity and site-determinism green on
every site. The reproduction policy is the headline: jamstack's 552 pages and 11ty's
1085 (incl. an 882-instance /authors/:id directory) each reduce to ~11–12 reproduced
routes — the full instance map is recorded in each run's site-manifest.json as the
CMS-handoff boundary.
Notes
- overreacted.io — a flat root-level blog: 58
/:slugposts collapse to the home (listing) + one representative; the shared<header>is hoisted intolayout.tsx(emitted once). Both routes clone at 99.9. - brew.sh — home + per-year blog archives; the shared footer (
<aside>+ footer) is hoisted; 12/12 at ~99.6. - jamstack.org — a directory site:
/generators(377),/headless-cms(134),/glossary(23) each collapse to listing + representative. 11/11 at 99.9. - gatsbyjs.com (11/12) and 11ty.dev (11/12) each miss exactly one route, and
both are out-of-reach classes for a static deterministic clone (not multi-page
defects): gatsby's
/blog/gatsby-5-typescript(residual inline-formatting / margin-collapse drift on a content-heavy post — the documented linear/notion/ paulgraham class) and 11ty's/speedlify(a JS performance dashboard — dynamic content, outside the static-clone contract). The crawl, collection collapse, link rewriting, shared layout, and determinism are exact — a route scores what the same page scores cloned standalone. - Two general fixes surfaced here lifted gatsby 4/12 → 11/12 with no single-page
regression (easy re-ran 4/4 @ 100): (1) block-level
grid/flexcontainers are now margin-auto re-centered like plain blocks (a centered<main class=grid>was left-aligning its column ~96px off), and (2) the DOM gate credits the compiler's own valid-HTML retags (button/ul → div) as matched instead of docking them.
Reproduce: cd compiler && npm run bench-site (add --regen to re-grade existing
captures). Composites: python3 scripts/make_site_compare.py.