soloforge 1.1.47 → 1.1.48

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 (182) hide show
  1. package/README.md +11 -7
  2. package/dist/cli/adapter_writers.d.ts +5 -0
  3. package/dist/cli/adapter_writers.d.ts.map +1 -1
  4. package/dist/cli/adapter_writers.js +25 -0
  5. package/dist/cli/adapter_writers.js.map +1 -1
  6. package/dist/cli/init.d.ts.map +1 -1
  7. package/dist/cli/init.js +3 -1
  8. package/dist/cli/init.js.map +1 -1
  9. package/dist/cli/scope_check.d.ts +4 -0
  10. package/dist/cli/scope_check.d.ts.map +1 -0
  11. package/dist/cli/scope_check.js +41 -0
  12. package/dist/cli/scope_check.js.map +1 -0
  13. package/dist/context/adapters/claude_code/hooks.d.ts +5 -7
  14. package/dist/context/adapters/claude_code/hooks.d.ts.map +1 -1
  15. package/dist/context/adapters/claude_code/hooks.js +11 -9
  16. package/dist/context/adapters/claude_code/hooks.js.map +1 -1
  17. package/dist/context/adapters/shared/integration_guide.js +15 -5
  18. package/dist/context/adapters/shared/integration_guide.js.map +1 -1
  19. package/dist/context/adapters/shared/workflow_template.js +1 -1
  20. package/dist/context/config/intent_schema.d.ts +793 -6
  21. package/dist/context/config/intent_schema.d.ts.map +1 -1
  22. package/dist/context/config/intent_schema.js +9 -0
  23. package/dist/context/config/intent_schema.js.map +1 -1
  24. package/dist/context/config/resolver.d.ts +9 -0
  25. package/dist/context/config/resolver.d.ts.map +1 -1
  26. package/dist/context/config/resolver.js +5 -0
  27. package/dist/context/config/resolver.js.map +1 -1
  28. package/dist/core/adversarial_review_store.d.ts +133 -0
  29. package/dist/core/adversarial_review_store.d.ts.map +1 -0
  30. package/dist/core/adversarial_review_store.js +161 -0
  31. package/dist/core/adversarial_review_store.js.map +1 -0
  32. package/dist/core/domain_transition.d.ts.map +1 -1
  33. package/dist/core/domain_transition.js +3 -0
  34. package/dist/core/domain_transition.js.map +1 -1
  35. package/dist/core/gate_record_store.d.ts +2 -0
  36. package/dist/core/gate_record_store.d.ts.map +1 -1
  37. package/dist/core/gate_record_store.js +8 -0
  38. package/dist/core/gate_record_store.js.map +1 -1
  39. package/dist/core/git_utils.d.ts +1 -1
  40. package/dist/core/git_utils.js +1 -1
  41. package/dist/core/observer.d.ts.map +1 -1
  42. package/dist/core/observer.js +26 -2
  43. package/dist/core/observer.js.map +1 -1
  44. package/dist/core/task_context/constants.js +1 -1
  45. package/dist/core/task_context/constants.js.map +1 -1
  46. package/dist/core/task_context/manager.d.ts +4 -0
  47. package/dist/core/task_context/manager.d.ts.map +1 -1
  48. package/dist/core/task_context/manager.js +48 -30
  49. package/dist/core/task_context/manager.js.map +1 -1
  50. package/dist/core/task_context/manager_setters.d.ts +2 -0
  51. package/dist/core/task_context/manager_setters.d.ts.map +1 -1
  52. package/dist/core/task_context/manager_setters.js +10 -0
  53. package/dist/core/task_context/manager_setters.js.map +1 -1
  54. package/dist/core/types.d.ts +19 -0
  55. package/dist/core/types.d.ts.map +1 -1
  56. package/dist/domain/asset_registry/derived_types.d.ts +17 -0
  57. package/dist/domain/asset_registry/derived_types.d.ts.map +1 -1
  58. package/dist/domain/build/engine.d.ts +1 -0
  59. package/dist/domain/build/engine.d.ts.map +1 -1
  60. package/dist/domain/build/engine.js +34 -4
  61. package/dist/domain/build/engine.js.map +1 -1
  62. package/dist/domain/contracts/design_lifecycle_contract.d.ts.map +1 -1
  63. package/dist/domain/contracts/design_lifecycle_contract.js +11 -4
  64. package/dist/domain/contracts/design_lifecycle_contract.js.map +1 -1
  65. package/dist/domain/design/contract.d.ts.map +1 -1
  66. package/dist/domain/design/contract.js +11 -0
  67. package/dist/domain/design/contract.js.map +1 -1
  68. package/dist/domain/design/engine.d.ts +1 -0
  69. package/dist/domain/design/engine.d.ts.map +1 -1
  70. package/dist/domain/design/engine.js +35 -3
  71. package/dist/domain/design/engine.js.map +1 -1
  72. package/dist/domain/engine_helpers.d.ts +37 -0
  73. package/dist/domain/engine_helpers.d.ts.map +1 -1
  74. package/dist/domain/engine_helpers.js +86 -0
  75. package/dist/domain/engine_helpers.js.map +1 -1
  76. package/dist/domain/operate/engine.d.ts +1 -0
  77. package/dist/domain/operate/engine.d.ts.map +1 -1
  78. package/dist/domain/operate/engine.js +19 -2
  79. package/dist/domain/operate/engine.js.map +1 -1
  80. package/dist/domain/types.d.ts +6 -0
  81. package/dist/domain/types.d.ts.map +1 -1
  82. package/dist/domain/types.js.map +1 -1
  83. package/dist/domain/verify/engine.d.ts +1 -0
  84. package/dist/domain/verify/engine.d.ts.map +1 -1
  85. package/dist/domain/verify/engine.js +18 -1
  86. package/dist/domain/verify/engine.js.map +1 -1
  87. package/dist/gate/contracts/tool_actions.d.ts +2 -2
  88. package/dist/gate/contracts/tool_actions.d.ts.map +1 -1
  89. package/dist/gate/contracts/tool_actions.js +2 -2
  90. package/dist/gate/contracts/tool_actions.js.map +1 -1
  91. package/dist/gate/contracts/tool_invocation_contract_registry.js +1 -1
  92. package/dist/gate/contracts/tool_invocation_contract_registry.js.map +1 -1
  93. package/dist/gate/executors/executors_artifact.d.ts +19 -0
  94. package/dist/gate/executors/executors_artifact.d.ts.map +1 -1
  95. package/dist/gate/executors/executors_artifact.js +100 -3
  96. package/dist/gate/executors/executors_artifact.js.map +1 -1
  97. package/dist/gate/executors/executors_build.d.ts.map +1 -1
  98. package/dist/gate/executors/executors_build.js +17 -15
  99. package/dist/gate/executors/executors_build.js.map +1 -1
  100. package/dist/gate/executors/executors_external_command.d.ts.map +1 -1
  101. package/dist/gate/executors/executors_external_command.js +32 -0
  102. package/dist/gate/executors/executors_external_command.js.map +1 -1
  103. package/dist/gate/executors/executors_field_mapping.d.ts +7 -0
  104. package/dist/gate/executors/executors_field_mapping.d.ts.map +1 -0
  105. package/dist/gate/executors/executors_field_mapping.js +179 -0
  106. package/dist/gate/executors/executors_field_mapping.js.map +1 -0
  107. package/dist/gate/executors/executors_prerequisite.js +1 -1
  108. package/dist/gate/executors/executors_regex_scan.d.ts.map +1 -1
  109. package/dist/gate/executors/executors_regex_scan.js +34 -13
  110. package/dist/gate/executors/executors_regex_scan.js.map +1 -1
  111. package/dist/gate/executors/executors_scope.js +4 -4
  112. package/dist/gate/executors/executors_scope.js.map +1 -1
  113. package/dist/gate/executors/executors_trace.d.ts +5 -0
  114. package/dist/gate/executors/executors_trace.d.ts.map +1 -1
  115. package/dist/gate/executors/executors_trace.js +184 -3
  116. package/dist/gate/executors/executors_trace.js.map +1 -1
  117. package/dist/gate/executors/index.d.ts.map +1 -1
  118. package/dist/gate/executors/index.js +2 -0
  119. package/dist/gate/executors/index.js.map +1 -1
  120. package/dist/gate/gate_engine.d.ts +9 -0
  121. package/dist/gate/gate_engine.d.ts.map +1 -1
  122. package/dist/gate/gate_engine.js +15 -0
  123. package/dist/gate/gate_engine.js.map +1 -1
  124. package/dist/gate/gate_registry_bridge.d.ts +2 -2
  125. package/dist/gate/gate_registry_bridge.d.ts.map +1 -1
  126. package/dist/gate/gate_registry_bridge.js +6 -3
  127. package/dist/gate/gate_registry_bridge.js.map +1 -1
  128. package/dist/gate/middleware_gates.js +1 -1
  129. package/dist/gate/middleware_gates.js.map +1 -1
  130. package/dist/gate/scope_resolver.d.ts +7 -0
  131. package/dist/gate/scope_resolver.d.ts.map +1 -1
  132. package/dist/gate/scope_resolver.js +1 -1
  133. package/dist/gate/scope_resolver.js.map +1 -1
  134. package/dist/index.js +5 -0
  135. package/dist/index.js.map +1 -1
  136. package/dist/server/tools/sf_doctor.d.ts +1 -0
  137. package/dist/server/tools/sf_doctor.d.ts.map +1 -1
  138. package/dist/server/tools/sf_doctor.js +20 -0
  139. package/dist/server/tools/sf_doctor.js.map +1 -1
  140. package/dist/server/tools/sf_task.d.ts +83 -0
  141. package/dist/server/tools/sf_task.d.ts.map +1 -1
  142. package/dist/server/tools/sf_task.js +121 -4
  143. package/dist/server/tools/sf_task.js.map +1 -1
  144. package/dist/server/tools/sf_work.d.ts +203 -0
  145. package/dist/server/tools/sf_work.d.ts.map +1 -1
  146. package/dist/server/tools/sf_work.js +531 -40
  147. package/dist/server/tools/sf_work.js.map +1 -1
  148. package/dist/shared/traceability_id_utils.js +3 -3
  149. package/dist/shared/traceability_id_utils.js.map +1 -1
  150. package/dist/verify/contracts/decision_workshop.d.ts.map +1 -1
  151. package/dist/verify/contracts/decision_workshop.js +4 -3
  152. package/dist/verify/contracts/decision_workshop.js.map +1 -1
  153. package/package.json +1 -1
  154. package/templates/build/enforced.md +243 -56
  155. package/templates/build//346/263/250/351/207/212/347/272/252/345/276/213.md +48 -0
  156. package/templates/build//346/265/213/350/257/225/350/256/241/345/210/222.md +9 -4
  157. package/templates/build//347/274/226/347/240/201/347/272/252/345/276/213.md +26 -0
  158. package/templates/design/API/346/216/245/345/217/243/350/247/204/346/240/274/346/226/207/346/241/243.md +7 -0
  159. package/templates/design/enforced.md +204 -14
  160. package/templates/design//345/205/250/347/224/237/345/221/275/345/221/250/346/234/237/345/267/245/344/275/234/346/265/201/345/257/274/350/210/252.md +4 -2
  161. package/templates/design//345/210/207/347/211/207/350/247/204/345/210/222.md +2 -0
  162. package/templates/design//345/274/200/345/217/221/345/210/207/347/211/207/350/256/241/345/210/222.md +75 -0
  163. package/templates/design//346/225/260/346/215/256/345/272/223/350/256/276/350/256/241/346/226/207/346/241/243.md +2 -0
  164. package/templates/design//346/236/266/346/236/204/350/256/276/350/256/241.md +24 -0
  165. package/templates/design//350/256/276/350/256/241/345/206/263/347/255/226/347/272/252/345/276/213.md +58 -0
  166. package/templates/design//350/256/276/350/256/241/350/264/250/351/207/217/350/246/201/347/202/271.md +58 -0
  167. package/templates/design//351/234/200/346/261/202/345/210/206/346/236/220.md +24 -0
  168. package/templates/operate/UI/350/247/206/350/247/211/351/252/214/346/224/266/347/272/252/345/276/213.md +74 -0
  169. package/templates/operate/enforced.md +42 -6
  170. package/templates/operate//345/217/221/345/270/203/350/257/264/346/230/216.md +19 -1
  171. package/templates/operate//351/203/250/347/275/262/351/205/215/347/275/256.md +10 -0
  172. package/templates/shared/enforced.md +37 -0
  173. package/templates/shared//345/267/245/344/275/234/346/265/201/345/257/274/350/210/252/345/245/221/347/272/246.md +1 -1
  174. package/templates/shared//347/240/224/350/256/250/350/256/260/345/275/225.md +54 -0
  175. package/templates/verify/enforced.md +84 -263
  176. package/templates/verify//344/272/244/344/273/230/345/256/214/345/244/207/346/200/247/345/256/241/346/237/245.md +1 -0
  177. package/templates/verify//344/273/243/347/240/201/345/256/241/346/237/245/346/212/245/345/221/212.md +10 -0
  178. package/templates/verify//346/236/266/346/236/204/350/257/255/344/271/211/347/272/242/347/272/277.md +60 -0
  179. package/dist/core/scope_checker.d.ts +0 -29
  180. package/dist/core/scope_checker.d.ts.map +0 -1
  181. package/dist/core/scope_checker.js +0 -53
  182. package/dist/core/scope_checker.js.map +0 -1
