agentic-flow-kit 1.7.0 → 1.7.15

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 (110) hide show
  1. package/README.md +40 -6
  2. package/modules/gates/README.md +1 -0
  3. package/modules/gates/test-protect/README.md +23 -0
  4. package/modules/gates/test-protect/check-test-protect.mjs +64 -0
  5. package/modules/gates/test-protect/local-pre-commit.line +1 -0
  6. package/modules/hosts/README.md +57 -0
  7. package/modules/hosts/claude/commands/wf-build.md +5 -24
  8. package/modules/hosts/claude/commands/wf-deploy.md +1 -0
  9. package/modules/hosts/claude/commands/wf-design.md +2 -2
  10. package/modules/hosts/claude/commands/wf-gate-checklist.md +1 -3
  11. package/modules/hosts/claude/commands/wf-plan.md +1 -1
  12. package/modules/hosts/claude/commands/wf-source-sync-check.md +1 -3
  13. package/modules/hosts/claude/commands/wf-sync-hosts.md +1 -3
  14. package/modules/hosts/claude/commands/wf-test.md +5 -4
  15. package/modules/hosts/codex/commands/wf-build.md +5 -24
  16. package/modules/hosts/codex/commands/wf-deploy.md +1 -0
  17. package/modules/hosts/codex/commands/wf-design.md +2 -2
  18. package/modules/hosts/codex/commands/wf-gate-checklist.md +1 -3
  19. package/modules/hosts/codex/commands/wf-plan.md +1 -1
  20. package/modules/hosts/codex/commands/wf-source-sync-check.md +1 -3
  21. package/modules/hosts/codex/commands/wf-sync-hosts.md +1 -3
  22. package/modules/hosts/codex/commands/wf-test.md +5 -4
  23. package/modules/hosts/cursor/commands/wf-build.md +5 -24
  24. package/modules/hosts/cursor/commands/wf-deploy.md +1 -0
  25. package/modules/hosts/cursor/commands/wf-design.md +2 -2
  26. package/modules/hosts/cursor/commands/wf-gate-checklist.md +1 -3
  27. package/modules/hosts/cursor/commands/wf-plan.md +1 -1
  28. package/modules/hosts/cursor/commands/wf-source-sync-check.md +1 -3
  29. package/modules/hosts/cursor/commands/wf-sync-hosts.md +1 -3
  30. package/modules/hosts/cursor/commands/wf-test.md +5 -4
  31. package/modules/hosts/opencode/commands/wf-build.md +5 -24
  32. package/modules/hosts/opencode/commands/wf-deploy.md +1 -0
  33. package/modules/hosts/opencode/commands/wf-design.md +2 -2
  34. package/modules/hosts/opencode/commands/wf-gate-checklist.md +1 -3
  35. package/modules/hosts/opencode/commands/wf-plan.md +1 -1
  36. package/modules/hosts/opencode/commands/wf-source-sync-check.md +1 -3
  37. package/modules/hosts/opencode/commands/wf-sync-hosts.md +1 -3
  38. package/modules/hosts/opencode/commands/wf-test.md +5 -4
  39. package/modules/hosts/trae/commands/wf-build.md +5 -24
  40. package/modules/hosts/trae/commands/wf-deploy.md +1 -0
  41. package/modules/hosts/trae/commands/wf-design.md +2 -2
  42. package/modules/hosts/trae/commands/wf-gate-checklist.md +1 -3
  43. package/modules/hosts/trae/commands/wf-plan.md +1 -1
  44. package/modules/hosts/trae/commands/wf-source-sync-check.md +1 -3
  45. package/modules/hosts/trae/commands/wf-sync-hosts.md +1 -3
  46. package/modules/hosts/trae/commands/wf-test.md +5 -4
  47. package/package.json +2 -2
  48. package/src/add-gate.mjs +25 -1
  49. package/src/add-gate.test.mjs +103 -0
  50. package/src/cli.mjs +17 -2
  51. package/src/doctor.mjs +99 -11
  52. package/src/gates.test.mjs +17 -0
  53. package/src/init.mjs +7 -1
  54. package/src/init.test.mjs +19 -0
  55. package/src/instance-ref.test.mjs +62 -0
  56. package/src/jscpd-drift.test.mjs +144 -0
  57. package/src/render.mjs +5 -0
  58. package/src/rule-budget.test.mjs +103 -0
  59. package/src/sync-hosts.mjs +4 -2
  60. package/src/trae-hooks.test.mjs +15 -3
  61. package/src/validate.mjs +72 -0
  62. package/src/validate.test.mjs +95 -0
  63. package/templates/AGENTS.md +1 -0
  64. package/templates/_agents/commands/build.md +5 -24
  65. package/templates/_agents/commands/deploy.md +1 -0
  66. package/templates/_agents/commands/design.md +2 -2
  67. package/templates/_agents/commands/gate-checklist.md +1 -3
  68. package/templates/_agents/commands/plan.md +1 -1
  69. package/templates/_agents/commands/source-sync-check.md +1 -3
  70. package/templates/_agents/commands/sync-hosts.md +1 -3
  71. package/templates/_agents/commands/test.md +5 -4
  72. package/templates/_agents/control-surfaces.txt +53 -0
  73. package/templates/_agents/scripts/agg-delegations.cjs +51 -6
  74. package/templates/_agents/scripts/agg-delegations.test.mjs +79 -1
  75. package/templates/_agents/scripts/check-engine-integrity.mjs +288 -0
  76. package/templates/_agents/scripts/check-engine-integrity.test.mjs +227 -0
  77. package/templates/_agents/scripts/check-lane-surface.mjs +7 -2
  78. package/templates/_agents/scripts/check-ledger.test.mjs +2 -0
  79. package/templates/_agents/scripts/check-loop.mjs +206 -4
  80. package/templates/_agents/scripts/check-loop.test.mjs +312 -2
  81. package/templates/_agents/scripts/confirm-doc.mjs +14 -1
  82. package/templates/_agents/scripts/confirm-doc.test.mjs +59 -0
  83. package/templates/_agents/scripts/doctor.test.mjs +251 -1
  84. package/templates/_agents/scripts/draft-sediment.mjs +178 -0
  85. package/templates/_agents/scripts/draft-sediment.test.mjs +272 -0
  86. package/templates/_agents/scripts/gate-checklist.mjs +10 -2
  87. package/templates/_agents/scripts/gate-checklist.test.mjs +7 -1
  88. package/templates/_agents/scripts/gen-wiki-board.mjs +61 -6
  89. package/templates/_agents/scripts/gen-wiki-board.test.mjs +74 -1
  90. package/templates/_agents/scripts/gen-workflow-dashboard.mjs +2 -2
  91. package/templates/_agents/scripts/gen-workflow-metrics.mjs +11 -5
  92. package/templates/_agents/scripts/kb-search.mjs +87 -12
  93. package/templates/_agents/scripts/kb-search.test.mjs +83 -0
  94. package/templates/_agents/scripts/pipeline-run.mjs +1 -1
  95. package/templates/_agents/scripts/solidify-task.mjs +1 -1
  96. package/templates/_agents/scripts/source-sync-check.test.mjs +9 -4
  97. package/templates/_agents/scripts/stage-gates.mjs +48 -1
  98. package/templates/_agents/scripts/stage-gates.test.mjs +105 -0
  99. package/templates/_agents/scripts/verify-wiki-consistency.mjs +34 -0
  100. package/templates/_agents/scripts/verify-wiki-consistency.test.mjs +44 -2
  101. package/templates/_agents/scripts/verify.mjs +1 -1
  102. package/templates/_agents/scripts-test-exempt.txt +3 -1
  103. package/templates/_agents/skills/wiki/SKILL.md +5 -3
  104. package/templates/wiki/INDEX.md +44 -1
  105. package/templates/wiki//347/237/245/350/257/206/346/262/211/346/267/200/346/200/273/350/247/210.html +22 -1
  106. package/templates/workflow/delegations.md +5 -4
  107. package/templates/workflow/incidents/_TEMPLATE.md +2 -0
  108. package/templates/workflow/intents/_TEMPLATE.md +3 -0
  109. package/templates/workflow/plans/_TEMPLATE.md +4 -0
  110. package/templates/workflow/specs/_TEMPLATE.md +23 -0
