A reproducible run identifies both the authored project and the runtime controls that resolved it.

Pin independent versions

Record the npm package version and the WorkSpec language version separately. The package version selects an implementation release. The language version selects the document contract.

Pin the package version in the application's lockfile. Keep the canonical simulation.schema_version and $schema declaration in each complete Starting State document.

See versions and compatibility for the distinction.

Capture every source

Retain the exact Starting State, Changes, Generator, and Constraint source. A file hash or source-control revision provides a compact identity for the source set.

Asset bytes do not affect runtime state, but they affect rendered output. Capture the asset set when visual reproducibility matters.

Fix run controls

Record these values:

Control Why it matters
seed Repeats Generator random() results.
requested horizon Defines the requested execution prefix.
maxEvents Defines the available work-unit budget.
inspection time Identifies the snapshot or Constraint query.

Use the Generator random() helper. Math.random() is not part of deterministic Generator execution.

Preserve resolved evidence

Store the run metadata with the result:

  • seed;
  • requestedHorizon;
  • resolvedThrough;
  • complete;
  • maxEvents;
  • processedWorkUnits;
  • Problems and Constraint violations.

Do not record only the requested horizon. A budget-limited run can resolve less time than requested.

Reuse one run

For an embedded application, create one authoritative run. Derive snapshots, Constraint results, and renders from that object.

Re-running the project for each consumer creates separate executions. It also weakens the claim that every result describes the same history.

The authoritative execution reference defines the supported reuse pattern.

Verify a replay

Repeat the run with the captured source and controls. Compare resolved metadata, Problems, snapshots at selected times, and Constraint results.

A matching final object count is not sufficient evidence. Intermediate history, task assignments, and violations can differ while final totals match.