package/README.md CHANGED
@@ -51,7 +51,7 @@ SoloForge 把 Claude Code、Trae 等 AI 编程助手接入同一套**项目规
51
51
 
52
52
  **🔒 工程实现契约** — 编码阶段约束 OOD/SOLID、Controller/Handler/Router 入参出参、参数校验、事务、幂等、权限、日志和错误处理。
53
53
 
54
- **🔍 抗偷懒与独立审查** — 禁止空洞章节、占位符(TBD)、无证据 ✅。审查采用三阶段强制循环:对抗性审查(默认所有门禁 ❌,逐条引用原文)→ 强制修复 独立重审(全新视角,不受修复偏见)。
54
+ **🔍 抗偷懒与对抗审查** — 禁止空洞章节、占位符(TBD)、无证据 ✅。审查采用两层 loop:**per-artifact**(单产物产出后深度审)+ **cross-artifact**(交付前跨产物一致性),多利益方独立对抗(用户/攻击者/维护者/性能/合规),**loop-until-dry** error 才达标(warning 软收敛记遗留、震荡熔断升级人工)。
55
55
 
56
56
  **✅ 验证有证据** — SoloForge 生成验证命令但不自己执行。只有真实执行并录入结果才算通过;计划、构造记录、未执行的验证都不触发交付。
