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
@@ -111,7 +111,7 @@ checks:
111
111
  - id: SEC-07
112
112
  executor: regex_pattern_scan
113
113
  rule: "禁止 ../ 路径遍历风险"
114
- severity: error
114
+ severity: warning
115
115
  check_type: deterministic
116
116
  pattern: '/\.\.[\\\/]/'
117
117
  languages: [通用]
@@ -163,22 +163,23 @@ checks:
163
163
  rule: "JWT 必须校验签名算法,禁止未校验直接 decode"
164
164
  severity: error
165
165
  check_type: deterministic
166
- pattern: '/\bjwt\.decode\s*\(/'
166
+ pattern: '/\bjwt\.decode\s*\(/i'
167
167
  languages: [通用]
168
168
  evidence_required: ["regex_pattern_scan 扫描结果(git diff 变更文件无未校验 JWT 命中)"]
169
169
  gate: build-gate
170
170
  target: "self"
171
- # —— 代码架构检查(从 design-gate 迁入,代码实现阶段归属)——
172
- - id: ARC-01
171
+ # —— 日志契约(LOG-ZH,regex 验证中文日志;原 BLD-G03 中文日志部分硬化)——
172
+ - id: LOG-ZH
173
173
  executor: regex_pattern_scan
174
- rule: "Controller 禁止包含业务逻辑(计算/校验等应下沉 Service)"
175
- severity: error
174
+ rule: "业务日志须含中文事件名(方便调试观察);命中=日志字符串无中文字符(纯英文/符号)"
175
+ severity: warning
176
176
  check_type: deterministic
177
- pattern: '/\bclass\s+\w*Controller\b[\s\S]{0,500}\b(if|for|while|calculate|compute)\s*\(/'
178
- languages: [java]
179
- evidence_required: ["regex_pattern_scan 扫描结果(git diff 变更文件无 Controller 含业务逻辑命中)"]
177
+ pattern: '/(console\.(log|info|warn|error)|logger?\.\w+)\s*\(\s*["''][^"''一-龥]*["'']/'
178
+ languages: [通用]
179
+ evidence_required: ["regex_pattern_scan 扫描结果(git diff 变更文件无纯英文日志命中)"]
180
180
  gate: build-gate
181
181
  target: "self"
182
+ # —— 代码架构检查(从 design-gate 迁入,代码实现阶段归属)——
182
183
  - id: ARC-02
183
184
  executor: regex_pattern_scan
184
185
  rule: "禁止 Entity 直接暴露给外部接口,必须用 DTO"
@@ -192,7 +193,7 @@ checks:
192
193
  - id: ARC-03
193
194
  executor: regex_pattern_scan
194
195
  rule: "写操作(save/create/update/delete)必须有 @Transactional"
195
- severity: error
196
+ severity: warning
196
197
  check_type: deterministic
197
198
  pattern: '/\.(save|insert|update|delete|remove|create)\s*\(/'
198
199
  languages: [java]
@@ -212,31 +213,183 @@ checks:
212
213
  - id: ARC-06
213
214
  executor: regex_pattern_scan
214
215
  rule: "前端 API 调用必须封装到 service 层,禁止组件内直接 fetch/axios"
215
- severity: error
216
+ severity: warning
216
217
  check_type: deterministic
217
218
  pattern: '/\b(fetch|axios)\s*\(/'
218
219
  languages: [ts]
219
220
  evidence_required: ["regex_pattern_scan 扫描结果(git diff 变更文件无组件直接 API 调用命中)"]
220
221
  gate: build-gate
221
222
  target: "self"
222
- - id: ARC-07
223
+ - id: ARC-08
223
224
  executor: regex_pattern_scan
224
- rule: "禁止 @Autowired + @Lazy 循环依赖"
225
+ rule: "Service 层禁止直接操作 HttpServletRequest/Response"
225
226
  severity: error
226
227
  check_type: deterministic
