PDLC 1.1:v1.0 在产物形状上犯的两个错误

用 PDLC 工作了几个月之后,我在一个项目的 docs/ 目录里看到了这些文件:

bash 复制代码
docs/
├── architecture-2025-10-03.md
├── architecture-2025-11-14.md
├── architecture-2025-12-01.md
├── architecture-2026-01-08.md
└── architecture-2026-02-19.md

五份架构文档,每份都带日期。我不知道哪份是现在的架构。

这不是用户操作失误,是 PDLC v1.0 的设计失误。v1.0 把所有阶段产物都当成 append-only 的历史记录来处理。这个逻辑用在 PRD 上是对的,用在架构总览上就产生了这堆垃圾。

v1.1 修了两个这样的设计错误。


错误一:没有区分两种完全不同的产物

做这件事之前,我先想清楚了一个分类:产物在时间维度上是什么形状?

有一类产物,记录的是"发生了什么"。PRD、设计决策、会议纪要------每份都是历史证据,不能篡改,只能追加。你不会去改一份三个月前的 PRD 让它变成"最新的",那会毁掉决策链。这类产物叫 ledger 型(账本)。

另一类产物,记录的是"现在是什么状态"。架构总览、团队编码规范、API 契约------永远只有一份"现在有效的版本"。你维护它的方式是就地更新,而不是另存一份带日期的副本。这类产物叫 surface 型(当前状态面)。

v1.0 没有这个区分,AI 默认给所有产物追加日期戳。于是 /pdlc-arch 每次运行都生成 architecture-YYYY-MM-DD.md,三个月后变成上面那五份文件的局面。

更糟的是规范文档。团队有一份 coding-style.md,被改了一次之后变成了 coding-style-v2.md。然后是 coding-style-v3.md。没人知道该 follow 哪份,干脆都不看。

v1.1 的修法很直接:让 AI 在生成产物之前先判断类型。ledger 型继续 append-only,加日期戳、不能就地改;surface 型则强制就地维护一个固定路径的文件------/pdlc-arch 只维护 docs/ARCHITECTURE.md 这一份,每次更新就地改,遗留的带日期文件自动归档到 docs/archive/


新指令:/pdlc-standard

规范文档是 surface 型产物里最典型的一类,所以 v1.1 为它单独加了一个指令。

/pdlc-standard 管理 docs/00_standards/ 目录下的规范文档。它做几件事:

add :新建一份规范,命名强制用语义路径(coding/styleapi/versioning),禁止带版本号或日期。 edit :就地修改现有规范,自动记录修改时间,但文件名不变。 archive :如果一份规范彻底废弃,可以归档,但已有引用不会断。 index:输出当前所有有效规范的索引,用于 onboarding 或 review。

最关键的一条约束在提示词里是硬写的:如果 AI 在生成 coding-style-v2.md 这样带版本号的规范文件,必须中止并提示用户用 edit 子命令替代。

这条约束从根上杜绝了版本号蔓延。


错误二:feature 之间互不相识

v1.0 的状态机管理每个 feature 是一个独立的闭环:PRD → 设计 → TDD → 实现 → 评审 → 发布。这个纵向的流程设计是对的。

但现实里 feature 从来不是孤立的。

我在 aitm 项目里遇到了典型场景:feature/安全层feature/工具调用 依赖。改安全层的黑名单规则,实际上会影响工具调用的确认逻辑。但 PDLC 的状态机只看单个 feature 的进度,没有任何地方告诉我这两个 feature 之间有关系。

结果是每次改安全层,我都要靠记忆去想"这会不会影响工具调用那边"------这是把本该系统记住的事情放进了人脑,不合理。


新指令:/pdlc-relate

v1.1 加了 /pdlc-relate,专门管理 feature 之间的关系。

关系类型有六种:

类型 含义
extends 这个 feature 是另一个的扩展
depends_on 这个 feature 依赖另一个的实现
supersedes 这个 feature 替代了另一个(另一个应该归档)
resolves 这个 feature 修了另一个 feature 引入的问题
conflicts_with 两个 feature 有已知冲突,不能同时激活
relates_to 宽泛的关联,不属于以上类型

