vocab: 回退格式重排,保持 1150 行上限(现为 1131;重排把多条说明拆行后超到 1154,内容不变)

This commit is contained in:
2026-10-05 07:59:19 -04:00
parent 9f5ca4b730
commit c482a055d3
+32 -55
View File
@@ -31,7 +31,7 @@ export const Range = Type.Object(
...CLOSED, ...CLOSED,
description: description:
"三个数,按分数原值写,不管越大越好还是越小越好。必须严格递增 q1 < q5 < q9,认为几乎不变就写一个很窄的范围。" + "三个数,按分数原值写,不管越大越好还是越小越好。必须严格递增 q1 < q5 < q9,认为几乎不变就写一个很窄的范围。" +
'没有"不知道"这个选项:拿不准就把 q1 和 q9 拉开', "没有\"不知道\"这个选项:拿不准就把 q1 和 q9 拉开",
}, },
); );
export type Range = Static<typeof Range>; export type Range = Static<typeof Range>;
@@ -55,15 +55,14 @@ const ClauseKey = Type.String({
const CodeLocation = Type.String({ const CodeLocation = Type.String({
pattern: "^[^:\\s]+(:[1-9][0-9]*(-[1-9][0-9]*)?)?$", pattern: "^[^:\\s]+(:[1-9][0-9]*(-[1-9][0-9]*)?)?$",
description: description: "代码位置:\"文件\"、\"文件:行号\"或\"文件:起-止\",行号以本次提交代码为准。一个值只写一个连续范围,不带括号标签;多处位置拆开写",
'代码位置:"文件"、"文件:行号"或"文件:起-止",行号以本次提交代码为准。一个值只写一个连续范围,不带括号标签;多处位置拆开写',
}); });
const CONCERNS = Type.String({ const CONCERNS = Type.String({
...TEXT, ...TEXT,
description: description:
"照冻结原文实现、但你认为会出问题的地方,尤其是某条保障会挡掉或改变什么。" + "照冻结原文实现、但你认为会出问题的地方,尤其是某条保障会挡掉或改变什么。" +
'它会转给研究者,不阻止运行,也不改动协议。没有就写"无"', "它会转给研究者,不阻止运行,也不改动协议。没有就写\"无\"",
}); });
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
@@ -80,7 +79,7 @@ const Entry = Type.Object(
...TEXT, ...TEXT,
description: description:
"Markdown:从哪里开始看(先读哪段代码、先问哪个问题、先质疑哪个设定)、为什么值得有人去走。" + "Markdown:从哪里开始看(先读哪段代码、先问哪个问题、先质疑哪个设定)、为什么值得有人去走。" +
'只写起点,不写"应该改成什么、能到多少分"', "只写起点,不写\"应该改成什么、能到多少分\"",
}), }),
}, },
CLOSED, CLOSED,
@@ -89,8 +88,7 @@ const Entry = Type.Object(
const ENTRIES = Type.Array(Entry, { const ENTRIES = Type.Array(Entry, {
minItems: 2, minItems: 2,
maxItems: 3, maxItems: 3,
description: description: "2–3 个入口,彼此尽量不重叠;想不出第三个就交两个。编号由程序按顺序分配",
"2–3 个入口,彼此尽量不重叠;想不出第三个就交两个。编号由程序按顺序分配",
}); });
export const EntrySubmission = Type.Object( export const EntrySubmission = Type.Object(
@@ -110,8 +108,7 @@ export const DiscussionSubmission = Type.Object(
}), }),
entries: Type.Optional({ entries: Type.Optional({
...ENTRIES, ...ENTRIES,
description: description: "可选:整份替换你自己的入口清单(2–3 个)。不换就不交这个字段",
"可选:整份替换你自己的入口清单(2–3 个)。不换就不交这个字段",
}), }),
}, },
CLOSED, CLOSED,
@@ -145,8 +142,7 @@ const Factor = Type.Object(
}), }),
keySettings: Type.String({ keySettings: Type.String({
...TEXT, ...TEXT,
description: description: "关键设定:决定这个因子效果的设定值,例如\"统计窗口 1000 次查找、每次最多删四分之一\";没有写\"无\"",
'关键设定:决定这个因子效果的设定值,例如"统计窗口 1000 次查找、每次最多删四分之一";没有写"无"',
}), }),
offBehavior: Type.Optional( offBehavior: Type.Optional(
Type.String({ Type.String({
@@ -184,7 +180,7 @@ const METRICS = Type.Object(
}), }),
reused: Type.Array(Id, { reused: Type.Array(Id, {
description: description:
'引用已登记的假设专用指标,照材料里已登记指标清单的全名("候选编号.短名")写;没有就交空数组。' + "引用已登记的假设专用指标,照材料里已登记指标清单的全名(\"候选编号.短名\")写;没有就交空数组。" +
"要测的量清单里已经有,就引用它,不换个名字重新登记:两个名字测同一个东西,会被当成两份独立的证据", "要测的量清单里已经有,就引用它,不换个名字重新登记:两个名字测同一个东西,会被当成两份独立的证据",
}), }),
}, },
@@ -192,7 +188,7 @@ const METRICS = Type.Object(
...CLOSED, ...CLOSED,
description: description:
"指标登记:这个候选要采集哪些假设专用指标。最终指标和常规辅助指标程序每次都会采集,不用在这里写。" + "指标登记:这个候选要采集哪些假设专用指标。最终指标和常规辅助指标程序每次都会采集,不用在这里写。" +
'假设专用指标由候选代码在运行当中算出,候选代码拿不到基线的成绩,"比基线好多少"这类量测不到。' + "假设专用指标由候选代码在运行当中算出,候选代码拿不到基线的成绩,\"比基线好多少\"这类量测不到。" +
"协议在某种情形下会让某个指标写 null(例如某条分支没走到、某个因子被关掉),就别给它选 invalidateRun,否则那次正式运行白跑", "协议在某种情形下会让某个指标写 null(例如某条分支没走到、某个因子被关掉),就别给它选 invalidateRun,否则那次正式运行白跑",
}, },
); );
@@ -203,7 +199,7 @@ const PROPOSAL_BODY = Type.String({
"提案正文,Markdown,带小标题:每个因子为什么可能有效;" + "提案正文,Markdown,带小标题:每个因子为什么可能有效;" +
"每条保障做什么、属于拦 / 补 / 改哪一种、自检时怎么想的;" + "每条保障做什么、属于拦 / 补 / 改哪一种、自检时怎么想的;" +
"协议(不许改什么、随机性怎么处理、何时停、什么样的运行不算数);因子之间的关系。" + "协议(不许改什么、随机性怎么处理、何时停、什么样的运行不算数);因子之间的关系。" +
'某方面不适用写"不适用:原因"。协议里不要求实验员按正式规模运行程序来核对什么,正式规模只由程序跑。' + "某方面不适用写\"不适用:原因\"。协议里不要求实验员按正式规模运行程序来核对什么,正式规模只由程序跑。" +
"不写自己估的分数或提升量;引用已测到的分数要写明出自哪次运行;" + "不写自己估的分数或提升量;引用已测到的分数要写明出自哪次运行;" +
"文献和别人报告的数值只当起点,说明与本任务的区别;从第 2 轮起说明哪些新的观测影响了这条提案", "文献和别人报告的数值只当起点,说明与本任务的区别;从第 2 轮起说明哪些新的观测影响了这条提案",
}); });
@@ -249,8 +245,7 @@ export const CritiqueSubmission = Type.Object(
{ {
target: Type.String({ target: Type.String({
pattern: "^(whole|p[1-9][0-9]*)$", pattern: "^(whole|p[1-9][0-9]*)$",
description: description: "针对谁:整条提案写 whole,针对某个因子写它的编号(p1、p2……)",
"针对谁:整条提案写 whole,针对某个因子写它的编号(p1、p2……)",
}), }),
body: Type.String({ body: Type.String({
...TEXT, ...TEXT,
@@ -285,8 +280,7 @@ const REPLIES = Type.Array(
CLOSED, CLOSED,
), ),
{ {
description: description: "材料\"本任务要答复的挑刺\"里列出的每一份挑刺各答复一条;没有挑刺交空数组",
'材料"本任务要答复的挑刺"里列出的每一份挑刺各答复一条;没有挑刺交空数组',
}, },
); );
@@ -294,7 +288,7 @@ const CLAUSES = Type.Array(
Type.String({ Type.String({
...TEXT, ...TEXT,
description: description:
'一条实现条款:实验员要做的一件事,写到不用猜就能实现。开头写位置:"文件"、"文件:行号"或"文件:函数名",' + "一条实现条款:实验员要做的一件事,写到不用猜就能实现。开头写位置:\"文件\"、\"文件:行号\"或\"文件:函数名\"," +
"只写一个行号或一个函数名、不写范围,文件和函数要在基线代码里真实存在", "只写一个行号或一个函数名、不写范围,文件和函数要在基线代码里真实存在",
}), }),
{ {
@@ -325,8 +319,7 @@ export const ResponseSubmission = Type.Object(
clauses: CLAUSES, clauses: CLAUSES,
body: Type.String({ body: Type.String({
...TEXT, ...TEXT,
description: description: "答复正文,Markdown:逐条答复之外要补充的话。没有挑刺、也没有要补充的,写\"无\"",
'答复正文,Markdown:逐条答复之外要补充的话。没有挑刺、也没有要补充的,写"无"',
}), }),
}, },
CLOSED, CLOSED,
@@ -349,8 +342,7 @@ export const UnificationSubmission = Type.Object(
}), }),
coverage: Type.String({ coverage: Type.String({
...TEXT, ...TEXT,
description: description: "这份原提案在统一后的协议里哪里体现;没采纳的部分写明为什么",
"这份原提案在统一后的协议里哪里体现;没采纳的部分写明为什么",
}), }),
}, },
CLOSED, CLOSED,
@@ -415,29 +407,25 @@ export const ImplementationSubmission = Type.Object(
CLOSED, CLOSED,
), ),
{ {
description: description: "不属于任何因子或保障的改动,按本次代码相对本批基线的完整差异列出,并说明服务哪项要求;没有就交空数组",
"不属于任何因子或保障的改动,按本次代码相对本批基线的完整差异列出,并说明服务哪项要求;没有就交空数组",
}, },
), ),
concerns: CONCERNS, concerns: CONCERNS,
body: Type.String({ body: Type.String({
...TEXT, ...TEXT,
description: description: "实现说明,Markdown:位置表之外需要说明的事。修复时逐条回应退回意见:改在哪里,或以协议原文和代码位置说明为什么不改。协议要求自行求解核数而未执行的,说明数值留给正式实验核对,不声称已经验证。没有要补充的就写\"无\"",
'实现说明,Markdown:位置表之外需要说明的事。修复时逐条回应退回意见:改在哪里,或以协议原文和代码位置说明为什么不改。协议要求自行求解核数而未执行的,说明数值留给正式实验核对,不声称已经验证。没有要补充的就写"无"',
}), }),
}, },
CLOSED, CLOSED,
); );
const FOUND = Type.Boolean({ const FOUND = Type.Boolean({
description: description: "找到代码且实际行为符合该项要求写 true;找不到、找到但不一致或材料不足以核清,写 false(记为没落实)",
"找到代码且实际行为符合该项要求写 true;找不到、找到但不一致或材料不足以核清,写 false(记为没落实)",
}); });
const WHERE = Type.String({ const WHERE = Type.String({
...TEXT, ...TEXT,
description: description: "代码位置和足以复核的依据,对应冻结要求。没落实时区分具体偏差与核不了:写明看过哪里、哪里不符或还缺什么,不把猜测写成事实",
"代码位置和足以复核的依据,对应冻结要求。没落实时区分具体偏差与核不了:写明看过哪里、哪里不符或还缺什么,不把猜测写成事实",
}); });
export const VerificationSubmission = Type.Object( export const VerificationSubmission = Type.Object(
@@ -486,37 +474,32 @@ export const VerificationSubmission = Type.Object(
{ {
location: Type.String({ location: Type.String({
...CodeLocation, ...CodeLocation,
description: description: "材料列出的改动块位置,逐字照抄位置本身,不带展示用的括号标签,不合并不同改动块",
"材料列出的改动块位置,逐字照抄位置本身,不带展示用的括号标签,不合并不同改动块",
}), }),
outOfScope: Type.Boolean({ outOfScope: Type.Boolean({
description: description: "超出冻结协议、改了最终指标的测量或校验、未按登记定义采集或用占位数掩盖缺测,写 true;落实冻结要求所需的辅助代码写 false",
"超出冻结协议、改了最终指标的测量或校验、未按登记定义采集或用占位数掩盖缺测,写 true;落实冻结要求所需的辅助代码写 false",
}), }),
reason: Type.String({ reason: Type.String({
...TEXT, ...TEXT,
description: description: "指出该块代码及对应的冻结要求,说明它为什么必要或哪里超出要求",
"指出该块代码及对应的冻结要求,说明它为什么必要或哪里超出要求",
}), }),
}, },
CLOSED, CLOSED,
), ),
{ {
description: description: "材料里列出的没有归属的改动,逐条判断是否越界;材料说没有就交空数组",
"材料里列出的没有归属的改动,逐条判断是否越界;材料说没有就交空数组",
}, },
), ),
body: Type.String({ body: Type.String({
...TEXT, ...TEXT,
description: description:
"说明,Markdown:逐项结果之外需要说明的事。材料里列出的同一行既属于因子又属于保障的地方,在这里各写一句提醒(只是提醒,不判越界)。" + "说明,Markdown:逐项结果之外需要说明的事。材料里列出的同一行既属于因子又属于保障的地方,在这里各写一句提醒(只是提醒,不判越界)。" +
'没有要补充的就写"无"', "没有要补充的就写\"无\"",
}), }),
}, },
{ {
...CLOSED, ...CLOSED,
description: description: "只交逐项结果,通过与否由程序推出:任何一项没落实或判为越界,就退回实验员修复",
"只交逐项结果,通过与否由程序推出:任何一项没落实或判为越界,就退回实验员修复",
}, },
); );
@@ -530,7 +513,7 @@ const Explanation = Type.Object(
...TEXT, ...TEXT,
description: description:
"Markdown:机制是什么、哪个因子在出力、什么情况下不成立、因子之间在效果上怎么互相依赖" + "Markdown:机制是什么、哪个因子在出力、什么情况下不成立、因子之间在效果上怎么互相依赖" +
'(例如"没有 p2,p3 就没用",当作预测交给消融检验)、结论覆盖哪些设定、没覆盖哪些。' + "(例如\"没有 p2,p3 就没用\",当作预测交给消融检验)、结论覆盖哪些设定、没覆盖哪些。" +
"没有具体的机制判断就直说", "没有具体的机制判断就直说",
}), }),
cells: Type.Optional( cells: Type.Optional(
@@ -558,8 +541,7 @@ export const ExplanationSubmission = Type.Object(
{ {
explanations: Type.Array(Explanation, { explanations: Type.Array(Explanation, {
minItems: 1, minItems: 1,
description: description: "一般交一条就够,真有第二个机制判断时再交第二条——比如你的主判断若错了最可能是哪种错法,答得出来就写成第二条,写明哪一格能把两条分开;条数上限见材料",
"一般交一条就够,真有第二个机制判断时再交第二条——比如你的主判断若错了最可能是哪种错法,答得出来就写成第二条,写明哪一格能把两条分开;条数上限见材料",
}), }),
}, },
CLOSED, CLOSED,
@@ -580,8 +562,7 @@ export const AblationImplementationSubmission = Type.Object(
}, },
{ {
...CLOSED, ...CLOSED,
description: description: "从完整代码出发,把指定的因子换回关掉时的做法,其余因子和全部保障照留",
"从完整代码出发,把指定的因子换回关掉时的做法,其余因子和全部保障照留",
}, },
); );
@@ -592,13 +573,11 @@ export const AblationVerificationSubmission = Type.Object(
{ {
factor: FactorKey, factor: FactorKey,
off: Type.Boolean({ off: Type.Boolean({
description: description: "这份代码里这个因子是关着的写 true,照完整版本保留写 false",
"这份代码里这个因子是关着的写 true,照完整版本保留写 false",
}), }),
where: Type.String({ where: Type.String({
...TEXT, ...TEXT,
description: description: "依据:在哪几行看到的。不属于任何单个因子的总体核对说明(怎么核的、行号怎么对上的),写进被关掉因子那一项的依据里",
"依据:在哪几行看到的。不属于任何单个因子的总体核对说明(怎么核的、行号怎么对上的),写进被关掉因子那一项的依据里",
}), }),
}, },
CLOSED, CLOSED,
@@ -620,7 +599,7 @@ export const WrapUpSubmission = Type.Object(
...TEXT, ...TEXT,
description: description:
"收尾,Markdown:什么被支持了、什么被挑战了、下一步想往哪走:沿某个因子继续,或换一条更可能拿最高分的路线。" + "收尾,Markdown:什么被支持了、什么被挑战了、下一步想往哪走:沿某个因子继续,或换一条更可能拿最高分的路线。" +
'推广结论时写清它覆盖哪些设定。某方面没有写"没有:为什么"。' + "推广结论时写清它覆盖哪些设定。某方面没有写\"没有:为什么\"。" +
"原样放进下一轮的提案材料,所有人都读得到", "原样放进下一轮的提案材料,所有人都读得到",
}), }),
}, },
@@ -648,6 +627,4 @@ export const SUBMISSION_SCHEMAS = {
} as const satisfies Record<SubmissionKind, TSchema>; } as const satisfies Record<SubmissionKind, TSchema>;
/** 某种提交的内容类型,例如 Submission<"proposal">。 */ /** 某种提交的内容类型,例如 Submission<"proposal">。 */
export type Submission<K extends SubmissionKind> = Static< export type Submission<K extends SubmissionKind> = Static<(typeof SUBMISSION_SCHEMAS)[K]>;
(typeof SUBMISSION_SCHEMAS)[K]
>;