soloforge 1.2.19 → 1.3.0

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 (719) hide show
  1. package/README.md +140 -3
  2. package/dist/adapters/claude_code/claude_md.d.ts +1 -2
  3. package/dist/adapters/claude_code/claude_md.d.ts.map +1 -1
  4. package/dist/adapters/claude_code/claude_md.js +47 -4
  5. package/dist/adapters/claude_code/claude_md.js.map +1 -1
  6. package/dist/adapters/claude_code/hooks.d.ts.map +1 -1
  7. package/dist/adapters/claude_code/hooks.js +2 -1
  8. package/dist/adapters/claude_code/hooks.js.map +1 -1
  9. package/dist/adapters/claude_code/server.js +4 -3
  10. package/dist/adapters/claude_code/server.js.map +1 -1
  11. package/dist/adapters/claude_code/tools.d.ts +255 -1
  12. package/dist/adapters/claude_code/tools.d.ts.map +1 -1
  13. package/dist/adapters/claude_code/tools.js +981 -7
  14. package/dist/adapters/claude_code/tools.js.map +1 -1
  15. package/dist/adapters/codex/codex_config.d.ts.map +1 -1
  16. package/dist/adapters/codex/codex_config.js +3 -2
  17. package/dist/adapters/codex/codex_config.js.map +1 -1
  18. package/dist/adapters/codex/codex_rules.d.ts.map +1 -1
  19. package/dist/adapters/codex/codex_rules.js +2 -1
  20. package/dist/adapters/codex/codex_rules.js.map +1 -1
  21. package/dist/adapters/shared/workflow_template.d.ts.map +1 -1
  22. package/dist/adapters/shared/workflow_template.js +2 -1
  23. package/dist/adapters/shared/workflow_template.js.map +1 -1
  24. package/dist/adapters/trae/trae_config.d.ts +1 -6
  25. package/dist/adapters/trae/trae_config.d.ts.map +1 -1
  26. package/dist/adapters/trae/trae_config.js +3 -2
  27. package/dist/adapters/trae/trae_config.js.map +1 -1
  28. package/dist/adapters/trae/trae_rules.d.ts.map +1 -1
  29. package/dist/adapters/trae/trae_rules.js +2 -1
  30. package/dist/adapters/trae/trae_rules.js.map +1 -1
  31. package/dist/bin/config_commands.d.ts.map +1 -1
  32. package/dist/bin/config_commands.js +34 -33
  33. package/dist/bin/config_commands.js.map +1 -1
  34. package/dist/bin/soloforge.d.ts.map +1 -1
  35. package/dist/bin/soloforge.js +1110 -157
  36. package/dist/bin/soloforge.js.map +1 -1
  37. package/dist/engine/adapter_prompt_contract.d.ts +60 -0
  38. package/dist/engine/adapter_prompt_contract.d.ts.map +1 -0
  39. package/dist/engine/adapter_prompt_contract.js +163 -0
  40. package/dist/engine/adapter_prompt_contract.js.map +1 -0
  41. package/dist/engine/architecture_design_contract.d.ts +49 -0
  42. package/dist/engine/architecture_design_contract.d.ts.map +1 -0
  43. package/dist/engine/architecture_design_contract.js +169 -0
  44. package/dist/engine/architecture_design_contract.js.map +1 -0
  45. package/dist/engine/artifact_contract_registry.d.ts.map +1 -1
  46. package/dist/engine/artifact_contract_registry.js +7 -14
  47. package/dist/engine/artifact_contract_registry.js.map +1 -1
  48. package/dist/engine/{batch1_manifest.d.ts → asset_manifest.d.ts} +8 -8
  49. package/dist/engine/asset_manifest.d.ts.map +1 -0
  50. package/dist/engine/{batch1_manifest.js → asset_manifest.js} +52 -9
  51. package/dist/engine/asset_manifest.js.map +1 -0
  52. package/dist/engine/audit_pool.d.ts.map +1 -1
  53. package/dist/engine/audit_pool.js +6 -4
  54. package/dist/engine/audit_pool.js.map +1 -1
  55. package/dist/engine/audit_sampler.d.ts.map +1 -1
  56. package/dist/engine/audit_sampler.js +2 -1
  57. package/dist/engine/audit_sampler.js.map +1 -1
  58. package/dist/engine/audit_verifier.d.ts.map +1 -1
  59. package/dist/engine/audit_verifier.js +5 -4
  60. package/dist/engine/audit_verifier.js.map +1 -1
  61. package/dist/engine/brainstorm_contract.d.ts +46 -0
  62. package/dist/engine/brainstorm_contract.d.ts.map +1 -0
  63. package/dist/engine/brainstorm_contract.js +136 -0
  64. package/dist/engine/brainstorm_contract.js.map +1 -0
  65. package/dist/engine/capability_action_advisor.d.ts.map +1 -1
  66. package/dist/engine/capability_action_advisor.js +8 -7
  67. package/dist/engine/capability_action_advisor.js.map +1 -1
  68. package/dist/engine/capability_registry.d.ts.map +1 -1
  69. package/dist/engine/capability_registry.js +0 -7
  70. package/dist/engine/capability_registry.js.map +1 -1
  71. package/dist/engine/capability_state_store.d.ts.map +1 -1
  72. package/dist/engine/capability_state_store.js +7 -6
  73. package/dist/engine/capability_state_store.js.map +1 -1
  74. package/dist/engine/change_coordinator.d.ts.map +1 -1
  75. package/dist/engine/change_coordinator.js +4 -3
  76. package/dist/engine/change_coordinator.js.map +1 -1
  77. package/dist/engine/chinese_semantic_priority.d.ts +62 -0
  78. package/dist/engine/chinese_semantic_priority.d.ts.map +1 -0
  79. package/dist/engine/chinese_semantic_priority.js +153 -0
  80. package/dist/engine/chinese_semantic_priority.js.map +1 -0
  81. package/dist/engine/coding_readiness_gate.d.ts +46 -0
  82. package/dist/engine/coding_readiness_gate.d.ts.map +1 -0
  83. package/dist/engine/coding_readiness_gate.js +175 -0
  84. package/dist/engine/coding_readiness_gate.js.map +1 -0
  85. package/dist/engine/cognitive_anchor.d.ts.map +1 -1
  86. package/dist/engine/cognitive_anchor.js +7 -6
  87. package/dist/engine/cognitive_anchor.js.map +1 -1
  88. package/dist/engine/command_execution_contract.d.ts.map +1 -1
  89. package/dist/engine/command_execution_contract.js +13 -12
  90. package/dist/engine/command_execution_contract.js.map +1 -1
  91. package/dist/engine/confidence_scorer.d.ts.map +1 -1
  92. package/dist/engine/confidence_scorer.js +2 -1
  93. package/dist/engine/confidence_scorer.js.map +1 -1
  94. package/dist/engine/config_precedence_contract.d.ts.map +1 -1
  95. package/dist/engine/config_precedence_contract.js +9 -8
  96. package/dist/engine/config_precedence_contract.js.map +1 -1
  97. package/dist/engine/conflict_gate.d.ts.map +1 -1
  98. package/dist/engine/conflict_gate.js +4 -3
  99. package/dist/engine/conflict_gate.js.map +1 -1
  100. package/dist/engine/consumable_asset_registry.d.ts +4 -0
  101. package/dist/engine/consumable_asset_registry.d.ts.map +1 -1
  102. package/dist/engine/consumable_asset_registry.js +307 -0
  103. package/dist/engine/consumable_asset_registry.js.map +1 -1
  104. package/dist/engine/consumption_trace_store.d.ts +50 -0
  105. package/dist/engine/consumption_trace_store.d.ts.map +1 -0
  106. package/dist/engine/consumption_trace_store.js +84 -0
  107. package/dist/engine/consumption_trace_store.js.map +1 -0
  108. package/dist/engine/contract_guard.d.ts.map +1 -1
  109. package/dist/engine/contract_guard.js +7 -6
  110. package/dist/engine/contract_guard.js.map +1 -1
  111. package/dist/engine/contract_registry.d.ts +113 -0
  112. package/dist/engine/contract_registry.d.ts.map +1 -0
  113. package/dist/engine/contract_registry.js +1632 -0
  114. package/dist/engine/contract_registry.js.map +1 -0
  115. package/dist/engine/contract_state_store.d.ts +67 -0
  116. package/dist/engine/contract_state_store.d.ts.map +1 -0
  117. package/dist/engine/contract_state_store.js +167 -0
  118. package/dist/engine/contract_state_store.js.map +1 -0
  119. package/dist/engine/convention_detector.d.ts.map +1 -1
  120. package/dist/engine/convention_detector.js +4 -3
  121. package/dist/engine/convention_detector.js.map +1 -1
  122. package/dist/engine/core_engineering_principles.d.ts.map +1 -1
  123. package/dist/engine/core_engineering_principles.js +4 -14
  124. package/dist/engine/core_engineering_principles.js.map +1 -1
  125. package/dist/engine/core_experience_principle.d.ts +194 -0
  126. package/dist/engine/core_experience_principle.d.ts.map +1 -0
  127. package/dist/engine/core_experience_principle.js +349 -0
  128. package/dist/engine/core_experience_principle.js.map +1 -0
  129. package/dist/engine/debt_reporter.d.ts.map +1 -1
  130. package/dist/engine/debt_reporter.js +3 -2
  131. package/dist/engine/debt_reporter.js.map +1 -1
  132. package/dist/engine/debt_tracker.d.ts.map +1 -1
  133. package/dist/engine/debt_tracker.js +8 -7
  134. package/dist/engine/debt_tracker.js.map +1 -1
  135. package/dist/engine/debug_log.d.ts +4 -1
  136. package/dist/engine/debug_log.d.ts.map +1 -1
  137. package/dist/engine/debug_log.js +4 -6
  138. package/dist/engine/debug_log.js.map +1 -1
  139. package/dist/engine/debugger.d.ts.map +1 -1
  140. package/dist/engine/debugger.js +33 -3
  141. package/dist/engine/debugger.js.map +1 -1
  142. package/dist/engine/decision_contract.d.ts.map +1 -1
  143. package/dist/engine/decision_contract.js +4 -3
  144. package/dist/engine/decision_contract.js.map +1 -1
  145. package/dist/engine/degradation.d.ts +58 -0
  146. package/dist/engine/degradation.d.ts.map +1 -0
  147. package/dist/engine/degradation.js +74 -0
  148. package/dist/engine/degradation.js.map +1 -0
  149. package/dist/engine/delivery.d.ts.map +1 -1
  150. package/dist/engine/delivery.js +16 -15
  151. package/dist/engine/delivery.js.map +1 -1
  152. package/dist/engine/delivery_readiness.d.ts +70 -0
  153. package/dist/engine/delivery_readiness.d.ts.map +1 -0
  154. package/dist/engine/delivery_readiness.js +198 -0
  155. package/dist/engine/delivery_readiness.js.map +1 -0
  156. package/dist/engine/dependency_scanner.d.ts.map +1 -1
  157. package/dist/engine/dependency_scanner.js +6 -5
  158. package/dist/engine/dependency_scanner.js.map +1 -1
  159. package/dist/engine/deprecated_contract.d.ts +21 -0
  160. package/dist/engine/deprecated_contract.d.ts.map +1 -0
  161. package/dist/engine/deprecated_contract.js +14 -0
  162. package/dist/engine/deprecated_contract.js.map +1 -0
  163. package/dist/engine/detail_discipline.d.ts +40 -0
  164. package/dist/engine/detail_discipline.d.ts.map +1 -0
  165. package/dist/engine/detail_discipline.js +107 -0
  166. package/dist/engine/detail_discipline.js.map +1 -0
  167. package/dist/engine/developer_sovereignty.d.ts.map +1 -1
  168. package/dist/engine/developer_sovereignty.js +6 -5
  169. package/dist/engine/developer_sovereignty.js.map +1 -1
  170. package/dist/engine/diagnostic_registry.d.ts +64 -0
  171. package/dist/engine/diagnostic_registry.d.ts.map +1 -0
  172. package/dist/engine/diagnostic_registry.js +176 -0
  173. package/dist/engine/diagnostic_registry.js.map +1 -0
  174. package/dist/engine/diff_ownership.d.ts.map +1 -1
  175. package/dist/engine/diff_ownership.js +9 -8
  176. package/dist/engine/diff_ownership.js.map +1 -1
  177. package/dist/engine/diff_ownership_store.d.ts.map +1 -1
  178. package/dist/engine/diff_ownership_store.js +8 -7
  179. package/dist/engine/diff_ownership_store.js.map +1 -1
  180. package/dist/engine/documentation_governance.d.ts +55 -0
  181. package/dist/engine/documentation_governance.d.ts.map +1 -0
  182. package/dist/engine/documentation_governance.js +249 -0
  183. package/dist/engine/documentation_governance.js.map +1 -0
  184. package/dist/engine/dual_layer_mechanism_registry.d.ts +6 -4
  185. package/dist/engine/dual_layer_mechanism_registry.d.ts.map +1 -1
  186. package/dist/engine/dual_layer_mechanism_registry.js +731 -11
  187. package/dist/engine/dual_layer_mechanism_registry.js.map +1 -1
  188. package/dist/engine/enforcement_guard.d.ts +84 -0
  189. package/dist/engine/enforcement_guard.d.ts.map +1 -0
  190. package/dist/engine/enforcement_guard.js +319 -0
  191. package/dist/engine/enforcement_guard.js.map +1 -0
  192. package/dist/engine/escape_report.d.ts.map +1 -1
  193. package/dist/engine/escape_report.js +4 -3
  194. package/dist/engine/escape_report.js.map +1 -1
  195. package/dist/engine/evolution_regression_gate.d.ts +42 -0
  196. package/dist/engine/evolution_regression_gate.d.ts.map +1 -0
  197. package/dist/engine/evolution_regression_gate.js +159 -0
  198. package/dist/engine/evolution_regression_gate.js.map +1 -0
  199. package/dist/engine/existing_system_analysis.d.ts +37 -0
  200. package/dist/engine/existing_system_analysis.d.ts.map +1 -0
  201. package/dist/engine/existing_system_analysis.js +151 -0
  202. package/dist/engine/existing_system_analysis.js.map +1 -0
  203. package/dist/engine/exploration.d.ts.map +1 -1
  204. package/dist/engine/exploration.js +7 -6
  205. package/dist/engine/exploration.js.map +1 -1
  206. package/dist/engine/extension_contract.d.ts +50 -0
  207. package/dist/engine/extension_contract.d.ts.map +1 -0
  208. package/dist/engine/extension_contract.js +158 -0
  209. package/dist/engine/extension_contract.js.map +1 -0
  210. package/dist/engine/extension_platform_contracts.d.ts +712 -0
  211. package/dist/engine/extension_platform_contracts.d.ts.map +1 -0
  212. package/dist/engine/extension_platform_contracts.js +42 -0
  213. package/dist/engine/extension_platform_contracts.js.map +1 -0
  214. package/dist/engine/extension_scenario_registry.d.ts +30 -0
  215. package/dist/engine/extension_scenario_registry.d.ts.map +1 -0
  216. package/dist/engine/extension_scenario_registry.js +976 -0
  217. package/dist/engine/extension_scenario_registry.js.map +1 -0
  218. package/dist/engine/failure_classifier.d.ts.map +1 -1
  219. package/dist/engine/failure_classifier.js +9 -8
  220. package/dist/engine/failure_classifier.js.map +1 -1
  221. package/dist/engine/failure_report.d.ts +74 -0
  222. package/dist/engine/failure_report.d.ts.map +1 -0
  223. package/dist/engine/failure_report.js +143 -0
  224. package/dist/engine/failure_report.js.map +1 -0
  225. package/dist/engine/feasibility_checker.d.ts.map +1 -1
  226. package/dist/engine/feasibility_checker.js +5 -4
  227. package/dist/engine/feasibility_checker.js.map +1 -1
  228. package/dist/engine/first_principles.d.ts +35 -0
  229. package/dist/engine/first_principles.d.ts.map +1 -0
  230. package/dist/engine/first_principles.js +128 -0
  231. package/dist/engine/first_principles.js.map +1 -0
  232. package/dist/engine/{batch1_scenario_registry.d.ts → foundation_scenario_registry.d.ts} +15 -15
  233. package/dist/engine/foundation_scenario_registry.d.ts.map +1 -0
  234. package/dist/engine/{batch1_scenario_registry.js → foundation_scenario_registry.js} +22 -25
  235. package/dist/engine/foundation_scenario_registry.js.map +1 -0
  236. package/dist/engine/{batch1_scenario_runners.d.ts → foundation_scenario_runners.d.ts} +1 -1
  237. package/dist/engine/foundation_scenario_runners.d.ts.map +1 -0
  238. package/dist/engine/{batch1_scenario_runners.js → foundation_scenario_runners.js} +8 -7
  239. package/dist/engine/foundation_scenario_runners.js.map +1 -0
  240. package/dist/engine/git_deps.d.ts.map +1 -1
  241. package/dist/engine/git_deps.js +2 -1
  242. package/dist/engine/git_deps.js.map +1 -1
  243. package/dist/engine/governance_report.d.ts +9 -1
  244. package/dist/engine/governance_report.d.ts.map +1 -1
  245. package/dist/engine/governance_report.js +25 -10
  246. package/dist/engine/governance_report.js.map +1 -1
  247. package/dist/engine/impact_analyzer.d.ts.map +1 -1
  248. package/dist/engine/impact_analyzer.js +5 -4
  249. package/dist/engine/impact_analyzer.js.map +1 -1
  250. package/dist/engine/implementation_roadmap_registry.d.ts +1 -1
  251. package/dist/engine/implementation_roadmap_registry.d.ts.map +1 -1
  252. package/dist/engine/implementation_roadmap_registry.js +237 -92
  253. package/dist/engine/implementation_roadmap_registry.js.map +1 -1
  254. package/dist/engine/input_material_contract_registry.d.ts.map +1 -1
  255. package/dist/engine/input_material_contract_registry.js +4 -3
  256. package/dist/engine/input_material_contract_registry.js.map +1 -1
  257. package/dist/engine/instruction_contract.d.ts +68 -0
  258. package/dist/engine/instruction_contract.d.ts.map +1 -0
  259. package/dist/engine/instruction_contract.js +123 -0
  260. package/dist/engine/instruction_contract.js.map +1 -0
  261. package/dist/engine/intent_expander.d.ts.map +1 -1
  262. package/dist/engine/intent_expander.js +339 -1
  263. package/dist/engine/intent_expander.js.map +1 -1
  264. package/dist/engine/intent_router.d.ts +11 -2
  265. package/dist/engine/intent_router.d.ts.map +1 -1
  266. package/dist/engine/intent_router.js +121 -1
  267. package/dist/engine/intent_router.js.map +1 -1
  268. package/dist/engine/intent_signal_extractor.d.ts +3 -0
  269. package/dist/engine/intent_signal_extractor.d.ts.map +1 -1
  270. package/dist/engine/intent_signal_extractor.js +49 -0
  271. package/dist/engine/intent_signal_extractor.js.map +1 -1
  272. package/dist/engine/io_controller.d.ts.map +1 -1
  273. package/dist/engine/io_controller.js +8 -7
  274. package/dist/engine/io_controller.js.map +1 -1
  275. package/dist/engine/java_quality_guard.d.ts.map +1 -1
  276. package/dist/engine/java_quality_guard.js +5 -18
  277. package/dist/engine/java_quality_guard.js.map +1 -1
  278. package/dist/engine/job_manager.d.ts.map +1 -1
  279. package/dist/engine/job_manager.js +8 -7
  280. package/dist/engine/job_manager.js.map +1 -1
  281. package/dist/engine/knowledge_acceptance_registry.d.ts +35 -0
  282. package/dist/engine/knowledge_acceptance_registry.d.ts.map +1 -0
  283. package/dist/engine/knowledge_acceptance_registry.js +271 -0
  284. package/dist/engine/knowledge_acceptance_registry.js.map +1 -0
  285. package/dist/engine/knowledge_asset_audit.d.ts +65 -0
  286. package/dist/engine/knowledge_asset_audit.d.ts.map +1 -0
  287. package/dist/engine/knowledge_asset_audit.js +230 -0
  288. package/dist/engine/knowledge_asset_audit.js.map +1 -0
  289. package/dist/engine/knowledge_asset_consumer.d.ts +150 -0
  290. package/dist/engine/knowledge_asset_consumer.d.ts.map +1 -0
  291. package/dist/engine/knowledge_asset_consumer.js +279 -0
  292. package/dist/engine/knowledge_asset_consumer.js.map +1 -0
  293. package/dist/engine/knowledge_asset_generation_gate.d.ts +38 -0
  294. package/dist/engine/knowledge_asset_generation_gate.d.ts.map +1 -0
  295. package/dist/engine/knowledge_asset_generation_gate.js +131 -0
  296. package/dist/engine/knowledge_asset_generation_gate.js.map +1 -0
  297. package/dist/engine/knowledge_asset_migration.d.ts +117 -0
  298. package/dist/engine/knowledge_asset_migration.d.ts.map +1 -0
  299. package/dist/engine/knowledge_asset_migration.js +204 -0
  300. package/dist/engine/knowledge_asset_migration.js.map +1 -0
  301. package/dist/engine/knowledge_asset_schema.d.ts +97 -0
  302. package/dist/engine/knowledge_asset_schema.d.ts.map +1 -0
  303. package/dist/engine/knowledge_asset_schema.js +413 -0
  304. package/dist/engine/knowledge_asset_schema.js.map +1 -0
  305. package/dist/engine/knowledge_config_loader.d.ts.map +1 -1
  306. package/dist/engine/knowledge_config_loader.js +5 -4
  307. package/dist/engine/knowledge_config_loader.js.map +1 -1
  308. package/dist/engine/knowledge_consumption_snapshot.d.ts +91 -0
  309. package/dist/engine/knowledge_consumption_snapshot.d.ts.map +1 -0
  310. package/dist/engine/knowledge_consumption_snapshot.js +113 -0
  311. package/dist/engine/knowledge_consumption_snapshot.js.map +1 -0
  312. package/dist/engine/knowledge_evolution.d.ts +82 -0
  313. package/dist/engine/knowledge_evolution.d.ts.map +1 -0
  314. package/dist/engine/knowledge_evolution.js +272 -0
  315. package/dist/engine/knowledge_evolution.js.map +1 -0
  316. package/dist/engine/knowledge_lifecycle.d.ts +83 -0
  317. package/dist/engine/knowledge_lifecycle.d.ts.map +1 -0
  318. package/dist/engine/knowledge_lifecycle.js +247 -0
  319. package/dist/engine/knowledge_lifecycle.js.map +1 -0
  320. package/dist/engine/knowledge_manager.d.ts.map +1 -1
  321. package/dist/engine/knowledge_manager.js +9 -8
  322. package/dist/engine/knowledge_manager.js.map +1 -1
  323. package/dist/engine/knowledge_scenario_registry.d.ts +21 -0
  324. package/dist/engine/knowledge_scenario_registry.d.ts.map +1 -0
  325. package/dist/engine/knowledge_scenario_registry.js +337 -0
  326. package/dist/engine/knowledge_scenario_registry.js.map +1 -0
  327. package/dist/engine/knowledge_sovereignty.d.ts.map +1 -1
  328. package/dist/engine/knowledge_sovereignty.js +5 -4
  329. package/dist/engine/knowledge_sovereignty.js.map +1 -1
  330. package/dist/engine/knowledge_template_contracts.d.ts +244 -0
  331. package/dist/engine/knowledge_template_contracts.d.ts.map +1 -0
  332. package/dist/engine/knowledge_template_contracts.js +26 -0
  333. package/dist/engine/knowledge_template_contracts.js.map +1 -0
  334. package/dist/engine/language_policy.d.ts +78 -0
  335. package/dist/engine/language_policy.d.ts.map +1 -0
  336. package/dist/engine/language_policy.js +139 -0
  337. package/dist/engine/language_policy.js.map +1 -0
  338. package/dist/engine/language_policy_contract.d.ts +52 -0
  339. package/dist/engine/language_policy_contract.d.ts.map +1 -0
  340. package/dist/engine/language_policy_contract.js +78 -0
  341. package/dist/engine/language_policy_contract.js.map +1 -0
  342. package/dist/engine/llm_gateway.d.ts.map +1 -1
  343. package/dist/engine/llm_gateway.js +10 -9
  344. package/dist/engine/llm_gateway.js.map +1 -1
  345. package/dist/engine/local_docker_acceptance.d.ts +94 -0
  346. package/dist/engine/local_docker_acceptance.d.ts.map +1 -0
  347. package/dist/engine/local_docker_acceptance.js +312 -0
  348. package/dist/engine/local_docker_acceptance.js.map +1 -0
  349. package/dist/engine/logger.d.ts +64 -0
  350. package/dist/engine/logger.d.ts.map +1 -0
  351. package/dist/engine/logger.js +115 -0
  352. package/dist/engine/logger.js.map +1 -0
  353. package/dist/engine/main_path_integration_contract.d.ts.map +1 -1
  354. package/dist/engine/main_path_integration_contract.js +43 -42
  355. package/dist/engine/main_path_integration_contract.js.map +1 -1
  356. package/dist/engine/mechanism_contract_registry.d.ts.map +1 -1
  357. package/dist/engine/mechanism_contract_registry.js +448 -17
  358. package/dist/engine/mechanism_contract_registry.js.map +1 -1
  359. package/dist/engine/mechanism_family_registry.d.ts +48 -0
  360. package/dist/engine/mechanism_family_registry.d.ts.map +1 -0
  361. package/dist/engine/mechanism_family_registry.js +197 -0
  362. package/dist/engine/mechanism_family_registry.js.map +1 -0
  363. package/dist/engine/metric_governance.d.ts +51 -0
  364. package/dist/engine/metric_governance.d.ts.map +1 -0
  365. package/dist/engine/metric_governance.js +138 -0
  366. package/dist/engine/metric_governance.js.map +1 -0
  367. package/dist/engine/migration_guard.d.ts.map +1 -1
  368. package/dist/engine/migration_guard.js +6 -5
  369. package/dist/engine/migration_guard.js.map +1 -1
  370. package/dist/engine/mutation_audit.d.ts.map +1 -1
  371. package/dist/engine/mutation_audit.js +6 -5
  372. package/dist/engine/mutation_audit.js.map +1 -1
  373. package/dist/engine/observability.d.ts +11 -0
  374. package/dist/engine/observability.d.ts.map +1 -1
  375. package/dist/engine/observability.js +60 -8
  376. package/dist/engine/observability.js.map +1 -1
  377. package/dist/engine/onboarding.d.ts.map +1 -1
  378. package/dist/engine/onboarding.js +17 -16
  379. package/dist/engine/onboarding.js.map +1 -1
  380. package/dist/engine/plan_proposal_gate.d.ts +131 -0
  381. package/dist/engine/plan_proposal_gate.d.ts.map +1 -0
  382. package/dist/engine/plan_proposal_gate.js +340 -0
  383. package/dist/engine/plan_proposal_gate.js.map +1 -0
  384. package/dist/engine/platform_context.d.ts +44 -0
  385. package/dist/engine/platform_context.d.ts.map +1 -0
  386. package/dist/engine/platform_context.js +165 -0
  387. package/dist/engine/platform_context.js.map +1 -0
  388. package/dist/engine/policy_drift_detector.d.ts +20 -0
  389. package/dist/engine/policy_drift_detector.d.ts.map +1 -1
  390. package/dist/engine/policy_drift_detector.js +85 -5
  391. package/dist/engine/policy_drift_detector.js.map +1 -1
  392. package/dist/engine/regression_matrix.d.ts.map +1 -1
  393. package/dist/engine/regression_matrix.js +15 -14
  394. package/dist/engine/regression_matrix.js.map +1 -1
  395. package/dist/engine/release_compatibility.d.ts +62 -0
  396. package/dist/engine/release_compatibility.d.ts.map +1 -0
  397. package/dist/engine/release_compatibility.js +145 -0
  398. package/dist/engine/release_compatibility.js.map +1 -0
  399. package/dist/engine/release_gate.d.ts +29 -0
  400. package/dist/engine/release_gate.d.ts.map +1 -0
  401. package/dist/engine/release_gate.js +675 -0
  402. package/dist/engine/release_gate.js.map +1 -0
  403. package/dist/engine/release_gate_scenario_registry.d.ts +50 -0
  404. package/dist/engine/release_gate_scenario_registry.d.ts.map +1 -0
  405. package/dist/engine/release_gate_scenario_registry.js +514 -0
  406. package/dist/engine/release_gate_scenario_registry.js.map +1 -0
  407. package/dist/engine/release_readiness_gate.d.ts +36 -0
  408. package/dist/engine/release_readiness_gate.d.ts.map +1 -0
  409. package/dist/engine/release_readiness_gate.js +1050 -0
  410. package/dist/engine/release_readiness_gate.js.map +1 -0
  411. package/dist/engine/retention_policy.d.ts +46 -0
  412. package/dist/engine/retention_policy.d.ts.map +1 -0
  413. package/dist/engine/retention_policy.js +124 -0
  414. package/dist/engine/retention_policy.js.map +1 -0
  415. package/dist/engine/risk_sampler.d.ts.map +1 -1
  416. package/dist/engine/risk_sampler.js +4 -3
  417. package/dist/engine/risk_sampler.js.map +1 -1
  418. package/dist/engine/runtime_safety.d.ts.map +1 -1
  419. package/dist/engine/runtime_safety.js +18 -17
  420. package/dist/engine/runtime_safety.js.map +1 -1
  421. package/dist/engine/scaffolder.d.ts.map +1 -1
  422. package/dist/engine/scaffolder.js +4 -3
  423. package/dist/engine/scaffolder.js.map +1 -1
  424. package/dist/engine/scope_lease.d.ts.map +1 -1
  425. package/dist/engine/scope_lease.js +4 -3
  426. package/dist/engine/scope_lease.js.map +1 -1
  427. package/dist/engine/semantic_evidence.d.ts.map +1 -1
  428. package/dist/engine/semantic_evidence.js +4 -3
  429. package/dist/engine/semantic_evidence.js.map +1 -1
  430. package/dist/engine/state_fact_classifier.d.ts +47 -0
  431. package/dist/engine/state_fact_classifier.d.ts.map +1 -0
  432. package/dist/engine/state_fact_classifier.js +158 -0
  433. package/dist/engine/state_fact_classifier.js.map +1 -0
  434. package/dist/engine/state_update_bypass.d.ts +19 -0
  435. package/dist/engine/state_update_bypass.d.ts.map +1 -0
  436. package/dist/engine/state_update_bypass.js +17 -0
  437. package/dist/engine/state_update_bypass.js.map +1 -0
  438. package/dist/engine/task_context.d.ts +25 -3
  439. package/dist/engine/task_context.d.ts.map +1 -1
  440. package/dist/engine/task_context.js +132 -35
  441. package/dist/engine/task_context.js.map +1 -1
  442. package/dist/engine/task_planner.d.ts.map +1 -1
  443. package/dist/engine/task_planner.js +6 -5
  444. package/dist/engine/task_planner.js.map +1 -1
  445. package/dist/engine/team_awareness.d.ts.map +1 -1
  446. package/dist/engine/team_awareness.js +2 -1
  447. package/dist/engine/team_awareness.js.map +1 -1
  448. package/dist/engine/technology_decision.d.ts +38 -0
  449. package/dist/engine/technology_decision.d.ts.map +1 -0
  450. package/dist/engine/technology_decision.js +120 -0
  451. package/dist/engine/technology_decision.js.map +1 -0
  452. package/dist/engine/template_manifest_io.d.ts +47 -0
  453. package/dist/engine/template_manifest_io.d.ts.map +1 -0
  454. package/dist/engine/template_manifest_io.js +151 -0
  455. package/dist/engine/template_manifest_io.js.map +1 -0
  456. package/dist/engine/template_mechanism_auditor.d.ts.map +1 -1
  457. package/dist/engine/template_mechanism_auditor.js +5 -4
  458. package/dist/engine/template_mechanism_auditor.js.map +1 -1
  459. package/dist/engine/template_sync.d.ts +98 -0
  460. package/dist/engine/template_sync.d.ts.map +1 -0
  461. package/dist/engine/template_sync.js +355 -0
  462. package/dist/engine/template_sync.js.map +1 -0
  463. package/dist/engine/test_generator.d.ts.map +1 -1
  464. package/dist/engine/test_generator.js +5 -4
  465. package/dist/engine/test_generator.js.map +1 -1
  466. package/dist/engine/test_quality.d.ts.map +1 -1
  467. package/dist/engine/test_quality.js +5 -4
  468. package/dist/engine/test_quality.js.map +1 -1
  469. package/dist/engine/test_strategy.d.ts +58 -0
  470. package/dist/engine/test_strategy.d.ts.map +1 -0
  471. package/dist/engine/test_strategy.js +93 -0
  472. package/dist/engine/test_strategy.js.map +1 -0
  473. package/dist/engine/tool_invocation_contract_registry.d.ts.map +1 -1
  474. package/dist/engine/tool_invocation_contract_registry.js +43 -32
  475. package/dist/engine/tool_invocation_contract_registry.js.map +1 -1
  476. package/dist/engine/traceability.d.ts.map +1 -1
  477. package/dist/engine/traceability.js +6 -5
  478. package/dist/engine/traceability.js.map +1 -1
  479. package/dist/engine/user_feedback_contract.d.ts.map +1 -1
  480. package/dist/engine/user_feedback_contract.js +81 -19
  481. package/dist/engine/user_feedback_contract.js.map +1 -1
  482. package/dist/engine/user_promise.d.ts +67 -0
  483. package/dist/engine/user_promise.d.ts.map +1 -0
  484. package/dist/engine/user_promise.js +436 -0
  485. package/dist/engine/user_promise.js.map +1 -0
  486. package/dist/engine/verification_contract.d.ts +132 -0
  487. package/dist/engine/verification_contract.d.ts.map +1 -0
  488. package/dist/engine/verification_contract.js +296 -0
  489. package/dist/engine/verification_contract.js.map +1 -0
  490. package/dist/engine/verifier.d.ts +6 -10
  491. package/dist/engine/verifier.d.ts.map +1 -1
  492. package/dist/engine/verifier.js +149 -1
  493. package/dist/engine/verifier.js.map +1 -1
  494. package/dist/engine/workflow_contract_registry.d.ts.map +1 -1
  495. package/dist/engine/workflow_contract_registry.js +127 -10
  496. package/dist/engine/workflow_contract_registry.js.map +1 -1
  497. package/dist/engine/workflow_template_pack.d.ts +71 -0
  498. package/dist/engine/workflow_template_pack.d.ts.map +1 -0
  499. package/dist/engine/workflow_template_pack.js +246 -0
  500. package/dist/engine/workflow_template_pack.js.map +1 -0
  501. package/dist/engine/workspace_lease.d.ts +69 -0
  502. package/dist/engine/workspace_lease.d.ts.map +1 -0
  503. package/dist/engine/workspace_lease.js +153 -0
  504. package/dist/engine/workspace_lease.js.map +1 -0
  505. package/dist/engine/workspace_resumer.d.ts.map +1 -1
  506. package/dist/engine/workspace_resumer.js +9 -8
  507. package/dist/engine/workspace_resumer.js.map +1 -1
  508. package/dist/engine/zero_config_init.d.ts.map +1 -1
  509. package/dist/engine/zero_config_init.js +16 -15
  510. package/dist/engine/zero_config_init.js.map +1 -1
  511. package/dist/git/operations.d.ts.map +1 -1
  512. package/dist/git/operations.js +18 -17
  513. package/dist/git/operations.js.map +1 -1
  514. package/dist/index.js +10 -9
  515. package/dist/index.js.map +1 -1
  516. package/dist/knowledge/conflict_detector.d.ts.map +1 -1
  517. package/dist/knowledge/conflict_detector.js +2 -1
  518. package/dist/knowledge/conflict_detector.js.map +1 -1
  519. package/dist/knowledge/health_checker.d.ts.map +1 -1
  520. package/dist/knowledge/health_checker.js +5 -4
  521. package/dist/knowledge/health_checker.js.map +1 -1
  522. package/dist/knowledge/index_manager.js +4 -4
  523. package/dist/knowledge/index_manager.js.map +1 -1
  524. package/dist/knowledge/loader.d.ts.map +1 -1
  525. package/dist/knowledge/loader.js +20 -14
  526. package/dist/knowledge/loader.js.map +1 -1
  527. package/dist/knowledge/writer.d.ts.map +1 -1
  528. package/dist/knowledge/writer.js +7 -6
  529. package/dist/knowledge/writer.js.map +1 -1
  530. package/dist/types.d.ts +34 -2
  531. package/dist/types.d.ts.map +1 -1
  532. package/package.json +13 -4
  533. package/templates/knowledge/acceptance_templates/Bug/345/210/206/346/236/220/346/250/241/347/211/210.md +27 -3
  534. package/templates/knowledge/acceptance_templates/POC/347/273/223/350/256/272/346/250/241/347/211/210.md +27 -3
  535. package/templates/knowledge/acceptance_templates//345/211/215/347/253/257/351/241/265/351/235/242/351/252/214/346/224/266/346/270/205/345/215/225.md +30 -3
  536. package/templates/knowledge/acceptance_templates//345/216/237/345/236/213/350/257/264/346/230/216/346/250/241/347/211/210.md +31 -3
  537. package/templates/knowledge/acceptance_templates//345/220/216/347/253/257API/351/252/214/346/224/266/346/270/205/345/215/225.md +29 -3
  538. package/templates/knowledge/acceptance_templates//345/256/211/345/205/250/345/256/241/350/256/241/346/250/241/347/211/210.md +27 -3
  539. package/templates/knowledge/acceptance_templates//346/200/247/350/203/275/345/210/206/346/236/220/346/250/241/347/211/210.md +27 -3
  540. package/templates/knowledge/acceptance_templates//346/212/200/346/234/257/351/200/211/345/236/213/351/252/214/346/224/266/346/270/205/345/215/225.md +30 -3
  541. package/templates/knowledge/acceptance_templates//346/216/245/345/217/243/345/257/271/346/216/245/346/226/271/346/241/210/346/250/241/347/211/210.md +26 -3
  542. package/templates/knowledge/acceptance_templates//346/216/245/345/217/243/350/256/276/350/256/241/346/250/241/347/211/210.md +27 -3
  543. package/templates/knowledge/acceptance_templates//346/225/205/351/232/234/345/244/215/347/233/230/346/250/241/347/211/210.md +28 -3
  544. package/templates/knowledge/acceptance_templates//346/225/260/346/215/256/345/272/223/345/217/230/346/233/264/346/226/271/346/241/210/346/250/241/347/211/210.md +26 -3
  545. package/templates/knowledge/acceptance_templates//346/225/260/346/215/256/345/272/223/345/217/230/346/233/264/351/252/214/346/224/266/346/270/205/345/215/225.md +31 -3
  546. package/templates/knowledge/acceptance_templates//346/236/266/346/236/204/350/256/276/350/256/241/346/250/241/347/211/210.md +27 -3
  547. package/templates/knowledge/acceptance_templates//346/265/213/350/257/225/350/256/241/345/210/222/346/250/241/347/211/210.md +27 -3
  548. package/templates/knowledge/acceptance_templates//350/257/246/347/273/206/350/256/276/350/256/241/346/250/241/347/211/210.md +26 -3
  549. package/templates/knowledge/acceptance_templates//350/277/201/347/247/273/350/257/204/344/274/260/346/250/241/347/211/210.md +27 -3
  550. package/templates/knowledge/acceptance_templates//351/200/232/347/224/250/350/264/250/351/207/217/351/252/214/346/224/266/346/270/205/345/215/225.md +30 -3
  551. package/templates/knowledge/acceptance_templates//351/207/215/346/236/204/346/226/271/346/241/210/346/250/241/347/211/210.md +27 -3
  552. package/templates/knowledge/acceptance_templates//351/234/200/346/261/202/345/210/206/346/236/220/346/250/241/347/211/210.md +27 -3
  553. package/templates/knowledge/checklists//344/270/273/351/223/276/350/267/257/346/216/245/345/205/245/351/252/214/346/224/266/346/270/205/345/215/225.md +29 -0
  554. package/templates/knowledge/checklists//344/274/232/350/257/235/346/201/242/345/244/215.md +30 -8
  555. package/templates/knowledge/checklists//345/267/245/344/275/234/346/265/201/351/252/214/346/224/266/346/270/205/345/215/225.md +30 -0
  556. package/templates/knowledge/checklists//346/240/270/345/277/203/345/267/245/347/250/213/346/211/247/350/241/214/351/252/214/346/224/266/346/270/205/345/215/225.md +29 -0
  557. package/templates/knowledge/checklists//347/237/245/350/257/206/346/263/250/345/205/245/351/252/214/346/224/266/346/270/205/345/215/225.md +30 -0
  558. package/templates/knowledge/checklists//351/232/220/347/247/201/345/256/241/346/237/245/346/270/205/345/215/225.md +29 -0
  559. package/templates/knowledge/checklists//351/252/214/350/257/201/351/252/214/346/224/266/346/270/205/345/215/225.md +29 -0
  560. package/templates/knowledge/domain//345/244/232/347/247/237/346/210/267.md +28 -3
  561. package/templates/knowledge/domain//345/256/241/350/256/241/346/227/245/345/277/227.md +27 -3
  562. package/templates/knowledge/domain//345/257/274/345/205/245/345/257/274/345/207/272/350/247/204/345/210/231.md +30 -3
  563. package/templates/knowledge/domain//345/267/245/344/275/234/346/265/201/345/274/225/346/223/216.md +32 -3
  564. package/templates/knowledge/domain//346/212/245/350/241/250/347/273/237/350/256/241.md +31 -3
  565. package/templates/knowledge/domain//346/224/257/344/273/230/350/247/204/345/210/231.md +31 -3
  566. package/templates/knowledge/domain//346/225/260/346/215/256/346/235/203/351/231/220.md +28 -3
  567. package/templates/knowledge/domain//351/200/232/347/224/250/346/234/272/346/242/260/346/235/241/346/254/276.md +30 -3
  568. package/templates/knowledge/domain//351/200/232/347/237/245/350/247/204/345/210/231.md +31 -3
  569. package/templates/knowledge/patterns/core/Diff/345/275/222/345/261/236/350/277/275/350/270/252.md +24 -7
  570. package/templates/knowledge/patterns/core/Java/350/264/250/351/207/217/351/227/250/347/246/201.md +25 -7
  571. package/templates/knowledge/patterns/core/LLM/351/242/204/347/256/227/347/275/221/345/205/263.md +24 -7
  572. package/templates/knowledge/patterns/core//344/273/273/345/212/241/344/270/212/344/270/213/346/226/207/347/224/237/345/221/275/345/221/250/346/234/237.md +24 -7
  573. package/templates/knowledge/patterns/core//344/273/273/345/212/241/347/256/241/347/220/206/345/231/250.md +25 -7
  574. package/templates/knowledge/patterns/core//344/275/234/347/224/250/345/237/237/344/270/216/345/257/206/351/222/245/346/213/246/346/210/252.md +24 -7
  575. package/templates/knowledge/patterns/core//344/275/234/347/224/250/345/237/237/347/247/237/347/272/246.md +25 -7
  576. package/templates/knowledge/patterns/core//345/206/262/347/252/201/351/227/250/347/246/201.md +24 -7
  577. package/templates/knowledge/patterns/core//345/206/263/347/255/226/347/275/221/345/205/263.md +26 -7
  578. package/templates/knowledge/patterns/core//345/217/230/345/274/202/345/256/241/350/256/241.md +25 -7
  579. package/templates/knowledge/patterns/core//345/233/236/345/275/222/347/237/251/351/230/265.md +24 -7
  580. package/templates/knowledge/patterns/core//345/267/245/344/275/234/345/214/272/344/272/222/346/226/245/351/224/201.md +24 -7
  581. package/templates/knowledge/patterns/core//345/267/245/344/275/234/345/214/272/345/224/244/351/206/222.md +24 -7
  582. package/templates/knowledge/patterns/core//345/271/266/345/217/221/351/224/201.md +26 -7
  583. package/templates/knowledge/patterns/core//345/274/200/345/217/221/350/200/205/345/256/252/346/263/225.md +26 -7
  584. package/templates/knowledge/patterns/core//346/225/217/346/204/237/344/277/241/346/201/257/346/211/253/346/217/217.md +24 -7
  585. package/templates/knowledge/patterns/core//346/262/273/347/220/206/350/277/220/350/241/214/346/227/266/345/276/252/347/216/257.md +25 -7
  586. package/templates/knowledge/patterns/core//346/265/201/345/274/217/345/277/203/350/267/263.md +25 -7
  587. package/templates/knowledge/patterns/core//347/237/245/350/257/206/344/270/273/346/235/203.md +25 -7
  588. package/templates/knowledge/patterns/core//350/257/255/344/271/211/350/257/201/346/215/256.md +24 -7
  589. package/templates/knowledge/patterns/core//350/277/220/350/241/214/345/256/211/345/205/250/345/214/205.md +25 -7
  590. package/templates/knowledge/patterns/core//351/233/266/351/205/215/347/275/256/345/210/235/345/247/213/345/214/226.md +24 -7
  591. package/templates/knowledge/patterns/core//351/252/214/350/257/201/345/221/275/344/273/244/347/224/237/346/210/220.md +24 -7
  592. package/templates/knowledge/procedures/Schema/345/217/230/346/233/264/346/265/201/346/260/264/347/272/277.md +29 -3
  593. package/templates/knowledge/procedures//344/270/273/351/223/276/350/267/257/346/216/245/345/205/245/351/252/214/350/257/201/346/265/201/347/250/213.md +33 -0
  594. package/templates/knowledge/procedures//344/273/243/347/240/201/351/227/250/347/246/201/346/265/201/347/250/213.md +30 -3
  595. package/templates/knowledge/procedures//344/273/273/345/212/241/346/213/206/350/247/243/346/265/201/347/250/213.md +30 -3
  596. package/templates/knowledge/procedures//345/212/237/350/203/275/345/274/200/345/217/221/346/265/201/347/250/213.md +30 -3
  597. package/templates/knowledge/procedures//345/221/275/344/273/244/346/211/247/350/241/214/346/265/201/347/250/213.md +34 -0
  598. package/templates/knowledge/procedures//345/256/211/345/205/250/345/212/240/345/233/272/346/265/201/346/260/264/347/272/277.md +30 -3
  599. package/templates/knowledge/procedures//345/267/245/345/205/267/350/260/203/347/224/250/346/265/201/347/250/213.md +34 -0
  600. package/templates/knowledge/procedures//346/200/247/350/203/275/346/265/201/346/260/264/347/272/277.md +30 -3
  601. package/templates/knowledge/procedures//346/204/217/345/233/276/350/267/257/347/224/261/346/265/201/347/250/213.md +34 -0
  602. package/templates/knowledge/procedures//346/216/245/345/217/243/351/233/206/346/210/220/346/265/201/346/260/264/347/272/277.md +30 -3
  603. package/templates/knowledge/procedures//346/225/260/346/215/256/345/272/223/350/277/201/347/247/273/346/265/201/347/250/213.md +29 -3
  604. package/templates/knowledge/procedures//346/234/254/345/234/260/346/265/217/350/247/210/345/231/250/351/252/214/346/224/266/345/267/245/344/275/234/346/265/201.md +99 -0
  605. package/templates/knowledge/procedures//346/236/266/346/236/204/350/256/276/350/256/241/345/267/245/344/275/234/346/265/201.md +95 -0
  606. package/templates/knowledge/procedures//346/236/266/346/236/204/350/256/276/350/256/241/346/265/201/347/250/213.md +30 -3
  607. package/templates/knowledge/procedures//346/246/202/345/277/265/351/252/214/350/257/201/346/265/201/346/260/264/347/272/277.md +30 -3
  608. package/templates/knowledge/procedures//346/265/213/350/257/225/344/274/230/345/205/210/347/274/226/347/240/201/345/267/245/344/275/234/346/265/201.md +91 -0
  609. package/templates/knowledge/procedures//346/272/220/347/240/201/345/216/237/345/236/213/344/272/244/344/273/230/346/265/201/347/250/213.md +30 -3
  610. package/templates/knowledge/procedures//347/216/260/346/234/211/347/263/273/347/273/237/345/267/256/350/267/235/345/210/206/346/236/220/345/267/245/344/275/234/346/265/201.md +97 -0
  611. package/templates/knowledge/procedures//347/237/245/350/257/206/347/273/264/346/212/244/346/265/201/346/260/264/347/272/277.md +30 -3
  612. package/templates/knowledge/procedures//347/264/247/346/200/245/344/277/256/345/244/215/346/265/201/346/260/264/347/272/277.md +30 -3
  613. package/templates/knowledge/procedures//347/264/247/346/200/245/344/277/256/345/244/215/346/265/201/347/250/213.md +30 -3
  614. package/templates/knowledge/procedures//347/274/226/347/240/201/345/211/215/346/276/204/346/270/205/346/265/201/347/250/213.md +33 -0
  615. package/templates/knowledge/procedures//347/274/272/351/231/267/344/277/256/345/244/215/346/265/201/346/260/264/347/272/277.md +30 -3
  616. package/templates/knowledge/procedures//350/207/252/344/270/273/351/200/211/345/236/213/346/265/201/347/250/213.md +30 -3
  617. package/templates/knowledge/procedures//350/257/246/347/273/206/350/256/276/350/256/241/346/265/201/347/250/213.md +30 -3
  618. package/templates/knowledge/procedures//350/260/203/350/257/225/346/216/222/346/237/245/346/265/201/347/250/213.md +30 -3
  619. package/templates/knowledge/procedures//350/277/201/347/247/273/346/265/201/346/260/264/347/272/277.md +30 -3
  620. package/templates/knowledge/procedures//351/203/250/347/275/262/345/217/221/345/270/203/346/265/201/347/250/213.md +30 -3
  621. package/templates/knowledge/procedures//351/207/215/346/236/204/346/265/201/346/260/264/347/272/277.md +30 -3
  622. package/templates/knowledge/procedures//351/233/206/346/210/220/351/252/214/350/257/201/346/265/201/347/250/213.md +30 -3
  623. package/templates/knowledge/procedures//351/234/200/346/261/202/346/276/204/346/270/205/346/265/201/347/250/213.md +30 -3
  624. package/templates/knowledge/procedures//351/252/214/346/224/266/346/265/213/350/257/225/350/247/204/345/210/222.md +30 -3
  625. package/templates/knowledge/procedures//351/252/214/350/257/201/350/256/241/345/210/222/346/265/201/347/250/213.md +30 -3
  626. package/templates/knowledge/review_rules//344/272/244/344/273/230/345/256/214/345/244/207/346/200/247/345/256/241/346/237/245/350/247/204/345/210/231.md +24 -3
  627. package/templates/knowledge/review_rules//345/256/211/345/205/250/345/256/241/346/237/245/350/247/204/345/210/231.md +24 -3
  628. package/templates/knowledge/review_rules//345/271/266/345/217/221/345/256/241/346/237/245/350/247/204/345/210/231.md +23 -3
  629. package/templates/knowledge/review_rules//346/200/247/350/203/275/345/256/241/346/237/245/350/247/204/345/210/231.md +24 -3
  630. package/templates/knowledge/review_rules//346/216/245/345/217/243/345/245/221/347/272/246/345/256/241/346/237/245/350/247/204/345/210/231.md +23 -3
  631. package/templates/knowledge/review_rules//346/236/266/346/236/204/345/256/241/346/237/245/350/247/204/345/210/231.md +24 -3
  632. package/templates/knowledge/review_rules//350/264/250/351/207/217/345/256/241/346/237/245/350/247/204/345/210/231.md +24 -3
  633. package/templates/knowledge/rules//344/272/247/347/211/251/345/245/221/347/272/246/350/247/204/345/210/231.md +36 -0
  634. package/templates/knowledge/rules//344/273/273/345/212/241/344/270/212/344/270/213/346/226/207/347/224/237/345/221/275/345/221/250/346/234/237/350/247/204/345/210/231.md +65 -0
  635. package/templates/knowledge/rules//345/221/275/344/273/244/346/211/247/350/241/214/350/247/204/345/210/231.md +36 -0
  636. package/templates/knowledge/rules//345/267/245/344/275/234/346/265/201/345/245/221/347/272/246/350/247/204/345/210/231.md +36 -0
  637. package/templates/knowledge/rules//345/267/245/344/275/234/346/265/201/346/250/241/346/235/277/345/214/205/350/247/204/345/210/231.md +38 -0
  638. package/templates/knowledge/rules//345/267/245/345/205/267/350/260/203/347/224/250/350/247/204/345/210/231.md +36 -0
  639. package/templates/knowledge/rules//346/204/217/345/233/276/350/267/257/347/224/261/350/247/204/345/210/231.md +36 -0
  640. package/templates/knowledge/rules//346/211/247/350/241/214/345/256/210/345/215/253/350/257/204/344/274/260/350/247/204/345/210/231.md +36 -0
  641. package/templates/knowledge/rules//346/211/251/345/261/225/347/224/237/345/221/275/345/221/250/346/234/237/350/247/204/345/210/231.md +38 -0
  642. package/templates/knowledge/rules//346/212/200/346/234/257/345/206/263/347/255/226/344/270/273/346/235/203/350/247/204/345/210/231.md +64 -0
  643. package/templates/knowledge/rules//346/225/217/346/204/237/344/277/241/346/201/257/345/244/204/347/220/206/350/247/204/345/210/231.md +36 -0
  644. package/templates/knowledge/rules//346/226/275/345/267/245/346/214/207/344/273/244/345/245/221/347/272/246/350/247/204/345/210/231.md +49 -0
  645. package/templates/knowledge/rules//346/240/270/345/277/203/344/275/223/351/252/214/345/216/237/345/210/231.md +50 -0
  646. package/templates/knowledge/rules//346/240/270/345/277/203/345/267/245/347/250/213/346/211/247/350/241/214/345/216/237/345/210/231.md +35 -0
  647. package/templates/knowledge/rules//346/263/250/345/206/214/350/241/250/345/237/272/347/241/200/350/256/276/346/226/275/350/247/204/345/210/231.md +36 -0
  648. package/templates/knowledge/rules//346/274/224/350/277/233/345/233/236/345/275/222/350/247/204/345/210/231.md +51 -0
  649. package/templates/knowledge/rules//346/274/224/350/277/233/345/233/236/345/275/222/351/227/250/346/216/247/350/247/204/345/210/231.md +74 -0
  650. package/templates/knowledge/rules//347/224/250/346/210/267/345/217/215/351/246/210/345/245/221/347/272/246/350/247/204/345/210/231.md +35 -0
  651. package/templates/knowledge/rules//347/237/245/350/257/206/346/263/250/345/205/245/350/276/271/347/225/214/350/247/204/345/210/231.md +36 -0
  652. package/templates/knowledge/rules//347/237/245/350/257/206/350/265/204/344/272/247/346/262/273/347/220/206/350/247/204/345/210/231.md +61 -0
  653. package/templates/knowledge/rules//347/254/254/344/270/200/346/200/247/345/216/237/347/220/206/346/216/250/347/220/206/350/247/204/345/210/231.md +73 -0
  654. package/templates/knowledge/rules//347/273/206/350/212/202/347/272/252/345/276/213/350/247/204/345/210/231.md +67 -0
  655. package/templates/knowledge/rules//350/204/221/346/232/264/344/270/216/346/226/271/346/241/210/346/216/242/347/264/242/350/247/204/345/210/231.md +66 -0
  656. package/templates/knowledge/rules//350/256/241/345/210/222/345/211/215/347/275/256/351/227/250/350/247/204/345/210/231.md +59 -0
  657. package/templates/knowledge/rules//350/267/250/345/271/263/345/217/260/350/267/257/345/276/204/345/256/211/345/205/250/350/247/204/345/210/231.md +38 -0
  658. package/templates/knowledge/rules//350/276/223/345/205/245/346/235/220/346/226/231/345/245/221/347/272/246/350/247/204/345/210/231.md +36 -0
  659. package/templates/knowledge/rules//351/205/215/347/275/256/344/274/230/345/205/210/347/272/247/350/247/204/345/210/231.md +35 -0
  660. package/templates/knowledge/rules//351/230/262/345/255/244/345/262/233/345/256/236/347/216/260/350/247/204/345/210/231.md +36 -0
  661. package/templates/knowledge/rules//351/233/266/351/205/215/347/275/256/345/210/235/345/247/213/345/214/226/350/247/204/345/210/231.md +36 -0
  662. package/templates/knowledge/rules//351/252/214/350/257/201/345/245/221/347/272/246/350/247/204/345/210/231.md +36 -0
  663. package/templates/knowledge/templates//345/256/241/346/237/245/346/221/230/350/246/201.md +26 -7
  664. package/templates/patterns/API/350/256/276/350/256/241/350/247/204/350/214/203.md +30 -3
  665. package/templates/patterns/Docker/351/203/250/347/275/262/350/247/204/350/214/203.md +29 -3
  666. package/templates/patterns/Git/346/223/215/344/275/234/350/247/204/350/214/203.md +33 -3
  667. package/templates/patterns/N/345/212/2401/346/237/245/350/257/242/350/247/204/350/214/203.md +31 -3
  668. package/templates/patterns/React/345/210/227/350/241/250/350/241/250/346/240/274/350/247/204/350/214/203.md +30 -3
  669. package/templates/patterns/React/346/216/245/345/217/243/351/233/206/346/210/220/350/247/204/350/214/203.md +31 -3
  670. package/templates/patterns/React/347/212/266/346/200/201/347/256/241/347/220/206/350/247/204/350/214/203.md +31 -3
  671. package/templates/patterns/React/347/273/204/344/273/266/350/247/204/350/214/203.md +30 -3
  672. package/templates/patterns/React/350/241/250/345/215/225/350/247/204/350/214/203.md +30 -3
  673. package/templates/patterns/React/350/267/257/347/224/261/350/247/204/350/214/203.md +31 -3
  674. package/templates/patterns/Schema/345/205/274/345/256/271/350/247/204/350/214/203.md +30 -3
  675. package/templates/patterns/Vue/347/212/266/346/200/201/347/256/241/347/220/206/350/247/204/350/214/203.md +29 -3
  676. package/templates/patterns/Vue/347/273/204/344/273/266/350/247/204/350/214/203.md +33 -3
  677. package/templates/patterns/Vue/350/267/257/347/224/261/350/247/204/350/214/203.md +28 -3
  678. package/templates/patterns//344/272/213/344/273/266/351/251/261/345/212/250/350/247/204/350/214/203.md +32 -3
  679. package/templates/patterns//344/272/213/345/212/241/346/250/241/345/274/217/350/247/204/350/214/203.md +31 -3
  680. package/templates/patterns//344/274/230/351/233/205/345/201/234/346/234/272/350/247/204/350/214/203.md +31 -3
  681. package/templates/patterns//345/205/250/346/240/210/346/265/201/347/250/213/344/277/256/345/244/215.md +30 -3
  682. package/templates/patterns//345/210/206/351/241/265/346/237/245/350/257/242/350/247/204/350/214/203.md +34 -3
  683. package/templates/patterns//345/211/215/347/253/257/346/200/247/350/203/275/350/247/204/350/214/203.md +32 -3
  684. package/templates/patterns//345/221/275/345/220/215/350/247/204/350/214/203.md +30 -3
  685. package/templates/patterns//345/233/275/351/231/205/345/214/226/350/247/204/350/214/203.md +31 -3
  686. package/templates/patterns//345/242/236/345/210/240/346/224/271/346/237/245/350/247/204/350/214/203.md +31 -3
  687. package/templates/patterns//345/244/226/351/203/250/344/276/235/350/265/226/350/247/204/350/214/203.md +31 -3
  688. package/templates/patterns//345/245/221/347/272/246/345/205/274/345/256/271/350/247/204/350/214/203.md +28 -3
  689. package/templates/patterns//345/256/232/346/227/266/344/273/273/345/212/241/350/247/204/350/214/203.md +32 -3
  690. package/templates/patterns//345/256/236/346/227/266/346/216/250/351/200/201/350/247/204/350/214/203.md +31 -3
  691. package/templates/patterns//345/267/245/347/250/213/347/272/252/345/276/213.md +30 -3
  692. package/templates/patterns//345/271/266/345/217/221/346/216/247/345/210/266/350/247/204/350/214/203.md +34 -3
  693. package/templates/patterns//345/274/202/346/255/245/345/257/274/345/207/272/350/247/204/350/214/203.md +31 -3
  694. package/templates/patterns//346/216/245/345/217/243/345/245/221/347/272/246/350/247/204/350/214/203.md +29 -3
  695. package/templates/patterns//346/220/234/347/264/242/346/250/241/345/274/217/350/247/204/350/214/203.md +33 -3
  696. package/templates/patterns//346/225/260/346/215/256/351/232/220/347/247/201/350/247/204/350/214/203.md +34 -3
  697. package/templates/patterns//346/226/207/344/273/266/344/270/212/344/274/240/350/247/204/350/214/203.md +30 -3
  698. package/templates/patterns//346/227/240/351/232/234/347/242/215/350/247/204/350/214/203.md +30 -3
  699. package/templates/patterns//346/227/245/345/277/227/350/247/204/350/214/203.md +31 -3
  700. package/templates/patterns//346/235/203/351/231/220/350/256/244/350/257/201/350/247/204/350/214/203.md +34 -3
  701. package/templates/patterns//346/236/266/346/236/204/347/272/242/347/272/277.md +28 -3
  702. package/templates/patterns//346/265/213/350/257/225/350/264/250/351/207/217/350/247/204/350/214/203.md +30 -3
  703. package/templates/patterns//347/206/224/346/226/255/351/231/215/347/272/247/350/247/204/350/214/203.md +32 -3
  704. package/templates/patterns//347/212/266/346/200/201/346/265/201/350/275/254/350/247/204/350/214/203.md +29 -3
  705. package/templates/patterns//347/272/246/346/235/237/345/256/236/347/216/260/350/247/204/350/214/203.md +32 -3
  706. package/templates/patterns//347/274/223/345/255/230/347/255/226/347/225/245/350/247/204/350/214/203.md +31 -3
  707. package/templates/patterns//347/274/226/347/240/201/350/264/250/351/207/217/350/247/204/350/214/203.md +30 -3
  708. package/templates/patterns//347/274/272/351/231/267/347/256/241/347/220/206/350/247/204/350/214/203.md +29 -3
  709. package/templates/patterns//350/260/203/350/257/225/346/226/271/346/263/225/350/256/272.md +30 -3
  710. package/templates/patterns//350/276/223/345/205/245/346/240/241/351/252/214/350/247/204/350/214/203.md +31 -3
  711. package/templates/patterns//351/224/231/350/257/257/345/244/204/347/220/206/350/247/204/350/214/203.md +31 -3
  712. package/templates/patterns//351/224/231/350/257/257/350/276/271/347/225/214/350/247/204/350/214/203.md +33 -3
  713. package/templates/patterns//351/242/206/345/237/237/351/251/261/345/212/250/350/256/276/350/256/241/350/247/204/350/214/203.md +30 -3
  714. package/dist/engine/batch1_manifest.d.ts.map +0 -1
  715. package/dist/engine/batch1_manifest.js.map +0 -1
  716. package/dist/engine/batch1_scenario_registry.d.ts.map +0 -1
  717. package/dist/engine/batch1_scenario_registry.js.map +0 -1
  718. package/dist/engine/batch1_scenario_runners.d.ts.map +0 -1
  719. package/dist/engine/batch1_scenario_runners.js.map +0 -1
