Commit builds/ and modules/
One file per snapshot, never a shared append-only log. A history.jsonl would conflict every single
time two branches both record a build — exactly when history is most worth having.
Module tables are content-addressed separately because module sizes repeat almost identically
between builds; inlining them would make each snapshot 50–200 kB of near-duplicate data.
Add index.db to .gitignore. It is derived and rebuilt by scan, and publishing it just creates
conflicts between machines that built it at different times.
aliases.json
Trends are keyed on the page file path, which survives URL refactors but not file moves. An alias stitches the history back together:.perf/aliases.json
overrides.json
Manual answers for specifiers no resolver can settle — computed dynamic imports, exotic plugin-resolved aliases. Maps a specifier to a workspace-relative file:.perf/overrides.json
schema.json
Records the snapshot schema version. It is bumped on any change to the stored shapes — a snapshot outlives the tool version that wrote it, and silently reinterpreting old records under new semantics is how a history feature starts lying about the past.crust diff refuses to compare across schema
versions.