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

105 lines
6.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# P4 质量 corpus notes(Agent-B)
> Agent-B · 2026-09-04 · 范围仅 `tests/golden/test_fallback_p4_quality.py`
> 与本文档。未改产品代码、未改其它测试、未 commit/push、未跑全量 golden。
> 全部场景 fake runner 注入,零真实 LLM/网络。
## 1. 真实运行结果
```text
.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 复跑
在仓库根目录执行:
```text
.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。