fix: 进行中的轮次不因余额为 0 被跳过(任务书 17 真实运行发现)
full17-b 第 5 轮:两个正向运行把余额用到 0 后,roundsNext 在下一轮'下一步'时对 【正在进行中的这一轮】也判余额 0,采纳决定、收尾阶段、轮末解封全部没写就走到 导出停下。方法.md 第七部分的'余额为 0'只是不开下一轮:最后一次正向用掉全部 余额时,这一轮的采纳(采纳多因子改法则各格记'没测:剩余次数不够')、收尾与 解封照常做。修复:余额检查只对还没开始的轮次(账本里没有这一轮的阶段、跳过 事件或决定)生效。附回归测试(旧代码下断言 adopt、实际得到 halt)。 恢复:受影响的 full17-b 用 eval:study --resume 从出错处续跑,已入账记录照原样用。 npm run check 通过,npm test 477 条通过。
This commit is contained in:
@@ -652,6 +652,22 @@ test("结算和押的因子写完:开收尾;收尾关闭后解封本轮选
|
||||
assert.deepEqual(nextStep(book.records), { do: "openStage", stageId: "r2-proposal", stage: "proposal", round: 2, roster: R });
|
||||
});
|
||||
|
||||
test("最后一次正向用掉全部余额:进行中的这一轮照常走完采纳与收尾,不开下一轮", () => {
|
||||
// 复现 full17-b 第 5 轮的缺陷:两个正向运行把余额用到 0 后,采纳决定、收尾和解封被整轮跳过,
|
||||
// 直接走到导出停下。余额为 0 只是不开【下一轮】(方法.md 第七部分“什么时候开下一轮”)。
|
||||
const book = firstVerification(batchTwo(1), true, true);
|
||||
for (const c of C) recordForward(book, c, 1, "valid");
|
||||
// 已扣 3 次(基线 1、正向 2):把冻结配置的运行次数改成 3,余额为 0。
|
||||
const record = book.records.find((r) => r.kind === "config")!;
|
||||
const study = record.content as unknown as StudyRecord;
|
||||
study.config = { ...fullConfig(), runs: 3 } as unknown as Json;
|
||||
// 这一轮已经开始(r1- 的阶段都在账上):下一步是写采纳决定,不是停下。
|
||||
assert.deepEqual(nextStep(book.records), { do: "adopt", round: 1 });
|
||||
book.add("decision", { decision: "adopt", round: 1, rule: "adopt", ruleVersion: 1, params: null, seed: null, input: null, output: { adopted: null } });
|
||||
// 没有采纳:不做消融,照样开收尾阶段。
|
||||
assert.deepEqual(nextStep(book.records), { do: "openStage", stageId: "r1-wrapUp", stage: "wrapUp", round: 1, roster: R });
|
||||
});
|
||||
|
||||
test("余额为 0:不开下一轮,走到导出停下,原因写明", () => {
|
||||
const book = afterWrapUp();
|
||||
book.add("unseal", { candidate: "r1-c1", seals: [1] });
|
||||
|
||||
Reference in New Issue
Block a user