aps-agent/poc/pi-fallback/P4-QUALITY-NOTES.md

6.5 KiB
Raw Permalink Blame History

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。