feat(governance): §12 待接入计数汇总行 + IR-0002 (a)/(b) 分类器自测入 CI(IR-0002 #143 收口,ADR-0034/0058) - #228
Conversation
… 收口,ADR-0034/0058) - s12_classify() 抽取为标记对函数(行为等价重构),governance/tests/test-ir0002.sh 按标记提取做 fixture 自测:(a) 归待接入 / (b) 裸奔报警不降级 / 生效前活动 边界 / fail-closed 语义,5 断言全过 - §12 汇总信息行:待接入计数可见(spec AC-3),零待接入也打 OK 行(审计事实) - gate.yml + Makefile gates-pr 挂 governance/tests(目录空=测试面丢失 fail-closed)
|
Caution Review failedThe pull request is closed. ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (4)
📝 WalkthroughWalkthroughChangesIR-0002 治理检查
Suggested labels: ✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
PR Summary by QodoAdd §12 pending summary line and CI fixtures for IR-0002 (a)/(b) classifier
AI Description
Diagram
High-Level Assessment
Files changed (4)
|
There was a problem hiding this comment.
Pull request overview
本 PR 收口 IR-0002 #143 的剩余验收项:为 drift-check.sh 的 §12 “required check 活体存在性”输出补上“待接入”计数汇总行(AC-3),并将 (a)/(b) 分类器通过标记对提取纳入可回归的 fixture 自测,同时把该自测接入 gate CI 与本地 gates-pr。
Changes:
- 在
governance/drift-check.sh中抽取 §12 缺失形态判定为s12_classify(),并为每仓与全仓累计 “(a) 待接入”计数,循环结束后输出 §12 汇总信息行。 - 新增
governance/tests/test-ir0002.sh,通过从 drift-check.sh 提取被测函数进行 5 类形态断言(含 (b) 构造用例与 fail-closed)。 - 更新
.github/workflows/gate.yml与Makefile,将governance/tests/test-*.sh自测接入 CI 与本地make gates-pr。
Reviewed changes
Copilot reviewed 4 out of 4 changed files in this pull request and generated 2 comments.
| File | Description |
|---|---|
| Makefile | 本地 gates-pr 新增运行 governance/tests/test-*.sh 的自测步骤。 |
| governance/tests/test-ir0002.sh | 新增 IR-0002 §12 (a)/(b) 分类器 fixture 自测脚本(从 drift-check 标记对提取实现)。 |
| governance/drift-check.sh | §12 抽取 s12_classify() 并加入待接入计数与汇总信息行输出。 |
| .github/workflows/gate.yml | CI 中新增治理脚本自测步骤,自动发现并运行 governance/tests/test-*.sh(空目录 fail-closed)。 |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
| @for t in governance/tests/test-*.sh; do bash "$$t"; done \ | ||
| && echo "OK 治理自测(governance/tests;需 jq)" |
| rc=0 | ||
| s12_classify "$r" "$ctx" "$QUERY_FAIL" "${HAS_PR_ACTIVITY:-1}" "$PRS_RECENT" "$ORG_GATE_EFFECTIVE" "$N_CONCL" || rc=$? | ||
| case $rc in | ||
| 0) REPO_PENDING=$((REPO_PENDING+1)); S12_PENDING=$((S12_PENDING+1)) ;; | ||
| 1) LIVE_MISS=1 ;; | ||
| 2) : ;; | ||
| esac |
Code Review by Qodo
1. Fail-closed still prints OK
|
| s12_classify "$r" "$ctx" "$QUERY_FAIL" "${HAS_PR_ACTIVITY:-1}" "$PRS_RECENT" "$ORG_GATE_EFFECTIVE" "$N_CONCL" || rc=$? | ||
| case $rc in | ||
| 0) REPO_PENDING=$((REPO_PENDING+1)); S12_PENDING=$((S12_PENDING+1)) ;; | ||
| 1) LIVE_MISS=1 ;; | ||
| 2) : ;; | ||
| esac |
There was a problem hiding this comment.
1. Fail-closed still prints ok 🐞 Bug ≡ Correctness
在 §12 中,当 s12_classify() 因 check-runs 查询失败走 fail-closed(返回 2 并输出 DRIFT)或本节出现其它 DRIFT 时,调用方仍可能不标记缺失/不可验证状态并在 S12_PENDING==0 或 LIVE_MISS==0 的条件下输出“全部齐备/显式 SKIP”或“required check 齐备”的 OK 文案,从而与同节产生的 DRIFT 同时出现并在审计证据上形成自相矛盾的“全绿”结论。该误导性汇总会让读者误判 §12 在存在漂移时仍然通过。
Agent Prompt
## Issue description
§12 的输出逻辑在出现 DRIFT(尤其是 `s12_classify()` fail-closed 返回 `rc=2` 并打印 DRIFT)时,仍可能继续输出“required check 齐备”的仓级 OK 行,以及在 `S12_PENDING==0` 时无条件输出“全部受管仓要么齐备要么显式 SKIP”的 §12 汇总 OK 行,导致同一节中同时出现 DRIFT 与“全绿/齐备”的结论性 OK 文案,语义冲突并误导审计读者。
## Issue Context
- `drift-check.sh` 的输出文本会被当作审计/定位信号使用;在 fail-closed 或本节已产生 DRIFT 的情况下,应避免任何会被误读为“已验证通过/全部齐备”的 OK 汇总。
- §12 的 DRIFT 可能来自 `s12_classify()` 的 (b) 场景与 fail-closed 查询失败,也可能来自本节其它 fail-closed 分支;因此“零待接入/全部齐备”的 OK 汇总需要受“本节是否产生 DRIFT/是否存在不可验证状态”的约束。
## Fix Focus Areas
- governance/drift-check.sh[605-616]
- governance/drift-check.sh[621-625]
ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools
Card: #143
动机
IR-0002(#143)核心实现已由 #175/#178 落地并在生产 drift run 验证(8 仓 §12 误报清零、agent-platform 正确归 (a) 待接入)。收口缺口有二:
变更清单
AC 映射(#143 可观察变化)
测试方法
风险与回滚
ADR-0034(§12 语义)· ADR-0058((a) 泛化与豁免勘误背景)
Summary by CodeRabbit
新增功能
测试