Expand description
Unified error family for the solver’s public API surface.
Reconciled from grand-audit Pass 2 prototype 14 (api-error-taxonomy)
onto the Pass-3 composed tree (Pass 3 py-module-reconciliation, T9).
Before this, the crate had two independent, incomplete error shapes:
Unsatisfiable (a bare unit struct, lib.rs) and AssignmentError
(builder/assignment.rs, five variants scoped to the assignment-problem
builder only, and — per the Pass-1 rust-cop-builder finding —
conflating budget-exhaustion with genuine infeasibility). Every
downstream binding (py/, wasm’s isomorphic.rs) re-derived its own ad
hoc mapping of “something went wrong” onto a bare
PyRuntimeError/JsError string, which is exactly the “silent/conflated
handling” the audit’s fail-explicit precept bans (Pass-1 ledger R15, B0).
CspError is the one family every layer should map 1:1 rather than
reinvent: PyO3 via create_exception! (py/errors.rs) and wasm via a
typed WasmCspError that stamps a .code onto a genuine Error instance
(wasm/src/errors.rs, not reconciled in this pass — see report). code()
is the one string all downstream layers agree on.
Tests: tests/error.rs.
Enums§
- CspError
- Unified error family for
Csp/Sudoku/Futoshiki operations exposed across the PyO3 and wasm boundaries.