57
57
 
@@ -103,10 +103,10 @@ SoloForge 把工程交付拆成 **4 个能力域**,AI 在每个域内通过 **
103
103
  │ 架构/DB │ │ 验收 │ │
104
104
  │ API/切片 │ │ │ │
105
105
  └──────────┴──────────┴──────────┴─────────────────────────┘
106
- AI 在域内循环:observe → act verify
106
+ AI 在域内循环:observe → ordered_plan 推进(verify→act→wait)
107
107
  ```
108
108
 
109
- **核心循环**:`sf_task` 开任务 → `sf_work action=observe` 看当前域状态 → `sf_work action=act` 拿到受门禁约束的执行 prompt(生成产物)→ `sf_work action=verify` 跑域内门禁 → 通过则推进下一域。
109
+ **核心循环**:`sf_task` 开任务 → `sf_work action=observe` 看当前域状态(返回 `ordered_plan`:verifyact→wait 有序推进计划,**先补欠验证不跳步、再 act 新产物、阻塞最后**)→(有疑问时 `action=deliberate` 条件研讨)→ `sf_work action=act` 拿到受**可做性门禁**约束的执行 prompt(①同域依赖阻塞拒 ②跨域缺上游拒 ③有未验证产物拒不并行 ④verified 产物须有对抗审查;**重写修复/演进放行**)→ `sf_work action=verify` 跑域内门禁 → `sf_work action=adversarial_review` 对抗审查(per-artifact 深审单产物 / cross-artifact 跨产物一致性,loop-until-dry 零 error 收敛;**所有域所有产物 per-artifact 不可省**,act 门禁④强制)→ 通过则推进下一域。
110
110
 
111
111
  ```
112
112
  AI(认知节点) SoloForge 内核(控制权)
@@ -121,6 +121,10 @@ AI(认知节点) SoloForge 内核(控制权)
121
121
  │◀────────── 返回裁决 + 下一步 ────────── │