@@ -12,7 +12,7 @@ description: Build 阶段:起 plan + 实现代码 + 自验(确认后才动代码
12
12
 
13
13
  起草 intent / spec / plan 任一件后,**在输出草稿全文前先给三件要点总览**(各一件:目标 / 关键取舍 /
14
14
  验收判据 diff,合计 ≤12 行)——用户一次看整体再逐件拍板,省三次盲确认的上下文切换。
15
- 确认纪律不变:逐件过目全文 + 逐件 `confirm-doc` 代录(禁并录、禁复用同句)。本阶段总览侧重:plan 任务拆解与两道确认门位置。
15
+ 确认纪律不变:逐件过目全文 + 逐件 `confirm-doc` 代录(禁并录;摘要可复用——分辨力由 scope+指纹承担,2026-10-09 起)。本阶段总览侧重:plan 任务拆解与两道确认门位置。
16
16
 
17
17
  ## 1. 执行
18
18
 
@@ -23,7 +23,7 @@ description: Build 阶段:起 plan + 实现代码 + 自验(确认后才动代码
23
23
  - 复制 `workflow/plans/_TEMPLATE.md` → `workflow/plans/YYYY-MM-DD-<主题>.md`(与入口文档同名)
24
24
  - L2/L3 按 4 节填写:改动方案 / 任务拆解(每个任务有判据) / 执行顺序 / 验证计划(与 fill-plan.mjs 单源一致)
25
25
  - L1 使用 Quick-Plan 极简三节:改动方案 / 约束与风险(原 Spec 核心) / 验证计划;多文件多步骤时可补任务拆解/执行顺序
26
- 3. 停下,输出 plan 草稿全文给用户过目,一句"可以"即确认。**逐件确认**:入口文档 / spec / plan 各自的确认点不得并作一次,plan 草稿须全文过目(不接受摘要代替)。**逐件配逐件原话**:`--delegated` 每次传当次实际放行的措辞,不复用同句——复用同句使台账 quote 失去分辨力(事后对质看不出放行的是哪一件);原因与根治见 workflow/papercuts.md 2026-09-28。
26
+ 3. 停下,输出 plan 草稿全文给用户过目,一句"可以"即确认。**逐件确认**:入口文档 / spec / plan 各自的确认点不得并作一次,plan 草稿须全文过目(不接受摘要代替)。**逐件代录**:`--delegated "<授权摘要>"` 每件单独一次——摘要为人类可读留痕,复用同句不削弱判据(分辨力由落账自动记录的改动面 `scope{files,sha256}` 与文档指纹承担,2026-10-09 起)。
27
27
  **确认落态**:唯一入口 `node .agents/scripts/confirm-doc.mjs <path>`(draft→approved / approved→done;TTY 两形态 / 一次一份多份并录被拒 / 台账对质全口径见根 `AGENTS.md` §1.3 确认门)。
28
28
  4. 确认后 → plan 状态 draft → approved,并在 plan 内补「确认与复核」节(确认结果 + 日期)。确认环节须在文档留痕:`approved` 是确认的机器可见态,`done` 只在关单出现,禁从 `draft` 直跳 `done`;确认后立即 `docs(workflow)` 单独提交留痕(根 `AGENTS.md` 提交约定;check-loop 检查 14 口径)。
29
29
 
@@ -33,7 +33,7 @@ description: Build 阶段:起 plan + 实现代码 + 自验(确认后才动代码
33
33
  - **先拉同模块历史坑**:按入口文档 `模块:` 跑 `node .agents/scripts/kb-search.mjs --scope workflow --module <token> "<关键词>"`——命中 incident 的根因 / 防复发条目列入改动自查
34
34
  - 列改动文件清单(读后改 vs 新建)
35
35
  - 列步骤(改 X 文件做 Y → 改 Z 文件做 W)
36
- - **owned 文件同步**:kit.owned 列表文件(AGENTS.md / workflow 模板等)sync 不动,须列「手动同步装副本」步骤(见 incidents/2026-09-25-wf-runtime 复盘)
36
+ - **owned 文件同步**:kit.owned 列表文件(AGENTS.md / workflow 模板等)sync 不动,须列「手动同步装副本」步骤(仅包源/dogfood 双形态仓适用;纯装户仓 owned 即项目自有文件,无此步)
37
37
  - 标注触达红线(对照根 `AGENTS.md` 红线/约束相关节(如「项目适配区」「门禁与提交」)+ 改动域目录级 `AGENTS.md`(如有))
38
38
  6. 停下,等用户确认改动清单。
39
39
 
@@ -56,32 +56,13 @@ description: Build 阶段:起 plan + 实现代码 + 自验(确认后才动代码
56
56
 
57
57
  - 红线(架构 / 数据 / 安全等)正文与豁免见根与目录级 `AGENTS.md`(如有)——已由 pre-commit 机器门强制的部分以钩子为准,写代码前先过一遍目录级 AGENTS
58
58
 
59
- ## 4. 改权威源后必跑(薄适配同步防漏)
60
-
61
- - 改 `templates/_agents/{commands,roles}/*.md` 正文后跑 `node bin/flow-kit.mjs sync-hosts --diff` → 拍板 → `--apply` 单向同步(只动正文段,frontmatter 不动);口径与边界详见 `.agents/commands/sync-hosts.md`
62
- - 改根 `AGENTS.md`(owned 常驻面)后跑 `node .agents/scripts/edit-face-check.mjs`——工作树面快检(阶段索引/引用/预算 advisory),别等提交门才发觉砍坏(2026-10-09 B2)
63
-
64
- ## 5. 改 doctor / check-loop 后必跑(三处口径对账)
65
-
66
- - 改 `src/doctor.mjs` 加新 § 检查项 → 跑 `node .agents/scripts/gate-checklist.mjs --diff` 看 doctor ↔ check-loop 对照表
67
- - 改 `.agents/scripts/check-loop.sh` 加新 § 检查项 → 同上
68
- - 任一处有而另一边无 → 工具报"缺点",由用户拍板是否补齐(不自动同步,B-b 决策);详见 `.agents/commands/gate-checklist.md`
69
-
70
- ## 6. 改包源后必跑(装户面同步一致性)
71
-
72
- - 改 `templates/_agents/*` 包源后 → 跑 `node .agents/scripts/source-sync-check.mjs --diff` 看装副本 `.agents/` 是否同步(缺失 / 孤儿 / 漂移三类差异)
73
- - 漂移说明包源改了装副本未跟;缺失说明新增文件 init 未执行;孤儿说明装副本独有(可能是装户配置,不删)
74
- - **新增 managed 类文件须经 init/sync 登记,禁手动双写绕过台账**——手工同时写 `templates/_agents/` 与 `.agents/` 会绕过台账登记,使该文件永远不被 sync 升级(`doctor` 台账覆盖率检查会拦;见 incidents/2026-09-26-managed-ledger-adopt 复盘)
75
- - 门禁边界(pre-commit 双源一致性):比较工作树非暂存区——两侧改好、分两笔提交不拦(最终一致即可);包源删除文件退化为「孤儿」只报告不拦,删包源须手动清理装副本残件(复核 P2-2 声明,2026-09-27 gate-hardening-p2-batch)
76
- - B-b 决策「只报告不修复」;详见 `.agents/commands/source-sync-check.md`
77
-
78
- ## 7. 子代理调用约定
59
+ ## 4. 子代理调用约定
79
60
 
80
61
  - plan 起草、风险判断、改动清单与两道确认门由主智能体负责;仅两道确认后范围明确的工作包可委派 `implementer`,公共接口 / Schema / 依赖 / 安全 / 权限 / 破坏性操作不得委派。
81
62
  - 多工作包并行 / 链式推进:编排机制(声明随 plan 草稿一并确认;确认后读 `.agents/workflows/` 按机制文档执行,`steps/` 为项目自定义步骤扩展点);详见 `.agents/workflows/_TEMPLATE.md`。
82
63
  - 子智能体返回后,主智能体须检查 diff 与授权文件范围、确认未覆盖既有修改并重跑相关验证;不支持子智能体时 `fallback: main`,验收标准不变。
83
64
 
84
- ## 8. 确认后
65
+ ## 5. 确认后
85
66
 
86
67
  - plan 状态 → done(实现完成;intent / spec 关单在 test)
87
68
  - commit:L1+ 入口文档 / spec / plan 随代码同一提交(Conventional Commits 中文 feat/fix/refactor/perf);docs 豁免与 bootstrap 可单独 `docs(*)`
@@ -41,6 +41,7 @@ description: Deploy 阶段:prod 上线清单(静态门 + 配对检查 + 回归 +
41
41
  ## 6. 上线后观察(用户观察,Maintain 阶段接手)
42
42
 
43
43
  - 观察期:上线后 24h;由用户观察错误率 / 延迟 / 关键业务流(无监控时人工看)
44
+ - 异常判据(观察期退出规则):项目口径填 `workflow/regression-checklist.md`——无监控时的最低判据:错误日志 / 异常告警 / 关键业务流失败**任一出现即触发 §5 回滚预案,不等 24h**;无异常满 24h 方可闭环
44
45
  - 闭环宣告:用户确认无异常后才算闭环;AI 不得自行宣告
45
46
  - 异常回落:超阈值 → 生成 `workflow/incidents/YYYY-MM-DD-<主题>.md`,进 `maintain.md`(止血方案用户拍板,见 maintain.md §0)
46
47
  - 事故响应:单用途账号 + 最小权限;不得跨智能体协作推送修复(参考 Anthropic 教训)
@@ -10,7 +10,7 @@ description: Design 阶段:起 spec(L2/L3 强制,L1 可省略)
10
10
 
11
11
  起草 intent / spec / plan 任一件后,**在输出草稿全文前先给三件要点总览**(各一件:目标 / 关键取舍 /
12
12
  验收判据 diff,合计 ≤12 行)——用户一次看整体再逐件拍板,省三次盲确认的上下文切换。
13
- 确认纪律不变:逐件过目全文 + 逐件 `confirm-doc` 代录(禁并录、禁复用同句)。本阶段总览侧重:spec 方案取舍与 L3 复核安排。
13
+ 确认纪律不变:逐件过目全文 + 逐件 `confirm-doc` 代录(禁并录;摘要可复用——分辨力由 scope+指纹承担,2026-10-09 起)。本阶段总览侧重:spec 方案取舍与 L3 复核安排。
14
14
 
15
15
  ## 1. 执行
16
16
 
@@ -43,6 +43,6 @@ description: Design 阶段:起 spec(L2/L3 强制,L1 可省略)
43
43
  ## 4. 确认后
44
44
 
45
45
  - spec 状态 draft → approved
46
- - **确认落态**:唯一入口 `node .agents/scripts/confirm-doc.mjs <path>`(draft→approved / approved→done;TTY 两形态 / 逐件调用+逐件原话 / 台账对质全口径见根 `AGENTS.md` §1.3 确认门)。
46
+ - **确认落态**:唯一入口 `node .agents/scripts/confirm-doc.mjs <path>`(draft→approved / approved→done;TTY 两形态 / 逐件代录(摘要可复用——分辨力由 scope+指纹承担)/ 台账对质全口径见根 `AGENTS.md` §1.3 确认门)。
47
47
  - 立即 `docs(workflow)` 单独提交留痕(根 `AGENTS.md` 提交约定;check-loop 检查 14 口径)
48
48
  - 进 `next: .agents/commands/build.md`
@@ -74,6 +74,4 @@ npm test # 含 gate-checklist 套件
74
74
 
75
75
  ## 6. 相关留痕
76
76
 
77
- - intent(登记表重写):`workflow/intents/2026-09-25-gate-checklist-registry.md`
78
- - intent(工具首建):`workflow/intents/2026-09-25-gate-checklist.md`
79
- - 父 incident:`workflow/incidents/2026-09-25-wf-runtime.md`(owned 漂移未对账,催生本工具)
77
+ - 立法出处:2026-09-25(登记表重写 + 工具首建;父事件 = owned 漂移未对账,催生本工具)——留痕在包源仓 git 历史与 CHANGELOG,装户径不引实例路径
@@ -20,7 +20,7 @@ description: Plan 阶段:立 intent(需求来源 / 目标 / 约束 / 触达红
20
20
  - 红线勾选对照根 `AGENTS.md` 红线/约束相关节(如「项目适配区」「门禁与提交」)+ 改动域目录级 `AGENTS.md`(如有);**没触及就全不勾**,不要硬填
21
21
  3. 写不出可测试判据 = 还没想清楚 → 反问澄清,不要硬填。
22
22
  4. 起草后停下,输出草稿全文给用户过目,一句"可以"即确认。
23
- **确认落态**:唯一入口 `node .agents/scripts/confirm-doc.mjs <path>`(draft→approved / approved→done;TTY 两形态 / 逐件调用+逐件原话 / 台账对质全口径见根 `AGENTS.md` §1.3 确认门)。
23
+ **确认落态**:唯一入口 `node .agents/scripts/confirm-doc.mjs <path>`(draft→approved / approved→done;TTY 两形态 / 逐件代录(摘要可复用——分辨力由 scope+指纹承担)/ 台账对质全口径见根 `AGENTS.md` §1.3 确认门)。
24
24
 
25
25
  ## 2. 技能辅助(可选,宿主级 skills)
26
26
 
@@ -86,6 +86,4 @@ flow-kit doctor # 10/0/0
86
86
 
87
87
  ## 6. 相关留痕
88
88
 
89
- - intent:`workflow/intents/2026-09-25-source-sync-check.md`
90
- - plan:`workflow/plans/2026-09-25-source-sync-check.md`
91
- - 父 incident:`workflow/incidents/2026-09-25-wf-runtime.md`(包源改了装副本未同步——本工具预防性体检)
89
+ - 立法出处:2026-09-25 source-sync-check(intent/plan;父事件 = 包源改了装副本未同步,本工具预防性体检)——留痕在包源仓 git 历史与 CHANGELOG,装户径不引实例路径
@@ -67,6 +67,4 @@ sh .agents/scripts/check-loop.sh # Windows 无 sh 时 doctor 已
67
67
 
68
68
  ## 5. 相关留痕
69
69
 
70
- - intent:`workflow/intents/2026-09-25-cross-host-sync.md`
71
- - plan:`workflow/plans/2026-09-25-cross-host-sync.md`(含 B-b 方案拍板)
72
- - incident:`workflow/incidents/2026-09-25-wf-runtime.md`(双源纪律教训,规范 §7.x 包源环境跳过)
70
+ - 立法出处:2026-09-25 cross-host-sync(intent/plan,含 B-b 方案拍板;父事件 = wf-runtime 双源纪律教训,规范 §7.x 包源环境跳过)——留痕在包源仓 git 历史与 CHANGELOG,装户径不引实例路径
@@ -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
- node bin/flow-kit.mjs 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 跨宿主薄适配正文漂移(装户环境;包源环境 §6.7 skipped)
20
20
  ```
21
21
 
22
22
  > **环境注记**:本地服务占用构建产物导致编译失败、多会话并行时「谁跑静态门 / 提交谁先停服务」等约定——如有,见项目注记 `.agents/notes/runtime-env.md` §2,跑静态门前先过一眼。
@@ -55,11 +55,12 @@ node bin/flow-kit.mjs doctor # §6.5 delegations + §6.6 o
55
55
 
56
56
  - 输出测试报告(通过项 / 失败项);失败项已修复并复测通过。
57
57
  - **关单**(日常闭环点,不依赖是否上 prod):
58
- - 关单前一键过门:`node .agents/scripts/verify.mjs --doc workflow/intents/<本单>.md`(npm test + check-loop 固定编排,任一失败非零退出,非绿不关单);**`--doc` 把测试绿凭证绑到本单**——不带它落下的绿行不给任何单背书,confirm-doc 前置与检查 8 对账只认带本单 `--doc` 的绿行(仅 v6+ 生效);**装户仓**(根目录无 `package.json`,工程在子目录)默认 `npm test` 不可跑 → 脚本**显式跳过步骤 1 且不落测试绿凭证**(防假绿)并提示;此时按项目口径手工跑测试,或带 `--test-cmd "<项目测试命令>"` 指定(2026-10-07 papercut)
58
+ - 关单前一键过门:`node .agents/scripts/verify.mjs --doc workflow/intents/<本单>.md`(npm test + check-loop 固定编排,任一失败非零退出,非绿不关单);**`--doc` 把测试绿凭证绑到本单**——不带它落下的绿行不给任何单背书,confirm-doc 前置与检查 8 对账只认带本单 `--doc` 的绿行(仅 v6+ 生效);**装户仓**(根目录无 `package.json`,工程在子目录)默认 `npm test` 不可跑 → 脚本**显式跳过步骤 1 且不落测试绿凭证**(防假绿)并提示;此时按项目口径手工跑测试,或带 `--test-cmd "<项目测试命令>"` 指定
59
59
  - 新需求:逐条勾验入口 intent「验收标准」,每条补「证据:」(例如:粘贴 CI 运行结果、UI 截图路径、或具体的 commit SHA),intent → done;同名 spec/Quick-Plan(若有)仍 approved → done。**注意:勾选但缺证据会被 check-loop 拦截(hard-block)**
60
- - **approved 留痕提交**(2026-09-30 起):done 确认前确认**本次关单文档**的 approved 态已进 git 历史(越早越好——approved 后即应提交;若尚未,先补提交再 done;门为逐份校验,三件套均关单时逐份各自满足)——confirm-doc 的 done 前置门硬校验(历史未出现「状态: approved」→ 拒绝落账);done 后再提交 done 态与其余改动
61
- - **确认落态**:唯一入口 `node .agents/scripts/confirm-doc.mjs <path>`(两形态 / 逐件+逐件原话 / done 内容绑定(关单编辑先于 done 确认、confirm-doc 是最后一次写入)/ 台账对质全口径见根 `AGENTS.md` §1.3 确认门)。
60
+ - **approved 留痕提交**:done 确认前确认**本次关单文档**的 approved 态已进 git 历史(越早越好——approved 后即应提交;若尚未,先补提交再 done;门为逐份校验,三件套均关单时逐份各自满足)——confirm-doc 的 done 前置门硬校验(历史未出现「状态: approved」→ 拒绝落账);done 后再提交 done 态与其余改动
61
+ - **确认落态**:唯一入口 `node .agents/scripts/confirm-doc.mjs <path>`(两形态 / 逐件代录(摘要可复用——分辨力由 scope+指纹承担)/ done 内容绑定(关单编辑先于 done 确认、confirm-doc 是最后一次写入)/ 台账对质全口径见根 `AGENTS.md` §1.3 确认门)。
62
62
  - 修复:防复发验证已落地,incident → closed(经确认门 confirm-doc:open→fixed / fixed→closed 两跳、无单跳;2026-09-28 起 check-loop 15 对账——关单编辑先于 closed 确认,口径同 done 内容绑定)
63
+ - **沉淀草稿**:intent done / incident closed 后跑 `node .agents/scripts/draft-sediment.mjs workflow/<intents|incidents>/<本单>.md`——自动抽高价值节(intent:影响面/触达红线;incident:影响面/根因/为什么之前没拦住/复盘三件套)落 `wiki/drafts-archive/<日期-主题>/` 草稿、回写源文件 `沉淀` 字段、重跑 gen-wiki-board(归档计数随动,否则 verify-wiki-consistency 拦提交)。全占位单拒抽(正常,无沉淀价值)。`--dry-run` 先预览。草稿是**中间态**:人工读一遍归类到 `wiki/<主题>/`(补主题与用途、保留 `来源` 字段)后跑 gen-wiki-board + verify-wiki-consistency。沉淀是人工判断——机器只代抽与登记,值不值得入库由人定;不沉淀写 `沉淀: 无` 显式豁免(check-loop 的 `[WARN 未沉淀]` 随之消除)
63
64
  - **同族收尾**:入口置终态时,同名 plan 一并置 `done`(spec 见上条),不留 `approved` 孤儿(口径同看板「入口已 done,本 plan 未终态」告警)
64
65
  - 主智能体自做的 L1+ 新需求在 `workflow/delegations.md`「自做任务结果表」记一行(修复类不重复记)
65
66
  - **委派快照回写**:关单后若 `workflow/delegations.md` §月度聚合快照缺当月行或 doctor §6.5 报陈旧 → 跑 `node .agents/scripts/agg-delegations.cjs` 并回贴当月快照行
@@ -12,7 +12,7 @@ description: Build 阶段 · 起 plan + 实现代码 + 自验(两道确认门
12
12
 
13
13
  起草 intent / spec / plan 任一件后,**在输出草稿全文前先给三件要点总览**(各一件:目标 / 关键取舍 /
14
14
  验收判据 diff,合计 ≤12 行)——用户一次看整体再逐件拍板,省三次盲确认的上下文切换。
15
- 确认纪律不变:逐件过目全文 + 逐件 `confirm-doc` 代录(禁并录、禁复用同句)。本阶段总览侧重:plan 任务拆解与两道确认门位置。
15
+ 确认纪律不变:逐件过目全文 + 逐件 `confirm-doc` 代录(禁并录;摘要可复用——分辨力由 scope+指纹承担,2026-10-09 起)。本阶段总览侧重:plan 任务拆解与两道确认门位置。
16
16
 
17
17
  ## 1. 执行
18
18
 
@@ -23,7 +23,7 @@ description: Build 阶段 · 起 plan + 实现代码 + 自验(两道确认门
23
23
  - 复制 `workflow/plans/_TEMPLATE.md` → `workflow/plans/YYYY-MM-DD-<主题>.md`(与入口文档同名)
24
24
  - L2/L3 按 4 节填写:改动方案 / 任务拆解(每个任务有判据) / 执行顺序 / 验证计划(与 fill-plan.mjs 单源一致)
25
25
  - L1 使用 Quick-Plan 极简三节:改动方案 / 约束与风险(原 Spec 核心) / 验证计划;多文件多步骤时可补任务拆解/执行顺序
26
- 3. 停下,输出 plan 草稿全文给用户过目,一句"可以"即确认。**逐件确认**:入口文档 / spec / plan 各自的确认点不得并作一次,plan 草稿须全文过目(不接受摘要代替)。**逐件配逐件原话**:`--delegated` 每次传当次实际放行的措辞,不复用同句——复用同句使台账 quote 失去分辨力(事后对质看不出放行的是哪一件);原因与根治见 workflow/papercuts.md 2026-09-28。
26
+ 3. 停下,输出 plan 草稿全文给用户过目,一句"可以"即确认。**逐件确认**:入口文档 / spec / plan 各自的确认点不得并作一次,plan 草稿须全文过目(不接受摘要代替)。**逐件代录**:`--delegated "<授权摘要>"` 每件单独一次——摘要为人类可读留痕,复用同句不削弱判据(分辨力由落账自动记录的改动面 `scope{files,sha256}` 与文档指纹承担,2026-10-09 起)。
27
27
  **确认落态**:唯一入口 `node .agents/scripts/confirm-doc.mjs <path>`(draft→approved / approved→done;TTY 两形态 / 一次一份多份并录被拒 / 台账对质全口径见根 `AGENTS.md` §1.3 确认门)。
28
28
  4. 确认后 → plan 状态 draft → approved,并在 plan 内补「确认与复核」节(确认结果 + 日期)。确认环节须在文档留痕:`approved` 是确认的机器可见态,`done` 只在关单出现,禁从 `draft` 直跳 `done`;确认后立即 `docs(workflow)` 单独提交留痕(根 `AGENTS.md` 提交约定;check-loop 检查 14 口径)。
29
29
 
@@ -33,7 +33,7 @@ description: Build 阶段 · 起 plan + 实现代码 + 自验(两道确认门
33
33
  - **先拉同模块历史坑**:按入口文档 `模块:` 跑 `node .agents/scripts/kb-search.mjs --scope workflow --module <token> "<关键词>"`——命中 incident 的根因 / 防复发条目列入改动自查
34
34
  - 列改动文件清单(读后改 vs 新建)
35
35
  - 列步骤(改 X 文件做 Y → 改 Z 文件做 W)
36
- - **owned 文件同步**:kit.owned 列表文件(AGENTS.md / workflow 模板等)sync 不动,须列「手动同步装副本」步骤(见 incidents/2026-09-25-wf-runtime 复盘)
36
+ - **owned 文件同步**:kit.owned 列表文件(AGENTS.md / workflow 模板等)sync 不动,须列「手动同步装副本」步骤(仅包源/dogfood 双形态仓适用;纯装户仓 owned 即项目自有文件,无此步)
37
37
  - 标注触达红线(对照根 `AGENTS.md` 红线/约束相关节(如「项目适配区」「门禁与提交」)+ 改动域目录级 `AGENTS.md`(如有))
38
38
  6. 停下,等用户确认改动清单。
39
39
 
@@ -56,32 +56,13 @@ description: Build 阶段 · 起 plan + 实现代码 + 自验(两道确认门
56
56
 
57
57
  - 红线(架构 / 数据 / 安全等)正文与豁免见根与目录级 `AGENTS.md`(如有)——已由 pre-commit 机器门强制的部分以钩子为准,写代码前先过一遍目录级 AGENTS
58
58
 
59
- ## 4. 改权威源后必跑(薄适配同步防漏)
60
-
61
- - 改 `templates/_agents/{commands,roles}/*.md` 正文后跑 `node bin/flow-kit.mjs sync-hosts --diff` → 拍板 → `--apply` 单向同步(只动正文段,frontmatter 不动);口径与边界详见 `.agents/commands/sync-hosts.md`
62
- - 改根 `AGENTS.md`(owned 常驻面)后跑 `node .agents/scripts/edit-face-check.mjs`——工作树面快检(阶段索引/引用/预算 advisory),别等提交门才发觉砍坏(2026-10-09 B2)
63
-
64
- ## 5. 改 doctor / check-loop 后必跑(三处口径对账)
65
-
66
- - 改 `src/doctor.mjs` 加新 § 检查项 → 跑 `node .agents/scripts/gate-checklist.mjs --diff` 看 doctor ↔ check-loop 对照表
67
- - 改 `.agents/scripts/check-loop.sh` 加新 § 检查项 → 同上
68
- - 任一处有而另一边无 → 工具报"缺点",由用户拍板是否补齐(不自动同步,B-b 决策);详见 `.agents/commands/gate-checklist.md`
69
-
70
- ## 6. 改包源后必跑(装户面同步一致性)
71
-
72
- - 改 `templates/_agents/*` 包源后 → 跑 `node .agents/scripts/source-sync-check.mjs --diff` 看装副本 `.agents/` 是否同步(缺失 / 孤儿 / 漂移三类差异)
73
- - 漂移说明包源改了装副本未跟;缺失说明新增文件 init 未执行;孤儿说明装副本独有(可能是装户配置,不删)
74
- - **新增 managed 类文件须经 init/sync 登记,禁手动双写绕过台账**——手工同时写 `templates/_agents/` 与 `.agents/` 会绕过台账登记,使该文件永远不被 sync 升级(`doctor` 台账覆盖率检查会拦;见 incidents/2026-09-26-managed-ledger-adopt 复盘)
75
- - 门禁边界(pre-commit 双源一致性):比较工作树非暂存区——两侧改好、分两笔提交不拦(最终一致即可);包源删除文件退化为「孤儿」只报告不拦,删包源须手动清理装副本残件(复核 P2-2 声明,2026-09-27 gate-hardening-p2-batch)
76
- - B-b 决策「只报告不修复」;详见 `.agents/commands/source-sync-check.md`
77
-
78
- ## 7. 子代理调用约定
59
+ ## 4. 子代理调用约定
79
60
 
80
61
  - plan 起草、风险判断、改动清单与两道确认门由主智能体负责;仅两道确认后范围明确的工作包可委派 `implementer`,公共接口 / Schema / 依赖 / 安全 / 权限 / 破坏性操作不得委派。
81
62
  - 多工作包并行 / 链式推进:编排机制(声明随 plan 草稿一并确认;确认后读 `.agents/workflows/` 按机制文档执行,`steps/` 为项目自定义步骤扩展点);详见 `.agents/workflows/_TEMPLATE.md`。
82
63
  - 子智能体返回后,主智能体须检查 diff 与授权文件范围、确认未覆盖既有修改并重跑相关验证;不支持子智能体时 `fallback: main`,验收标准不变。
83
64
 
84
- ## 8. 确认后
65
+ ## 5. 确认后
85
66
 
86
67
  - plan 状态 → done(实现完成;intent / spec 关单在 test)
87
68
  - commit:L1+ 入口文档 / spec / plan 随代码同一提交(Conventional Commits 中文 feat/fix/refactor/perf);docs 豁免与 bootstrap 可单独 `docs(*)`
@@ -41,6 +41,7 @@ description: Deploy 阶段 · prod 上线清单(静态门 / 配对 / 回归 /
41
41
  ## 6. 上线后观察(用户观察,Maintain 阶段接手)
42
42
 
43
43
  - 观察期:上线后 24h;由用户观察错误率 / 延迟 / 关键业务流(无监控时人工看)
44
+ - 异常判据(观察期退出规则):项目口径填 `workflow/regression-checklist.md`——无监控时的最低判据:错误日志 / 异常告警 / 关键业务流失败**任一出现即触发 §5 回滚预案,不等 24h**;无异常满 24h 方可闭环
44
45
  - 闭环宣告:用户确认无异常后才算闭环;AI 不得自行宣告
45
46
  - 异常回落:超阈值 → 生成 `workflow/incidents/YYYY-MM-DD-<主题>.md`,进 `maintain.md`(止血方案用户拍板,见 maintain.md §0)
46
47
  - 事故响应:单用途账号 + 最小权限;不得跨智能体协作推送修复(参考 Anthropic 教训)
@@ -10,7 +10,7 @@ description: Design 阶段 · 起 spec(L2/L3 强制,L1 可省略直接进 bu
10
10
 
11
11
  起草 intent / spec / plan 任一件后,**在输出草稿全文前先给三件要点总览**(各一件:目标 / 关键取舍 /
12
12
  验收判据 diff,合计 ≤12 行)——用户一次看整体再逐件拍板,省三次盲确认的上下文切换。
13
- 确认纪律不变:逐件过目全文 + 逐件 `confirm-doc` 代录(禁并录、禁复用同句)。本阶段总览侧重:spec 方案取舍与 L3 复核安排。
13
+ 确认纪律不变:逐件过目全文 + 逐件 `confirm-doc` 代录(禁并录;摘要可复用——分辨力由 scope+指纹承担,2026-10-09 起)。本阶段总览侧重:spec 方案取舍与 L3 复核安排。
14
14
 
15
15
  ## 1. 执行
16
16
 
@@ -43,6 +43,6 @@ description: Design 阶段 · 起 spec(L2/L3 强制,L1 可省略直接进 bu
43
43
  ## 4. 确认后
44
44
 
45
45
  - spec 状态 draft → approved
46
- - **确认落态**:唯一入口 `node .agents/scripts/confirm-doc.mjs <path>`(draft→approved / approved→done;TTY 两形态 / 逐件调用+逐件原话 / 台账对质全口径见根 `AGENTS.md` §1.3 确认门)。
46
+ - **确认落态**:唯一入口 `node .agents/scripts/confirm-doc.mjs <path>`(draft→approved / approved→done;TTY 两形态 / 逐件代录(摘要可复用——分辨力由 scope+指纹承担)/ 台账对质全口径见根 `AGENTS.md` §1.3 确认门)。
47
47
  - 立即 `docs(workflow)` 单独提交留痕(根 `AGENTS.md` 提交约定;check-loop 检查 14 口径)
48
48
  - 进 `next: .agents/commands/build.md`
@@ -74,6 +74,4 @@ npm test # 含 gate-checklist 套件
74
74
 
75
75
  ## 6. 相关留痕
76
76
 
77
- - intent(登记表重写):`workflow/intents/2026-09-25-gate-checklist-registry.md`
78
- - intent(工具首建):`workflow/intents/2026-09-25-gate-checklist.md`
79
- - 父 incident:`workflow/incidents/2026-09-25-wf-runtime.md`(owned 漂移未对账,催生本工具)
77
+ - 立法出处:2026-09-25(登记表重写 + 工具首建;父事件 = owned 漂移未对账,催生本工具)——留痕在包源仓 git 历史与 CHANGELOG,装户径不引实例路径
@@ -20,7 +20,7 @@ description: Plan 阶段 · 立 intent(AI 起草、用户确认;本阶段不
20
20
  - 红线勾选对照根 `AGENTS.md` 红线/约束相关节(如「项目适配区」「门禁与提交」)+ 改动域目录级 `AGENTS.md`(如有);**没触及就全不勾**,不要硬填
21
21
  3. 写不出可测试判据 = 还没想清楚 → 反问澄清,不要硬填。
22
22
  4. 起草后停下,输出草稿全文给用户过目,一句"可以"即确认。
23
- **确认落态**:唯一入口 `node .agents/scripts/confirm-doc.mjs <path>`(draft→approved / approved→done;TTY 两形态 / 逐件调用+逐件原话 / 台账对质全口径见根 `AGENTS.md` §1.3 确认门)。
23
+ **确认落态**:唯一入口 `node .agents/scripts/confirm-doc.mjs <path>`(draft→approved / approved→done;TTY 两形态 / 逐件代录(摘要可复用——分辨力由 scope+指纹承担)/ 台账对质全口径见根 `AGENTS.md` §1.3 确认门)。
24
24
 
25
25
  ## 2. 技能辅助(可选,宿主级 skills)
26
26
 
@@ -86,6 +86,4 @@ flow-kit doctor # 10/0/0
86
86
 
87
87
  ## 6. 相关留痕
88
88
 
89
- - intent:`workflow/intents/2026-09-25-source-sync-check.md`
90
- - plan:`workflow/plans/2026-09-25-source-sync-check.md`
91
- - 父 incident:`workflow/incidents/2026-09-25-wf-runtime.md`(包源改了装副本未同步——本工具预防性体检)
89
+ - 立法出处:2026-09-25 source-sync-check(intent/plan;父事件 = 包源改了装副本未同步,本工具预防性体检)——留痕在包源仓 git 历史与 CHANGELOG,装户径不引实例路径
@@ -67,6 +67,4 @@ sh .agents/scripts/check-loop.sh # Windows 无 sh 时 doctor 已
67
67
 
68
68
  ## 5. 相关留痕
69
69
 
70
- - intent:`workflow/intents/2026-09-25-cross-host-sync.md`
71
- - plan:`workflow/plans/2026-09-25-cross-host-sync.md`(含 B-b 方案拍板)
72
- - incident:`workflow/incidents/2026-09-25-wf-runtime.md`(双源纪律教训,规范 §7.x 包源环境跳过)
70
+ - 立法出处:2026-09-25 cross-host-sync(intent/plan,含 B-b 方案拍板;父事件 = wf-runtime 双源纪律教训,规范 §7.x 包源环境跳过)——留痕在包源仓 git 历史与 CHANGELOG,装户径不引实例路径
@@ -16,7 +16,7 @@ description: Test 阶段 · 静态门 + 切库冒烟 + UI 实测 + L2/L3 独立
16
16
  项目测试命令 # 自动化测试
17
17
  项目类型检查命令 # 前端类型检查/构建(涉及前端时跑)
18
18
  node .agents/scripts/verify-wiki-consistency.mjs # 触及 wiki/ 时跑(exit 1 即先修台账再继续:跑 gen-wiki-board.mjs 补索引/看板;pre-commit 已按增量自动拦,此行用于改完即验)
19
- node bin/flow-kit.mjs 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 跨宿主薄适配正文漂移(装户环境;包源环境 §6.7 skipped)
20
20
  ```
21
21
 
22
22
  > **环境注记**:本地服务占用构建产物导致编译失败、多会话并行时「谁跑静态门 / 提交谁先停服务」等约定——如有,见项目注记 `.agents/notes/runtime-env.md` §2,跑静态门前先过一眼。
@@ -55,11 +55,12 @@ node bin/flow-kit.mjs doctor # §6.5 delegations + §6.6 o
55
55
 
56
56
  - 输出测试报告(通过项 / 失败项);失败项已修复并复测通过。
57
57
  - **关单**(日常闭环点,不依赖是否上 prod):
58
- - 关单前一键过门:`node .agents/scripts/verify.mjs --doc workflow/intents/<本单>.md`(npm test + check-loop 固定编排,任一失败非零退出,非绿不关单);**`--doc` 把测试绿凭证绑到本单**——不带它落下的绿行不给任何单背书,confirm-doc 前置与检查 8 对账只认带本单 `--doc` 的绿行(仅 v6+ 生效);**装户仓**(根目录无 `package.json`,工程在子目录)默认 `npm test` 不可跑 → 脚本**显式跳过步骤 1 且不落测试绿凭证**(防假绿)并提示;此时按项目口径手工跑测试,或带 `--test-cmd "<项目测试命令>"` 指定(2026-10-07 papercut)
58
+ - 关单前一键过门:`node .agents/scripts/verify.mjs --doc workflow/intents/<本单>.md`(npm test + check-loop 固定编排,任一失败非零退出,非绿不关单);**`--doc` 把测试绿凭证绑到本单**——不带它落下的绿行不给任何单背书,confirm-doc 前置与检查 8 对账只认带本单 `--doc` 的绿行(仅 v6+ 生效);**装户仓**(根目录无 `package.json`,工程在子目录)默认 `npm test` 不可跑 → 脚本**显式跳过步骤 1 且不落测试绿凭证**(防假绿)并提示;此时按项目口径手工跑测试,或带 `--test-cmd "<项目测试命令>"` 指定
59
59
  - 新需求:逐条勾验入口 intent「验收标准」,每条补「证据:」(例如:粘贴 CI 运行结果、UI 截图路径、或具体的 commit SHA),intent → done;同名 spec/Quick-Plan(若有)仍 approved → done。**注意:勾选但缺证据会被 check-loop 拦截(hard-block)**
60
- - **approved 留痕提交**(2026-09-30 起):done 确认前确认**本次关单文档**的 approved 态已进 git 历史(越早越好——approved 后即应提交;若尚未,先补提交再 done;门为逐份校验,三件套均关单时逐份各自满足)——confirm-doc 的 done 前置门硬校验(历史未出现「状态: approved」→ 拒绝落账);done 后再提交 done 态与其余改动
61
- - **确认落态**:唯一入口 `node .agents/scripts/confirm-doc.mjs <path>`(两形态 / 逐件+逐件原话 / done 内容绑定(关单编辑先于 done 确认、confirm-doc 是最后一次写入)/ 台账对质全口径见根 `AGENTS.md` §1.3 确认门)。
60
+ - **approved 留痕提交**:done 确认前确认**本次关单文档**的 approved 态已进 git 历史(越早越好——approved 后即应提交;若尚未,先补提交再 done;门为逐份校验,三件套均关单时逐份各自满足)——confirm-doc 的 done 前置门硬校验(历史未出现「状态: approved」→ 拒绝落账);done 后再提交 done 态与其余改动
61
+ - **确认落态**:唯一入口 `node .agents/scripts/confirm-doc.mjs <path>`(两形态 / 逐件代录(摘要可复用——分辨力由 scope+指纹承担)/ done 内容绑定(关单编辑先于 done 确认、confirm-doc 是最后一次写入)/ 台账对质全口径见根 `AGENTS.md` §1.3 确认门)。
62
62
  - 修复:防复发验证已落地,incident → closed(经确认门 confirm-doc:open→fixed / fixed→closed 两跳、无单跳;2026-09-28 起 check-loop 15 对账——关单编辑先于 closed 确认,口径同 done 内容绑定)
63
+ - **沉淀草稿**:intent done / incident closed 后跑 `node .agents/scripts/draft-sediment.mjs workflow/<intents|incidents>/<本单>.md`——自动抽高价值节(intent:影响面/触达红线;incident:影响面/根因/为什么之前没拦住/复盘三件套)落 `wiki/drafts-archive/<日期-主题>/` 草稿、回写源文件 `沉淀` 字段、重跑 gen-wiki-board(归档计数随动,否则 verify-wiki-consistency 拦提交)。全占位单拒抽(正常,无沉淀价值)。`--dry-run` 先预览。草稿是**中间态**:人工读一遍归类到 `wiki/<主题>/`(补主题与用途、保留 `来源` 字段)后跑 gen-wiki-board + verify-wiki-consistency。沉淀是人工判断——机器只代抽与登记,值不值得入库由人定;不沉淀写 `沉淀: 无` 显式豁免(check-loop 的 `[WARN 未沉淀]` 随之消除)
63
64
  - **同族收尾**:入口置终态时,同名 plan 一并置 `done`(spec 见上条),不留 `approved` 孤儿(口径同看板「入口已 done,本 plan 未终态」告警)
64
65
  - 主智能体自做的 L1+ 新需求在 `workflow/delegations.md`「自做任务结果表」记一行(修复类不重复记)
65
66
  - **委派快照回写**:关单后若 `workflow/delegations.md` §月度聚合快照缺当月行或 doctor §6.5 报陈旧 → 跑 `node .agents/scripts/agg-delegations.cjs` 并回贴当月快照行
@@ -13,7 +13,7 @@ description: Build 阶段 · 起 plan + 实现代码 + 自验(两道确认门
13
13
 
14
14
  起草 intent / spec / plan 任一件后,**在输出草稿全文前先给三件要点总览**(各一件:目标 / 关键取舍 /
15
15
  验收判据 diff,合计 ≤12 行)——用户一次看整体再逐件拍板,省三次盲确认的上下文切换。
16
- 确认纪律不变:逐件过目全文 + 逐件 `confirm-doc` 代录(禁并录、禁复用同句)。本阶段总览侧重:plan 任务拆解与两道确认门位置。
16
+ 确认纪律不变:逐件过目全文 + 逐件 `confirm-doc` 代录(禁并录;摘要可复用——分辨力由 scope+指纹承担,2026-10-09 起)。本阶段总览侧重:plan 任务拆解与两道确认门位置。
17
17
 
18
18
  ## 1. 执行
19
19
 
@@ -24,7 +24,7 @@ description: Build 阶段 · 起 plan + 实现代码 + 自验(两道确认门
24
24
  - 复制 `workflow/plans/_TEMPLATE.md` → `workflow/plans/YYYY-MM-DD-<主题>.md`(与入口文档同名)
25
25
  - L2/L3 按 4 节填写:改动方案 / 任务拆解(每个任务有判据) / 执行顺序 / 验证计划(与 fill-plan.mjs 单源一致)
26
26
  - L1 使用 Quick-Plan 极简三节:改动方案 / 约束与风险(原 Spec 核心) / 验证计划;多文件多步骤时可补任务拆解/执行顺序
27
- 3. 停下,输出 plan 草稿全文给用户过目,一句"可以"即确认。**逐件确认**:入口文档 / spec / plan 各自的确认点不得并作一次,plan 草稿须全文过目(不接受摘要代替)。**逐件配逐件原话**:`--delegated` 每次传当次实际放行的措辞,不复用同句——复用同句使台账 quote 失去分辨力(事后对质看不出放行的是哪一件);原因与根治见 workflow/papercuts.md 2026-09-28。
27
+ 3. 停下,输出 plan 草稿全文给用户过目,一句"可以"即确认。**逐件确认**:入口文档 / spec / plan 各自的确认点不得并作一次,plan 草稿须全文过目(不接受摘要代替)。**逐件代录**:`--delegated "<授权摘要>"` 每件单独一次——摘要为人类可读留痕,复用同句不削弱判据(分辨力由落账自动记录的改动面 `scope{files,sha256}` 与文档指纹承担,2026-10-09 起)。
28
28
  **确认落态**:唯一入口 `node .agents/scripts/confirm-doc.mjs <path>`(draft→approved / approved→done;TTY 两形态 / 一次一份多份并录被拒 / 台账对质全口径见根 `AGENTS.md` §1.3 确认门)。
29
29
  4. 确认后 → plan 状态 draft → approved,并在 plan 内补「确认与复核」节(确认结果 + 日期)。确认环节须在文档留痕:`approved` 是确认的机器可见态,`done` 只在关单出现,禁从 `draft` 直跳 `done`;确认后立即 `docs(workflow)` 单独提交留痕(根 `AGENTS.md` 提交约定;check-loop 检查 14 口径)。
30
30
 
@@ -34,7 +34,7 @@ description: Build 阶段 · 起 plan + 实现代码 + 自验(两道确认门
34
34
  - **先拉同模块历史坑**:按入口文档 `模块:` 跑 `node .agents/scripts/kb-search.mjs --scope workflow --module <token> "<关键词>"`——命中 incident 的根因 / 防复发条目列入改动自查
35
35
  - 列改动文件清单(读后改 vs 新建)
36
36
  - 列步骤(改 X 文件做 Y → 改 Z 文件做 W)
37
- - **owned 文件同步**:kit.owned 列表文件(AGENTS.md / workflow 模板等)sync 不动,须列「手动同步装副本」步骤(见 incidents/2026-09-25-wf-runtime 复盘)
37
+ - **owned 文件同步**:kit.owned 列表文件(AGENTS.md / workflow 模板等)sync 不动,须列「手动同步装副本」步骤(仅包源/dogfood 双形态仓适用;纯装户仓 owned 即项目自有文件,无此步)
38
38
  - 标注触达红线(对照根 `AGENTS.md` 红线/约束相关节(如「项目适配区」「门禁与提交」)+ 改动域目录级 `AGENTS.md`(如有))
39
39
  6. 停下,等用户确认改动清单。
40
40
 
@@ -57,32 +57,13 @@ description: Build 阶段 · 起 plan + 实现代码 + 自验(两道确认门
57
57
 
58
58
  - 红线(架构 / 数据 / 安全等)正文与豁免见根与目录级 `AGENTS.md`(如有)——已由 pre-commit 机器门强制的部分以钩子为准,写代码前先过一遍目录级 AGENTS
59
59
 
60
- ## 4. 改权威源后必跑(薄适配同步防漏)
61
-
62
- - 改 `templates/_agents/{commands,roles}/*.md` 正文后跑 `node bin/flow-kit.mjs sync-hosts --diff` → 拍板 → `--apply` 单向同步(只动正文段,frontmatter 不动);口径与边界详见 `.agents/commands/sync-hosts.md`
63
- - 改根 `AGENTS.md`(owned 常驻面)后跑 `node .agents/scripts/edit-face-check.mjs`——工作树面快检(阶段索引/引用/预算 advisory),别等提交门才发觉砍坏(2026-10-09 B2)
64
-
65
- ## 5. 改 doctor / check-loop 后必跑(三处口径对账)
66
-
67
- - 改 `src/doctor.mjs` 加新 § 检查项 → 跑 `node .agents/scripts/gate-checklist.mjs --diff` 看 doctor ↔ check-loop 对照表
68
- - 改 `.agents/scripts/check-loop.sh` 加新 § 检查项 → 同上
69
- - 任一处有而另一边无 → 工具报"缺点",由用户拍板是否补齐(不自动同步,B-b 决策);详见 `.agents/commands/gate-checklist.md`
70
-
71
- ## 6. 改包源后必跑(装户面同步一致性)
72
-
73
- - 改 `templates/_agents/*` 包源后 → 跑 `node .agents/scripts/source-sync-check.mjs --diff` 看装副本 `.agents/` 是否同步(缺失 / 孤儿 / 漂移三类差异)
74
- - 漂移说明包源改了装副本未跟;缺失说明新增文件 init 未执行;孤儿说明装副本独有(可能是装户配置,不删)
75
- - **新增 managed 类文件须经 init/sync 登记,禁手动双写绕过台账**——手工同时写 `templates/_agents/` 与 `.agents/` 会绕过台账登记,使该文件永远不被 sync 升级(`doctor` 台账覆盖率检查会拦;见 incidents/2026-09-26-managed-ledger-adopt 复盘)
76
- - 门禁边界(pre-commit 双源一致性):比较工作树非暂存区——两侧改好、分两笔提交不拦(最终一致即可);包源删除文件退化为「孤儿」只报告不拦,删包源须手动清理装副本残件(复核 P2-2 声明,2026-09-27 gate-hardening-p2-batch)
77
- - B-b 决策「只报告不修复」;详见 `.agents/commands/source-sync-check.md`
78
-
79
- ## 7. 子代理调用约定
60
+ ## 4. 子代理调用约定
80
61
 
81
62
  - plan 起草、风险判断、改动清单与两道确认门由主智能体负责;仅两道确认后范围明确的工作包可委派 `implementer`,公共接口 / Schema / 依赖 / 安全 / 权限 / 破坏性操作不得委派。
82
63
  - 多工作包并行 / 链式推进:编排机制(声明随 plan 草稿一并确认;确认后读 `.agents/workflows/` 按机制文档执行,`steps/` 为项目自定义步骤扩展点);详见 `.agents/workflows/_TEMPLATE.md`。
83
64
  - 子智能体返回后,主智能体须检查 diff 与授权文件范围、确认未覆盖既有修改并重跑相关验证;不支持子智能体时 `fallback: main`,验收标准不变。
84
65
 
85
- ## 8. 确认后
66
+ ## 5. 确认后
86
67
 
87
68
  - plan 状态 → done(实现完成;intent / spec 关单在 test)
88
69
  - commit:L1+ 入口文档 / spec / plan 随代码同一提交(Conventional Commits 中文 feat/fix/refactor/perf);docs 豁免与 bootstrap 可单独 `docs(*)`
@@ -42,6 +42,7 @@ description: Deploy 阶段 · prod 上线清单(静态门 / 配对 / 回归 /
42
42
  ## 6. 上线后观察(用户观察,Maintain 阶段接手)
43
43
 
44
44
  - 观察期:上线后 24h;由用户观察错误率 / 延迟 / 关键业务流(无监控时人工看)
45
+ - 异常判据(观察期退出规则):项目口径填 `workflow/regression-checklist.md`——无监控时的最低判据:错误日志 / 异常告警 / 关键业务流失败**任一出现即触发 §5 回滚预案,不等 24h**;无异常满 24h 方可闭环
45
46
  - 闭环宣告:用户确认无异常后才算闭环;AI 不得自行宣告
46
47
  - 异常回落:超阈值 → 生成 `workflow/incidents/YYYY-MM-DD-<主题>.md`,进 `maintain.md`(止血方案用户拍板,见 maintain.md §0)
47
48
  - 事故响应:单用途账号 + 最小权限;不得跨智能体协作推送修复(参考 Anthropic 教训)
@@ -11,7 +11,7 @@ description: Design 阶段 · 起 spec(L2/L3 强制,L1 可省略直接进 wf
11
11
 
12
12
  起草 intent / spec / plan 任一件后,**在输出草稿全文前先给三件要点总览**(各一件:目标 / 关键取舍 /
13
13
  验收判据 diff,合计 ≤12 行)——用户一次看整体再逐件拍板,省三次盲确认的上下文切换。
14
- 确认纪律不变:逐件过目全文 + 逐件 `confirm-doc` 代录(禁并录、禁复用同句)。本阶段总览侧重:spec 方案取舍与 L3 复核安排。
14
+ 确认纪律不变:逐件过目全文 + 逐件 `confirm-doc` 代录(禁并录;摘要可复用——分辨力由 scope+指纹承担,2026-10-09 起)。本阶段总览侧重:spec 方案取舍与 L3 复核安排。
15
15
 
16
16
  ## 1. 执行
17
17
 
@@ -44,6 +44,6 @@ description: Design 阶段 · 起 spec(L2/L3 强制,L1 可省略直接进 wf
44
44
  ## 4. 确认后
45
45
 
46
46
  - spec 状态 draft → approved
47
- - **确认落态**:唯一入口 `node .agents/scripts/confirm-doc.mjs <path>`(draft→approved / approved→done;TTY 两形态 / 逐件调用+逐件原话 / 台账对质全口径见根 `AGENTS.md` §1.3 确认门)。
47
+ - **确认落态**:唯一入口 `node .agents/scripts/confirm-doc.mjs <path>`(draft→approved / approved→done;TTY 两形态 / 逐件代录(摘要可复用——分辨力由 scope+指纹承担)/ 台账对质全口径见根 `AGENTS.md` §1.3 确认门)。
48
48
  - 立即 `docs(workflow)` 单独提交留痕(根 `AGENTS.md` 提交约定;check-loop 检查 14 口径)
49
49
  - 进 `next: .agents/commands/build.md`
@@ -75,6 +75,4 @@ npm test # 含 gate-checklist 套件
75
75
 
76
76
  ## 6. 相关留痕
77
77
 
78
- - intent(登记表重写):`workflow/intents/2026-09-25-gate-checklist-registry.md`
79
- - intent(工具首建):`workflow/intents/2026-09-25-gate-checklist.md`
80
- - 父 incident:`workflow/incidents/2026-09-25-wf-runtime.md`(owned 漂移未对账,催生本工具)
78
+ - 立法出处:2026-09-25(登记表重写 + 工具首建;父事件 = owned 漂移未对账,催生本工具)——留痕在包源仓 git 历史与 CHANGELOG,装户径不引实例路径
@@ -21,7 +21,7 @@ description: Plan 阶段 · 立 intent(AI 起草、用户确认;本阶段不
21
21
  - 红线勾选对照根 `AGENTS.md` 红线/约束相关节(如「项目适配区」「门禁与提交」)+ 改动域目录级 `AGENTS.md`(如有);**没触及就全不勾**,不要硬填
22
22
  3. 写不出可测试判据 = 还没想清楚 → 反问澄清,不要硬填。
23
23
  4. 起草后停下,输出草稿全文给用户过目,一句"可以"即确认。
24
- **确认落态**:唯一入口 `node .agents/scripts/confirm-doc.mjs <path>`(draft→approved / approved→done;TTY 两形态 / 逐件调用+逐件原话 / 台账对质全口径见根 `AGENTS.md` §1.3 确认门)。
24
+ **确认落态**:唯一入口 `node .agents/scripts/confirm-doc.mjs <path>`(draft→approved / approved→done;TTY 两形态 / 逐件代录(摘要可复用——分辨力由 scope+指纹承担)/ 台账对质全口径见根 `AGENTS.md` §1.3 确认门)。
25
25
 
26
26
  ## 2. 技能辅助(可选,宿主级 skills)
27
27
 
@@ -87,6 +87,4 @@ flow-kit doctor # 10/0/0
87
87
 
88
88
  ## 6. 相关留痕
89
89
 
90
- - intent:`workflow/intents/2026-09-25-source-sync-check.md`
91
- - plan:`workflow/plans/2026-09-25-source-sync-check.md`
92
- - 父 incident:`workflow/incidents/2026-09-25-wf-runtime.md`(包源改了装副本未同步——本工具预防性体检)
90
+ - 立法出处:2026-09-25 source-sync-check(intent/plan;父事件 = 包源改了装副本未同步,本工具预防性体检)——留痕在包源仓 git 历史与 CHANGELOG,装户径不引实例路径
@@ -68,6 +68,4 @@ sh .agents/scripts/check-loop.sh # Windows 无 sh 时 doctor 已
68
68
 
69
69
  ## 5. 相关留痕
70
70
 
71
- - intent:`workflow/intents/2026-09-25-cross-host-sync.md`
72
- - plan:`workflow/plans/2026-09-25-cross-host-sync.md`(含 B-b 方案拍板)
73
- - incident:`workflow/incidents/2026-09-25-wf-runtime.md`(双源纪律教训,规范 §7.x 包源环境跳过)
71
+ - 立法出处:2026-09-25 cross-host-sync(intent/plan,含 B-b 方案拍板;父事件 = wf-runtime 双源纪律教训,规范 §7.x 包源环境跳过)——留痕在包源仓 git 历史与 CHANGELOG,装户径不引实例路径
@@ -17,7 +17,7 @@ description: Test 阶段 · 静态门 + 切库冒烟 + UI 实测 + L2/L3 独立
17
17
  项目测试命令 # 自动化测试
18
18
  项目类型检查命令 # 前端类型检查/构建(涉及前端时跑)
19
19
  node .agents/scripts/verify-wiki-consistency.mjs # 触及 wiki/ 时跑(exit 1 即先修台账再继续:跑 gen-wiki-board.mjs 补索引/看板;pre-commit 已按增量自动拦,此行用于改完即验)
20
- node bin/flow-kit.mjs doctor # §6.5 delegations + §6.6 owned 漂移 + §6.7 跨宿主薄适配正文漂移(装户环境;包源环境 §6.7 skipped)
20
+ npx agentic-flow-kit doctor # §6.5 delegations + §6.6 owned 漂移 + §6.7 跨宿主薄适配正文漂移(装户环境;包源环境 §6.7 skipped)
21
21
  ```
22
22
 
23
23
  > **环境注记**:本地服务占用构建产物导致编译失败、多会话并行时「谁跑静态门 / 提交谁先停服务」等约定——如有,见项目注记 `.agents/notes/runtime-env.md` §2,跑静态门前先过一眼。
@@ -56,11 +56,12 @@ node bin/flow-kit.mjs doctor # §6.5 delegations + §6.6 o
56
56
 
57
57
  - 输出测试报告(通过项 / 失败项);失败项已修复并复测通过。
58
58
  - **关单**(日常闭环点,不依赖是否上 prod):
59
- - 关单前一键过门:`node .agents/scripts/verify.mjs --doc workflow/intents/<本单>.md`(npm test + check-loop 固定编排,任一失败非零退出,非绿不关单);**`--doc` 把测试绿凭证绑到本单**——不带它落下的绿行不给任何单背书,confirm-doc 前置与检查 8 对账只认带本单 `--doc` 的绿行(仅 v6+ 生效);**装户仓**(根目录无 `package.json`,工程在子目录)默认 `npm test` 不可跑 → 脚本**显式跳过步骤 1 且不落测试绿凭证**(防假绿)并提示;此时按项目口径手工跑测试,或带 `--test-cmd "<项目测试命令>"` 指定(2026-10-07 papercut)
59
+ - 关单前一键过门:`node .agents/scripts/verify.mjs --doc workflow/intents/<本单>.md`(npm test + check-loop 固定编排,任一失败非零退出,非绿不关单);**`--doc` 把测试绿凭证绑到本单**——不带它落下的绿行不给任何单背书,confirm-doc 前置与检查 8 对账只认带本单 `--doc` 的绿行(仅 v6+ 生效);**装户仓**(根目录无 `package.json`,工程在子目录)默认 `npm test` 不可跑 → 脚本**显式跳过步骤 1 且不落测试绿凭证**(防假绿)并提示;此时按项目口径手工跑测试,或带 `--test-cmd "<项目测试命令>"` 指定
60
60
  - 新需求:逐条勾验入口 intent「验收标准」,每条补「证据:」(例如:粘贴 CI 运行结果、UI 截图路径、或具体的 commit SHA),intent → done;同名 spec/Quick-Plan(若有)仍 approved → done。**注意:勾选但缺证据会被 check-loop 拦截(hard-block)**
61
- - **approved 留痕提交**(2026-09-30 起):done 确认前确认**本次关单文档**的 approved 态已进 git 历史(越早越好——approved 后即应提交;若尚未,先补提交再 done;门为逐份校验,三件套均关单时逐份各自满足)——confirm-doc 的 done 前置门硬校验(历史未出现「状态: approved」→ 拒绝落账);done 后再提交 done 态与其余改动
62
- - **确认落态**:唯一入口 `node .agents/scripts/confirm-doc.mjs <path>`(两形态 / 逐件+逐件原话 / done 内容绑定(关单编辑先于 done 确认、confirm-doc 是最后一次写入)/ 台账对质全口径见根 `AGENTS.md` §1.3 确认门)。
61
+ - **approved 留痕提交**:done 确认前确认**本次关单文档**的 approved 态已进 git 历史(越早越好——approved 后即应提交;若尚未,先补提交再 done;门为逐份校验,三件套均关单时逐份各自满足)——confirm-doc 的 done 前置门硬校验(历史未出现「状态: approved」→ 拒绝落账);done 后再提交 done 态与其余改动
62
+ - **确认落态**:唯一入口 `node .agents/scripts/confirm-doc.mjs <path>`(两形态 / 逐件代录(摘要可复用——分辨力由 scope+指纹承担)/ done 内容绑定(关单编辑先于 done 确认、confirm-doc 是最后一次写入)/ 台账对质全口径见根 `AGENTS.md` §1.3 确认门)。
63
63
  - 修复:防复发验证已落地,incident → closed(经确认门 confirm-doc:open→fixed / fixed→closed 两跳、无单跳;2026-09-28 起 check-loop 15 对账——关单编辑先于 closed 确认,口径同 done 内容绑定)
64
+ - **沉淀草稿**:intent done / incident closed 后跑 `node .agents/scripts/draft-sediment.mjs workflow/<intents|incidents>/<本单>.md`——自动抽高价值节(intent:影响面/触达红线;incident:影响面/根因/为什么之前没拦住/复盘三件套)落 `wiki/drafts-archive/<日期-主题>/` 草稿、回写源文件 `沉淀` 字段、重跑 gen-wiki-board(归档计数随动,否则 verify-wiki-consistency 拦提交)。全占位单拒抽(正常,无沉淀价值)。`--dry-run` 先预览。草稿是**中间态**:人工读一遍归类到 `wiki/<主题>/`(补主题与用途、保留 `来源` 字段)后跑 gen-wiki-board + verify-wiki-consistency。沉淀是人工判断——机器只代抽与登记,值不值得入库由人定;不沉淀写 `沉淀: 无` 显式豁免(check-loop 的 `[WARN 未沉淀]` 随之消除)
64
65
  - **同族收尾**:入口置终态时,同名 plan 一并置 `done`(spec 见上条),不留 `approved` 孤儿(口径同看板「入口已 done,本 plan 未终态」告警)
65
66
  - 主智能体自做的 L1+ 新需求在 `workflow/delegations.md`「自做任务结果表」记一行(修复类不重复记)
66
67
  - **委派快照回写**:关单后若 `workflow/delegations.md` §月度聚合快照缺当月行或 doctor §6.5 报陈旧 → 跑 `node .agents/scripts/agg-delegations.cjs` 并回贴当月快照行
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "agentic-flow-kit",
3
- "version": "1.7.0",
4
- "description": "AI-Native 闭环工作流 + wiki 知识层脚手架——flow-kit init 一条命令为新项目装好 .agents 工作流引擎(阶段命令/角色契约/门禁钩子/kb 检索/看板/规则面预算)+ workflow 文档闭环 + wiki 知识库,装完自包含、零运行时依赖",
3
+ "version": "1.7.15",
4
+ "description": "AI-Native 闭环工作流 + wiki 知识层脚手架——flow-kit init 一条命令为新项目装好 .agents 工作流引擎(阶段命令/角色契约/门禁钩子/kb 检索/看板/规则面预算)+ workflow 文档闭环 + wiki 知识库,装完本地可跑、零运行时依赖",
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "test": "node src/run-tests.mjs",
package/src/add-gate.mjs CHANGED
@@ -2,6 +2,13 @@
2
2
  // 模块约定:modules/gates/<gate>/ 下源文件拷入 .agents/hooks/(平铺,README.md 与 local-pre-commit.line 为包内元数据不拷);
3
3
  // local-pre-commit.line 内容 = 需追加进 .agents/hooks/local-pre-commit 的挂载行(存在同名行则不重复追加,幂等)。
4
4
  // 门禁装后归项目所有:入 owned 台账,sync 永不覆盖(改红线/删不适用条目自行编辑——见各模块 README)。
5
+ // gate 防改锚(2026-10-11 P3-1):逐字拷贝安装的 gate 脚本,owned 条目写 srcSha256=安装时刻包源文件
6
+ // (modules/gates/<gate>/<file>)的 LF 归一 sha。语义:sync 对 owned 的 sha256 按盘面自愈(记账不约束),
7
+ // 但 srcSha256 只按包源刷新——gate 文件在装户 sync 中 srcTemplatePath 解析不到包源模板(templates/_agents/
8
+ // hooks/ 无同名件)即提前 return,锚一经写入恒定。doctor 的 gate 安装锚校验据此让「装后手改」永久可见:
9
+ // 装户可改(不阻断),但改了会被看见。--force 重装锚随新安装刷新(即重锚路径);已存在被跳过的文件锚
10
+ // 盘面现状(盘面非逐字拷贝,锚包源会装后即误报),盘面与包源不一致时 WARN 差异。local-pre-commit 是
11
+ // 合并接线件(模板 + 各门挂载行),非逐字拷贝——不写锚(它的 srcSha256 由 init/sync 按模板语义记,含义不同)。
5
12
  import fs from 'node:fs';
6
13
  import path from 'node:path';
7
14
  import { sha256 } from './render.mjs';
@@ -77,9 +84,26 @@ export function addGate(args, pkgRoot) {
77
84
  // 记账一律 LF 归一(init-p1-batch P1-4 rider):与 doctor §6.6 / sync ownedSha 同口径,跨 checkout 字节稳定
78
85
  const shaText = (p) => sha256(Buffer.from(fs.readFileSync(p, 'utf8').replace(/\r\n/g, '\n'), 'utf8'));
79
86
  const ownedLedger = new Map((kit.owned || []).map((f) => [f.rel, f]));
87
+ // 跳过件(盘上已存在、未 --force):先出声再记账——盘面与包源不一致即本地已改,WARN 保证差异在安装输出可见。
88
+ // 无台账条目的首次见面按盘面现状建立基线与锚;已有条目则原样保留(锚停在安装时刻值,盘面手改
89
+ // 继续由 doctor gate 安装锚校验留痕——重锚会把手改吸收成「无差异」,违背防改锚初衷)。
90
+ for (const name of skipped) {
91
+ const rel = `.agents/hooks/${name}`;
92
+ const known = ownedLedger.has(rel);
93
+ if (shaText(path.join(hooksDir, name)) !== shaText(path.join(srcRoot, name))) {
94
+ console.log(known
95
+ ? ` ⚠️ ${name} 盘面与包源不一致(本地已改)——原锚保留,手改由 doctor 锚校验留痕;重装覆盖用 --force`
96
+ : ` ⚠️ ${name} 盘面与包源不一致(本地已改),锚记盘面现状——重装覆盖用 --force`);
97
+ }
98
+ if (!known) {
99
+ const diskSha = shaText(path.join(hooksDir, name));
100
+ ownedLedger.set(rel, { rel, sha256: diskSha, srcSha256: diskSha });
101
+ }
102
+ }
80
103
  for (const name of installed) {
81
104
  const rel = `.agents/hooks/${name}`;
82
- ownedLedger.set(rel, { rel, sha256: shaText(path.join(hooksDir, name)) });
105
+ // srcSha256=安装时刻包源文件 sha(gate 防改锚,见文件头注):sha256 被 sync 按盘面自愈,锚恒定
106
+ ownedLedger.set(rel, { rel, sha256: shaText(path.join(hooksDir, name)), srcSha256: shaText(path.join(srcRoot, name)) });
83
107
  }
84
108
  if (wiredLp) {
85
109
  const lpRel = '.agents/hooks/local-pre-commit';