Преглед изворни кода

docs(回归): 补记推送前七项已知失败

记录 Agent 258 项通过及 Host 201 项通过、5 项跳过、7 项失败的最新全量结果。

说明 Phase2 prompt 越阶段和 ElementSet scope 例外缺失两类根因、待修方案及未重新验证状态。
SamLee пре 1 дан
родитељ
комит
65c6167ad3
1 измењених фајлова са 60 додато и 0 уклоњено
  1. 60 0
      script_build_host/REAL_E2E_DEBUG_REPORT_2026-07-20.md

+ 60 - 0
script_build_host/REAL_E2E_DEBUG_REPORT_2026-07-20.md

@@ -19,6 +19,10 @@ Paragraph 之后的 Compose、CandidatePortfolio、Phase 3 Root、Final UoW 和
 
 用户明确要求暂不做数据库账号/权限隔离,本轮没有扩大该范围。
 
+> 2026-07-20 推送前补充:最新全量回归发现 Host 有 7 项失败,详见第 6.1 节。
+> 这些失败尚未修复;用户随后明确要求停止测试、记录现状并提交推送。因此本报告和
+> 对应代码只能作为有已知失败的调试交付,不能视为发布门禁通过。
+
 ## 2. 本轮测试输入和停止状态
 
 - 真实输入来源:上一代 MySQL 数据,而不是 fake fixture。
@@ -324,6 +328,62 @@ Phase 2/Internal E2E 针对性测试全部通过。该修复尚未进行新的
 - 一条从 start 到旧 detail readback 的完整成功报告;
 - Agent/Host 全量测试、严格 mypy、compileall、完整 MySQL release gate 的最终一次统一通过。
 
+### 6.1 推送前最新全量回归(已知失败,未修复)
+
+在拆分本轮提交后、执行 push 前,实际运行了 Agent 和 Host 全量测试。结果为:
+
+- Agent:`258 passed in 29.34s`;
+- Host:`201 passed, 5 skipped, 7 failed in 49.55s`。
+
+7 个 Host 失败分为两类。
+
+第一类共 6 项,均为 scripted real-runner 的 phase boundary 回归:
+
+- `test_real_runner_creative_exploration_order_does_not_choose_adoption_order`
+  的 element-first、paragraph-first、structure-first 三个参数;
+- `test_mission_service_real_runner_auto_continues_phase_one_to_phase_two_boundary`;
+- `test_historical_partial_advances_via_http_and_reenters_after_filestore_reload`;
+- `test_real_runner_phase_one_to_three_final_publication_and_legacy_readback`。
+
+直接表现是 `run_phase_one()` 期望 Root 停在 `PHASE_ONE_CAPABILITY_BOUNDARY`,但
+scripted Planner 已继续执行 Phase 2,最终停在 `PHASE_TWO_CANDIDATE_PORTFOLIO_READY`,
+Host 因此抛出 `ProtocolViolation: mission did not stop at the phase-one boundary`。
+
+已定位根因:本轮把 Phase 2 的完整七步说明及
+`PHASE_TWO_CANDIDATE_PORTFOLIO_READY` 常量写进了所有阶段共用的基础
+`script_planner.md`。scripted LLM 通过消息中是否出现该常量识别 Phase 2,因此在 Phase 1
+就被错误激活。这不只是测试适配问题,也说明 Phase 2 指令没有严格隔离到 Host 的 signed
+policy continuation,存在真实 Planner 越阶段风险。
+
+计划修复但尚未完成:把 Phase 2 专属说明移出基础 Planner prompt,只在
+`build_phase_two_policy()` 生成的 continuation system policy 中注入;同时在 Host 的 Root
+规划入口根据受保护 `phase` context 强制 Phase 1 只能创建 Direction、Phase 2 只能创建
+CandidatePortfolio。中断前产生的半成品 prompt 拆分已经撤销,没有纳入提交。
+
+第二类共 1 项:
+
+- `test_sql_phase_two_dynamic_replacement_compose_portfolio_and_boundary`。
+
+直接表现是 ElementSet replacement 同时引用自己的旧 ElementSet 和已接受 Paragraph 时,
+新 `_guard_accepted_input_scopes()` 报
+`INPUT_SCOPE_MISMATCH: element-set scope must equal or nest within accepted paragraph scope`。
+
+已定位根因:新增的 planning-time guard 比既有 authoritative
+`AcceptedInputResolver._validate_consumer_input()` 更严格,遗漏了 ElementSet 将跨 scope
+Paragraph 用于 placement 的明确合法例外。该 guard 原本用于在 Worker 启动前阻断 900021
+的非法 Paragraph→Structure 兄弟 scope,但不能改变既有 ElementSet 组合合同。
+
+计划修复但尚未完成:planning guard 必须复用或完全镜像 authoritative resolver 的
+scope compatibility 规则,只为 ElementSet→Paragraph placement 保留既有例外,同时继续
+拒绝 Paragraph 以兄弟 Structure 作为 base artifact 的 900021 场景。
+
+按用户明确指示,本节记录完成后不再运行测试。因此:
+
+- 上述两类失败仍然存在于当前提交历史;
+- 没有修复后的测试结果;
+- 后续接手者必须先修复这 7 项,再继续断点恢复或真实 E2E;
+- 本次 push 只代表代码和诊断记录已同步,不代表质量门禁通过。
+
 ## 7. 为什么慢,以及后续如何提速
 
 ### 7.1 当前慢点