Determinism and Resource Profiles

Determinism covers declared observations. The current product does not yet limit all guest work or logical allocation.

When this matters

Use this contract when a run must be compared, replayed, or audited. “Same input” is incomplete until source bytes, runtime identity, resource profile, and observed channels are all named. A resource profile is the named set of limits a run works under and reports against.

Read the example

A deterministic run is not a promise to finish every program. Each way of running Lispex today has named input, output, transition, and control limits, but those limits do not count every traversal, exact-number operation, allocation, rendering, or diagnostic. A hostile loop or allocation-heavy rule can therefore exceed the semantic coverage of the current profile. Wall-clock duration is operational evidence, not a guest semantic value.

How to reason about it

  • The observed channels are stdout bytes, diagnostic bytes, exit status, warning order, the resource report, the projected form of the result value, and artifact or provenance identity where applicable.
  • Native and WebAssembly can have different pinned limits while still reporting clean profile-specific resource outcomes.
  • Replay fixes source, runner identity, limits, and which observations count before comparing bytes.

Choose quickly

Fix before comparisonWhy it mattersExample observation
source and input bytestext normalization would change identityvalue or diagnostic bytes
runner and profilelimits and the covered part of the language are namedexit status and resource report
which observations countunobserved host details stay outside the claimstdout and warning order
corpus and baselineoutcome cannot choose the test setagree, mismatch, not-comparable
artifact identity where usedevidence must name what was checkedreceipt or a short fingerprint of the engine bytes

A common mistake

Wall-clock timeout alone is not a semantic resource report.

Current boundaries

  • Agreement across one fixed set of comparisons is not whole-language equivalence or proof of no divergence.
  • Running your source directly through the built-in interpreter and running it through the virtual machine that executes prepared instructions both assume the rule source is trusted. Neither is built to contain hostile source, and neither provides deterministic counters for total work or total allocation.
  • A timeout, a killed worker process, the host running out of memory, a panic, or a trap is an operational interruption or an engine fault. It yields no decision and no receipt you can pass on.

Keep going

Runtime Backends explains each runner and where it came from. Checked Surfaces shows exactly what the maintained comparisons cover.

Runtime backends · Checked Surfaces