Skip to content

docs: 测试政策决策记录 - #4

Merged
randypanding merged 1 commit into
mainfrom
docs/testing-policy
Aug 18, 2026
Merged

docs: 测试政策决策记录#4
randypanding merged 1 commit into
mainfrom
docs/testing-policy

Conversation

@randypanding

@randypanding randypanding commented Aug 18, 2026

Copy link
Copy Markdown
Contributor

加法穷举 + 减法裁决的完整决策记录。以后引入任何测试先查此文件:待定的有触发器,否决的有理由和替代。

Summary by CodeRabbit

  • 文档
    • 新增测试政策决策记录。
    • 按风险敞口明确测试类别,包括立即生效的门禁项、发布前置项、LLM 产品测试、触发式测试及明确否决项。
    • 补充各类测试的工具、执行频率、触发条件、否决理由与替代方案。

37 种测试手法:7 项立即上,5 项重写落地时上,6 项 LLM 产品化时上,
8 项触发式(含触发器),6 项明确否决(含理由与替代)。
@randypanding
randypanding merged commit 41003aa into main Aug 18, 2026
@randypanding
randypanding deleted the docs/testing-policy branch August 18, 2026 08:41
@coderabbitai

coderabbitai Bot commented Aug 18, 2026

Copy link
Copy Markdown

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 4c377734-1e80-44d8-9788-27680ed18caa

📥 Commits

Reviewing files that changed from the base of the PR and between 968c70d and d004958.

📒 Files selected for processing (1)
  • governance/testing-policy.md

📝 Walkthrough

Walkthrough

新增测试政策文档。文档按风险敞口定义快速 gate、发布前测试、LLM 产品测试、触发式测试、否决项和已有能力清单。

Changes

测试政策

Layer / File(s) Summary
政策原则与快速 gate
governance/testing-policy.md
定义适用说明、风险排序及立即生效的竞态、Fuzz、文档示例、许可证、SBOM 和 Flaky 治理测试。
发布与 LLM 测试要求
governance/testing-policy.md
定义重写项目的升级、回滚、迁移、配置兼容和安装测试,并规定 LLM 输出的回归评测、语义 golden、对抗语料及模型升级差分测试。
触发式测试与能力边界
governance/testing-policy.md
定义 API 契约、真实依赖集成、DAST、IaC、压测和状态机测试的触发条件,并记录否决项、替代方案及已有能力清单。
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch docs/testing-policy

Comment @coderabbitai help to get the list of available commands.

randypanding added a commit that referenced this pull request Aug 18, 2026
drift-check.sh:
- §8 直推检测去掉消息后缀预筛(qodo #1:后缀可伪造——直推挂 "(#N)" 假
  后缀即绕过预筛被报 clean)。唯一权威判据 = 关联 PR API,窗口内每个
  commit 都复核
