Files
hsmc/mise.toml
T
swaits 081bd28cca journal + determinism tests + Creusot verification scaffolding
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.
2026-04-27 20:15:05 -06:00

29 lines
1.5 KiB
TOML

# Project-local mise configuration for hsmc.
#
# Lists the dev/test/lint tooling the workspace needs. The verification
# subcrate has its OWN mise.toml (verification/mise.toml) that pins the
# specific nightly Rust + opam + Python venv that Creusot requires —
# `just verify` cd's there so those settings activate.
#
# When you `cd` into the repo, the global `enter = "mise i -q"` hook
# auto-installs everything missing.
[tools]
# ── Rust toolchain (stable) ─────────────────────────────────────────
# Components and targets needed by the main crate's dev/test/lint flow.
# Verification needs a different (pinned) nightly — see verification/mise.toml.
rust = { version = "stable", components = "clippy,rustfmt,rust-src,llvm-tools-preview", targets = "thumbv7em-none-eabihf,thumbv6m-none-eabi,thumbv8m.main-none-eabihf,riscv32imac-unknown-none-elf" }
# ── Cargo subcommands the justfile drives ───────────────────────────
"cargo:cargo-nextest" = "latest" # `just test`, `just dev`
"cargo:cargo-llvm-cov" = "latest" # `just coverage`
"cargo:cargo-mutants" = "latest" # `just mutants`
"cargo:cargo-audit" = "latest" # `just audit`
# ── Build orchestration ─────────────────────────────────────────────
just = "latest"
[settings]
trusted_config_paths = ["{{ config_root }}"]