preflight-check

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Preflight Check

预检检查

Run a deterministic desk-reject lint over a LaTeX submission before the authors hit "submit". Venues explicitly desk-reject — without review — for page-limit violations, template tampering, anonymization leaks, and missing mandatory sections. Every one of those is machine-checkable from the source. This skill catches them while there is still time to fix them.
在作者点击“提交”前,对LaTeX论文进行确定性的初审直接拒稿风险检查。部分会议会因页数超限、模板篡改、匿名化泄露、缺失必填章节等原因直接拒稿(不进入评审环节),而这些问题全部可以通过源文件进行机器校验。本工具能在还有时间修正时及时发现这些问题。

When to use

使用场景

  • "Is my paper ready to submit to NeurIPS / SIGSPATIAL / CHI / ...?"
  • "Check my paper for desk-reject risks" / "run a preflight"
  • "Did I anonymize this properly?" / "double-blind check"
  • "Am I over the page limit?" / "is my template compliant?"
  • Right after
    tailor-to-venue
    , and always before any actual submission.
  • “我的论文是否可以提交给NeurIPS / SIGSPATIAL / CHI / ...?”
  • “检查我的论文是否存在初审直接拒稿风险” / “执行预检”
  • “我是否做好了匿名化处理?” / “双盲评审检查”
  • “我的页数是否超限?” / “我的模板是否合规?”
  • 在执行
    tailor-to-venue
    后,以及任何实际提交操作前必须使用。

Inputs

输入项

  1. The main
    .tex
    file of the submission (the one with
    \documentclass
    ).
    \input
    /
    \include
    files are followed automatically.
  2. A venue profile:
    venues/conferences/<venue>-<year>.yml
    (schema in
    venues/schema.yml
    ). If the venue has no profile yet, create one first with
    parse-cfp
    (or copy the nearest family file and fill it in).
  3. Optional but strongly recommended: a compiled
    .log
    or
    .pdf
    next to the
    .tex
    (same basename) so the page-count risk check can run.
  1. 提交论文的主.tex文件(包含
    \documentclass
    的文件)。
    \input
    /
    \include
    引入的文件会被自动遍历检查。
  2. 会议配置文件:
    venues/conferences/<venue>-<year>.yml
    (配置文件结构定义在
    venues/schema.yml
    )。如果目标会议尚无配置文件,先使用
    parse-cfp
    创建(或复制同系列会议的配置文件并补充内容)。
  3. 可选但强烈推荐:与.tex文件同名的编译后.log或.pdf文件,以便执行页数超限风险检查。

Process

