2.4 KiB
Release regression exploration
Run the opt-in grid fuzzer from the repository root after installing dependencies:
pnpm exec tsx --tsconfig apps/nextjs/tsconfig.json scripts/regressions/grid-fuzz.mts --seed 6545 --steps 1000
Change the seed to explore another repeatable sequence. --seed accepts unsigned
32-bit integers, including zero; --steps accepts 1–100,000 transactions. Each
transaction has one to four move or resize previews followed by commit or cancel.
The committed state becomes the next transaction's input. The fixture includes
two root grids and two nested containers with varying widths and row limits.
The runner calls the real v2 grid engine and checks placement identity and metadata, integer geometry, bounds, overlap, container ownership, cycles, immutable snapshots, repeat-preview stability, rejection retention, and exact cancel/commit results. It does not start Homarr, Docker, or a browser. It uses the Next.js app's TypeScript config to resolve the engine's existing imports.
A failure exits nonzero and writes the seed, source revision and hashes, initial
state, and operation transcript to /tmp/homarr-grid-fuzz. Use --output <path>
to keep artifacts elsewhere. Re-run the printed command on the same source to
reproduce it; changing engine or runner code can change a seed's outcome. Reduce
--steps to find the first failing transaction. Artifacts contain synthetic data.
Passing this runner covers v2 engine invariants only. It does not establish
parity with dev, browser rendering, save/reload persistence, or database upgrades.
The next useful differential checks are:
- Clone a seeded
devdatabase, upgrade only its copy to v2, and compare widget identities/options/integrations through the category/dynamic-to-container migration (packages/db/migrations/custom/0004_unify_sections_and_gutters.ts). - Drive the same saved board on both versions around layout breakpoints and
compare visible widget counts, errors, containment, and save/reload outcomes.
Use separate authenticated browser sessions and version-specific selectors;
the existing
scripts/benchmarks/dev-board.mtsmarkers are v2-specific. - Reuse mock integration fixtures from
e2e/lazy-widgets.spec.tsand geometry checks frome2e/media-server-layout.spec.ts, keeping intentional v2 redesigns separate from missing behavior. Pixel equality is not a release criterion.