hecks

Project status

What works today, what is experimental or partial, and where the gaps are written down. The current release number, the planned list and the stability promise’s one-paragraph summary stay on the README.

docs/1.0-readiness.md states plainly what the stability promise made at 1.0.0 covers — the DSL and runtime API in the DSL reference won’t change in a breaking way without a major-version bump — and what it explicitly doesn’t cover yet (query DSL aggregation beyond count/median/group_by, Rust codegen for read_model beyond its proven subset, Rails integration, Drivers, the outbox’s standalone relay — see that doc’s “Explicitly not covered” section). ADR 0025, the breaking DSL redesign the 1.0.0 release was blocked on, is fully landed — the README’s quickstart shows the current syntax.

Working today

Exercised in CI on every push (the whole suite, alongside hecks model_check and hecks fuzz_run.fuzz):

The first item, on the in-memory adapter, in one sitting: a declared rule refuses a command before it runs, and the same command goes through once the rule holds.

order = Order.create_pizza!(name: "Quattro", pizza: { price_cents: { cents: 1500 }, size: "large" })

order.purchase!(customer_name: "Sam", amount: { cents: 1500 })   # ~> GivenNotMet: a pizza needs at least one topping

order.add_topping!(topping: "Olive", amount: 2)
order.purchase!(customer_name: "Sam", amount: { cents: 1500 })
order.status   # => "sold"

Experimental or partial

Planned, and the running list of gaps

The planned-or-research-only list lives on the README, where spec/readme_planned_adrs_spec.rb checks it. docs/future-features.md is the project’s own running list of gaps, ranked by how much depends on them — read it before assuming a capability exists that isn’t demonstrated here.