parse-cfp

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Parse CFP

解析CFP

Turn a live Call for Papers into the machine-readable venue profile that the rest of this repo runs on. Output is a
venues/conferences/<venue>-<year>.yml
file conforming to
venues/schema.yml
, plus a human-readable requirements card. Downstream consumers:
preflight-check
,
tailor-to-venue
,
write-rebuttal
,
prepare-camera-ready
,
select-venue
.
将实时的Call for Papers(CFP)转换为本仓库其他模块依赖的机器可读场地配置文件。输出为符合
venues/schema.yml
规范的
venues/conferences/<venue>-<year>.yml
文件,以及一份人类可读的要求卡片。下游依赖模块包括:
preflight-check
tailor-to-venue
write-rebuttal
prepare-camera-ready
select-venue

When to use

使用场景

  • The user pastes a CFP, author-guidelines, or submission-instructions URL.
  • "What are the requirements / deadlines / page limits for VENUE YEAR?"
  • A profile in
    venues/conferences/
    is missing or a year out of date.
  • 用户粘贴CFP、作者指南或提交说明的URL。
  • "VENUE YEAR会议的提交要求/截止日期/页数限制是什么?"
  • venues/conferences/
    下的配置文件缺失或已过期一年。

Inputs

输入项

  • A CFP URL. If the user only names a venue, check
    venues/conferences/<venue>-<year>.yml
    for a
    cfp_url
    first; an older year's profile usually links the venue website where the new CFP lives.
  • venues/schema.yml
    — read it before writing the profile; it defines every field and the mandatory
    verified:
    provenance block.
  • The matching
    venues/families/<family>.yml
    for family-level defaults.
  • CONTACT_EMAIL
    env var (used in the polite fetch User-Agent; the script prompts if unset).
  • CFP URL。如果用户仅提及会议名称,先检查
    venues/conferences/<venue>-<year>.yml
    中的
    cfp_url
    字段;往年的配置文件通常会链接到会议官网,可从中找到最新的CFP。
  • venues/schema.yml
    —— 编写配置文件前需阅读此文件,它定义了所有字段及必填的
    verified:
    来源信息块。
  • 对应的
    venues/families/<family>.yml
    文件,用于获取同系列会议的默认配置。
  • CONTACT_EMAIL
    环境变量(用于设置友好的请求User-Agent;若未设置,脚本会提示输入)。

Process