操作流程

  1. Resolve the venue profile. Find the matching file under
    venues/conferences/
    . Confirm the year matches the target deadline cycle. Ask the user which track they are submitting to — page limits differ per track (e.g. SIGSPATIAL Research = 10 pages excl. references, Demo = 4 incl.). Sanity-check the merged profile with:
    python3 scripts/venue_profile.py venues/conferences/<venue>.yml --track <name>
  2. Re-verify critical facts against the live CFP — mandatory. Profiles are a starting point, never ground truth; a stale page limit causes the exact desk reject this skill exists to prevent. Fetch the profile's
    cfp_url
    and confirm: page limit + what it excludes, blind level, template invocation, required sections, and the deadline. If anything differs, update the profile YAML first and say so in the report.
  3. Run the full preflight:
    python3 scripts/run_preflight.py paper.tex \
        --venue venues/conferences/<venue>-<year>.yml --track "<track>"
    Or run checkers individually when the user asks about one dimension:
    ScriptChecksRun
    scripts/check_template.py
    documentclass + options vs profile, year-versioned .sty (NeurIPS/ICML/ICLR), geometry/savetrees/fullpage,
    \setlength
    on layout dims,
    \linespread
    <1, negative
    \vspace
    patterns, column count, page-limit risk from
    .log
    /
    .pdf
    python3 scripts/check_template.py paper.tex --venue <yml> --track <t>
    scripts/check_anonymization.py
    \author
    /
    \affiliation
    /
    \email
    /
    \orcid
    /
    \thanks
    content, acknowledgments sections, funding/grant lines, identifying links (GitHub, personal pages) vs anonymized mirrors, first-person self-citations, hyperref
    pdfauthor
    python3 scripts/check_anonymization.py paper.tex --venue <yml>
    scripts/check_sections.py
    every
    format.required_sections
    token: NeurIPS checklist, ICML impact statement, AI-use acknowledgement (ICDE), COI declaration, CCS concepts +
    \keywords
    , plus title/abstract/bibliography presence
    python3 scripts/check_sections.py paper.tex --venue <yml>
    scripts/check_abstract.py
    abstract word count vs venue bounds (or the 150–250 norm), single-paragraph rule, citations/URLs in abstract, keywords format (ACM/IEEE Index Terms/LNCS 3–6)
    python3 scripts/check_abstract.py paper.tex --venue <yml>
    Useful flags on every script:
    --json
    (machine-readable),
    --strict
    (warnings also fail),
    --track <substring>
    ,
    --venues-dir <dir>
    (when the profile lives outside this repo),
    --no-inputs
    . Anonymization adds
    --force
    to scan even at single-blind venues.
  4. Interpret severities for the user.
    • ERROR
      — documented desk-reject grounds at this venue. Must fix.
    • WARN
      — judgment call (e.g. one negative
      \vspace
      is normal; eight is space compression). Walk through each with the user.
    • INFO
      — confirmations and pointers to manual checks. Do not pad the report with these; summarize. Exit codes: 0 = no errors, 1 = errors found (or warnings with
      --strict
      ), 2 = bad arguments/missing files.
  5. Do the manual checks the linter cannot do. Source-level linting cannot see compiled-PDF metadata, where the references actually start, supplementary files, or submission-form fields (COI declarations at ICDE live in CMT, not the PDF). Work through references/manual-checks.md with the user.
  6. Fix and re-run until clean. Quote each finding's
    file:line
    , propose the minimal edit, apply it if asked, and re-run the affected checker. For the reasoning behind each check (which venue desk-rejects for what, with sources), see references/desk-reject-triggers.md.
  1. 确认会议配置文件。在
    venues/conferences/
    目录下找到匹配的文件,确认年份与目标截止周期一致。询问用户提交的赛道——不同赛道的页数限制可能不同(例如SIGSPATIAL Research赛道为10页不含参考文献,Demo赛道为4页含参考文献)。可通过以下命令验证合并后的配置文件:
    python3 scripts/venue_profile.py venues/conferences/<venue>.yml --track <name>
  2. 对照最新征稿通知(CFP)核实关键信息——此步骤为强制要求。配置文件仅作为参考,绝非权威依据;过时的页数限制会导致本工具旨在避免的初审直接拒稿问题。获取配置文件中的
    cfp_url
    ,核实以下信息:页数限制及排除范围、盲审级别、模板调用方式、必填章节、截止日期。若存在差异,先更新配置文件YAML并在报告中说明。
  3. 执行完整预检:
    python3 scripts/run_preflight.py paper.tex \
        --venue venues/conferences/<venue>-<year>.yml --track "<track>"
    若用户仅询问某一方面的问题,可单独运行对应检查脚本:
    脚本检查内容运行命令
    scripts/check_template.py
    文档类及选项与配置文件的匹配度、带年份版本的.sty文件(NeurIPS/ICML/ICLR)、geometry/savetrees/fullpage包使用、布局维度的
    \setlength
    设置、
    \linespread
    <1、负
    \vspace
    模式、列数、基于.log/.pdf的页数超限风险
    python3 scripts/check_template.py paper.tex --venue <yml> --track <t>
    scripts/check_anonymization.py
    \author
    /
    \affiliation
    /
    \email
    /
    \orcid
    /
    \thanks
    内容、致谢章节、资助/基金说明、可识别身份的链接(GitHub、个人主页)与匿名镜像的对比、第一人称自引、hyperref的
    pdfauthor
    属性
    python3 scripts/check_anonymization.py paper.tex --venue <yml>
    scripts/check_sections.py
    format.required_sections
    中的所有项:NeurIPS checklist、ICML影响声明、AI使用致谢(ICDE)、COI声明、CCS概念+
    \keywords
    ,以及标题/摘要/参考文献是否存在
    python3 scripts/check_sections.py paper.tex --venue <yml>
    scripts/check_abstract.py
    摘要字数是否符合会议要求(或150–250词的常规标准)、单段落规则、摘要中的引用/URL、关键词格式(ACM/IEEE索引术语/LNCS要求3–6个)
    python3 scripts/check_abstract.py paper.tex --venue <yml>
    所有脚本支持的实用参数:
    --json
    (机器可读格式输出)、
    --strict
    (警告也判定为失败)、
    --track <substring>
    --venues-dir <dir>
    (配置文件不在本仓库时使用)、
    --no-inputs
    。匿名化检查脚本额外支持
    --force
    参数,可强制在单盲评审会议中执行扫描。
  4. 为用户解释检查结果的严重级别
    • ERROR
      —— 该会议明确列为初审直接拒稿的依据,必须修复。
    • WARN
      —— 需要人工判断(例如单个负
      \vspace
      属正常情况;但八个则属于压缩空间),需逐一与用户确认。
    • INFO
      —— 确认信息及手动检查指引,无需在报告中罗列,只需汇总说明。 退出码:0 = 无错误,1 = 发现错误(或使用
      --strict
      时存在警告),2 = 参数错误/文件缺失。
  5. 执行检查工具无法完成的手动检查。源文件级别的检查无法覆盖编译后PDF的元数据、参考文献实际起始位置、补充文件或提交表单字段(例如ICDE的COI声明在CMT系统中提交,而非PDF内)。需与用户共同完成references/manual-checks.md中的检查项。
  6. 修复后重新检查直至无问题。引用每个检查结果的
    file:line
    ,建议最小修改方案,若用户要求则协助修改,修改后重新运行对应检查脚本。关于每项检查的依据(哪些会议会因该问题直接拒稿及来源),可查看references/desk-reject-triggers.md

