☰
PaperSpine 断点续作(Resume)指南:从检查点安全恢复学术写作工作流
2026/10/13 3:09:38 网站建设 项目流程
  • AI 技能
  • AI 写作
  • 人工智能
  • 深度研究
  • AI 应用

【免费下载链接】PaperSpine

PaperSpine5 — local-first, evidence-bound paper research, writing, figures, review and delivery. Download: https://wubing2023.github.io/PaperSpine/v5/

项目地址:https://gitcode.com/gh_mirrors/pa/PaperSpine
点击查看免费下载

导读

本文面向使用 PaperSpine 完成学术论文写作的 Agent 与开发者,讲解其断点续作机制:当一次多阶段论文工作流被中断后,如何从第一个未完成阶段继续推进,而不是盲目重启。文章覆盖"先选对权威路径(公共 host workflow 与 legacy Runner)""反跳过规则(Anti-Skip Rule)""ProductRunner 续作循环""legacy flat-output 续作循环及其 10 条规则""阶段 gate 脚本速查""用户反馈后的同任务修订"与"清洁重启边界",并结合作业目录中的 progress_check.py 源码与 test_progress_check.py 测试用例,给出可直接运行、可验证的恢复命令。读完本文,你将掌握在任意中断点安全恢复 PaperSpine 工作流、复用有效成果并避免伪造进度的完整实战方案。

一、断点续作的核心原则

PaperSpine 支持从前一次运行被中断时的第一个未完成阶段继续推进(resume from the first incomplete stage)。除非用户明确要求一次干净的全新运行(clean run),否则不得从头重启。这一原则由关联文档 resume.md 明确设定,是整个续作流程的总纲。

与之配套的复用策略见 execution-efficiency.md:

  • 续作时恢复已保存的选择(saved choices)与下一步动作,而不是重放整段历史循环;
  • 当原方法段落内容已不可用时,重新打开原始方法原文;一个未变化的哈希或已读标记(read marker)不能替代下一步动作的真实约束;
  • 新任务版本、素材快照(material snapshot)、手稿哈希、目标或用户授权变化,会使相关检查点字段失效,此时只重载发生变化的那部分权威信息与下游 playbook。

从源码结构看,progress_check.py把这一"从首个未完成阶段继续"的语义实现为对阶段表STAGES的顺序扫描:check_progress()遍历STAGES,为每个阶段计算PENDING / BLOCKED / DONE / OPTIONAL / SKIPPED状态,取第一个非完成阶段作为next_stage(见 progress_check.py)。

二、先选对权威路径:公共 host workflow 与 legacy Runner 的边界

恢复时首要任务不是找"下一个阶段",而是确定这次任务由哪条权威路径管辖。resume.md 给出了明确的二分法:

任务形态权威路径依据文档
公共 host workflow(当前默认)SKILL.md与product-v1-workflow.md共同管辖任务打开与续作;读取它们的 Agent 即 host,从本次会话继续同一任务product-v1-workflow.md
Product Web 任务 / 当前 host 续作请求通过公共 host workflow 续作精确任务;MCP 工具未暴露时使用已安装的 host CLI;读取公共任务快照与当前配置、选择、反馈、产物product-v1-workflow.md
明确选择的历史 legacy Runner 任务仅在任务明确使用legacy Runner 时才使用product-runner-host-route.mdproduct-runner-host-route.md

三条明确的红线:

  1. 不要从 legacy 目录名推断阶段,也不要因为可选的嵌套 Web Agent 不可用就新建任务;
  2. progress_check.py <实际任务目录> --markdown对含task_record.json的目录只是一个可选的只读投影,它不是第二权威,其 legacy--gate名称不会提交 ProductRunner 答案;
  3. 不要对 Product Web 任务运行下面的 flat-output 循环,也不要在一旁伪造一棵paper_rewriting_output/目录树。

只有现有运行确实使用扁平paper_rewriting_output/布局、且没有 ProductRunner 任务权威时,才使用 legacy 循环;并且要使用实际存在的路径,而不是相对当前工作目录新建的文件夹。

