Tests load research drivers via importlib under unique module names
instead of a bare 'import run' (shared-process collision between the
Dütsch and VIV drivers). lifecycle.md qualifies immutable geometry and the
host-only get_flags for translating circles; supported_settings.md points to
the dense-only moving-circle feature; leontini_viv_predeclare.md is renamed
viv_re150_predeclare.md (Re 150 Kolahdouz/Qin case) with references updated.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
viv.py: exact undamped harmonic update under the last completed force,
y = 0 response cycles with eligibility, 10-cycle blocks, settle/score with
deterministic restart, conditional velocity seed, scoring metrics. run.py:
Simulation-API driver (set_body + run(1)), RHS = CME + Wen from the moving
diagnostics, raw CME/obs/node terms logged, fail-closed bounds, caps and
input rejection, outputs outside the checkout. CPU tests for the logic and
the real config loader. Predeclare: stale failure sentence removed.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>