news 2026/9/10 4:58:16

如何用 BMAD-METHOD 的 bmad-architecture 生成架构脊柱文档,让多个 epic 的决策不再互相冲突

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何用 BMAD-METHOD 的 bmad-architecture 生成架构脊柱文档,让多个 epic 的决策不再互相冲突

如何用 BMAD-METHOD 的 bmad-architecture 生成架构脊柱文档,让多个 epic 的决策不再互相冲突

【免费下载链接】BMAD-METHODBreakthrough Method for Agile Ai Driven Development项目地址: https://gitcode.com/gh_mirrors/bm/BMAD-METHOD

当多个 epic 由不同的 AI 会话或不同的人分别实现时,每个实现者都会独立做技术选择:一个 epic 暴露 REST,另一个写 GraphQL;snake_case列碰上camelCase;这边用 session cookie,那边用 JWT。每个选择单独看都合理,合在一起就是集成问题和返工。BMAD-METHOD 的bmad-architectureskill 用来解决这个问题:它产出一份短小的架构文档(称为spine,脊柱文档),只记录"如果两个单元独立决策就会冲突"的那部分决定,并给每个决定分配稳定的AD-n编号,让 spec、story 和后续会话都能引用同一份决策。

前提是项目里已安装 BMad(BMM 模块),使用一个受支持的 AI coding tool(Claude Code、Cursor 等)来运行 skill。本文的验证步骤依赖uv,因此需要本机装有uv(Python 3.10+)。

先判断:你的项目现在需不需要 spine

设计 UX 与架构 给出了一张判断表,可以直接对照:

工作特征结论
清晰的局部改动,有既定模式通常不需要
多个相关组件,约束已知可选,看协调风险
多个 epic 或跨系统决策需要对齐实现
受监管、高风险或企业级计划通常需要

判断规则是文档里的一句话:如果几个 epic 可能被不同的 agent 或人实现,你就需要 architecture spine。

安装并确认 bmad-architecture 可用

在目标项目目录运行安装器(要求 Node.js 20.12+):

npx bmad-method install

按提示选择模块(选 BMM 模块)和 AI coding tool。安装完成后,终端会显示BMAD is ready to use!及安装路径。缺少uv时安装器只给警告、不阻断安装,但依赖uv的 skill 会不可用,所以装完uv再往下走。

验证集成是否就绪:在 AI coding tool 里调用bmad-helpskill,问它下一步做什么。如果工具能识别并运行该 skill,说明 skill 体系已接入。bmad-architecture属于 BMM 模块的 workflow skill,也可以从 Architect agent(bmad-agent-architect)的CA菜单代码进入。

运行 skill:两条路径与一个必答问题

在 AI 工具中输入bmad-architecture即可启动。skill 会读取你的输入来判断这次任务的类型——输入可以是 spec 包(SPEC.md+ memlog)、一个原始想法、一份冗长的架构文档、现有代码库,或一份已有的 spine。输入本身决定任务,skill 不会反过来反复质问你。

启动后 skill 会先让你选工作模式:

  • Coaching path(默认):开放式提问,skill 把范式、技术栈、主要边界这些关键决策连同备选方案摆出来,由你拍板;
  • Fast path:skill 快速起草整份 spine,用[ASSUMPTION]标签标出推断,留到评审时纠正。

两条路径都有一条强制步骤:起草前 skill 会问 spine 是不是唯一交付物。如果还要给人看的架构说明、演示稿之类的东西,在这里说清用途和受众,否则 skill 会在收尾时补问。

运行中所有决策、约束、版本、假设和未决问题都追加记录到运行目录的.memlog.md(只追加、不删改);ARCHITECTURE-SPINE.md本身是结束时从 memlog 蒸馏出来的,不是边聊边写。

产出物在哪里,长什么样

默认情况下,运行目录位于:

{planning_artifacts}/architecture/architecture-{project_name}-{date}/

里面有两个核心文件:ARCHITECTURE-SPINE.md(脊柱文档)和.memlog.md(工作记忆)。如果{workflow.spine_output_path}下已存在同名目标的运行目录,skill 会先问你是否从它的 memlog 恢复,而不是重开一次。