源码侧,progress_check.py通过_product_web_progress()检测task_record.json的存在与contract合法性来分流:一旦存在合法任务记录,就走 J1–J11 的 Web Runner 状态机(WEB_RUNNER_STAGES),并明确拒绝用 J11 本地交付满足任意 legacy 阶段 gate——返回消息为"Product Web task is governed by its Runner stages; legacy stage '<key>' cannot be satisfied by J11 delivery"(见 progress_check.py)。对应的测试 test_product_web_task_does_not_satisfy_legacy_stage_gate 验证了这一行为。

三、progress_check.py:只读进度投影与 gate 机制(源码级)

progress_check.py是自包含的标准库脚本,除--write时写出progress.md外不修改任何文件。其 CLI 参数在 parse_args() 中定义:

参数作用说明
output_dir(位置参数)要扫描的输出目录默认为paper_rewriting_output
--markdown输出 Markdown 格式进度报告默认输出
--json输出 JSON 格式进度报告便于程序化消费
--write把progress.md写入输出目录resume.md 规定progress.md仅是真正的 legacy flat-output 工作流的权威恢复图;Product Web 任务则以task_record.json+ 哈希绑定的 Runner 产物为权威
--gate <stage>只检查指定阶段阶段完成则退出码 0,否则 1;choices 来自STAGES键 +STAGE_ALIASES+ Web 专用 gate 名
--require与--gate配合:把配置依赖阶段视为必需典型场景见下方 Word gate

阶段表STAGES(progress_check.py)定义了各阶段必需的产物文件,例如:

  • intake:paper_spine_config.json、paper_spine_config.md;
  • research:source_map.md、research_dossier.md、exemplar_learning_dossier.md、sota_gap_map.md、contribution_options_after_research.md、motivation_options_after_research.md等;
  • semantic_confirmation:confirmed_contribution.md、confirmed_motivation.md;
  • integrity_audit:artifact_check.md、integrity_audit.md、structured_review.md等;
  • word:final_paper/paper.docx、word_report.md(配置依赖);
  • final_audit:artifact_check.md、citation_bank_check.md、citation_quality_audit.md、final_artifact_manifest.md、submission_metadata.json、usage_ledger.jsonl等。

两个值得注意的实现细节:

  1. 旧 gate 名兼容:STAGE_ALIASES = {"motivation_confirmation": "semantic_confirmation"}——motivation_confirmation只是 V4 公共 gate 名的兼容别名,新文档与自动化一律使用semantic_confirmation。测试 test_legacy_motivation_gate_alias_uses_semantic_contract 验证了别名走的是同一贡献契约。
  2. Word 默认开启:word_requested(config)在paper_spine_config.json未设置word_output时返回True,即默认产出docx;只有显式word_output=none才关闭(progress_check.py)。因此 legacy 规则第 8 条"Word is required by default"在源码中有直接对应。

final_auditgate 是唯一真正执行多个兄弟审计脚本的 gate:它依次调用artifact_check.py、citation_bank_check.py、integrity_audit.py、structured_review.md校验、citation_quality_audit.py、word_guard.py、latex_guard.py、section_economy_check.py、author_voice_check.py、contribution_check.py,并在review_policy=strict时追加reviewer_audit_check.py与evidence_grounded_review.py,在 journal/conference/competition 场景追加results_validation_check.py与scientific_evidence_check.py,图表激活时追加figure_story_check.py,最后统一执行visual_readiness_check.py、publication_surface_check.py、metadata_readiness_check.py、usage_ledger.py(progress_check.py)。只有全部脚本退出码为 0,final_audit才算通过——这与 resume.md 规则 9、10 的语义完全一致。

四、Anti-Skip Rule:反跳过规则

恢复流程的第一条硬性纪律是不要跳过已保存工作流与用户范围要求的科学工作。当证据缺失时,先查明实际存在什么,然后只补做仍然缺失的工作,再宣称受影响的结果完成。resume.md 明确禁止五类行为:

  • 伪造结果、确认或评审记录来填补缺失文件;
  • 修补下游文件,使其声称支持不存在的上游证据;
  • 用"以后再修"的备注宣称受影响工作已完成;
  • 因为用户看起来很急就跳过某个阶段;
  • 使用generate_artifacts.py、quick_generate.py、mock_artifacts.py等批量脚本创建占位中间文件,替代真实的 research、citation、planning、writing 或 audit 阶段。

