{"slug":"eo-archive","title":"eo-archive","summary":"归档 change：过四问验收门、结算工作区为 commit、冻结 change 目录。触发：归档 change / archive / /eo-archive。","platform":"Claude","tags":[],"authorName":"LLM Mart","authorSlug":"llm-mart","score":0,"source":"github","price":null,"verified":false,"createdAt":"2026-09-02T16:13:05.021154Z","repo":{"url":"https://github.com/SimpleEve/eo-skills","stars":31,"forks":6,"license":"MIT","updatedAt":"2026-09-24T03:41:00Z"},"bodyHtml":"<hr>\n<h2>name: eo-archive\ndescription: |\n归档 change：过四问验收门、结算工作区为 commit、冻结 change 目录。触发：归档 change / archive / /eo-archive。</h2>\n<h1>eo-archive — 变更归档</h1>\n<p>归档的本质：<strong>把世界结算成 commit，冻结 change 目录为审计历史</strong>。change 目录归档后整体冻结，<strong>不合并回任何文档</strong>。</p>\n<h2>核心理念</h2>\n<ol>\n<li><strong>四问核对是唯一硬门</strong>：change.md §2 逐条过——自动项有证据、人工项验收单已勾、阻塞项不通过禁止归档；豁免必须显式记录</li>\n<li><strong>冻结不可逆</strong>：<code>status: archived</code> 之后 change 目录只读；后续问题按性质走 /eo-fix 或新 change</li>\n<li><strong>commit 区间只是审计</strong>：归集的区间写入 frontmatter 备查</li>\n</ol>\n<h2>前置条件</h2>\n<ul>\n<li><strong>必须能找到 <code>.eo-project.json</code></strong>。同目录存在 <code>.eo-project.local.json</code> 时顶层字段覆盖合并（local 优先）。找不到 → 报错退出，提示运行 <code>/eo-project-init</code></li>\n<li>目标 <code>eo-doc/changes/&lt;change-id&gt;/change.md</code> 存在且 <code>status: implementing</code> 或 <code>reviewed</code>（存量 <code>done</code> 视同 reviewed，顺手改写）\n<ul>\n<li>draft/confirmed → 指出当前环节，回 /eo-change 或 /eo-implement；已 archived 直接告知</li>\n</ul>\n</li>\n</ul>\n<h2>工作流程（四层）</h2>\n<h3>第一层：四问核对门（唯一硬门）</h3>\n<ol>\n<li><strong>工作区无本 change 的未提交交付改动</strong>（业务代码或测试）。有 → 先结算成 <code>[&lt;change-id&gt;]</code> commit 再继续</li>\n<li><strong>§2 逐条核对</strong>：\n<ul>\n<li><strong>自动项</strong>：须有验证证据——implement 自验速报 / eo-test 报告（若挂了该闸门）/ 当前重跑。无证据 → 当前重跑补齐，或与用户确认豁免</li>\n<li><strong>人工项</strong>（「人工:」标记）：规范见 <a href=\"../eo-shared/acceptance.md\">../eo-shared/acceptance.md</a>——非空则 <code>acceptance.md</code> 必须存在且与集合一一对应（缺项/孤儿/重复 = 校验失败）；逐项核对勾选与异常行（用户勾的直接有效；agent 代勾必须带确认记录，缺记录按未勾）；验收基线之后存在改变人工项行为的 <code>[&lt;change-id&gt;]</code> 提交 → 受影响项按未勾（判不清 → 全部按未勾）</li>\n<li><strong>阻塞项不通过/未验</strong> → 禁止归档，按封闭选择协议（<a href=\"../eo-shared/questioning.md\">../eo-shared/questioning.md</a> §4）三选一：<strong>补齐</strong>（推荐——回 /eo-fix 循环内分支或 implement 修复；「不通过」= 修复循环输入，status 置回 implementing）/ <strong>显式豁免</strong>（§6 记录 + 验收单同项标豁免，双记录同 AC 编号）/ <strong>终止归档</strong></li>\n<li><strong>非阻塞项不通过</strong> → 记 backlog 继续，不挡归档</li>\n</ul>\n</li>\n<li><strong>信号闸门核验</strong>：§6 记录了命中信号且未豁免 → 对应闸门报告（test.md / review.md / change-review.md）须存在且结论通过；缺失或结论不通过 → 提示用户补跑或显式豁免（豁免补记 §6）</li>\n<li><strong>brief 与最终交付一致</strong>：校对 frontmatter <code>brief</code>，不符就地改写（口径见 <a href=\"../eo-shared/summary.md\">../eo-shared/summary.md</a>）</li>\n<li><strong>交付证据面核对</strong>：<code>evidence.md</code> 存在且「入口与环境 / 过程证据 / 怎么验」三段非空（规范见 <a href=\"../eo-shared/evidence.md\">../eo-shared/evidence.md</a>）。缺失或必备段为空 = 校验失败 → 按封闭选择协议（<a href=\"../eo-shared/questioning.md\">../eo-shared/questioning.md</a> §4）三选一：<strong>补齐</strong>（回 implement 或 /eo-fix 循环内分支）/ <strong>显式豁免</strong>（§6 记录）/ <strong>终止归档</strong>——不静默放行</li>\n<li><strong>归档前先发交付汇报，与确认提问同条消息发出</strong>（封闭选择，跨会话最终复核）：\n<ul>\n<li>交付汇报 = <strong>回复契约四条</strong>（<a href=\"../eo-shared/reply-contract.md\">../eo-shared/reply-contract.md</a>：做了什么 / 为什么这么做 / 主要产出 / 遇到的问题与解法）+ <strong>证据面渲染</strong>（引 evidence.md 的入口地址、截图指针、验收指引——引用不重建）+ 核对结果汇总一句</li>\n<li>汇报之后才是封闭选择确认项；尚有未勾人工项 → 主动提议「带我验收」逐项走查；核对通过后同步勾 change.md 的人工 AC</li>\n</ul>\n</li>\n</ol>\n<h3>第二层：工作区结算</h3>\n<ol>\n<li><code>git status</code> 检查工作区</li>\n<li><strong>属于本 change 的未提交改动</strong> → 提交，message 带 <code>[&lt;change-id&gt;]</code> 前缀（见 <a href=\"../eo-shared/conventions.md\">../eo-shared/conventions.md</a>）</li>\n<li><strong>无关脏改动</strong> → 留在工作区不动</li>\n<li>两类混在同一文件无法分离 → 停下问用户如何拆分</li>\n</ol>\n<h3>第三层：冻结元数据并提交</h3>\n<ol>\n<li>从 <code>base_commit..HEAD</code> 按 <code>[&lt;change-id&gt;]</code> 前缀归集本 change 的提交；单 commit 直取，多 commit 列出请用户确认；存在无前缀夹杂提交时请用户圈定</li>\n<li>写入 frontmatter：<code>commits: [&lt;区间&gt;]</code>（仅审计用）、<code>status: archived</code>（不可逆）</li>\n<li>更新 <code>eo-doc/changes/INDEX.md</code> 对应行，顺手对 seq 列查重（重号 → created 晚者让号，见 <a href=\"../eo-shared/conventions.md\">../eo-shared/conventions.md</a> §2）</li>\n<li>以上文档改动提交入库——可与第二层合为同一个 commit（推荐一次 change 一次 commit）；implement 已按批提交时，这就是一个小的收尾 meta commit</li>\n</ol>\n<h3>第四层：收尾</h3>\n<ol>\n<li><strong>投影同步</strong>：调用 <code>eo-sync run</code> 一次（内置 obsidian/github 适配器按启用配置执行——stub 投影 <code>status: archived</code>（<strong>tags 与文件位置不动</strong>：<code>eo-change</code> tag 是看板过滤锚点）、issue 兜底关闭、PR 按 <code>github.pr</code> 策略仅对 archived 生成；未启用目标跳过，机制见 <a href=\"../eo-shared/board-github.md\">../eo-shared/board-github.md</a>）。本次 run 产生身份字段回写（典型：PR URL、迟到的 issue 号）时，<strong>立即追加第二个收尾 commit</strong> <code>[&lt;change-id&gt;] sync 身份回写</code>（无回写则零额外 commit）——归档完成时工作区无未提交 SoT。本次 run 创建/更新了 PR → 回写 commit 后追加 <code>git push</code> 同一分支一次（追加推送自动进入 PR，合并后 SoT 含幂等键）；push 失败告警不阻塞归档（幂等键已在本地 SoT，随后续任意 push 传播）。sync 本身失败降级为告警不阻塞归档（投影可随时手动 <code>eo-sync run</code> 补上）\n<ul>\n<li><strong>冻结语义</strong>：归档后 change 目录冻结，<strong>唯一允许的后续写入 = eo-sync 身份字段回写</strong>（PR URL 只可能在 archived 后产生）；此后手动 run 若补写身份字段，作为工作区常规变更随下次提交走，不自动提交</li>\n</ul>\n</li>\n<li><strong>state 联动（配置驱动）</strong>：合并配置 <code>state.enabled: true</code> → 调用 <code>/eo-doc-manager sync</code>（cursor..HEAD 增量再生现状篇，完成推进游标；archive 只是该机制的两个触发点之一，同步语义以 doc-manager 为单一来源，本 skill 不复述）。sync 失败降级为告警不阻塞归档——游标未推进，手动重跑 sync 即续上。未启用 → 零动作</li>\n<li><strong>值得留的教训/决策</strong>：本 change 踩过的坑、定下的取舍，够 <a href=\"../eo-shared/lessons.md\">../eo-shared/lessons.md</a> / eo-project-record 门槛的，提议沉淀（用户点头才写）</li>\n<li>对话速报（不写额外文件）：</li>\n</ol>\n<pre><code>归档完成：&lt;change-id&gt;\n- 四问核对：自动项 &lt;n&gt;/&lt;n&gt; 有证据；人工项 &lt;m&gt;/&lt;m&gt; 已勾；豁免 N 项（已记 §6）\n- commit 区间：&lt;...&gt;（N 个提交）\n</code></pre>\n<h2>关键约束</h2>\n<table>\n<thead>\n<tr>\n<th>约束</th>\n<th>说明</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>不反写任何文档</td>\n<td>change 内容不合并回任何文件；归档即冻结为审计历史</td>\n</tr>\n<tr>\n<td>四问门禁</td>\n<td>阻塞项未过必须走「补齐 / 显式豁免 / 终止」三选一，不得静默放行；非阻塞项记 backlog 可放行</td>\n</tr>\n<tr>\n<td>证据面硬门</td>\n<td>evidence.md 缺失或三段有空 = 校验失败，三选一不静默放行</td>\n</tr>\n<tr>\n<td>交付汇报硬步骤</td>\n<td>确认提问前必发交付汇报（回复契约四条 + 证据面渲染），与确认同条消息；不得只发一句汇总</td>\n</tr>\n<tr>\n<td>信号闸门核验</td>\n<td>命中且未豁免的闸门报告缺失或结论不通过 → 提示补跑或豁免，不静默放行</td>\n</tr>\n<tr>\n<td>归档不可逆</td>\n<td>archived 后不回退 status；后续问题走 /eo-fix 或新 change</td>\n</tr>\n<tr>\n<td>区间仅审计</td>\n<td>commit 区间只写 frontmatter 备查</td>\n</tr>\n<tr>\n<td>一次一个</td>\n<td>一次归档一个 change；多个待归档时逐个走完四层</td>\n</tr>\n</tbody>\n</table>\n","files":[{"path":"SKILL.md","sizeBytes":8118,"isText":true}],"reviewScore":null,"reviewSummary":null,"trust":{"provenance":"trusted-source-unreviewed","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow.","bodySource":null},"bodyLocked":false,"purchaseUrl":null,"sourceUrl":null,"report":{"provenance":"trusted-source-unreviewed","screen":{"ran":true,"outcome":"clean","suspicious":0,"notes":0,"hiddenCharacters":false},"virusScan":{"engine":"clamav","status":"clean","scannedAt":"2026-09-02T16:13:19.467724Z","sha256":"58BAC7F83D0EB4988E2B2EBF0F5D733FD4B63D639EC88C5C0F562339F3844719","sizeBytes":4146},"review":null,"source":{"repositoryUrl":"https://github.com/SimpleEve/eo-skills","path":"eo-archive","license":"MIT","commit":"a5062887a6abcb255b4745f871208be292484bfa","subtreeSha":"19BAEA53ECC5CC596BB0738018DA75BC2D8B6D9D11DB871E38F55A9ED97854EB","lastSyncedAt":"2026-09-27T19:48:06.599057Z"},"reviewedAt":"2026-09-02T16:14:43.995716Z","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow."},"install":[{"target":"skills-cli","command":"npx skills add https://github.com/SimpleEve/eo-skills/tree/main/eo-archive"},{"target":"claude-code","command":"claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install simpleeve-eo-skills@llmmart"},{"target":"git","command":"git clone https://github.com/SimpleEve/eo-skills.git"}]}