本任务属于 Epic #23。共享上下文(整体目标、Agent Execution Contract、Non-goals、回归基线)见 #23。
依赖:blocked by #25(需 PR-3 的四个检查先落地)。
代码定位按当前仓库版本核对;若行号漂移,以函数名 / 字段名 / 挂载点语义为准。
完成本 PR 需遵守 Epic #23 的 Agent Execution Contract 与 Test Execution Protocol:先写失败测试与反例夹具 → 最小实现 → 跑里程碑测试 → 跑回归基线。PR 描述需列出:changed files / tests added / tests run / before-after / non-goals。
目标
把 PR-3 的四个检查接进真渲染门禁:任一命中 → 禁止出稿。
Allowed changes
agents/paper_orchestra_pipeline.py:1843 附近的渲染门禁接入逻辑
- M3 integration tests
- PR-4 fixtures
Forbidden changes
- 不修改
contracts/pipeline.py:626 require_submission_ready()
- 不绕开既有
latex_sanity_check
- 不只返回第一个 hit;多处命中必须全部列出
- 不改变现有
placeholder 命中行为
改动点(挂载点是 1843,不是 require_submission_ready)
- 正确挂载点 =
agents/paper_orchestra_pipeline.py:1843 的 latex_sanity_check(main_tex) 处 —— 这里 main_tex(已渲染)在 scope,且紧接 if not latex_sanity_report.get("ok"): ... 已是阻断逻辑。
- 把四个检查接入此处:任一命中 →
latex_sanity_report["ok"]=False 且 hits 写入 report → 既有阻断生效,禁止出稿。
- 非破坏:不动
require_submission_ready()(证据侧门禁)与现有 latex_sanity_check 既有词表行为;只新增展示侧检查项与 hits 字段。
验收用例(集成)
| # |
输入 |
期望输出 |
| M3-1 |
稿件含 Table ?? |
latex_sanity_report.ok=False,hits 含 "unresolved reference" + 行号 |
| M3-2 |
稿件含复读句 ×4 |
ok=False,hits 含 "boilerplate repetition" |
| M3-3 |
稿件干净 |
ok=True,放行 |
| M3-4(回归) |
触发现有 placeholder / FORBIDDEN_LATEX_TERMS 命中 |
维持原有 ok=False(证明未破坏既有门禁) |
| M3-5 |
多处命中(未解析 + 脚手架) |
hits 列出全部命中项,不只第一个 |
DoD
M3-1~5 全绿(挂在 1843),含回归 M3-4;回归基线 tests/test_pipeline_contracts.py、tests/test_vnext_manuscript.py 全绿;收敛分支、未确认不强推。
完成本 PR 需遵守 Epic #23 的 Agent Execution Contract 与 Test Execution Protocol:先写失败测试与反例夹具 → 最小实现 → 跑里程碑测试 → 跑回归基线。PR 描述需列出:changed files / tests added / tests run / before-after / non-goals。
目标
把 PR-3 的四个检查接进真渲染门禁:任一命中 → 禁止出稿。
Allowed changes
agents/paper_orchestra_pipeline.py:1843附近的渲染门禁接入逻辑Forbidden changes
contracts/pipeline.py:626 require_submission_ready()latex_sanity_checkplaceholder命中行为改动点(挂载点是 1843,不是 require_submission_ready)
agents/paper_orchestra_pipeline.py:1843的latex_sanity_check(main_tex)处 —— 这里main_tex(已渲染)在 scope,且紧接if not latex_sanity_report.get("ok"): ...已是阻断逻辑。latex_sanity_report["ok"]=False且hits写入 report → 既有阻断生效,禁止出稿。require_submission_ready()(证据侧门禁)与现有latex_sanity_check既有词表行为;只新增展示侧检查项与 hits 字段。验收用例(集成)
Table ??latex_sanity_report.ok=False,hits 含 "unresolved reference" + 行号ok=False,hits 含 "boilerplate repetition"ok=True,放行placeholder/FORBIDDEN_LATEX_TERMS命中ok=False(证明未破坏既有门禁)DoD
M3-1~5 全绿(挂在 1843),含回归 M3-4;回归基线
tests/test_pipeline_contracts.py、tests/test_vnext_manuscript.py全绿;收敛分支、未确认不强推。