v0.31.0 — verified selector rules, facts ingestion, RV promo flip, z3-free default
The first Rocq-verified selector rules land (VCR-SEL-001 increment 1); the proof-carrying-specialization pipeline opens (wsc.facts ingestion, #494 phase 1); RV32 local promotion ships default-on with a measured never-grow model (the #601 hold lifts); the default build drops its last C++ dependency.
Added
- VCR-SEL-001 increment 1 (#623, epic #242): declarative rule table for i32 add/sub/mul/and/or/xor + rotl, generated Rust lowerings committed to the tree, one T1 theorem per rule with a Qed-coverage check that fails the
//coqbuild on any gap. BehindSYNTH_SEL_DSL(default OFF, OFF ≡ baseline byte-identical). - wsc.facts ingestion (#624, VCR-PERF-002 phase 1): fail-safe schema-v1 parser threaded into
CompileConfig; zero codegen change; the clamp-elision consumer is phase 2.
Changed (byte-changing on RV32, deliberate)
SYNTH_RV_LOCAL_PROMOdefault-ON (#626/#627): heuristic profitability replaced by measurement — a promoted lowering is kept only when its emitted bytes don't exceed the unpromoted baseline. Corpus: 10 shrink / 0 grow (flight_algo −32 B, accum −68 B); all 11 RV32 execution differentials green on the new default bytes; RV32 goldens promo-neutral by hash;=0opt-out CI-gated.- static-link-z3 out of the default build (#621, #553):
cargo test --workspacewith no C++ toolchain (ordeal engine, 139/139); Z3 stays as the feature-gated differential oracle (SYNTH_SOLVER_DIFF=1).
Documentation
- README North-Star + CLAUDE.md refreshed to post-v0.30 reality (#625).
🤖 Generated with Claude Code