122
122
  ```
123
123
 
124
+ > **两个增强 action**(让 AI 先想清楚、再被独立挑刺):
125
+ > - `deliberate`(对话框交互式研讨):`act` 之前,AI 在对话框与你逐点头脑风暴 + 第一性原理收敛(有疑问来回讨论、无疑问一行确认跳过),收敛后总结留痕到 `docs/研讨记录/`。研讨记录不计入产物,避免产物类型爆炸。
126
+ > - `adversarial_review`(对抗审查):`verify` 之后、交付前,**per-artifact** 深审单产物 + **cross-artifact** 跨产物一致性,多利益方(用户/攻击者/维护者/性能/合规)独立对抗,**loop-until-dry** 零 error 收敛(warning 软收敛记遗留、震荡熔断升级人工)。
127
+
124
128
  > **控制权边界**:LLM 提供建议和结构化 proposal,但任务状态机、工具调用、副作用权限、验证裁决由内核裁决。这是 SoloForge 区别于"纯 prompt 工程"的根本。
125
129
 
126
130
  ## 📂 项目知识库
@@ -238,7 +242,7 @@ docs/
238
242
 
239
243
  - **验证计划 ≠ 验证结果** — SoloForge 生成验证命令但不执行。只有真实执行并录入结果才算通过。
240
244
  - **未验证不交付** — 交付前必须真实执行的验证结果。计划、构造记录、未执行的验证都不触发交付。
241
- - **证据必须完整** — 每条验证结果含执行证据(输出哈希、时间、证据 ID)且覆盖全部 `changed_files`。
245
+ - **证据必须完整** — 每条验证结果含结构化执行证据(证据 ID、证据等级 E0-E3、时间戳)且覆盖全部 `changed_files`。
242
246
  - **交付需显式触发** — 交付就绪检查只判断"能不能交付",不自动 commit/push/建 PR。验收接受必须有可审计的用户确认,不能由 AI 自标已接受。
243
247
 
244
248
  **失败处理**:确定性失败不无限重试(升级人工);可修复失败有重试上限(超限升级人工);scope 不足请求扩大不越权;错误信息自动脱敏。
@@ -272,9 +276,9 @@ soloforge --version | --help
272
276
  | 工具 | action | 职责 |
273
277
  |------|--------|------|
274
278
  | `sf_task` | `start` / `query` / `cancel` | 任务生命周期:启动、查下一步、取消 |
275
- | `sf_work` | `observe` / `act` / `verify` | 能力域工作(需传 `domain`):看状态、拿执行 prompt、跑域内验证 |
279
+ | `sf_work` | `observe` / `deliberate` / `act` / `verify` / `adversarial_review` | 能力域工作(需传 `domain`):看状态、产出前条件研讨、拿执行 prompt、跑域内验证、对抗审查(per-artifact / cross-artifact 两层 loop) |
276
280
  | `sf_knowledge` | `audit` / `add` / `update` | 知识库:审计规则可消费性、新增、更新 |
277
- | `sf_gate` | —(参数 `gate_name` + `domain`) | 独立门禁审查(OOD/SOLID、抽象缺失、风险模式等) |
281
+ | `sf_gate` | —(参数 `domain` + `gate_name` + `artifact_path`) | 独立门禁审查(OOD/SOLID、抽象缺失、风险模式等) |
278
282
  | `sf_scaffold` | —(参数 `task_id`) | 脚手架生成(不匹配技术栈时不 fallback) |
279
283
  | `sf_analyze` | —(参数 `view`) | 上下文引擎视图:`file_impact` / `reference_trace` / `dependency_graph` / `change_impact` / `coverage_gap` / `knowledge_ref` |
280
284
  | `sf_doctor` | —(参数 `check_type`) | MCP 诊断:`check_type` = `state` / `gates` / `scope` / `full` |
@@ -341,7 +345,7 @@ Cursor 暂无内置适配器。先 `soloforge init` 生成 `.mcp.json`,再手
341
345
 
342
346
  ```bash
343
347
  npm install
344
- npm run build # clean build(rm -rf dist + tsc)
348
+ npm run build # clean build(rm -rf dist + tsc + chmod +x dist/index.js
345
349
  npm test # 全量 vitest 测试