227
- pattern: '/@Autowired[\s\S]{0,50}@Lazy|@Lazy[\s\S]{0,50}@Autowired/'
228
+ pattern: '/\bHttpServletRequest\b|\bHttpServletResponse\b/'
228
229
  languages: [java]
229
- evidence_required: ["regex_pattern_scan 扫描结果(git diff 变更文件无循环依赖命中)"]
230
+ evidence_required: ["regex_pattern_scan 扫描结果(git diff 变更文件无 Service 操作 HttpServlet 命中)"]
230
231
  gate: build-gate
231
232
  target: "self"
232
- - id: ARC-08
233
+ # —— 并发安全(CON-*,从 verify/enforced.md 物理归位;gate 本就是 build-gate)——
234
+ - id: CON-01
233
235
  executor: regex_pattern_scan
234
- rule: "Service 层禁止直接操作 HttpServletRequest/Response"
236
+ rule: "共享可变状态必须有并发保护"
235
237
  severity: error
236
238
  check_type: deterministic
237
- pattern: '/\bHttpServletRequest\b|\bHttpServletResponse\b/'
239
+ pattern: '/\b(public|private|protected)\s+static\s+[\w<>,\s]*\b(HashMap|ArrayList|HashSet|LinkedList)\b/'
238
240
  languages: [java]
