e213c1ebeadnet: Python port of the bead-percussion solver (numba), Zarr v2 output with every bead recorded, web components (run, controls, model, animation, waveform, spectrogram, energy, info), serve CLI, agent guide, examples, tests against the TS solverJeremy Magland 1# beadnet
3Python package (numba solver, Zarr v2 output) plus browser components (`beadnet/static/beadnet.js`, plain ES module, no build step) for bead-and-spring percussion models. Port of the solver in `~/projects/bead-percussion` (TypeScript); keep the two in agreement.
5## Building and running models for the user
7Read `beadnet/AGENT_GUIDE.md` first and follow it. The workspace is `work/` (gitignored): scripts in `work/scripts/`, results in `work/runs/`, saved models in `work/models/`, pages in `work/pages/`. View with `beadnet serve work` (port 8790). Run anything longer than about a minute in the background.
9## Development
11- `python -m venv .venv && . .venv/bin/activate && pip install -e '.[test]'`; `python -m pytest -q`.
12- Keep the code Python 3.9 compatible (`from __future__ import annotations`; no runtime `X | Y` types).
13- `tests/fixtures/ts_reference.json` holds runs exported from the TypeScript solver; the cross-check test compares per-bead signals with them. Regenerate it if the TS solver changes.
14- The JS has no tests; check changes in a browser against runs in `work/`.
15- Update `AGENT_GUIDE.md` and `README.md` when the API, the store layout or the components change.