346
350
  ```
347
351
 
@@ -41,4 +41,9 @@ export declare function writeClaudeSettings(projectPath: string): string;
41
41
  export declare function writeTraeMcpJson(projectPath: string): string;
42
42
  /** 写入 .trae/rules/project_rules.md(Trae AI 工作流指令) */
43
43
  export declare function writeTraeRules(projectPath: string, config: ProjectConfig): string;
44
+ /** 生成 redocly.yaml(锁定 redocly lint 规则,判定标准由 SoloForge 掌控,防上游默认规则 drift)。
45
+ * 设计:external_command 类 check 的外部工具规则也属硬下限,必须自带 config 锁定,不能外包上游默认。 */
46
+ export declare function generateRedoclyConfig(): string;
47
+ /** 写入 redocly.yaml(design-gate/verify-gate 的 OPENAPI-LINT external_command 用 --config 指向) */
48
+ export declare function writeRedoclyConfig(projectPath: string): string;
44
49
  //# sourceMappingURL=adapter_writers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"adapter_writers.d.ts","sourceRoot":"","sources":["../../src/cli/adapter_writers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAQH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD,uEAAuE;AACvE,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE;QACV,SAAS,EAAE;YACT,OAAO,EAAE,MAAM,CAAC;YAChB,IAAI,EAAE,MAAM,EAAE,CAAC;YACf,GAAG,EAAE;gBAAE,iBAAiB,EAAE,MAAM,CAAA;aAAE,CAAC;SACpC,CAAC;KACH,CAAC;CACH;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,mBAAmB,CAa9E;AAUD,2CAA2C;AAC3C,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAKxD;AAED,8DAA8D;AAC9D,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,MAAM,CAKhF;AAED,+EAA+E;AAC/E,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAK/D;AAED,oFAAoF;AACpF,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAK5D;AAED,qDAAqD;AACrD,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,MAAM,CAKjF"}
1
+ {"version":3,"file":"adapter_writers.d.ts","sourceRoot":"","sources":["../../src/cli/adapter_writers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAQH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD,uEAAuE;AACvE,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE;QACV,SAAS,EAAE;YACT,OAAO,EAAE,MAAM,CAAC;YAChB,IAAI,EAAE,MAAM,EAAE,CAAC;YACf,GAAG,EAAE;gBAAE,iBAAiB,EAAE,MAAM,CAAA;aAAE,CAAC;SACpC,CAAC;KACH,CAAC;CACH;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,mBAAmB,CAa9E;AAUD,2CAA2C;AAC3C,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAKxD;AAED,8DAA8D;AAC9D,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,MAAM,CAKhF;AAED,+EAA+E;AAC/E,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAK/D;AAED,oFAAoF;AACpF,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAK5D;AAED,qDAAqD;AACrD,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,MAAM,CAKjF;AAED;wEACwE;AACxE,wBAAgB,qBAAqB,IAAI,MAAM,CAgB9C;AAED,6FAA6F;AAC7F,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAI9D"}
@@ -79,4 +79,29 @@ export function writeTraeRules(projectPath, config) {
79
79
  fs.writeFileSync(target, generateTraeRules(config), "utf-8");
80
80
  return target;
81
81
  }
82
+ /** 生成 redocly.yaml(锁定 redocly lint 规则,判定标准由 SoloForge 掌控,防上游默认规则 drift)。
83
+ * 设计:external_command 类 check 的外部工具规则也属硬下限,必须自带 config 锁定,不能外包上游默认。 */
84
+ export function generateRedoclyConfig() {
85
+ return `# SoloForge OpenAPI lint 配置 — 锁定 redocly 规则,判定标准由 SoloForge 掌控(防上游默认规则 drift)。
86
+ # 原则:保留 OpenAPI 规范硬规则(语法/结构/引用/安全性),降级纯可选元信息字段为 off(消除对合规产物的噪音 warning)。
87
+ extends:
88
+ - recommended
89
+ rules:
90
+ # 可选元信息字段(产物不强求,关闭噪音)
91
+ info-license: off
92
+ info-contact: off
93
+ info-description: off
94
+ servers-not-defined: off
95
+ # 描述/标签类(关闭:旧版 redocly 不认 hint 报 Invalid severity level,且属噪音建议不阻断)
96
+ operation-description: off
97
+ tag-description: off
98
+ operation-tag-defined: off
99
+ `;
100
+ }
101
+ /** 写入 redocly.yaml(design-gate/verify-gate 的 OPENAPI-LINT external_command 用 --config 指向) */
102
+ export function writeRedoclyConfig(projectPath) {
103
+ const target = path.join(projectPath, "redocly.yaml");
104
+ fs.writeFileSync(target, generateRedoclyConfig(), "utf-8");
105
+ return target;
106
+ }
82
107
  //# sourceMappingURL=adapter_writers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"adapter_writers.js","sourceRoot":"","sources":["../../src/cli/adapter_writers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"adapter_writers.js","sourceRoot":"","sources":["../../src/cli/adapter_writers.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAgEH;;;GAGG;AACH,wBAAsB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAwF3D"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAkEH;;;GAGG;AACH,wBAAsB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAyF3D"}
package/dist/cli/init.js CHANGED
@@ -18,7 +18,7 @@ import path from "node:path";
18
18
  import { resolveProjectConfig, getGlobalPatternsDir, getBuiltinKnowledgeDir } from "../context/knowledge/loader.js";
19
19
  import { classifyConfigContext, isWriteAllowed } from "../context/config/config_write_boundary.js";
20
20
  import { copyKnowledgeToProject, copyPipelineTemplatesToProject, copyPatternsToGlobal, ensureKnowledgeSkeleton } from "../context/templates/template_init_sync.js";
21
- import { writeMcpJson, writeClaudeMd, writeClaudeSettings, writeTraeMcpJson, writeTraeRules, generateMcpJsonConfig, } from "./adapter_writers.js";
21
+ import { writeMcpJson, writeClaudeMd, writeClaudeSettings, writeTraeMcpJson, writeTraeRules, writeRedoclyConfig, generateMcpJsonConfig, } from "./adapter_writers.js";
22
22
  import { ENV } from "../shared/env.js";
23
23
  /** 手写 argv 解析(不引入 commander/yargs,大道至简) */
24
24
  function parseInitArgs(argv) {
@@ -57,6 +57,7 @@ function computeWrites(adapter) {
57
57
  if (adapter === "trae" || adapter === "all") {
58
58
  writes.push(".trae/mcp.json", ".trae/rules/project_rules.md");
59
59
  }
60
+ writes.push("redocly.yaml"); // OPENAPI-LINT 工具配置(design-gate/verify-gate),与 adapter 无关,总是写
60
61
  return writes;
61
62
  }
62
63
  /**
@@ -135,6 +136,7 @@ export async function runInit(argv) {
135
136
  console.log(` ${writeTraeMcpJson(absoluteProject)}`);
136
137
  console.log(` ${writeTraeRules(absoluteProject, config)}`);
137
138
  }
139
+ console.log(` ${writeRedoclyConfig(absoluteProject)} (OPENAPI-LINT 锁定规则配置)`);
138
140
  console.log();
139
141
  // 7. 接入总结 + 下一步指引
140
142
  console.log("✅ 接入完成。下一步:");
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ /** 是否全局危险路径(纯函数,CLI 入口与单测共用)。 */
2
+ export declare function isDangerousPath(filePath: string): boolean;
3
+ export declare function runScopeCheck(): Promise<void>;
4
+ //# sourceMappingURL=scope_check.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope_check.d.ts","sourceRoot":"","sources":["../../src/cli/scope_check.ts"],"names":[],"mappings":"AAqBA,iCAAiC;AACjC,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAenD"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * scope-check CLI — Claude Code PreToolUse hook:拦全局危险路径写入,防 AI 误删引擎状态/密钥/git。
3
+ *
4
+ * 第一性:唯一该硬拦的是「全局危险路径」(.git/.env/.soloforge 引擎内部/node_modules)——
5
+ * 防不可逆破坏,且不碍任何编码写。其他路径(src/docs/README/研讨记录/配置/.gitignore...)全放行。
6
+ *
7
+ * 原 scope guard 的「域写边界」(用 act scope 卡所有 Edit/Write)是错误抽象——AI 自由写不对应单一动作 scope,
8
+ * 必然误拦合法写(README/研讨记录/笔记)。域边界交给产物层的门禁/verify/applicability_check,不靠写层 hook。
9
+ *
10
+ * 结构:纯函数 isDangerousPath(CLI 入口 + 单测共用)+ 薄入口 runScopeCheck(stdin + process.exit)。
11
+ */
12
+ import { readFileSync } from "node:fs";
13
+ /** 全局危险路径:写入会不可逆破坏(git 内部/密钥/SoloForge 引擎状态/依赖)。片段边界匹配,相对/绝对路径均可。 */
14
+ const DENIED_PATTERNS = [
15
+ /(?:^|\/)\.git\//, // git 内部(防破坏版本库)
16
+ /(?:^|\/)\.env(?:\.|$|\/)/, // 环境变量/密钥(.env/.env.local/.env/)
17
+ /(?:^|\/)\.soloforge\/(?:state|tasks|gates|reviews)\//, // SoloForge 引擎内部状态(防破坏任务/门禁/审查记录;knowledge/ 用户资产放行)
18
+ /(?:^|\/)node_modules\//, // 依赖目录
19
+ ];
20
+ /** 是否全局危险路径(纯函数,CLI 入口与单测共用)。 */
21
+ export function isDangerousPath(filePath) {
22
+ return DENIED_PATTERNS.some((p) => p.test(filePath));
23
+ }
24
+ export async function runScopeCheck() {
25
+ let filePath = "";
26
+ try {
27
+ const input = JSON.parse(readFileSync(0, "utf-8"));
28
+ filePath = input.tool_input?.file_path ?? input.tool_input?.path ?? "";
29
+ }
30
+ catch {
31
+ process.exit(0); // stdin 非法 → fail-open
32
+ }
33
+ if (!filePath)
34
+ process.exit(0); // 无目标路径(非 Edit/Write 类)→ fail-open
35
+ if (isDangerousPath(filePath)) {
36
+ console.error(`[SoloForge] BLOCKED: ${filePath} 是全局危险路径(引擎内部/密钥/git/依赖),禁止写入——防不可逆破坏。`);
37
+ process.exit(2);
38
+ }
39
+ process.exit(0);
40
+ }
41
+ //# sourceMappingURL=scope_check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope_check.js","sourceRoot":"","sources":["../../src/cli/scope_check.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,qEAAqE;AACrE,MAAM,eAAe,GAAG;IACtB,iBAAiB,EAAqC,iBAAiB;IACvE,0BAA0B,EAA4B,iCAAiC;IACvF,sDAAsD,EAAE,oDAAoD;IAC5G,wBAAwB,EAA8B,OAAO;CAC9D,CAAC;AAEF,iCAAiC;AACjC,MAAM,UAAU,eAAe,CAAC,QAAgB;IAC9C,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,IAAI,QAAQ,GAAG,EAAE,CAAC;IAClB,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,CAA2D,CAAC;QAC7G,QAAQ,GAAG,KAAK,CAAC,UAAU,EAAE,SAAS,IAAI,KAAK,CAAC,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC;IACzE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,uBAAuB;IAC1C,CAAC;IACD,IAAI,CAAC,QAAQ;QAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,mCAAmC;IAEnE,IAAI,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,KAAK,CAAC,wBAAwB,QAAQ,wCAAwC,CAAC,CAAC;QACxF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}
@@ -15,13 +15,11 @@ export { generateClaudeMd } from "./claude_md.js";
15
15
  /**
16
16
  * 生成 Claude Code hooks 配置对象。
17
17
  *
18
- * 设计决策:PreToolUse 阻断类 hooks 已移除。
19
- * 原因:PreToolUse hooks(check-write / check-bash)与 MCP 工具的阶段性约束重复,
20
- * 且存在状态不同步导致死锁的问题(hooks YAML 状态文件,MCP 也在写同一个文件)。
21
- * 阶段约束已由 MCP 工具(sf_work / sf_work)完整覆盖。
22
- * 偷懒模式检测由 lazy_pattern_check gate executor 覆盖(sf_gate / sf_work 调用)。
23
- *
24
- * 保留 PostToolUse 和 UserPromptSubmit 钩子(非阻断,仅做信息收集)。
18
+ * 设计决策:PreToolUse hook(Edit|Write soloforge scope-check)只拦全局危险路径
19
+ * (.git/.env/.soloforge 引擎内部/node_modules),防 AI 误删引擎状态/密钥/git。
20
+ * 不做域写边界——原「用 act scope 卡所有 Edit/Write」是错误抽象(AI 自由写不对应单一动作 scope,
21
+ * 必误拦合法写如 README/研讨记录),已退化为只拦危险路径;域边界交给产物层门禁/verify/applicability_check。
22
+ * scope-check 独立 CLI 进程(不调 MCP/不持锁),fail-open。
25
23
  */
26
24
  export declare function generateHooksConfig(): object;
27
25
  //# sourceMappingURL=hooks.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../../../src/context/adapters/claude_code/hooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAGlD;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAS5C"}
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../../../src/context/adapters/claude_code/hooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAGlD;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAa5C"}
@@ -16,19 +16,21 @@ import { debug } from "../../../shared/logger.js";
16
16
  /**
17
17
  * 生成 Claude Code hooks 配置对象。
18
18
  *
19
- * 设计决策:PreToolUse 阻断类 hooks 已移除。
20
- * 原因:PreToolUse hooks(check-write / check-bash)与 MCP 工具的阶段性约束重复,
21
- * 且存在状态不同步导致死锁的问题(hooks YAML 状态文件,MCP 也在写同一个文件)。
22
- * 阶段约束已由 MCP 工具(sf_work / sf_work)完整覆盖。
23
- * 偷懒模式检测由 lazy_pattern_check gate executor 覆盖(sf_gate / sf_work 调用)。
24
- *
25
- * 保留 PostToolUse 和 UserPromptSubmit 钩子(非阻断,仅做信息收集)。
19
+ * 设计决策:PreToolUse hook(Edit|Write soloforge scope-check)只拦全局危险路径
20
+ * (.git/.env/.soloforge 引擎内部/node_modules),防 AI 误删引擎状态/密钥/git。
21
+ * 不做域写边界——原「用 act scope 卡所有 Edit/Write」是错误抽象(AI 自由写不对应单一动作 scope,
22
+ * 必误拦合法写如 README/研讨记录),已退化为只拦危险路径;域边界交给产物层门禁/verify/applicability_check。
23
+ * scope-check 独立 CLI 进程(不调 MCP/不持锁),fail-open。
26
24
  */
27
25
  export function generateHooksConfig() {
28
- debug("Hooks配置", "生成 hooks 配置(无 PreToolUse 阻断)");
26
+ debug("Hooks配置", "生成 hooks 配置(含 PreToolUse scope guard)");
29
27
  return {
30
28
  hooks: {
31
- // PreToolUse 已移除 阶段约束由 MCP 工具覆盖,不再重复拦截
29
+ // PreToolUse:Edit/Write 写全局危险路径(.git/.env/.soloforge 引擎内部/node_modules)→ deny(exit 2),防不可逆破坏
30
+ PreToolUse: [{
31
+ matcher: "Edit|Write",
32
+ hooks: [{ type: "command", command: "soloforge scope-check", timeout: 10 }],
33
+ }],
32
34
  PostToolUse: [],
33
35
  UserPromptSubmit: [],
34
36
  },
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../../src/context/adapters/claude_code/hooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAElD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,mBAAmB;IACjC,KAAK,CAAC,SAAS,EAAE,8BAA8B,CAAC,CAAC;IACjD,OAAO;QACL,KAAK,EAAE;YACL,yCAAyC;YACzC,WAAW,EAAE,EAAE;YACf,gBAAgB,EAAE,EAAE;SACrB;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../../src/context/adapters/claude_code/hooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAElD;;;;;;;;GAQG;AACH,MAAM,UAAU,mBAAmB;IACjC,KAAK,CAAC,SAAS,EAAE,uCAAuC,CAAC,CAAC;IAC1D,OAAO;QACL,KAAK,EAAE;YACL,6FAA6F;YAC7F,UAAU,EAAE,CAAC;oBACX,OAAO,EAAE,YAAY;oBACrB,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,uBAAuB,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;iBAC5E,CAAC;YACF,WAAW,EAAE,EAAE;YACf,gBAAgB,EAAE,EAAE;SACrB;KACF,CAAC;AACJ,CAAC"}
@@ -59,13 +59,23 @@ ${rows.join("\n")}`;
59
59
  function generateWorkflowSection() {
60
60
  return `## 标准工作流
61
61
 
62
+ **任务规模路由(按 intent 选起点,别对所有任务套全流程)**:\`sf_task(start)\` 已按 intent 路由——大功能(新系统/架构/多产物)进 design 走全产物;**小改动/bug 修复进 build,只做 code + verify(test_plan 按需),不必产需求分析/架构/数据库设计**;改 bug 触及设计产物(如 API 变更)才回 design 更新对应产物。
63
+
62
64
  1. \`sf_task(start)\` 声明意图,创建受控任务(拿到 task_id、required_artifacts、next_step)
63
65
  2. \`sf_work(observe)\` 派生状态:哪些产物 pending / unverified / verified、缺什么上游
64
- 3. \`sf_work(act)\` 组装 prompt —— **系统只返回 prompt + scope 约束 + 自评清单,文件由你自己写**(系统不代写)
65
- 4. \`sf_work(verify)\` 执行门禁生成 GateRecord:通过则推进;失败的 findings recovery 自动注入下次 act(Reflexion 闭环)
66
- 5. 门禁 retry 5 或域来回切换 > 3 → 自动 escalate(转人工)
66
+ 3. \`sf_work(deliberate)\` 产出前**对话框交互式研讨**:AI 在对话框与你逐点头脑风暴 + 第一性原理收敛(有疑问的来回讨论、无疑问的一行确认跳过),收敛后总结留痕到 \`docs/研讨记录/{域中文}/\`,再 \`act\` 承接
67
+ 4. \`sf_work(act)\` 组装 prompt(承接研讨记录为上游)—— **系统只返回 prompt + scope 约束 + 自评清单,文件由你自己写**(系统不代写)
68
+ 5. \`sf_work(verify)\` 执行门禁生成 GateRecord:通过则推进;失败的 findings recovery 自动注入下次 act(Reflexion 闭环)
69
+ 6. \`sf_work(adversarial_review)\` 对抗审查(独立 session 避免确认偏见):**per-artifact** 单产物产出后深度审(artifact=产物 kind)/ **cross-artifact** 跨产物一致性(交付前,不传 artifact)。多利益方独立对抗(用户/攻击者/维护者/性能/合规),**loop-until-dry** 零 error 才达标(warning 软收敛记遗留、震荡熔断升级)
70
+ 7. 门禁 retry ≥ 5 或域来回切换 > 3 次 → 自动 escalate(转人工)
71
+
72
+ **单产物推进纪律(所有域通用)**:按 \`sf_work(observe)\` 返回的 \`ordered_plan\`(verify→act→wait 有序计划:先补完欠验证的产物不跳步、再 act 新产物、阻塞最后)顺序推进,不自行重排、不并行多产物 act;**不得跳步**——verify 不可跳、adversarial_review 独立审查不可省(交付前另做 cross-artifact 跨产物审查)。
73
+
74
+ 跨域单向依赖:design → build → verify → operate(上游未过门禁则下游阻断)。被阻断时按返回的 recovery_command / next_step 恢复,不得取消任务后绕过状态直接写代码。
75
+
76
+ **交付前实跑验证纪律(operate/交付,软注入 + slice-gate 硬兜底)**:进 operate 或交付前必须实跑验证并**输出地址给人工**:① \`docker compose build\` 构建最新镜像到本地 docker desktop;② \`docker compose up\` 启动服务;③ 浏览器验证前端交互 + 后端逻辑(核心接口,playwright e2e 验交互链路与接口响应,SLICE-E2E 兜底——不验 UI 视觉);④ 前端 UI 视觉验收(AI 视觉审查截图+结论,主观项人工确认,结论留痕发布说明,见「UI视觉验收纪律」);⑤ **输出访问地址(http://localhost:各服务PORT,逐服务列清楚)给人工查看**。slice-gate(SLICE-BUILD/UP/HTTP/E2E)兜底验证构建/部署/HTTP/E2E,但「输出地址给人工」是交付硬要求——不输出地址人工无法验收,等于没交付。
67
77
 
68
- 跨域单向依赖:design build verify operate(上游未过门禁则下游阻断)。被阻断时按返回的 recovery_command / next_step 恢复,不得取消任务后绕过状态直接写代码。`;
78
+ **切片维度纪律(design,硬约束 SLICE-DIMENSION 兜底)**:切片须**垂直**(端到端业务价值 前端→后端→DB),不按技术层/端横切;骨架/基础设施切片 2(多端项目合并一个「全端骨架 + DB」切片,不每端一个骨架)。design-gate SLICE-DIMENSION 硬兜底拦横切——因为 slice-gate 的浏览器验证要求切片垂直:骨架切片无业务可验=验证空转(docker 能跑 ≠ 业务对)。`;
69
79
  }
70
80
  /** 四领域与产物:从域契约派生(单一真相源,产物 kind 变更自动反映) */
71
81
  function generateDomainsSection() {
@@ -82,6 +92,6 @@ function generateDomainsSection() {
82
92
  |---|---|---|
83
93
  ${rows.join("\n")}
84
94
 
85
- 产物路径以 \`sf_work(act)\` 返回的 scope \`allowed_paths\` 为准(设计/审查写 \`docs/\`、代码写 \`src/\`、配置写 \`config/\`、部署写 \`deploy/\`)。`;
95
+ 产物路径以 \`sf_work(act)\` 返回的 scope \`allowed_paths\` 为准(设计/审查写 \`docs/\`、代码写各工程 \`src/\`——多工程按架构 §6.3 端清单 \`backend/src/\` \`client-portal/src/\` 等独立工程目录、单工程写根 \`src/\`、配置写 \`config/\`、部署写 \`deploy/\`)。`;
86
96
  }