239
- evidence_required: ["regex_pattern_scan 扫描结果(git diff 变更文件无 Service 操作 HttpServlet 命中)"]
241
+ evidence_required: ["regex_pattern_scan 扫描结果(git diff 变更文件无未保护共享状态命中)"]
242
+ gate: build-gate
243
+ target: "self"
244
+ - id: CON-02
245
+ executor: regex_pattern_scan
246
+ rule: "分布式环境禁止使用 JVM 级锁"
247
+ severity: warning
248
+ check_type: deterministic
249
+ pattern: '/\bsynchronized\s*\(/'
250
+ languages: [java]
251
+ evidence_required: ["regex_pattern_scan 扫描结果(git diff 变更文件无 JVM 级锁误用命中)"]
252
+ gate: build-gate
253
+ target: "self"
254
+ - id: CON-03
255
+ executor: regex_pattern_scan
256
+ rule: "先查后改(如库存/计数)必须用原子操作"
257
+ severity: warning
258
+ check_type: deterministic
259
+ pattern: '/\.(findById|getById|getOne|selectById)\s*\([^)]*\)/'
260
+ languages: [java]
261
+ evidence_required: ["regex_pattern_scan 扫描结果(git diff 变更文件无非原子先查后改命中)"]
262
+ gate: build-gate
263
+ target: "self"
264
+ - id: CON-04
265
+ executor: regex_pattern_scan
266
+ rule: "禁止 @Transactional 同类内部调用导致事务失效"
267
+ severity: warning
268
+ check_type: deterministic
269
+ pattern: '/\bthis\.\w+\s*\(/'
270
+ languages: [java]
271
+ evidence_required: ["regex_pattern_scan 扫描结果(git diff 变更文件无事务自调用命中)"]
272
+ gate: build-gate
273
+ target: "self"
274
+ - id: CON-05
275
+ executor: regex_pattern_scan
276
+ rule: "事务内禁止执行外部调用(HTTP/RPC)"
277
+ severity: warning
278
+ check_type: deterministic
279
+ pattern: '/\.(getForObject|postForObject|exchange|execute)\s*\(/'
280
+ languages: [java]
281
+ evidence_required: ["regex_pattern_scan 扫描结果(git diff 变更文件无事务内外部调用命中)"]
282
+ gate: build-gate
283
+ target: "self"
284
+ - id: CON-06
285
+ executor: regex_pattern_scan
286
+ rule: "SimpleDateFormat 非线程安全,禁止作为共享成员"
287
+ severity: error
288
+ check_type: deterministic
289
+ pattern: '/\bstatic\s+[\w<>,\s]*SimpleDateFormat\b/'
290
+ languages: [java]
291
+ evidence_required: ["regex_pattern_scan 扫描结果(git diff 变更文件无 SimpleDateFormat 共享命中)"]
292
+ gate: build-gate
293
+ target: "self"
294
+ - id: CON-07
295
+ executor: regex_pattern_scan
296
+ rule: "ThreadLocal 必须清理避免内存泄漏"
297
+ severity: error
298
+ check_type: deterministic
299
+ pattern: '/\bnew\s+ThreadLocal\b/'
300
+ languages: [java]
301
+ evidence_required: ["regex_pattern_scan 扫描结果(git diff 变更文件无 ThreadLocal 未清理命中)"]
302
+ gate: build-gate
303
+ target: "self"
304
+ - id: CON-08
305
+ executor: regex_pattern_scan
306
+ rule: "HashMap/ArrayList 等禁止作为共享可变类成员"
307
+ severity: error
308
+ check_type: deterministic
309
+ pattern: '/\b(private|protected|public)\s+(?!static)[\w<>,\s]*\b(HashMap|ArrayList|HashSet|LinkedList)\s*[=;]/'
310
+ languages: [java]
311
+ evidence_required: ["regex_pattern_scan 扫描结果(git diff 变更文件无非线程安全集合成员命中)"]
312
+ gate: build-gate
313
+ target: "self"
314
+ - id: CON-09
315
+ executor: regex_pattern_scan
316
+ rule: "CompletableFuture 链必须处理异常"
317
+ severity: error
318
+ check_type: deterministic
319
+ pattern: '/\.(runAsync|supplyAsync)\s*\(/'
320
+ languages: [java]
321
+ evidence_required: ["regex_pattern_scan 扫描结果(git diff 变更文件无未处理异常命中)"]
322
+ gate: build-gate
323
+ target: "self"
324
+ - id: CON-10
325
+ executor: regex_pattern_scan
326
+ rule: "线程池必须正确配置拒绝策略"
327
+ severity: error
328
+ check_type: deterministic
329
+ pattern: '/\bnew\s+ThreadPoolExecutor\s*\(/'
330
+ languages: [java]
331
+ evidence_required: ["regex_pattern_scan 扫描结果(git diff 变更文件无未配置拒绝策略命中)"]
332
+ gate: build-gate
333
+ target: "self"
334
+ # —— API 规范(API-03~10,从 verify/enforced.md 归位;API-01/02 与 ARC-02/03 重复已删)——
335
+ - id: API-03
336
+ executor: regex_pattern_scan
337
+ rule: "接口必须有权限注解"
338
+ severity: error
339
+ check_type: deterministic
340
+ pattern: '/@(Get|Post|Put|Delete|Request)Mapping\s*\(/'
341
+ languages: [java]
342
+ evidence_required: ["regex_pattern_scan 扫描结果(git diff 变更文件无接口缺权限注解命中)"]
343
+ gate: build-gate
344
+ target: "self"
345
+ - id: API-04
346
+ executor: regex_pattern_scan
347
+ rule: "禁止硬编码分页参数,必须参数化"
348
+ severity: error
349
+ check_type: deterministic
350
+ pattern: '/\b(pageNum|pageSize)\s*=\s*\d/'
351
+ languages: [java]
352
+ evidence_required: ["regex_pattern_scan 扫描结果(git diff 变更文件无硬编码分页命中)"]
353
+ gate: build-gate
354
+ target: "self"
355
+ - id: API-06
356
+ executor: regex_pattern_scan
357
+ rule: "接口路径须符合 RESTful 规范"
358
+ severity: warning
359
+ check_type: deterministic
360
+ pattern: '/@(Get|Post|Put|Delete)Mapping\s*\(\s*[^\)]*(get|list|create|delete|update)/i'
361
+ languages: [java]
362
+ evidence_required: ["regex_pattern_scan 扫描结果(git diff 变更文件无路径违规命中)"]
363
+ gate: build-gate
364
+ target: "self"
365
+ - id: API-07
366
+ executor: regex_pattern_scan
367
+ rule: "接口必须使用统一响应包装(ApiResult/Result/R)"
368
+ severity: error
369
+ check_type: deterministic
370
+ pattern: '/\bResponseEntity\s*<\s*\w*Entity\b/'
371
+ languages: [java]
372
+ evidence_required: ["regex_pattern_scan 扫描结果(git diff 变更文件无裸返回命中)"]
373
+ gate: build-gate
374
+ target: "self"
375
+ - id: API-08
376
+ executor: regex_pattern_scan
377
+ rule: "分页接口必须返回标准分页结构"
378
+ severity: error
379
+ check_type: deterministic
380
+ pattern: '/\.(findAll|listAll)\s*\(\s*\d/'
381
+ languages: [java]
382
+ evidence_required: ["regex_pattern_scan 扫描结果(git diff 变更文件无非标准分页命中)"]
383
+ gate: build-gate
384
+ target: "self"
385
+ - id: API-09
386
+ executor: regex_pattern_scan
387
+ rule: "接口路径须含版本号"
388
+ severity: error
389
+ check_type: deterministic
390
+ pattern: '/@(Get|Post|Put|Delete|Request)Mapping\s*\(\s*"\/(?!api\/v\d)/i'
391
+ languages: [java]
392
+ evidence_required: ["regex_pattern_scan 扫描结果(git diff 变更文件无缺版本号命中)"]
240
393
  gate: build-gate
