Guides
Versioning
A recording is only as trustworthy as the chain that made it: the flashed sketch, and the numbers the bridge computes from it. That chain has one version, and any claim about the rig names the version it was tested against.
The measuring chain
These files decide what a recording contains. The protocol calls this the "model".
| Part | Files |
|---|---|
| Firmware | apps/olimex-shield/eeg_stream/eeg_stream.ino |
| Scaling and rig constants | apps/server/rig.py |
| Contact check | apps/server/quality.py |
| Sample-rate measurement | apps/server/timebase.py |
| Stored and exported data | apps/server/sessions.py, apps/server/bids.py |
The workbench's drawing code, docs and tests are not part of the chain.
Tags
- The version is
versioninpyproject.toml, mirrored inCITATION.cff. - Any change to the chain that alters a number in a recording or an export bumps the version and is tagged
model-vX.Y.Z. Examples: sample cadence, µV per count, contact thresholds, BIDS fields. Any other change needs no tag. CHANGELOG.mdlists, for each chain version, which experiments inEXPERIMENTS.mdit invalidates. Firmware changes stay under Board.- Every session records the version that made it (
software_versioninsession.json), and BIDS exports carry it inSoftwareVersions, so a recording can be matched to its tag.
Claims about the rig are predicted first
A new claim about the rig, such as its noise floor, timing jitter or a recovered evoked response, is a preregistered experiment:
- Write
experiments/<EID>/PREREG.mdwith numeric predictions and pass/fail thresholds, naming themodel-v*tag it runs against. - Commit it and tag
<EID>-preregbefore recording or analysing any data. - Run, write
RESULTS.mdagainst the frozen thresholds, then tag<EID>-runand<EID>-closed.
A failed prediction closes that experiment. Retrying means opening a new one. Only aggregate statistics are committed: raw recordings of people never enter this repo.
Rendered from docs/versioning.md.