Releases: ryanoneill/fastbreak
v0.5.0
Language Features
- Named tuple enum variants - Enum variants can now have named fields in tuple-style syntax:
Success(value: Int)in addition to positionalSuccess(Int). Both syntaxes are supported and can be mixed.
Developer Experience
- Comprehensive examples - Added 25 example files organized by feature across 8 categories (types, state machines, scenarios, expressions, properties, quality, modules, attributes). Each file progresses from basic to advanced usage.
Internal
- 163 tests passing
- Spec verification: 116 definitions, 13 scenarios, 1 property
- All 25 examples validate successfully
Full Changelog: v0.4.1...v0.5.0
v0.4.1
Language Features
- Enum variants in expressions - Enum variants can now be used with qualified syntax (
Color::Red) in expressions, enabling pattern matching and variant construction - Keywords as attribute arguments - Keywords like
security,performance, etc. can now be used as identifiers in attribute arguments (e.g.,@category(security))
Developer Experience
- Release automation - Added
/releasecommand for streamlined version publishing to crates.io - Spec verification in releases -
/verify-specis now part of the release pre-flight checks to ensure spec-code alignment
Internal
- 159 tests passing
- Spec verification: 116 definitions, 13 scenarios, 1 property
- Full spec-code alignment verified
Full Changelog: v0.4.0...v0.4.1
v0.4.0
What's New in v0.4.0
Language Features
- Dotted paths in scenario bindings - Set nested state fields directly:
catalog.entries = {} - Float literals and decimal percentages - Support for
99.99%in quality requirements - Trailing commas in scenario bindings - Optional trailing commas for cleaner formatting
- State field access in action contracts - Reference state fields in
requires/ensuresclauses - Action calls in invariants - Use actions as helper/predicate functions in invariant expressions
Bug Fixes
- Fixed type alias forward reference resolution
- Fixed QualityPropertyValue enum to match implementation
- Fixed operator precedence issues
Developer Experience
- Added
/verify-speccommand for exhaustive spec verification - Added
/implement-featurecommand for spec-first TDD workflow - Comprehensive spec synchronization with implementation
- Added spec-first TDD workflow documentation
Internal
- 157 tests passing
- Full spec verification: 67 types, 28 enums verified
Full Changelog: v0.3.0...v0.4.0
v0.3.0
What's New
Enhanced Quality Requirements
Quality blocks now support structured fields for comprehensive NFR specifications:
quality performance "API response time" {
metric: latency,
scale: p99,
target: < 100ms,
constraint: hard,
applies_to: action register,
measurement: per_request,
under_load: {
concurrent_users: 1000,
requests_per_second: 500,
},
verified_by: [
test "load_test_api",
monitor "datadog_latency",
],
}
New fields: scale (p50, p90, p95, p99, p999, mean, median, max, min), constraint (hard/soft), applies_to (action/state/type), measurement (per_request, hourly, daily, etc.), under_load (structured load conditions), verified_by (list of verification methods).
Variant Pattern Matching in is Expressions
The is operator now supports full pattern matching with nested variants:
result is Err(NotFound)
status is Pending(reason)
Previously only simple variant names were supported (e.g., result is Ok).
Dotted Paths in Use Statements
Import statements now support dotted module paths to match module declarations:
module abc.catalog
// ...
// In another file:
use abc.catalog::{Item, Category}
Full Changelog: v0.2.0...v0.3.0
v0.2.0
What's New in v0.2.0
New Features
-
Line and column numbers in error messages: Parse errors now include precise location information for easier debugging.
-
Block syntax in match arms: Match arm bodies can now use block expressions with braces:
match x { 0 => { false }, _ => { x > 0 }, } -
Dotted module names: Module declarations support hierarchical naming:
module myproject.auth.users -
Multi-file module imports: Split specifications across files with import support:
use types::{UserId, Email} use types::{Identifier as Id} // with alias -
Comprehensive self-specification: All implementation types now documented in the Fastbreak self-specification.
Changes
- Lowered MSRV to Rust 1.70: Supports older Rust toolchains.
Installation
cargo install fastbreakFull Changelog: https://github.com/ryanoneill/fastbreak/blob/main/CHANGELOG.md
Fastbreak v0.1.0
Fastbreak v0.1.0
The initial release of Fastbreak, a formal methods-inspired specification language combining ideas from Alloy, TLA+, Cucumber, and Design by Contract.
Features
- Type definitions - Entities and their relationships (Alloy-inspired)
- State machines - System states, transitions, and invariants (TLA+-inspired)
- Scenarios - Given/When/Then executable specifications (Cucumber-inspired)
- Contracts - Preconditions, postconditions, and invariants (Design by Contract)
- Properties - Temporal properties with
always/eventuallyoperators - Quality requirements - Non-functional requirements with measurable targets
- Attributes - Traceability with
@id,@rationale, etc. - Refinement types - Type aliases with constraints (
type Email = String where self.contains("@")) - Alternative flows - Scenario branches for edge cases
CLI Commands
fastbreak init <name> # Initialize a new project
fastbreak check [<file>] # Check specifications for errors
fastbreak doc [<file>] # Generate markdown documentation
fastbreak diagram [<file>] # Generate Mermaid diagrams (ERD, state, sequence)
fastbreak build # Build everything (check + doc + diagram)Installation
cargo install fastbreakRequirements
- Rust 1.70 or later
Documentation
See the README for full documentation and examples.