Mechanical rename produced by scripts/msd-rename.cjs: gsd/Gsd/GSD -> msd/Msd/MSD across contents and paths, upstream package/repo coordinates -> @golem15/msd-core and golem15com/msd-core. Deep links into upstream history, sibling upstream packages, the GSD-2 import feature, CHANGELOG.md and .changeset/ are kept as-is. Hand edits on top: MSD block-letter banner and logos, LICENSE copyright line, package/plugin identity, regenerated lockfile, install-tree fixtures, derived registries and benchmark baseline; migration checksum baseline re-locked (MSD keeps its own install state, so no install had applied the old sums); sort-order and regex-escaped expectations in tests adjusted.
5.2 KiB
如何从 GSD-2 迁移
目标: 将较旧的 GSD-2 项目(.gsd/ 目录布局)升级迁移到 MSD Core(.planning/ 布局),并可选择将项目仓库中已有的 ADR、PRD 或规范文档纳入新的规划结构。
前提条件: MSD Core 已安装。GSD-2 项目目录在磁盘上可访问。
了解迁移内容
GSD-2 使用 .gsd/ 目录作为规划根目录,MSD Core 使用 .planning/。迁移过程读取 .gsd/ 中的工件,并将其写入所有 MSD Core 命令所期望的标准 .planning/ 结构中。
| GSD-2 中的现有内容 | /msd-import --from-gsd2 产生的内容 |
|---|---|
.gsd/PROJECT.md |
.planning/PROJECT.md |
.gsd/ROADMAP.md |
.planning/ROADMAP.md |
.gsd/STATE.md |
.planning/STATE.md |
.gsd/phases/ 目录 |
.planning/phases/ 目录 |
阶段 PLAN.md 文件 |
MSD Core {NN}-{MM}-PLAN.md 文件(强制重命名) |
冲突检测会在写入任何文件之前运行。如果目标目录中已存在 PROJECT.md 且导入内容与之矛盾,迁移将在 BLOCKER 门控处停止,并列出需要您解决的冲突。
执行迁移
迁移当前目录
/msd-import --from-gsd2
MSD 读取当前工作目录下的 .gsd/,并将迁移后的工件写入 .planning/。
从其他路径迁移
/msd-import --from-gsd2 --path ~/projects/old-project
当 GSD-2 项目不在当前工作目录时,使用 --path 指定路径。
解决冲突
如果冲突检测发现阻断项——例如,GSD-2 的技术栈声明与现有的 .planning/PROJECT.md 相矛盾——它会打印冲突报告并停止,不写入任何文件。
阅读报告,解决矛盾(编辑源文档或现有规划工件),然后重新运行 /msd-import --from-gsd2。迁移可以安全地重复运行,直至顺利通过。
导入外部计划文件
如果您拥有的是独立的计划文档(团队规划文档、Markdown 规范、导出的任务列表),而非完整的 GSD-2 项目,请使用 --from 代替:
/msd-import --from /tmp/team-plan.md
MSD 执行相同的冲突检测流程,将内容转换为 MSD Core PLAN.md 格式,并使用计划检查器验证结果。验证完成后,您将看到目标文件名和后续步骤。
吸收现有文档
如果您的仓库中已包含 ADR(架构决策记录)、PRD 或规范文档,可在迁移完成后使用 /msd-ingest-docs 将其合并到 .planning/ 结构中:
扫描整个仓库(自动检测模式)
/msd-ingest-docs
如果 .planning/ 已经存在(例如,刚完成迁移后),MSD 默认使用合并模式——将导入的文档与已有内容并行合并,而非覆盖。
限定到特定目录
/msd-ingest-docs docs/
/msd-ingest-docs docs/adr/
使用显式优先级清单
当文档类型混合,或您希望控制冲突时哪份文档优先:
/msd-ingest-docs --manifest ingest.yaml
清单是一个 YAML 文件,每个文档列出 {path, type, precedence?}。请参阅 Commands 中 --manifest 标志说明,了解其期望的结构。
强制指定模式
/msd-ingest-docs --mode merge # 合并到现有 .planning/
/msd-ingest-docs --mode new # 从零开始引导(覆盖)
输出: /msd-ingest-docs 始终生成一个 INGEST-CONFLICTS.md,其中包含三个类别——自动解决、竞争变体和未解决的阻断项。每次导入运行后请审查此文件。仅在 LOCKED 与 LOCKED 的 ADR 矛盾时才会硬停止;其他所有情况均会呈现供您审查,而不会被静默丢弃。
验证迁移后的项目
迁移及文档导入完成后,确认项目状态的一致性:
/msd-health
/msd-health --repair
/msd-health 检查 .planning/ 目录的完整性并报告任何偏差。--repair 会自动修复可恢复的问题。
然后检查 MSD Core 是否能够读取您的项目状态:
/msd-progress
如果项目迁移顺利,您将看到当前阶段状态和推荐的下一步操作。从此处起,适用标准 MSD Core 工作流程。
条件说明:什么能迁移,什么不能
| 情形 | 处理方式 |
|---|---|
当前目录中存在 .gsd/ |
运行 /msd-import --from-gsd2(无需 --path) |
.gsd/ 在其他目录 |
使用 --path ~/projects/old-project |
| 您有独立的计划文档,而非完整的 GSD-2 项目 | 使用 /msd-import --from /path/to/plan.md |
您在 docs/adr/ 中有 ADR |
迁移后运行 /msd-ingest-docs docs/adr/ |
| 您有 ADR、PRD 和规范的混合文档 | 在仓库根目录运行 /msd-ingest-docs,它会自动分类 |
| 冲突检测报告阻断项 | 解决列出的矛盾后重新运行;在所有阻断项清除前不会写入任何文件 |
| 您不确定迁移是否成功 | 运行 /msd-health 和 /msd-progress 进行确认 |
| INGEST-CONFLICTS.md 列出未解决的阻断项 | 这些需要手动解决,相关文档才能被纳入规划 |