Output

输出结果

A findings report (text or
--json
) per checker or combined via
run_preflight.py
: severity, check id,
file:line
, message, summary counts, and a verdict (
FAIL
if any ERROR,
PASS with warnings
if only WARNs, else
PASS
). Present it to the user as a fix-list ordered by severity, then offer to apply fixes one at a time.
每个检查脚本或通过
run_preflight.py
合并输出的结果报告(文本或
--json
格式):包含严重级别、检查ID、
file:line
、提示信息、汇总统计,以及判定结果(存在ERROR则为
FAIL
,仅存在WARN则为
PASS with warnings
,否则为
PASS
)。需将结果按严重级别排序,以修复清单的形式呈现给用户,然后可提议逐一协助修复。

Worked example

示例演示

A NeurIPS submission that still carries author identity and last year's style file. Running the combined checker:
python3 scripts/run_preflight.py paper.tex \
    --venue venues/conferences/neurips-2026.yml
=============================================================================
PREFLIGHT REPORT  paper.tex
venue: neurips-2026   track: main
=============================================================================

-- template --------------------------------------------------------------
   [ERROR] template/style-file-year             paper.tex:1 — uses neurips_2025.sty; NeurIPS 2026 requires neurips_2026.sty
   [WARN ] template/negative-vspace             paper.tex:312 — negative \vspace before figure; isolated, likely fine

-- anonymization ---------------------------------------------------------
   [ERROR] anonymization/pdf-metadata           paper.tex:14 — \hypersetup{pdfauthor=...} leaks the author into PDF metadata
   [WARN ] anonymization/author-block           paper.tex:22 — \author populated; the .sty hides it at submission, but scrub the source
   [WARN ] anonymization/self-citation          paper.tex:88 — "our previous work [12]" — rewrite in third person

-- sections --------------------------------------------------------------
   [ERROR] sections/missing:neurips-checklist   paper.tex — no NeurIPS checklist found; a missing checklist is a desk reject

-- abstract --------------------------------------------------------------
   clean.

=============================================================================
VERDICT: FAIL — fix ERRORs before submitting   (3 error(s), 3 warning(s), 0 info)
Profiles can go stale: re-verify limits/policies at https://neurips.cc/Conferences/2026/CallForPapers
=============================================================================
How to present this: lead with the three ERRORs as a numbered fix-list (
neurips_2026.sty
, drop the
pdfauthor
leak, add the checklist), each with its
file:line
and the one-line edit; then walk the WARNs as judgment calls. Re-verify the page limit and checklist requirement at the
cfp_url
before the user relies on the verdict, then re-run the affected checker after each fix.
某NeurIPS提交论文仍包含作者身份信息,并使用了去年的样式文件。运行合并检查脚本:
python3 scripts/run_preflight.py paper.tex \
    --venue venues/conferences/neurips-2026.yml
=============================================================================
PREFLIGHT REPORT  paper.tex
venue: neurips-2026   track: main
=============================================================================

-- template --------------------------------------------------------------
   [ERROR] template/style-file-year             paper.tex:1 — uses neurips_2025.sty; NeurIPS 2026 requires neurips_2026.sty
   [WARN ] template/negative-vspace             paper.tex:312 — negative \vspace before figure; isolated, likely fine

