feat: 任务书 10,submissions 模块与 materials 修改

- 新增 src/submissions:先程序检查(14 条跨字段规则、不许改的文件、代码存不了、指标编号占用、提案数上限),全过再问 Jev;退回原因列出该写的全部编号;回应/统一拼冻结协议主体只在这一处;核验、消融核验通过没有。
- materials:挑刺单写"现在交什么";退回按阶段、作者、种类、对象找(ledger 退回记录加 target,表结构版本 4);核验材料去掉 Jev 预扫;信念本写合法化;删"本该关着";消融核验不通过可重做,不跑的格从 cellNotRun 事件读原因。
- 用户 2026-10-03 定:冻结协议去掉 replies、replyBody,第二次预测的答复从已公开的回应或统一读;takenMetricIds 加两个保留键;解释一律交 cells;Jev 退回只列判"是"的几问、用英文问题名。
- jev 判重材料带 keySettings;读代码工具删 offset;三处旧说法改正。
- 文档:结构.md 第四、七、八部分,WORK_LOG。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-03 06:08:34 -04:00
parent a0ee4ef7a2
commit 09c44031a0
34 changed files with 1221 additions and 169 deletions
+19 -9
View File
@@ -100,8 +100,8 @@ export function repair(d: Draft): ChecklistOf<"repair"> {
}
/**
* ⑨ 核验:没归到任何因子或保障的改动排第一(程序按位置表现算);冻结协议、位置表、指标定义、改动全文、
* Jev 对这份实现的预扫结果。因子与保障同一行的地方只作提醒。
* ⑨ 核验:没归到任何因子或保障的改动排第一(程序按位置表现算);冻结协议、位置表、指标定义、改动全文。
* 因子与保障同一行的地方只作提醒。能走到核验的实现已经过了 Jev,Jev 的判断不给核验员看(Jev 是判别条件,不是提示)。
*/
export function verification(d: Draft): ChecklistOf<"verification"> {
const candidate = d.req.object!;
@@ -139,10 +139,6 @@ export function verification(d: Draft): ChecklistOf<"verification"> {
"### 改动全文(候选相对起点代码,每段前后各 3 行上下文)",
"",
fenced(d.req.changes!.diff, "diff"),
"",
"### 预扫结果(收下这份实现时 Jev 逐段判过;概率和阈值原样列出)",
"",
...(impl.jev === null ? ["(没有)"] : impl.jev.map((j) => `- ${j.question}:概率 ${j.probability},阈值 ${j.threshold}`)),
]);
metricSection(d, p);
return { kind: "verification", unassigned: found.unassigned.map((u) => u.location), ...items };
@@ -170,17 +166,31 @@ function ablation(d: Draft, role: string, codeNote: string[]): { cell: string; k
return { cell, key, factors: items.factors, lines };
}
/** ⑯ 消融实现:从完整代码出发只关指定的因子。 */
/**
* ⑯ 消融实现:从完整代码出发只关指定的因子。核验不通过重做时(这一格已有公开的消融核验)另放退回意见:
* 最近一次核验里关错了的因子和核验员写的依据,写法同修复的退回意见。
*/
export function ablationImplementation(d: Draft): ChecklistOf<"ablationImplementation"> {
const a = ablation(d, "实验员", ["你的工作目录是完整代码的副本,改动都落在工作目录里。"]);
d.section("本任务要处理的东西", a.lines);
const verified = d.board.published("ablationVerification").filter((s) => s.target === a.cell).at(-1);
const opinion: string[] = [];
if (verified !== undefined) {
const off = new Set([a.key, ...lastAblation(d, a.cell).alsoOff]);
const wrong = verified.content.factors.filter((x) => x.off !== off.has(x.factor));
const text = (x: (typeof wrong)[number]) => `- 因子 ${x.factor} 应当${off.has(x.factor) ? "关着" : "照留"},核验员看到的是${x.off ? "关着" : "照留"}:${x.where}`;
opinion.push("### 退回意见", "", "上一次交的这一格没通过消融核验,下面是关错了的因子:", ...wrong.map(text), "");
}
d.section("本任务要处理的东西", [...opinion, ...a.lines]);
return { kind: "ablationImplementation", cell: a.cell, off: a.key, factors: a.factors };
}
/** 这一格最近一次公开的消融实现提交。 */
const lastAblation = (d: Draft, cell: string) => d.board.published("ablationImplementation").filter((s) => s.target === cell).at(-1)!.content;
/** ⑯ 消融核验:只查是不是只关了指定的因子(加实验员报的一起关的因子)。不算没有归属的改动。 */
export function ablationVerification(d: Draft): ChecklistOf<"ablationVerification"> {
const a = ablation(d, "核验员", []);
const also = d.board.published("ablationImplementation").filter((s) => s.target === a.cell).at(-1)!.content.alsoOff;
const also = lastAblation(d, a.cell).alsoOff;
d.section("这一格实际要关的因子", [
[a.key, ...also].join("、") + (also.length === 0 ? "(只关指定的因子)" : "(指定的因子加实验员报的一起关的因子)"),
]);