241
394
  target: "self"
242
395
  - id: BLD-G01
@@ -255,14 +408,6 @@ checks:
255
408
  evidence_required: ["lazy_pattern_detector 输出(hard_fail=0)","空函数体扫描结果(0 匹配)","空 catch 扫描结果(0 匹配)"]
256
409
  gate: build-gate
257
410
  target: "self"
258
- - id: BLD-G03
259
- executor: lazy_pattern_check
260
- rule: "变更代码必须满足中文注释与日志契约:后端类/方法有中文 Javadoc,关键业务行有中文行注释,业务日志使用中文事件名"
261
- severity: error
262
- check_type: deterministic
263
- evidence_required: ["non_chinese_comment 检测结果(须为 0)","non_chinese_log 检测结果(须为 0)"]
264
- gate: build-gate
265
- target: "self"
266
411
  - id: BLD-G04
267
412
  executor: tsc_compile
268
413
  rule: "tsc --noEmit 零错误,项目构建成功"
@@ -273,46 +418,88 @@ checks:
273
418
  target: "self"
274
419
  - id: BLD-G05
275
420
  executor: vitest_run
276
- rule: "全量测试通过,无失败用例;增量代码行覆盖率>=80%"
421
+ rule: "全量测试通过,无失败用例(vitest_run 验测试通过;覆盖率阈值非本 check 确定性覆盖,归人工/CI 把关——coverage_threshold executor 注册但未接入 build-gate)"
277
422
  severity: error
278
423
  check_type: deterministic
279
- evidence_required: ["测试报告(passed/failed/total)","覆盖率报告(增量行覆盖率数值)"]
424
+ evidence_required: ["测试报告(passed/failed/total)"]
280
425
  gate: build-gate
281
426
  target: "self"
282
- - id: BLD-G06
283
- executor: lazy_pattern_check
284
- rule: "无硬编码密钥、无未鉴权写接口、无 SQL 注入风险、依赖无高危漏洞"
427
+ # —— 超大系统 build 前研讨兜底(BLD-DELIB:开发切片计划 SLC 切片数>=5 时须有 build 研讨记录,补下限防 AI 跳过研讨;切片计划不存在或<5 跳过)——
428
+ - id: BLD-DELIB
429
+ executor: slice_deliberation_gate
430
+ rule: "超大系统(开发切片计划 SLC 切片数>=5)build 写代码前须 deliberate 研讨实现策略(研讨记录 docs/研讨记录/构建/产物-研讨记录.md 存在);切片计划不存在或切片<5 则跳过"
285
431
  severity: error
286
432
  check_type: deterministic