@@ -1,10 +1,11 @@
1
+ import { debug, internalWarn } from "../../engine/logger.js";
1
2
  import { z } from "zod";
2
3
  import path from "node:path";
3
4
  import fss from "node:fs";
4
5
  import crypto from "node:crypto";
5
6
  import { verifyArtifact } from "../../engine/artifact_contract_registry.js";
6
7
  import { verifyRouteDecisionContract } from "../../engine/route_decision_contract_verifier.js";
7
- import { findToolInvocationContractByName, createToolTrace, validateToolInvocation, } from "../../engine/tool_invocation_contract_registry.js";
8
+ import { findToolInvocationContractByName, createToolTrace, validateToolInvocation, hasWriteSideEffect, } from "../../engine/tool_invocation_contract_registry.js";
8
9
  function createLazy(loader) {
9
10
  let mod = { loaded: null, promise: null };
10
11
  return () => {
@@ -37,6 +38,7 @@ const lazyDebugger = createLazy(() => import("../../engine/debugger.js"));
37
38
  const lazyObservability = createLazy(() => import("../../engine/observability.js"));
38
39
  const lazyGovernance = createLazy(() => import("../../engine/governance_report.js"));
39
40
  const lazyMigration = createLazy(() => import("../../engine/migration_guard.js"));
41
+ const lazyPlanGate = createLazy(() => import("../../engine/plan_proposal_gate.js"));
40
42
  const lazyTestGen = createLazy(() => import("../../engine/test_generator.js"));
41
43
  const lazyTestQuality = createLazy(() => import("../../engine/test_quality.js"));
42
44
  const lazyDepScan = createLazy(() => import("../../engine/dependency_scanner.js"));
@@ -59,6 +61,23 @@ const lazyDualLayer = createLazy(() => import("../../engine/dual_layer_mechanism
59
61
  const lazyInputMaterial = createLazy(() => import("../../engine/input_material_contract_registry.js"));
60
62
  const lazyConfigCmd = createLazy(() => import("../../bin/config_commands.js"));
61
63
  const lazyConfigPrecedence = createLazy(() => import("../../engine/config_precedence_contract.js"));
64
+ const lazyEnforcementGuard = createLazy(() => import("../../engine/enforcement_guard.js"));
65
+ const lazyWorkspaceLease = createLazy(() => import("../../engine/workspace_lease.js"));
66
+ const lazyDeliveryReadiness = createLazy(() => import("../../engine/delivery_readiness.js"));
67
+ const lazyVerificationContract = createLazy(() => import("../../engine/verification_contract.js"));
68
+ const lazyFailureReport = createLazy(() => import("../../engine/failure_report.js"));
69
+ const lazyDegradation = createLazy(() => import("../../engine/degradation.js"));
70
+ const lazyRetentionPolicy = createLazy(() => import("../../engine/retention_policy.js"));
71
+ const lazyDiagnosticRegistry = createLazy(() => import("../../engine/diagnostic_registry.js"));
72
+ const lazyArchitectureDesign = createLazy(() => import("../../engine/architecture_design_contract.js"));
73
+ const lazyExistingSystemAnalysis = createLazy(() => import("../../engine/existing_system_analysis.js"));
74
+ const lazyCodingReadiness = createLazy(() => import("../../engine/coding_readiness_gate.js"));
75
+ const lazyLocalAcceptance = createLazy(() => import("../../engine/local_docker_acceptance.js"));
76
+ const lazyInstructionContract = createLazy(() => import("../../engine/instruction_contract.js"));
77
+ const lazyTechnologyDecision = createLazy(() => import("../../engine/technology_decision.js"));
78
+ const lazyDetailDiscipline = createLazy(() => import("../../engine/detail_discipline.js"));
79
+ const lazyFirstPrinciples = createLazy(() => import("../../engine/first_principles.js"));
80
+ const lazyBrainstormContract = createLazy(() => import("../../engine/brainstorm_contract.js"));
62
81
  // ── Zod Schema 定义 ──
63
82
  const ClassifySchema = {
64
83
  intent: z.string().describe("开发者意图描述"),
@@ -103,6 +122,19 @@ const ReviewSchema = {
103
122
  const ScaffoldSchema = {
104
123
  task_id: z.string().describe("sf_classify 返回的任务 ID(task_type 应为 scaffold)"),
105
124
  };
125
+ const RecordVerificationExecutionSchema = {
126
+ task_id: z.string().describe("任务 ID"),
127
+ plan_id: z.string().describe("关联的 VerificationPlan ID"),
128
+ execution_records: z.array(z.object({
129
+ command: z.string().describe("执行的验证命令"),
130
+ exit_code: z.number().describe("命令退出码,0 表示通过"),
131
+ stdout_hash: z.string().describe("stdout 的 SHA256 hash"),
132
+ stderr_hash: z.string().describe("stderr 的 SHA256 hash"),
133
+ started_at: z.string().describe("命令开始时间 ISO 8601"),
134
+ finished_at: z.string().describe("命令结束时间 ISO 8601"),
135
+ evidence_id: z.string().describe("执行证据 ID"),
136
+ })).describe("真实执行记录列表"),
137
+ };
106
138
  const DeliverSchema = {
107
139
  task_id: z.string().describe("任务 ID"),
108
140
  changed_files: z.array(z.string()).optional().describe("变更文件列表(不传则使用任务记录中的文件)"),
@@ -167,13 +199,524 @@ const ExploreSchema = {
167
199
  * @param server - MCP 服务器实例
168
200
  * @param deps - SoloForge 核心依赖项
169
201
  */
202
+ /**
203
+ * Plan Gate 写工具拦截 — 从 registerSafeTool 中间件提取的纯函数。
204
+ * gate 和外部测试可直接调用,无需 MCP server mock。
205
+ */
206
+ export function checkWriteToolPlanGate(params) {
207
+ if (!hasWriteSideEffect(params.sideEffects))
208
+ return { allowed: true };
209
+ if (!params.ctx || !params.ctx.plan_proposal_gate) {
210
+ return {
211
+ allowed: false,
212
+ diagnostic_code: "SF-PLAN-5001",
213
+ violation_type: "guard_blocked",
214
+ reason: `工具 ${params.toolName} 执行前缺少 Plan Proposal Gate`,
215
+ };
216
+ }
217
+ return { allowed: true };
218
+ }
219
+ /**
220
+ * 施工指令契约门 — 写操作前检查施工指令完整性。
221
+ * 问题五十八: 通过引擎模块函数真实消费。
222
+ * 调用链 1: registerInstructionIssueCandidate(无契约时创建候选 draft)
223
+ * 调用链 2: enforceInstructionBeforeImplementation → checkInstructionCompleteness → validateInstructionContract
224
+ */
225
+ export async function checkInstructionContractGate(params) {
226
+ if (!hasWriteSideEffect(params.sideEffects))
227
+ return { allowed: true };
228
+ if (!params.ctx)
229
+ return { allowed: true };
230
+ let instruction = params.ctx.instruction_contract;
231
+ const instrModule = await lazyInstructionContract();
232
+ // 无契约时消费 registerInstructionIssueCandidate — 创建 draft 候选并保存
233
+ if (!instruction && params.task_id) {
234
+ instruction = instrModule.registerInstructionIssueCandidate({
235
+ task_id: params.task_id,
236
+ description: params.toolName,
237
+ source: "auto_detected",
238
+ suggested_fields: {},
239
+ });
240
+ params.ctx.instruction_contract = instruction;
241
+ if (params.taskContextMgr) {
242
+ await params.taskContextMgr.save(params.ctx);
243
+ }
244
+ }
245
+ if (!instruction)
246
+ return { allowed: true };
247
+ // 消费 enforceInstructionBeforeImplementation(链式消费 checkInstructionCompleteness + validateInstructionContract)
248
+ const result = instrModule.enforceInstructionBeforeImplementation(instruction, params.toolName);
249
+ // Draft 状态不阻断 — 仅在 confirmed/executing/blocked 状态时强制
250
+ if (instruction.status === "draft") {
251
+ return { allowed: true, findings: result.allowed ? [] : [result.reason_zh] };
252
+ }
253
+ if (!result.allowed) {
254
+ return {
255
+ allowed: false,
256
+ diagnostic_code: result.diagnostic_code,
257
+ violation_type: "guard_blocked",
258
+ reason: result.reason_zh,
259
+ };
260
+ }
261
+ return { allowed: true };
262
+ }
263
+ /**
264
+ * 架构设计门 — 架构设计类任务膨胀前执行 reviewArchitectureDesign。
265
+ * 问题四十九: Architecture Design Contract enforcement。
266
+ */
267
+ export async function checkArchitectureDesignGate(params) {
268
+ const route = params.route;
269
+ if (route !== "artifact_generation" && route !== "analysis")
270
+ return { allowed: true };
271
+ if (!params.ctx)
272
+ return { allowed: true };
273
+ const expansion = params.ctx.expansion;
274
+ if (!expansion)
275
+ return { allowed: true };
276
+ const archModule = await lazyArchitectureDesign();
277
+ const contract = expansion.architecture_contract;
278
+ if (contract) {
279
+ const result = archModule.reviewArchitectureDesign(contract);
280
+ if (!result.passed) {
281
+ return {
282
+ allowed: false,
283
+ reason_zh: "架构设计审查未通过",
284
+ findings: result.review.missing_sections ?? ["架构设计审查失败"],
285
+ };
286
+ }
287
+ }
288
+ return { allowed: true };
289
+ }
290
+ /**
291
+ * 现有系统分析门 — 现有项目编码前必须先做分析。
292
+ * 问题五十: Existing System Analysis Contract enforcement。
293
+ */
294
+ export async function checkExistingSystemAnalysisGate(params) {
295
+ const archModule = await lazyExistingSystemAnalysis();
296
+ const context = archModule.detectProjectContext(params.hasExistingCode, params.hasPackageJson, params.hasSrcDir);
297
+ const gateResult = archModule.checkAnalysisGate(context, params.hasAnalysis, params.hasGapAnalysis);
298
+ if (!gateResult.allowed) {
299
+ return {
300
+ allowed: false,
301
+ reason_zh: gateResult.reason,
302
+ missing_analysis: gateResult.missing_analysis,
303
+ };
304
+ }
305
+ return { allowed: true };
306
+ }
307
+ /**
308
+ * 编码就绪门 — 编码前必须有测试计划 + 验收标准。
309
+ * 问题五十一: Coding Readiness / Test-First enforcement。
310
+ */
311
+ export async function checkCodingReadinessGate(params) {
312
+ if (!params.ctx)
313
+ return { allowed: true };
314
+ const readinessModule = await lazyCodingReadiness();
315
+ const contract = params.ctx.coding_readiness_contract;
316
+ if (!contract) {
317
+ return {
318
+ allowed: true,
319
+ reason_zh: "无编码就绪契约(非编码任务),放行",
320
+ };
321
+ }
322
+ const result = readinessModule.evaluateCodingReadiness(contract, false, false, false);
323
+ if (!result.allowed) {
324
+ return {
325
+ allowed: false,
326
+ reason_zh: result.reason,
327
+ missing_preconditions: result.missing_preconditions,
328
+ };
329
+ }
330
+ return { allowed: true };
331
+ }
332
+ /**
333
+ * 本地验收门 — 前端/全栈交付前必须有本地访问证据。
334
+ * 问题五十二: Local Docker / Browser Acceptance enforcement。
335
+ */
336
+ export async function checkLocalAcceptanceGate(params) {
337
+ const acceptanceModule = await lazyLocalAcceptance();
338
+ const requirement = acceptanceModule.requiresLocalAcceptance(params.hasFrontend, params.hasBackend, params.hasDockerCompose, params.hasDockerfile);
339
+ if (!requirement.required)
340
+ return { allowed: true };
341
+ if (!params.ctx) {
342
+ return {
343
+ allowed: false,
344
+ reason_zh: "需要本地验收但无任务上下文",
345
+ required_but_missing: ["local_acceptance_evidence"],
346
+ };
347
+ }
348
+ const evidence = params.ctx.local_acceptance_evidence;
349
+ if (!evidence) {
350
+ return {
351
+ allowed: false,
352
+ reason_zh: `项目需要本地验收(模式: ${requirement.run_mode})但缺少验收证据`,
353
+ required_but_missing: ["local_acceptance_evidence", "final_access_url"],
354
+ };
355
+ }
356
+ return { allowed: true };
357
+ }
358
+ // ── S4 触发判定函数 ──
359
+ // 不依赖 hasInstructionContract,基于 route + intent 风险信号判断是否需要 enforcement。
360
+ // 关键设计: 不是所有 code_change 都触发,只有 intent 含高风险/复杂信号时才触发。
361
+ // 低风险场景(skip_chat / direct_answer / 无风险信号的 code_change)不触发。
362
+ const HIGH_IMPACT_KEYWORDS = /架构|技术选型|数据库|框架|多端|跨模块|高影响|高风险|migration|技术路线|选型|rework/i;
363
+ const UNCERTAINTY_KEYWORDS = /不确定|方案选择|多选项|权衡|脑暴|brainstorm|多方案|选型|比较/i;
364
+ const DETAIL_INTENSIVE_KEYWORDS = /多步骤|复杂|跨模块|高风险|多端|分布式|微服务/i;
365
+ const LOW_RISK_ROUTES = new Set(["skip_chat", "direct_answer", "operation", "planning", "review", "source_extraction"]);
366
+ /** 技术选型/架构/数据库/框架/高影响决策 → 需 decision sovereignty gate */
367
+ export function requiresDecisionSovereignty(ctx, route) {
368
+ if (!ctx)
369
+ return false;
370
+ const routeVal = route ?? ctx.classification?.route_decision?.route ?? ctx.route_decision?.route;
371
+ if (!routeVal || LOW_RISK_ROUTES.has(routeVal))
372
+ return false;
373
+ // 所有路由都要求 intent 含高影响信号
374
+ const hasHighImpact = ctx.intent && HIGH_IMPACT_KEYWORDS.test(ctx.intent);
375
+ if (!hasHighImpact) {
376
+ // instruction_contract 的 risk/high_impact 也可作为信号
377
+ const ic = ctx.instruction_contract;
378
+ if (!ic || (!ic.risk && !ic.high_impact))
379
+ return false;
380
+ if (ic.risk !== "high" && !ic.high_impact)
381
+ return false;
382
+ }
383
+ // artifact_generation / analysis / code_change + 高影响 intent → 触发
384
+ return true;
385
+ }
386
+ /** 多步骤/不确定/高风险任务 → 需 detail discipline gate */
387
+ export function requiresDetailDiscipline(ctx, route) {
388
+ if (!ctx)
389
+ return false;
390
+ const routeVal = route ?? ctx.classification?.route_decision?.route ?? ctx.route_decision?.route;
391
+ if (!routeVal || LOW_RISK_ROUTES.has(routeVal))
392
+ return false;
393
+ // 复杂 intent 触发
394
+ const hasComplexSignals = ctx.intent && DETAIL_INTENSIVE_KEYWORDS.test(ctx.intent);
395
+ if (!hasComplexSignals) {
396
+ const ic = ctx.instruction_contract;
397
+ if (!ic || (!ic.risk && !ic.high_impact))
398
+ return false;
399
+ if (ic.risk !== "high" && !ic.high_impact)
400
+ return false;
401
+ }
402
+ return true;
403
+ }
404
+ /** 高影响任务/架构设计/复杂编码/跨模块变更 → 需 first principles gate */
405
+ export function requiresFirstPrinciples(ctx, route) {
406
+ if (!ctx)
407
+ return false;
408
+ const routeVal = route ?? ctx.classification?.route_decision?.route ?? ctx.route_decision?.route;
409
+ if (!routeVal || LOW_RISK_ROUTES.has(routeVal))
410
+ return false;
411
+ // 所有路由都要求 intent 含高影响信号
412
+ const hasHighImpact = ctx.intent && HIGH_IMPACT_KEYWORDS.test(ctx.intent);
413
+ if (!hasHighImpact) {
414
+ const ic = ctx.instruction_contract;
415
+ if (!ic || (!ic.risk && !ic.high_impact))
416
+ return false;
417
+ if (ic.risk !== "high" && !ic.high_impact)
418
+ return false;
419
+ }
420
+ return true;
421
+ }
422
+ /** 不确定项/方案选择/多选项 → 需 brainstorm gate */
423
+ export function requiresBrainstorm(ctx, route) {
424
+ if (!ctx)
425
+ return false;
426
+ const routeVal = route ?? ctx.classification?.route_decision?.route ?? ctx.route_decision?.route;
427
+ if (!routeVal || LOW_RISK_ROUTES.has(routeVal))
428
+ return false;
429
+ // 仅当 intent 含不确定性信号时才触发
430
+ const hasUncertainty = ctx.intent && UNCERTAINTY_KEYWORDS.test(ctx.intent);
431
+ if (!hasUncertainty)
432
+ return false;
433
+ if (routeVal === "analysis" || routeVal === "artifact_generation")
434
+ return true;
435
+ if (routeVal === "code_change")
436
+ return true;
437
+ const ic = ctx.instruction_contract;
438
+ if (ic && ic.uncertainty)
439
+ return true;
440
+ return false;
441
+ }
442
+ /**
443
+ * 技术选型决策门 — 高影响技术决策需用户确认。
444
+ * 问题十六: Decision Sovereignty enforcement。
445
+ * 不依赖 hasInstructionContract — 触发由 requiresDecisionSovereignty 判定。
446
+ */
447
+ export async function checkDecisionSovereigntyGate(params) {
448
+ if (!params.ctx)
449
+ return { allowed: true, not_applicable_with_reason: "无任务上下文" };
450
+ const triggered = requiresDecisionSovereignty(params.ctx, params.route);
451
+ if (!triggered) {
452
+ return { allowed: true, not_applicable_with_reason: "非高影响技术决策场景,跳过 decision sovereignty gate" };
453
+ }
454
+ const decisionContract = params.ctx.technology_decision_contract;
455
+ if (!decisionContract) {
456
+ return { allowed: false, reason_zh: "高影响技术决策场景缺 technology_decision_contract,无法执行决策主权校验" };
457
+ }
458
+ const decisionModule = await lazyTechnologyDecision();
459
+ const validation = decisionModule.validateTechnologyDecision(decisionContract);
460
+ if (!validation.valid) {
461
+ return { allowed: false, reason_zh: `技术选型决策校验失败: ${validation.violations.join("; ")}` };
462
+ }
463
+ // 有决策记录时评估执行状态
464
+ const decisionRecord = params.ctx.technology_decision_record;
465
+ if (decisionRecord) {
466
+ const evaluation = decisionModule.evaluateDecisionExecution(decisionContract, decisionRecord);
467
+ if (evaluation.requires_human_gate && !decisionContract.human_gate_evidence) {
468
+ return { allowed: false, reason_zh: "高影响技术决策需用户确认(human gate),请提供确认证据", requires_human_gate: true };
469
+ }
470
+ if (!evaluation.allowed) {
471
+ return { allowed: false, reason_zh: evaluation.reason };
472
+ }
473
+ }
474
+ else {
475
+ // 无决策记录: 契约已验证通过,但需 human_gate_evidence 确认(如有高范围决策)
476
+ if (decisionContract.human_gate_required && !decisionContract.human_gate_evidence) {
477
+ return { allowed: false, reason_zh: "高影响技术决策需用户确认(human gate),请提供确认证据", requires_human_gate: true };
478
+ }
479
+ }
480
+ return { allowed: true };
481
+ }
482
+ /**
483
+ * 细节纪律门 — 复杂任务缺关键细节维度时阻断。
484
+ * 问题二十六: Detail Discipline enforcement。
485
+ * 不依赖 hasInstructionContract — 触发由 requiresDetailDiscipline 判定。
486
+ */
487
+ export async function checkDetailDisciplineGate(params) {
488
+ if (!params.ctx)
489
+ return { allowed: true, not_applicable_with_reason: "无任务上下文" };
490
+ const triggered = requiresDetailDiscipline(params.ctx, params.route);
491
+ if (!triggered) {
492
+ return { allowed: true, not_applicable_with_reason: "非复杂/多步骤任务场景,跳过 detail discipline gate" };
493
+ }
494
+ const detailContract = params.ctx.detail_discipline_contract;
495
+ if (!detailContract) {
496
+ return { allowed: false, reason_zh: "多步骤/复杂任务缺 detail_discipline_contract,无法执行细节纪律校验" };
497
+ }
498
+ const detailModule = await lazyDetailDiscipline();
499
+ const check = detailModule.performDetailCheck(detailContract, detailContract.contract_id ?? "unknown", "implementation", params.ctx.provided_details ?? {});
500
+ if (check.blocking) {
501
+ const riskItems = detailModule.generateRiskItems(check);
502
+ const blockingLabels = riskItems.filter(r => r.severity === "blocking").map(r => r.dimension ?? r.description);
503
+ return { allowed: false, reason_zh: `任务方案缺关键细节: ${blockingLabels.join("; ")}`, missing_details: blockingLabels };
504
+ }
505
+ return { allowed: true };
506
+ }
507
+ /**
508
+ * 第一性原理门 — 高影响任务需目标/约束/本质问题/权衡。
509
+ * 问题二十七: First Principles enforcement。
510
+ * 不依赖 hasInstructionContract — 触发由 requiresFirstPrinciples 判定。
511
+ */
512
+ export async function checkFirstPrinciplesGate(params) {
513
+ if (!params.ctx)
514
+ return { allowed: true, not_applicable_with_reason: "无任务上下文" };
515
+ const triggered = requiresFirstPrinciples(params.ctx, params.route);
516
+ if (!triggered) {
517
+ return { allowed: true, not_applicable_with_reason: "非高影响任务场景,跳过 first principles gate" };
518
+ }
519
+ const fpFrame = params.ctx.first_principles_frame;
520
+ if (!fpFrame) {
521
+ return { allowed: false, reason_zh: "高影响任务缺 first_principles_frame,无法执行第一性原理校验" };
522
+ }
523
+ const fpModule = await lazyFirstPrinciples();
524
+ const validation = fpModule.validateFirstPrinciplesForHighImpact(fpFrame);
525
+ if (!validation.passed) {
526
+ return { allowed: false, reason_zh: `高影响任务缺第一性原理推理: ${validation.violations.join("; ")}`, failures: validation.violations };
527
+ }
528
+ return { allowed: true };
529
+ }
530
+ /**
531
+ * 脑暴/方案探索门 — 不确定项需多方案+推荐理由+用户确认。
532
+ * 问题四十一-brainstorm: Brainstorm Contract enforcement。
533
+ * 不依赖 hasInstructionContract — 触发由 requiresBrainstorm 判定。
534
+ */
535
+ export async function checkBrainstormGate(params) {
536
+ if (!params.ctx)
537
+ return { allowed: true, not_applicable_with_reason: "无任务上下文" };
538
+ const triggered = requiresBrainstorm(params.ctx, params.route);
539
+ if (!triggered) {
540
+ return { allowed: true, not_applicable_with_reason: "非不确定/方案选择场景,跳过 brainstorm gate" };
541
+ }
542
+ const brainstormSession = params.ctx.brainstorm_session;
543
+ if (!brainstormSession) {
544
+ return { allowed: false, reason_zh: "不确定项/方案选择缺 brainstorm_session,无法执行方案探索校验" };
545
+ }
546
+ const brainstormModule = await lazyBrainstormContract();
547
+ const validation = brainstormModule.validateBrainstormSession(brainstormSession);
548
+ if (!validation.valid) {
549
+ return { allowed: false, reason_zh: `方案探索不完整: ${validation.violations.join("; ")}`, violations: validation.violations };
550
+ }
551
+ // 脑暴推荐永远不能自动执行 — 需 Decision Sovereignty human gate
552
+ const canAutoExec = brainstormModule.canBrainstormAutoExecute(brainstormSession);
553
+ if (canAutoExec) {
554
+ return { allowed: false, reason_zh: "脑暴推荐不能绕过用户确认,需通过 Decision Sovereignty human gate" };
555
+ }
556
+ return { allowed: true };
557
+ }
558
+ /**
559
+ */
560
+ export async function assessCepAfterVerification(params) {
561
+ const cepModule = await import("../../engine/core_experience_principle.js");
562
+ const result = cepModule.evaluateCoreExperiencePrinciple({
563
+ task_id: params.task_id,
564
+ workflow_id: "sf_verify",
565
+ has_mainline_hooks: true,
566
+ has_owner_contracts: true,
567
+ natural_language_entry: true,
568
+ requires_internal_contract_knowledge: false,
569
+ user_path_steps: 3,
570
+ has_failures: params.has_failures ?? false,
571
+ hard_fail_downgraded: params.hard_fail_downgraded ?? false,
572
+ forced_heavy_process: false,
573
+ has_sufficient_evidence: params.has_verification_evidence,
574
+ output_too_long_no_summary: false,
575
+ report_only_no_repair: false,
576
+ failed_but_marked_done: params.failed_but_marked_done ?? false,
577
+ auto_repair_overreach: false,
578
+ repair_reverified: false,
579
+ outputs_raw_noise: false,
580
+ });
581
+ return {
582
+ passed: result.passed,
583
+ violations: result.violations.map((v) => ({
584
+ principle: v.principle,
585
+ severity: v.severity,
586
+ reason_zh: v.reason_zh ?? "",
587
+ required_action: v.required_action,
588
+ })),
589
+ evaluated_principles: result.evaluated_principles,
590
+ };
591
+ }
592
+ /**
593
+ * CEP 集成: 交付前 false completion 检查 — 从 sf_deliver handler 提取的真实主链路函数。
594
+ * 返回 CEP 决策(blocked/repair_reverify/allowed),由 handler 和 gate 共用。
595
+ */
596
+ export async function assessCepBeforeDelivery(params) {
597
+ const cepModule = await import("../../engine/core_experience_principle.js");
598
+ const nfcResult = cepModule.evaluateNoFalseCompletion({
599
+ verification_passed: params.verification_passed,
600
+ build_passed: params.build_passed,
601
+ browser_acceptance_passed: params.browser_acceptance_passed,
602
+ guard_passed: params.guard_passed,
603
+ evidence_sufficient: params.evidence_sufficient,
604
+ current_status: params.current_status,
605
+ });
606
+ return {
607
+ decision: nfcResult.decision,
608
+ reason_zh: nfcResult.reason_zh ?? "",
609
+ passed: nfcResult.decision === "completed",
610
+ };
611
+ }
612
+ /**
613
+ * CEP 集成: 工作流解析后评估 — 检查机制是否接入真实主链路、用户路径是否过短。
614
+ */
615
+ export async function assessCepAfterWorkflowResolve(params) {
616
+ const cepModule = await import("../../engine/core_experience_principle.js");
617
+ const result = cepModule.evaluateCoreExperiencePrinciple({
618
+ task_id: params.task_id,
619
+ workflow_id: "workflow_resolve",
620
+ has_mainline_hooks: params.workflow_resolved,
621
+ has_owner_contracts: params.workflow_resolved,
622
+ natural_language_entry: true,
623
+ requires_internal_contract_knowledge: false,
624
+ user_path_steps: 3,
625
+ has_failures: !params.workflow_resolved,
626
+ hard_fail_downgraded: false,
627
+ forced_heavy_process: false,
628
+ has_sufficient_evidence: params.workflow_resolved,
629
+ output_too_long_no_summary: false,
630
+ report_only_no_repair: false,
631
+ failed_but_marked_done: false,
632
+ auto_repair_overreach: false,
633
+ repair_reverified: false,
634
+ outputs_raw_noise: false,
635
+ });
636
+ return {
637
+ passed: result.passed,
638
+ violations: result.violations.map((v) => ({
639
+ principle: v.principle,
640
+ severity: v.severity,
641
+ reason_zh: v.reason_zh ?? "",
642
+ })),
643
+ evaluated_principles: result.evaluated_principles,
644
+ };
645
+ }
646
+ /**
647
+ * CEP 集成: 护栏评估后检查 — 硬规则是否被降级、低风险是否过重。
648
+ */
649
+ export async function assessCepAfterGuardEvaluation(params) {
650
+ const cepModule = await import("../../engine/core_experience_principle.js");
651
+ const result = cepModule.evaluateCoreExperiencePrinciple({
652
+ task_id: params.task_id,
653
+ workflow_id: "guard_evaluation",
654
+ has_mainline_hooks: true,
655
+ has_owner_contracts: true,
656
+ natural_language_entry: true,
657
+ requires_internal_contract_knowledge: false,
658
+ user_path_steps: 3,
659
+ has_failures: !params.guard_passed,
660
+ hard_fail_downgraded: params.hard_fail_downgraded,
661
+ forced_heavy_process: params.is_low_risk && !params.guard_passed,
662
+ has_sufficient_evidence: params.guard_passed,
663
+ output_too_long_no_summary: false,
664
+ report_only_no_repair: false,
665
+ failed_but_marked_done: false,
666
+ auto_repair_overreach: false,
667
+ repair_reverified: false,
668
+ outputs_raw_noise: false,
669
+ });
670
+ return {
671
+ passed: result.passed,
672
+ violations: result.violations.map((v) => ({
673
+ principle: v.principle,
674
+ severity: v.severity,
675
+ reason_zh: v.reason_zh ?? "",
676
+ })),
677
+ evaluated_principles: result.evaluated_principles,
678
+ };
679
+ }
680
+ /**
681
+ * CEP 集成: 修复重验证决策 — 检查是否假完成、是否进入正确修复路径。
682
+ */
683
+ export async function assessCepForRepairReverify(params) {
684
+ const cepModule = await import("../../engine/core_experience_principle.js");
685
+ const nfcResult = cepModule.evaluateNoFalseCompletion({
686
+ verification_passed: params.verification_passed,
687
+ build_passed: params.build_passed,
688
+ browser_acceptance_passed: true,
689
+ guard_passed: true,
690
+ evidence_sufficient: params.evidence_sufficient,
691
+ current_status: params.current_status,
692
+ });
693
+ return {
694
+ decision: nfcResult.decision,
695
+ reason_zh: nfcResult.reason_zh ?? "",
696
+ passed: nfcResult.decision === "completed",
697
+ };
698
+ }
699
+ /**
700
+ * CEP 集成: 用户反馈输出质量 — 检查结论优先、摘要清晰、不隐藏失败、中文语义。
701
+ */
702
+ export async function assessCepForUserFeedback(params) {
703
+ const cepModule = await import("../../engine/core_experience_principle.js");
704
+ return cepModule.evaluateUserVisibleOutput({
705
+ has_conclusion_first: params.has_conclusion_first,
706
+ has_clear_summary: params.has_clear_summary,
707
+ has_actionable_next_step: params.has_actionable_next_step,
708
+ exposes_internal_noise: params.exposes_internal_noise,
709
+ hides_critical_failure: params.hides_critical_failure,
710
+ chinese_semantic_first: params.chinese_semantic_first,
711
+ });
712
+ }
170
713
  /**
171
714
  * 注册所有 MCP 工具到服务器实例。
172
715
  * @param server - McpServer 实例
173
716
  * @param deps - 工具依赖项(配置、知识索引、任务上下文)
174
717
  */
175
718
  export async function registerTools(server, deps) {
176
- console.error("[soloForge] 工具注册: 开始注册 MCP 工具...");
719
+ debug("工具注册", "开始注册 MCP 工具...");
177
720
  const { config, knowledgeIndex, taskContext } = deps;
178
721
  const projectPath = config._projectPath || process.cwd();
179
722
  // H1: LLM Gateway — Token 预算熔断,防止单任务 Token 超支
@@ -198,11 +741,13 @@ export async function registerTools(server, deps) {
198
741
  /** State precheck: validate task status before contract guard */
199
742
  const STATE_PRECHECKS = {
200
743
  sf_verify: ["executing", "retrying"],
744
+ sf_record_verification_execution: ["verifying", "executing"],
201
745
  sf_learn: ["verifying", "executing"],
202
746
  sf_expand: ["classifying", "expanding", "clarifying"],
203
747
  };
204
748
  const STATE_ERROR_LABELS = {
205
749
  sf_verify: "不可验证",
750
+ sf_record_verification_execution: "不可录入验证结果",
206
751
  sf_learn: "不可学习",
207
752
  sf_expand: "不可膨胀",
208
753
  };
@@ -326,6 +871,91 @@ export async function registerTools(server, deps) {
326
871
  // read_only_bypass 的旁路处理
327
872
  const bypass = effectiveCategory === "read_only_bypass"
328
873
  ? { allowed: true, reason: "read_only" } : undefined;
874
+ // 计划前置门: 在合同验证之前检查 — 写工具必须有 plan_proposal_gate
875
+ const hasWriteEffect = hasWriteSideEffect(effectiveSideEffects);
876
+ if (hasWriteEffect && taskId) {
877
+ const pgResult = checkWriteToolPlanGate({ ctx, toolName: name, sideEffects: effectiveSideEffects });
878
+ if (!pgResult.allowed) {
879
+ const planViolation = {
880
+ invocation_id: invocationId, tool_name: name,
881
+ violation_type: "guard_blocked", severity: "hard_fail",
882
+ reason: pgResult.reason ?? "执行前缺少 Plan Proposal Gate",
883
+ recovery: "先调用 sf_classify → sf_expand → 设置 plan_proposal_gate 后再执行此工具",
884
+ };
885
+ const blockedTrace = createToolTrace({
886
+ tool_name: name, invocation_id: invocationId, task_id: taskId,
887
+ actual_side_effects: effectiveSideEffects,
888
+ next_allowed_tools: contract.default_next_tools,
889
+ forbidden_tools: contract.forbidden_next_tools,
890
+ authorization, bypass,
891
+ });
892
+ await taskContext.setToolTrace(taskId, blockedTrace, [planViolation]);
893
+ return {
894
+ content: [{ type: "text", text: JSON.stringify({
895
+ error: planViolation.reason,
896
+ violation: planViolation,
897
+ diagnostic_code: pgResult.diagnostic_code ?? "SF-PLAN-5001",
898
+ recovery: planViolation.recovery,
899
+ }) }],
900
+ isError: true,
901
+ };
902
+ }
903
+ const planGateCheck = taskContext.checkPlanGateBeforeWrite(ctx);
904
+ if (!planGateCheck.allowed) {
905
+ const planViolation = {
906
+ invocation_id: invocationId, tool_name: name,
907
+ violation_type: "guard_blocked", severity: "hard_fail",
908
+ reason: planGateCheck.reason_zh,
909
+ recovery: "请先通过 PlanProposalFirstGate 生成并确认执行计划",
910
+ };
911
+ const blockedTrace = createToolTrace({
912
+ tool_name: name, invocation_id: invocationId, task_id: taskId,
913
+ actual_side_effects: effectiveSideEffects,
914
+ next_allowed_tools: contract.default_next_tools,
915
+ forbidden_tools: contract.forbidden_next_tools,
916
+ authorization, bypass,
917
+ });
918
+ await taskContext.setToolTrace(taskId, blockedTrace, [planViolation]);
919
+ return {
920
+ content: [{ type: "text", text: JSON.stringify({
921
+ error: planViolation.reason,
922
+ violation: planViolation,
923
+ diagnostic_code: "SF-PLAN-5001",
924
+ recovery: planViolation.recovery,
925
+ }) }],
926
+ isError: true,
927
+ };
928
+ }
929
+ }
930
+ // 施工指令契约门: 写操作前检查 instruction_contract 状态
931
+ if (hasWriteEffect && taskId) {
932
+ const instrResult = await checkInstructionContractGate({ ctx, toolName: name, sideEffects: effectiveSideEffects, task_id: taskId, taskContextMgr: taskContext });
933
+ if (!instrResult.allowed) {
934
+ const instrViolation = {
935
+ invocation_id: invocationId, tool_name: name,
936
+ violation_type: "guard_blocked", severity: "hard_fail",
937
+ reason: instrResult.reason ?? "施工指令未就绪",
938
+ recovery: "请先完善施工指令(目标、范围、非目标、落点、验收标准、禁止绕过项)",
939
+ };
940
+ const instrTrace = createToolTrace({
941
+ tool_name: name, invocation_id: invocationId, task_id: taskId,
942
+ actual_side_effects: effectiveSideEffects,
943
+ next_allowed_tools: contract.default_next_tools,
944
+ forbidden_tools: contract.forbidden_next_tools,
945
+ authorization, bypass,
946
+ });
947
+ await taskContext.setToolTrace(taskId, instrTrace, [instrViolation]);
948
+ return {
949
+ content: [{ type: "text", text: JSON.stringify({
950
+ error: instrViolation.reason,
951
+ violation: instrViolation,
952
+ diagnostic_code: instrResult.diagnostic_code ?? "SF-INSTR-5801",
953
+ recovery: instrViolation.recovery,
954
+ }) }],
955
+ isError: true,
956
+ };
957
+ }
958
+ }
329
959
  // 合同验证
330
960
  const lastTrace = ctx?.last_tool_trace;
331
961
  // 为动态工具构建有效的合同覆盖(如 sf_status cancel)
@@ -445,7 +1075,7 @@ export async function registerTools(server, deps) {
445
1075
  }
446
1076
  // 加载认知锚点上下文 — 必须提供相关性参数,禁止全量加载
447
1077
  async function loadRelevantAnchors(query) {
448
- console.error("[soloForge] 工具注册: 加载认知锚点");
1078
+ debug("工具注册", "加载认知锚点");
449
1079
  return _loadRelevantAnchorsInner(query);
450
1080
  }
451
1081
  async function _loadRelevantAnchorsInner(query) {
@@ -499,7 +1129,7 @@ export async function registerTools(server, deps) {
499
1129
  stale_anchor: a.stale_anchor,
500
1130
  }));
501
1131
  }
502
- console.error("[soloForge] 工具注册: 批量注册核心/辅助/知识维护工具...");
1132
+ debug("工具注册", "批量注册核心/辅助/知识维护工具...");
503
1133
  // ── sf_classify: 意图分类入口,创建任务上下文并返回分类结果 ──
504
1134
  registerSafeTool("sf_classify", "分析开发者意图,返回任务类型、风险、复杂度和执行策略", ClassifySchema, async (args) => {
505
1135
  // 检查是否存在进行中的任务
@@ -617,6 +1247,101 @@ export async function registerTools(server, deps) {
617
1247
  gateway.endTask();
618
1248
  }
619
1249
  expansion.task_id = args.task_id;
1250
+ // 问题四十九/五十: 架构设计 Contract + 现有系统分析门 — 仅在有施工指令契约时强制执行
1251
+ const expansionRoute = expansion.workflow_trace
1252
+ ? expansion.workflow_trace?.route
1253
+ : undefined;
1254
+ const hasInstructionContract = !!ctx?.instruction_contract;
1255
+ if (hasInstructionContract) {
1256
+ if (expansionRoute === "artifact_generation" || expansionRoute === "analysis") {
1257
+ const archGate = await checkArchitectureDesignGate({ ctx, route: expansionRoute });
1258
+ if (!archGate.allowed) {
1259
+ return {
1260
+ result: {
1261
+ error: archGate.reason_zh,
1262
+ architecture_gate_findings: archGate.findings,
1263
+ status: "blocked",
1264
+ recovery: "架构设计审查未通过,请补充缺失项后重新 sf_expand",
1265
+ },
1266
+ };
1267
+ }
1268
+ }
1269
+ if (expansionRoute === "code_change" || expansionRoute === "artifact_generation") {
1270
+ const analysisGate = await checkExistingSystemAnalysisGate({
1271
+ hasExistingCode: !!config?.tech_stack,
1272
+ hasPackageJson: !!projectPath,
1273
+ hasSrcDir: true,
1274
+ hasAnalysis: !!ctx.existing_system_analysis,
1275
+ hasGapAnalysis: !!ctx.requirement_gap_analysis,
1276
+ });
1277
+ if (!analysisGate.allowed) {
1278
+ return {
1279
+ result: {
1280
+ error: `现有系统分析门禁未通过: ${analysisGate.reason_zh}`,
1281
+ missing_analysis: analysisGate.missing_analysis,
1282
+ status: "blocked",
1283
+ recovery: "请先对现有项目执行系统分析和差距分析,再继续架构设计或编码",
1284
+ },
1285
+ };
1286
+ }
1287
+ }
1288
+ }
1289
+ // ── S4 gates: 独立于 hasInstructionContract,由 requires* 触发判定 ──
1290
+ // 问题十六: 技术选型决策主权 gate — 高影响技术决策缺证据时 blocked
1291
+ {
1292
+ const decisionGate = await checkDecisionSovereigntyGate({ ctx, route: expansionRoute });
1293
+ if (!decisionGate.allowed) {
1294
+ return {
1295
+ result: {
1296
+ error: decisionGate.reason_zh,
1297
+ status: "blocked",
1298
+ recovery: decisionGate.requires_human_gate ? "请提供技术决策确认证据(human_gate_evidence)" : "技术选型决策校验失败,请提供 technology_decision_contract",
1299
+ },
1300
+ };
1301
+ }
1302
+ }
1303
+ // 问题二十六: 细节纪律 gate — 复杂任务缺关键细节时 blocked
1304
+ {
1305
+ const detailGate = await checkDetailDisciplineGate({ ctx, route: expansionRoute });
1306
+ if (!detailGate.allowed) {
1307
+ return {
1308
+ result: {
1309
+ error: detailGate.reason_zh,
1310
+ missing_details: detailGate.missing_details,
1311
+ status: "blocked",
1312
+ recovery: "多步骤/复杂任务缺 detail_discipline_contract,请提供后重新 sf_expand",
1313
+ },
1314
+ };
1315
+ }
1316
+ }
1317
+ // 问题二十七: 第一性原理 gate — 高影响任务缺推理时 blocked
1318
+ {
1319
+ const fpGate = await checkFirstPrinciplesGate({ ctx, route: expansionRoute });
1320
+ if (!fpGate.allowed) {
1321
+ return {
1322
+ result: {
1323
+ error: fpGate.reason_zh,
1324
+ failures: fpGate.failures,
1325
+ status: "blocked",
1326
+ recovery: "高影响任务缺 first_principles_frame,请提供后重新 sf_expand",
1327
+ },
1328
+ };
1329
+ }
1330
+ }
1331
+ // 问题四十一(brainstorm): 脑暴契约 gate — 不确定项缺方案探索时 blocked
1332
+ {
1333
+ const brainstormGate = await checkBrainstormGate({ ctx, route: expansionRoute });
1334
+ if (!brainstormGate.allowed) {
1335
+ return {
1336
+ result: {
1337
+ error: brainstormGate.reason_zh,
1338
+ violations: brainstormGate.violations,
1339
+ status: "blocked",
1340
+ recovery: "不确定项/方案选择缺 brainstorm_session,请提供后重新 sf_expand",
1341
+ },
1342
+ };
1343
+ }
1344
+ }
620
1345
  // Input Material Contract: 处理 hard-blocking 结果
621
1346
  // Privacy Gate: 隐私/敏感信息策略阻断
622
1347
  const isBlocked = expansion.prompt.startsWith("## 阻塞:输入材料禁止读取")
@@ -740,6 +1465,23 @@ export async function registerTools(server, deps) {
740
1465
  : undefined;
741
1466
  const verifyResult = (await lazyVerifier()).generateVerifyCommands(config, args.changed_files, acceptanceItems, ctx?.expansion?.workflow_trace?.route);
742
1467
  verifyResult.task_id = args.task_id;
1468
+ // 创建 VerificationPlan(plan_only,非执行结果)
1469
+ const vcModule = await lazyVerificationContract();
1470
+ const allCommands = [
1471
+ ...(verifyResult.checks?.build ?? []),
1472
+ ...(verifyResult.checks?.tests ?? []),
1473
+ ].map((c) => c.command);
1474
+ const vPlan = vcModule.createVerificationPlan(args.task_id, allCommands, acceptanceItems.map((a) => a.description));
1475
+ // sf_verify 仅生成计划,不执行命令 — 始终保存 not_executed
1476
+ // 真实执行结果必须通过 recordVerificationExecution 单独录入
1477
+ const vResult = vcModule.createNotExecutedResult(args.task_id, vPlan.plan_id, "sf_verify 生成命令,等待执行");
1478
+ // 存储验证契约到任务上下文
1479
+ const ctxForV = await taskContext.load(args.task_id);
1480
+ if (ctxForV) {
1481
+ ctxForV.verification_plan = vPlan;
1482
+ ctxForV.verification_result = vResult;
1483
+ await taskContext.save(ctxForV);
1484
+ }
743
1485
  // 产物生命周期检查: draft → verified 需要 ArtifactVerificationResult.passed
744
1486
  let artifactVerificationResult;
745
1487
  let artifactFileMissing = false;
@@ -770,6 +1512,23 @@ export async function registerTools(server, deps) {
770
1512
  artifactVerificationResult = verifyArtifact(artifact.kind, artifact);
771
1513
  }
772
1514
  // 记录变更文件
1515
+ // 写入护栏 — 检查变更文件是否在允许范围
1516
+ if (args.changed_files.length > 0) {
1517
+ const guardModule = await lazyEnforcementGuard();
1518
+ const scopePaths = ctx.expansion?.scope?.allowed_paths ?? [];
1519
+ for (const cf of args.changed_files) {
1520
+ const writeFindings = guardModule.evaluateWriteGuard(ctx.classification?.route_decision?.route ?? "code_execution", cf, scopePaths, "command_execution_contract");
1521
+ if (writeFindings.some((f) => f.blocked)) {
1522
+ return {
1523
+ result: {
1524
+ error: `写入护栏阻断: ${writeFindings[0].reason_zh}`,
1525
+ blocked_file: cf,
1526
+ guard_id: writeFindings[0].guard_id,
1527
+ },
1528
+ };
1529
+ }
1530
+ }
1531
+ }
773
1532
  await taskContext.setExecution(args.task_id, args.changed_files);
774
1533
  // 无实际文件变更但存在产物时标记 no_change_artifact
775
1534
  if (args.changed_files.length === 0 && ctx.artifact_output) {
@@ -814,13 +1573,75 @@ export async function registerTools(server, deps) {
814
1573
  verifyExtras.artifact_warning = `产物验收检查未通过: ${reason}`;
815
1574
  verifyExtras.artifact_verification = artifactVerificationResult;
816
1575
  }
1576
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
817
1577
  const verifyPayload = Object.keys(verifyExtras).length > 0
818
1578
  ? { ...verifyResult, ...verifyExtras }
819
- : verifyResult;
1579
+ : { ...verifyResult };
1580
+ // 附加验证契约引用到返回结果
1581
+ verifyPayload.verification_plan = vPlan;
1582
+ verifyPayload.verification_result = vResult;
1583
+ // 验证后核心体验评估
1584
+ try {
1585
+ const hasVerificationEvidence = (verifyResult.checks?.build?.length ?? 0) > 0 || (verifyResult.checks?.tests?.length ?? 0) > 0;
1586
+ const cepEvalResult = await assessCepAfterVerification({
1587
+ task_id: args.task_id,
1588
+ has_verification_evidence: hasVerificationEvidence,
1589
+ });
1590
+ // 将完整 CEP 结果写入 TaskContext
1591
+ const cepModule = await import("../../engine/core_experience_principle.js");
1592
+ const fullCepEval = cepModule.evaluateCoreExperiencePrinciple({
1593
+ task_id: args.task_id, workflow_id: "sf_verify",
1594
+ has_mainline_hooks: true, has_owner_contracts: true, natural_language_entry: true,
1595
+ requires_internal_contract_knowledge: false, user_path_steps: 3,
1596
+ has_failures: false, hard_fail_downgraded: false, forced_heavy_process: false,
1597
+ has_sufficient_evidence: hasVerificationEvidence,
1598
+ output_too_long_no_summary: false, report_only_no_repair: false,
1599
+ failed_but_marked_done: false, auto_repair_overreach: false,
1600
+ repair_reverified: false, outputs_raw_noise: false,
1601
+ });
1602
+ const ctxForCep = await taskContext.load(args.task_id);
1603
+ if (ctxForCep) {
1604
+ ctxForCep.core_experience_evaluation = fullCepEval;
1605
+ await taskContext.save(ctxForCep);
1606
+ }
1607
+ }
1608
+ catch (cepErr) {
1609
+ internalWarn("CEP评估", "评估异常 (task=" + args.task_id + "):", cepErr?.message ?? cepErr);
1610
+ }
820
1611
  return {
821
1612
  result: verifyPayload,
822
1613
  };
823
1614
  });
1615
+ // ── sf_record_verification_execution: 录入真实验证执行结果(唯一 passed 入口) ──
1616
+ registerSafeTool("sf_record_verification_execution", "录入真实验证执行结果,VerificationResult.status=passed 的唯一合法入口", RecordVerificationExecutionSchema, async (args) => {
1617
+ const ctx = await taskContext.load(args.task_id);
1618
+ if (!ctx) {
1619
+ return { result: { error: "任务不存在" } };
1620
+ }
1621
+ // 必须有 VerificationPlan
1622
+ const currentPlan = ctx.verification_plan ?? ctx.batch2_verification_plan;
1623
+ if (!currentPlan) {
1624
+ return { result: { error: "任务无 VerificationPlan,先执行 sf_verify 生成计划" } };
1625
+ }
1626
+ // plan_id 必须与 TaskContext 中当前 plan 一致
1627
+ if (args.plan_id !== currentPlan.plan_id) {
1628
+ return {
1629
+ result: {
1630
+ error: `plan_id 不匹配: 请求 "${args.plan_id}",当前任务计划 "${currentPlan.plan_id}" [SF-VERIFY-5002]`,
1631
+ diagnostic_code: "SF-VERIFY-5002",
1632
+ },
1633
+ };
1634
+ }
1635
+ const vcModule = await lazyVerificationContract();
1636
+ const result = vcModule.recordVerificationExecution(args.task_id, args.plan_id, args.execution_records, currentPlan);
1637
+ // 持久化到 TaskContext
1638
+ const ctxForSave = await taskContext.load(args.task_id);
1639
+ if (ctxForSave) {
1640
+ ctxForSave.verification_result = result;
1641
+ await taskContext.save(ctxForSave);
1642
+ }
1643
+ return { result };
1644
+ });
824
1645
  // ── sf_learn: 从执行结果中提取知识,支持重试循环控制 ──
825
1646
  registerSafeTool("sf_learn", "从任务执行结果中提取知识,低置信度暂存,高置信度直接入库", LearnSchema, async (args) => {
826
1647
  const ctx = await taskContext.load(args.task_id);
@@ -845,6 +1666,33 @@ export async function registerTools(server, deps) {
845
1666
  : "unknown failure",
846
1667
  timestamp: new Date().toISOString(),
847
1668
  });
1669
+ // 创建 FailureReport(脱敏,非 raw error_output)
1670
+ const frModule = await lazyFailureReport();
1671
+ const failureClass = args.failure_type;
1672
+ const errorOutput = args.verify_output
1673
+ ? `build=${args.verify_output.build_passed} tests=${args.verify_output.tests_passed}`
1674
+ : "unknown failure";
1675
+ const retryCount = (ctx.execution?.attempt_count ?? 0) + 1;
1676
+ const policy = frModule.getRecoveryPolicy(failureClass);
1677
+ const failureReport = frModule.createFailureReport(args.task_id, failureClass, errorOutput, retryCount, policy?.max_retries ?? 0);
1678
+ // 存储 FailureReport 到任务上下文
1679
+ const ctxForFailure = await taskContext.load(args.task_id);
1680
+ if (ctxForFailure) {
1681
+ ctxForFailure.failure_report = failureReport;
1682
+ await taskContext.save(ctxForFailure);
1683
+ }
1684
+ // verifier 不可用时创建 DegradationEvent
1685
+ if (!args.verify_output) {
1686
+ const degModule = await lazyDegradation();
1687
+ const degradationEvent = degModule.createDegradationEvent(args.task_id, "verifier", "full", "验证器输出不可用,无法判断 build/test 结果", ["verification_execution"]);
1688
+ if (degradationEvent) {
1689
+ const ctxForDeg = await taskContext.load(args.task_id);
1690
+ if (ctxForDeg) {
1691
+ ctxForDeg.degradation_event = degradationEvent;
1692
+ await taskContext.save(ctxForDeg);
1693
+ }
1694
+ }
1695
+ }
848
1696
  }
849
1697
  // 转换到学习阶段
850
1698
  await taskContext.updateStatus(args.task_id, "learning");
@@ -945,7 +1793,7 @@ export async function registerTools(server, deps) {
945
1793
  await taskContext.autoFailStale();
946
1794
  }
947
1795
  catch (e) {
948
- console.error("[soloForge] autoFailStale 出错:", e);
1796
+ internalWarn("autoFailStale", "出错:", e);
949
1797
  }
950
1798
  switch (action) {
951
1799
  case "current": {
@@ -1243,6 +2091,128 @@ export async function registerTools(server, deps) {
1243
2091
  }
1244
2092
  }
1245
2093
  }
2094
+ // 交付 lease 互斥检查
2095
+ const leaseModule = await lazyWorkspaceLease();
2096
+ const deliverLease = leaseModule.acquireLease(args.task_id, "delivery", [projectPath]);
2097
+ if (deliverLease.lease?.status === "conflicted" || deliverLease.conflicts.length > 0) {
2098
+ return {
2099
+ result: {
2100
+ error: `交付 lease 冲突: ${deliverLease.conflicts.map((c) => `${c.conflict_type}: ${c.conflict_path}`).join(", ")}`,
2101
+ conflicts: deliverLease.conflicts,
2102
+ },
2103
+ };
2104
+ }
2105
+ // 交付就绪评估 — delivery_allowed=false 必须阻断交付
2106
+ const drModule = await lazyDeliveryReadiness();
2107
+ const guardModule = await lazyEnforcementGuard();
2108
+ const currentVResult = ctx.verification_result ?? ctx.batch2_verification_result;
2109
+ const currentVPlan = ctx.verification_plan ?? ctx.batch2_verification_plan;
2110
+ const guardFindings = guardModule.evaluateDeliveryReadinessGuard(currentVResult, currentVPlan);
2111
+ // 问题五十一: 编码就绪门 — 交付前检查 coding readiness
2112
+ const codingGate = await checkCodingReadinessGate({ ctx });
2113
+ if (!codingGate.allowed) {
2114
+ if (deliverLease.lease) {
2115
+ leaseModule.releaseLease(deliverLease.lease.lease_id);
2116
+ }
2117
+ return {
2118
+ result: {
2119
+ error: `编码就绪检查未通过: ${codingGate.reason_zh}`,
2120
+ missing_preconditions: codingGate.missing_preconditions,
2121
+ status: "blocked",
2122
+ recovery: "请先满足编码就绪条件(测试计划、验收标准、主链路入口)",
2123
+ },
2124
+ };
2125
+ }
2126
+ const metricsData = await (await lazyObservability()).collectDeliveryMetricSamples(taskContext.getStateDir());
2127
+ // acceptanceConfig: 从项目配置推断 project_run_mode
2128
+ const projectHasFrontend = config.tech_stack.frontend.lang && config.tech_stack.frontend.lang !== "none";
2129
+ const readinessReport = drModule.evaluateDeliveryReadiness(args.task_id, currentVResult, guardFindings, true, // scope_check — 已在 sf_verify 写入护栏中检查
2130
+ deliverLease.conflicts.length === 0, // lease_check — 无冲突即通过
2131
+ true, // privacy_check — 已在任务创建时脱敏
2132
+ true, // artifact_acceptance — 上面已检查产物状态
2133
+ metricsData, projectHasFrontend ? { final_access: { frontend_urls: [], backend_urls: [], docs_or_swagger_urls: [], start_commands: [], stop_commands: [], running_status: "not_started", manual_review_steps_zh: [], known_limits_zh: [] }, project_run_mode: "local_dev_server" } : undefined);
2134
+ // 保存就绪报告到任务上下文
2135
+ const ctxForReadiness = await taskContext.load(args.task_id);
2136
+ if (ctxForReadiness) {
2137
+ ctxForReadiness.delivery_readiness = readinessReport;
2138
+ await taskContext.save(ctxForReadiness);
2139
+ }
2140
+ if (!readinessReport.delivery_allowed) {
2141
+ // 释放 lease 并阻断交付
2142
+ if (deliverLease.lease) {
2143
+ leaseModule.releaseLease(deliverLease.lease.lease_id);
2144
+ }
2145
+ return {
2146
+ result: {
2147
+ error: `交付就绪检查未通过: ${readinessReport.blocking_findings.map((f) => f.message_zh).join("; ")}`,
2148
+ delivery_readiness: readinessReport,
2149
+ },
2150
+ };
2151
+ }
2152
+ // 问题五十二: 本地验收门 — 前端/全栈交付前必须有本地访问证据(仅在有施工指令契约时强制)
2153
+ const hasInstructionContract = !!ctx?.instruction_contract;
2154
+ if (hasInstructionContract) {
2155
+ const localAcceptanceGate = await checkLocalAcceptanceGate({
2156
+ ctx,
2157
+ hasFrontend: !!projectHasFrontend,
2158
+ hasBackend: !!config.tech_stack,
2159
+ hasDockerCompose: false,
2160
+ hasDockerfile: false,
2161
+ });
2162
+ if (!localAcceptanceGate.allowed) {
2163
+ if (deliverLease.lease) {
2164
+ leaseModule.releaseLease(deliverLease.lease.lease_id);
2165
+ }
2166
+ return {
2167
+ result: {
2168
+ error: `本地验收检查未通过: ${localAcceptanceGate.reason_zh}`,
2169
+ required_but_missing: localAcceptanceGate.required_but_missing,
2170
+ status: "blocked",
2171
+ recovery: "请提供本地运行证据或说明 not_applicable 原因(如纯后端 API 项目)",
2172
+ },
2173
+ };
2174
+ }
2175
+ }
2176
+ // 交付前检查 false completion(通过提取的主链路函数)
2177
+ const cepNfcResult = await assessCepBeforeDelivery({
2178
+ task_id: args.task_id,
2179
+ verification_passed: currentVResult?.status === "passed",
2180
+ build_passed: (currentVResult?.passed_commands ?? 0) > 0,
2181
+ browser_acceptance_passed: ctx.artifact_output?.status === "verified" || ctx.artifact_output === undefined,
2182
+ guard_passed: guardFindings.length === 0 || guardFindings.every((f) => f.severity !== "hard_fail"),
2183
+ evidence_sufficient: (currentVResult?.evidence_ids?.length ?? 0) > 0,
2184
+ current_status: ctx.status === "done" ? "completed" : ctx.status,
2185
+ });
2186
+ if (cepNfcResult.decision === "blocked" || cepNfcResult.decision === "repair_reverify") {
2187
+ if (deliverLease.lease) {
2188
+ leaseModule.releaseLease(deliverLease.lease.lease_id);
2189
+ }
2190
+ const ctxForCep = await taskContext.load(args.task_id);
2191
+ if (ctxForCep) {
2192
+ ctxForCep.core_experience_evaluation = {
2193
+ task_id: args.task_id,
2194
+ workflow_id: "sf_deliver",
2195
+ evaluated_principles: ["auto_repair_no_fake_completion"],
2196
+ violations: [{
2197
+ principle: "auto_repair_no_fake_completion",
2198
+ severity: "blocking",
2199
+ reason_zh: cepNfcResult.reason_zh,
2200
+ evidence_refs: [],
2201
+ required_action: cepNfcResult.decision === "blocked" ? "block_delivery" : "repair_reverify",
2202
+ }],
2203
+ user_facing_summary_zh: `CEP 检查未通过: ${cepNfcResult.reason_zh}`,
2204
+ internal_trace_refs: [],
2205
+ passed: false,
2206
+ };
2207
+ await taskContext.save(ctxForCep);
2208
+ }
2209
+ return {
2210
+ result: {
2211
+ error: `CEP false completion 检查未通过: ${cepNfcResult.reason_zh}`,
2212
+ cep_decision: cepNfcResult.decision,
2213
+ },
2214
+ };
2215
+ }
1246
2216
  const result = await (await lazyDelivery()).deliver({
1247
2217
  taskContext: ctx,
1248
2218
  config,
@@ -1253,6 +2223,10 @@ export async function registerTools(server, deps) {
1253
2223
  skipPr: args.skip_pr,
1254
2224
  });
1255
2225
  await taskContext.setDelivery(args.task_id, result);
2226
+ // 交付完成后释放 lease
2227
+ if (deliverLease.lease) {
2228
+ leaseModule.releaseLease(deliverLease.lease.lease_id);
2229
+ }
1256
2230
  return {
1257
2231
  result: h4DeliverWarning ? { ...result, h4_advisory: h4DeliverWarning } : result,
1258
2232
  };
@@ -1623,7 +2597,7 @@ export async function registerTools(server, deps) {
1623
2597
  configEntries = resolved.entries;
1624
2598
  }
1625
2599
  catch (e) {
1626
- console.error(`[soloForge] 配置报告解析失败: ${e instanceof Error ? e.message : String(e)}`);
2600
+ internalWarn("配置报告", "解析失败:", e instanceof Error ? e.message : String(e));
1627
2601
  }
1628
2602
  // 同时包含近期任务上下文中的报告
1629
2603
  for (const t of recentTasks) {