agentic-flow-kit 1.7.15 → 1.7.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. package/README.md +41 -3
  2. package/modules/hosts/claude/commands/wf-design.md +5 -4
  3. package/modules/hosts/claude/commands/wf-new-task.md +42 -21
  4. package/modules/hosts/claude/commands/wf-review.md +1 -1
  5. package/modules/hosts/claude/commands/wf-sync-hosts.md +7 -13
  6. package/modules/hosts/claude/commands/wf-test.md +1 -1
  7. package/modules/hosts/codex/commands/wf-design.md +5 -4
  8. package/modules/hosts/codex/commands/wf-new-task.md +42 -21
  9. package/modules/hosts/codex/commands/wf-review.md +1 -1
  10. package/modules/hosts/codex/commands/wf-sync-hosts.md +7 -13
  11. package/modules/hosts/codex/commands/wf-test.md +1 -1
  12. package/modules/hosts/cursor/commands/wf-design.md +5 -4
  13. package/modules/hosts/cursor/commands/wf-new-task.md +42 -21
  14. package/modules/hosts/cursor/commands/wf-review.md +1 -1
  15. package/modules/hosts/cursor/commands/wf-sync-hosts.md +7 -13
  16. package/modules/hosts/cursor/commands/wf-test.md +1 -1
  17. package/modules/hosts/opencode/commands/wf-design.md +5 -4
  18. package/modules/hosts/opencode/commands/wf-new-task.md +42 -21
  19. package/modules/hosts/opencode/commands/wf-review.md +1 -1
  20. package/modules/hosts/opencode/commands/wf-sync-hosts.md +7 -13
  21. package/modules/hosts/opencode/commands/wf-test.md +1 -1
  22. package/modules/hosts/trae/commands/wf-design.md +5 -4
  23. package/modules/hosts/trae/commands/wf-new-task.md +42 -21
  24. package/modules/hosts/trae/commands/wf-review.md +1 -1
  25. package/modules/hosts/trae/commands/wf-sync-hosts.md +7 -13
  26. package/modules/hosts/trae/commands/wf-test.md +1 -1
  27. package/package.json +1 -1
  28. package/src/cli.mjs +43 -4
  29. package/src/doctor.mjs +37 -1
  30. package/src/executor.mjs +245 -0
  31. package/src/executor.test.mjs +292 -0
  32. package/src/init.mjs +7 -0
  33. package/src/profiles.mjs +3 -0
  34. package/src/render.mjs +3 -3
  35. package/src/sync-hosts.mjs +37 -43
  36. package/src/sync-hosts.test.mjs +67 -56
  37. package/templates/.gitattributes +8 -0
  38. package/templates/AGENTS.md +1 -1
  39. package/templates/_agents/commands/design.md +5 -4
  40. package/templates/_agents/commands/new-task.md +42 -21
  41. package/templates/_agents/commands/review.md +1 -1
  42. package/templates/_agents/commands/sync-hosts.md +7 -13
  43. package/templates/_agents/commands/test.md +1 -1
  44. package/templates/_agents/control-surfaces.txt +1 -1
  45. package/templates/_agents/engine-lock.json +246 -0
  46. package/templates/_agents/lane-surfaces.txt +1 -1
  47. package/templates/_agents/level-hints.txt +30 -0
  48. package/templates/_agents/scripts/agg-delegations.test.mjs +5 -3
  49. package/templates/_agents/scripts/check-engine-integrity.mjs +55 -126
  50. package/templates/_agents/scripts/check-engine-integrity.test.mjs +33 -45
  51. package/templates/_agents/scripts/check-lane-surface.mjs +72 -23
  52. package/templates/_agents/scripts/check-lane-surface.test.mjs +66 -0
  53. package/templates/_agents/scripts/check-ledger-invariant.mjs +112 -14
  54. package/templates/_agents/scripts/check-ledger-invariant.test.mjs +5 -1
  55. package/templates/_agents/scripts/check-loop-rev.test.mjs +6 -4
  56. package/templates/_agents/scripts/check-loop.mjs +49 -41
  57. package/templates/_agents/scripts/check-loop.test.mjs +18 -13
  58. package/templates/_agents/scripts/check-metric-claims.mjs +4 -2
  59. package/templates/_agents/scripts/compact-ledgers.mjs +97 -0
  60. package/templates/_agents/scripts/compact-ledgers.test.mjs +162 -0
  61. package/templates/_agents/scripts/confirm-doc.mjs +40 -11
  62. package/templates/_agents/scripts/doctor.test.mjs +44 -1
  63. package/templates/_agents/scripts/edit-face-check.test.mjs +5 -4
  64. package/templates/_agents/scripts/fill-intent.mjs +2 -2
  65. package/templates/_agents/scripts/fixture-scripts.mjs +153 -0
  66. package/templates/_agents/scripts/fixture-scripts.test.mjs +107 -0
  67. package/templates/_agents/scripts/gate-checklist.mjs +4 -9
  68. package/templates/_agents/scripts/gate-checklist.test.mjs +2 -11
  69. package/templates/_agents/scripts/gen-workflow-dashboard.mjs +8 -11
  70. package/templates/_agents/scripts/gen-workflow-metrics.mjs +9 -33
  71. package/templates/_agents/scripts/git-merge-jsonl.mjs +63 -0
  72. package/templates/_agents/scripts/git-merge-jsonl.test.mjs +125 -0
  73. package/templates/_agents/scripts/ledger-doc-chain.test.mjs +166 -0
  74. package/templates/_agents/scripts/ledger-loader.mjs +108 -0
  75. package/templates/_agents/scripts/ledger-loader.test.mjs +131 -0
  76. package/templates/_agents/scripts/ledger-prune.mjs +96 -0
  77. package/templates/_agents/scripts/ledger-prune.test.mjs +120 -0
  78. package/templates/_agents/scripts/ledger-ts-monotonic.test.mjs +135 -0
  79. package/templates/_agents/scripts/level-criteria.mjs +232 -0
  80. package/templates/_agents/scripts/level-criteria.test.mjs +279 -0
  81. package/templates/_agents/scripts/pipeline-run.mjs +4 -2
  82. package/templates/_agents/scripts/policy.mjs +47 -0
  83. package/templates/_agents/scripts/stage-gates.mjs +4 -9
  84. package/templates/_agents/scripts/wf-journal.test.mjs +1 -1
  85. package/templates/_agents/scripts/wiki-search.test.mjs +5 -6
  86. package/templates/_agents/scripts/workflows-check.mjs +1 -1
  87. package/templates/_agents/workflows/pipeline-closing.md +4 -5
  88. package/templates/_githooks/pre-commit +3 -34
  89. package/templates/_githooks/pre-push +3 -3
  90. package/templates/workflow/README.md +11 -0
  91. package/modules/hosts/claude/commands/wf-source-sync-check.md +0 -89
  92. package/modules/hosts/codex/commands/wf-source-sync-check.md +0 -89
  93. package/modules/hosts/cursor/commands/wf-source-sync-check.md +0 -89
  94. package/modules/hosts/opencode/commands/wf-source-sync-check.md +0 -89
  95. package/modules/hosts/trae/commands/wf-source-sync-check.md +0 -90
  96. package/templates/_agents/commands/source-sync-check.md +0 -103
  97. package/templates/_agents/scripts/check-ledger.mjs +0 -109
  98. package/templates/_agents/scripts/check-ledger.test.mjs +0 -199
  99. package/templates/_agents/scripts/source-sync-check.mjs +0 -156
  100. package/templates/_agents/scripts/source-sync-check.test.mjs +0 -286
  101. package/templates/_agents/workflows/source-sync-repair.md +0 -30
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # agentic-flow-kit
2
2
 
3
- AI-Native 闭环工作流 + wiki 知识层脚手架。`flow-kit init` 一条命令为新项目装好整套项目级 AI 工作流引擎:8 个阶段命令、3 个子智能体角色契约、git 门禁钩子(闭环配对 / 敏感信息扫描 / 条件构建 / 规则面预算)、kb 跨语料检索、workflow 实时看板、intents→specs→plans→incidents 文档闭环、wiki 知识库三件套。
3
+ AI-Native 闭环工作流 + wiki 知识层脚手架。`flow-kit init` 一条命令为新项目装好整套项目级 AI 工作流引擎:8 个阶段命令、3 个子智能体角色契约、git 门禁钩子(闭环配对 / 敏感信息扫描 / 条件构建 / 规则面预算)、kb 跨语料检索、workflow 实时看板、intents→specs→plans→incidents 文档闭环、wiki 知识库三件套、**多人/多 worktree 台账并发治理**(并集合并 / 分片归并 / 特许修剪)。
4
4
 