87
97
  //# sourceMappingURL=integration_guide.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"integration_guide.js","sourceRoot":"","sources":["../../../../src/context/adapters/shared/integration_guide.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAGrF;;;;;GAKG;AACH,MAAM,UAAU,yBAAyB,CAAC,MAAsB;IAC9D,OAAO;;;;EAIP,wBAAwB,CAAC,MAAM,CAAC;;EAEhC,iBAAiB,EAAE;;;;;;qBAMA,wBAAwB;CAC5C,CAAC;AACF,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,wBAAwB,CAAC,OAAuB;IAC9D,OAAO,CAAC,sBAAsB,EAAE,EAAE,uBAAuB,EAAE,EAAE,sBAAsB,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACxG,CAAC;AAED,qCAAqC;AACrC,SAAS,sBAAsB;IAC7B,MAAM,IAAI,GAAG,2BAA2B,EAAE,CAAC,GAAG,CAC5C,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,SAAS,QAAQ,CAAC,CAAC,WAAW,IAAI,CACnD,CAAC;IACF,OAAO;;;;;;EAMP,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AACpB,CAAC;AAED,sEAAsE;AACtE,SAAS,uBAAuB;IAC9B,OAAO;;;;;;;;iHAQwG,CAAC;AAClH,CAAC;AAED,0CAA0C;AAC1C,SAAS,sBAAsB;IAC7B,MAAM,IAAI,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACnC,MAAM,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClE,MAAM,QAAQ,GACZ,CAAC,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC;YAC5B,CAAC,CAAC,SAAS,CAAC,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG;YAC7F,CAAC,CAAC,EAAE,CAAC;QACT,OAAO,KAAK,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,WAAW,MAAM,QAAQ,GAAG,QAAQ,IAAI,CAAC;IACrE,CAAC,CAAC,CAAC;IACH,OAAO;;;;EAIP,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;;sHAEqG,CAAC;AACvH,CAAC"}
