研发协作
变更完成后归档提案并把规格增量合并进活文档时用
当变更已部署、任务全部完成,需要把 change 的 spec delta(ADDED/MODIFIED/REMOVED)合并进 living spec 并归档变更文件夹时使用。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 49/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 85/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
变更完成后归档提案并把规格增量合并进活文通用
解决思路
- 归档前先验证实现已完成:检查 spec/changes/{change-id}/IMPLEMENTED 标记是否存在,查看 tasks.md,运行 git status 确认没有未提交的工作,并向用户确认所有任务已完成并测试、变更已部署到生产、是否继续归档。
- 审查要合并的 spec delta:用 find spec/changes/{change-id}/specs -name "*.md" -type f 列出所有 delta 文件并逐个读取,识别受影响的能力、ADDED/MODIFIED/REMOVED 的需求数量、以及它们在 living spec 中的归属位置。
- 创建带时间戳的归档目录:TIMESTAMP=$(date +%Y-%m-%d),然后 mkdir -p spec/archive/${TIMESTAMP}-{change-id}(例如 spec/archive/2025-10-26-add-user-auth)。
- 合并 ADDED 需求:定位目标 living spec 文件,把新增需求(含全部 scenario)按原样追加到文件末尾(footer/appendix 之前),保持正确的 markdown 格式,可用 cat >> spec/specs/authentication/spec.md << 'EOF' ... EOF 方式追加。
- 合并 MODIFIED 需求:在 living spec 中按需求名定位,用 delta 中的完整更新文本替换整个需求块(含所有 scenario),不要做局部合并;可先用 grep -n 定位起始行、再找下一个 ### Requirement: 确定结束行,用 sed 删除后插入,或推荐手动在编辑器中删除整块再粘贴新内容。
- 合并 REMOVED 需求:在 living spec 中定位该需求并删除整个需求块,同时添加弃用注释,例如 <!-- Removed 2025-10-26: reason -->,或保留删除线形式的记录。
- 处理 RENAMED(少见):按旧名定位需求,仅修改标题为 ### Requirement: NewName,内容保持不变;通常建议改用 MODIFIED 模式。
- 合并完成后移动变更文件夹:mv spec/changes/{change-id} spec/archive/${TIMESTAMP}-{change-id},并用 ls -la 确认归档存在、ls spec/changes/ | grep "{change-id}" 确认原目录已清空。
- 验证 living spec 结构:用 grep -n "### Requirement:" 和 grep -n "#### Scenario:" 检查格式,统计每个 spec 的需求数量,手动打开修改过的 spec 确认 markdown 正确、需求逻辑连贯、无重复需求。
- 遵循合并逻辑:ADDED 追加到文件末尾;MODIFIED 按需求名整块替换(旧版本保留在归档中);REMOVED 删除整块并加弃用注释;RENAMED 只改标题。
- 归档前先验证合并结果:运行 git diff spec/specs/ 审查改动,确认无误后 git add spec/specs/ 并提交(如 "Merge spec deltas from add-user-auth"),然后再执行归档移动。
- 采用原子归档:移动整个 change 文件夹,不要只挑单个文件移动,避免产生孤立文件。
- 把归档视为只读历史:绝不修改 spec/archive/ 中的文件。
- 采用推荐的 git 提交策略:第一次提交合并 delta(提交信息中列出 Added/Modified/Removed 的需求),第二次提交归档变更(git add spec/archive/ spec/changes/)。
- 遇到合并冲突时:若名称相同但内容不同则用 MODIFIED 模式;若确实是不同需求则重命名其一;若是误重复则保留正确版本。
- 找不到要修改/删除的需求时:用 grep -i "login" spec/specs/**/*.md 按部分名称搜索,确认是否已被删除或位于其他能力文件中。
- 合并后 living spec 出现格式错误时:手动修复格式,重新运行 grep -n "###" spec/specs/**/*.md 验证,确保标题层级一致。
- 回滚归档时反向操作:把文件夹从 archive 移回 changes,并从 living spec 中移除已合并的内容。
适用边界 · 注意事项
- 实现尚未完成或未部署到生产时不要归档。
- 不要在合并 delta 之前就把 change 文件夹移入归档。
- 不要修改 spec/archive/ 中已归档的文件,归档应视为不可变历史。