Gap claim
The satisfiability solver can return unknown from a bounded check. The current solver path treats that non-answer like a decisive result while reducing an unsatisfiable core or selecting a canonical witness, so published evidence can claim minimality or canonicality that was not established.
Existing surface audit
The service boundary already has a typed operational-error path, but the shared solver-check seam does not classify unknown. Evidence replay detects the divergence only after invalid evidence has already been emitted.
Reproduction
- Force one
solver.check() call to return unknown during core reduction or witness selection.
- Run scenario satisfiability analysis.
- Observe that analysis continues instead of reporting an operational failure.
Duplicate clause identifiers also reach Z3 with an opaque exception, and an empty allowed-value intersection relies on implicit zero-argument behavior.
Expected behavior
- Every
unknown result fails closed through the typed operational-error boundary.
- No evidence claiming minimality or canonicality is emitted after an incomplete check.
- Duplicate clause identifiers are rejected before solver construction.
- Empty membership is represented explicitly as false.
Verification
Regression tests must cover incomplete core reduction, incomplete witness selection, duplicate identifiers, and empty membership without changing the governed Z3 version or published schemas.
Related implementation
Proposed in #1083.
Gap claim
The satisfiability solver can return
unknownfrom a bounded check. The current solver path treats that non-answer like a decisive result while reducing an unsatisfiable core or selecting a canonical witness, so published evidence can claim minimality or canonicality that was not established.Existing surface audit
The service boundary already has a typed operational-error path, but the shared solver-check seam does not classify
unknown. Evidence replay detects the divergence only after invalid evidence has already been emitted.Reproduction
solver.check()call to returnunknownduring core reduction or witness selection.Duplicate clause identifiers also reach Z3 with an opaque exception, and an empty allowed-value intersection relies on implicit zero-argument behavior.
Expected behavior
unknownresult fails closed through the typed operational-error boundary.Verification
Regression tests must cover incomplete core reduction, incomplete witness selection, duplicate identifiers, and empty membership without changing the governed Z3 version or published schemas.
Related implementation
Proposed in #1083.