1
+ {"version":3,"file":"integration_guide.js","sourceRoot":"","sources":["../../../../src/context/adapters/shared/integration_guide.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAGrF;;;;;GAKG;AACH,MAAM,UAAU,yBAAyB,CAAC,MAAsB;IAC9D,OAAO;;;;EAIP,wBAAwB,CAAC,MAAM,CAAC;;EAEhC,iBAAiB,EAAE;;;;;;qBAMA,wBAAwB;CAC5C,CAAC;AACF,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,wBAAwB,CAAC,OAAuB;IAC9D,OAAO,CAAC,sBAAsB,EAAE,EAAE,uBAAuB,EAAE,EAAE,sBAAsB,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACxG,CAAC;AAED,qCAAqC;AACrC,SAAS,sBAAsB;IAC7B,MAAM,IAAI,GAAG,2BAA2B,EAAE,CAAC,GAAG,CAC5C,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,SAAS,QAAQ,CAAC,CAAC,WAAW,IAAI,CACnD,CAAC;IACF,OAAO;;;;;;EAMP,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AACpB,CAAC;AAED,sEAAsE;AACtE,SAAS,uBAAuB;IAC9B,OAAO;;;;;;;;;;;;;;;;;;6NAkBoN,CAAC;AAC9N,CAAC;AAED,0CAA0C;AAC1C,SAAS,sBAAsB;IAC7B,MAAM,IAAI,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACnC,MAAM,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClE,MAAM,QAAQ,GACZ,CAAC,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC;YAC5B,CAAC,CAAC,SAAS,CAAC,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG;YAC7F,CAAC,CAAC,EAAE,CAAC;QACT,OAAO,KAAK,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,WAAW,MAAM,QAAQ,GAAG,QAAQ,IAAI,CAAC;IACrE,CAAC,CAAC,CAAC;IACH,OAAO;;;;EAIP,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;;yMAEwL,CAAC;AAC1M,CAAC"}
@@ -26,7 +26,7 @@ export { generateWorkflowRules, generateRulesBody, getWorkflowRuleMechanismIds,
26
26
  * - TEMPLATE_OUTPUT_CHECKSUM:生成的工作流模板文本的校验和(嵌入到 @sf-checksum 注释)
27
27
  * 两者计算对象不同,必须各自独立维护。
28
28
  */
29
- const RULE_SOURCE_CHECKSUM = "1fa5e0a92e4733a7b0c0695489eddb13";
29
+ const RULE_SOURCE_CHECKSUM = "11cbd19c4985c2423bb0212e215b6b79";
30
30
  /**
31
31
  * 计算所有权威规则资产的第一行非注释内容组合的 SHA256 校验和。
32
32
  * 权威规则内容变化时校验和必然变化。