处理流程

  1. Scope one venue + one year. Read
    venues/schema.yml
    . If a profile for this venue-year already exists, treat it as hints to re-verify, never as ground truth.
  2. Fetch the CFP page. Run:
    python3 scripts/fetch_cfp.py "<cfp-url>"
    The script fetches ONE page per invocation, rate-limits to 1 request/second per host, backs off exponentially on HTTP 429, caches under
    .cache/
    (gitignored) for 24h, and prints readable text with link targets as
    [url]
    . It exits nonzero with a clear message on failure. Then fetch the handful of follow-up pages you actually need — per-track submission pages, the deadlines page, the camera-ready/author-kit page — one invocation each, never a site crawl.
    • Exit code 3 = non-HTML content (a PDF CFP, a JSON API response); the body is saved under
      .cache/
      — read that file directly.
    • "very little text extracted" warning = JavaScript-rendered page; ask the user to paste the page text and mark the profile
      needs-verification
      . Never fill gaps from memory.
  3. Verify the year. Confirm the page heading and dates match the requested year before extracting — stale CFPs survive at near-identical URLs. Wrong year: tell the user and locate the current page.
  4. Extract every schema field following references/extraction-guide.md. The non-negotiables:
    • Numbers (page limits, char limits, dates) only from fetched text; missing fact =
      null
      + an explanatory note. Never infer, never recall.
    • Page limits must capture what is EXCLUDED (references? appendix? checklist?) with the CFP's sentence quoted verbatim in the track
      notes
      .
    • Deadlines: record the stated timezone — AoE is common, not universal (SIGSPATIAL uses Pacific Time). Abstract registration is a separate, earlier deadline at most venues.
    • llm_policy
      and
      dual_submission
      : verbatim quotes, never paraphrased.
  5. Normalize the template invocation, submission system, rebuttal format, and camera-ready rail using references/templates-and-systems.md. Derive
    \documentclass
    options from the family table (add
    review,anonymous
    only for double/triple-blind venues) and comment when an invocation is family-derived rather than printed in the CFP.
  6. Emit the YAML to
    venues/conferences/<venue>-<year>.yml
    :
    • id
      equals the filename stem;
      family
      references an existing family file.
    • Fill the mandatory
      verified:
      block — today's date, every URL fetched (with a comment on which facts each supplied), and an honest
      confidence:
      (
      verified-live
      only if all critical facts came off live pages today).
  7. Validate. Run
    python3 tools/validate_venues.py
    from the repo root (needs PyYAML; if unavailable, check the file manually against
    venues/schema.yml
    field by field).
  8. Present the requirements card to the user: a short table of deadlines (with timezone), per-track limits with their exclusions, blind level, template invocation, submission URL, rebuttal format, and LLM policy. End with the verification notice: "Profile extracted from <cfp_url> on <date>. Re-verify deadlines and page limits against the live CFP before submitting — CFPs change mid-cycle and a stale limit can cause a desk reject."
  1. 限定单个会议+单个年份。阅读
    venues/schema.yml
    。如果该会议对应年份的配置文件已存在,仅将其作为参考进行重新验证,绝不能视为绝对事实。
  2. 获取CFP页面。运行:
    python3 scripts/fetch_cfp.py "<cfp-url>"
    该脚本每次调用仅获取一个页面,对每个主机的请求速率限制为1次/秒,遇到HTTP 429错误时会进行指数退避,将结果缓存到
    .cache/
    目录(已加入git忽略)24小时,并输出带链接目标标记为
    [url]
    的可读文本。脚本执行失败时会返回非零退出码并给出清晰提示。然后按需获取后续少量必要页面——分赛道提交页面、截止日期页面、终稿/作者工具包页面,每次调用获取一个页面,绝不进行全站爬取。
    • 退出码3 = 非HTML内容(如PDF格式的CFP、JSON API响应);内容会保存到
      .cache/
      目录下,需直接读取该文件。
    • 出现“提取到的文本极少”警告 = 页面由JavaScript渲染;请用户粘贴页面文本,并将配置标记为
      needs-verification
      。绝不能凭记忆填补信息空白。
  3. 验证年份。在提取信息前,确认页面标题和日期与请求的年份匹配——过期的CFP可能仍存放在几乎相同的URL下。若年份不符:告知用户并定位当前有效的页面。
  4. 提取所有schema字段,遵循references/extraction-guide.md的规则。以下内容必须严格执行:
    • 数字(页数限制、字符限制、日期)仅从获取的文本中提取;缺失的信息需标记为
      null
      并添加说明。绝不推断,绝不凭记忆填写。
    • 页数限制必须明确记录哪些内容不包含在内(参考文献?附录?检查清单?),并在赛道的
      notes
      字段中逐字引用CFP中的对应语句。
    • 截止日期:记录明确标注的时区——AoE是常见时区,但并非通用(SIGSPATIAL使用太平洋时间)。多数会议的摘要注册截止日期早于论文提交截止日期。
    • llm_policy
      dual_submission
      字段:必须逐字引用原文,绝不改写。
  5. 标准化模板调用方式、提交系统、反驳格式和终稿流程,遵循references/templates-and-systems.md的规则。从同系列会议的表格中推导
    \documentclass
    选项(仅对双盲/三盲会议添加
    review,anonymous
    ),并在注释中说明该调用方式是来自同系列默认配置还是CFP中明确标注的内容。
  6. 生成YAML文件并保存到
    venues/conferences/<venue>-<year>.yml
    • id
      等于文件名的主部分;
      family
      字段引用已存在的同系列会议配置文件。
    • 填写必填的
      verified:
      块——当前日期、所有获取过的URL(并注释每个URL提供了哪些信息),以及如实填写的
      confidence:
      字段(仅当所有关键信息均来自今日获取的实时页面时,设置为
      verified-live
      )。
  7. 验证配置。从仓库根目录运行
    python3 tools/validate_venues.py
    (需要PyYAML库;若未安装,需手动对照
    venues/schema.yml
    的字段逐一检查文件)。
  8. 向用户展示要求卡片:包含截止日期(带时区)、分赛道页数限制及排除项、盲审级别、模板调用方式、提交URL、反驳格式和LLM政策的简短表格。结尾添加验证提示:“配置文件于<date>从<cfp_url>提取。提交前请对照实时CFP重新验证截止日期和页数限制——CFP可能在周期中途修改,过期的限制可能导致论文被直接拒稿。”

