{
  "schemaVersion": 1,
  "id": "20260923-seven-framework-baseline",
  "title": "Seven-framework baseline with Leptos",
  "createdAt": "2026-09-23T22:39:53.363Z",
  "status": "complete",
  "selection": {
    "name": "full",
    "reason": "Single full run selected before measurement; publication is a separate explicit command.",
    "selectedAt": "2026-09-23T22:39:53.365Z"
  },
  "notes": [
    {
      "kind": "decision",
      "title": "Seven-framework baseline with Leptos 0.8.20",
      "body": "This is the first full seven-framework run, selected before measurement. It adds Leptos 0.8.20 to the existing six production applications. The six-framework 20260922-baseline record and its raw evidence remain unchanged. This run measures commit 47660e5 plus the local benchmark integration; it is a new reference, not an isolated test of a Fusor optimization.\n\nBuild: release profile, Binaryen 132 -O3, wasm-bindgen 0.2.117, stripped Wasm names, installed Chrome, and BENCH_SEED=20261004. Both Rust frameworks use the same optimization flags. Leptos lives in an isolated Cargo workspace. SSR uses its official in-order HTML stream collected into a complete string; the methodology documents the direct-string-renderer hydration issue encountered during integration.\n\nAll 133 timing metrics, seven memory profiles, and 21 bundle fixtures passed the evaluator. Source and production artifact receipts matched before and after measurement. A separate validation also passed Leptos mount/unmount, keyed edits, event dispatch, server-node-preserving hydration, Hello World, and Todo CRUD/filter behavior in Chromium, Firefox, and WebKit; see browser-validation.json.\n\nLeptos has tradeoffs in these workloads: its 10k keyed swap was 0.40 ms and hydration was 28.80 ms, while its 10k shared-source fan-out was 215.50 ms (2.30 ms for 1k). Those are results for these implementations and operations, not a general ranking of applications. Its gzip fixtures were 25.5 KiB (Hello), 63.3 KiB (Todo), and 68.8 KiB (benchmark).\n\nAll frameworks returned to the baseline DOM-node count after each cleanup cycle. Leptos retained approximately 7.00 MiB of additional JS heap and 130.25 MiB of Wasm capacity after the large allocation and repeated cycles; Fusor retained approximately 3.50 MiB and 167.56 MiB respectively. Wasm capacity is reserved capacity, not live Rust allocations. These figures do not measure whole-process memory or prove absence of leaks.\n\nLimits: one local Apple M4 Pro, no CPU/network throttling or thermal controls, Chromium timing results, and 15 samples with the maximum as P95. Startup uses fresh browser contexts with a reused browser process. Values below 0.10 ms are below the browser clock floor. The idle development server remained running; builds and other benchmark processes were finished before measurement. Different framework orders, source versions and implementation changes limit direct comparisons with the older run.\n\nRecorded 2026-09-23T22:39:55.622Z on Apple M4 Pro, darwin 24.5.0, browser 153.0.8010.53, 15 samples after 3 warmups.\n\nMedian milliseconds:\n\n| Metric | fusor | react | svelte | solid | vue | preact | leptos |\n| --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: |\n| ssr-1000 | 0.33 | 0.89 | 0.35 | 0.30 | 1.03 | 0.89 | 0.44 |\n| ssr-10000 | 2.76 | 12.86 | 4.62 | 2.94 | 9.47 | 14.69 | 4.99 |\n| initial-1000 | 3.20 | 1.90 | 4.00 | 1.10 | 3.40 | 2.80 | 3.20 |\n| initial-10000 | 32.10 | 19.00 | 129.80 | 11.10 | 37.60 | 30.10 | 32.90 |\n| single | <0.10 | 0.70 | 0.60 | <0.10 | <0.10 | <0.10 | <0.10 |\n| bulk-1000 | 0.50 | 1.80 | 1.30 | 0.40 | 2.00 | 1.60 | 0.60 |\n| bulk-10000 | 3.90 | 9.90 | 8.00 | 4.00 | 18.00 | 17.20 | 5.00 |\n| insert | 2.10 | 2.00 | 11.20 | 0.30 | 7.50 | 3.00 | 0.40 |\n| delete | 2.10 | 1.80 | 10.10 | 0.20 | 7.40 | 3.30 | 0.40 |\n| swap | 1.30 | 108.00 | 10.90 | 0.70 | 5.10 | 3.10 | 0.40 |\n| computed | <0.10 | 0.80 | 0.40 | <0.10 | <0.10 | <0.10 | <0.10 |\n| fanout-1000 | 0.30 | 0.90 | 0.30 | 0.20 | 1.80 | 1.30 | 2.30 |\n| fanout-10000 | 4.10 | 9.40 | 3.80 | 3.50 | 23.90 | 15.70 | 215.50 |\n| fanin | 0.50 | 0.10 | 4.20 | 0.50 | 4.00 | 0.10 | 1.00 |\n| unmount | 5.50 | 5.20 | 3.10 | 1.20 | 5.20 | 2.20 | 7.20 |\n| events | 15.50 | 45.70 | 27.20 | 20.60 | 38.30 | 29.80 | 16.00 |\n| hydration-1000 | 9.60 | 6.30 | 10.30 | 3.80 | 9.50 | 7.20 | 5.80 |\n| hydration-10000 | 40.30 | 110.00 | 126.10 | 20.90 | 42.60 | 85.60 | 28.80 |\n| startup | 28.70 | 23.10 | 19.20 | 10.10 | 18.20 | 13.30 | 18.90 |\n\nGzip KiB per fixture:\n\n| Fixture | fusor | react | svelte | solid | vue | preact | leptos |\n| --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: |\n| benchmark workload | 105.0 | 67.4 | 14.5 | 6.1 | 26.3 | 8.5 | 68.8 |\n| hello | 54.0 | 66.3 | 9.2 | 4.0 | 23.2 | 4.9 | 25.5 |\n| todo | 100.2 | 67.1 | 13.9 | 6.8 | 25.2 | 6.3 | 63.3 |\n",
      "format": "markdown",
      "recordedAt": "2026-09-23T22:46:54.631Z"
    }
  ],
  "events": [],
  "evidence": [
    {
      "name": "full",
      "kind": "measurement",
      "protocol": "full",
      "path": "data/full.json",
      "bytes": 152318,
      "sha256": "15538b19361226540a298207996aa306f06395e11239d0e63a6a1830245a0e29",
      "sourceSha256": "809f1293376624b3bbd478b28a2aa951053e8c960ace2e3b2f241b12148d10ee",
      "recordedAt": "2026-09-23T22:44:48.930Z"
    },
    {
      "name": "receipt",
      "kind": "receipt",
      "path": "data/receipt.json",
      "bytes": 18082,
      "sha256": "25c29754d6a5d6804390d18e34626e693448736602c34f559bc511eafa4aadf4"
    },
    {
      "name": "browser-validation",
      "kind": "validation",
      "path": "data/browser-validation.json",
      "bytes": 1391,
      "sha256": "b00fd9c0dfb474d70afd012221bb8930d711e8f15e9a3104b79b1ba11481d116"
    }
  ],
  "completedAt": "2026-09-23T22:46:54.720Z"
}