287
- evidence_required: ["硬编码密钥扫描结果(须为 0)","未鉴权写接口扫描结果(须为 0)","注入防护方案确认","依赖漏洞扫描报告(高危/严重须为 0)"]
433
+ evidence_required: ["docs/architecture/02-开发切片计划.md"]
434
+ gate: build-gate
435
+ target: "self"
436
+ # —— db/api 适用性兜底(③ build 兜底:design_doc 声明「适用」须产出,防 design 漏产致 build 缺地基)——
437
+ - id: BLD-DBAPI
438
+ executor: applicability_check
439
+ rule: "build 前置兜底(通用 check,所有 build verify 跑):design_doc「产物适用性声明」声明「适用」的 database_design/api_specification 须已产出(design_doc 不存在则跳过,兼容小改跳 design)"
440
+ severity: error
441
+ check_type: deterministic
442
+ evidence_required: ["数据库设计文档模版", "API接口规格文档模版"]
443
+ gate: build-gate
444
+ target: "self"
445
+ # —— 多工程结构兜底(MULTI-ENGINE-STRUCT:intent projects 每端须有 src/ + 独立 .gitignore)——
446
+ - id: MULTI-ENGINE-STRUCT
447
+ executor: multi_engine_structure_check
448
+ rule: "多工程项目(intent projects 声明)每端工程须有 src/ + 独立 .gitignore(首个切片建工程骨架);单工程跳过"
449
+ severity: error
450
+ check_type: deterministic
451
+ evidence_required: ["intent.yaml projects"]
452
+ gate: build-gate
453
+ target: "self"
454
+ # —— 测试计划结构(TESTPLAN-STRUCT,test_plan 产物结构完整性)——
455
+ - id: TESTPLAN-STRUCT
456
+ executor: document_structure
457
+ rule: "测试计划须含「测试范围」「测试条目」「环境与数据」「执行顺序」「验收标准」「完成判定」章节"
458
+ severity: warning
459
+ check_type: deterministic
460
+ required_artifact: 测试计划模版
461
+ evidence_required: ["docs/build/测试计划.md"]
462
+ gate: build-gate
463
+ target: self
464
+ # —— 产物间一致性(cross_validation:测试覆盖需求)——
465
+ - id: XVAL-TEST-REQ
466
+ executor: cross_validation
467
+ rule: "REQ-* 一致性+覆盖率"
468
+ severity: warning
469
+ check_type: deterministic
470
+ required_artifact: 测试计划模版
471
+ evidence_required: ["需求分析模版"]
472
+ gate: build-gate
473
+ target: "self"
474
+ - id: TESTPLAN-BLOCK
475
+ executor: document_structure
476
+ check_type: deterministic
477
+ severity: error
288
478
  gate: build-gate
479
+ required_artifact: 测试计划模版
480
+ rule: "测试条目章节须有表格行(反退化:禁只列前几行后省略/一句话概括代替)"
481
+ block_check:
482
+ item_pattern: '^##\s+2\.'
483
+ require_table: true
484
+ min_table_rows: 2
485
+ evidence_required: ["测试计划模版"]
289
486
  target: "self"
290
487
  ---
291
488
 
292
489
  # build-gate 强制检查清单
293
490
 
294
- 22 条确定性检查。bridge 从此文件聚合。
491
+ 48 条确定性检查(3 agent 交叉验证修复:8 过宽 regex error→warning / 删 4 形同虚设 / 加 TESTPLAN-STRUCT / SEC-12 加 Java JWT / 加 BLD-DELIB 超大系统研讨兜底 / 加 MULTI-ENGINE-STRUCT 多工程骨架兜底)。注:verify 域 ARCH-DEP(external_command 缺 command → dependency-cruiser 从未真跑、永远 fail-closed)与 ARC-05(幽灵 check:注释/guidance 引用但 enforced checks 不存在)为假覆盖,待 verify 域修(详见 verify/enforced.md)。
295
492
 
296
493
  对应工程经验:
297
- - TS-Q01
298
- - TS-Q02
299
- - TS-Q03
300
- - TS-Q04
301
- - SEC-01
302
- - SEC-02
303
- - SEC-03
304
- - SEC-04
305
- - SEC-05
306
- - SEC-06
307
- - SEC-07
308
- - SEC-08
309
- - SEC-09
310
- - SEC-10
311
- - SEC-11
312
- - SEC-12
313
- - BLD-G01
314
- - BLD-G02
315
- - BLD-G03
316
- - BLD-G04
317
- - BLD-G05
318
- - BLD-G06
494
+ - TS-Q01~04(TS 类型/相等/var)
495
+ - SEC-01~12(安全:注入/密钥/日志/重定向/路径/反序列化/SSRF/CORS/Cookie/JWT)
496
+ - ARC-01~08(架构:Controller/Entity/事务/DI/前端fetch/循环依赖/HttpServlet)
497
+ - CON-01~10(并发:共享状态/JVM锁/原子/事务自调用/ThreadLocal/线程池)—— 归位自 verify
498
+ - API-03~10(API:权限/分页/校验/RESTful/响应包装/版本号/Swagger)—— 归位自 verify
499
+ - BLD-G01/02/04/05(前置门禁/偷懒模式/tsc/vitest)
500
+ - BLD-DELIB(超大系统 build 前强制研讨实现策略:SLC≥5 须有 build 研讨记录)
501
+ - MULTI-ENGINE-STRUCT(多工程骨架兜底:intent projects 每端须有 src/ + 独立 .gitignore)
502
+ - LOG-ZH(中文日志 regex 验证;原 BLD-G03 中文日志部分硬化)
503
+ - 中文注释纪律 → guidance《注释纪律》(软,原 BLD-G03 non_chinese_comment 拆出)
504
+ - 原 BLD-G06(密钥/鉴权/注入/漏洞)已删:密钥由 SEC-04、注入由 SEC-01、漏洞由依赖扫描覆盖(重复+假声明)
505
+ - XVAL-TEST-REQ(测试↔需求覆盖)
@@ -0,0 +1,48 @@
1
+ ---
2
+ id: ka-guidance-注释纪律
3
+ kind: guidance
4
+ title: 注释纪律
5
+ sync_policy: engine_only
6
+ status: active
7
+ triggers:
8
+ - 写代码
9
+ - 实现
10
+ - 编码
11
+ - 加类
12
+ - 加方法
13
+ - 注释
14
+ - Javadoc
15
+ - 文档注释
16
+ extra:
17
+ name: comment-discipline
18
+ scope:
19
+ - '*'
20
+ products:
21
+ - '*'
22
+ type: procedure
23
+ lifecycle_status: active
24
+ version: 1.0.0
25
+ domain: build
26
+ owner_mechanism: mc-backend-pattern
27
+ ---
28
+
29
+ # 注释纪律
30
+
31
+ > 代码注释中文契约(原 BLD-G03 的 `non_chinese_comment` 部分)。
32
+ > 为何软:判"类有无 doc""doc 是否含职责边界"需 AST + 语义,regex_pattern_scan(行扫)做不到精确。硬标会假覆盖(=原 BLD-G03 的坑)。靠 guidance 注入 + AI 自觉 + 对抗审查复核。中文**日志**由硬规则 LOG-ZH 验证(regex 可判)。
33
+
34
+ ## 类必须有中文 doc
35
+ - 说明**职责 + 边界**:这个类管什么、不管什么、与谁协作
36
+
37
+ ## 方法必须有中文 doc
38
+ - **职责**(做什么)+ **边界**(不做什么)+ **入参**(含义/约束)+ **出参**(含义)+ **异常**(何时抛)
39
+
40
+ ## 重要业务行须中文行注释
41
+ - 判断 / 折中 / 绕过 / 业务规则 / 性能取舍 —— 这些"为什么这么写"的行须注释
42
+ - 显而易见的代码不需注释(避免噪音)
43
+
44
+ ## 所有注释中文
45
+ - 与代码日志中文一致
46
+
47
+ ## 关联
48
+ - [[编码纪律]] / [[证据驱动与反幻觉]]
@@ -24,6 +24,7 @@ extra:
24
24
 