Worked mini-example

示例演示

User pastes
https://sigspatial2026.sigspatial.org/research-submission.html
. After fetching, the Research-track section reads: "papers are limited to 10 pages (excluding references), with up to 2 additional pages after the references to be used for appendices", deadlines are stated as "11:59 PM Pacific Time", and the submission link points at
easychair.org/conferences/?conf=acmsigspatial2026
. That extracts to:
yaml
id: sigspatial-2026
deadlines:
  abstract: 2026-05-29
  paper: 2026-06-05
  timezone: PT          # CFP says "Pacific Time", NOT AoE — recorded verbatim
tracks:
  - name: Research
    page_limit: 10
    page_limit_excludes: [references, appendix]
    notes: >
      CFP verbatim: "papers are limited to 10 pages (excluding references),
      with up to 2 additional pages after the references ... for appendices."
review:
  blind: single         # CFP lists author names — single, not double
  submission_system: easychair
verified:
  date: 2026-06-21
  source_urls:
    - https://sigspatial2026.sigspatial.org/research-submission.html  # limits, deadlines, blind
  confidence: verified-live
Two traps this example surfaces and the guide handles: the timezone is Pacific, not the AoE default, and the page limit excludes both references AND the appendix — encoded explicitly so
preflight-check
can enforce it. The page heading is confirmed to say 2026 before any of this is extracted.
用户粘贴链接
https://sigspatial2026.sigspatial.org/research-submission.html
。获取页面后,研究赛道部分内容为:“论文限制为10页(不含参考文献),参考文献后最多可额外添加2页用于附录”,截止日期标注为*“太平洋时间晚上11:59”*,提交链接指向
easychair.org/conferences/?conf=acmsigspatial2026
。提取后的配置如下:
yaml
id: sigspatial-2026
deadlines:
  abstract: 2026-05-29
  paper: 2026-06-05
  timezone: PT          # CFP says "Pacific Time", NOT AoE — recorded verbatim
tracks:
  - name: Research
    page_limit: 10
    page_limit_excludes: [references, appendix]
    notes: >
      CFP verbatim: "papers are limited to 10 pages (excluding references),
      with up to 2 additional pages after the references ... for appendices."
review:
  blind: single         # CFP lists author names — single, not double
  submission_system: easychair
verified:
  date: 2026-06-21
  source_urls:
    - https://sigspatial2026.sigspatial.org/research-submission.html  # limits, deadlines, blind
  confidence: verified-live
此示例揭示了两个需要注意的陷阱,本指南已覆盖:时区为太平洋时间而非默认的AoE,页数限制同时排除参考文献和附录——需明确编码这些信息,以便
preflight-check
模块进行校验。在提取任何信息前,已确认页面标题标注的年份为2026。

Output