缺失产物只意味着"完成尚未由该文件确立"。恢复前应检查既有任务、先前版本与实际输出,再决定哪些科学工作必须恢复或补做;不得推断该工作从未运行过。同时,书写真实缺失的手稿章节、修复产出脚本,属于已保存范围内正常的 host 工作;既有证据可以支撑修复,而无需重建历史管理文件。

这一纪律在progress_check.py中也有镜像:_report_contains_fail_blocked()会扫描artifact_check.md等报告文件中的Status: FAIL / BLOCKED或Result/Conclusion/Overall/Outcome: FAIL/BLOCKED模式,并把对应阶段回置为PENDING(progress_check.py)。

五、ProductRunner 续作循环

当任务由 ProductRunner 管辖时,恢复循环共 5 步:

  1. 读取同一任务的当前快照与其绑定的 issue/输入包(input packet);
  2. 只执行当前阶段的学术工作,并使用其路由的 playbook(routed playbook);复用未变化的有效结果。注意:评审要求修改是对该任务的修订(revision),不是一次干净的 intake,也不是重写早期证据的许可;
  3. 通过 issue 既有的类型化 Runner 工具提交,携带当前 revision 与 issue 绑定;当需要真实用户选择时使用普通用户表单——host 的答案不得冒充用户确认;
  4. 读取返回的状态并继续下一个未完成阶段。对评审异议,遵循 product-runner-host-route.md 中既有的revision_request/REVISION_REQUIRED路径,不得用预先写好的 PASS 替代;
  5. 核实实际论文产物与同一前端下载后再宣称交付——一次成功的传输调用本身不等于论文结果。

用户反馈后的同任务修订

对已完成本地论文收到新反馈的场景:

  • 使用既有任务的请求修改表单,或paperspine5_runner_request_revision工具(详见 product-runner-host-route.md);
  • 普通续作始终是幂等恢复(idempotent recovery);用户反馈不是独立评审,绝不授权把旧 PASS 复制到修订后的文件上;
  • 根据实际变更选择manuscript、figures或reference-mapping范围,保留上一次下载,并跟随返回的 J8/J7/J6 issue;
  • 新增的 ledger 之外素材走既有同任务 add-materials/bootstrap 路径,因此会得到真正的新快照。

失败分类与有界重试

失败后必须先分类原因,再做一次具体的修正性变更,然后重试一次;绝不执行第三次实质相同的尝试。若问题在于 MCP 工具未暴露,正确动作是改用已安装的 host 传输,而不是换一套研究流程或重新登录。

六、Legacy flat-output 续作循环

