Skip to content

[PR-3] M2 四个确定性检查(未解析/脚手架/串台/复读) #25

@justDance-everybody

Description

@justDance-everybody

本任务属于 Epic #23。共享上下文(整体目标、Agent Execution Contract、Non-goals、回归基线)见 #23
依赖:无(可与 PR-1 并行)。
代码定位按当前仓库版本核对;若行号漂移,以函数名 / 字段名 / 挂载点语义为准。

完成本 PR 需遵守 Epic #23 的 Agent Execution Contract 与 Test Execution Protocol:先写失败测试与反例夹具 → 最小实现 → 跑里程碑测试 → 跑回归基线。PR 描述需列出:changed files / tests added / tests run / before-after / non-goals。


目标

四个确定性检查,输入 = 已渲染稿件文本 main_tex(+ ledger),输出 {passed: bool, hits: [{rule, location, snippet}]}扩展现有 paper_completeness.py:829 latex_sanity_check(它已整篇 lower + 子串扫 FORBIDDEN_LATEX_TERMS),不另起一套。本 PR 只做检查本身;接入门禁、禁止出稿是 PR-4。

Allowed changes

  • latex_sanity_check 及其配置/词表
  • M2 deterministic checks
  • PR-3 fixtures
  • PR-3 tests

Forbidden changes

  • 不删除已有 FORBIDDEN_LATEX_TERMS
  • 不把裸 {{ / }} 加入 forbidden substring 词表
  • 不用相似度阈值判断跨 run 串台
  • 不把正常单个问号 ? 判为未解析引用
  • 不扫描 verbatim / code block 内的 ??

M2-a 未解析引用(新增)

  • 命中任一即 fail:\?\?(≥2 连续问号)、Table\s+\?\?Figure\s+\?\?、源里残留 \\ref\{[^}]*\} / \\cite\{[^}]*\}
  • 不算命中(防误杀):正常单个问号 ?;verbatim / 代码块内的 ??
  • 验收:m2a_unresolved.tex(Table ??)→ fail 且 location 到行;m2a_clean.tex(含正常疑问句)→ pass。

M2-b 脚手架泄漏(扩展现有词表)

  • delta(配置文件交付):新增 fixme<scaffoldgenerate a figure that。不要加 TODO:(todo 已在词表)。
  • 未渲染模板占位:不得把裸 {{ / }} 加进子串词表({{ 合法出现在 \frac{{a}}{{b}} 及 iclr/natbib .sty,会误伤);改用锚定正则 \{\{[a-z_][a-z0-9_]*\}\} 单独检。
  • 验收:m2b_scaffold.tex(caption 含 {{plot_cmd}})→ fail;m2b_clean.tex(含合法 \frac{{a}}{{b}})→ pass;另附一条证明现有 placeholder 检测未被破坏。

M2-c 跨 run 身份串台(纯集合判定)

  • 事实源:本稿锁定方法名 = state.get("method_name")(paper_completeness.pystate 是 dict,见 :561;不要写 state.method_name,会 AttributeError)。
  • 规则:抽稿件 title / front-matter / 图注中"方法名样式 token"(驼峰 / 全大写缩写),若 token 既不属于锁定方法名集合、也不在缩写白名单 → fail。纯集合判定,无相似度阈值。
  • 缩写白名单(配置文件交付):默认含 GSM8K, MuSiQue, MMLU, BLEU, GPU, CPU, LLM, LaTeX, JSON, API 等。
  • 验收:m2c_contaminated.json(锁定 CGGR,图注出现 OtherMethod)→ fail;m2c_clean.json(锁定 CGGR,正文提及 GSM8K)→ pass。

M2-d 模板复读(新增)

  • 规则:同一规范化句子(去空白、小写、去标点)出现 ≥ N 次即 fail;N 默认 3(可配);仅统计 ≥8 词的句子。
  • 验收:m2d_repeat.tex(同句 ×4)→ fail 并列出句与位置;m2d_clean.tex → pass。

DoD

四个检查各自 命中/干净 用例全绿;新增词表/阈值/白名单以配置文件交付;证明未破坏现有 latex_sanity_check;回归基线全绿。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions