Skip to main content

Conformance

Normative: MODEL.md §12.

An implementation is conformant when it reproduces the scenarios below — the arbiter of MODEL.md §2–§16. Both implementations encode this list as their test suite:

suiterun
TypeScriptts/packages/core/testcd ts && pnpm test
.NETdotnet/test/Ilmek.Core.Testscd dotnet && dotnet test Ilmek.sln

The non-negotiable scenarios​

#ScenarioSpec
1step executes once across an interrupt/resume cycle§5, §6
2Two interrupts in one node resolve independently, one resume each§6
3An interrupt inside a loop with stable keys resumes at the right iteration§5.4, §6
4Superstep reduce order is task order, not completion order§2, §4
5A crash mid-superstep replays it with zero re-executed steps§4, §5
6compile(spec) → toSpec() round-trips§9
7Strict mode raises when a journaled step key vanishes on replay§5.5
8Concurrent pauses resolve to their own answers; a bare answer to >1 pending is refused§6.1
9A send fan-out runs the target once per payload, each with its own input; results reduce independent of scheduling§14
10A node's command({goto}) overrides its static edges; command({update}) reduces before the goto is planned§15
11A retried node re-runs its body but not its completed steps§16

Why scenario 8 exists​

The engine once shipped this bug: two nodes pausing in the same superstep each journal interrupt#0, so answers keyed by key collapsed to one entry and both nodes received the same answer. Nothing raised. A conformance list is worth exactly the failures it has caught — this is the one that earned the id vs key rule.

Status​

Green against the list in both languages: TypeScript and .NET. See the capability matrix in the repository for the current per-feature breakdown across the two ports.