- §8 fail-closed(qodo #2):关联 PR 查询改用全 SHA;响应须为数组
  (error 对象此前被 length>0 读作 has-pr、传输失败读作非 none——
  均静默放行)。查询失败 = 无法验证 = 判漂移,绝不静默放行
- §8 分页(qodo #7):commit 列表全分页;超 MAX_COMMITS=300 显式报
  漂移而非静默截断
- §4 fail-closed:org 仓库清单拉取失败时此前 REPOS 为空 → 全部循环
  静默跳过 → 检测整体假绿;现显式 exit 2
- §10 新增 ADR 引用存在性后验(qodo #5):窗口内合并 PR 的 ADR-NNNN
  引用须真实存在于 agent-registry/decisions/——gate 的存在性校验受
  私有仓跨读权 + PR 上下文 secret 暴露面约束(见 gate.yml 注释),
  后验防线与其互补

apply.sh:前置 GET 参与失败计数(qodo #3)——ruleset 清单/CS 清单/
org 仓库清单拉取失败时此前静默跳过或走错误分支,违反 loud-failure
契约;现显式计 FAIL 并在汇总中 exit 1

gate.yml:adr-required 的 PR 文件清单 --paginate(qodo #4:>100 文件
的 C1 变更不再漏检);正则词边界(防 NOTADR-0013junk 子串绕过);
存在性校验后移至 drift-check §10 的原因记录在案(org secret 不可进
PR 触发的 workflow——PR 控制的代码 + secret = zizmor secret-exposure)

governance-drift.yml:issue 归属判定改用专属 label auto-drift-report
(qodo #8:标题搜索会把人工开的同名 issue 误评论/误关闭;label 幂等
创建,创建/评论/关闭全部 label-scoped)

GOVERNANCE.yaml:C1 scope 补 scripts/、.github/、CODEOWNERS、profile/
(qodo #6:机器可读声明与 gate adr-required 实际执法路径一致——
声明与执行不得互斥)

Refs: ADR-0013, #17, #18
randypanding added a commit that referenced this pull request Aug 18, 2026
…19)

* feat: 红队修复批次——gate 硬化、每日漂移+自动关闭、apply loud-failure、App 名统一(ADR-0013)

- gate.yml:timeout-minutes=10;JSON 校验覆盖 expected-state.json(此前只验 rulesets);
  adr-required 实装——C1 路径变更 PR 必须引用 ADR-NNNN(flows "无 ADR 不合并"的机器执行)
- governance-drift.yml:周检→每日(盲区 7 天→1 天);漂移消除自动关闭 issue(防陈旧报告噪音)
- drift-check.sh §8 重写:消息后缀快速筛 + associated-PR API 复核(防伪造/漏报);
  超 24h 未回填直推标记 P0
- apply.sh:loud failure(HTTP 非 2xx 计数汇总 exit 1,防检测→修复死循环);
  头部显式声明不可自动修复类别(§5-§9)及人工路径
- new-repo-init.sh:environment/app 挂载失败 exit 1(此前静默"完成");引导改 pin commit
- App 名统一 cloudbrid-agent(线上真实 slug id=4632704;cloudbird-agent 404)
- GOVERNANCE.yaml:governance-core→team:stewardship(ADR-0004 规划名的落地形态);
  C1 scope 纳入 template-service(供应链入口);GM-1 每日+自动关闭;frequency 对齐
- expected-state.json:org_secrets_required 登记 GOVERNANCE_TOKEN(drift workflow 实际依赖)
- languages.yaml:依赖审批 approver+SLA(防永久挂起);SECURITY.md:响应 SLA/接收人/披露
- AGENTS.md 创建(CG-1 声明的契约文件,此前缺失);agent.schema.yaml profiles 指向 agent-registry

* fix: 评审修复——直推检测去后缀预筛、fail-closed、分页;幽灵 ADR 后验;C1 scope 对齐(ADR-0013)

drift-check.sh:
- §8 直推检测去掉消息后缀预筛(qodo #1:后缀可伪造——直推挂 "(#N)" 假
  后缀即绕过预筛被报 clean)。唯一权威判据 = 关联 PR API,窗口内每个
  commit 都复核
- §8 fail-closed(qodo #2):关联 PR 查询改用全 SHA;响应须为数组
  (error 对象此前被 length>0 读作 has-pr、传输失败读作非 none——
  均静默放行)。查询失败 = 无法验证 = 判漂移,绝不静默放行
- §8 分页(qodo #7):commit 列表全分页;超 MAX_COMMITS=300 显式报
  漂移而非静默截断
- §4 fail-closed:org 仓库清单拉取失败时此前 REPOS 为空 → 全部循环
  静默跳过 → 检测整体假绿;现显式 exit 2
- §10 新增 ADR 引用存在性后验(qodo #5):窗口内合并 PR 的 ADR-NNNN
  引用须真实存在于 agent-registry/decisions/——gate 的存在性校验受
  私有仓跨读权 + PR 上下文 secret 暴露面约束(见 gate.yml 注释),
  后验防线与其互补

apply.sh:前置 GET 参与失败计数(qodo #3)——ruleset 清单/CS 清单/
org 仓库清单拉取失败时此前静默跳过或走错误分支,违反 loud-failure
契约;现显式计 FAIL 并在汇总中 exit 1

gate.yml:adr-required 的 PR 文件清单 --paginate(qodo #4:>100 文件
的 C1 变更不再漏检);正则词边界(防 NOTADR-0013junk 子串绕过);
存在性校验后移至 drift-check §10 的原因记录在案(org secret 不可进
PR 触发的 workflow——PR 控制的代码 + secret = zizmor secret-exposure)

governance-drift.yml:issue 归属判定改用专属 label auto-drift-report
(qodo #8:标题搜索会把人工开的同名 issue 误评论/误关闭;label 幂等
创建,创建/评论/关闭全部 label-scoped)

GOVERNANCE.yaml:C1 scope 补 scripts/、.github/、CODEOWNERS、profile/
(qodo #6:机器可读声明与 gate adr-required 实际执法路径一致——
声明与执行不得互斥)

Refs: ADR-0013, #17, #18

* fix: CodeRabbit 评审修复——权限下沉 job 级、仓库枚举分页、C1 路径三处统一、App 令牌最小作用域(ADR-0013)

- gate.yml:permissions 下沉 gate job(顶层 permissions: {}——防后续
  新增 job 继承 workflow 级权限,对齐 agent-registry validate.yml 同款防御)
- apply.sh/drift-check.sh §4:org 仓库枚举改全分页(>100 仓的 org 不再
  漏应用/漏检基线);apply 侧空清单同样计 FAIL(loud-failure)
- GOVERNANCE.yaml/AGENTS.md/gate.yml:C1 路径定义三处统一——GOVERNANCE
  C1 scope 改 governance/ 整目录并补 tests/(agent-registry 元验证);
  AGENTS.md 硬规则补 profile/;与两个仓的机器执法路径集完全一致
- gh-app-token.sh:REPO 改必填(此前不设=令牌作用域为全部已安装仓库,
  违反最小权限);用法注释禁止交互 shell 内联 PEM(history+子进程
  环境双暴露面),本地走 AGENT_APP_SECRET_FILE、CI 走 Actions secret
- new-repo-init.sh:远端脚本 pin 指引改为"审阅过的合并提交 SHA"
  (gh pr view mergeCommit),不再建议运行时取 main HEAD

Refs: ADR-0013, #17, #18

---------

Co-authored-by: randypanding <randypanding@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant