feat: 任务书 11,指标名加候选前缀、消融重做接着改、判重说明补关键设定

- 假设专用指标短名不能含"."(最长 64),冻结时由 materials 的 freezeProtocol 改为全名"候选编号.短名";可引用清单用全名,已占用清单只剩任务指标和两个保留键。
- 消融格核验不通过重做时,工作目录是上一次交的这一格代码的副本,能读的版本加上它,完整代码照旧列出;消融实现提示词同步改。
- jev 判重材料说明补 keySettings 一句。
- 结构.md 第八部分 vocab、materials、jev,WORK_LOG 同步更新。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-03 06:40:40 -04:00
parent f623fb78a8
commit 13a7e60355
20 changed files with 156 additions and 57 deletions
+10
View File
@@ -344,6 +344,16 @@ test("判定表 5:缺了整次作废的假设专用指标测不到,不算数
assert.equal(value(voided.score), 0.203125);
});
test("假设专用指标用冻结后的全名\"候选编号.短名\"当键,读得到值(任务书 11 第一部分)", async (t) => {
const full: HypothesisMetric = { id: "r2-c1.restart-gain", meaning: "测试用", unit: "无", direction: "maximize", howMeasured: "测试用", missing: "invalidateRun" };
const runDir = runDirWith(t, loose());
writeFileSync(join(runDir, "metrics.json"), JSON.stringify({ "r2-c1.restart-gain": 0.125, "restart-gain": 9, "answer-path": "main", "safeguard-triggers": {} }));
const result = await judgeRun(t, "fullname", runDir, EXITED_OK, [full]);
assert.equal(result.verdict, "valid");
assert.deepEqual(Object.keys(result.metrics).filter((k) => k.includes("restart")), ["r2-c1.restart-gain"]);
assert.equal(value(result.metrics["r2-c1.restart-gain"]), 0.125);
});
test("答案路径、保障动手次数:读不到时记读不到及原因,不作废运行", async (t) => {
const missing = await judgeRun(t, "nometrics", runDirWith(t, loose()), EXITED_OK, []);
assert.equal(missing.verdict, "valid");