spine 的结构来自 spine-template.md,frontmatter 声明type: architecture-spinealtitude(initiative / feature / epic 三个层级)、paradigmscopestatus(draft / final)等字段。正文的关键区块:

  • Invariants & Rules:核心。每条决策一个### AD-n — {decision}块,含三个必填字段——Binds(约束哪些单元)、Prevents(防止哪种分歧)、Rule(下游必须遵守的约束)。已由用户或现有代码事实敲定的决策标[ADOPTED]
  • Inherited Invariants:仅当本 spine 继承更高 altitudes 的父 spine 时出现(见下一节)。
  • Consistency Conventions:命名、数据格式、状态与横切关注点的约定表。
  • Stack:只写名称 + 版本号(如语言、框架、关键依赖),"为什么"留在 memlog 里。
  • Deferred:明确推迟的决策及理由——这是 spine 保持精简的另一半契约。
  • Structural Seed:目录树、部署与外部 provider 拓扑等 mermaid 图或文本树。

AD-n编号是稳定且只增不改序的:Update 场景下修改决策是改 Rule 原文,新决策用下一个编号,永不重排或复用退役编号。这正是"多个 epic 不再冲突"的机制——epic 的 stories 和 spec 引用AD-3时,它始终指向同一条规则。

为每个 epic 生成 spine,并防止与父 spine 冲突

如果项目整体已经有一份 feature/initiative 级 spine,而你要为某个 epic 生成子 spine,需要两件事:

1. 运行目录带上 epic 身份,避免同天多次运行互相覆盖。默认的run_folder_patternarchitecture-{project_name}-{date},在 epic 级别需要覆盖它。编辑团队级覆盖文件_bmad/custom/bmad-architecture.toml(个人级用_bmad/custom/bmad-architecture.user.toml):

[workflow] run_folder_pattern = "architecture-epic-{epic_id}"

{epic_id}由驱动 spec 或激活参数绑定。这个写法直接来自 customize.toml 中的注释说明。

2. 父 spine 的决策作为只读约束继承。skill 会先加载父ARCHITECTURE-SPINE.md,把父级AD、约定和范式按原编号(不重新编号)记入本 spine 的Inherited Invariants区块,并在 memlog 中逐条记为constraint条目,不重新推导。父 spine 留给你的工作只有它Deferred的条目,以及本 epic 的 stories 可能撞到的分歧点。一条新的AD如果与继承的决策矛盾或削弱它,会被当作冲突上报,而不是本地覆盖。epic spine 只固定该 epic 的 stories 必须共享的不变量,不展开 story 级细节。

验证:Reviewer Gate 与 lint_spine.py 的机械检查

spine 定稿前有固定的 Reviewer Gate(机制详见 reviewer-gate.md):先跑确定性检查,再上语义评审。

机械检查可以直接手动执行。下面命令中的两个花括号变量需要按你的环境替换:{skill-root}是 skill 安装目录(例如 Claude Code 下为.claude/skills/bmad-architecture/,以安装器实际输出为准),{doc_workspace}是本次运行的文件夹(即存放ARCHITECTURE-SPINE.md的目录):

uv run {skill-root}/scripts/lint_spine.py --workspace {doc_workspace}

脚本以 JSON 输出到 stdout(也可用-o写文件),退出码恒为 0,结果以 JSON 字段传递。它检查四类问题(见 lint_spine.py 的源码):

category检查内容
placeholder残留的TBD/TODOsimilar to AD-n未展开引用、未填充的{模板token}
ad_idAD-n编号重复或不单调递增
ad_fields某个AD-n块缺Binds/Prevents/Rule字段
version_pin## Stack表格中某行没有版本号

干净文件的输出示例(来自脚本实现的字段结构):

{ "ok": true, "spine": "ARCHITECTURE-SPINE.md", "total_findings": 0, "by_severity": {}, "findings": [] }