25
25
  > **产物定位**:build 阶段必出。定义"测什么、怎么测、什么证据算通过"。
26
26
  > **核心纪律**:禁止假验证——E0(无运行时证据)不可接受([[证据驱动与反幻觉]] 第 5/10 条)。覆盖正常/异常/边界/权限/并发,不只 happy path。
27
+ > **反退化纪律**:每个测试条目(T-*)必须在「测试条目」表中逐行填写真实编号(REQ-*/SLC-*),禁止只列前几行后用「…」省略、禁止用一句话概括代替表格行。
27
28
 
28
29
  ## 1. 测试范围
29
30
  - 关联任务/需求:
@@ -31,12 +32,15 @@ extra:
31
32
  - 不在范围内的事项:
32
33
 
33
34
  ## 2. 测试条目
35
+
36
+ > 填**真实编号**:REQ-001(需求分析的真实 REQ)、SLC-用户-01(切片规划的真实切片)。build-gate cross_validation 校验测试↔需求的 REQ-* 一致性+覆盖率,占位符 REQ-NNN 会 fail-closed 阻断。
37
+
34
38
  | 编号 | 功能点 | 测试类型 | 覆盖策略 | 关联需求 | 关联切片 | test_phase | 优先级 | Evidence 级别 |
35
39
  |------|--------|---------|---------|---------|-----------|-----------|--------|--------------|
36
- | T-01 | 正常流程 | 集成测试 | 正常路径 | REQ-NNN | SLC-x | red→green | P0 | E1 |
37
- | T-02 | 参数缺失 | 单元测试 | 错误路径 | REQ-NNN | SLC-x | red→green | P0 | E1 |
38
- | T-03 | 权限不足 | 集成测试 | 错误路径 | REQ-NNN | SLC-x | red→green | P0 | E2 |
39
- | T-04 | 边界值 | 单元测试 | 边界场景 | REQ-NNN | SLC-x | combined | P1 | E1 |
40
+ | T-01 | 正常流程 | 集成测试 | 正常路径 | REQ-001 | SLC-用户-01 | red→green | P0 | E1 |
41
+ | T-02 | 参数缺失 | 单元测试 | 错误路径 | REQ-001 | SLC-用户-01 | red→green | P0 | E1 |
42
+ | T-03 | 权限不足 | 集成测试 | 错误路径 | REQ-002 | SLC-用户-01 | red→green | P0 | E2 |
43
+ | T-04 | 边界值 | 单元测试 | 边界场景 | REQ-001 | SLC-用户-01 | combined | P1 | E1 |
40
44
 
41
45
  > 覆盖策略必含:正常路径 / 错误路径 / 边界 / 权限 / 并发(适用时)。缺一类须说明理由。
42
46
 
@@ -69,3 +73,4 @@ extra:
69
73
  - [ ] 每条标注 Evidence 级别,无 E0
70
74
  - [ ] P0 项有验收标准且执行通过
71
75
  - [ ] 失败用例有修复或明确说明
76
+ - [ ] 测试条目表逐行填真实编号,无「…」省略、无一句话概括代替
@@ -34,6 +34,32 @@ extra:
34
34
  > 吸收旧的「编码阶段执行」「编码就绪审查」「编码质量」「切片执行纪律」「防御性编码」。
35
35
  > 基本功(命名/注释/单一职责/错误处理)见 [[工程纪律]],不重复。
36
36
 
