Skip to content

Latest commit

 

History

History
142 lines (101 loc) · 9.06 KB

File metadata and controls

142 lines (101 loc) · 9.06 KB

全局规则(rules)

所有脚本与 agent 都必须遵守。冲突时以本文件为准。


1. 判定铁律 ★(Phase 02 最高纪律)

pass/fail 的最终裁决只由确定性脚本(断言引擎)做出。LLM 绝不参与判定裁决。

唯一例外:显式标注 eval: llm_assisted 的易用性可理解性判据,其 LLM 评分作为参考信号,仍需落到一个可复核的确定性阈值上。

2. Schema 校验纪律

  • Phase 02 执行前必须对所有输入 YAML 逐条过 schema 校验(/phase02-schema-check)。
  • 不通过的用例直接拒收,生成拒收清单回报 Phase 01。
  • 绝不「尽力执行」残缺用例——宁可漏跑,不可假绿。

3. 断言纪律(三类必须按需覆盖)

type 说明 判定方式
positive 应发生:状态/产物/退出码符合预期 比对 run status / artifact 存在性 / exit code
negative 不应发生(安全命脉) 全文扫描日志确认 secret 未泄露、无越权副作用
nonfunctional 非功能:时序/并发/错误信息 阈值比对 / 并发隔离检查 / 错误信息关键词匹配
  • 安全用例(dimension=security)至少一条 negative 断言。
  • 涉及时序的断言给明确阈值与容差,不用「应该很快」。
  • 每个断言必须可确定性判定;「跑绿了」不是合格断言。

4. LLM 边界 ★(本 Phase 核心纪律)

环节 由谁做 说明
Schema 校验 脚本 确定性
环境准备/重置 脚本 确定性
Workflow 创建/触发/监控 脚本 确定性,调 GitCode API
结果采集(日志/状态/产物) 脚本 确定性,调 GitCode API
pass/fail 判定 脚本(断言引擎) 绝不交给 LLM
报告聚合、回归 diff、flaky 标记 脚本 确定性
YAML 编译(文本→GitCode workflow) Agent(LLM) 需理解 GitCode 规范与 trigger 语义
失败根因初判 Agent(LLM) 分类「产品 bug / 用例问题 / 环境问题」,不改判定结果
失败衍生用例 Agent(LLM) 由已发现缺陷生成变体,回流 Phase 01 评审
易用性可理解性评判 Agent(LLM) 仅对 eval: llm_assisted 断言评分

LLM 的产物永远是建议或信号,不是判定。

5. 环境隔离纪律

用例类型 隔离/重置级别 理由
功能 / 兼容性 fixture:per-test 临时仓库,跑完删 仓库便宜,隔离干净
破坏性稳定性 / 安全 full_instance:per-suite 或 per-run 全量重置 可能污染 runner、耗尽资源、动系统状态
  • 环境管理器按 teardown.reset 执行对应级别的清理。
  • 环境重置失败阻断后续用例执行——污染的实例产出的结果不可信。
  • 用例之间不得有状态污染(上一用例残留的仓库/secret/runner 状态影响下一用例)。
  • 执行 agent 只能面向已获授权、隔离且可重置的测试环境;不得连接生产目标、使用真实用户数据或配置真实凭据。发现此类输入时拒绝执行并报告原因。

6. 安全红线(脱敏)

  • 日志、报告、执行结果中不得出现真实密钥、真实 token、真实内网地址。
  • 断言日志中的 secret 用占位符引用(如 DEPLOY_TOKEN),不对真实值做字符串匹配。
  • 安全用例只验证「系统防住了什么/什么不应发生」,不产攻击 payload。
  • 若执行过程中意外泄露了真实 secret(如日志脱敏失败),该用例立即标记为 FAIL + 安全事件,人工介入轮换密钥。

7. 超时与重试

判定词(TIMEOUT/FLAKY/ENV_ERROR 等)的权威定义与对外映射见 §11 判定模型

  • 每条用例设置显式超时(默认取 workflow 中 timeout-minutes,无则 30 min)。
  • 超时未完成的 run 标记为 TIMEOUT(非 pass 非 fail,单独统计)。
  • 断言引擎遇到 flaky 嫌疑的用例(重复跑 N 次时绿时红),标记 FLAKY 而非 FAIL——但需人工确认是产品不稳定还是用例不可靠。
  • 环境类错误(网络超时、API 5xx)重试最多 2 次,超过标记 ENV_ERROR

8. 可复现性

  • 每次执行自成一个 run 目录,包含:输入快照(YAML hash)、执行参数、每条用例的完整结果与日志。
  • 同一批用例在同一环境下任意次执行结果应一致(flaky 除外,且 flaky 本身要被暴露)。
  • 回归 diff 以结构化落库的结果为准,不依赖报告中的文字描述。

