Tests
python -m pytest tests (eis check) runs every generator in tools/, every check here, and fails if a generated file in spec/, figures/, annex/, data/, or README.md differs from the committed one. CI runs the same (.forgejo/workflows/checks.yml). Each test module covers one concern and names what failed.
| Module | What it checks | What it does not do |
|---|---|---|
test_model.py |
The document model (data/document.json) is consistent; every register row binds a role or an interface and names how it is verified; the identifiers match data/register.lock.json, never reused or resequenced, their text never changed silently; no tool types the identifier prefixes. |
It does not write the lock: python tools/model.py --lock does, deliberately. |
test_generators.py |
Every generator listed in tools/eis.py validates its model and runs; the example claim files, row budget, and Property Exchange dump check; the generated files are committed. |
It does not set any model. |
test_claims.py |
Claim files: product types and implied features, the power block per domain, PWR-A6 entries and a power converter. | It does not validate a product's claim; eis claim FILE does. |
test_pages.py |
Every relative link and #anchor resolves, every figure is referenced, every shall sentence carries an identifier, the prose keeps one voice (links.py); every figure card follows the house style (figures.py); every example names the edition in pyproject.toml (eis_edition.py); the site builds with no broken link. |
|
test_sources.py |
HP, rack unit, and the 3U panel height match the published A-100 construction page (doepfer.py); the published Technical Details figures are quoted and the places EIS chose otherwise reported (doepfer_technical.py); every row of data/video_timings.json matches the hardware-verified timing contract, clock for clock (video_timings_contract.py, --yaml PATH checks a full one); the survey copy in data/survey/ is the eis-reference survey when that checkout is beside this one (Annex F itself is checked by the generator, tools/survey.py --check). |
None of these sets a model: a difference is reported, not applied. |
The scripts links.py, figures.py, eis_edition.py, doepfer.py, doepfer_technical.py, and video_timings_contract.py also run on their own (python tests/links.py).
Construction page: Construction Details A-100, retrieved 2026-10-09. Signal page: Technical Details A-100, retrieved 2026-10-16. The comparison is summarized in Annex E. Where each normative number comes from is in the requirements register.