BUGS
bugs/search-box-weight/record.md
sha256 ce3d56d6f26709e0 · 2328 bytes ·
original held in the private archive
---
title: The 3.9-Megabyte Search Box
status: SEALED
repo: archive
observed: 2026-07-20
caught_by: weighing the generated pages against the phone-readable constraint
one_line: The whole text corpus was inlined into search.html — 3.9 MB parsed before the box would take a keystroke, on a museum read mostly from a phone.
guard_location: museum/generate.mjs · search shards · line ~2051
verified: search.html is a few KB; results are always over the complete corpus or an explicit error, never a silent subset
exhibited: true
lesson: A page that pre-pays a cost behind the reader's back should instead admit its weight and let the reader spend it.
provenance:
- museum/generate.mjs search-shard section (lines ~2051-2098), which documents the before/after inline
- mockup museum/design/2026-07-identity-pass/04-bug-museum-records.html (specimen 07)
---
## What happened
The entire text corpus was inlined into `search.html` — **3.9 MB** parsed before the
input box would take a single keystroke, on a museum whose primary reader is on a phone.
It was the heaviest page on the site by two orders of magnitude.
## How it was caught
Weighing the generated pages against the museum's phone-readable constraint — the page
weight itself was the finding.
## The guard
The corpus now ships as numbered sibling scripts, loaded only at the first real search,
and **all shards load before any query runs**. A shard that fails to load produces an
explicit error, never a quietly short result list. The weight is printed on the page, so
the reader chooses to spend it. Total payload is unchanged; *when* it is paid is not.
## What the guard costs
The first search shows a visible loading step it never used to need — the page admits its
weight instead of pre-paying it behind the reader's back.
## Containment
`search.html` is a few KB; results are always over the complete corpus or an error, never
a subset. The all-shards-before-any-query rule is what prevents a partial-load from
silently returning fewer results (the same "quietly wrong beats loudly broken — no"
principle as the rest of the museum).
## Provenance
`museum/generate.mjs` — the search-shard section carries a "WHAT WAS WRONG / WHAT WAS
CHOSEN" comment stating the 3.9 MB figure and the rejected alternatives. Mockup specimen
07 corroborates.
STAMP · generated for RELEASE v2.8.5 commit 06e5180 (06e51801b38a) · archive input-tree hash c07fbfbdd2e1ddeb · 754 files · no wall-clock timestamp (regenerates identically when nothing changed).