建立关系很简单:

bash 复制代码
/pdlc-relate set feature/工具调用 depends_on feature/安全层

但杀手锏是另一个子命令:

bash 复制代码
/pdlc-relate impact feature/安全层

这个命令输出:直接依赖这个 feature 的有哪些、通过传递关系间接影响的有哪些、历史上被它替代或解决的有哪些。一个命令,把改动的辐射范围摊开来看。

做这个功能的时候有个反直觉的选择:关系数据存在 docs/.pdlc/ 下面的结构化文件里,而不是某种专有数据库格式。理由是,这些关系是"团队的知识",应该随代码一起提交、review、合并。如果存在黑盒里,换机器或换人就丢了。


两个功能一起踩的坑

surface 型产物的迁移,比我预想的麻烦。已有项目里那些旧的带日期架构文件,PDLC 怎么知道哪份是"最新的"?答案是不猜------/pdlc-arch 检测到遗留文件时会停下来问你:"我看到 architecture-2026-02-19.md,要用这份作为 ARCHITECTURE.md 的初始内容吗?"一个确认步骤,避免自动迁移出错。

关系类型的设计,我也走了点弯路。第一版草稿里只有三种关系:依赖、扩展、冲突。拿真实项目试跑了一遍,发现有不少 feature 之间的联系根本描述不了------比如"这个 feature 修了那个 feature 的遗留问题",归不进三类里的任何一个。最后扩展到六种,六种是够用的边界,再多就变成分类游戏了。


当前状态

v1.1 已经用在了三个项目上:aitm、pdlc-skills 自身、一个SaaS 项目。

ledger/surface 分离解决了最让人抓狂的问题------docs/ 不再是时间轴,是可以查找信息的地方。/pdlc-relate impact 在做跨 feature 的改动时每次都在用,省了不少"这会不会影响那边"的回溯排查。

33 个标准化阶段的核心结构没有变,v1.1 只在产物形状和关系建模上做了修正。如果你已经在用 v1.0,升级基本上是无感的------除了 /pdlc-arch 下次运行时会问你迁移旧文件。


安装 / 升级

首次安装(需要 Claude Code):

bash 复制代码
/claude install kanfu-panda/pdlc-skills

升级已有安装

bash 复制代码
bash <(curl -fsSL https://raw.githubusercontent.com/kanfu-panda/pdlc-skills/main/install.sh) --upgrade

源码在 GitHub,MIT 开源。用了遇到问题,Issues 开着,我在看。


下一篇

PDLC 把流程拆细、步步留产物------好处是不跳步、不跑偏,代价是它比"直接让 AI 写"更吃 token。今天就有人跟我说:"文档一多,token 不就烧得更凶?"

这事值得单独聊一篇:这笔 token 账到底该怎么算(我没精确测过,但有些反直觉的地方),以及在用这套重流程的同时,我是怎么把花销压下去的。省 token 说到底就是省钱,但也不只是省钱。

相关推荐
302wanger1 小时前
/init 的设计哲学——为什么 AI 的项目记忆只需要写「它猜不到的」
claude
沉默王二1 小时前
又一款国产模型诞生,StepPlan性价比杀疯了!
agent·ai编程·claude
Flynt1 小时前
我把 JDK21 虚拟线程用成了"性能灾难",复盘完发现踩了三个大坑
java·ai编程
勇敢的先登1 小时前
MCP 是什么?为什么 Function Call 之后还需要它
agent·ai编程
卡卡罗特AI1 小时前
Codex复刻小米MiMoCode官网,丝滑融入项目,只需要3步!保姆级教程!
人工智能·ai编程
sunneo1 小时前
本周 AI 新动态精选(2026.06.08–06.14)
人工智能·aigc·ai编程·ai写作·ai-native
leeyi2 小时前
Tool 组件:让 Agent 学会「动手」的统一接口
aigc·agent·ai编程
Rain5092 小时前
2.3. 安全配置:环境变量与 API 密钥管理
前端·人工智能·后端·安全·ai·node.js·ai编程