输出

  • venues/conferences/<venue>-<year>.yml
    — schema-conformant, year-versioned, with provenance.
  • An inline requirements-card summary with the re-verify warning.
  • venues/conferences/<venue>-<year>.yml
    —— 符合schema规范、带年份版本、包含来源信息的配置文件。
  • 内嵌的要求卡片摘要,附带重新验证提示。

Guardrails

约束规则

  • Never fabricate a deadline, limit, or policy.
    null
    + note beats a guess.
  • Quote LLM-use and dual-submission policies verbatim; paraphrase can invert compliance meaning.
  • GET-only. Never log in to, register with, or submit to any submission system on the user's behalf.
  • Never fabricate citations. This skill emits venue metadata only; if a paper reference is ever needed downstream, route it through
    verify-citations
    .
  • One page per script invocation; no bulk crawling. The cache lives under
    .cache/
    and stays out of git — do not commit fetched CFP text to the repo.
  • Always include the re-verify-against-live-CFP notice in the final answer.
  • 绝不编造截止日期、限制或政策。
    null
    加说明优于猜测。
  • LLM使用政策和双重提交政策必须逐字引用;改写可能改变合规性含义。
  • 仅使用GET请求。绝不为用户登录、注册或提交至任何提交系统。
  • 绝不编造引用内容。此工具仅输出场地元数据;若下游需要论文引用,需通过
    verify-citations
    模块处理。
  • 每次脚本调用仅获取一个页面;绝不批量爬取。缓存文件存储在
    .cache/
    目录下,不会提交至git——请勿将获取的CFP文本提交至仓库。
  • 最终回复中必须包含“对照实时CFP重新验证”的提示。

Source verification (mandatory)

来源验证(必填)

This skill originates venue facts, so source verification is mandatory without exception:
  • The venue is the user's choice; build its rules on demand, never from memory or a prior year.
  • Search the web for the live CFP / author-instructions page and read the primary source — never state a fact from a search snippet you didn't open, and never from a deadline aggregator without confirming on the official site.
  • Double-check every desk-reject-class fact (deadline, page limit + exclusions, blind level, template, submission system) against a second source; if sources disagree, surface the conflict — do not pick silently.
  • Record a clickable reference link and the date for every fact in the profile's
    verified.source_urls
    ; set
    confidence
    to
    verified-live
    /
    corroborated
    only when sourced, else
    needs-verification
    . A fact with no link is emitted as unverified, never asserted.
此工具生成场地信息,因此来源验证是必须的,无例外:
  • 会议由用户选择;按需生成其规则,绝不能凭记忆或往年信息填写。
  • 搜索网页找到实时CFP/作者指南页面并阅读原始来源——绝不能从未打开的搜索结果片段中获取信息,也绝不能从截止日期聚合网站获取信息而不通过官方网站确认。
  • 双重检查所有可能导致直接拒稿的信息(截止日期、页数限制及排除项、盲审级别、模板、提交系统),需对照至少两个来源;若来源存在冲突,需告知用户冲突情况——绝不能私下选择其中一个。
  • 在配置文件的
    verified.source_urls
    中记录每个信息的可点击参考链接和日期
    ;仅当信息有来源时,将
    confidence
    设置为
    verified-live
    /
    corroborated
    ,否则设置为
    needs-verification
    。无链接的信息需标记为未验证,绝不能断言为事实。

Bundled files

附带文件

  • references/extraction-guide.md — field-by-field extraction rules, cue phrases, and the trap list.
  • references/templates-and-systems.md — template invocations by family, submission-system URL patterns, rebuttal taxonomy, camera-ready rails.
  • scripts/fetch_cfp.py
    — polite single-page fetcher (run it; do not reimplement fetching by hand).
  • references/extraction-guide.md —— 逐字段提取规则、提示短语和陷阱列表。
  • references/templates-and-systems.md —— 同系列会议的模板调用方式、提交系统URL模式、反驳分类、终稿流程。
  • scripts/fetch_cfp.py
    —— 友好的单页面获取脚本(请使用此脚本;请勿手动实现获取逻辑)。