这个案例把便于人工编写的 run.yaml 生成内容寻址锁文件,然后校验锁, 并证明通过锁重新编译得到的是同一个 ExecutionPlan

锁文件保护什么

Run lock 会记录完全解析后的计划、选中的组件版本、资源位置和 SHA-256。 当一次成功实验需要在之后复现时,应当使用锁文件。若 run.yaml、组件选择 或资产内容发生变化,校验会明确失败,而不是悄悄运行另一套内容。

锁文件是生成物,不应手工编辑。

前置条件

  • Python 3.11 或 3.12
  • FastSim 0.1.0a6
  • 本案例不会启动仿真器

在当前目录执行:

bash
python main.py

预期包含:

text
Valid: True
Same plan: True

生成文件位于 output/run.lock.yamloutput/ 已被 Git 忽略。

代码流程

python
project = load_project(RUN_FILE)

向上找到 .fastsim/project.yaml,从而得到受信任的 demo registry。

python
compiler = project.compiler()
compiled = compiler.compile_file(RUN_FILE)

把可读配置解析成不可变执行计划。

python
compiled.write_lock(LOCK_FILE)

原子地写入计划和资源完整性信息。

python
verification = compiler.verify_lock(LOCK_FILE)

检查锁结构、计划摘要以及全部本地资源。

python
locked = compiler.compile_locked(RUN_FILE, LOCK_FILE)

只有当前配置仍与锁完全一致时,才返回编译结果。

等价 CLI 命令如下:

bash
fastsim config lock run.yaml --output output/run.lock.yaml
fastsim config verify-lock output/run.lock.yaml
fastsim run run.yaml --lock output/run.lock.yaml --duration 3

最后一条命令会启动 Isaac Lab,因此需要匹配版本的后端 adapter。Python 案例只验证可复现性,不承担仿真器启动开销。

验证等级

自动验证 Python 编译、Run 编译、锁写入、资源完整性校验和锁定重编译; 不依赖原生仿真器。

下一步:12 · 同步生命周期 API