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
+5 -1
View File
@@ -10,8 +10,12 @@ import type { SubmissionKind } from "./roster.ts";
type FactorRules = {
factorLimit: number;
continuable: string[];
/** 冻结协议里登记过的假设专用指标的全名("候选编号.短名")。 */
reusableMetrics: string[];
/** 最终指标、常规辅助指标和冻结协议里登记过的假设专用指标,新登记的不能和它们重名。 */
/**
* 新登记的短名不能用的编号:最终指标、常规辅助指标和答案路径的两个保留键。
* 已登记的假设专用指标不在这里:它们的全名都带".",短名不带,不会重名。
*/
takenMetricIds: string[];
};
+10 -3
View File
@@ -52,12 +52,19 @@ const METRIC_FIELDS = {
}),
};
/** 研究者在协议里登记的一条假设专用指标。编号由研究者起,候选代码按这个编号写出取值。 */
/**
* 研究者在提案、回应、统一里登记的一条假设专用指标,id 是研究者起的短名。
* 冻结时 materials 的 freezeProtocol 把它改成全名"候选编号.短名"(用户 2026-10-03 定):同一轮的研究者互相看不到提案,
* 会起同一个短名、定义却不同。短名不含"."、全名都含,两者不会撞。冻结协议、tasks 收的指标沿用这个类型,id 是全名。
* 短名最长 64 个字符,加上候选编号后的全名仍在 Id 的 128 个字符以内。
*/
export const HypothesisMetric = Type.Object(
{
id: Type.String({
...Id,
description: "指标短名,只用字母、数字和 ._-,候选代码按它写出取值",
pattern: "^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$",
description:
"指标短名:只用字母、数字和 _-,不能含\".\",最长 64 个字符。冻结时程序在前面加上候选编号,成为全名\"候选编号.短名\"" +
"(例如 r2-c1.restart-gain);冻结之后引用它、候选代码在结果文件里写它的取值,都用全名",
}),
...METRIC_FIELDS,
},
+2 -2
View File
@@ -176,10 +176,10 @@ const SAFEGUARDS = Type.Array(SafeguardName, {
const METRICS = Type.Object(
{
defined: Type.Array(HypothesisMetric, {
description: "新登记的假设专用指标;没有就交空数组",
description: "新登记的假设专用指标,编号只写短名;没有就交空数组",
}),
reused: Type.Array(Id, {
description: "引用别人登记过的假设专用指标,照材料里已登记指标清单的编号写;没有就交空数组",
description: "引用已登记的假设专用指标,照材料里已登记指标清单的全名(\"候选编号.短名\")写;没有就交空数组",
}),
},
{