-- anonymization ---------------------------------------------------------
   [ERROR] anonymization/pdf-metadata           paper.tex:14 — \hypersetup{pdfauthor=...} leaks the author into PDF metadata
   [WARN ] anonymization/author-block           paper.tex:22 — \author populated; the .sty hides it at submission, but scrub the source
   [WARN ] anonymization/self-citation          paper.tex:88 — "our previous work [12]" — rewrite in third person

-- sections --------------------------------------------------------------
   [ERROR] sections/missing:neurips-checklist   paper.tex — no NeurIPS checklist found; a missing checklist is a desk reject

-- abstract --------------------------------------------------------------
   clean.

=============================================================================
VERDICT: FAIL — fix ERRORs before submitting   (3 error(s), 3 warning(s), 0 info)
Profiles can go stale: re-verify limits/policies at https://neurips.cc/Conferences/2026/CallForPapers
=============================================================================
结果呈现方式:先列出3个ERROR作为编号修复清单(更换为neurips_2026.sty、移除pdfauthor泄露、添加checklist),每个项标注
file:line
及单行修改建议;然后逐一说明WARN项供用户判断。在用户依赖判定结果前,需再次通过
cfp_url
核实页数限制和checklist要求,每次修复后重新运行对应检查脚本。

Adapt to your discipline

适配不同学科

Profiles can represent conferences, journals, and workshops in any field. Add venue YAMLs with your community's rules — the checkers only read the profile, so new disciplines need data, not code.
配置文件可代表任意领域的会议、期刊和研讨会。添加对应领域规则的会议YAML文件即可——检查工具仅读取配置文件,因此新增学科只需补充数据,无需修改代码。

Guardrails

约束规则

  • A clean preflight is necessary, not sufficient — never tell the user the paper "will not be desk-rejected"; say "no machine-checkable desk-reject triggers found".
  • Always re-verify page limits/deadlines/policies against the live
    cfp_url
    before the user relies on them (step 2 is not optional).
  • Never submit to any system on the user's behalf; stop at the report.
  • Never paste large portions of the user's paper into the report — quote at most the flagged line.
  • Citation problems are out of scope here: route them through
    verify-citations
    .
  • 预检无问题是必要条件,但非充分条件——绝不能告知用户论文“不会被直接拒稿”,应表述为“未发现可机器校验的直接拒稿触发项”。
  • 在用户依赖检查结果前,必须对照最新的
    cfp_url
    重新核实页数限制/截止日期/政策(步骤2为必填项)。
  • 绝不能代表用户向任何系统提交内容;仅生成报告即可。
  • 报告中绝不能粘贴用户论文的大段内容——最多引用被标记的行。
  • 引用问题不属于本工具范围:需转至
    verify-citations
    处理。

Memory

记忆功能

This skill uses the shared
.paper-memory/
convention in the user's paper directory, following
paper-memory-convention.md
.
  • At start: read
    .paper-memory/lessons.md
    (and
    profile.yml
    for venue tier / constraints). Skip re-flagging issues already recorded and acted on; lead with any
    recurring
    desk-reject habits this author has (e.g. "you tend to compress layout near the page limit").
  • At end: append each finding worth remembering as one dated entry in the shared format
    - [YYYY-MM-DD] (preflight-check | <scope>) issue -> recommendation
    (use
    reflect-and-improve
    's
    reflect_log.py append
    , which dedupes and dates). Tag a repeat-across-papers habit
    recurring
    , a one-off
    this-paper
    .
  • Create
    .paper-memory/
    on demand if absent and offer to add it to the project
    .gitignore
    . It is local-only; never upload it or copy it into this repo.
本工具遵循用户论文目录中的共享
.paper-memory/
约定,具体规则见
paper-memory-convention.md
  • 启动时: 读取
    .paper-memory/lessons.md
    (及
    profile.yml
    中的会议级别/约束)。跳过已记录并处理的问题;优先提示作者存在的重复直接拒稿风险习惯(例如“您常在页数限制附近压缩布局”)。
  • 结束时: 将每个值得记录的检查结果以日期条目形式追加到共享文件中,格式为
    - [YYYY-MM-DD] (preflight-check | <scope>) issue -> recommendation
    (使用
    reflect-and-improve
    reflect_log.py append
    命令,该命令会自动去重并添加日期)。跨论文重复出现的习惯标记为
    recurring
    ,单次问题标记为
    this-paper
  • .paper-memory/
    目录不存在则自动创建,并提议将其添加到项目的
    .gitignore
    中。该目录仅保存在本地;绝不上传或复制到本仓库。