Closed
[V1102-I20] [判据面] 检查3 计数取数改「锚定行」+计数类锚消费面普查(HARD) #25
kemengAdd on  13 days agoClosed at  10 days ago
kemengCollaborators
13 days ago Create

平台键:V1102-I20 | 归属:主线 dev | 波次:v1.10.2 波 2
仓内唯一事实源:openspec/changes/v1102-check3-anchor-hardening/issue.md(本 issue 体即其全文;改动以仓内档为准)
转正:docs/V1_10_2_RULINGS_01.md(ar 2026-10-27)

[判据面] 检查3 计数取数改「锚定行」+ 计数类锚消费面普查(HARD)

提出: 主线 dev(承 ar 路标 openspec/specs/v1.10.2-goal-and-plan.md@b8a631c40 §里程碑 HARD ∧ docs/V1_10_1_RULINGS_10 §一 乙「器修锚定行:立项后版之 gate hardening backlog」)
红测: 须先出(判据器之红侧;由本件自检臂承 —— 见 HARD-A2); test 另出独立读数复核。
波次: v1.10.2 波 2 | 归属: 主线 dev

复述(一句话说清「改什么、为什么」)

现状 = 检查3 之 CHANGELOG 计数取数为 grep -m1 首命中(面 b8a631c40):

scripts/verify_release.sh@b8a631c40:902   changelog_cnt="$(grep -m1 -oE '[0-9]+ passed / [0-9]+ failed' CHANGELOG.md …)"
scripts/verify_release.sh@b8a631c40:935   changelog_failed="$(extract_component "$(grep -m1 -E … CHANGELOG.md …)" 2)"
scripts/verify_release.sh@b8a631c40:946   chg_ign="$(extract_component "$(grep -m1 -E … CHANGELOG.md …)" 3)"

⇒ 首个命中落在散文行(面 b8a631c40 之 CHANGELOG.md:20「本版 50 passed / 0 failed」,属【制品面口径】之叙述句), 而非机器锚行; 且现役二节(v1.10.1/v1.10.0)皆无 ★ 计数锚 行(档内 40 处锚行皆在 v1.9.19 及更旧之节)。散文句一旦改口径(如「较上版 48 passed」), 本检查即静默取错值。
目标 = 计数取数只认锚定行(现役版本节内之 ★ 计数锚 行), 锚行缺席即具名 FAIL(禁回退首命中); 并同批普查其余计数类锚消费面。

影响面(路径 + 面 + 归属)

项 值
路径 scripts/verify_release.sh(检查3 段)· scripts/tests/verify_release_gate_selftest.sh(新臂)· .xuanwu/gate-face.manifest + .xuanwu/gate-face.manifest.sha256(重签)· CHANGELOG.md(现役节补锚行, 视 §四-5 之裁)
归属 主线 dev(判据面之主)
模块归属 —(判据面)
判据面 是(必) ⇒ 独立批 + 重签 + 自检臂同批

AC(判据式 · 逐条: 谓词/命令形/期望 rc/负控)

AC 谓词 命令形 期望 rc 负控
HARD-A1 锚定行 检查3 之 passed/failed/ignored 三处取数皆取自「现役版本节内之锚定行」(行含 ★ 计数锚 标记), 非全文首命中 门器实跑 + 夹具三态(下) 0 甲: 散文行计数 ≠ 锚行计数 ⇒ 取到散文值即红; 乙: 删锚行 ⇒ 须 FAIL(回退首命中即红); 丙: 锚行仅在旧版本节 ⇒ 须 FAIL(现役世代约束)
HARD-A2 自检臂 新臂(续号 red2x_)三态对照咬合: 甲臂阴性(不误红)+乙/丙臂阳性(必红)∧ 新臂入册(调用行 + 汇总计数同批改) bash scripts/tests/verify_release_gate_selftest.sh(择臂先跑, 全量归 test) 0 任一臂未咬合 ⇒ 自检 FAIL; 臂已定义而未入调用行(「定义在、不开火」)⇒ 红
HARD-A3 消费面普查 枚举 scripts/verify_release.sh 内全部「计数/锚取数面」(grep -m1·head -1·sed -n 1p 等首取形), 出「面 × 判定(同病/否)× 处置」清单, 附枚举分母(全量 N 面 ∧ 命中 M 面) grep -n 逐面枚举 + 清单入档 0 只报检查3 而不给分母 ⇒ 必红(承「报全部须附分母」之律); 命中面未处置而记「同类」⇒ 必红
HARD-A4 重签 判据面改动后 .xuanwu/gate-face.manifest + .sha256 同批重签且校验 rc=0 sha256sum -c(或等形) 0 改器不重签 ⇒ 校验红; 先签后改(序错)⇒ 必红(承 v1.10.1 Cargo.lock.sha256 之序错前例)

★ 三态夹具之形(HARD-A1): 皆以临时仓构造(承自检器既有 make_repo 形), 不动真仓; 甲/乙/丙三臂逐一改一处(禁一臂多因)。

依赖与波次

项 值
前置 现役节锚行在位 —— 面 b8a631c40 之现役二节皆无锚行 ⇒ 本件落地时点须与「补锚行」同批, 或排于 D1 升版批之后(请裁 §四-5)
波次 波 2(与件 3 并行 —— 写域不交: 本件 scripts/** + .xuanwu/**, 件 3 release/v1.10.2/evidence/**)
后置 落地后 test 取整门, 与落地前基线对表(FAIL 行集 + 空窗键集逐条比)

并载(照实 · 限)

  • 只改取数口径, 不放宽判据: 现值域(CHANGELOG = 锚 ∧ 基线只升 ∧ failed 恒 0)一律不动; 本件只把「从哪一行取」由散文首命中收窄为锚定行(承 R10 §一 乙之字面「器修锚定行」, 非「降判据」)。
  • GAP 禁读绿(承 R01 裁3): 锚行缺席之处置为具名 FAIL, 非 skip_gap —— 与本版 §执行规则「GAP 只许缩不许增」一致。
  • 重锚耦合(须据实核): 若本件所动之区间落在 检查14 之登记面/锚区(LOCK_REGISTRY_MD5_ANCHOR 所盖区间)⇒ 同批重锚(承 AC-G2① 双绑硬条款: 登记与重锚缺一即自检红)。落笔前以 git diff 核所动行是否在锚区内, 据实判定, 禁凭「应该不触」自安。
  • 本件不触 openspec/specs/roadmap.md 之 TEST_COUNT_ANCHOR(其锚现役且由 R10 甲修落定); 两锚(CHANGELOG 锚行 ⇄ roadmap 锚)之比对关系不变。
  • 若普查命中他检查之同病面(HARD-A3 之输出)⇒ 处置逐面裁: 同批改或另立批, 由 ar 裁; 本件不擅扩面(承「令之射程 ≠ 语义全域」之律, 报毕并载射程外残留)。
likedislike
KkemengCollaborators
12 days ago Change title to "x", originally titled "[V1102-I20] [判据面] 检查3 计数取数改「锚定行」+计数类锚消费面普查(HARD)".
KkemengCollaborators
12 days ago Change title to "[V1102-I20] [判据面] 检查3 计数取数改「锚定行」+计数类锚消费面普查(HARD)", originally titled "x".
kemengCollaborators
12 days ago Comments:

【阻塞注记 · v1.10.3 M7 · 承 ar R17(2026-10-27)】

一 本号之仓内 AC 已达成(证据在 master: 90cb213b4 / e0f2b68dc / 4ad33e50e 三笔之一, 按号对应)
二 但本号现不可关 —— 关闭门(用户令, R17 裁1)= 关联 PR + PR-L3 流水线绿, 二者缺一不可:
· 本版为主线直接合流, 无关联 PR(PR 面通道未打通)
· PR-L3 通道本身未打通(M5 排下版; R17 裁3 已列其为关闭门之前置阻塞)
三 故本号按裁保持 open(非遗漏、非待办洗白), M7 以 fallback 丙 收官: 「仓内 AC 已达 + 关闭门未满足」, GAP +1(R17 裁2 授权)
四 解锁条件(二者齐后可关):
① 关联 PR 建立 ② 该 PR 之 L3 流水线绿
⇒ 当前前件 = PR-L3 通道打通(下版优先 K2 / P0-3)
五 附: 平台 API 无关闭能力(PATCH state_event 被静默忽略; /close、/state 路由 404)⇒ 关闭动作须待门满足后经平台正常流程执行

likedislike
KkemengCollaborators
10 days ago Close issue