Skip to content

Releases: ryanoneill/fastbreak

v0.5.0

27 Jan 03:31
v0.5.0
da85746

Choose a tag to compare

Language Features

  • Named tuple enum variants - Enum variants can now have named fields in tuple-style syntax: Success(value: Int) in addition to positional Success(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

16 Jan 01:43
v0.4.1
c5ab5d0

Choose a tag to compare

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 /release command for streamlined version publishing to crates.io
  • Spec verification in releases - /verify-spec is 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

16 Jan 00:31
v0.4.0
9e9dafe

Choose a tag to compare

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/ensures clauses
  • 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-spec command for exhaustive spec verification
  • Added /implement-feature command 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

14 Jan 04:25
250d128

Choose a tag to compare

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

13 Jan 04:23
v0.2.0
c5b835c

Choose a tag to compare

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 fastbreak

Full Changelog: https://github.com/ryanoneill/fastbreak/blob/main/CHANGELOG.md

Fastbreak v0.1.0

12 Jan 07:03
v0.1.0
fa5e724

Choose a tag to compare

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/eventually operators
  • 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 fastbreak

Requirements

  • Rust 1.70 or later

Documentation

See the README for full documentation and examples.