9. 不修改历史

  • 已完成的 run 目录不得原地改写结论。
  • 需要变更时新开 run,旧结论保留。
  • 报告追加「与上次 run 对比」而非覆盖上次报告。

10. 输入感知

  • Phase 02 所有脚本/agent 启动时必须先读 inputs/INPUTS.md,确认所有必需输入到位。
  • 当 API token 过期、平台配置变更时,阻断执行并报告缺失项——不降级执行。

11. 判定模型 ★(内部判定 → 对外结论,单一事实来源)

本节是 Phase 02 判定词汇的唯一权威定义。所有执行器、断言引擎、报告器必须以此为准,不得各自发明判定词。对齐 test-strategy.md §5 的对外报告口径。

11.1 两个正交的轴

判定分两层,互不混淆:

  • 轴1 · 内部判定(verdict:细粒度、用于调试与证据留存,由断言引擎/执行器产出,确定性、不经 LLM
  • 轴2 · 对外结论:面向外部报告的三态口径,由报告器从内部判定映射得出。

一个场景必有一个对外结论(轴1中的可测性维度),可叠加 0 个或多个「问题发现」(确认的平台缺陷)——二者正交。「通过」只表示"完整执行且无问题";确认缺陷走独立的问题发现层,不挤占三态。

11.2 内部判定枚举(verdict 唯一合法取值)

verdict 含义 判据
PASS 完整执行,所有断言满足 真实 run + 完整证据 + 断言全 pass(过假绿守卫)
FAIL 完整执行,断言未满足 真实 run + 完整证据 + 至少一条断言 fail
NOT_CONFIGURED 必要前置资源缺失(secret/var/权限未配) 探测到前置条件不存在(如 configured_len=0
NO_RUN 触发后没等到对应 run 匹配不到本次部署的 run
ENV_ERROR 环境/API 错误(网络、5xx、日志接口失效) 重试 2 次后仍失败
TIMEOUT run 未在超时内完成 超过用例超时上限
FLAKY 重复跑时绿时红 多次执行结论不一致
INCONCLUSIVE 跑了但断言语义不成立/只拿到间接证据 无法形成完整断言(如状态型 harness 下 atomgit.action 语义不成立)
COMPILE_ERROR 编译产物非法/不合规,未能有效执行 push 前本地预检失败(PyYAML/VALIDATION-RULES),或 push 后 run FAILED 且 0 job(平台 SYNTAX_ERROR 类拒绝)

假绿守卫铁律:run=COMPLETED 但无 job/step、或日志为空 → 一律不得判 PASS

预检优先:workflow 应在 push 前经 workflow_runner.preflight_validate(本地、零 API)拦截语法/规范错误,判 COMPILE_ERROR 而不浪费一次真跑。

11.3 内部判定 → 对外结论映射(报告器执行)

内部判定 → 对外结论 附加处理
PASS 通过 记录方法、关键证据、适用范围
FAIL(failure-analyst 判为真实平台缺陷) 通过 之外——登记为问题发现 附最小复现 + 实际vs预期 + 证据 + 严重度 + 受影响场景
FAIL(failure-analyst 判为用例/断言自身问题) 不可测试未发现问题 回流 Phase 01 修用例;不甩锅平台
INCONCLUSIVE 未发现问题 说明证据局限,不得表述为通过或风险消除
COMPILE_ERROR(预检/平台判为我方编译产物非法) 不可测试 我方编译错误,回流修编译;不甩锅平台
COMPILE_ERROR(failure-analyst 判为「按 GitCode 文档写法编不出合法 YAML」) 问题发现 文档缺口/能力边界,附证据(见 yaml-checker DOC-UNSUPPORTED
NOT_CONFIGURED / NO_RUN / ENV_ERROR / TIMEOUT 不可测试 说明缺失条件与保留风险
FLAKY 问题发现(平台不稳定)或 不可测试(用例不可靠) 由 failure-analyst 初判方向,人工确认

11.4 纪律

  • 对外结论只有三种通过 / 未发现问题 / 不可测试test-strategy.md §5)。内部判定再细也必须映射到这三种之一。
  • 「未发现问题」≠「通过」:前者是"试了但证据不足以下结论",绝不可对外表述为"通过"或"风险已消除"。
  • 「不可测试」不是失败:资源缺失/断言受限/环境错误不计入失败率,单独统计;不当作平台缺陷。
  • 归因(FAIL 是平台缺陷还是用例问题)由 failure-analyst 依 phase02/agents/failure-analyst/CLAUDE.md 的立场原则做初判——事实来源是 GitCode 文档