feat: 诊断(任务书 18 第一块):诊断数学、四种提交、一次运行跑多个实验、账本与材料、flow 诊断各步
消融默认关,关掉时解释阶段一并跳过;选诊断实验用信息价值减成本。 eval/diagnosis/research.json 为第三块配置。vocab 字段说明的出口文字随提示词一起改,见下一次提交的 prompts/ 与同文件改动(本次含在内)。 Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -16,12 +16,13 @@ import {
|
||||
wrapUp,
|
||||
} from "./ledger-helpers.ts";
|
||||
|
||||
// 写入时由 ledger 拒绝的四种情况(docs/结构.md 第四部分"写入时由 ledger 拒绝的几种情况"),每种一条拒收、一条对应的正常情况。
|
||||
// 写入时由 ledger 拒绝的五种情况(docs/结构.md 第四部分"写入时由 ledger 拒绝的几种情况"),每种一条拒收、一条对应的正常情况。
|
||||
// 预期值来自文字:
|
||||
// 1. 只收开着的阶段(有开阶段记录、没有关阶段记录)的提交,别的拒收;
|
||||
// 2. 要替换的那一份不是本人在这个阶段、对同一个对象的最新一版 → 拒收;实现、修复、核验、消融实现、消融核验不能替换(方法.md 第五部分);
|
||||
// 3. 运行结果写在"确认启动"之前 → 拒收;"没启动"的结果不需要启动记录(方法.md 第七部分);
|
||||
// 4. 这一轮消融已经有格确认启动了,才来关这一轮的解释阶段 → 拒收(方法.md 4.3 ⑭)。
|
||||
// 4. 这一轮消融已经有格确认启动了,才来关这一轮的解释阶段 → 拒收(方法.md 4.3 ⑭);
|
||||
// 5. 这一轮的诊断运行已经确认启动了,才来关这一轮的诊断预测阶段 → 拒收(方法.md 4.3 诊 2);诊断实现、修复、核验和实现、核验一样不能替换。
|
||||
|
||||
function submitWrapUp(ledger: Ledger, stageId: string, author: string, version: number, body = "收尾") {
|
||||
return ledger.append("submission", { stageId, author, target: null, item: null, version, jev: null, kind: "wrapUp", content: wrapUp(body) });
|
||||
@@ -156,3 +157,53 @@ test("拒收 4 的正常情况:只登记没启动、别的轮的消融启动
|
||||
closeStage(ledger, "wrap");
|
||||
assert.equal(ledger.stageClosed("wrap"), true);
|
||||
});
|
||||
|
||||
test("拒收 5:这一轮的诊断运行已经确认启动,就不能关这一轮的诊断预测阶段", (t) => {
|
||||
const { ledger } = freshLedger(t);
|
||||
openStage(ledger, "dpred", "diagnosisPrediction", 2);
|
||||
planRun(ledger, "diagrun", "diagnosis", 2);
|
||||
ledger.append("runStarted", { run: "diagrun" });
|
||||
assert.throws(() => closeStage(ledger, "dpred"), /诊断预测冻结必须早于诊断运行启动/);
|
||||
assert.equal(ledger.stageClosed("dpred"), false);
|
||||
});
|
||||
|
||||
test("拒收 5 的正常情况:只登记没启动、别的轮的诊断启动、本轮消融或正向启动,都不挡关诊断预测阶段;消融启动也不被诊断运行连累", (t) => {
|
||||
const { ledger } = freshLedger(t);
|
||||
openStage(ledger, "dpred", "diagnosisPrediction", 2);
|
||||
planRun(ledger, "diag-planned", "diagnosis", 2); // 只登记,还没确认启动
|
||||
planRun(ledger, "diag-round1", "diagnosis", 1);
|
||||
ledger.append("runStarted", { run: "diag-round1" });
|
||||
planRun(ledger, "fwd-round2", "forward", 2);
|
||||
ledger.append("runStarted", { run: "fwd-round2" });
|
||||
closeStage(ledger, "dpred");
|
||||
assert.equal(ledger.stageClosed("dpred"), true);
|
||||
// 诊断运行启动后,解释阶段照旧关得掉:两种用途各管各的。
|
||||
openStage(ledger, "expl", "explanation", 2);
|
||||
planRun(ledger, "diag-round2", "diagnosis", 2);
|
||||
ledger.append("runStarted", { run: "diag-round2" });
|
||||
closeStage(ledger, "expl");
|
||||
assert.equal(ledger.stageClosed("expl"), true);
|
||||
});
|
||||
|
||||
test("拒收 2:诊断实现、诊断修复、诊断核验只收第一版,不能替换;诊断预测可以替换", (t) => {
|
||||
const { ledger } = freshLedger(t);
|
||||
openStage(ledger, "dimpl", "diagnosisImplementation", 1, ["e1"]);
|
||||
openStage(ledger, "dver", "diagnosisVerification", 1, ["v1"]);
|
||||
openStage(ledger, "dpred", "diagnosisPrediction", 1);
|
||||
const base = { author: "e1", target: "r1-diagnosis", item: null };
|
||||
const code = { locations: [{ experiment: "d1", locations: ["solve.py:3-9"] }], concerns: "无", body: "无" };
|
||||
const cases = [
|
||||
{ ...base, stageId: "dimpl", kind: "diagnosisImplementation" as const, content: code },
|
||||
{ ...base, stageId: "dimpl", author: "e2", kind: "diagnosisRepair" as const, content: code },
|
||||
{ ...base, author: "v1", stageId: "dver", kind: "diagnosisVerification" as const, content: { experiments: [], body: "无" } },
|
||||
];
|
||||
for (const c of cases) {
|
||||
ledger.append("submission", { ...c, version: 1, jev: null });
|
||||
assert.throws(() => ledger.append("submission", { ...c, version: 2, jev: null }), /不能替换/, c.kind);
|
||||
}
|
||||
const slot = { stageId: "dpred", author: "r1", target: null, item: null, kind: "diagnosisPrediction" as const };
|
||||
const content = { predictions: [{ explanation: "r1-r1-dx1", experiment: "d1", range: range(1, 2, 3) }], body: "理由" };
|
||||
ledger.append("submission", { ...slot, version: 1, jev: null, content });
|
||||
ledger.append("submission", { ...slot, version: 2, jev: null, content });
|
||||
assert.equal(ledger.latestSubmission(slot)?.content.version, 2);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user