- New shared package tools/tui-core/ (club3090_tui_core): detect, parsers,
runner (generic SubprocessRunner/CoreRunState), registry, widgets.
- Converge the two registry tab-parsers into ONE canonical VariantRow +
parse_variant_rows in core (Codex carry-over) — both apps consume it
(identity-verified). detect.py's old dict parser is gone.
- c3t's TestRunner now genuinely DELEGATES to core SubprocessRunner (the
first pass had left a full copy); the duplicated read loop is removed.
- c3t + cockpit modules are thin re-export shims; pyproject deps add
club3090-tui-core. No behavior change.
Tests green: core 61 / c3t 83 / cockpit 45. No scripts/ edits.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>