Proposal (from Jon): EigenMiniSat could have UI. The pieces are already in place — minisat.eigs is a pure importable core, and the stepped-session API exposes the full stats struct mid-solve (conflicts, resolutions, learnts, peak_learnts, max_level, decisions, propagations, restarts — the same counters the ladder harness prints every 300s). That's exactly the fleet's core + run() split (eigen-edit pattern): add a front-end that opens a window and drives the solver a step-budget per frame.
Scope sketch:
- Problem picker — the built-in families (pigeonhole, graph coloring, Tseitin tori by rows×cols) + DIMACS file load.
- Live trajectory dashboard — conflicts/resolutions/learnts-over-time plots updating as the solver runs, peak_learnts and max_level readouts, restart markers. This is the counters-are-the-result-of-record discipline made visible.
- Search view — current assignment as a variable grid (colored by value/unassigned), decision-level depth bar, activity heat. Solve/pause/step/reset transport.
- Fleet UI standard from birth (Tidepool#43 / eigen-edit#3 / eigen-sheet#50): themed toolkit shell, render-decode + mouse oracles alongside the UI, desktop-gui-qa screenshots as acceptance.
Forcing-function contract (the reason to build it, not just the demo):
- lib/ui has no chart/plot widget — this forces that gap upstream from a second consumer simultaneously with eigen-sheet#26 (dynamic charts). Two consumers forcing one gap is the strongest upstream signal we get.
- A step-budget-per-frame compute loop inside a UI event loop is a new pattern for the toolkit (long-running work + responsive chrome) — likely to surface scheduling/repaint gaps no current app hits.
- Observer angle: the solver's bindings under the observer while it runs is the on-brand demo — measurement of a live search, for free.
Gate before build: eigen-portfolio-strategist validates the contract and adds the coverage-map row (hq/PORTFOLIO.md), per the fleet-membership rule. Build owner once approved: eigenscript-app-fleet-engineer.
Non-goal: solver performance work — the UI must not perturb the counters; a headless run and a UI-stepped run of the same case must produce byte-identical counter trajectories (that assert IS the oracle).
Proposal (from Jon): EigenMiniSat could have UI. The pieces are already in place —
minisat.eigsis a pure importable core, and the stepped-session API exposes the full stats struct mid-solve (conflicts, resolutions, learnts, peak_learnts, max_level, decisions, propagations, restarts — the same counters the ladder harness prints every 300s). That's exactly the fleet's core +run()split (eigen-edit pattern): add a front-end that opens a window and drives the solver a step-budget per frame.Scope sketch:
Forcing-function contract (the reason to build it, not just the demo):
Gate before build: eigen-portfolio-strategist validates the contract and adds the coverage-map row (hq/PORTFOLIO.md), per the fleet-membership rule. Build owner once approved: eigenscript-app-fleet-engineer.
Non-goal: solver performance work — the UI must not perturb the counters; a headless run and a UI-stepped run of the same case must produce byte-identical counter trajectories (that assert IS the oracle).