[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"i-ri:search-line":3,"i-ri:moon-line":8,"i-ri:sun-line":10,"i-ri:menu-3-line":12,"i-ri:close-line":14,"notes-module-items-ai":16,"notes-page-ai-05-development-workflow\u002F01-task-recovery":74,"i-ri:arrow-left-s-line":308,"i-ri:menu-2-line":310,"i-ri:arrow-right-s-line":312,"i-ep:copy-document":314},{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":7},0,24,false,"\u003Cpath fill=\"currentColor\" d=\"m18.031 16.617l4.283 4.282l-1.415 1.415l-4.282-4.283A8.96 8.96 0 0 1 11 20c-4.968 0-9-4.032-9-9s4.032-9 9-9s9 4.032 9 9a8.96 8.96 0 0 1-1.969 5.617m-2.006-.742A6.98 6.98 0 0 0 18 11c0-3.867-3.133-7-7-7s-7 3.133-7 7s3.133 7 7 7a6.98 6.98 0 0 0 4.875-1.975z\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":9},"\u003Cpath fill=\"currentColor\" d=\"M10 7a7 7 0 0 0 12 4.9v.1c0 5.523-4.477 10-10 10S2 17.523 2 12S6.477 2 12 2h.1A6.98 6.98 0 0 0 10 7m-6 5a8 8 0 0 0 15.062 3.762A9 9 0 0 1 8.238 4.938A8 8 0 0 0 4 12\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":11},"\u003Cpath fill=\"currentColor\" d=\"M12 18a6 6 0 1 1 0-12a6 6 0 0 1 0 12m0-2a4 4 0 1 0 0-8a4 4 0 0 0 0 8M11 1h2v3h-2zm0 19h2v3h-2zM3.515 4.929l1.414-1.414L7.05 5.636L5.636 7.05zM16.95 18.364l1.414-1.414l2.121 2.121l-1.414 1.414zm2.121-14.85l1.414 1.415l-2.121 2.121l-1.414-1.414zM5.636 16.95l1.414 1.414l-2.121 2.121l-1.414-1.414zM23 11v2h-3v-2zM4 11v2H1v-2z\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":13},"\u003Cpath fill=\"currentColor\" d=\"M3 4h18v2H3zm6 7h12v2H9zm-6 7h18v2H3z\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":15},"\u003Cpath fill=\"currentColor\" d=\"m12 10.587l4.95-4.95l1.414 1.414l-4.95 4.95l4.95 4.95l-1.415 1.414l-4.95-4.95l-4.949 4.95l-1.414-1.415l4.95-4.95l-4.95-4.95L7.05 5.638z\"\u002F>",[17,22,26,30,34,38,42,46,50,54,58,62,66,70],{"path":18,"title":19,"meta":20},"\u002Fnotes\u002Fai\u002F01-llm-basics\u002F01-hello-llm","LLM 交互基础：透过现象看本质",{"date":-1,"tags":-1,"summary":-1,"lastUpdated":21},"2026-11-05T09:47:15.000Z",{"path":23,"title":24,"meta":25},"\u002Fnotes\u002Fai\u002F01-llm-basics\u002F02-streaming-and-prompts","进阶交互：流式传输与提示词工程",{"date":-1,"tags":-1,"summary":-1,"lastUpdated":21},{"path":27,"title":28,"meta":29},"\u002Fnotes\u002Fai\u002F01-llm-basics\u002F03-function-calling","结构化输出与 Function Calling",{"date":-1,"tags":-1,"summary":-1,"lastUpdated":21},{"path":31,"title":32,"meta":33},"\u002Fnotes\u002Fai\u002F02-agent-architecture\u002F01-tool-use","Agent 核心能力 ①：Tool Use（工具调用）",{"date":-1,"tags":-1,"summary":-1,"lastUpdated":21},{"path":35,"title":36,"meta":37},"\u002Fnotes\u002Fai\u002F02-agent-architecture\u002F02-mini-cursor-cli","实战项目：Mini Cursor（CLI 版）",{"date":-1,"tags":-1,"summary":-1,"lastUpdated":21},{"path":39,"title":40,"meta":41},"\u002Fnotes\u002Fai\u002F02-agent-architecture\u002F03-memory","Agent 核心能力 ②：Memory（记忆管理）",{"date":-1,"tags":-1,"summary":-1,"lastUpdated":21},{"path":43,"title":44,"meta":45},"\u002Fnotes\u002Fai\u002F02-agent-architecture\u002F04-planning","Agent 核心能力 ③：Planning（规划能力）",{"date":-1,"tags":-1,"summary":-1,"lastUpdated":21},{"path":47,"title":48,"meta":49},"\u002Fnotes\u002Fai\u002F02-agent-architecture\u002F05-review-diff-chunking","代码改了很多，AI 为什么只审了前面？",{"date":-1,"tags":-1,"summary":-1,"lastUpdated":21},{"path":51,"title":52,"meta":53},"\u002Fnotes\u002Fai\u002F02-agent-architecture","Agent 架构笔记",{"date":-1,"tags":-1,"summary":-1,"lastUpdated":21},{"path":55,"title":56,"meta":57},"\u002Fnotes\u002Fai\u002F03-rag\u002F01-vector-db-and-embeddings-node","RAG ①：Embeddings 与向量数据库入门（Node.js 优先）",{"date":-1,"tags":-1,"summary":-1,"lastUpdated":21},{"path":59,"title":60,"meta":61},"\u002Fnotes\u002Fai\u002F04-document-extraction\u002F01-ocr-field-evidence","OCR 读对了字，为什么地址仍然错？",{"date":-1,"tags":-1,"summary":-1,"lastUpdated":21},{"path":63,"title":64,"meta":65},"\u002Fnotes\u002Fai\u002F05-development-workflow\u002F01-task-recovery","AI 任务做一半，中断后怎么继续？",{"date":-1,"tags":-1,"summary":-1,"lastUpdated":21},{"path":67,"title":68,"meta":69},"\u002Fnotes\u002Fai","AI 应用开发",{"date":-1,"tags":-1,"summary":-1,"lastUpdated":21},{"path":71,"title":72,"meta":73},"\u002Fnotes\u002Fai\u002Froadmap","AI Agent 全栈开发学习路线图 (Roadmap)",{"date":-1,"tags":-1,"summary":-1,"lastUpdated":21},{"id":75,"type":76,"sourcePath":77,"routePath":63,"path":63,"title":64,"description":78,"updatedAt":21,"meta":79,"body":88,"toc":300},"bm90ZTpub3Rlcy9haS8wNS1kZXZlbG9wbWVudC13b3JrZmxvdy8wMS10YXNrLXJlY292ZXJ5Lm1k","note","notes\u002Fai\u002F05-development-workflow\u002F01-task-recovery.md","让 AI 完成一个跨文件的开发任务，可能要经历理解需求、修改、测试和审查。对话中断或上下文换了一轮以后，代码还在，但“上次做到哪一步”并不一定能从最后一句话看出来。",{"id":75,"type":76,"sourcePath":77,"slug":80,"title":64,"updatedAt":21,"description":78,"tags":81,"date":85,"comment":86,"summary":87,"lastUpdated":21},"ai\u002F05-development-workflow\u002F01-task-recovery",[82,83,84],"AI","工程实践","工作流","2026-10-13",true,"从任务定义、当前状态和完成依据三方面保存记录。恢复时先核对工作区与证据，再决定继续、重查或等待依赖。",{"type":89,"children":90},"root",[91,99,104,109,116,121,126,131,136,142,147,152,219,224,230,235,248,253,258,264,269,274,279,285,290,295],{"type":92,"tag":93,"props":94,"children":96},"element","h1",{"id":95},"ai-任务做一半中断后怎么继续",[97],{"type":98,"value":64},"text",{"type":92,"tag":100,"props":101,"children":102},"p",{},[103],{"type":98,"value":78},{"type":92,"tag":100,"props":105,"children":106},{},[107],{"type":98,"value":108},"例如 A 已完成，B 改了一半，C 依赖 B。重新开始既不能全部重做，也不能因为 B 的文件已经存在，就让 C 接着执行。",{"type":92,"tag":110,"props":111,"children":113},"h2",{"id":112},"保存聊天记录或待办清单够不够",[114],{"type":98,"value":115},"保存聊天记录或待办清单，够不够？",{"type":92,"tag":100,"props":117,"children":118},{},[119],{"type":98,"value":120},"短任务通常够用。改动一旦涉及依赖和多轮验证，一句“已完成，测试通过”就缺少依据：测试是哪次跑的，后来有没有再改，用户确认的选择又在哪里？",{"type":92,"tag":100,"props":122,"children":123},{},[124],{"type":98,"value":125},"可以靠版本记录和人工交接，也可以把任务状态写成可检查的文件。这个工作流选择后者，用 Markdown 保存需求决定、执行计划与结果。目标是下一次能继续判断，不是让每个小改动都生成一套文档。",{"type":92,"tag":100,"props":127,"children":128},{},[129],{"type":98,"value":130},"需求记录保存决定和边界，执行计划承接当前要做的事；需要分版本推进时，再增加里程碑。入口文档负责导航，避免多处复制同一份约定。",{"type":92,"tag":100,"props":132,"children":133},{},[134],{"type":98,"value":135},"目前已有校验与压力场景材料，尚未量化效率；记录是否值得维护，要看它能否减少恢复时的重复判断，而不是文件数量。",{"type":92,"tag":110,"props":137,"children":139},{"id":138},"计划里应该留下哪些信息",[140],{"type":98,"value":141},"计划里应该留下哪些信息？",{"type":92,"tag":100,"props":143,"children":144},{},[145],{"type":98,"value":146},"先分清“原本要做什么”和“现在做到了哪里”。前者包括任务、依赖、写入范围和验收方式，后者包括当前阶段、任务状态和恢复位置。",{"type":92,"tag":100,"props":148,"children":149},{},[150],{"type":98,"value":151},"项目再单独保存完成回执，记录改动文件、验证命令、退出码、结果摘要和审查结论。三部分各回答一个问题：",{"type":92,"tag":153,"props":154,"children":155},"table",{},[156,175],{"type":92,"tag":157,"props":158,"children":159},"thead",{},[160],{"type":92,"tag":161,"props":162,"children":163},"tr",{},[164,170],{"type":92,"tag":165,"props":166,"children":167},"th",{},[168],{"type":98,"value":169},"记录",{"type":92,"tag":165,"props":171,"children":172},{},[173],{"type":98,"value":174},"恢复时用来判断什么",{"type":92,"tag":176,"props":177,"children":178},"tbody",{},[179,193,206],{"type":92,"tag":161,"props":180,"children":181},{},[182,188],{"type":92,"tag":183,"props":184,"children":185},"td",{},[186],{"type":98,"value":187},"任务定义",{"type":92,"tag":183,"props":189,"children":190},{},[191],{"type":98,"value":192},"这一步需要做到什么程度？",{"type":92,"tag":161,"props":194,"children":195},{},[196,201],{"type":92,"tag":183,"props":197,"children":198},{},[199],{"type":98,"value":200},"当前状态",{"type":92,"tag":183,"props":202,"children":203},{},[204],{"type":98,"value":205},"上次停在哪里，下一步依赖谁？",{"type":92,"tag":161,"props":207,"children":208},{},[209,214],{"type":92,"tag":183,"props":210,"children":211},{},[212],{"type":98,"value":213},"执行证据",{"type":92,"tag":183,"props":215,"children":216},{},[217],{"type":98,"value":218},"已完成的结论由什么支持？",{"type":92,"tag":100,"props":220,"children":221},{},[222],{"type":98,"value":223},"默认假设、被拒方案和未决问题也要能找回。用户修改决定后，先更新对应记录，再判断哪些任务受影响，避免在执行总结里悄悄换掉需求。",{"type":92,"tag":110,"props":225,"children":227},{"id":226},"再次开始时先相信哪一份记录",[228],{"type":98,"value":229},"再次开始时，先相信哪一份记录？",{"type":92,"tag":100,"props":231,"children":232},{},[233],{"type":98,"value":234},"先读取工作区，再对照状态和回执。项目的恢复处理大致如下：",{"type":92,"tag":236,"props":237,"children":242},"pre",{"className":238,"code":240,"language":98,"meta":241},[239],"language-text","A 已完成   → 看完成回执，保留已经做过的工作\nB 进行中   → 核对实际改动和已有证据，继续未完成部分\nC 待开始   → 等 B 满足依赖\n","",[243],{"type":92,"tag":244,"props":245,"children":246},"code",{"__ignoreMap":241},[247],{"type":98,"value":240},{"type":92,"tag":100,"props":249,"children":250},{},[251],{"type":98,"value":252},"状态写了完成，不代表旧结果永久有效。B 如果改到 A 依赖的行为，或者环境发生变化，A 的证据就需要重新评估。保留工作与检查证据是否过期，要同时进行。",{"type":92,"tag":100,"props":254,"children":255},{},[256],{"type":98,"value":257},"代码写完和审查通过也分别记录。下次回来时，才能知道是在继续实现，还是还缺正式审查与交付步骤。",{"type":92,"tag":110,"props":259,"children":261},{"id":260},"脚本能替人确认任务真的完成吗",[262],{"type":98,"value":263},"脚本能替人确认任务真的完成吗？",{"type":92,"tag":100,"props":265,"children":266},{},[267],{"type":98,"value":268},"脚本可以检查记录结构。项目的校验会检查必填字段、依赖是否存在或成环、执行策略和并发参数是否一致，以及完成任务有没有必需的成功命令与审查记录。状态写入先通过这些条件，再用临时文件替换，减少半份状态残留。",{"type":92,"tag":100,"props":270,"children":271},{},[272],{"type":98,"value":273},"但脚本不会重跑历史命令，也不知道断言有没有测到本次行为。因此仍要回看验证发生的时间、是否在最后一次修改之后、使用真实环境还是替身。",{"type":92,"tag":100,"props":275,"children":276},{},[277],{"type":98,"value":278},"例如导入功能中的字段归一化，可以独立给输入、检查输出，逐个行为先测失败再实现；选文件与上传则需要环境验收。文档看内容、链接与构建，不为形式补单元测试。恢复时缺少原来的失败证据，就记录缺口，不必破坏已有实现重新演一次。",{"type":92,"tag":110,"props":280,"children":282},{"id":281},"两个任务没有依赖就能并行吗",[283],{"type":98,"value":284},"两个任务没有依赖，就能并行吗？",{"type":92,"tag":100,"props":286,"children":287},{},[288],{"type":98,"value":289},"还要看会不会写同一个文件。两个任务可能逻辑独立，却同时修改 schema、锁文件或入口。项目在任务中声明写入范围，再结合依赖图安排串行或分批并行，检查并发数和工作区隔离配置。",{"type":92,"tag":100,"props":291,"children":292},{},[293],{"type":98,"value":294},"实际会改哪些文件，仍由执行者判断，脚本不能从任务标题推导。各任务回到统一回执，有疑问或缺上下文的继续保留问题，不因同批其他任务成功就整批放行。分发上下文时，也保留验收、依赖、写入范围和授权条件。",{"type":92,"tag":100,"props":296,"children":297},{},[298],{"type":98,"value":299},"小改动可以走轻量计划，只记范围、状态和证据；涉及公共接口、迁移或多个里程碑，再展开完整流程。代码与测试沿用项目结构，一次性检查工具放临时目录，文档目录保留约定和证据。",{"title":241,"searchDepth":301,"depth":301,"links":302},2,[303,304,305,306,307],{"id":112,"depth":301,"text":115},{"id":138,"depth":301,"text":141},{"id":226,"depth":301,"text":229},{"id":260,"depth":301,"text":263},{"id":281,"depth":301,"text":284},{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":309},"\u003Cpath fill=\"currentColor\" d=\"m10.828 12l4.95 4.95l-1.414 1.415L8 12l6.364-6.364l1.414 1.414z\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":311},"\u003Cpath fill=\"currentColor\" d=\"M3 4h18v2H3zm0 7h12v2H3zm0 7h18v2H3z\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":313},"\u003Cpath fill=\"currentColor\" d=\"m13.172 12l-4.95-4.95l1.414-1.413L16 12l-6.364 6.364l-1.414-1.415z\"\u002F>",{"left":4,"top":4,"width":315,"height":315,"rotate":4,"vFlip":6,"hFlip":6,"body":316},1024,"\u003Cpath fill=\"currentColor\" d=\"M768 832a128 128 0 0 1-128 128H192A128 128 0 0 1 64 832V384a128 128 0 0 1 128-128v64a64 64 0 0 0-64 64v448a64 64 0 0 0 64 64h448a64 64 0 0 0 64-64z\"\u002F>\u003Cpath fill=\"currentColor\" d=\"M384 128a64 64 0 0 0-64 64v448a64 64 0 0 0 64 64h448a64 64 0 0 0 64-64V192a64 64 0 0 0-64-64zm0-64h448a128 128 0 0 1 128 128v448a128 128 0 0 1-128 128H384a128 128 0 0 1-128-128V192A128 128 0 0 1 384 64\"\u002F>"]