Audience

Verification level

COMPILE-ONLY PASS. The program compiles both selectors in one Run and verifies the exact versions and revision labels. No simulator or asset loader is started.

Files

  • run.yaml creates one versionless instance and one exact @1.0.0 instance.
  • main.py checks which release each instance resolved to.
  • ../catalog/versioned_prop_v1.yaml and versioned_prop_v2.yaml are two immutable releases of the same component identity.
  • ../catalog/index.yaml publishes both and declares stable: 2.0.0.

Read the Registry and manifests

Both Manifest files use the same identity:

yaml
id: object://fastsim/component-demo-versioned-prop

Their version and semantics.revision_label differ. The Registry index maps every release to one exact Manifest digest and separately names the stable target. “Stable” is an explicit Registry pointer; FastSim does not infer it from the largest number.

Read the Run

yaml
objects:
  current:
    use: object://fastsim/component-demo-versioned-prop
  legacy:
    use: object://fastsim/component-demo-versioned-prop@1.0.0

The first selector follows stable and currently resolves to 2.0.0. The second pins exactly 1.0.0. This example intentionally teaches full exact versions only. Do not infer npm-style ranges, caret syntax, inequalities, or other compatibility semantics: FastSim's public authoring shown here declares none of those.

Run it

bash
fastsim config validate run.yaml --json
fastsim config expand run.yaml
python main.py

Expected output:

text
Versionless use selected: 2.0.0 (Registry stable)
Exact @1.0.0 selected: 1.0.0
Resolved releases: ['1.0.0', '2.0.0']

Common errors

  • Assuming versionless means “latest”: it means the Registry's explicit stable.
  • Editing a published Manifest without updating its index SHA-256: Registry loading fails rather than changing an existing release silently.
  • Using @latest, ^1, or comparison expressions: they are not part of this documented contract.
  • Using stable when reproducing accepted data: create and verify a Run lock when exact component and resource content must be frozen.

Previous: 09 — Defaults and parameters · Next: 11 — Backend variants