个人项目使用 openspec 的 workflow (感觉治理太重了):
1. OpenSpec 适合做 spec 基座,相当于项目开发过程的记忆层,但记忆是片面的、有时效性的,只能说明当时为何产生那样的决策。
2. 工作流从`opsx-explore`起手,多轮探索收敛需求后通过自定义命令给出`结构化 contract`并 handoff 给 opsx-ff/opsx-continue 产生工件
- 如果需求不明确,先大致描述需求方向,让 AI 出草案,多轮探索收敛需求边界、实现骨架。
- 如果需求过大,使用自定义命令切分成多个原子化需求(小步前进,加速收敛边界),避免探索认知负担过大 以及 引申而来的更多未定边界。
- 如果需求明确,把需求描述中未定边界和潜在的实现漂移点找出来,收口边界,风险点加上护栏。
3. 工件( proposal/design/tasks/specs )是 change-local apply 的主要执行上下文(还有 codebase ),apply 的质量锚定于 change-local 工件的质量,利用 `openspec/config.yaml` 对工件的生成形成硬约束,例如:
design.md 中不应该包含具体的代码(影子代码风险),而是给出一定粒度的实现骨架(按照骨架执行减少实现漂移)
4. 如何在产生 change-local 工件时把`archived changes`(记忆层)利用起来?我的做法是按需提取 ADR (架构决策记录)形成稳定判例(就像人睡觉时 REM 期会整理压缩记忆),再通过
AGENTS.md 增加文档治理的认知路由,让 openspec 产生工件时可以参考 ADR ,避免相似的问题重复决策。
5. apply 完成后,如果 review 发现问题需要在当前 change 收口,再跑 opsx-explore -> opsx-continue -> opsx-apply 进行修正。
6. review 无问题后,执行 opsx-sync 将 change-local spec 合并到 main specs 时需要筛选掉 临时护栏 或者 非业务 spec 。 ( openspec 合并 main spec 确实容易越堆越多,形成治理债务)