5
5
  **装完本地可跑**:日常闭环(门禁钩子 / check-loop / fill-* / confirm-doc / kb 检索 / 看板)走项目内 `.agents/scripts/`,零 npm 运行时依赖,Node ≥ 18 即可跑;升级 / 体检 / 装门禁(`sync` / `doctor` / `add-host` / `add-gate`)走 `npx agentic-flow-kit`。clone 后只差 `git config core.hooksPath .githooks`——init 会自动挂好。
6
6
 
@@ -39,6 +39,18 @@ node .agents/scripts/confirm-doc.mjs workflow/intents/<文件>.md # 终端里
39
39
 
40
40
  **关于「确认门」的诚实边界**:确认门是**留痕机制,不是防伪机制**。`confirm-doc.mjs` 把确认事件写进 `.agents/confirmations.jsonl`(append-only,入 git),check-loop 据此对账——但台账是本地可写文件,**刻意手改台账仍可伪造**。门禁的实际作用是把「顺手绕过」抬到「主动伪造」(两者性质不同、可事后对质),而非关闭通道。引擎注释对此有完整声明(见包源 `templates/_agents/scripts/stage-gates.mjs` 头部信任边界段;装户径同份在 `.agents/scripts/stage-gates.mjs`)。委托代录(`--delegated`)的台账行如实记 `source` 与用户原话供事后对质,永不伪装 TTY 确认。
41
41
 
42
+ **台账并发(三形态,2026-10-12)**:台账是尾部追加形态,天然撞三种**正常协作**。引擎对每种各有机制,且一律按「正常协作不报红、篡改照拦」设计——门禁若因正常协作持续 hard 拦,唯一出路就是 `--no-verify`,那等于门禁自己废掉自己。
43
+
44
+ | 形态 | 机制 |
45
+ |---|---|
46
+ | 多人/多分支合并冲突 | `.gitattributes` 的 `merge=jsonl-union` → 并集去重,两侧行全保留、无冲突可解(此前人工解的常见错法是「整取一侧」——静默丢掉另一侧的确认行) |
47
+ | 单机多 worktree 并行 append | `confirm-doc --shard` 写 `.agents/confirmations.d/<doc>.jsonl`,各写各的;里程碑跑 `compact-ledgers.mjs --execute` 并回主台账 |
48
+ | 所有者明令删某批文档 | **特许修剪**:同笔提交 `.agents/ledger-prune-manifest.json`(逐行 sha256 + 授权 + 理由),门禁逐行对账放行;无 manifest 的删/改/重排仍全拦 |
49
+
50
+ 哈希链的域是「**同一 doc 的逻辑序**」而非文件物理序(生效日锚,缺键回退旧口径,存量零变化),因此上面三种协作都不打断它;就地改行、删行、插行三类篡改照拦。诚实边界:manifest 是可写文件,**刻意伪造即可让任意删行合法化**——与「台账本地可写」同级,本通道只把「顺手手改」抬到「提交一份可被 git 历史对质的凭据」。
51
+
52
+ > **存量装户迁移动作(升级后必做)**:`merge=jsonl-union` 属 `.gitattributes`,而该文件是**项目自持(owned)**、`sync` 永不覆盖——升级后**不会自动获得**。需手动在目标仓 `.gitattributes` 补一行 `.agents/*.jsonl merge=jsonl-union`。driver 是本机态配置、不跨机共享,`init` 会自动配;漏配则退化为文本冲突(**不静默丢数据,但需人工解**)。
53
+
42
54
  ## 快速开始
43
55
 
44
56
  ```bash
@@ -61,6 +73,30 @@ npx agentic-flow-kit add-host opencode
61
73
  npx agentic-flow-kit add-gate dotnet-ca
62
74
  ```
63
75
 
76
+ ## 执行面:route(手动路由)+ run(自动流水线)
77
+
78
+ 装完之后,CLI 不止管装,还管跑。**md 指令与 md 子代理仍装在装户项目里**(`.agents/commands/`、`.agents/roles/`),宿主读它们;执行代码也留在装户 `.agents/scripts/`,包只做**薄壳转发与判定面**——不复制、不改写、不解释装户的正文。
79
+
80
+ ```bash
81
+ # 手动路由的机器面:定级 + 判据清单 + 泳道 + 下一阶段 + 该读哪个 md
82
+ npx agentic-flow-kit route --kind require --level L1 --files "src/a.ts,src/b.ts"
83
+ npx agentic-flow-kit route --files "src/db/migrations/001_init.sql" --json # 机读面
84
+
85
+ # 自动流水线:薄壳转发装户 pipeline-run 状态机(参数与退出码原样透传)
86
+ npx agentic-flow-kit run start "给导入功能加审计字段"
87
+ npx agentic-flow-kit run next --delegated "可以"
88
+ ```
89
+
90
+ | 命令 | 干什么 | 谁是单源 |
91
+ |------|--------|----------|
92
+ | `route` | 按改动文件给出建议档位、判据清单、泳道(协作道 / 防御道)、`kind` 对应的入口 md | 判据 = `.agents/scripts/level-criteria.mjs`;泳道 = `.agents/scripts/stage-gates.mjs` 的 `laneOfDoc` |
93
+ | `run` | `start` / `next` / `status` / `watch` / `abort` 五个子命令原样转发 | 状态机 = `.agents/scripts/pipeline-run.mjs`;驱动协议 = `.agents/commands/pipeline-run.md` |
94
+
95
+ **诚实边界(重要)**:级别是**意图面**的语义判定(「一处定义、多处消费」),机器判不了语义。机器只兜两件它真能兜的事——**就高不就低**(混档取高)与**路径下限**。路径下限登记在 `.agents/level-hints.txt`(装户自持、内容项目私有、`sync` 永不覆盖、**默认空**);未配置时 `route` 按 L1 起步并提示补配置,**绝不假装判得出**。该清单写错会直接报错退出——写错配置比没配置危险:没配置会提示,写错会误判。
96
+
97
+ 定级纪律最终仍由 lane-surface 触达面门在**提交面**兜底:`route` 漏判语义,钩子照样拦。
98
+
99
+
64
100
  | 选项 | 说明 |
65
101
  |------|------|
66
102
  | `--stack` | `dotnet` / `node` / `python` / `go` / `none`(默认 none)——**门禁配置三处**:commit-check 条件编译检查(暂存对应扩展名时 commit 前自动构建)+ **质量检测**(`checks`:lint / 类型检查 / vet 等秒级确定性检查,存在对应配置文件(tsconfig / eslint / ruff / go.mod 等)才启用,没有则自动跳过;测试不放提交门——关单在 test.md 阶段门)、settings.json 自检验命令权限、AGENTS.md「项目适配区」命令预填 |
@@ -75,6 +111,7 @@ init 不问项目名 / 描述:`AGENTS.md` 只生成「AI工作流 + Wiki」两
75
111
 
