Changelog
All notable changes to Spindle-Rust are documented here. For the full changelog with migration notes, see CHANGELOG.md in the repository root.
v0.3.0 (2026-03-04)
Added
- SPEC-017 Arithmetic Module: full arithmetic expression support in rule bodies.
- Three numeric term types:
Integer,Decimal(arbitrary-precision viarust_decimal),Float(FiniteFloatwrapper rejecting NaN/Inf). - Automatic type promotion chain: Integer -> Decimal -> Float.
ArithExprAST with n-ary ops (+,-,*,/,min,max), binary ops (div,rem,**), and unary ops (abs).bindvariable binding and comparison guards (=,!=,<,>,<=,>=) in rule bodies.- Cross-type numeric matching in grounding (e.g.,
Integer(2)matchesDecimal(2.0)). - SPL parser extended with arithmetic expression, numeric literal, and guard parsing.
- Parse-time rejection of arithmetic in heads, negated arithmetic, and reserved keywords.
- Three numeric term types:
- SPEC-018 Temporal Atom Identity: atoms with different temporal bounds are now treated as distinct during reasoning.
- Synthetic bridging rules connect temporally-scoped variants.
- Core query operators (
what_if,why_not,requires) upgraded to temporal-aware matching.
- v2 JSON output (REQ-012):
--v2CLI flag andreasonV2WASM method emitting typedTermarguments in schemaspindle.reason.v2.
Changed
- Breaking:
From<NumericValue> for Termreplaced withTryFrom; non-finite floats now return errors. Literal::predicate_idsandSubstitution::termsmigrated fromSymbolIdtoTerm.RuleBodymigrated fromSmallVec<[Literal; 4]>toSmallVec<[BodyLiteral; 4]>.
Fixed
FiniteFloatserde deserialization validates invariants, preventing non-canonical or non-finite values.- SPL round-trip for arithmetic expressions preserved correctly.
- Tilde-negated reserved keywords (
~>,~bind, etc.) rejected in list-form literals. - Negative base with fractional exponent rejected in
decimal_pow. - Temporal bounds preserved in body normalization.
v0.2.0 (2026-02-26)
Added
- IMPL-011 Verified
requires:requirescommand now verifies abduction solutions by default.- New core API:
requires_with_options(theory, goal, options)withRequiresOptions,RequiresResult,RequiresSearchStatus,RequiresVerificationStats. - New CLI contract schema:
spindle.requires.v2.
- New core API:
- Release tooling:
release.shscript with pre-flight validation checks andmake releasetarget. - Pre-1.0 semver policy documented.
Changed
requires --jsonemitsspindle.requires.v2schema only.spindle capabilities --jsonadvertisesschemas.requires = spindle.requires.v2.- Core
requires()compatibility wrapper delegates to verified logic.
Fixed
- Eliminated false-positive
requirescandidates that fail under full defeasible reasoning. - Corrected
BudgetExhaustedclassification for duplicate raw-candidate edge cases. - Defensive collision handling for injected verification fact labels.