任务:判据变更声明(W10):改判据只走声明,由作者以外的账号复核接受,接受后开新修订
依据:
- 决定 35 第 13、16 项(
docs/hub-r4-progress.md):W10(判据变更声明)要做。 - 第 25 项(所有者 10-23 晚改定):不加工具。Hub 卡住、要人做一步的时候,只在回答里写明下一步该谁做什么,用现有的工具和命令就能做。这一件的判断类请求照这条做,规则写在第 3 条,不另外依赖别的页。
- 模型:
node tools/show-element.ts W10 W07 I01 A03 A04 B07 W06 B03 V05读。- W10 F[0]–F[1]、R[0]–R[2];W07 F[5];
- I01 R[1]:判据要改,只能走判据变更声明;
- A03 R[0]:判据只能取期望来源的片段;
- A04 F[0]、R[3]、R[4]:人且非作者由 Hub 按账号判定;判据变更声明只接受 Hub 能核对身份的独立判断;
- B07 R[2]、R[9]:回答改变期望时,按新修订在同一血缘开新运行,不改写原运行;B07 F[5]:请求的回答;
- W06 R[0];B03 R[4];V05 R[7]。
- 合约 README 决定 8:判据变更声明不在提交的形状里。对照模型的复核第 2 节第 2 条:核心没有声明的通道,也没有第二人接受。
-
现在运行中一个判据都改不了:只能发布新的包版本,或者作者在本地改了文档再重跑。第一个用得上的是编译包:用例的期望和锁定构建的手册对不上时,
expected_grounded只认用例里期望的原文(case-compile 1.2.0“期望文字必须出自它的引文”),模型没有合法的办法改。 - 集成者先做(模型文字归集成者):W10 的变更记录写决定 35。B07 R[9] 不改。合约 README 决定 8 的那句由这一件改。
- 分支和工作树:
w10-criterion-change,目录circle-hub-w10-criterion-change,从 hub-redesign 开出。- 等下面这些都合并以后,由集成者开出并通知:
- hub-unknown-exits:它加请求记录的写入和列出、运行的期限,这一件的请求用它;
- w04-rulings-ledger:同改
contracts/src/submission.ts、hub/runs/engine/submit.ts、evaluate.ts; - 同一批写的 share-production-results(加
canViewRun)、kb-unversioned、test-bed-ownership:同改start.ts、contracts/src/run.ts、pack.ts、validation.ts。
v07-repetition同改contracts/src/pack.ts、run.ts、validation.ts,排在这一件后面。- 第二步改编译包,等 hub-pack-findings 合并。
- 等下面这些都合并以后,由集成者开出并通知:
- 可以改的路径(行号照现在的写,合并以后以函数为准):
contracts/src/submission.ts(声明)、contracts/src/run.ts(运行记录冻结已接受的声明)、contracts/src/pack.ts(RunContext 带出已接受的声明;要求项模板的按账号独立)、contracts/src/validation.ts(分区清单的条目列出被取代的判据)、contracts/README.md,照生成器重新生成contracts/generated/**;hub/runs/engine/里:submit.ts;exact.ts:声明的解析和逐字核对;evaluate.ts:把已接受的声明交给检查,列出被取代的判据;independence.ts、lineage.ts:按账号的独立;start.ts:开新修订时冻结;只读的复核前驱(第 3 条);- hub-unknown-exits 加的请求模块:发判断请求,写回答;
README.md;
hub/server/text.ts、console/pages.ts(运行页那一段);packs/workflow/criterion-review/**(新,通用的复核包);- 第二步:
packs/workflow/case-compile/**; - 对应的测试。
- 规则:同前(不推送、不建 PR、不发布、不部署;不碰 7420、钥匙串、环境配置文件和任何真实系统;测试只用合成数据,版本线 10.6 以后,地址只用 192.0.2.0/24 和 2001:db8::/32;
git commit -s)。所有者的规矩:- 未知只是过渡状态,写明缺的事实和下一步动作:没回答的声明写明等哪条请求、谁能答、何时到期;
- 枚举只来自生成的词表;
- Hub 只核验,不生成内容,不调用模型:不替检查判断新判据,不改任何源文件的字节;
- 核心里没有产品的字。
- 验证:
npx tsc --noEmit;node tools/gen-contracts.ts --check;node --test --test-concurrency=1对contracts/**、hub/runs/**、hub/server/**、packs/workflow/criterion-review/**;第二步加packs/workflow/case-compile/**。每条先写改前失败、改后通过的测试。
要做的
- 声明的形状(W10 F[0]–F[1]、W07 F[5]):提交加可选的
criterion_changes,每项:item:哪个条目;criterion:现在的判据在哪,引用本运行绑定的源文件片段;assertion:它断言什么,一句话;old:那里的原文,逐字;new:新的判据;grounds:支持新判据的引文,至少一条,每条是引用加原文。
测试:合约的正反例。
- 边界(T03 R[3]、R[4]):
criterion解析不出、old不逐字、引文不逐字:整份不受理,照现有的码(REFERENCE_UNRESOLVED、QUOTE_MISMATCH),指到那一项。这是 T03 R[3] 的三种整份拒收之一。- 引文解析得到、也逐字,但不是期望来源的片段:只拒这一条声明,不发请求,在 errors 里列出,修正说明写“判据只能取期望来源的片段(A03 R[0])”。提交的其余部分照常受理(T03 R[4]:角色不对是反驳,不是整份拒收)。
- 同一个条目的同一处判据只许一条声明。
- 测试:每种拒收一条;角色不对的那条只拒它自己;正常的受理。
- 等作者以外的账号复核(R[0]、A04 F[0]、R[3]、R[4];决定 35 第 25 项):
- 作者账号:本运行和它血缘里各运行的运行者。
- 请求:受理的提交里,每条声明写一条判断类请求记录(hub-unknown-exits 加的请求记录):
- 绑定运行、条目和声明在提交里的位置;
- 期限:声明所在运行的提交期限(hub-unknown-exits 第 5 条)。过期以后请求照样能答;开始运行的答复写“请求 <号> 已过期,仍等作者以外的账号复核;新修订不带这条声明”。号>
- 下一步写在请求里:“作者以外的账号开一次复核运行:start_run criterion-review,输入是声明所在的那份提交(
rec:),前驱是本运行”。 - 什么算了结:一次复核运行,运行者不是作者账号,它的复核要求项满足。只有结果受理、要求项没满足的,不算。
- 谁能答:不是作者的管理员,以及管理员把这次运行分享给的用户(share-production-results 的
canViewRun)。 - 只读的复核前驱:
- 现在的前驱只认运行者本人和管理员(
canSeeRun),经分享的用户开不了复核运行。 - 这一件加一种前驱用法:工作流声明
predecessor_access: "view",开始运行的人对前驱canViewRun成立就行。 - 只许每个要求项都声明了
independent_of: predecessor的包这样声明,发布时核对。 - 这种前驱只给读:这次运行可以解析前驱的记录。它不沿用前驱的租约,不接着前驱的修复轮数,不共用客户端键。每一条都写测试。
- 别的包照旧,share-production-results 的规则不变。
- 现在的前驱只认运行者本人和管理员(
- 复核包
criterion-review,通用,包里不写产品的字:- 条目是那份提交里的每条声明,投影函数取
criterion_changes; - 一个要求项:独立判断,
independent_of: predecessor,按账号判定(下一条); - 槽位写接受与否(包自己声明的封闭集)、理由和引文;
- 引用照交接的规则(B03 R[3])在复核运行自己的边界上重核;检查核引文确实出自声明所引的期望来源。
- SKILL.md 写明:接受与否由账号的主人确认,模型只起草。
- 条目是那份提交里的每条声明,投影函数取
- 按账号的独立(A04 F[0]、R[3]):
- 要求项模板加一个标记:独立按账号判定。
- 这样的要求项,复核运行的运行者不是任何作者账号时,独立性记
human_non_author;是作者账号时记not_independent。会话和模型族照旧记下,但不用来判。 - 实现在
independence.ts,作者账号由lineage.ts给,evaluate.ts照标记选判法。 - 客户端声明的模型独立,对这种要求项不算数(A04 R[4])。
- 回执文字写出声明和请求号:“等作者以外的账号复核;接受以后以本运行为前驱开新运行”。
- 测试:
- 请求的字段、期限和下一步;
- 作者自己的复核运行不算;
- 另一个账号用同一个模型族复核,按账号满足;
- 非作者接受、不接受各一;
- 结果受理但要求项没满足的复核,不了结请求;
- 经分享的用户开复核运行成功,它没拿到前驱的租约;
- 没声明
predecessor_access的包,经分享的用户拿别人的运行当前驱被拒; - 复核运行的引文不逐字被拒;
- 包的发布校验和样例。
- 接受之前(R[1]):这次运行的检查只看原判据。守着判据的要求项(编译包的
expected_grounded这一类)照检查的结论记不通过,修复和轮数照错误表,不另开例外。测试:声明待定时那一项不通过。 - 开新修订(B07 R[9]、W06 R[0]):
- 以声明所在的运行为前驱 start_run 时,Hub 找出以那个运行为前驱的复核运行:运行者不是作者账号,复核要求项满足。把其中接受了的声明冻结进新运行,带声明的位置和复核结果的
rec:引用。 - 还没有复核的不带,开始运行的答复写“请求 <号> 还没有回答”和期限;没接受的不带,写出复核人和理由。号>
- 冻结的声明经 RunContext 交给检查,检查自己决定怎么用;核心不改源文件,也不替检查判断。
- 测试:已接受、未回答、已拒绝三种;冻结以后才接受的,不进这一次运行。
- 以声明所在的运行为前驱 start_run 时,Hub 找出以那个运行为前驱的复核运行:运行者不是作者账号,复核要求项满足。把其中接受了的声明冻结进新运行,带声明的位置和复核结果的
- 被取代的判据(R[2]):新运行的分区清单里,每个条目列出被取代的判据:位置、旧值、新值、声明和复核结果的引用、复核人。前驱运行的结论照样保留、照样可读(只追加,V05 R[7])。测试:字段齐全;前驱结果的字节不变。
- 作者看得到什么:复核运行是复核人的运行,作者照 R02 读不了它。
- 请求了结时,把接受与否、理由和复核人写进请求记录的回答(B07 F[5]),给发请求的作者看。
- 复核结果的
rec:只给管理员和复核人解析。 - 测试:作者用 get_nodes 读复核结果的
rec:,答“对你不可用”;同时开始运行的答复里写出了结论、理由和复核人。
- 显示:回执、开始运行的答复和控制台的运行页写出声明、请求的状态和被取代的判据。测试:
text.test.ts、console.test.ts各几条。
第二步(hub-pack-findings 合并以后,集成者通知)
- 编译包的
expected_grounded认冻结的已接受声明:期望文字可以取新判据的片段,新判据的引文要逐字出自期望来源;升版本,重签。 - 合成用例:用例的期望和手册对不上;声明,作者以外的账号复核接受,新修订通过;没接受时照旧不通过。
完成后在终端里回报:提交号、测试数量、没做完或拿不准的地方。