76
112
  ```
77
113
  .agents/ 阶段命令×8 / 角色契约×3 / 门禁钩子 / 引擎脚本(检索·索引·看板·预算·聚合)/ 技能×2 / settings.json / kit.json 台账
114
+ + level-criteria.mjs(级别判据机器单源)/ level-hints.txt(项目自持的路径下限清单,默认空)
78
115
  .githooks/ pre-commit(通用门禁编排+项目门禁挂载点)/ pre-push(闭环断档)/ commit-msg / post-commit / pre-merge-commit
79
116
  workflow/ intents/specs/plans/incidents 模板×4 + README 协议 + 台账三件(delegations/papercuts/regression-checklist)
80
117
  wiki/ INDEX 骨架 + 知识沉淀总览 + drafts-archive
@@ -124,10 +161,11 @@ npm install ./agentic-flow-kit-<版本>.tgz # 项目内:之后用 npx
124
161
 
125
162
  **能力清单的单一真相源是 `CHANGELOG.md`**——每个已发布版本带什么、为什么这么带,都在那里。本节只讲当前语义,不重复枚举版本特性(此前列举导致 README 与实际发布内容长期漂移,2026-10-08 已收敛到单源)。
126
163
 
127
- 当前语义三点:
164
+ 当前语义四点:
128
165
 
129
166
  - **门禁面**:check-loop 20 项检查 + `.githooks/` 五个钩子(pre-commit / pre-push / commit-msg / post-commit / pre-merge-commit),门禁逻辑不依赖 agent 客户端自觉。
130
- - **闭环面**:intents → specs → plans → incidents 四态文档链 + 确认台账(`.agents/confirmations.jsonl`)+ 逐阶段前置门(起草门 / 确认门 / done 前置门)。
167
+ - **闭环面**:intents → specs → plans → incidents 四态文档链 + 确认台账(`.agents/confirmations.jsonl`)+ 逐阶段前置门(起草门 / 确认门 / done 前置门)+ **台账并发三形态**(并集合并 / 分片写入与 compact 归并 / 特许修剪)与按 doc 逻辑序的哈希链(见上文「台账并发」段)。
131
168
  - **观测面**:`workflow/INDEX.md`(检索索引)、`workflow/DASHBOARD.md`(红绿灯仪表盘)、`workflow/metrics.md`(月度快照)——**观测面非门禁**,红灯是「看」的不是「拦」的。
169
+ - **执行面**:`route`(手动路由的机器面:定级 + 泳道 + 下一阶段 + 入口 md)与 `run`(自动流水线薄壳转发装户状态机);判据单源在装户 `.agents/scripts/level-criteria.mjs`,md 改为引用它而非承载判据散文(见上文「执行面」段)。
132
170
 
133
171
  版本号与已发布能力看 `package.json` 的 `version` 与 `CHANGELOG.md`;仓库当前工作流实况看 `workflow/INDEX.md`。
@@ -15,10 +15,11 @@ description: Design 阶段:起 spec(L2/L3 强制,L1 可省略)
15
15
  ## 1. 执行
16
16
 
17
17
  1. 确认同名入口文档已批准:新需求为 approved intent,修复为已确认的 incident 草稿;否则拒绝,分别回 `plan.md` / `maintain.md`(2026-09-30 起机器强制:fill-spec / confirm-doc 对前置未过直接拒绝 exit 2、不落盘不记账)。
18
- 2. 级别判断(对照 AGENTS.md 第 3 条):
19
- - **L1**(实现级改动,未命中 L2/L3)→ 走快车道,省略 spec,直接跳 `next: build.md` 起草 Quick-Plan
20
- - **L2**(改规则 / 契约:编码权威 / 共享契约 / 既有接口语义 / 全局横切口径,闭集见 `new-task.md` §级别判断)→ 必须有 spec
21
- - **L3**(数据与运行时结构:schema / 迁移 SQL / DI 链 / 认证与中间件管线)→ 必须有 spec + **新会话独立复核**
18
+ 2. 级别判断(对照 AGENTS.md 第 3 条;判据单源 = `.agents/scripts/level-criteria.mjs`,**本文件只承载流程映射,不复述判据闭集**):
19
+ - **L1**(未命中 L2/L3)→ 快车道:省略 spec,直接跳 `next: build.md` 起草 Quick-Plan
20
+ - **L2**(触达面闭集见单源 `L2_SURFACES`)→ 必须有 spec
21
+ - **L3**(结构面闭集见单源 `L3_SURFACES`)→ 必须有 spec + **新会话独立复核**
22
+ - 判哪一档:逐条对照单源的 `L2_SURFACES` / `L3_SURFACES` / `L1_NEGATIVES`,不要凭记忆——判据只读单源一处
22
23
  3. 起草 spec:
23
24
  - **填空工具先跑**:`node .agents/scripts/fill-spec.mjs --level <L1|L2|L3> --topic <主题> --output workflow/specs/<date>-<主题>.md`——输出含 frontmatter 5 字段 + 5 节正文(功能行为/数据流/系统改动/约束遵守映射/风险评估)的草稿;AI 据此填实
24
25
  - 复制 `workflow/specs/_TEMPLATE.md` → `workflow/specs/YYYY-MM-DD-<主题>.md`(与入口文档同名)
@@ -20,7 +20,21 @@ description: AI-Native 闭环总入口:6 阶段指令索引(Plan→Design→Buil
20
20
 
21
21
  ## 2. 风险定级(第 0 步,先定级再路由)
22
22
 
23
- 动工前先按下表定风险级 L0-L3(就高不就低;判据细则见下节「级别判断」),级别即风险级,决定走哪条泳道——确认放事前,还是审计补事后:
23
+ **第 0 步先取机器面下界(必跑,不是可选提示)**:
24
+
25
+ ```bash
26
+ flow-kit route --files <预计改动面…> --kind require|fix|verify|review|deploy
27
+ ```
28
+
29
+ - **不给 `--files` 就拿不到路径下限**——机器面此时只能按 L1 起步并在降级栏点名,等于白跑;
30
+ 故定级前先把**预计改动面**列出来(不必精确到最终 diff,给到目录/文件前缀即可)。
31
+ - 跑完**再**按 §4 逐条语义判级:机器只给「就高不就低 + 路径下限」,「一处定义、多处消费」仍要你判。
32
+ - **确实跳过**时必须写明理由(入口文档备注或当场告知用户)——判低的后果由两道门兜:
33
+ 起草面 `check-lane-surface` 命中路径下限无合格入口即拦,提交面同门再拦一次。
34
+ **诚实边界**:机器**无法**发现你没跑 route——定级发生在改动面确定之前,没有可比对的记录面,
35
+ 详见 [ARCHITECTURE §5](../ARCHITECTURE.md) 与 CHANGELOG 1.7.16 B3 条。
36
+
37
+ 动工前按下表定风险级 L0-L3(就高不就低;判据细则见下节「级别判断」),级别即风险级,决定走哪条泳道——确认放事前,还是审计补事后:
24
38
 
25
39
  | 泳道 | 级别 | 确认与审计口径 |
26
40
  |------|------|---------------|
@@ -33,6 +47,10 @@ description: AI-Native 闭环总入口:6 阶段指令索引(Plan→Design→Buil
33
47
 
34
48
  ## 3. 路由判断
35
49
 
50
+ <!-- route-kinds: require=plan.md | fix=maintain.md | verify=test.md | review=review.md | deploy=deploy.md -->
51
+ <!-- ↑ 本行是 kind→入口指令的**机器单源**:`flow-kit route` 读它得出「该读哪个 md」,不再在包内自带一份映射。
52
+ 增删 kind 或改入口文件名只改这一行(判据单源 level-criteria.mjs 的纪律同源)。 -->
53
+
36
54
  - **自动化驱动(并列入口,可选)**:一句话全程走 [pipeline-run.md](pipeline-run.md)——状态机驱动+工单协议+原话代录,与下述手动路由二选一,同一任务不混用
37
55
  - **新需求 / 功能**:从 `plan.md` 进,立 **intent**(`workflow/intents/`)
38
56
  - **修复类任务 / 事故**:从 `maintain.md` 进,立 **incident**(`workflow/incidents/`);incident 在 L1+ 即 **intent 等价物**(check-loop 认 incident≡intent),不必另立 intent。先检索同类历史(`node .agents/scripts/kb-search.mjs "<关键词>" --scope workflow --type incidents,plans`),有同类先读其历史三件套;再按级别走:
@@ -45,28 +63,31 @@ description: AI-Native 闭环总入口:6 阶段指令索引(Plan→Design→Buil
45
63
 
46
64
  ## 4. 级别判断(AGENTS.md 第 3 条)
47
65
 
48
- | 级别 | 改什么 | 流程 |
49
- |------|--------|------|
50
- | L0 | 文档/样式微调(无行为影响) | 直接 commit,豁免 intent |
51
- | L1 | **实现级改动**(未命中 L2/L3) | 快车道:液态草稿(.zcode/drafts) → 实现 → 固化(`solidify-task.mjs`)——用户确认后带 `--delegated "<原话>"` 执行;无确认来源只迁移不落账 |
52
- | L2 | **规则 / 契约**(一处改、多处依赖) | 入口文档(intent / incident) + spec + plan 三件套 |
53
- | L3 | **数据与运行时结构**(schema / 迁移 SQL / DI 链 / 认证与中间件管线) | 同 L2 + spec 新会话独立复核 |
54
-
55
- > 级别判定同上表"改什么"列;混合改动按最高档定级。
56
-
57
- **L2 触达面**(闭集,命中任一即 L2;本体不改但改其输入域 / 调用点校验同样命中):
58
-
59
- 1. **编码权威**:项目内「一处生成、多处消费」的编码 / 命名 / 取号规则(编码模板、序列发生器、命名空间与去重约束——具体清单按项目 AGENTS.md)
60
- 2. **共享契约**:跨模块共享的基类 / DTO 形状、跨模块公共接口签名
61
- 3. **既有接口语义**:既有参数或端点的行为变化(由失效变生效、默认值或钳制口径改变)
62
- 4. **全局横切口径**:错误响应出口、分页与校验口径、聚合投影键
66
+ > **判据单源 = [`.agents/scripts/level-criteria.mjs`](../scripts/level-criteria.mjs)**,本节**不复述判据**。
67
+ > 要看判据全文,或要机器可判的部分(路径下限 / 就高不就低 / 混档取高),直接:
68
+ >
69
+ > ```bash
70
+ > flow-kit route --files <改动文件…> # 定级 + 下一阶段 + 该读哪个 md
71
+ > ```
72
+ >
73
+ > 单源导出:`LEVELS` `LEVEL_MEANING`(档位语义) / `L2_SURFACES`(四类触达面闭集) / `L3_SURFACES`(结构面) /
74
+ > `L1_NEGATIVES`(判低红线) / `SELF_CHECK`(自查句) / `assessLevel` `hintLevelFor` `parseLevelHints` `routeAdvice`。
75
+ >
76
+ > 路径下限清单(装户 owned,默认空):`.agents/level-hints.txt`,每行 `L2 <ERE>` / `L3 <ERE>`,登记「哪些路径一碰就至少是此档」。
63
77
 
64
- > **负例(落 L1)**:纯页面表现 / 文案 / 布局 / 交互实现;纯新增端点或参数且既有行为不变;单模块内部重构且无对外契约变化。
65
- > **自查句**:能否列出 ≥2 个受影响的消费方(模块 / 端点 / 页面)?能 → L2。
66
- > 先例:本仓 `workflow/specs/`、`workflow/intents/` 下同类历史(kb 检索主题词)。
78
+ **本表只承载流程**(「改什么」判据以单源为准,别在本表增删判据):
67
79
 
68
- > **L1 是默认档**:红线全不勾即 L1,无需正列举——判级只回答「是否命中 L2 四类或 L3 结构面」。
69
- > **L3 的「DI 链」按组合根与运行时管线理解**:DI 注册、中间件/认证管线、服务构造器依赖变更(先例:本仓 workflow/ 留痕中无 schema 变更仍定 L3 的同类历史)。
80
+ | 级别 | 单源语义(摘要) | 流程 |
81
+ |------|-----------------|------|
82
+ | L0 | 文档/样式微调(无行为影响) | 直接 commit,豁免 intent |
83
+ | L1 | 实现级改动(未命中 L2/L3) | 快车道:液态草稿(.zcode/drafts) → 实现 → 固化(`solidify-task.mjs`)——用户确认后带 `--delegated "<原话>"` 执行;无确认来源只迁移不落账 |
84
+ | L2 | 规则 / 契约(一处改、多处依赖) | 入口文档(intent / incident) + spec + plan 三件套 |
85
+ | L3 | 数据与运行时结构(结构面闭集见单源 `L3_SURFACES`) | 同 L2 + spec 新会话独立复核 |
86
+
87
+ > 混合改动按最高档定级(就高不就低);**L1 是默认档**——判级只回答「是否命中单源 `L2_SURFACES` 或
88
+ > `L3_SURFACES`」,负例(`L1_NEGATIVES`)命中即不得升档;自查句:`SELF_CHECK`。
89
+ > 机器兜得住的只有「就高不就低」与路径下限;「一处定义、多处消费」是**语义**判定,由你按单源逐条判,
90
+ > 漏判由 lane-surface 触达面门在提交面兜。先例:`workflow/specs/`、`workflow/intents/` 下同类历史(kb 检索主题词)。
70
91
 
71
92
  ## 5. intent 豁免(避免小改动也走完整闭环)
72
93
 
@@ -32,7 +32,7 @@ description: 代码评审标准(按风险分级:机器兜底 + AI 自查出
32
32
  - **Create/Update 校验同口径**:Create 已有校验 Update 必须同口径;被引用的标识符字段禁改
33
33
  - **查询分页与状态语义**:分页参数范围校验 + 服务层钳制;非法状态与不存在分离(按项目统一错误口径,如 400 / 404)
34
34
  - **spec 承诺的断言落地**:spec §测试列出的用例 / 断言须真落到测试或验证脚本;「写进 spec」不等于「跑得起来」,且常驻断言禁写成随时间增长的行数常量
35
- - **跨宿主薄适配正文漂移**:改 `templates/_agents/{commands,roles}/*.md` 后必须跑 `flow-kit sync-hosts --apply` 单向同步注册表内全部宿主薄适配(`modules/hosts/<h>/{agents,commands}/*.md`);装户视角由 `flow-kit doctor` §6.7 检查(包源环境 §6.7 skipped)
35
+ - **跨宿主薄适配正文漂移**:包源仓改 `templates/_agents/{commands,roles}/*.md` 后跑 `flow-kit sync-hosts --apply`,单向同步 `modules/hosts/<h>/{agents,commands}/*.md`。装户由 `flow-kit doctor` §6.7 检查(包源环境跳过);装户刷新宿主文件用 `flow-kit add-host <宿主> --force`(`sync` 不更新宿主适配,`sync-hosts` 不在装户根运行)
36
36
 
37
37
  ## 3. P2 建议(提醒,不拦合入)
38
38
 
@@ -6,27 +6,22 @@ description: 跨宿主适配层同步(正文段 sha 比对 + 用户拍板 +
6
6
 
7
7
  # Sync-Hosts · 跨宿主适配层正文段同步
8
8
 
9
- > 改权威源(`templates/_agents/{commands,roles}/*.md`)后薄适配(`modules/hosts/<h>/{agents,commands}/*.md`)要同步——薄适配正文 = 权威源正文,frontmatter 各自保留宿主特化(commands 层文件名 = 宿主命令名,opencode / trae 同用 `wf-` 前缀,单源见 `src/profiles.mjs#HOSTS.commandPrefix`;trae 另有 `name: wf-X`,zcode/omp 各自原描述)。
10
- > 装户视角:`flow-kit doctor` §7.x 跑同名检查(仅装户,包源环境跳过——包源下永远是 drift);**修漂移用同一条命令**
11
- > `flow-kit sync-hosts --apply`——2026-10-07 起按**目标根**自动判布局(含 `templates/_agents` + `modules/hosts` → 包源:
12
- > 比 `templates/_agents` ↔ `modules/hosts/<宿主键>/`;含 `.agents` → 装户:比 `.agents` ↔ 项目根下 `<宿主点目录>/`),
13
- > 目标根取 `--dir <目录>` > 当前目录。
9
+ > 本命令只在包源仓运行(需要 `templates/_agents` 与 `modules/hosts`)。改权威源(`templates/_agents/{commands,roles}/*.md`)后薄适配(`modules/hosts/<h>/{agents,commands}/*.md`)要同步——薄适配正文 = 权威源正文,frontmatter 各自保留宿主特化(commands 层文件名 = 宿主命令名,opencode / trae 同用 `wf-` 前缀,单源见 `src/profiles.mjs#HOSTS.commandPrefix`;trae 另有 `name: wf-X`,zcode/omp 各自原描述)。
10
+ > 装户的宿主文件由 `init` / `add-host` 写入。装户漂移由 `flow-kit doctor` §6.7 报告(包源环境跳过);刷新用 `flow-kit add-host <宿主> --force`。`flow-kit sync` 不更新宿主适配。
14
11
 
15
12
  ## 1. 何时跑
16
13
 
17
14
  - 改 `templates/_agents/commands/*.md` 正文后(11 个 commands 文件)
18
15
  - 改 `templates/_agents/roles/*.md` 正文后(3 个 roles 文件)
19
- - 装户跑 `flow-kit doctor` 报"跨宿主薄适配正文漂移 N 对" WARN 时
20
- - 不跑:仅改 frontmatter;改 trae 钩子/规则;改包源其他文件
16
+ - 不跑:装户仓(本命令会拒绝);仅改 frontmatter;改 trae 钩子/规则;改包源其他文件
21
17
 
22
18
  ## 2. 怎么跑
23
19
 
24
20
  ### 2.1 默认 `--diff`(仅报告)
25
21
 
26
22
  ```
27
- node bin/flow-kit.mjs sync-hosts --diff # 包源仓(在包源根跑)
23
+ node bin/flow-kit.mjs sync-hosts --diff # 包源仓(在包源根跑,或 --dir <包源根>)
28
24
  node bin/flow-kit.mjs sync-hosts --json # 机器可读
29
- flow-kit sync-hosts --diff # 装户仓(在装户根跑;或用 --dir <项目根> 指定)
30
25
  ```
31
26
 
32
27
  输出三类:
@@ -46,9 +41,8 @@ node bin/flow-kit.mjs sync-hosts --apply
46
41
  ### 2.3 自验
47
42
 
48
43
  ```
49
- npm test # 含 sync-hosts.test.mjs 8 场景
50
- node bin/flow-kit.mjs doctor # 装户跑 §7.x PASS;包源跑 §7.x skipped
51
- sh .agents/scripts/check-loop.sh # Windows 无 sh 时 doctor 已探测分流
44
+ npm test # 含 sync-hosts.test.mjs
45
+ node bin/flow-kit.mjs doctor # 包源环境 §6.7 skipped
52
46
  ```
53
47
 
54
48
  ## 3. 边界(不要做)
@@ -63,7 +57,7 @@ sh .agents/scripts/check-loop.sh # Windows 无 sh 时 doctor 已
63
57
 
64
58
  - trae 钩子(`modules/hosts/trae/hooks/*.cjs`)— 独立演进的工程件
65
59
  - trae 规则(`modules/hosts/trae/rules/*.md`)— 同上
66
- - 包源 .agents/scripts/*.cjs(pre-commit 等钩子)— 同步由 `flow-kit sync` 走 managed 台账负责
60
+ - 门禁脚本与钩子(`templates/_agents/scripts`、`templates/_githooks`)— 由 `flow-kit sync` 按 managed 台账下发,不走 sync-hosts
67
61
 
68
62
  ## 5. 相关留痕
69
63
 
@@ -16,7 +16,7 @@ description: Test 阶段:静态门(架构红线 + build + test)+ UI 实测(headl
16
16
  项目测试命令 # 自动化测试
17
17
  项目类型检查命令 # 前端类型检查/构建(涉及前端时跑)
18
18
  node .agents/scripts/verify-wiki-consistency.mjs # 触及 wiki/ 时跑(exit 1 即先修台账再继续:跑 gen-wiki-board.mjs 补索引/看板;pre-commit 已按增量自动拦,此行用于改完即验)
19
- npx agentic-flow-kit doctor # §6.5 delegations + §6.6 owned 漂移 + §6.7 跨宿主薄适配正文漂移(装户环境;包源环境 §6.7 skipped)
19
+ npx agentic-flow-kit doctor # §6.5 delegations + §6.6 owned 漂移 + §6.7 跨宿主薄适配正文漂移(装户环境;漂移用 add-host <宿主> --force 刷新。包源环境 §6.7 skipped)
20
20
  ```
21
21
 
22
22
  > **环境注记**:本地服务占用构建产物导致编译失败、多会话并行时「谁跑静态门 / 提交谁先停服务」等约定——如有,见项目注记 `.agents/notes/runtime-env.md` §2,跑静态门前先过一眼。
@@ -15,10 +15,11 @@ description: Design 阶段:起 spec(L2/L3 强制,L1 可省略)
15
15
  ## 1. 执行
16
16
 
17
17
  1. 确认同名入口文档已批准:新需求为 approved intent,修复为已确认的 incident 草稿;否则拒绝,分别回 `plan.md` / `maintain.md`(2026-09-30 起机器强制:fill-spec / confirm-doc 对前置未过直接拒绝 exit 2、不落盘不记账)。
18
- 2. 级别判断(对照 AGENTS.md 第 3 条):
19
- - **L1**(实现级改动,未命中 L2/L3)→ 走快车道,省略 spec,直接跳 `next: build.md` 起草 Quick-Plan
20
- - **L2**(改规则 / 契约:编码权威 / 共享契约 / 既有接口语义 / 全局横切口径,闭集见 `new-task.md` §级别判断)→ 必须有 spec
21
- - **L3**(数据与运行时结构:schema / 迁移 SQL / DI 链 / 认证与中间件管线)→ 必须有 spec + **新会话独立复核**
18
+ 2. 级别判断(对照 AGENTS.md 第 3 条;判据单源 = `.agents/scripts/level-criteria.mjs`,**本文件只承载流程映射,不复述判据闭集**):
19
+ - **L1**(未命中 L2/L3)→ 快车道:省略 spec,直接跳 `next: build.md` 起草 Quick-Plan
20
+ - **L2**(触达面闭集见单源 `L2_SURFACES`)→ 必须有 spec
21
+ - **L3**(结构面闭集见单源 `L3_SURFACES`)→ 必须有 spec + **新会话独立复核**
22
+ - 判哪一档:逐条对照单源的 `L2_SURFACES` / `L3_SURFACES` / `L1_NEGATIVES`,不要凭记忆——判据只读单源一处
22
23
  3. 起草 spec:
23
24
  - **填空工具先跑**:`node .agents/scripts/fill-spec.mjs --level <L1|L2|L3> --topic <主题> --output workflow/specs/<date>-<主题>.md`——输出含 frontmatter 5 字段 + 5 节正文(功能行为/数据流/系统改动/约束遵守映射/风险评估)的草稿;AI 据此填实
24
25
  - 复制 `workflow/specs/_TEMPLATE.md` → `workflow/specs/YYYY-MM-DD-<主题>.md`(与入口文档同名)
@@ -20,7 +20,21 @@ description: AI-Native 闭环总入口:6 阶段指令索引(Plan→Design→Buil
20
20
 
21
21
  ## 2. 风险定级(第 0 步,先定级再路由)
22
22
 
23
- 动工前先按下表定风险级 L0-L3(就高不就低;判据细则见下节「级别判断」),级别即风险级,决定走哪条泳道——确认放事前,还是审计补事后:
23
+ **第 0 步先取机器面下界(必跑,不是可选提示)**:
24
+
25
+ ```bash
26
+ flow-kit route --files <预计改动面…> --kind require|fix|verify|review|deploy
27
+ ```
28
+
29
+ - **不给 `--files` 就拿不到路径下限**——机器面此时只能按 L1 起步并在降级栏点名,等于白跑;
30
+ 故定级前先把**预计改动面**列出来(不必精确到最终 diff,给到目录/文件前缀即可)。
31
+ - 跑完**再**按 §4 逐条语义判级:机器只给「就高不就低 + 路径下限」,「一处定义、多处消费」仍要你判。
32
+ - **确实跳过**时必须写明理由(入口文档备注或当场告知用户)——判低的后果由两道门兜:
33
+ 起草面 `check-lane-surface` 命中路径下限无合格入口即拦,提交面同门再拦一次。
34
+ **诚实边界**:机器**无法**发现你没跑 route——定级发生在改动面确定之前,没有可比对的记录面,
35
+ 详见 [ARCHITECTURE §5](../ARCHITECTURE.md) 与 CHANGELOG 1.7.16 B3 条。
36
+
37
+ 动工前按下表定风险级 L0-L3(就高不就低;判据细则见下节「级别判断」),级别即风险级,决定走哪条泳道——确认放事前,还是审计补事后:
24
38
 
25
39
  | 泳道 | 级别 | 确认与审计口径 |
26
40
  |------|------|---------------|
@@ -33,6 +47,10 @@ description: AI-Native 闭环总入口:6 阶段指令索引(Plan→Design→Buil
33
47
 
34
48
  ## 3. 路由判断
35
49
 
50
+ <!-- route-kinds: require=plan.md | fix=maintain.md | verify=test.md | review=review.md | deploy=deploy.md -->
51
+ <!-- ↑ 本行是 kind→入口指令的**机器单源**:`flow-kit route` 读它得出「该读哪个 md」,不再在包内自带一份映射。
52
+ 增删 kind 或改入口文件名只改这一行(判据单源 level-criteria.mjs 的纪律同源)。 -->
53
+
36
54
  - **自动化驱动(并列入口,可选)**:一句话全程走 [pipeline-run.md](pipeline-run.md)——状态机驱动+工单协议+原话代录,与下述手动路由二选一,同一任务不混用
37
55
  - **新需求 / 功能**:从 `plan.md` 进,立 **intent**(`workflow/intents/`)
38
56
  - **修复类任务 / 事故**:从 `maintain.md` 进,立 **incident**(`workflow/incidents/`);incident 在 L1+ 即 **intent 等价物**(check-loop 认 incident≡intent),不必另立 intent。先检索同类历史(`node .agents/scripts/kb-search.mjs "<关键词>" --scope workflow --type incidents,plans`),有同类先读其历史三件套;再按级别走:
@@ -45,28 +63,31 @@ description: AI-Native 闭环总入口:6 阶段指令索引(Plan→Design→Buil
45
63
 
46
64
  ## 4. 级别判断(AGENTS.md 第 3 条)
47
65
 
48
- | 级别 | 改什么 | 流程 |
49
- |------|--------|------|
50
- | L0 | 文档/样式微调(无行为影响) | 直接 commit,豁免 intent |
51
- | L1 | **实现级改动**(未命中 L2/L3) | 快车道:液态草稿(.zcode/drafts) → 实现 → 固化(`solidify-task.mjs`)——用户确认后带 `--delegated "<原话>"` 执行;无确认来源只迁移不落账 |
52
- | L2 | **规则 / 契约**(一处改、多处依赖) | 入口文档(intent / incident) + spec + plan 三件套 |
53
- | L3 | **数据与运行时结构**(schema / 迁移 SQL / DI 链 / 认证与中间件管线) | 同 L2 + spec 新会话独立复核 |
54
-
55
- > 级别判定同上表"改什么"列;混合改动按最高档定级。
56
-
57
- **L2 触达面**(闭集,命中任一即 L2;本体不改但改其输入域 / 调用点校验同样命中):
58
-
59
- 1. **编码权威**:项目内「一处生成、多处消费」的编码 / 命名 / 取号规则(编码模板、序列发生器、命名空间与去重约束——具体清单按项目 AGENTS.md)
60
- 2. **共享契约**:跨模块共享的基类 / DTO 形状、跨模块公共接口签名
61
- 3. **既有接口语义**:既有参数或端点的行为变化(由失效变生效、默认值或钳制口径改变)
62
- 4. **全局横切口径**:错误响应出口、分页与校验口径、聚合投影键
66
+ > **判据单源 = [`.agents/scripts/level-criteria.mjs`](../scripts/level-criteria.mjs)**,本节**不复述判据**。
67
+ > 要看判据全文,或要机器可判的部分(路径下限 / 就高不就低 / 混档取高),直接:
68
+ >
69
+ > ```bash
70
+ > flow-kit route --files <改动文件…> # 定级 + 下一阶段 + 该读哪个 md
71
+ > ```
72
+ >
73
+ > 单源导出:`LEVELS` `LEVEL_MEANING`(档位语义) / `L2_SURFACES`(四类触达面闭集) / `L3_SURFACES`(结构面) /
74
+ > `L1_NEGATIVES`(判低红线) / `SELF_CHECK`(自查句) / `assessLevel` `hintLevelFor` `parseLevelHints` `routeAdvice`。
75
+ >
76
+ > 路径下限清单(装户 owned,默认空):`.agents/level-hints.txt`,每行 `L2 <ERE>` / `L3 <ERE>`,登记「哪些路径一碰就至少是此档」。
63
77
 
64
- > **负例(落 L1)**:纯页面表现 / 文案 / 布局 / 交互实现;纯新增端点或参数且既有行为不变;单模块内部重构且无对外契约变化。
65
- > **自查句**:能否列出 ≥2 个受影响的消费方(模块 / 端点 / 页面)?能 → L2。
66
- > 先例:本仓 `workflow/specs/`、`workflow/intents/` 下同类历史(kb 检索主题词)。
78
+ **本表只承载流程**(「改什么」判据以单源为准,别在本表增删判据):
67
79
 
68
- > **L1 是默认档**:红线全不勾即 L1,无需正列举——判级只回答「是否命中 L2 四类或 L3 结构面」。
69
- > **L3 的「DI 链」按组合根与运行时管线理解**:DI 注册、中间件/认证管线、服务构造器依赖变更(先例:本仓 workflow/ 留痕中无 schema 变更仍定 L3 的同类历史)。
80
+ | 级别 | 单源语义(摘要) | 流程 |
81
+ |------|-----------------|------|
82
+ | L0 | 文档/样式微调(无行为影响) | 直接 commit,豁免 intent |
83
+ | L1 | 实现级改动(未命中 L2/L3) | 快车道:液态草稿(.zcode/drafts) → 实现 → 固化(`solidify-task.mjs`)——用户确认后带 `--delegated "<原话>"` 执行;无确认来源只迁移不落账 |
84
+ | L2 | 规则 / 契约(一处改、多处依赖) | 入口文档(intent / incident) + spec + plan 三件套 |
85
+ | L3 | 数据与运行时结构(结构面闭集见单源 `L3_SURFACES`) | 同 L2 + spec 新会话独立复核 |
86
+
87
+ > 混合改动按最高档定级(就高不就低);**L1 是默认档**——判级只回答「是否命中单源 `L2_SURFACES` 或
88
+ > `L3_SURFACES`」,负例(`L1_NEGATIVES`)命中即不得升档;自查句:`SELF_CHECK`。
89
+ > 机器兜得住的只有「就高不就低」与路径下限;「一处定义、多处消费」是**语义**判定,由你按单源逐条判,
90
+ > 漏判由 lane-surface 触达面门在提交面兜。先例:`workflow/specs/`、`workflow/intents/` 下同类历史(kb 检索主题词)。
70
91
 
71
92
  ## 5. intent 豁免(避免小改动也走完整闭环)
72
93
 
@@ -32,7 +32,7 @@ description: 代码评审标准(按风险分级:机器兜底 + AI 自查出
32
32
  - **Create/Update 校验同口径**:Create 已有校验 Update 必须同口径;被引用的标识符字段禁改
33
33
  - **查询分页与状态语义**:分页参数范围校验 + 服务层钳制;非法状态与不存在分离(按项目统一错误口径,如 400 / 404)
34
34
  - **spec 承诺的断言落地**:spec §测试列出的用例 / 断言须真落到测试或验证脚本;「写进 spec」不等于「跑得起来」,且常驻断言禁写成随时间增长的行数常量
35
- - **跨宿主薄适配正文漂移**:改 `templates/_agents/{commands,roles}/*.md` 后必须跑 `flow-kit sync-hosts --apply` 单向同步注册表内全部宿主薄适配(`modules/hosts/<h>/{agents,commands}/*.md`);装户视角由 `flow-kit doctor` §6.7 检查(包源环境 §6.7 skipped)
35
+ - **跨宿主薄适配正文漂移**:包源仓改 `templates/_agents/{commands,roles}/*.md` 后跑 `flow-kit sync-hosts --apply`,单向同步 `modules/hosts/<h>/{agents,commands}/*.md`。装户由 `flow-kit doctor` §6.7 检查(包源环境跳过);装户刷新宿主文件用 `flow-kit add-host <宿主> --force`(`sync` 不更新宿主适配,`sync-hosts` 不在装户根运行)
36
36
 
37
37
  ## 3. P2 建议(提醒,不拦合入)
38
38
 
@@ -6,27 +6,22 @@ description: 跨宿主适配层同步(正文段 sha 比对 + 用户拍板 +
6
6
 
7
7
  # Sync-Hosts · 跨宿主适配层正文段同步
8
8
 
9
- > 改权威源(`templates/_agents/{commands,roles}/*.md`)后薄适配(`modules/hosts/<h>/{agents,commands}/*.md`)要同步——薄适配正文 = 权威源正文,frontmatter 各自保留宿主特化(commands 层文件名 = 宿主命令名,opencode / trae 同用 `wf-` 前缀,单源见 `src/profiles.mjs#HOSTS.commandPrefix`;trae 另有 `name: wf-X`,zcode/omp 各自原描述)。
10
- > 装户视角:`flow-kit doctor` §7.x 跑同名检查(仅装户,包源环境跳过——包源下永远是 drift);**修漂移用同一条命令**
11
- > `flow-kit sync-hosts --apply`——2026-10-07 起按**目标根**自动判布局(含 `templates/_agents` + `modules/hosts` → 包源:
12
- > 比 `templates/_agents` ↔ `modules/hosts/<宿主键>/`;含 `.agents` → 装户:比 `.agents` ↔ 项目根下 `<宿主点目录>/`),
13
- > 目标根取 `--dir <目录>` > 当前目录。
9
+ > 本命令只在包源仓运行(需要 `templates/_agents` 与 `modules/hosts`)。改权威源(`templates/_agents/{commands,roles}/*.md`)后薄适配(`modules/hosts/<h>/{agents,commands}/*.md`)要同步——薄适配正文 = 权威源正文,frontmatter 各自保留宿主特化(commands 层文件名 = 宿主命令名,opencode / trae 同用 `wf-` 前缀,单源见 `src/profiles.mjs#HOSTS.commandPrefix`;trae 另有 `name: wf-X`,zcode/omp 各自原描述)。
10
+ > 装户的宿主文件由 `init` / `add-host` 写入。装户漂移由 `flow-kit doctor` §6.7 报告(包源环境跳过);刷新用 `flow-kit add-host <宿主> --force`。`flow-kit sync` 不更新宿主适配。
14
11
 
15
12
  ## 1. 何时跑
16
13
 
17
14
  - 改 `templates/_agents/commands/*.md` 正文后(11 个 commands 文件)
18
15
  - 改 `templates/_agents/roles/*.md` 正文后(3 个 roles 文件)
19
- - 装户跑 `flow-kit doctor` 报"跨宿主薄适配正文漂移 N 对" WARN 时
20
- - 不跑:仅改 frontmatter;改 trae 钩子/规则;改包源其他文件
16
+ - 不跑:装户仓(本命令会拒绝);仅改 frontmatter;改 trae 钩子/规则;改包源其他文件
21
17
 
22
18
  ## 2. 怎么跑
23
19
 
24
20
  ### 2.1 默认 `--diff`(仅报告)
25
21
 
26
22
  ```
27
- node bin/flow-kit.mjs sync-hosts --diff # 包源仓(在包源根跑)
23
+ node bin/flow-kit.mjs sync-hosts --diff # 包源仓(在包源根跑,或 --dir <包源根>)
28
24
  node bin/flow-kit.mjs sync-hosts --json # 机器可读
29
- flow-kit sync-hosts --diff # 装户仓(在装户根跑;或用 --dir <项目根> 指定)
30
25
  ```
31
26
 
32
27
  输出三类:
@@ -46,9 +41,8 @@ node bin/flow-kit.mjs sync-hosts --apply
46
41
  ### 2.3 自验
47
42
 
48
43
  ```
49
- npm test # 含 sync-hosts.test.mjs 8 场景
50
- node bin/flow-kit.mjs doctor # 装户跑 §7.x PASS;包源跑 §7.x skipped
51
- sh .agents/scripts/check-loop.sh # Windows 无 sh 时 doctor 已探测分流
44
+ npm test # 含 sync-hosts.test.mjs
45
+ node bin/flow-kit.mjs doctor # 包源环境 §6.7 skipped
52
46
  ```
53
47
 
54
48
  ## 3. 边界(不要做)
@@ -63,7 +57,7 @@ sh .agents/scripts/check-loop.sh # Windows 无 sh 时 doctor 已
63
57
 
64
58
  - trae 钩子(`modules/hosts/trae/hooks/*.cjs`)— 独立演进的工程件
65
59
  - trae 规则(`modules/hosts/trae/rules/*.md`)— 同上
66
- - 包源 .agents/scripts/*.cjs(pre-commit 等钩子)— 同步由 `flow-kit sync` 走 managed 台账负责
60
+ - 门禁脚本与钩子(`templates/_agents/scripts`、`templates/_githooks`)— 由 `flow-kit sync` 按 managed 台账下发,不走 sync-hosts
67
61
 
68
62
  ## 5. 相关留痕
69
63
 
@@ -16,7 +16,7 @@ description: Test 阶段:静态门(架构红线 + build + test)+ UI 实测(headl
16
16
  项目测试命令 # 自动化测试
17
17
  项目类型检查命令 # 前端类型检查/构建(涉及前端时跑)
18
18
  node .agents/scripts/verify-wiki-consistency.mjs # 触及 wiki/ 时跑(exit 1 即先修台账再继续:跑 gen-wiki-board.mjs 补索引/看板;pre-commit 已按增量自动拦,此行用于改完即验)
19
- npx agentic-flow-kit doctor # §6.5 delegations + §6.6 owned 漂移 + §6.7 跨宿主薄适配正文漂移(装户环境;包源环境 §6.7 skipped)
19
+ npx agentic-flow-kit doctor # §6.5 delegations + §6.6 owned 漂移 + §6.7 跨宿主薄适配正文漂移(装户环境;漂移用 add-host <宿主> --force 刷新。包源环境 §6.7 skipped)
20
20
  ```
21
21
 
22
22
  > **环境注记**:本地服务占用构建产物导致编译失败、多会话并行时「谁跑静态门 / 提交谁先停服务」等约定——如有,见项目注记 `.agents/notes/runtime-env.md` §2,跑静态门前先过一眼。
@@ -15,10 +15,11 @@ description: Design 阶段:起 spec(L2/L3 强制,L1 可省略)
15
15
  ## 1. 执行
16
16
 
17
17
  1. 确认同名入口文档已批准:新需求为 approved intent,修复为已确认的 incident 草稿;否则拒绝,分别回 `plan.md` / `maintain.md`(2026-09-30 起机器强制:fill-spec / confirm-doc 对前置未过直接拒绝 exit 2、不落盘不记账)。
18
- 2. 级别判断(对照 AGENTS.md 第 3 条):
19
- - **L1**(实现级改动,未命中 L2/L3)→ 走快车道,省略 spec,直接跳 `next: build.md` 起草 Quick-Plan
20
- - **L2**(改规则 / 契约:编码权威 / 共享契约 / 既有接口语义 / 全局横切口径,闭集见 `new-task.md` §级别判断)→ 必须有 spec
21
- - **L3**(数据与运行时结构:schema / 迁移 SQL / DI 链 / 认证与中间件管线)→ 必须有 spec + **新会话独立复核**
18
+ 2. 级别判断(对照 AGENTS.md 第 3 条;判据单源 = `.agents/scripts/level-criteria.mjs`,**本文件只承载流程映射,不复述判据闭集**):
19
+ - **L1**(未命中 L2/L3)→ 快车道:省略 spec,直接跳 `next: build.md` 起草 Quick-Plan
20
+ - **L2**(触达面闭集见单源 `L2_SURFACES`)→ 必须有 spec
21
+ - **L3**(结构面闭集见单源 `L3_SURFACES`)→ 必须有 spec + **新会话独立复核**
22
+ - 判哪一档:逐条对照单源的 `L2_SURFACES` / `L3_SURFACES` / `L1_NEGATIVES`,不要凭记忆——判据只读单源一处
22
23
  3. 起草 spec:
23
24
  - **填空工具先跑**:`node .agents/scripts/fill-spec.mjs --level <L1|L2|L3> --topic <主题> --output workflow/specs/<date>-<主题>.md`——输出含 frontmatter 5 字段 + 5 节正文(功能行为/数据流/系统改动/约束遵守映射/风险评估)的草稿;AI 据此填实
24
25
  - 复制 `workflow/specs/_TEMPLATE.md` → `workflow/specs/YYYY-MM-DD-<主题>.md`(与入口文档同名)
@@ -20,7 +20,21 @@ description: AI-Native 闭环总入口:6 阶段指令索引(Plan→Design→Buil
20
20
 
21
21
  ## 2. 风险定级(第 0 步,先定级再路由)
22
22
 
23
- 动工前先按下表定风险级 L0-L3(就高不就低;判据细则见下节「级别判断」),级别即风险级,决定走哪条泳道——确认放事前,还是审计补事后:
23
+ **第 0 步先取机器面下界(必跑,不是可选提示)**:
24
+
25
+ ```bash
26
+ flow-kit route --files <预计改动面…> --kind require|fix|verify|review|deploy
27
+ ```
28
+
29
+ - **不给 `--files` 就拿不到路径下限**——机器面此时只能按 L1 起步并在降级栏点名,等于白跑;
30
+ 故定级前先把**预计改动面**列出来(不必精确到最终 diff,给到目录/文件前缀即可)。
31
+ - 跑完**再**按 §4 逐条语义判级:机器只给「就高不就低 + 路径下限」,「一处定义、多处消费」仍要你判。
32
+ - **确实跳过**时必须写明理由(入口文档备注或当场告知用户)——判低的后果由两道门兜:
33
+ 起草面 `check-lane-surface` 命中路径下限无合格入口即拦,提交面同门再拦一次。
34
+ **诚实边界**:机器**无法**发现你没跑 route——定级发生在改动面确定之前,没有可比对的记录面,
35
+ 详见 [ARCHITECTURE §5](../ARCHITECTURE.md) 与 CHANGELOG 1.7.16 B3 条。
36
+
37
+ 动工前按下表定风险级 L0-L3(就高不就低;判据细则见下节「级别判断」),级别即风险级,决定走哪条泳道——确认放事前,还是审计补事后:
24
38
 
25
39
  | 泳道 | 级别 | 确认与审计口径 |
26
40
  |------|------|---------------|
@@ -33,6 +47,10 @@ description: AI-Native 闭环总入口:6 阶段指令索引(Plan→Design→Buil
33
47
 
34
48
  ## 3. 路由判断
35
49
 
50
+ <!-- route-kinds: require=plan.md | fix=maintain.md | verify=test.md | review=review.md | deploy=deploy.md -->
51
+ <!-- ↑ 本行是 kind→入口指令的**机器单源**:`flow-kit route` 读它得出「该读哪个 md」,不再在包内自带一份映射。
52
+ 增删 kind 或改入口文件名只改这一行(判据单源 level-criteria.mjs 的纪律同源)。 -->
53
+
36
54
  - **自动化驱动(并列入口,可选)**:一句话全程走 [pipeline-run.md](pipeline-run.md)——状态机驱动+工单协议+原话代录,与下述手动路由二选一,同一任务不混用
37
55
  - **新需求 / 功能**:从 `plan.md` 进,立 **intent**(`workflow/intents/`)
38
56
  - **修复类任务 / 事故**:从 `maintain.md` 进,立 **incident**(`workflow/incidents/`);incident 在 L1+ 即 **intent 等价物**(check-loop 认 incident≡intent),不必另立 intent。先检索同类历史(`node .agents/scripts/kb-search.mjs "<关键词>" --scope workflow --type incidents,plans`),有同类先读其历史三件套;再按级别走:
@@ -45,28 +63,31 @@ description: AI-Native 闭环总入口:6 阶段指令索引(Plan→Design→Buil
45
63
 
46
64
  ## 4. 级别判断(AGENTS.md 第 3 条)
47
65
 
48
- | 级别 | 改什么 | 流程 |
49
- |------|--------|------|
50
- | L0 | 文档/样式微调(无行为影响) | 直接 commit,豁免 intent |
51
- | L1 | **实现级改动**(未命中 L2/L3) | 快车道:液态草稿(.zcode/drafts) → 实现 → 固化(`solidify-task.mjs`)——用户确认后带 `--delegated "<原话>"` 执行;无确认来源只迁移不落账 |
52
- | L2 | **规则 / 契约**(一处改、多处依赖) | 入口文档(intent / incident) + spec + plan 三件套 |
53
- | L3 | **数据与运行时结构**(schema / 迁移 SQL / DI 链 / 认证与中间件管线) | 同 L2 + spec 新会话独立复核 |
54
-
55
- > 级别判定同上表"改什么"列;混合改动按最高档定级。
56
-
57
- **L2 触达面**(闭集,命中任一即 L2;本体不改但改其输入域 / 调用点校验同样命中):
58
-
59
- 1. **编码权威**:项目内「一处生成、多处消费」的编码 / 命名 / 取号规则(编码模板、序列发生器、命名空间与去重约束——具体清单按项目 AGENTS.md)
60
- 2. **共享契约**:跨模块共享的基类 / DTO 形状、跨模块公共接口签名
61
- 3. **既有接口语义**:既有参数或端点的行为变化(由失效变生效、默认值或钳制口径改变)
62
- 4. **全局横切口径**:错误响应出口、分页与校验口径、聚合投影键
66
+ > **判据单源 = [`.agents/scripts/level-criteria.mjs`](../scripts/level-criteria.mjs)**,本节**不复述判据**。
67
+ > 要看判据全文,或要机器可判的部分(路径下限 / 就高不就低 / 混档取高),直接:
68
+ >
69
+ > ```bash
70
+ > flow-kit route --files <改动文件…> # 定级 + 下一阶段 + 该读哪个 md
71
+ > ```
72
+ >
73
+ > 单源导出:`LEVELS` `LEVEL_MEANING`(档位语义) / `L2_SURFACES`(四类触达面闭集) / `L3_SURFACES`(结构面) /
74
+ > `L1_NEGATIVES`(判低红线) / `SELF_CHECK`(自查句) / `assessLevel` `hintLevelFor` `parseLevelHints` `routeAdvice`。
75
+ >
76
+ > 路径下限清单(装户 owned,默认空):`.agents/level-hints.txt`,每行 `L2 <ERE>` / `L3 <ERE>`,登记「哪些路径一碰就至少是此档」。
63
77
 
64
- > **负例(落 L1)**:纯页面表现 / 文案 / 布局 / 交互实现;纯新增端点或参数且既有行为不变;单模块内部重构且无对外契约变化。
65
- > **自查句**:能否列出 ≥2 个受影响的消费方(模块 / 端点 / 页面)?能 → L2。
66
- > 先例:本仓 `workflow/specs/`、`workflow/intents/` 下同类历史(kb 检索主题词)。
78
+ **本表只承载流程**(「改什么」判据以单源为准,别在本表增删判据):
67
79
 
68
- > **L1 是默认档**:红线全不勾即 L1,无需正列举——判级只回答「是否命中 L2 四类或 L3 结构面」。
69
- > **L3 的「DI 链」按组合根与运行时管线理解**:DI 注册、中间件/认证管线、服务构造器依赖变更(先例:本仓 workflow/ 留痕中无 schema 变更仍定 L3 的同类历史)。
80
+ | 级别 | 单源语义(摘要) | 流程 |
81
+ |------|-----------------|------|
82
+ | L0 | 文档/样式微调(无行为影响) | 直接 commit,豁免 intent |
83
+ | L1 | 实现级改动(未命中 L2/L3) | 快车道:液态草稿(.zcode/drafts) → 实现 → 固化(`solidify-task.mjs`)——用户确认后带 `--delegated "<原话>"` 执行;无确认来源只迁移不落账 |
84
+ | L2 | 规则 / 契约(一处改、多处依赖) | 入口文档(intent / incident) + spec + plan 三件套 |
85
+ | L3 | 数据与运行时结构(结构面闭集见单源 `L3_SURFACES`) | 同 L2 + spec 新会话独立复核 |
86
+
87
+ > 混合改动按最高档定级(就高不就低);**L1 是默认档**——判级只回答「是否命中单源 `L2_SURFACES` 或
88
+ > `L3_SURFACES`」,负例(`L1_NEGATIVES`)命中即不得升档;自查句:`SELF_CHECK`。
89
+ > 机器兜得住的只有「就高不就低」与路径下限;「一处定义、多处消费」是**语义**判定,由你按单源逐条判,
90
+ > 漏判由 lane-surface 触达面门在提交面兜。先例:`workflow/specs/`、`workflow/intents/` 下同类历史(kb 检索主题词)。
70
91
 
71
92
  ## 5. intent 豁免(避免小改动也走完整闭环)
72
93
 
@@ -32,7 +32,7 @@ description: 代码评审标准(按风险分级:机器兜底 + AI 自查出
32
32
  - **Create/Update 校验同口径**:Create 已有校验 Update 必须同口径;被引用的标识符字段禁改
33
33
  - **查询分页与状态语义**:分页参数范围校验 + 服务层钳制;非法状态与不存在分离(按项目统一错误口径,如 400 / 404)
34
34
  - **spec 承诺的断言落地**:spec §测试列出的用例 / 断言须真落到测试或验证脚本;「写进 spec」不等于「跑得起来」,且常驻断言禁写成随时间增长的行数常量
35
- - **跨宿主薄适配正文漂移**:改 `templates/_agents/{commands,roles}/*.md` 后必须跑 `flow-kit sync-hosts --apply` 单向同步注册表内全部宿主薄适配(`modules/hosts/<h>/{agents,commands}/*.md`);装户视角由 `flow-kit doctor` §6.7 检查(包源环境 §6.7 skipped)
35
+ - **跨宿主薄适配正文漂移**:包源仓改 `templates/_agents/{commands,roles}/*.md` 后跑 `flow-kit sync-hosts --apply`,单向同步 `modules/hosts/<h>/{agents,commands}/*.md`。装户由 `flow-kit doctor` §6.7 检查(包源环境跳过);装户刷新宿主文件用 `flow-kit add-host <宿主> --force`(`sync` 不更新宿主适配,`sync-hosts` 不在装户根运行)
36
36
 
37
37
  ## 3. P2 建议(提醒,不拦合入)
38
38