所有脚本与 agent 都必须遵守。冲突时以本文件为准。
pass/fail 的最终裁决只由确定性脚本(断言引擎)做出。LLM 绝不参与判定裁决。
唯一例外:显式标注 eval: llm_assisted 的易用性可理解性判据,其 LLM 评分作为参考信号,仍需落到一个可复核的确定性阈值上。
- Phase 02 执行前必须对所有输入 YAML 逐条过 schema 校验(
/phase02-schema-check)。 - 不通过的用例直接拒收,生成拒收清单回报 Phase 01。
- 绝不「尽力执行」残缺用例——宁可漏跑,不可假绿。
| type | 说明 | 判定方式 |
|---|---|---|
positive |
应发生:状态/产物/退出码符合预期 | 比对 run status / artifact 存在性 / exit code |
negative |
不应发生(安全命脉) | 全文扫描日志确认 secret 未泄露、无越权副作用 |
nonfunctional |
非功能:时序/并发/错误信息 | 阈值比对 / 并发隔离检查 / 错误信息关键词匹配 |
- 安全用例(
dimension=security)至少一条negative断言。 - 涉及时序的断言给明确阈值与容差,不用「应该很快」。
- 每个断言必须可确定性判定;「跑绿了」不是合格断言。
| 环节 | 由谁做 | 说明 |
|---|---|---|
| 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 的产物永远是建议或信号,不是判定。
| 用例类型 | 隔离/重置级别 | 理由 |
|---|---|---|
| 功能 / 兼容性 | fixture:per-test 临时仓库,跑完删 |
仓库便宜,隔离干净 |
| 破坏性稳定性 / 安全 | full_instance:per-suite 或 per-run 全量重置 |
可能污染 runner、耗尽资源、动系统状态 |
- 环境管理器按
teardown.reset执行对应级别的清理。 - 环境重置失败阻断后续用例执行——污染的实例产出的结果不可信。
- 用例之间不得有状态污染(上一用例残留的仓库/secret/runner 状态影响下一用例)。
- 执行 agent 只能面向已获授权、隔离且可重置的测试环境;不得连接生产目标、使用真实用户数据或配置真实凭据。发现此类输入时拒绝执行并报告原因。
- 日志、报告、执行结果中不得出现真实密钥、真实 token、真实内网地址。
- 断言日志中的 secret 用占位符引用(如
DEPLOY_TOKEN),不对真实值做字符串匹配。 - 安全用例只验证「系统防住了什么/什么不应发生」,不产攻击 payload。
- 若执行过程中意外泄露了真实 secret(如日志脱敏失败),该用例立即标记为 FAIL + 安全事件,人工介入轮换密钥。
判定词(
TIMEOUT/FLAKY/ENV_ERROR等)的权威定义与对外映射见 §11 判定模型。
- 每条用例设置显式超时(默认取 workflow 中
timeout-minutes,无则 30 min)。 - 超时未完成的 run 标记为
TIMEOUT(非 pass 非 fail,单独统计)。 - 断言引擎遇到 flaky 嫌疑的用例(重复跑 N 次时绿时红),标记
FLAKY而非FAIL——但需人工确认是产品不稳定还是用例不可靠。 - 环境类错误(网络超时、API 5xx)重试最多 2 次,超过标记
ENV_ERROR。
- 每次执行自成一个 run 目录,包含:输入快照(YAML hash)、执行参数、每条用例的完整结果与日志。
- 同一批用例在同一环境下任意次执行结果应一致(flaky 除外,且 flaky 本身要被暴露)。
- 回归 diff 以结构化落库的结果为准,不依赖报告中的文字描述。
- 已完成的 run 目录不得原地改写结论。
- 需要变更时新开 run,旧结论保留。
- 报告追加「与上次 run 对比」而非覆盖上次报告。
- Phase 02 所有脚本/agent 启动时必须先读
inputs/INPUTS.md,确认所有必需输入到位。 - 当 API token 过期、平台配置变更时,阻断执行并报告缺失项——不降级执行。
本节是 Phase 02 判定词汇的唯一权威定义。所有执行器、断言引擎、报告器必须以此为准,不得各自发明判定词。对齐 test-strategy.md §5 的对外报告口径。
判定分两层,互不混淆:
- 轴1 · 内部判定(
verdict):细粒度、用于调试与证据留存,由断言引擎/执行器产出,确定性、不经 LLM。 - 轴2 · 对外结论:面向外部报告的三态口径,由报告器从内部判定映射得出。
一个场景必有一个对外结论(轴1中的可测性维度),可叠加 0 个或多个「问题发现」(确认的平台缺陷)——二者正交。「通过」只表示"完整执行且无问题";确认缺陷走独立的问题发现层,不挤占三态。
| 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 而不浪费一次真跑。
| 内部判定 | → 对外结论 | 附加处理 |
|---|---|---|
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 初判方向,人工确认 |
- 对外结论只有三种:
通过 / 未发现问题 / 不可测试(test-strategy.md§5)。内部判定再细也必须映射到这三种之一。 - 「未发现问题」≠「通过」:前者是"试了但证据不足以下结论",绝不可对外表述为"通过"或"风险已消除"。
- 「不可测试」不是失败:资源缺失/断言受限/环境错误不计入失败率,单独统计;不当作平台缺陷。
- 归因(FAIL 是平台缺陷还是用例问题)由 failure-analyst 依
phase02/agents/failure-analyst/CLAUDE.md的立场原则做初判——事实来源是 GitCode 文档。