chore(release): 0.3.0
Bump workspace version 0.2.0 → 0.3.0. CHANGELOG: documents the additions in this release — - `journal` Cargo feature with full TraceEvent enum + machine API - root state targetable by chart name - 113 deterministic-flow tests - verification/ workspace member with mechanical Creusot proofs - docs/002 formal semantics doc - README "How a chart behaves" building-block section - mise + just tooling overhaul (set shell, set script-interpreter) README: integrates the semantics from docs/002 as eight building- block rules that build on each other (active path, default-descent, event bubbling, transitions, up-transition rule, entry/exit ordering, timer lifecycle, emit / during / termination). Adds an explicit "what hsmc deliberately does NOT have" table with what to use instead. New "Verification" section pointing at `just verify`. No behavior changes for v0.1 / v0.2 charts — every existing chart compiles unchanged.
This commit is contained in:
5 files changed
+243
-13
No files matched your search
@@ -4,6 +4,63 @@ All notable changes to this workspace are documented here. The format
|
||||
follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and
|
||||
this project adheres to [Semantic Versioning](https://semver.org/).
|
||||
|
||||
## 0.3.0 — 2026-04-27
|
||||
|
||||
### Added
|
||||
|
||||
- **`journal` Cargo feature.** Records every observable atom of chart
|
||||
execution — `Started`, `Entered`, `Exited`, `ActionInvoked`
|
||||
(`Entry`/`Exit`/`Handler`), `DuringStarted`, `DuringCancelled`,
|
||||
`TransitionFired`, `EventDelivered`, `EventDropped`, `EmitQueued`,
|
||||
`EmitFailed`, `TimerArmed`, `TimerCancelled`, `TimerFired`,
|
||||
`TerminateRequested`, `Terminated` — into a `Vec<TraceEvent>` on the
|
||||
generated machine. Same chart + same events = byte-identical
|
||||
journal. Public API: `journal()`, `take_journal()`, `clear_journal()`,
|
||||
`CHART_HASH` (a stable FNV-1a fingerprint of the chart's structural
|
||||
definition).
|
||||
- **Root state targetable by chart name.** `on(Trig) => MyChart;`
|
||||
resolves to the root state in both `classify_target` and
|
||||
`resolve_transitions`. From any nested state this is an
|
||||
up-transition (root is always on the active path).
|
||||
- **113 deterministic-flow tests** (under `--features tokio,journal`)
|
||||
comparing hand-built expected journals byte-for-byte against
|
||||
actual, anchored to spec sections: initial entry, lateral / self /
|
||||
up transitions, default-descent, event bubbling, timer arm /
|
||||
cancel / fire, emit, ordering, durings, step-vs-dispatch
|
||||
equivalence, root-targeting, `current_state()`, termination.
|
||||
- **`verification/` workspace member with Creusot proofs.** Verified
|
||||
mirrors of the runtime `EventQueue` and `TimerTable` carry
|
||||
`creusot-std` (Pearlite) contracts that Why3 + alt-ergo + z3
|
||||
discharge mechanically. 14/14 VCs proven. `just verify` is
|
||||
self-installing (mise pulls opam + the pinned nightly + Creusot's
|
||||
canonical `INSTALL`).
|
||||
- **`docs/002. hsmc-semantics-formal.md`** — canonical, unambiguous
|
||||
reference for chart behavior. Numbered S-rules supersede the v0.1
|
||||
prose spec and v0.2 design-change-request.
|
||||
- **README "How a chart behaves" section** — eight building-block
|
||||
rules that build on each other, with an explicit "what hsmc
|
||||
deliberately does NOT have" table.
|
||||
|
||||
### Tooling
|
||||
|
||||
- `mise.toml` (root) declares stable Rust + components + embedded
|
||||
targets + cargo subcommands. `verification/mise.toml` declares
|
||||
the pinned `nightly-2025-11-13` + opam + python venv + uv.
|
||||
- `set shell` and `set script-interpreter` route every `just` recipe
|
||||
through `mise exec` — no shebangs, no per-recipe wrappers.
|
||||
- `just verify` runs `cargo creusot prove --no-cache` so SMT
|
||||
invocations happen on every run; `time` shows ~7s CPU on ~1.2s
|
||||
wall = real parallel work.
|
||||
- `just mutants` runs with `--features tokio,journal` so `journal_*`
|
||||
and `det_*` tests execute. **0 missed mutants.**
|
||||
- `just miri` excludes `hsmc-macros` (trybuild glob hits Miri's
|
||||
isolation) and `hsmc-verification` (different pinned toolchain).
|
||||
66 tests pass under Miri, 0 UB.
|
||||
|
||||
### Backward compatibility
|
||||
|
||||
Every v0.1 / v0.2 statechart compiles under v0.3 unchanged.
|
||||
|
||||
## 0.2.0 — 2026-04-22
|
||||
|
||||
### Fixed — behavior-visible (breaking)
|
||||
|
||||
Reference in new issue
Block a user