6.5 KiB
6.5 KiB
P4 质量 corpus notes(Agent-B)
Agent-B · 2026-09-04 · 范围仅
tests/golden/test_fallback_p4_quality.py与本文档。未改产品代码、未改其它测试、未 commit/push、未跑全量 golden。 全部场景 fake runner 注入,零真实 LLM/网络。
1. 真实运行结果
.venv\Scripts\python.exe -m pytest tests\golden\test_fallback_p4_quality.py -q
44 passed in 6.47s
另做 python -m py_compile,语法通过。44 个 pytest 用例对应 Q-01..Q-40 共
40 个确定性质量场景(参数化拆分为 44 个节点),其中 S1/S2/S3/S4/S6/S7、
开关 fail-closed、运行时不可用均由本文件直接断言;既有专项等价覆盖见 §4。
2. 指标口径(只使用当前产品字段)
| 指标 | 本文件口径 | 结果/门禁 |
|---|---|---|
| 成功率 | 期望成功 run 中 result.json.ok=true、确认卡数/审批轮次与场景期望一致的比例 |
聚合断言 1.0;报告层同时表达方案门禁 >=85% |
| 误写率 | 失败/拒绝出现成功 WORLD_WRITE、执行失败未回滚/未验证、verify MISMATCH 的 run 数 / 总 run 数 | 聚合断言 0.0(门禁 0) |
| 确认轮次 | reply blocks 中 confirm-card 数;审批仓 history 按本场景 confirmId 计 APPROVED/REJECTED/SOD_DENIED/EXPIRED/GRANT_EXPIRED | 逐场景比对通过 |
| 耗时近似 | result.json.elapsed_sec 汇总为 avg_latency_sec |
只做确定性上界与报告表达 |
| 成本近似 | events/10 + calls + steps + output_bytes/4096 | 报告层输出 avg_cost_points;不代表真实 token |
3. Q-01..Q-40 场景映射
| ID | 期望要点 | 测试节点 |
|---|---|---|
| Q-01 | S1 只读成功,0 卡 0 写 | test_q01_q02_readonly_success[Q-01-...] |
| Q-02 | S1 无工具直接回答 | test_q01_q02_readonly_success[Q-02-...] |
| Q-03 | 伪 callId -> forged_citation | test_q03_to_q08_failure_matrix[Q-03-...] |
| Q-04 | 空报告 -> error:empty_report | test_q03_to_q08_failure_matrix[Q-04-...] |
| Q-05 | runner 异常 -> harness_error | test_q03_to_q08_failure_matrix[Q-05-...] |
| Q-06 | timeout 熔断 | test_q03_to_q08_failure_matrix[Q-06-...] |
| Q-07 | max_steps 熔断 | test_q03_to_q08_failure_matrix[Q-07-...] |
| Q-08 | max_output 熔断 | test_q03_to_q08_failure_matrix[Q-08-...] |
| Q-09 | 快照导出失败降级纯推理 | test_q09_snapshot_export_failure_degrades_to_pure_reasoning |
| Q-10 | 开关缺失/损坏/非 bool | test_q10_feature_switch_fail_closed[missing/corrupt/nonbool] |
| Q-11 | S3 合法 import 出 1 卡 | test_q11_s3_legal_import_plan_stages_card |
| Q-12 | FROZEN 执行 + verify PASS | test_q12_frozen_execute_success_and_verify |
| Q-13 | ASSISTED 执行成功 | test_q13_assisted_success |
| Q-14 | 计划含未登记 intent | test_q14_plan_with_unregistered_intent_refused |
| Q-15 | ASSISTED 参数越界回滚 | test_q15_assisted_params_out_of_bounds_rollback |
| Q-16 | 步骤乱序/多步回滚 | test_q16_assisted_extra_step_rollback |
| Q-17 | artifact digest 不符 | test_q17_artifact_digest_mismatch_refused |
| Q-18 | 出卡后世界漂移 | test_q18_world_drift_between_stage_and_approve_denied |
| Q-19 | 卡过期/重放/篡改 | test_q19_expired_card_denied_zero_write;重放/篡改见 §4 既有等价 |
| Q-20 | 执行异常回滚+指纹验证 | test_q20_execution_exception_rolls_back |
| Q-21 | 审批拒绝零执行 | test_q21_approval_rejected_zero_execution |
| Q-22 | P2 不受白名单缺失影响 | test_q22_p2_unaffected_by_missing_whitelist |
| Q-23 | S4 沙盒成功零主干写 | test_q23_s4_sandbox_success_no_main_write |
| Q-24 | S4 混入写意图拒绝 | test_q24_s4_mixed_write_intent_refused |
| Q-25 | S4 expected 主干变化拒绝 | test_q25_s4_expected_world_change_fields_refused |
| Q-26 | S6 单笔合法补录 | test_q26_s6_single_legal_backlog |
| Q-27 | S6 两笔兄弟卡 | test_q27_s6_two_sibling_cards |
| Q-28 | S6 超上限截断 | test_q28_s6_over_max_truncated |
| Q-29 | S6 非法 backlog 拒绝 | test_q29_s6_invalid_backlog_refused |
| Q-30 | S6 对账 MATCH/DRIFT/MISSING | test_q30_s6_reconcile_match_drift_missing |
| Q-31 | 对账时仍断连 | test_q31_s6_reconcile_still_down_explicit |
| Q-32 | offlineBooking + MES 断连本地落账 | test_q32_s6_offline_booking_success |
| Q-33 | 在线声明 offlineBooking 拒绝 | test_q33_s6_offline_declared_while_online_stage_denied |
| Q-34 | 审批窗口内 MES 恢复 | test_q34_s6_mes_recovers_inside_approval_window |
| Q-35 | S7 ops 诊断四文件+脱敏 | test_q35_s7_ops_diagnostics_redacted |
| Q-36 | S7 非 ops 物理不可见 | test_q36_s7_non_ops_physically_invisible |
| Q-37 | S7 policy.update 原子写+备份 | test_q37_s7_policy_update_via_card |
| Q-38 | S7 config.apply 双人链 | test_q38_s7_config_apply_dual_approval |
| Q-39 | 白名单缺失/损坏 fail-closed | test_q39_whitelist_missing_corrupt_fail_closed |
| Q-40 | 无模型/无 node unavailable | test_q40_runtime_unavailable_fails_explicit |
4. 既有专项等价与边界
test_fallback_lane.py:P1 基础墙、runtime unavailable、breaker、forged citation。test_fallback_execute.py:P2 E 系列、计划锁、执行回滚、artifact/世界漂移。test_fallback_highrisk.py:S4/S6/S7、白名单缺失/损坏、policy/config 双人链。test_fallback_p3_attack.py:Q-19 重放/篡改等价。test_fallback_offline_booking.py:MES 断连/恢复等价。
本文件 _Q_REFERENCE_MAP 只保留“既有等价不重复复制”的备注,Q-01..Q-40 的
直接断言均在本文件内可复算。
5. 已知缺口(不改产品,回主管)
- 无 per-step 时间戳、真实 token/cost 字段:本轮只做事件行数/输出字节近似, Agent-A 审计已列后续产品任务。
- 审批仓 history 无 fallback run 维度 join:本文件按 confirmId 过滤计轮次; 如产品层需要“驳回后重新出卡”聚合,需另立产品字段/视图。
- 方案 F5 的“无模型 force-off + UI 状态位”与现状逐次显式失败不一致; Q-40 只锁当前语义,未断言自动关开关。
- P3-VALIDATION/GOAL-P3 的 GO/NO-GO 文档矛盾不在 Agent-B 写范围。
6. Agent-E 复跑
在仓库根目录执行:
.venv\Scripts\python.exe -m pytest tests\golden\test_fallback_p4_quality.py -q
最容易失败点:Q-03 伪 callId 必须是 call-<uuid>(当前产品 regex 只认该形态);
Q-09 需 runner 文本自身带“纯推理:快照不可用”;聚合测试依赖每 store 的
propose 审计 runDir 与按 confirmId 统计审批 history,不能用全局累计 history。