机械检查之后是语义评审:一个对照 good-spine 清单的 rubric walker,加上{workflow.finalize_reviewers}中的每个评审视角(默认包含"核对技术是否经网络验证为当前版本"和"作为攻击者构造两个遵守所有 AD 却仍能建出互相不兼容实现的单元"两个视角),全部作为并行 subagent 对ARCHITECTURE-SPINE.md运行,各自把完整评审写入{doc_workspace}/reviews/review-{slug}.md,只回传摘要。Finalize 时 skill 直接修掉明确的发现;如果以Validate意图单独运行(批判一份已有 spine 但不修改它),则把所有评审合并成一份 HTML 报告交给你,再问你是否要把发现滚入一次 Update。

Finalize 收尾时,skill 会把 spine frontmatter 的status设为final、更新updated日期,并记一条spine finalized事件到 memlog。

限制与已知的失败模式

设计 UX 与架构 列出了这个步骤失败的三种方式,值得对照自查:

  1. 在实现过程中"顺手"决定 API 风格等跨 epic 决策——这些必须先进 spine;
  2. 把每个小选择都记进 spine——spine 只放"独立决策会冲突、且不显然、且是真实取舍"的决定,其余进 Deferred 或留给代码;
  3. spine 一次写完就不再更新——学到新东西时保持它最新;实现中途发生显著变更时,用bmad-correct-course评估并产出变更提案,而不是直接在代码里分叉。

另有一条来自 SKILL.md 的边界:如果输入薄到无法建立 spine(缺需求、缺约束),skill 会建议先跑bmad-spec,并把缺失的答案记入共享 spec workspace,而不是替你想答案。

下一步

spine 定稿后,skill 的收尾动作是推荐把它挂到 spec 上(bmad-spec采用/刷新 spine 作为 companion,保持AD编号稳定以便下游引用)——这也是 Build 和 readiness gate 找到它的方式。之后再进入bmad-create-epics-and-stories拆 story;epic 级的 spine 则直接对接bmad-build。用bmad-help可以查看当前项目下按优先级排序的后续 skill。

【免费下载链接】BMAD-METHODBreakthrough Method for Agile Ai Driven Development项目地址: https://gitcode.com/gh_mirrors/bm/BMAD-METHOD

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/10 4:58:01

Python文件操作实用指南:路径、编码、读写与实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/10 4:57:58

智能体系统架构三原则:隔离、集成与治理实战指南

1. 这不是又一个“架构图PPT”,而是一套能落地的智能体系统建造手册“智能体系统架构:隔离、集成与治理的综合调研”——看到这个标题,很多同行第一反应是:哦,又是那种画几个方框、连几条箭头、标上“Agent”“Orchest…

作者头像 李华
网站建设 2026/9/10 4:56:25

CANN/ge DataFlow map_input函数文档

# map_input 【免费下载链接】ge GE(Graph Engine)是面向昇腾的图编译器和执行器,提供了计算图优化、多流并行、内存复用和模型下沉等技术手段,加速模型执行效率,减少模型内存占用。 GE 提供对 PyTorch、T…

作者头像 李华
网站建设 2026/9/10 4:53:34

CANN/ge内存约束设计文档

GE Memory Constraints Document 【免费下载链接】ge GE(Graph Engine)是面向昇腾的图编译器和执行器,提供了计算图优化、多流并行、内存复用和模型下沉等技术手段,加速模型执行效率,减少模型内存占用。 GE 提供对 PyT…

作者头像 李华
网站建设 2026/9/10 4:52:57

RAKE接收机MATLAB仿真:多径分集与MRC合并实现

简介:本资源是一套面向通信工程专业学生与初学者的RAKE接收机MATLAB仿真程序,聚焦CDMA系统中多径衰落信号的接收与合并问题,帮助理解扩频通信核心机制及Rake结构设计原理。压缩包共9个文件,含8个.m脚本(如rake_receive…

作者头像 李华
网站建设 2026/9/10 4:51:20

LabVIEW阶次分析实战:从等角度重采样到旋转机械故障诊断

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华