一页读懂
x-arch 治理 .claude/arch/ 下并列的两个目录。业务架构 arch/business/ 放业务域的端到端设计(DDD bounded context,与 x-data 归类层一一对应),以代码为锚;系统架构 arch/system/ 每份系统规范一个目录,放系统四件套的设计件,也就是本页这样的架构页与变更历史。
- 业务组六颗闸让业务架构不漂:登记了必有文档、文档头按契约写、描述域代码变了必须回看、域目录成套、设计与日志分居、目录里不放野文件。
- 系统组的闸把四件套锁在一起:规范与目录一一对应、派生区只准引擎产出、版本号与变更历史锁步、原件写完且测试床点名验真。
- x-arch 自己是第一套迁完的系统四件套:本页的页头、条款总表、判据总表、迁移名册与普查都是 x-meta-dev 从条款书、判据与注册表生成的派生区。
治理版图
分界可以由仓库推导:有自己规范文件的,是系统四件套,设计件住 arch/system/<规范名>/;以代码为锚、没有自己规范文件的,是业务架构。arch/business/system/mobile 描述移动端底座却没有自己的规范,所以归业务架构;arch/business/system/ 是 x-data「系统中心」的业务归类,与系统架构无关。元规范 x-standard 的设计留在 harness,不建系统架构目录。
迁移名册
还没迁成系统四件套的规范登记在系统组注册表里,只减不增:迁完一批就划掉,同批把上限 ceiling 降到登记数。新建的规范直接用 x-meta-dev 建整套,不进名册。
| 说明 | x-arch 系统组注册表(判据的一部分:同前缀注册表计入 x-arch 判据指纹,改它走 /x-meta-dev sync 升版)。pending = 迁移名册:还没迁成系统四件套的规范(元规范 x-standard 除外,其设计留在 harness)。名册只减不增 —— 迁完一份就划掉一份,同批把 ceiling 降到登记数;新建的规范直接走 /x-meta-dev tetrad 建整套,不进名册。本文件同时是成套闸 NS-COMMON-0007 与版本锁步闸 NS-COMMON-0009 的全局锚点,名册清空后也保留。 |
|---|---|
| ceiling | 0 |
| pending |
射程与普查
本域的射程有一处特别值得说清楚:它治的是「设计件」这一类文件本身,而不是它们描述的东西。业务架构文档描述的业务、系统架构页描述的规范,都不在本域射程内 —— 本域只判这些文档在不在、成不成套、有没有随代码漂移。
- 业务架构树域文档、变更历史与注册表 —— 以代码为锚,靠签名保鲜
- 系统架构目录每份系统规范一个目录,放四件套的设计件
- 系统组注册表成套闸与版本锁步闸的全局锚点,名册清空后仍保留
- 标准名册架构页该长什么样的可机判面,棘轮名册也住这里
- 结构性看不见元规范的设计不在系统架构目录里(它住框架真相源)—— 而且成套闸反过来把那个目录的存在本身判红:框架操作四件套,绝不依赖四件套
- 在案豁免(棘轮)两张名册里登记的域整条静默,名册只准变短 —— 迁移名册与标准名册此刻都已清空,即当下零豁免:通道还在,没有任何域走在上面
- 判据够不着两个目录各归哪个执行者写、经哪条流程写 —— 检测器只看文件内容,看不出这些
普查:射程内今天实际有多少东西
下面每一块都是机器当场数出来的,但它是快照、不随代码自动刷新 —— 每块顶上标着快照日期。
业务架构文档总数,其中文档头写着 status: active 的计为命中:
| 文件 | .claude/arch/business/**/ARCH.md |
|---|---|
| 文件数 | 13 |
| 正则 | ^status: active$ m |
| 命中文件 | 13 |
| 命中次数 | 13 |
快照 · 2026-09-14(不随代码自动刷新;刷新走 sync --census --date=YYYY-MM-DD)
已迁成系统四件套的架构页:
| 文件 | .claude/arch/system/*/ARCH.html |
|---|---|
| 文件数 | 1 |
快照 · 2026-09-14(不随代码自动刷新;刷新走 sync --census --date=YYYY-MM-DD)
设计机理:为什么长成这样
业务架构层:以代码为锚
- 身份锚点:含
ARCH.md的目录是域目录,不含的中间目录是归类层,可以任意深嵌套,与 x-data 归类层一一对应。域目录里只放ARCH.md、CHANGELOG.md与parts/、adr/、assets/。 - 注册表与跨域图:
_index.md按需登记业务域,登记即承诺有文档,没登记的域不受存在性约束;_context-map.md画跨域依赖与集成模式。两者留在 business 根,不是域文档。 - 保鲜:文档头的
describes指向四端代码,srcHash存四端签名(data 端取数据表字段集,server、admin、client 端取文件清单加去注释的归一化正文)。改了描述域代码,签名就对不上。这是跨文件不变量:收尾环的增量检测只看改动文件本侧,够不到它,由全量检测咬住;开发流收尾的 ARCH-SYNC 派 x-architect 回看、升版、重算。 - 设计与日志分居:设计正文在
ARCH.md,版本日志在同级CHANGELOG.md。日志写回文档头,读设计的人就得先读完历史流水;真相源的身份键出现在日志上,就是两套账。
系统架构层:四件套的设计件
- 四件套:设计(本目录的
ARCH.html与CHANGELOG.md)、条款(规则书,条款书格式,按 paths 自动加载给写代码的 AI)、判据(规范,内嵌检测器,同前缀注册表计入判据指纹)、执法(guard 收尾环与全量检测)。 - 原件与派生件:原件需要判断,包括判据、条款、架构页原件区、变更历史条目,由 x-meta-governor 经 /x-meta-dev 撰写,闸核对,用户审提交;派生件可以机械算出,包括条款书的标准写法与速查、架构页派生区、判据指纹、规则书 paths,只准脚本产出,AI 也禁止直接改。
- 四道锁:
- 对齐:x-standard 规范指纹闸的条款格式分支要求每颗闸都被条款认领、守护引用的闸真实存在、规则书派生区逐字等于重新生成。改规范或规则书,收尾环当轮报红。
- 戳记:架构页每个派生区带输出版本、产出指纹与来源指纹。直接改了页面,改页面的那一轮报红;只改了来源,由全量检测报出,sync 顺手刷新。
- 版本:版本号只写在规范简介一处,变更历史最新条目必须等于它并封版。「待同步」表示本版还在施工,写完
sync --seal封版;封版后判据再变而版本没升,sync 拒绝且一个字都不写。 - 成套:规范与系统架构目录一一对应,迁移期由只减不增的名册过渡。
- 派生区引擎住 x-meta-dev:领域无关,只认派生区名字与声明属性;面板视图只有 table、kv、scale、swatch、matrix、figure、swimlane 七种,普查只执行声明式查询,架构目录里不放可执行代码;输出带显式版本号,同输入同字节。
- 泳道图(swimlane)是「流向即架构」的载体:泳道是参与方(官方档、母本、各端、检测、执法),格子是工件或步骤,箭头是数据或业务的流向。数据是原件(本目录
assets/*.json),画法是派生区;每一跳点名的闸「规范名:规则号」与条款必须真实存在,守护链到认领它的条款 —— 改了闸没改图,sync 拒绝、全量报红。
改 x-arch 的路径
改判据或系统组注册表:规范简介升版本,变更历史顶部加新条目(判据指纹写「(待同步)」),回看条款、新闸补认领,跑 /x-meta-dev sync 刷新派生部分,本版写完加 --seal 封版,最后跑 -v x-arch、validate --spec=x-arch 与 -m x-arch .claude。只改条款或本页原件区不升版,跑 sync 刷新派生区即可。
条款总表
| 条款 | 标题 | 要求 | 守护 |
|---|---|---|---|
ARCH-A01 | 注册表登记的业务域必须有设计文档 | 必须:.claude/arch/business/_index.md 已固化业务域表里,每一行第 2 列反引号里的文档路径(相对 arch/business/)真实存在。 | x-arch:NS-COMMON-0001 |
ARCH-A02 | 业务架构文档头按契约写 | 必须:ARCH.md 以 frontmatter 开头,含 title、layer、status、version、describes、specRefs、sourceOfTruth 七个键;layer 写 business;status 只取 active、superseded、deprecated;describes 下 data、server、admin、client 四端键齐全,不涉及的端写 null;specRefs 列的每个名字是 references 下真实存在的规范,并且在正文里出现。 | x-arch:NS-COMMON-0002 |
ARCH-A03 | 改了描述域代码必须回看设计并重算 srcHash | 必须:describes 所指的四端代码变了之后,回看本域 ARCH.md、确认设计仍成立,同批升 version、重算 srcHash;某一端 srcHash 写 null,那一端就必须确实没有代码。 | x-arch:NS-COMMON-0003 |
ARCH-A04 | 域目录必须成套 | 必须:有 ARCH.md 的域目录同时有同级 CHANGELOG.md。 | x-arch:NS-COMMON-0004 |
ARCH-A05 | 设计正文与版本日志分居 | 禁止:ARCH.md 的 frontmatter 出现 version-log 键;CHANGELOG.md 的 frontmatter 出现 describes、srcHash、sourceOfTruth 键。 | x-arch:NS-COMMON-0005 |
ARCH-A06 | 域目录里不放白名单外的东西 | 禁止:域目录里出现 ARCH.md、CHANGELOG.md 与子目录 parts/、adr/、assets/ 之外的任何条目。 | x-arch:NS-COMMON-0006 |
ARCH-B01 | 系统规范与系统架构目录一一对应 | 必须:references 下每份规范(元规范 x-standard 除外)要么已迁成系统四件套,即有 arch/system/规范名/ARCH.html 与 CHANGELOG.md、规则书是条款书;要么登记在系统组注册表 x-arch-system.json 的迁移名册里。arch/system/ 下每个目录名都有同名规范,目录里只放 ARCH.html、CHANGELOG.md 与 assets/,根下不放文件;名册按名称排序、不重复,登记数等于 ceiling。 | x-arch:NS-COMMON-0007 |
ARCH-B02 | 架构页派生区只准引擎产出 | 禁止:直接改架构页的派生区,包括外壳样式与脚本(带 data-x-derived 的 style、script)、页头、条款总表、判据总表、面板与普查(x-derived 元素)。 | x-arch:NS-COMMON-0008 |
ARCH-B03 | 版本号只写一处,变更历史与它锁步 | 必须:版本号只写在规范简介一处;CHANGELOG.md 的 frontmatter 恰为 title、spec、kind;条目标题写成「## V主.次.补 · YYYY-MM-DD」,自上而下严格递减,每条的下一行是判据指纹;最新条目等于规范简介版本,提交前已封版,且指纹等于当前判据指纹。 | x-arch:NS-COMMON-0009 |
ARCH-B04 | 架构页原件写完,测试床点名属实 | 必须:架构页原件区不残留骨架占位符;每颗闸都出现在测试床点名里,有床写床的路径,没有床写「待补床」;点名引用的「规范名:规则号」真实存在,点名引用的「规范名:ARCH-条款号」在该规范的条款书里真实存在;点名的床位于 x-test、真实存在,内文写着它守的每个「规范名:规则号」与「规范名:ARCH-条款号」;床的种类要写实 —— 跑本规范判据的床不写 data-bed-kind,床文件剥掉注释后就必须按调用形态出现引擎令牌(调用 extractNsRuleDetector(、buildDetectorTools(、checkStandardFormat( 之一,或把 check.js 作为路径段写出,或在注释以外写出 X-RULE-BEGIN-SLOT),守不变量、不跑判据的床写 data-bed-kind="invariant";两者都不是的点名判红。 | x-arch:NS-COMMON-0010 |
ARCH-B05 | 架构页按同一套标准长,机器看得见的那一面由名册强制 | 必须:系统架构页遵循《系统架构标准》可机判的那一面 —— 节只取自标准名册且顺序与名册一致、必填节齐全(s-census 与 s-ops 是条件节,不适用的域不建)、每节带 data-index 与 data-kicker 编号属性、页面挂共用表达层(body 带页面类、head 引共用样式表)。判定依据是名册 x-arch-standard.json,散文版住 .claude/arch/standards/system-architecture-standard.html,两者的关系与条款书和判据相同。 | x-arch:NS-COMMON-0011 |
ARCH-C01 | 两个目录各归一个执行者写 | 必须:arch/business/** 由 x-architect 在开发流收尾的 ARCH-SYNC 里撰写;arch/system/**、规则书与规范由 x-meta-governor 经 /x-meta-dev 撰写;开发流不写 arch/system/。 | 无机器闸:分工类(检测器只看文件内容,判不了是哪个执行者、经哪条流程写的,由工作流派发与提交审查把关) |
判据实现:闸怎么咬
| 规则号 | 名称 | 认领条款 |
|---|---|---|
NS-COMMON-0001 | arch 注册表完整性 | ARCH-A01 |
NS-COMMON-0002 | arch 文档头完整性 | ARCH-A02 |
NS-COMMON-0003 | arch srcHash 四端保鲜 | ARCH-A03 |
NS-COMMON-0004 | 域目录成套 | ARCH-A04 |
NS-COMMON-0005 | 日志载体分离 | ARCH-A05 |
NS-COMMON-0006 | 域目录白名单 | ARCH-A06 |
NS-COMMON-0007 | 系统四件套成套 | ARCH-B01 |
NS-COMMON-0008 | 架构页派生区保鲜 | ARCH-B02 |
NS-COMMON-0009 | 四件套版本锁步 | ARCH-B03 |
NS-COMMON-0010 | 架构页原件完整与测试床验真 | ARCH-B04 |
NS-COMMON-0011 | 架构页遵循系统架构标准 | ARCH-B05 |
取舍与在案裁定
| 裁定 | 理由 |
|---|---|
| 系统架构与业务架构拆成两个目录 | 放在一起时两边的文件撞名,只能靠改名区分;拆开后名字统一为 ARCH 与 CHANGELOG,分界由「有没有自己的规范文件」推导,不靠人记。 |
系统架构只有一个 ARCH.html,不再配 md 设计文档 | 条款原文的唯一住处是规则书(按 paths 自动加载给 AI);设计理由、结构图、取舍与诚实边界放架构页。再加一份 md 设计文档,必然与规则书或架构页互相复述。代价是 AI 改设计时读 HTML 多费 token。 |
| 版本锁步锚在系统组注册表,由全量检测咬 | 施工中改变更历史是常态,锚在变更历史上会逼出一轮一个版本号。施工轮次里由 sync 拒绝「已封版却判据变了」当轮咬住,提交前的全量检测报出未封版。 |
| 迁移名册计入 x-arch 判据指纹 | 「只减不增」本身是判据。每迁一批,x-arch 升一次补丁版并记变更历史;改名册由提交审查把关,抬高上限同样要升版留痕。 |
| 派生区戳记写在元素属性上,不写在 HTML 注释里 | 检测引擎对 .html 的视图会剥掉注释,写在注释里的戳记检测器看不见。 |
| 业务架构不设四件套 | 业务架构以代码为锚,保鲜靠 srcHash 与开发流收尾回看;再给它配条款与判据,只会复述系统规范。业务架构对系统规范只经 specRefs 点名引用。 |
| 架构页不引用施工计划 | 施工计划闭环即删,引用必成死链;x-governance 的禁引闸射程含架构页。长期结论写进本页或 harness。 |
测试床:凭什么信它在咬人
x-arch-ns-common-0011-standard-conformance:标准符合闸的判据床(2026-09-20 立闸同批建)。固件是系统临时目录里的一棵最小 .claude 树(标准名册 + 若干系统架构目录 + 一份手写的合规架构页 —— 本闸只判形态、不解析派生区,固件不必经生成器产出)。绿:合规页零违规、两个条件节缺席与建了都合规、名册自洽、棘轮静默(域登记进 pending 后页面坏成什么样都不报)、HTML 注释里的<section id=不计入。红:臂① 自造节 / 节顺序与名册不符 / 缺必填节且点名是哪一节;臂② 缺data-index/ 缺data-kicker;臂③ body 缺页面类 / 没引共用样式表 / 页面类只认整词(sa-pageX不算挂上);臂④ pending 未排序 / 重复登记 / 登记不存在的目录 / ceiling 与登记数不符 / sections 为空 / 非法节 id。真实仓锚点:真名册自洽;x-styles、x-website、x-structure、x-deploy、x-api 五页逐页零违规;名册清空之后,全部真架构页逐页实判零违规,并且把某一页打坏后用真名册实判必红 —— 证明再没有静默通道(此前这一发验的是「pending 里的域整条静默」,名册清空后前提消失,由床自己报出并改向)。反向验真:把判据里臂②的data-index检查拆成恒假后重新提取检测器,那一发必须变绿 —— 证明报红来自这一臂本身,不是别处顺带咬的。没验:只证形态,证不了那一节写对了内容,也证不了视觉真的对。tetrad-arch-business-gates:业务组六颗闸逐颗反向注入,各有红有绿。固件建在系统临时目录;srcHash 的期望值由真检测器实算后取回,不复刻算法。tetrad-arch-gates:系统组四颗闸与业务组约束臂反向注入;固件的系统架构目录由 x-meta-dev 真引擎产出并封版,另把真实注册表与真实业务架构文档喂给同一批检测器。tetrad-fixture-set:一整套含速查与标准写法的固件四件套,覆盖七种面板(含泳道图)与普查;全部新闸对同一套固件零违规,逐类反向注入报红(含泳道图点名不存在的闸、条款、规范),引擎同输入同字节。tetrad-stop-ring:收尾环端到端。在副本工作区里对 x-arch 四件套做四种违规(删一条认领、引用不存在的闸、改规则书派生区、改架构页派生区),每种当轮报红,复原后放行,并实测耗时在收尾钩子预算内。
- 闸真的会咬造出违规样本喂给引擎里那颗真检测器,正例必红,且报错点名到具体位置
- 闸拆掉就不咬反向注入:临时改坏判据,对应那一发必须变绿 —— 这才证明闸没在空转
- 射程真的覆盖到问引擎真选文件器:该进门的进门,射程外的确实不进
- 判据写明的边界确实不咬把「刻意不管」的写法逐条钉成绿,防止后人误以为漏了
- 不证明床真测到了那颗闸架构层的元闸只验「床存在、内文写了闸号、真调了引擎」,验不了它测的是不是那一颗
- 不证明床被跑过点名与执行是两条独立的链:页面说「有床守着」,不等于哪个运行器真的扣了扳机
- 不证明判据是对的床按判据当下的语义写;判据本身理解错了,床会忠实地复现这个错误
诚实边界:守不住什么
本节是承诺不是待办:做不到的明说,删掉本节等于默认宣称全覆盖。先写条款书里自认「没有机器守着」的那一条由谁兜底,再写闸射程内已知的失明点,最后写本页自己的边界。
条款书说「无机器闸」的那一条,实际由谁兜底
ARCH-C01两个目录各归一个执行者写分工类 —— 业务架构在开发流收尾回看,系统架构经治理流改写。检测器只看文件内容,判不了这份文件是谁写的、经哪条流程写的。兜底:工作流派发与人审。混着写的后果很隐蔽:一个改动可以同时躲开两个环的把关。
闸射程内已知的失明点
- srcHash 证明「描述域代码被改了」,不证明「设计还对」;设计是否仍成立靠回看与人审。不改代码的变化(线上数据、控制台配置)它看不见。
- 业务架构保鲜是跨文件不变量,收尾环的增量检测结构性够不到,只在全量检测咬住;多个会话共用工作区时,漂移归谁按「本会话是否改过该域」判断。
- 派生区戳记证明「没被直接改、来源没变」,不证明「引擎没写错」;后者由 x-meta-dev validate 第 10 项逐字重新生成与测试床兜住。连产出指纹一起重算的刻意伪造,靠提交审查。
- 测试床验真只证明床存在、写明了所守的闸号、床的代码里(剥掉注释以后)有调用引擎的形态,不证明那次调用真的执行了,更不证明床真测到了那颗闸;反向注入的质量归床自己的断言。形态认定有两个已知的洞:字符串字面量里写一段「令牌(」同样被认作调用;调用经别名改名(解构时换名、只写新名字调用)则认不出,那样的床会被判成没跑判据。
- 普查快照不随代码刷新,只代表快照日期那天的数;刷新要显式跑
sync --census。 - 版本锁步在施工轮次里不当轮报红,未封版只在全量检测报出;提交前必须跑全量检测。
本页自己的边界
上面讲的是治理面的边界。这一段讲这张页面本身 —— 架构页也是被治的东西,它同样有机器管不到的地方。
- 「周期性运维」一节不建,这是裁定不是遗漏:标准把它定为条件节,只有真存在「到点必须有人动手」的义务才建。本域治理对象全是仓库内的文件,不存在任何会到期的东西 —— 没有证书、没有席位、没有云端易逝状态。
- 正文里的数字没有任何闸管:本页刻意不在散文里复述闸数、条款数与版本号,一律指向页首身份表与两张派生总表。但这是写页人的纪律,不是机器强制。
- 本页遵循《系统架构标准》的可机判面已被闸锁住(节名册与顺序、节编号属性、表达层在场),但标准里「不许发明第二套设计语言」「整页只有一种底色」「架构页不得有自己的页头」这三条判据够不着,靠写页时读标准与人审兜底。