仅当现有运行真正使用扁平paper_rewriting_output/布局、且无 ProductRunner 任务权威时,才使用 legacy 循环。续作是一个循环而非一次性补丁:

  1. 对当前未变化的任务 revision/素材快照,运行一次python scripts/progress_check.py paper_rewriting_output --markdown --write;
  2. 通过读取references/*.mdplaybook,执行报告给出的next_stage;
  3. 运行python scripts/progress_check.py paper_rewriting_output --gate <stage_name>;
  4. gate 通过后,再运行一次完整进度检查;
  5. 用新的next_stage继续,直到final_audit完成。

当 gate 停留在同一next_stage时,先分类确切失败原因,做一次具体修正再重试一次;不得对同一输入哈希执行第三次实质相同的尝试。收据复用与阻塞上报遵循 execution-efficiency.md。

不要在修复一个缺失阶段后就停下,除非:

  • 工作流因等待用户确认而 BLOCKED;
  • 必需的外部工具缺失且报告已声明 BLOCKED/FAIL;
  • 用户明确要求暂停。

七、Legacy flat-output 规则(10 条逐条解读)

规则 1:续作前先跑 progress_check.py

继续 legacy flat-output 工作流前,先对其既有paper_rewriting_output/目录运行progress_check.py,读 Markdown 或 JSON 输出确定next_stage。Product Web 任务改用上面的 ProductRunner 循环。

规则 2:next_stage为 intake 时先核验配置

如果next_stage是intake且配置已存在,先确认配置完整,再决定是否重新进入 intake;配置有效则推进到下一阶段。

规则 3:semantic_confirmation处于 BLOCKED 时等待用户

若next_stage是semantic_confirmation且状态为BLOCKED:

  • 先读 semantic-confirmation.md;
  • 把已存在的contribution_options_after_research.md与motivation_options_after_research.md呈现给用户;不得为了绕过 gate 而重写选项;
  • 等待用户明确确认后,才写confirmed_contribution.md与confirmed_motivation.md;
  • motivation_confirmation仅作为 legacy gate 别名被接受(源码中的STAGE_ALIASES印证)。

从源码看,check_progress()在semantic_confirmation阶段缺少两份 confirmed 文件、但已有任一 options 文件时,会把该阶段标记为BLOCKED(progress_check.py);对应的 gate 还会额外调用contribution_check.py校验贡献契约(progress_check.py)。测试 test_semantic_confirmation_requires_contribution_and_motivation 验证缺少confirmed_contribution.md时 gate 失败。

规则 4:其他阶段按 playbook 执行,不重跑已完成阶段

对任何其他next_stage,读取对应references/*.mdplaybook 并执行该阶段。不要重跑产物已存在且有效的早期阶段;阶段输入与任务 revision 未变化时,也不得重读 playbook。

规则 5:阶段完成后用 gate 验证

阶段完成时运行progress_check.py --gate <stage_name>验证其产物。gate 失败即阶段未完成,必须返回修复。

规则 6:progress.md只是 legacy 恢复图

progress.md(由progress_check.py --write写出)只对真正的 legacy flat-output 工作流是权威恢复图。对 Product Web 任务,task_record.json加哈希绑定的 Runner 产物才是权威,进度脚本只是该状态的只读投影。

规则 7:先定位权威产物再判断完成

判断完成前必须检查既有任务工作区、先前版本与引用的输出路径。三条细分:

  • 嵌套输出目录需要诊断:分清哪些文件是当前版、哪些是旧版、手稿引用的是哪些路径;只修正确证错位的文件并保留有效版本——嵌套目录本身不证明科学工作未完成;
  • 多个最终论文目录需要比对:按内容、引用与任务记录识别当前 canonical 源与已交付版本;保留旧版本,只有确证冗余且用户授权删除时才移除副本;
  • 对真正的 legacy flat-output 运行,只有检查文件身份与依赖之后才修复错位路径;不得因为文件用了另一种布局就丢弃有效工作。

源码侧,detect_misplaced_artifacts()维护MISPLACED_RELATIVE_PATHS列表(final_paper、writing_rationale_matrix.md、citation_support_bank.md等),检测父目录与输出目录中的错位/嵌套产物,并在发现错位时把is_complete置回false(progress_check.py)。

规则 8:Word 默认必需

若paper_spine_config.json未设置word_output,视为docx;只有显式word_output=none才关闭 Word 输出。测试 test_word_none_without_require_passes_optout 验证了关闭时的 opt-out 行为,而 test_word_require_with_word_output_none_fails 验证了--gate word --require即使在word_output=none下也强制要求paper.docx对——即--require使配置依赖阶段变为强制。

规则 9:artifact_check 的 FAIL/BLOCKED 阻断完成

若artifact_check.md报告Status: FAIL或Status: BLOCKED,工作流未完成,不得声明is_complete=true。返回失败的上游阶段(缺失产物、薄弱 rationale matrix、单薄 citation bank 或错位产物)修复。只有artifact_check.py退出码 0 且进度报告显示is_complete=true时才能声明完成。

规则 10:citation_bank_check 的 FAIL 阻断完成

若citation_bank_check.md报告Status: FAIL,引用支持库未达标。返回 citation 阶段修复薄弱行后再继续。

八、Legacy gate 脚本速查

resume.md 给出的完整 gate 命令序列(命令位于 legacy flat-output 布局下):

# 完整进度扫描(恢复检查) python scripts/progress_check.py paper_rewriting_output --markdown --write # 阶段级 gate(完成一个阶段后使用) python scripts/progress_check.py paper_rewriting_output --gate research python scripts/progress_check.py paper_rewriting_output --gate citation python scripts/progress_check.py paper_rewriting_output --gate semantic_confirmation python scripts/progress_check.py paper_rewriting_output --gate planning python scripts/progress_check.py paper_rewriting_output --gate drafting python scripts/progress_check.py paper_rewriting_output --gate integrity_audit python scripts/progress_check.py paper_rewriting_output --gate latex python scripts/progress_check.py paper_rewriting_output --gate word --require python scripts/progress_check.py paper_rewriting_output --gate final_audit

其中--gate final_audit是唯一真正执行全部审计脚本的 gate(见上文第三节),退出码 0 才表示最终审计通过;--gate word --require强制要求 Word 输出对(或output_language=zh时的中文对final_paper/paper.zh.docx+word_report.zh.md),不受word_output=none豁免——这一语义在required_artifacts_for_stage()的require分支中有完整实现(progress_check.py)。

九、有界失败恢复与执行效率

恢复循环必须与 execution-efficiency.md 的有界失败恢复配合:对一条命令与一个未变化的输入快照,先运行一次,分类失败(输入 / 依赖 / 环境 / 瞬时 provider / 权限 / 契约 / 科学阻塞),做一次具体修正后重试一次,绝不运行第三次实质相同的尝试,而是上报阻塞、确切证据、责任方与恢复动作。

对于昂贵的确定性操作(PDF 渲染、DOCX 渲染、格式转换、引用审计快照等),可使用可选的收据机制:

python scripts/execution_receipt.py check \ --receipt paper_rewriting_output/execution_receipts/pdf-render.json \ --operation pdf-render --tool "pdftoppm@<exact-version-or-path>" \ --input paper_rewriting_output/final_paper/paper.pdf \ --output paper_rewriting_output/visual_audit/pages
  • 退出0/REUSABLE:操作、工具身份、完整输入快照与完整输出快照全部匹配,可直接复用输出;
  • 退出3/MISS:执行一次该操作、验证结果后,用相同参数以record记录新收据;
  • 退出2/ERROR:修复畸形或缺失的收据输入,不得把它当作缓存命中。

注意收据只证明计算同一性,不推断scientific_content_ready、visual_ready、引用正确性、作者批准、提交就绪或授权;人眼/多模态检查只能对实际检查过的同一对象与未受影响的依赖复用。

十、清洁重启(Clean Run)边界

只有用户明确请求重启时才允许重启。此时:

  1. 先解析确切的任务/输出范围;
  2. 保留现有运行,除非用户授权移除;
  3. 新的 Product Web 运行走正常任务创建路径;绝不擦除或重贴既有任务存储标签来强行进入 intake。

从 product-v1-workflow.md 看,公共 host 流程中"新任务"由当前 host 会话通过paperspine_open_task创建,续作则始终复用同一任务 ID、同一 profile 与同一事件数据库;这与 resume.md"不创建第二个任务"的红线一致。

结语:一份可执行的续作检查清单

综合 resume.md 与源码实现,任何中断后的安全续作都可以浓缩为如下清单:

  1. 判定权威:目录下有task_record.json且契约合法 → 走 ProductRunner 循环;否则确认是真正 legacy flat-output 布局后走 legacy 循环;
  2. 先扫描:legacy 任务先跑progress_check.py --markdown --write读next_stage;Web 任务先读host snapshot --summary;
  3. 反跳过:只补做缺失的科学工作,禁止伪造产物与占位文件;
  4. 有界重试:一次修正、一次重试,绝不第三次实质相同尝试;
  5. gate 验证:每完成一阶段跑--gate <stage>,final_audit通过前不得声明is_complete=true;
  6. 清洁重启:仅当用户明确要求时才重启,并保留旧运行。

仓库中与本文相关的源码与测试还包括 src/scripts/progress_check.py(与 dist 版本同源的主分支实现)、src/skill/references/resume.md(本指南对应方法文档的主分支镜像)以及 tests/test_progress_check.py 中的全部 gate 与扫描测试,可作为进一步深入阅读的入口。

  • AI 技能
  • AI 写作
  • 人工智能
  • 深度研究
  • AI 应用

【免费下载链接】PaperSpine

PaperSpine5 — local-first, evidence-bound paper research, writing, figures, review and delivery. Download: https://wubing2023.github.io/PaperSpine/v5/

项目地址:https://gitcode.com/gh_mirrors/pa/PaperSpine
点击查看免费下载

相关推荐

上一篇:shadcn-vue Command 命令菜单组件完全指南:从安装到源码级原理
下一篇:mp3tag4cxx的save()方法源码拆解:MP3文件是如何被逐字节重排重组保存的

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询