Phase 1 — semantics doc
docs/002. hsmc-semantics-formal.md
Phase 2 — deterministic execution journal
hsmc/src/journal.rs (TraceEvent, JournalSink, ActionKind)
hsmc-macros: __chart_journal! emission at every observable site
(entry/exit/action/transition/timer arm-cancel-fire/during/emit/
event delivery/terminate). Per-state during count helpers, stable
chart-hash via FNV-1a. Action observation moved out of run_action
and into call sites so ActionKind is accurate.
Public API on the generated machine: journal(), take_journal(),
clear_journal(), CHART_HASH.
Phase 3 — verification crate (Creusot scaffolding)
verification/{Cargo.toml,mise.toml,requirements.txt,INVARIANTS.md}
verification/src/{event_queue.rs,timer_table.rs} — Pearlite
contracts on simplified mirrors of the runtime types. cargo
creusot generates Coma IR cleanly; VCs not yet discharged.
Correspondence tests drive the verified mirror and the runtime
type with the same op sequences and assert observable parity.
Tests — 113 deterministic-flow tests across 22 files. Each compares a
hand-built expected journal byte-for-byte against actual, anchored
to a spec section: initial entry, lateral/self/up transitions,
bubbling, timers, emit, ordering, durings, step/dispatch
equivalence, root-targeting, current_state, termination.
Tooling — mise.toml (root): stable Rust + cargo subcommands.
verification/mise.toml: pinned nightly-2025-11-13 + opam + python
venv + uv. just verify is fully self-installing.
Bug fix — root state targetable by the chart's own name (e.g.
`on(Trig) => ChartName;`) per spec §"How transitions work".
CHART_HASH — stable FNV-1a fingerprint over the chart's structural
definition; mismatch on replay = different chart.
69 lines
3.1 KiB
Plaintext
69 lines
3.1 KiB
Plaintext
warning: unexpected `cfg` condition value: `tokio`
|
|
--> tests/ui/t9_8_unknown_target.rs:8:1
|
|
|
|
|
8 | / statechart! {
|
|
9 | | M {
|
|
10 | | context: Ctx;
|
|
11 | | events: Ev;
|
|
... |
|
|
17 | | }
|
|
| |_^
|
|
|
|
|
= note: no expected values for `feature`
|
|
= note: using a cfg inside a macro will use the cfgs from the destination crate and not the ones from the defining crate
|
|
= help: try referring to `statechart` crate for guidance on how handle this unexpected cfg
|
|
= help: the macro `statechart` may come from an old version of the `hsmc_macros` crate, try updating your dependency with `cargo update -p hsmc_macros`
|
|
= note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
|
|
= note: `#[warn(unexpected_cfgs)]` on by default
|
|
= note: this warning originates in the macro `statechart` (in Nightly builds, run with -Z macro-backtrace for more info)
|
|
|
|
warning: unexpected `cfg` condition value: `embassy`
|
|
--> tests/ui/t9_8_unknown_target.rs:8:1
|
|
|
|
|
8 | / statechart! {
|
|
9 | | M {
|
|
10 | | context: Ctx;
|
|
11 | | events: Ev;
|
|
... |
|
|
17 | | }
|
|
| |_^
|
|
|
|
|
= note: no expected values for `feature`
|
|
= note: using a cfg inside a macro will use the cfgs from the destination crate and not the ones from the defining crate
|
|
= help: try referring to `statechart` crate for guidance on how handle this unexpected cfg
|
|
= help: the macro `statechart` may come from an old version of the `hsmc_macros` crate, try updating your dependency with `cargo update -p hsmc_macros`
|
|
= note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
|
|
= note: this warning originates in the macro `statechart` (in Nightly builds, run with -Z macro-backtrace for more info)
|
|
|
|
warning: unexpected `cfg` condition value: `journal`
|
|
--> tests/ui/t9_8_unknown_target.rs:8:1
|
|
|
|
|
8 | / statechart! {
|
|
9 | | M {
|
|
10 | | context: Ctx;
|
|
11 | | events: Ev;
|
|
... |
|
|
17 | | }
|
|
| |_^
|
|
|
|
|
= note: no expected values for `feature`
|
|
= note: using a cfg inside a macro will use the cfgs from the destination crate and not the ones from the defining crate
|
|
= help: try referring to `statechart` crate for guidance on how handle this unexpected cfg
|
|
= help: the macro `statechart` may come from an old version of the `hsmc_macros` crate, try updating your dependency with `cargo update -p hsmc_macros`
|
|
= note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
|
|
= note: this warning originates in the macro `statechart` (in Nightly builds, run with -Z macro-backtrace for more info)
|
|
|
|
error[E0046]: not all trait items implemented, missing: `NonExistent`
|
|
--> tests/ui/t9_8_unknown_target.rs:19:1
|
|
|
|
|
8 | / statechart! {
|
|
9 | | M {
|
|
10 | | context: Ctx;
|
|
11 | | events: Ev;
|
|
... |
|
|
17 | | }
|
|
| |_- `NonExistent` from trait
|
|
18 |
|
|
19 | impl MActions for MActionContext<'_> {}
|
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ missing `NonExistent` in implementation
|