37
+ ## 超大系统:先研讨实现策略再动手
38
+
39
+ 开发切片计划 SLC 切片数 ≥ 5(超大系统)时,build 写代码前**必须**先 `sf_work action=deliberate target=code` 与用户研讨实现策略(头脑风暴 + 第一性原理),收敛后把结论总结留痕到 `docs/研讨记录/构建/产物-研讨记录.md`,再 act 写代码。
40
+
41
+ - 此规则由 build-gate `BLD-DELIB` 确定性门禁兜底——未研讨则 build 阻断,不是软建议
42
+ - 小任务(切片 < 5 或无切片计划)不强制,正常列改动清单即可
43
+ - 研讨重点:切片实现顺序、跨切片共享代码先沉淀、风险切片先行验证
44
+
45
+ ## 工程骨架:首个切片建多工程目录(涉及多端时)
46
+
47
+ build 域第一个切片(首次 `act target=code`)时,按架构 §6.3 端清单 + intent.yaml `projects` 创建工程目录骨架——每个端一个独立工程目录(`backend/` `client-portal/` `admin-web/` `miniapp/` `shared/`),每个工程目录内建标准 `src/` + 独立 `.gitignore`(按技术栈)+ 各自构建配置(package.json/pom.xml 等)。
48
+
49
+ - 工程目录结构 = 架构 §6.3 端清单 + intent.yaml `projects`(build scope `allowed_paths` 据此放行)
50
+ - **每个工程独立 `.gitignore`**(不要只在根目录一个):前端 `node_modules/` `dist/`、Java `target/` `build/`、小程序 `miniprogram_npm/` 等
51
+ - 各工程独立构建配置(package.json/pom.xml/build.gradle),独立依赖、独立构建
52
+ - 单工程项目(纯后端 API)保持根 `src/`,不强制多工程
53
+
54
+ ## 前端骨架先行(涉及 FE-* 端时)
55
+
56
+ 涉及前端端(架构 §6.3 声明 FE-*)的项目,前端骨架切片先于业务页面:每个 FE-* 端先落地路由 / 状态管理 / API service 壳 / 认证拦截器 / 脱敏工具,再填充业务页面。
57
+
58
+ - 骨架切片须覆盖架构 §6.3 所有 FE-* 端(XVAL-SLC 校验 ARCH-*/FE-* 覆盖)
59
+ - 共享层(shared:类型/API client/工具)先于各端业务沉淀,避免散落
60
+ - 前端 API 调用封装到 service 层,禁止组件内直接 fetch/axios(build-gate ARC-06)
61
+ - Vue3/uni-app 等无内置脚手架的技术栈,配自定义模板合同(`config.scaffold.contracts`)
62
+
37
63
  ## 实现前:先列改动清单(精准修改)
38
64
 
39
65
  动手前明确([[工程执行总纲]] 精准修改):
@@ -24,6 +24,12 @@ extra:
24
24
 
25
25
  > **产物定位**:涉及前后端接口对接时产出(按需)。把接口契约先于实现定清楚,避免前端等后端。
26
26
  > **核心纪律**:契约先行([[编码纪律]]);每个 endpoint 有验收场景 + 验证证据([[证据驱动与反幻觉]])。
27
+ > **反退化纪律**:每个 endpoint 必须完整重复其全部必填结构块,禁止退化——
28
+ > - 禁止「前详后废」(前几个 endpoint 完整、后面的退化成一行文字)
29
+ > - 禁止用一行文字 `**xxx**:…` 代替表格,或省略标 `[Always]` 的必填块(基本信息/响应体字段/错误与副作用/验收场景)
30
+ > - 章节标题必须用 `###`,禁止降级为 `**粗体**`
31
+ > - 禁止「同上格式」「见上文」「…」等偷懒占位
32
+ > 任一 endpoint 缺任一必填块 = 未完成,须补齐后再推进。
27
33
  > **完成判定**:见文末,每个 endpoint 须满足。
28
34
 
29
35
  OpenAPI 权威路径: `docs/api/openapi.yaml`
@@ -96,3 +102,4 @@ OpenAPI 权威路径: `docs/api/openapi.yaml`
96
102
  - [ ] 每个验收场景有验证证据(不得为空)
97
103
  - [ ] 枚举值定义覆盖所有枚举字段
98
104
  - [ ] 涉及前端调用的接口有页面交互映射
105
+ - [ ] 每个 endpoint 都含全部必填表格块(基本信息/响应体字段/错误与副作用/验收场景),无一行文字替代、无偷懒占位