AD-1 — {decision}

发布时间:2026/9/19 16:27:21
AD-1 — {decision} AD-1 — {decision}【免费下载链接】BMAD-METHODBreakthrough Method for Agile Ai Driven Development项目地址: https://gitcode.com/gh_mirrors/bm/BMAD-METHODBinds:{capability / unit ids / fr/nfrs, areas, orall}Prevents:{the divergence this stops}Rule:{the constraint downstream must follow}三段式约束要求 - **Binds**绑定对象——能力 / 单元 ID、功能或非功能需求、区域或 all - **Prevents**这个决策阻止的分歧对归属测试的直接回应 - **Rule**下游必须遵守的可执行约束。 模板还要求**稳定递增的 ID绝不重用或重新编号**当用户或既有现实已经敲定某个决策时加 [ADOPTED] 标记并且必须包含一张**依赖方向图**谁可以依赖谁——它本身就是一条规则必须以**合法的 mermaid** 编写绝不能是空图。SKILL.md 的 memlog 工作流说明每个幸存下来的决策最终蒸馏为 AD-n即使一个决策只活在图中也要记入 memlog。 示例源自 [test_lint_spine.py](https://link.gitcode.com/i/e7a26578f7efb6d470e3e67199496509) 中的干净脊柱样本可作填空参考 markdown ### AD-1 — single write path - **Binds:** all - **Prevents:** divergent mutation - **Rule:** state changes only through the command bus ### AD-2 — layered deps [ADOPTED] - **Binds:** all - **Prevents:** import cycles - **Rule:** ui - app - domain, never backward ![mermaid](https://web-api.gitcode.com/mermaid/svg/eNpLy8kvT85ILCpR8AniUlBwVNDVtVNwqk5JTc4szszPqwUAqbcKdA)Consistency Conventions对抗独立构建者漂移的默认值模板注释spine-template.md这些是在独立构建者会漂移之处生效的默认值删掉不适用的行加上项目需要的行。模板预置三行关注点ConcernConventionNaming (entities, files, interfaces, events)Data formats (ids, dates, error shapes, envelopes)State cross-cutting (mutation, errors, logging, config, auth)这三行恰好呼应设计-UX-架构文档中点名的典型冲突命名、ID/日期/错误格式、状态修改、配置、认证也覆盖 SKILL.md 概览中状态如何被修改、谁拥有共享数据的不变量维度。Stack经核验的版本锁定表模板注释spine-template.md明确标注这是SEED编写时核验为最新代码一旦存在就归代码所有只写名称 版本理由写进 memlog。每行一个被锁定的语言、框架、关键依赖、平台或链路NameVersion{language / framework / key dep / platform / chain}{pinned version}SKILL.md 多次强调绑定任何具名技术前先在网络上核验其当前版本与适配性——这正是 Stack 表verified current at authoring的来源。lint 脚本对该表有机械检查见下文。Structural Seed值得在冷启动时定型的形状模板注释spine-template.md说得很克制这不是一份固定清单只包含在此高度非显而易见的东西且尽可能多用合法的 mermaid图来承载。候选包括系统 / 容器 / 上下文视图部署与环境的操作包络当这个高度拥有它时不要让操作包络漏下去核心实体的 ERD只写名称与关系——一个属性如果本身就是不变量那它是 AD不是图以及一份最小源码树。模板给出源码树的占位形态{root}/ {dir}/ # {what lives here}关键原则代码拥有细节这只是脚手架不是需要维护的镜像。SKILL.md 的 Reviewer Gate 与 good-spine 清单进一步指出高度拥有的每个维度都必须被决定、推迟或列为开放问题——一个整体保持沉默的维度尤其是操作 / 环境包络部署与环境、基础设施 / 供应商策略、运维是失败而不是干净的脊柱。Capability → Architecture Map一致性审计员的检查清单仅当有 spec 驱动了这次运行时出现spine-template.md。它把 spec 的能力桥接到它们所在的位置与管辖它们的规则上三列Capability / AreaCAP-id / 区域、Lives in组件 / 模块、Governed byAD-id、约定、范式。SKILL.md 的 Finalize 第 2 步Reconcile inputs提到驱动性输入会派一个 subagent 逐一核对脊柱是否覆盖了 spec 的能力本表正是覆盖情况的落点。Deferred让脊柱保持精简的另一半契约模板注释spine-template.md有意推迟的决策每条都注明它可以等待的理由——包括这个高度还不拥有的整个维度。它是对归属测试中不满足条件那部分决策的显式收纳不写进脊柱的决策不等于消失而是被命名、被记录、被赋予重新评估的时机。good-spine 清单也要求检查 Deferred 下是否有任何条目会让两个单元产生分歧——被推迟的决策同样不能留下分歧漏洞。编写工作流Coaching 优先memlog 驱动蒸馏两种路径Coaching 与 Fast pathSKILL.md 的 How you work 一节明确Coaching path 是默认——引导本身就是价值所在Agent 必须对抗直接产出架构的本能。激活时在起草前用用户的语言给出选择Coaching path一起工作开放式提问把决策从用户那里引导出来并在某个决策薄弱时推回去或Fast path快速起草整篇脊柱用[ASSUMPTION]标签标注推断用户在评审中纠正。除非用户明确要快否则引导不要默默起草。承重的决策——范式、技术栈或起步框架、主要边界——是展示出来的而不是默默做出的摆出你权衡过的现实替代方案以及倾向的理由让用户选择。这些理由只存在于对话与 memlog 中绝不在精炼的脊柱里。规划文档 design-ux-and-architecture.md 对此的概括是Coaching is the default: the important calls are shown with the alternatives weighed, then you choose. A Fast path drafts the whole spine with[ASSUMPTION]tags instead.绿色地greenfield且技术栈开放时推荐一个广为人知的当前 starter先用网络核验好的 starter 免费预先决定了架构中连贯的一大块比经验不足的用户手搓更好棕地brownfield则先调查再决定——读足够多的真实代码以及{workflow.persistent_facts}认可已经存在的约定而不是发明新约定。memlog追加式的运行记忆memlog.memlog.md是每次运行的工作记忆实现在 memlog.py。它是一条扁平、追加式、只写不读的日志每个决策、约束、版本、假设、开放问题都以一行追加式条目落盘decision 条目捕获它绑定什么、阻止什么分歧没有生命周期状态字段——终止时刻以event类型条目记录而不是 frontmatter 标志。SKILL.md 给出的两个写入口令uv run {project-root}/_bmad/scripts/memlog.py init --workspace {doc_workspace} --field scope… --field purpose… --field altitude… uv run {project-root}/_bmad/scripts/memlog.py append --workspace {doc_workspace} --type decision|constraint|version|assumption|question|direction|event --text …memlog.py 的实现细节印证了设计意图memlog.py追加式、按时间顺序、无编辑删除子命令每次写入原子化临时文件 flush fsync 后原子 rename崩溃不会留下半截条目唯一的读取时机是恢复会话resume。脊柱文件本身是在最后从 memlog 蒸馏出来的而不是边做边写——每一条幸存的决策变成AD-n。恢复先前运行就是重新加载它的 memlog。高度与继承把范围缩到该管的那一层SKILL.md 强调脊柱的altitude镜像它增强的对象initiative→features、feature→epics、epic→stories。继承父脊柱时把父脊柱当作绑定、只读的约束只处理父脊柱留下的开放项Deferred 本层 stories 可能撞上的分歧。一个 Epic 脊柱固定该 Epic 的 stories 必须共享的不变量不展开每个 story 的细节。运行目录按customize.toml的spine_output_path {planning_artifacts}/architecture与run_folder_pattern architecture-{project_name}-{date}解析customize.toml在 epic 高度应覆盖run_folder_pattern携带 epic 身份如architecture-epic-{epic_id}避免同日多次运行互相碰撞。机械校验lint_spine.py 与其测试脊柱的决策完整性分为两半语义半每条 Rule 是否真的可执行边界是否合理交给评审门机械半由 lint_spine.py 确定性完成——它的模块 docstring 写得很直白LLM 会数错 ID、漏掉字面占位符grep 做不到这些。这个 linter 拥有脚本比 prompt 做得更好的检查。运行方式来自 reviewer-gate.mduv run {skill-root}/scripts/lint_spine.py --workspace {doc_workspace}【免费下载链接】BMAD-METHODBreakthrough Method for Agile Ai Driven Development项目地址: https://gitcode.com/gh_mirrors/bm/BMAD-METHOD创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考