面向读者

验证等级

仅配置编译通过。 程序在同一份 Run 中编译两种选择方式,并验证准确版本与修订标签; 不会启动仿真器或资产加载器。

文件说明

  • run.yaml 创建一个不写版本的实例和一个精确 @1.0.0 实例。
  • main.py 检查两个实例最终解析到的版本。
  • ../catalog/versioned_prop_v1.yamlversioned_prop_v2.yaml 是同一组件标识的 两个不可变版本。
  • ../catalog/index.yaml 发布两个版本,并声明 stable: 2.0.0

理解 Registry 与 Manifest

两个 Manifest 使用相同标识:

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

它们的 versionsemantics.revision_label 不同。Registry Index 把每个版本映射到 准确的 Manifest 摘要,并单独声明稳定目标。“稳定”是 Registry 中的明确指针,FastSim 不会根据最大版本号自动猜测。

理解 Run

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

第一个选择器跟随 stable,当前解析到 2.0.0;第二个精确固定为 1.0.0。本案例 只教授完整精确版本。不要自行推断 npm 风格范围、插入符号、不等式或其他兼容语义: 这里展示的 FastSim 公开配置契约并未声明这些能力。

运行

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

预期输出:

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']

常见错误

  • 认为不写版本就是“最新版”:它表示 Registry 明确声明的 stable
  • 修改已发布 Manifest 却不更新 Index SHA-256:Registry 会直接拒绝加载。
  • 使用 @latest^1 或比较表达式:它们不属于本案例说明的契约。
  • 在复现实验时只依赖 stable:需要冻结组件和资源内容时应生成并验证 Run Lock。

上一节:09 — 默认值与参数 · 下一节:11 — 后端 Variant