面向读者
验证等级
仅配置编译通过。 程序在同一份 Run 中编译两种选择方式,并验证准确版本与修订标签; 不会启动仿真器或资产加载器。
文件说明
run.yaml创建一个不写版本的实例和一个精确@1.0.0实例。main.py检查两个实例最终解析到的版本。../catalog/versioned_prop_v1.yaml与versioned_prop_v2.yaml是同一组件标识的 两个不可变版本。../catalog/index.yaml发布两个版本,并声明stable: 2.0.0。
理解 Registry 与 Manifest
两个 Manifest 使用相同标识:
yaml
id: object://fastsim/component-demo-versioned-prop
它们的 version 和 semantics.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。