场景输入放在这里,一个场景一个严格、带版本的 JSON 文件。一个场景写明它代表的 surface 和 task,带上 fixture 元数据和权限模式,脚本化地给出假 provider 依次返回的内容,并把每条故障钉在指定点的第 N 次访问上。它的 tag 决定它属于哪个 tier,它的预期部分写明这次运行必须达成的终止原因与事件 invariant。文件先经 ../schema.py 加载:出现未知或含糊的字段,加载直接失败,../runner.py 根本没有机会执行它。
| 文件 | 职责 |
|---|---|
.gitkeep |
让场景根目录不依赖下面的具体场景分组而始终存在。 |
| 目录 | 职责 |
|---|---|
baseline/ |
必需的离线 tier:pr 场景,覆盖确定性的 provider 序列、终止提交,以及计划内的故障行为。 |
orchestration/ |
十二个场景,驱动真的 Reconciler 去对一个脚本化的 backend(M4-4)。与 baseline 家族不同,它们是故意导入生产代码的——reconciler 的决策函数没有哪条活边界需要替身去顶,它的输入就是一行 workload 和一个 observation,两者都是数据。十二个里有七个声明的是非成功终态——被拒绝的提交、一次取消,或一个丢失的作业——这类场景在运行报告成功时判负。 |
场景 JSON 只是喂给已声明的 Harness fake 的输入,仅此而已;它不构成重放生产副作用的许可。跑一个 tier 用 uv run python -m harness.cli run --tier pr --offline。