STDD生命周期 —— 双轨划分

STDD 生命周期 —— Skill 程序与项目文档的双轨划分

STDD 涉及两条独立演进的生命周期轨道:① Skill 程序(AI 框架加载的执行引擎)和 ② 项目文档(具体项目的 STDD 实例状态)。理解这两者的关系是理解 STDD 跨框架切换、版本管理、多项目协同的关键。


第一轨:STDD Skill 生命周期(程序本体)

Skill 是 STDD 的执行引擎 —— 从仓库克隆到 AI 框架的那份程序代码。它的生命周期独立于任何项目。

1.1 安装阶段

  • github.com/leonai42/stdd 克隆仓库
  • 安装依赖(pyyaml / pytest 等)
  • 注册到 AI 框架的 skill 系统(Hermes: 创建 SKILL.md;OpenCode: 拷贝到项目目录)
  • 验证可用(stdd --version

安装位置决定了 Skill 的生命周期范围:

框架安装位置生命周期范围
Hermes全局 skill 目录(框架主目录下)一次安装,所有项目共用
OpenCode项目目录内每个项目独立安装和持有
Claw项目目录内每个项目独立安装和持有

1.2 版本演进

  • STDD 自身版本号(当前 V2.3),记录在 CHANGELOG.md
  • 版本迭代周期由上游仓库决定
  • Skill 程序版本与框架版本无关 —— 用户可自行决定何时更新 Skill
  • 无标准 Release 机制,版本检测依赖 CHANGELOG 头部解析

1.3 跨框架部署差异

  • Hermes 模式:全局一份 Skill 程序,stdd init 在项目目录创建实例。Skill 与实例是调用关系,升级 Skill 所有项目即时受益
  • OpenCode / Claw 模式:Skill 程序整体拷贝到项目目录。每项目一份独立副本,升级需逐一处理。版本漂移不可控

1.4 升级策略

  • 原则:禁止自动升级。升级是赋权行为(授权),用户可能不想升级
  • 推荐做法:AI 检测到版本差异时告知用户,由用户决定是否升级。AI 可提议但不可擅自执行
  • 版本感知交互:用户说"用 STDD V2.5 的流程做 xxx" → AI 查 Skill 版本 → 若不符则提议升级 → 用户授权后执行 → 继续任务
  • 向下兼容:新版本 Skill 应能读取旧版本项目文档

第二轨:项目内 STDD 文档生命周期(实例状态)

项目文档是 STDD 在具体项目中的实例化 —— 通过 stdd init 创建,承载开发过程中所有阶段产物和状态信息。

2.1 初始化 —— init

  • 在项目根目录执行 stdd init,产生 .stdd/ 目录(配置 + 技能引用)和 changes/ 目录(变更实例容器)
  • init 本质是"安装赋权" —— 给项目挂载 STDD 实例
  • 项目初始化后,后续使用不再需要 init
  • 理想体验:用户说"用 STDD 开发 xxx",AI 自动检测是否已 init,若无则自动完成

2.2 变更生命周期 —— new → 执行 → deliver

  • 启动变更:stdd new <change-name> → 创建变更目录 changes/<change-name>/
  • 六阶段执行:
P1 UNDERSTAND → proposal.md → Gate 1 确认
P2 SPEC       → design.md + specs/*.md + test-plan.md → Gate 2 确认
P3 SLICE      → tasks.md + slices.md
P4 BUILD      → TDD 实现代码
P5 VERIFY     → test-report.md + 11 类失败模式检查 → Gate 3 确认
P6 DELIVER    → archive + merge specs + git tag
  • 归档:stdd archive <change-name> 结束变更生命周期
  • 中止:stdd abort <change-name> 放弃变更
  • 回滚:stdd rollback <change-name> 从 archive 恢复

2.3 状态文档体系

项目目录下的 STDD 实例文件结构:

项目根目录/
    .stdd/                    # init 产生的配置目录
        config.yaml           # 项目级 STDD 配置
        skills/               # 各阶段 skill 引用
        templates/            # 文档模板
        standards/            # 语言规范
    changes/
        <change-name>/
            .stdd-state.yaml  # 当前阶段、Gate 状态、版本快照 ★
            proposal.md       # P1 产物
            design.md         # P2 产物
            specs/            # P2 产物(行为规格)
                *.md
            test-plan.md      # P2 产物(测试方案)
            tasks.md          # P3 产物
            slices.md         # P3 产物
            test-report.md    # P5 产物
            design-adjustments.md  # P4-P5 产物

核心设计:.stdd-state.yaml 是状态的枢纽 —— 记录当前阶段、Gate 状态、STDD 版本号。它的存在使得跨框架切换、跨 session 续电成为可能。

2.4 跨框架切换 —— 文档作为状态载体

项目文档生命周期的核心价值:同一个项目的 STDD 实例可以在不同 AI 框架间无缝迁移。

AI 框架变换        项目文档(不变)
Hermes  ————→  .stdd/ + changes/  ————→  OpenCode
  │                                          │
  │ 加载 Skill V2.3                         │ 加载 Skill V2.5
  │ 读取 .stdd-state.yaml                   │ 读取 .stdd-state.yaml
  │ 发现:P2 完成,Gate 2 已确认            │ 发现:P2 完成,Gate 2 已确认
  │ 进入 P3 SLICE                           │ 进入 P3 SLICE
  └──────── 同一状态,不同引擎 ──────────────┘

切换条件:

  • 项目文档格式与版本号兼容(向下兼容假设成立)
  • 新框架安装了 STDD Skill(版本可以不同)
  • 新 AI 能读取 .stdd-state.yaml 恢复上下文

三、双轨关系

3.1 调用关系而非安装关系

理想架构下,Skill 程序与项目文档是调用关系:

Skill 程序(AI 框架的全局资产)      项目文档(项目根的独立资产)
  ┌────────────┐                      ┌──────────────┐
  │  Hermes    │  ──调用──→            │  .stdd/      │
  │  加载      │                      │  changes/    │
  │  执行      │  ←──产物──            │  propsal.md  │
  │  无状态    │                      │  design.md   │
  └────────────┘                      │  specs/      │
       ↓ 切换框架                     │  state.yaml  │
  ┌────────────┐                      └──────────────┘
  │  OpenCode  │  ──调用──→            ↑               ↑
  │  加载      │                      │ 文档承载状态   │
  │  执行      │                      │ 不绑定框架     │
  └────────────┘                      └───────────────┘

3.2 一对多关系

  • 一个 Skill 程序 → 多个项目实例:全局更新一次 Skill,所有项目即时受益(Hermes 模式)
  • 多个 Skill 版本 → 同一项目文档:项目文档格式稳定后,新旧版本 Skill 应能处理同一份文档

3.3 独立演进

  • Skill 版本升级不应要求重新 init 项目实例
  • 项目文档格式演进应保持向后兼容
  • Skill 生命周期受上游仓库管控,项目文档生命周期受开发者管控 —— 两者互不锁死

四、总结

维度Skill 程序项目文档
本质执行引擎实例状态
安装方式克隆 + 注册到 AI 框架stdd init
版本管理STDD 版本号(全局)state.yaml 记录的 Skill 版本快照
升级影响全局升级后所有项目可用不需升级,保持向下兼容
生命周期结束从 AI 框架卸载 Skillarchive 或删除 .stdd/
跨框架迁移需在新框架重新安装文档直接携带,无需变更

一句话总结:Skill 程序是引擎,项目文档是状态。引擎可以有多个版本、部署在多个框架;状态绑在项目里,跟着项目走。两者解耦,STDD 才能真正实现"一次编程,到处运行"。