soloforge 1.2.7 → 1.2.9

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 (406) hide show
  1. package/README.md +105 -321
  2. package/dist/adapters/claude_code/claude_md.d.ts +5 -0
  3. package/dist/adapters/claude_code/claude_md.d.ts.map +1 -1
  4. package/dist/adapters/claude_code/claude_md.js +6 -0
  5. package/dist/adapters/claude_code/claude_md.js.map +1 -1
  6. package/dist/adapters/claude_code/hooks.d.ts +4 -0
  7. package/dist/adapters/claude_code/hooks.d.ts.map +1 -1
  8. package/dist/adapters/claude_code/hooks.js +5 -0
  9. package/dist/adapters/claude_code/hooks.js.map +1 -1
  10. package/dist/adapters/claude_code/server.d.ts.map +1 -1
  11. package/dist/adapters/claude_code/server.js +9 -21
  12. package/dist/adapters/claude_code/server.js.map +1 -1
  13. package/dist/adapters/claude_code/tools.d.ts +5 -0
  14. package/dist/adapters/claude_code/tools.d.ts.map +1 -1
  15. package/dist/adapters/claude_code/tools.js +619 -205
  16. package/dist/adapters/claude_code/tools.js.map +1 -1
  17. package/dist/adapters/codex/codex_config.d.ts +9 -0
  18. package/dist/adapters/codex/codex_config.d.ts.map +1 -1
  19. package/dist/adapters/codex/codex_config.js +11 -3
  20. package/dist/adapters/codex/codex_config.js.map +1 -1
  21. package/dist/adapters/codex/codex_rules.d.ts +5 -0
  22. package/dist/adapters/codex/codex_rules.d.ts.map +1 -1
  23. package/dist/adapters/codex/codex_rules.js +8 -1
  24. package/dist/adapters/codex/codex_rules.js.map +1 -1
  25. package/dist/adapters/shared/workflow_template.d.ts +5 -0
  26. package/dist/adapters/shared/workflow_template.d.ts.map +1 -1
  27. package/dist/adapters/shared/workflow_template.js +32 -79
  28. package/dist/adapters/shared/workflow_template.js.map +1 -1
  29. package/dist/adapters/trae/trae_config.d.ts +4 -0
  30. package/dist/adapters/trae/trae_config.d.ts.map +1 -1
  31. package/dist/adapters/trae/trae_config.js +5 -7
  32. package/dist/adapters/trae/trae_config.js.map +1 -1
  33. package/dist/adapters/trae/trae_rules.d.ts +5 -0
  34. package/dist/adapters/trae/trae_rules.d.ts.map +1 -1
  35. package/dist/adapters/trae/trae_rules.js +7 -1
  36. package/dist/adapters/trae/trae_rules.js.map +1 -1
  37. package/dist/bin/config_commands.d.ts +33 -0
  38. package/dist/bin/config_commands.d.ts.map +1 -0
  39. package/dist/bin/config_commands.js +222 -0
  40. package/dist/bin/config_commands.js.map +1 -0
  41. package/dist/bin/soloforge.js +609 -119
  42. package/dist/bin/soloforge.js.map +1 -1
  43. package/dist/engine/artifact_contract_registry.d.ts +138 -0
  44. package/dist/engine/artifact_contract_registry.d.ts.map +1 -0
  45. package/dist/engine/artifact_contract_registry.js +427 -0
  46. package/dist/engine/artifact_contract_registry.js.map +1 -0
  47. package/dist/engine/audit_pool.d.ts +40 -0
  48. package/dist/engine/audit_pool.d.ts.map +1 -1
  49. package/dist/engine/audit_pool.js +37 -1
  50. package/dist/engine/audit_pool.js.map +1 -1
  51. package/dist/engine/audit_sampler.d.ts +5 -0
  52. package/dist/engine/audit_sampler.d.ts.map +1 -1
  53. package/dist/engine/audit_sampler.js +6 -0
  54. package/dist/engine/audit_sampler.js.map +1 -1
  55. package/dist/engine/audit_verifier.d.ts.map +1 -1
  56. package/dist/engine/audit_verifier.js +5 -1
  57. package/dist/engine/audit_verifier.js.map +1 -1
  58. package/dist/engine/batch1_manifest.d.ts +61 -0
  59. package/dist/engine/batch1_manifest.d.ts.map +1 -0
  60. package/dist/engine/batch1_manifest.js +220 -0
  61. package/dist/engine/batch1_manifest.js.map +1 -0
  62. package/dist/engine/batch1_reality_gate.d.ts +40 -0
  63. package/dist/engine/batch1_reality_gate.d.ts.map +1 -0
  64. package/dist/engine/batch1_reality_gate.js +290 -0
  65. package/dist/engine/batch1_reality_gate.js.map +1 -0
  66. package/dist/engine/batch1_scenario_registry.d.ts +62 -0
  67. package/dist/engine/batch1_scenario_registry.d.ts.map +1 -0
  68. package/dist/engine/batch1_scenario_registry.js +392 -0
  69. package/dist/engine/batch1_scenario_registry.js.map +1 -0
  70. package/dist/engine/batch1_scenario_runners.d.ts +42 -0
  71. package/dist/engine/batch1_scenario_runners.d.ts.map +1 -0
  72. package/dist/engine/batch1_scenario_runners.js +292 -0
  73. package/dist/engine/batch1_scenario_runners.js.map +1 -0
  74. package/dist/engine/capability_action_advisor.d.ts +3 -0
  75. package/dist/engine/capability_action_advisor.d.ts.map +1 -1
  76. package/dist/engine/capability_action_advisor.js +10 -0
  77. package/dist/engine/capability_action_advisor.js.map +1 -1
  78. package/dist/engine/capability_registry.d.ts +21 -0
  79. package/dist/engine/capability_registry.d.ts.map +1 -1
  80. package/dist/engine/capability_registry.js +113 -0
  81. package/dist/engine/capability_registry.js.map +1 -1
  82. package/dist/engine/capability_state_store.d.ts +63 -0
  83. package/dist/engine/capability_state_store.d.ts.map +1 -1
  84. package/dist/engine/capability_state_store.js +49 -1
  85. package/dist/engine/capability_state_store.js.map +1 -1
  86. package/dist/engine/change_coordinator.d.ts.map +1 -1
  87. package/dist/engine/change_coordinator.js +5 -4
  88. package/dist/engine/change_coordinator.js.map +1 -1
  89. package/dist/engine/classifier.d.ts +15 -5
  90. package/dist/engine/classifier.d.ts.map +1 -1
  91. package/dist/engine/classifier.js +70 -69
  92. package/dist/engine/classifier.js.map +1 -1
  93. package/dist/engine/code_reviewer.d.ts +14 -0
  94. package/dist/engine/code_reviewer.d.ts.map +1 -1
  95. package/dist/engine/code_reviewer.js +109 -10
  96. package/dist/engine/code_reviewer.js.map +1 -1
  97. package/dist/engine/cognitive_anchor.d.ts +14 -0
  98. package/dist/engine/cognitive_anchor.d.ts.map +1 -1
  99. package/dist/engine/cognitive_anchor.js +26 -2
  100. package/dist/engine/cognitive_anchor.js.map +1 -1
  101. package/dist/engine/command_execution_contract.d.ts +226 -0
  102. package/dist/engine/command_execution_contract.d.ts.map +1 -0
  103. package/dist/engine/command_execution_contract.js +571 -0
  104. package/dist/engine/command_execution_contract.js.map +1 -0
  105. package/dist/engine/confidence_scorer.d.ts.map +1 -1
  106. package/dist/engine/confidence_scorer.js +1 -0
  107. package/dist/engine/confidence_scorer.js.map +1 -1
  108. package/dist/engine/config_precedence_contract.d.ts +269 -0
  109. package/dist/engine/config_precedence_contract.d.ts.map +1 -0
  110. package/dist/engine/config_precedence_contract.js +948 -0
  111. package/dist/engine/config_precedence_contract.js.map +1 -0
  112. package/dist/engine/conflict_gate.d.ts +13 -0
  113. package/dist/engine/conflict_gate.d.ts.map +1 -1
  114. package/dist/engine/conflict_gate.js +20 -2
  115. package/dist/engine/conflict_gate.js.map +1 -1
  116. package/dist/engine/consumable_asset_registry.d.ts +46 -0
  117. package/dist/engine/consumable_asset_registry.d.ts.map +1 -0
  118. package/dist/engine/consumable_asset_registry.js +758 -0
  119. package/dist/engine/consumable_asset_registry.js.map +1 -0
  120. package/dist/engine/contract_guard.d.ts +4 -0
  121. package/dist/engine/contract_guard.d.ts.map +1 -1
  122. package/dist/engine/contract_guard.js +15 -7
  123. package/dist/engine/contract_guard.js.map +1 -1
  124. package/dist/engine/convention_detector.d.ts.map +1 -1
  125. package/dist/engine/convention_detector.js +5 -2
  126. package/dist/engine/convention_detector.js.map +1 -1
  127. package/dist/engine/core_engineering_principles.d.ts +155 -0
  128. package/dist/engine/core_engineering_principles.d.ts.map +1 -0
  129. package/dist/engine/core_engineering_principles.js +426 -0
  130. package/dist/engine/core_engineering_principles.js.map +1 -0
  131. package/dist/engine/debt_reporter.d.ts.map +1 -1
  132. package/dist/engine/debt_reporter.js +3 -1
  133. package/dist/engine/debt_reporter.js.map +1 -1
  134. package/dist/engine/debt_tracker.d.ts.map +1 -1
  135. package/dist/engine/debt_tracker.js +9 -3
  136. package/dist/engine/debt_tracker.js.map +1 -1
  137. package/dist/engine/debugger.d.ts.map +1 -1
  138. package/dist/engine/debugger.js +2 -0
  139. package/dist/engine/debugger.js.map +1 -1
  140. package/dist/engine/decision_contract.d.ts +11 -2
  141. package/dist/engine/decision_contract.d.ts.map +1 -1
  142. package/dist/engine/decision_contract.js +17 -2
  143. package/dist/engine/decision_contract.js.map +1 -1
  144. package/dist/engine/delivery.d.ts +7 -0
  145. package/dist/engine/delivery.d.ts.map +1 -1
  146. package/dist/engine/delivery.js +89 -36
  147. package/dist/engine/delivery.js.map +1 -1
  148. package/dist/engine/dependency_scanner.d.ts.map +1 -1
  149. package/dist/engine/dependency_scanner.js +14 -9
  150. package/dist/engine/dependency_scanner.js.map +1 -1
  151. package/dist/engine/developer_sovereignty.d.ts.map +1 -1
  152. package/dist/engine/developer_sovereignty.js +8 -2
  153. package/dist/engine/developer_sovereignty.js.map +1 -1
  154. package/dist/engine/diff_ownership.d.ts.map +1 -1
  155. package/dist/engine/diff_ownership.js +8 -0
  156. package/dist/engine/diff_ownership.js.map +1 -1
  157. package/dist/engine/diff_ownership_store.d.ts +26 -10
  158. package/dist/engine/diff_ownership_store.d.ts.map +1 -1
  159. package/dist/engine/diff_ownership_store.js +47 -20
  160. package/dist/engine/diff_ownership_store.js.map +1 -1
  161. package/dist/engine/dual_layer_mechanism_registry.d.ts +66 -0
  162. package/dist/engine/dual_layer_mechanism_registry.d.ts.map +1 -0
  163. package/dist/engine/dual_layer_mechanism_registry.js +1077 -0
  164. package/dist/engine/dual_layer_mechanism_registry.js.map +1 -0
  165. package/dist/engine/escape_report.d.ts +50 -0
  166. package/dist/engine/escape_report.d.ts.map +1 -1
  167. package/dist/engine/escape_report.js +38 -0
  168. package/dist/engine/escape_report.js.map +1 -1
  169. package/dist/engine/evolver.d.ts.map +1 -1
  170. package/dist/engine/evolver.js +12 -2
  171. package/dist/engine/evolver.js.map +1 -1
  172. package/dist/engine/exploration.d.ts.map +1 -1
  173. package/dist/engine/exploration.js +87 -0
  174. package/dist/engine/exploration.js.map +1 -1
  175. package/dist/engine/failure_classifier.d.ts.map +1 -1
  176. package/dist/engine/failure_classifier.js +8 -0
  177. package/dist/engine/failure_classifier.js.map +1 -1
  178. package/dist/engine/feasibility_checker.d.ts +8 -0
  179. package/dist/engine/feasibility_checker.d.ts.map +1 -1
  180. package/dist/engine/feasibility_checker.js +12 -0
  181. package/dist/engine/feasibility_checker.js.map +1 -1
  182. package/dist/engine/git_deps.d.ts +4 -1
  183. package/dist/engine/git_deps.d.ts.map +1 -1
  184. package/dist/engine/git_deps.js +5 -1
  185. package/dist/engine/git_deps.js.map +1 -1
  186. package/dist/engine/governance_report.d.ts +57 -1
  187. package/dist/engine/governance_report.d.ts.map +1 -1
  188. package/dist/engine/governance_report.js +91 -1
  189. package/dist/engine/governance_report.js.map +1 -1
  190. package/dist/engine/impact_analyzer.d.ts.map +1 -1
  191. package/dist/engine/impact_analyzer.js +5 -1
  192. package/dist/engine/impact_analyzer.js.map +1 -1
  193. package/dist/engine/implementation_roadmap_registry.d.ts +105 -0
  194. package/dist/engine/implementation_roadmap_registry.d.ts.map +1 -0
  195. package/dist/engine/implementation_roadmap_registry.js +813 -0
  196. package/dist/engine/implementation_roadmap_registry.js.map +1 -0
  197. package/dist/engine/input_material_contract_registry.d.ts +185 -0
  198. package/dist/engine/input_material_contract_registry.d.ts.map +1 -0
  199. package/dist/engine/input_material_contract_registry.js +563 -0
  200. package/dist/engine/input_material_contract_registry.js.map +1 -0
  201. package/dist/engine/intent_expander.d.ts +8 -27
  202. package/dist/engine/intent_expander.d.ts.map +1 -1
  203. package/dist/engine/intent_expander.js +1170 -139
  204. package/dist/engine/intent_expander.js.map +1 -1
  205. package/dist/engine/intent_router.d.ts +82 -0
  206. package/dist/engine/intent_router.d.ts.map +1 -0
  207. package/dist/engine/intent_router.js +458 -0
  208. package/dist/engine/intent_router.js.map +1 -0
  209. package/dist/engine/io_controller.d.ts.map +1 -1
  210. package/dist/engine/io_controller.js +25 -13
  211. package/dist/engine/io_controller.js.map +1 -1
  212. package/dist/engine/java_quality_guard.d.ts.map +1 -1
  213. package/dist/engine/java_quality_guard.js +8 -4
  214. package/dist/engine/java_quality_guard.js.map +1 -1
  215. package/dist/engine/job_manager.d.ts +35 -0
  216. package/dist/engine/job_manager.d.ts.map +1 -1
  217. package/dist/engine/job_manager.js +53 -9
  218. package/dist/engine/job_manager.js.map +1 -1
  219. package/dist/engine/knowledge_config_loader.d.ts +12 -1
  220. package/dist/engine/knowledge_config_loader.d.ts.map +1 -1
  221. package/dist/engine/knowledge_config_loader.js +50 -10
  222. package/dist/engine/knowledge_config_loader.js.map +1 -1
  223. package/dist/engine/knowledge_injection_boundary.d.ts +56 -0
  224. package/dist/engine/knowledge_injection_boundary.d.ts.map +1 -0
  225. package/dist/engine/knowledge_injection_boundary.js +561 -0
  226. package/dist/engine/knowledge_injection_boundary.js.map +1 -0
  227. package/dist/engine/knowledge_manager.d.ts +73 -0
  228. package/dist/engine/knowledge_manager.d.ts.map +1 -1
  229. package/dist/engine/knowledge_manager.js +163 -21
  230. package/dist/engine/knowledge_manager.js.map +1 -1
  231. package/dist/engine/knowledge_sovereignty.d.ts +1 -0
  232. package/dist/engine/knowledge_sovereignty.d.ts.map +1 -1
  233. package/dist/engine/knowledge_sovereignty.js +8 -3
  234. package/dist/engine/knowledge_sovereignty.js.map +1 -1
  235. package/dist/engine/llm_gateway.d.ts +74 -3
  236. package/dist/engine/llm_gateway.d.ts.map +1 -1
  237. package/dist/engine/llm_gateway.js +75 -4
  238. package/dist/engine/llm_gateway.js.map +1 -1
  239. package/dist/engine/main_path_integration_contract.d.ts +383 -0
  240. package/dist/engine/main_path_integration_contract.d.ts.map +1 -0
  241. package/dist/engine/main_path_integration_contract.js +1581 -0
  242. package/dist/engine/main_path_integration_contract.js.map +1 -0
  243. package/dist/engine/mechanism_contract_registry.d.ts +59 -0
  244. package/dist/engine/mechanism_contract_registry.d.ts.map +1 -0
  245. package/dist/engine/mechanism_contract_registry.js +484 -0
  246. package/dist/engine/mechanism_contract_registry.js.map +1 -0
  247. package/dist/engine/migration_guard.d.ts.map +1 -1
  248. package/dist/engine/migration_guard.js +24 -15
  249. package/dist/engine/migration_guard.js.map +1 -1
  250. package/dist/engine/mutation_audit.d.ts +10 -0
  251. package/dist/engine/mutation_audit.d.ts.map +1 -1
  252. package/dist/engine/mutation_audit.js +19 -2
  253. package/dist/engine/mutation_audit.js.map +1 -1
  254. package/dist/engine/observability.d.ts.map +1 -1
  255. package/dist/engine/observability.js +17 -6
  256. package/dist/engine/observability.js.map +1 -1
  257. package/dist/engine/onboarding.d.ts.map +1 -1
  258. package/dist/engine/onboarding.js +20 -4
  259. package/dist/engine/onboarding.js.map +1 -1
  260. package/dist/engine/policy_drift_detector.d.ts +6 -0
  261. package/dist/engine/policy_drift_detector.d.ts.map +1 -1
  262. package/dist/engine/policy_drift_detector.js +16 -0
  263. package/dist/engine/policy_drift_detector.js.map +1 -1
  264. package/dist/engine/privacy_secret_contract.d.ts +320 -0
  265. package/dist/engine/privacy_secret_contract.d.ts.map +1 -0
  266. package/dist/engine/privacy_secret_contract.js +874 -0
  267. package/dist/engine/privacy_secret_contract.js.map +1 -0
  268. package/dist/engine/regression_matrix.d.ts +21 -8
  269. package/dist/engine/regression_matrix.d.ts.map +1 -1
  270. package/dist/engine/regression_matrix.js +37 -8
  271. package/dist/engine/regression_matrix.js.map +1 -1
  272. package/dist/engine/risk_sampler.d.ts +6 -0
  273. package/dist/engine/risk_sampler.d.ts.map +1 -1
  274. package/dist/engine/risk_sampler.js +9 -0
  275. package/dist/engine/risk_sampler.js.map +1 -1
  276. package/dist/engine/runtime_safety.d.ts.map +1 -1
  277. package/dist/engine/runtime_safety.js +7 -3
  278. package/dist/engine/runtime_safety.js.map +1 -1
  279. package/dist/engine/scaffolder.d.ts.map +1 -1
  280. package/dist/engine/scaffolder.js +7 -1
  281. package/dist/engine/scaffolder.js.map +1 -1
  282. package/dist/engine/scope_controller.d.ts.map +1 -1
  283. package/dist/engine/scope_controller.js +12 -1
  284. package/dist/engine/scope_controller.js.map +1 -1
  285. package/dist/engine/scope_lease.d.ts +43 -0
  286. package/dist/engine/scope_lease.d.ts.map +1 -1
  287. package/dist/engine/scope_lease.js +44 -0
  288. package/dist/engine/scope_lease.js.map +1 -1
  289. package/dist/engine/semantic_evidence.d.ts +6 -0
  290. package/dist/engine/semantic_evidence.d.ts.map +1 -1
  291. package/dist/engine/semantic_evidence.js +9 -0
  292. package/dist/engine/semantic_evidence.js.map +1 -1
  293. package/dist/engine/task_context.d.ts +36 -1
  294. package/dist/engine/task_context.d.ts.map +1 -1
  295. package/dist/engine/task_context.js +252 -13
  296. package/dist/engine/task_context.js.map +1 -1
  297. package/dist/engine/task_planner.d.ts.map +1 -1
  298. package/dist/engine/task_planner.js +13 -3
  299. package/dist/engine/task_planner.js.map +1 -1
  300. package/dist/engine/team_awareness.d.ts.map +1 -1
  301. package/dist/engine/team_awareness.js +8 -7
  302. package/dist/engine/team_awareness.js.map +1 -1
  303. package/dist/engine/template_mechanism_auditor.d.ts +93 -0
  304. package/dist/engine/template_mechanism_auditor.d.ts.map +1 -0
  305. package/dist/engine/template_mechanism_auditor.js +622 -0
  306. package/dist/engine/template_mechanism_auditor.js.map +1 -0
  307. package/dist/engine/test_generator.d.ts.map +1 -1
  308. package/dist/engine/test_generator.js +6 -0
  309. package/dist/engine/test_generator.js.map +1 -1
  310. package/dist/engine/test_quality.d.ts +6 -0
  311. package/dist/engine/test_quality.d.ts.map +1 -1
  312. package/dist/engine/test_quality.js +26 -10
  313. package/dist/engine/test_quality.js.map +1 -1
  314. package/dist/engine/tool_invocation_contract_registry.d.ts +136 -0
  315. package/dist/engine/tool_invocation_contract_registry.d.ts.map +1 -0
  316. package/dist/engine/tool_invocation_contract_registry.js +731 -0
  317. package/dist/engine/tool_invocation_contract_registry.js.map +1 -0
  318. package/dist/engine/traceability.d.ts +3 -0
  319. package/dist/engine/traceability.d.ts.map +1 -1
  320. package/dist/engine/traceability.js +12 -4
  321. package/dist/engine/traceability.js.map +1 -1
  322. package/dist/engine/user_feedback_contract.d.ts +162 -0
  323. package/dist/engine/user_feedback_contract.d.ts.map +1 -0
  324. package/dist/engine/user_feedback_contract.js +356 -0
  325. package/dist/engine/user_feedback_contract.js.map +1 -0
  326. package/dist/engine/verifier.d.ts +6 -1
  327. package/dist/engine/verifier.d.ts.map +1 -1
  328. package/dist/engine/verifier.js +114 -1
  329. package/dist/engine/verifier.js.map +1 -1
  330. package/dist/engine/workflow_contract_registry.d.ts +70 -0
  331. package/dist/engine/workflow_contract_registry.d.ts.map +1 -0
  332. package/dist/engine/workflow_contract_registry.js +501 -0
  333. package/dist/engine/workflow_contract_registry.js.map +1 -0
  334. package/dist/engine/workspace_resumer.d.ts.map +1 -1
  335. package/dist/engine/workspace_resumer.js +8 -0
  336. package/dist/engine/workspace_resumer.js.map +1 -1
  337. package/dist/engine/zero_config_init.d.ts +67 -2
  338. package/dist/engine/zero_config_init.d.ts.map +1 -1
  339. package/dist/engine/zero_config_init.js +410 -28
  340. package/dist/engine/zero_config_init.js.map +1 -1
  341. package/dist/git/operations.d.ts +101 -0
  342. package/dist/git/operations.d.ts.map +1 -1
  343. package/dist/git/operations.js +125 -9
  344. package/dist/git/operations.js.map +1 -1
  345. package/dist/index.d.ts +1 -1
  346. package/dist/index.js +16 -5
  347. package/dist/index.js.map +1 -1
  348. package/dist/knowledge/conflict_detector.d.ts +6 -0
  349. package/dist/knowledge/conflict_detector.d.ts.map +1 -1
  350. package/dist/knowledge/conflict_detector.js +7 -0
  351. package/dist/knowledge/conflict_detector.js.map +1 -1
  352. package/dist/knowledge/health_checker.d.ts +16 -0
  353. package/dist/knowledge/health_checker.d.ts.map +1 -1
  354. package/dist/knowledge/health_checker.js +24 -1
  355. package/dist/knowledge/health_checker.js.map +1 -1
  356. package/dist/knowledge/index_manager.d.ts +140 -2
  357. package/dist/knowledge/index_manager.d.ts.map +1 -1
  358. package/dist/knowledge/index_manager.js +186 -26
  359. package/dist/knowledge/index_manager.js.map +1 -1
  360. package/dist/knowledge/loader.d.ts +8 -1
  361. package/dist/knowledge/loader.d.ts.map +1 -1
  362. package/dist/knowledge/loader.js +56 -2
  363. package/dist/knowledge/loader.js.map +1 -1
  364. package/dist/knowledge/writer.d.ts +49 -1
  365. package/dist/knowledge/writer.d.ts.map +1 -1
  366. package/dist/knowledge/writer.js +55 -1
  367. package/dist/knowledge/writer.js.map +1 -1
  368. package/dist/types.d.ts +255 -1
  369. package/dist/types.d.ts.map +1 -1
  370. package/dist/utils/logger.d.ts +3 -0
  371. package/dist/utils/logger.d.ts.map +1 -0
  372. package/dist/utils/logger.js +29 -0
  373. package/dist/utils/logger.js.map +1 -0
  374. package/package.json +7 -7
  375. package/templates/knowledge/acceptance_templates//345/216/237/345/236/213/350/257/264/346/230/216/346/250/241/347/211/210.md +30 -2
  376. 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 +16 -0
  377. 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 +17 -0
  378. 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 +43 -0
  379. 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 +17 -0
  380. package/templates/knowledge/checklists//351/232/220/347/247/201/345/256/241/346/237/245/346/270/205/345/215/225.md +15 -0
  381. package/templates/knowledge/checklists//351/252/214/350/257/201/351/252/214/346/224/266/346/270/205/345/215/225.md +16 -0
  382. package/templates/knowledge/patterns/core//345/206/263/347/255/226/347/275/221/345/205/263.md +1 -0
  383. 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 +23 -0
  384. package/templates/knowledge/procedures//345/221/275/344/273/244/346/211/247/350/241/214/346/265/201/347/250/213.md +19 -0
  385. package/templates/knowledge/procedures//345/267/245/345/205/267/350/260/203/347/224/250/346/265/201/347/250/213.md +15 -0
  386. package/templates/knowledge/procedures//346/204/217/345/233/276/350/267/257/347/224/261/346/265/201/347/250/213.md +15 -0
  387. package/templates/knowledge/procedures/{Figma → /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 +5 -5
  388. 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 +53 -0
  389. package/templates/knowledge/rules//344/272/247/347/211/251/345/245/221/347/272/246/350/247/204/345/210/231.md +21 -0
  390. package/templates/knowledge/rules//345/221/275/344/273/244/346/211/247/350/241/214/350/247/204/345/210/231.md +25 -0
  391. 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 +20 -0
  392. package/templates/knowledge/rules//345/267/245/345/205/267/350/260/203/347/224/250/350/247/204/345/210/231.md +25 -0
  393. package/templates/knowledge/rules//346/204/217/345/233/276/350/267/257/347/224/261/350/247/204/345/210/231.md +26 -0
  394. 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 +24 -0
  395. 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 +20 -0
  396. 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 +125 -0
  397. 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 +26 -0
  398. 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 +22 -0
  399. 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 +25 -0
  400. 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 +27 -0
  401. 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 +22 -0
  402. 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 +24 -0
  403. 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 +28 -0
  404. package/templates/knowledge/rules//351/252/214/350/257/201/345/245/221/347/272/246/350/247/204/345/210/231.md +25 -0
  405. package/templates/knowledge/templates/{review_summary.md → /345/256/241/346/237/245/346/221/230/350/246/201.md} +1 -1
  406. package/templates/config.yaml +0 -53
@@ -0,0 +1,1077 @@
1
+ /**
2
+ * Dual-Layer Mechanism Registry
3
+ *
4
+ * 每个机制都必须有"模板层 + 机制层"双层承载:
5
+ * - 模板层: 告诉 AI 应该怎么做
6
+ * - 机制层: 验证 AI 是否真的做到
7
+ *
8
+ * 模板层降低走偏概率;机制层负责发现、阻断、记录证据并驱动回到修复。
9
+ *
10
+ * 完成定义:
11
+ * Mechanism Done = template_declared + template_consumable
12
+ * + code_enforced + evidence_recorded + regression_guarded
13
+ */
14
+ import fs from "node:fs";
15
+ import path from "node:path";
16
+ import { listBuiltinConsumableAssets } from "./consumable_asset_registry.js";
17
+ import { listMechanismContracts } from "./mechanism_contract_registry.js";
18
+ import { listWorkflowContracts } from "./workflow_contract_registry.js";
19
+ import { getAllCapabilities } from "./capability_registry.js";
20
+ // ── 已知注册表名称 ──
21
+ const KNOWN_REGISTRIES = new Set([
22
+ "mechanism_contract_registry",
23
+ "workflow_contract_registry",
24
+ "tool_invocation_contract_registry",
25
+ "consumable_asset_registry",
26
+ "capability_registry",
27
+ "implementation_roadmap_registry",
28
+ "artifact_contract_registry",
29
+ "input_material_contract_registry",
30
+ "main_path_integration_contract",
31
+ "command_execution_contract",
32
+ "config_precedence_contract",
33
+ "privacy_secret_contract",
34
+ "user_feedback_contract",
35
+ "decision_contract",
36
+ "dual_layer_mechanism_registry",
37
+ ]);
38
+ // ── 契约到 LayerMap 的转换 ──
39
+ function contractToLayerMap(c) {
40
+ return {
41
+ mechanism_id: c.mechanism_id,
42
+ mechanism_name: c.mechanism_name,
43
+ owner_issue_id: c.owner_issue_id,
44
+ priority: c.priority,
45
+ template_assets: c.template_layer.assets,
46
+ template_consumers: c.template_layer.injected_routes,
47
+ code_enforcers: c.enforcement_layer.enforcers,
48
+ code_entrypoints: c.enforcement_layer.entrypoints,
49
+ registries: c.enforcement_layer.registries,
50
+ evidence_outputs: c.evidence_layer.outputs,
51
+ diagnostics: c.evidence_layer.diagnostic_codes,
52
+ tests: c.verification_layer.tests,
53
+ status: c.status,
54
+ layer_status: c.status,
55
+ injected_routes: c.template_layer.injected_routes,
56
+ injected_workflows: c.template_layer.injected_workflows,
57
+ target_hosts: c.template_layer.target_hosts,
58
+ language_policy: c.template_layer.language_policy,
59
+ state_effects: c.enforcement_layer.state_effects,
60
+ hard_fail_conditions: c.enforcement_layer.hard_fail_conditions,
61
+ degradation_behavior: c.enforcement_layer.degradation_behavior,
62
+ reports: c.evidence_layer.reports,
63
+ task_context_facts: c.evidence_layer.task_context_facts,
64
+ runtime_checks: c.verification_layer.runtime_checks,
65
+ regression_cases: c.verification_layer.regression_cases,
66
+ drift_checks: c.verification_layer.drift_checks,
67
+ };
68
+ }
69
+ // ── Dual-Layer Mechanism Contracts (P0/P1/P2) ──
70
+ const MECHANISM_CONTRACTS = [
71
+ // ── 1. 意图路由 ──
72
+ {
73
+ mechanism_id: "mc-intent-router",
74
+ mechanism_name: "意图路由",
75
+ owner_issue_id: "问题九",
76
+ priority: "P0",
77
+ template_layer: {
78
+ required: true,
79
+ assets: [
80
+ { path: "templates/knowledge/rules/意图路由规则.md", asset_kind: "knowledge_rule", consumption_mode: "required" },
81
+ { path: "templates/knowledge/procedures/意图路由流程.md", asset_kind: "pipeline_procedure", consumption_mode: "supporting" },
82
+ ],
83
+ injected_routes: ["code_execution", "read_only_analysis", "single_artifact", "source_extraction", "multi_stage_plan"],
84
+ injected_workflows: ["code_change", "planning", "review"],
85
+ target_hosts: ["claude_code"],
86
+ language_policy: "zh_first",
87
+ },
88
+ enforcement_layer: {
89
+ required: true,
90
+ enforcers: ["src/engine/intent_router.ts"],
91
+ registries: ["mechanism_contract_registry"],
92
+ entrypoints: ["routeIntent", "selectPromptTemplate"],
93
+ state_effects: ["route_decision → workflow selection", "execution_shape → template selection"],
94
+ hard_fail_conditions: ["route 未确定就进入 expand", "route 与 execution_shape 矛盾"],
95
+ degradation_behavior: "route 未命中时降级为 code_execution,不阻断主链路",
96
+ },
97
+ evidence_layer: {
98
+ outputs: ["route_decision", "execution_shape"],
99
+ reports: ["WorkflowTrace"],
100
+ diagnostic_codes: ["route-mismatch", "degraded-route"],
101
+ task_context_facts: ["route", "execution_shape"],
102
+ },
103
+ verification_layer: {
104
+ tests: ["tests/engine/intent_router.test.ts"],
105
+ runtime_checks: ["route_mismatch_check"],
106
+ regression_cases: ["unknown_route_defaults_safely", "route_template_consistency"],
107
+ drift_checks: ["route_decision_matches_workflow_template"],
108
+ },
109
+ status: "dual_layer_enforced",
110
+ },
111
+ // ── 2. 工作流契约 ──
112
+ {
113
+ mechanism_id: "mc-workflow-contract",
114
+ mechanism_name: "工作流契约",
115
+ owner_issue_id: "问题九",
116
+ priority: "P0",
117
+ template_layer: {
118
+ required: true,
119
+ assets: [
120
+ { path: "templates/knowledge/rules/工作流契约规则.md", asset_kind: "knowledge_rule", consumption_mode: "required" },
121
+ { path: "templates/knowledge/checklists/工作流验收清单.md", asset_kind: "checklist", consumption_mode: "supporting" },
122
+ ],
123
+ injected_routes: ["code_execution", "multi_stage_plan", "single_artifact"],
124
+ injected_workflows: ["code_change", "verification", "delivery"],
125
+ target_hosts: ["claude_code"],
126
+ language_policy: "zh_first",
127
+ },
128
+ enforcement_layer: {
129
+ required: true,
130
+ enforcers: ["src/engine/workflow_contract_registry.ts"],
131
+ registries: ["workflow_contract_registry"],
132
+ entrypoints: ["resolveWorkflow", "validateWorkflowContracts"],
133
+ state_effects: ["workflow_id → mechanism binding", "required_mechanisms → guard check"],
134
+ hard_fail_conditions: ["workflow 缺失 required_mechanism", "workflow 与 route 不匹配"],
135
+ degradation_behavior: "workflow 未命中时降级为默认 workflow,不阻断",
136
+ },
137
+ evidence_layer: {
138
+ outputs: ["WorkflowTrace", "governance_findings"],
139
+ reports: ["WorkflowValidationReport"],
140
+ diagnostic_codes: ["workflow-regression", "missing-required-mechanism"],
141
+ task_context_facts: ["workflow_id", "mutation_allowed", "required_mechanisms"],
142
+ },
143
+ verification_layer: {
144
+ tests: ["tests/engine/workflow_contract_registry.test.ts"],
145
+ runtime_checks: ["workflow_contract_validation"],
146
+ regression_cases: ["all_workflows_have_required_mechanisms", "workflow_route_coverage"],
147
+ drift_checks: ["workflow_template_matches_route"],
148
+ },
149
+ status: "dual_layer_enforced",
150
+ },
151
+ // ── 3. 知识注入边界 ──
152
+ {
153
+ mechanism_id: "mc-knowledge-injection-boundary",
154
+ mechanism_name: "知识注入边界",
155
+ owner_issue_id: "问题八",
156
+ priority: "P0",
157
+ template_layer: {
158
+ required: true,
159
+ assets: [
160
+ { path: "templates/knowledge/rules/知识注入边界规则.md", asset_kind: "knowledge_rule", consumption_mode: "required" },
161
+ { path: "templates/knowledge/checklists/知识注入验收清单.md", asset_kind: "checklist", consumption_mode: "supporting" },
162
+ ],
163
+ injected_routes: ["code_execution", "read_only_analysis", "multi_stage_plan"],
164
+ injected_workflows: ["code_change", "planning"],
165
+ target_hosts: ["claude_code"],
166
+ language_policy: "zh_first",
167
+ },
168
+ enforcement_layer: {
169
+ required: true,
170
+ enforcers: ["src/engine/knowledge_injection_boundary.ts"],
171
+ registries: ["mechanism_contract_registry"],
172
+ entrypoints: ["enforceKnowledgeInjectionBoundary", "validateInjectionReport"],
173
+ state_effects: ["required knowledge 缺失 → blocked prompt", "injection_report → governance_findings"],
174
+ hard_fail_conditions: ["required knowledge 缺失且无法回退", "注入校验 hard_fail"],
175
+ degradation_behavior: "knowledge 未命中时降级为空注入,标记 degraded",
176
+ },
177
+ evidence_layer: {
178
+ outputs: ["KnowledgeInjectionReport", "missing_required_knowledge"],
179
+ reports: ["InjectionBoundaryReport"],
180
+ diagnostic_codes: ["boundary-violation", "route-template-mismatch"],
181
+ task_context_facts: ["injected_ids", "missing_required"],
182
+ },
183
+ verification_layer: {
184
+ tests: ["tests/engine/knowledge_injection_boundary.test.ts", "tests/engine/intent_expander_integration.test.ts"],
185
+ runtime_checks: ["injection_boundary_gate"],
186
+ regression_cases: ["required_knowledge_blocks_when_missing", "degraded_route_still_works"],
187
+ drift_checks: ["injection_report_matches_filtered_entries"],
188
+ },
189
+ status: "dual_layer_enforced",
190
+ },
191
+ // ── 4. 工具调用契约 ──
192
+ {
193
+ mechanism_id: "mc-tool-invocation-contract",
194
+ mechanism_name: "工具调用契约",
195
+ owner_issue_id: "问题二十二",
196
+ priority: "P0",
197
+ template_layer: {
198
+ required: true,
199
+ assets: [
200
+ { path: "templates/knowledge/rules/工具调用规则.md", asset_kind: "knowledge_rule", consumption_mode: "required" },
201
+ { path: "templates/knowledge/procedures/工具调用流程.md", asset_kind: "pipeline_procedure", consumption_mode: "supporting" },
202
+ ],
203
+ injected_routes: ["code_execution", "multi_stage_plan"],
204
+ injected_workflows: ["code_change", "verification", "delivery"],
205
+ target_hosts: ["claude_code"],
206
+ language_policy: "zh_first",
207
+ },
208
+ enforcement_layer: {
209
+ required: true,
210
+ enforcers: ["src/engine/tool_invocation_contract_registry.ts"],
211
+ registries: ["tool_invocation_contract_registry"],
212
+ entrypoints: ["validateToolInvocation"],
213
+ state_effects: ["forbidden tool → blocked", "strict tool → requires approval"],
214
+ hard_fail_conditions: ["forbidden tool transition", "strict tool without approval"],
215
+ degradation_behavior: "tool contract 未命中时降级为 normal,不阻断",
216
+ },
217
+ evidence_layer: {
218
+ outputs: ["ToolInvocationFinding", "forbidden_transition"],
219
+ reports: ["ToolInvocationReport"],
220
+ diagnostic_codes: ["forbidden-tool-transition", "strict-tool-without-approval"],
221
+ task_context_facts: ["next_allowed_tools", "forbidden_tools"],
222
+ },
223
+ verification_layer: {
224
+ tests: ["tests/engine/tool_invocation_contract_registry.test.ts"],
225
+ runtime_checks: ["tool_transition_gate"],
226
+ regression_cases: ["no_forbidden_transition_allowed", "strict_tools_require_confirm"],
227
+ drift_checks: ["tool_contract_matches_adapter_tools"],
228
+ },
229
+ status: "dual_layer_enforced",
230
+ },
231
+ // ── 5. 验证契约 ──
232
+ {
233
+ mechanism_id: "mc-verifier",
234
+ mechanism_name: "验证契约",
235
+ owner_issue_id: "问题十二",
236
+ priority: "P0",
237
+ template_layer: {
238
+ required: true,
239
+ assets: [
240
+ { path: "templates/knowledge/rules/验证契约规则.md", asset_kind: "knowledge_rule", consumption_mode: "required" },
241
+ { path: "templates/knowledge/checklists/验证验收清单.md", asset_kind: "checklist", consumption_mode: "supporting" },
242
+ ],
243
+ injected_routes: ["code_execution", "multi_stage_plan"],
244
+ injected_workflows: ["verification", "delivery"],
245
+ target_hosts: ["claude_code"],
246
+ language_policy: "zh_first",
247
+ },
248
+ enforcement_layer: {
249
+ required: true,
250
+ enforcers: ["src/engine/verifier.ts"],
251
+ registries: ["mechanism_contract_registry"],
252
+ entrypoints: ["generateVerifyCommands"],
253
+ state_effects: ["verify → learn", "main_path_integration_failed → retrying"],
254
+ hard_fail_conditions: ["build failed", "tests failed", "integration check failed"],
255
+ degradation_behavior: "无 build/test 命令时降级为 plan_only,不阻断",
256
+ },
257
+ evidence_layer: {
258
+ outputs: ["VerifyResult", "evidence"],
259
+ reports: ["VerificationReport", "CorePrinciplesReport"],
260
+ diagnostic_codes: ["verification-strategy-mismatch", "evidence-level-insufficient"],
261
+ task_context_facts: ["verification_result", "build_passed", "tests_passed"],
262
+ },
263
+ verification_layer: {
264
+ tests: ["tests/engine/verifier_phase25.test.ts"],
265
+ runtime_checks: ["verification_gate"],
266
+ regression_cases: ["verify_generates_correct_commands", "verify_handles_no_build_gracefully"],
267
+ drift_checks: ["verify_output_matches_acceptance"],
268
+ },
269
+ status: "dual_layer_enforced",
270
+ },
271
+ // ── 6. 主链路接入 ──
272
+ {
273
+ mechanism_id: "mc-main-path-integration",
274
+ mechanism_name: "主链路接入防孤岛",
275
+ owner_issue_id: "问题四十四",
276
+ priority: "P0",
277
+ template_layer: {
278
+ required: true,
279
+ assets: [
280
+ { path: "templates/knowledge/rules/防孤岛实现规则.md", asset_kind: "knowledge_rule", consumption_mode: "required" },
281
+ { path: "templates/knowledge/procedures/主链路接入验证流程.md", asset_kind: "pipeline_procedure", consumption_mode: "required" },
282
+ { path: "templates/knowledge/checklists/主链路接入验收清单.md", asset_kind: "checklist", consumption_mode: "supporting" },
283
+ ],
284
+ injected_routes: ["code_execution", "multi_stage_plan"],
285
+ injected_workflows: ["verification", "delivery"],
286
+ target_hosts: ["claude_code"],
287
+ language_policy: "zh_first",
288
+ },
289
+ enforcement_layer: {
290
+ required: true,
291
+ enforcers: ["src/engine/main_path_integration_contract.ts"],
292
+ registries: ["main_path_integration_contract"],
293
+ entrypoints: ["orphanGate", "auditIntegration", "validateMainPathIntegration"],
294
+ state_effects: ["orphan detected → retrying", "integration_passed → done"],
295
+ hard_fail_conditions: ["orphan module detected", "integration test missing for non-trivial module"],
296
+ degradation_behavior: "integration check 不可用时降级为 advisory",
297
+ },
298
+ evidence_layer: {
299
+ outputs: ["IntegrationAuditReport", "IntegrationFinding", "orphan_id"],
300
+ reports: ["IntegrationReport"],
301
+ diagnostic_codes: ["orphan-module", "test-only-module", "unreachable-capability"],
302
+ task_context_facts: ["integration_result", "orphan_modules"],
303
+ },
304
+ verification_layer: {
305
+ tests: ["tests/adapters/main_path_integration_gate.test.ts"],
306
+ runtime_checks: ["orphan_scan", "reachability_scan"],
307
+ regression_cases: ["new_module_must_have_integration_test", "no_orphan_allowed"],
308
+ drift_checks: ["integration_coverage_matches_registry"],
309
+ },
310
+ status: "dual_layer_enforced",
311
+ },
312
+ // ── 7. 隐私边界 ──
313
+ {
314
+ mechanism_id: "mc-privacy-boundary",
315
+ mechanism_name: "隐私/敏感信息边界",
316
+ owner_issue_id: "问题三十二",
317
+ priority: "P1",
318
+ template_layer: {
319
+ required: true,
320
+ assets: [
321
+ { path: "templates/knowledge/rules/敏感信息处理规则.md", asset_kind: "knowledge_rule", consumption_mode: "required" },
322
+ { path: "templates/knowledge/checklists/隐私审查清单.md", asset_kind: "checklist", consumption_mode: "supporting" },
323
+ ],
324
+ injected_routes: ["code_execution", "source_extraction", "read_only_analysis"],
325
+ injected_workflows: ["code_change", "review"],
326
+ target_hosts: ["claude_code"],
327
+ language_policy: "zh_first",
328
+ },
329
+ enforcement_layer: {
330
+ required: true,
331
+ enforcers: ["src/engine/privacy_secret_contract.ts", "src/engine/scope_controller.ts"],
332
+ registries: ["privacy_secret_contract", "capability_registry"],
333
+ entrypoints: ["scanTextSensitivity", "evaluatePrivacyGate", "redactSensitiveText"],
334
+ state_effects: ["secret detected → read blocked", "redaction applied to prompt"],
335
+ hard_fail_conditions: ["secret in prompt", "PII not redacted", "forbidden source read"],
336
+ degradation_behavior: "privacy scanner 不可用时保守阻断",
337
+ },
338
+ evidence_layer: {
339
+ outputs: ["RedactionRecord", "PrivacyFinding"],
340
+ reports: ["PrivacyBoundaryReport"],
341
+ diagnostic_codes: ["secret-leak", "pii-exposure"],
342
+ task_context_facts: ["sensitivity_labels", "redaction_records"],
343
+ },
344
+ verification_layer: {
345
+ tests: ["tests/engine/privacy_secret_contract.test.ts"],
346
+ runtime_checks: ["secret_scan", "pii_detection"],
347
+ regression_cases: ["env_file_blocked", "token_redacted", ".ssh_forbidden"],
348
+ drift_checks: ["privacy_rules_match_code_patterns"],
349
+ },
350
+ status: "dual_layer_enforced",
351
+ },
352
+ // ── 8. 命令执行契约 ──
353
+ {
354
+ mechanism_id: "mc-command-execution",
355
+ mechanism_name: "命令执行契约",
356
+ owner_issue_id: "问题三十三",
357
+ priority: "P1",
358
+ template_layer: {
359
+ required: true,
360
+ assets: [
361
+ { path: "templates/knowledge/rules/命令执行规则.md", asset_kind: "knowledge_rule", consumption_mode: "required" },
362
+ { path: "templates/knowledge/procedures/命令执行流程.md", asset_kind: "pipeline_procedure", consumption_mode: "supporting" },
363
+ ],
364
+ injected_routes: ["code_execution"],
365
+ injected_workflows: ["verification"],
366
+ target_hosts: ["claude_code"],
367
+ language_policy: "zh_first",
368
+ },
369
+ enforcement_layer: {
370
+ required: true,
371
+ enforcers: ["src/engine/command_execution_contract.ts"],
372
+ registries: ["command_execution_contract"],
373
+ entrypoints: ["classifyCommand", "validateCommandExecution"],
374
+ state_effects: ["destructive command → must_confirm", "unclassified command → blocked"],
375
+ hard_fail_conditions: ["destructive command without confirmation", "unclassified command"],
376
+ degradation_behavior: "command classifier 不可用时降级为 advisory",
377
+ },
378
+ evidence_layer: {
379
+ outputs: ["CommandClassification", "CommandExecutionResult"],
380
+ reports: ["CommandExecutionReport"],
381
+ diagnostic_codes: ["destructive-command", "unclassified-command"],
382
+ task_context_facts: ["command_tier", "command_classification"],
383
+ },
384
+ verification_layer: {
385
+ tests: ["tests/engine/command_execution_contract.test.ts"],
386
+ runtime_checks: ["command_classification_gate"],
387
+ regression_cases: ["destructive_commands_blocked", "unclassified_command_rejected"],
388
+ drift_checks: ["command_rules_match_classifier"],
389
+ },
390
+ status: "dual_layer_enforced",
391
+ },
392
+ // ── 9. 核心工程执行原则 ──
393
+ {
394
+ mechanism_id: "mc-core-engineering-principles",
395
+ mechanism_name: "核心工程执行原则",
396
+ owner_issue_id: "问题四十六",
397
+ priority: "P0",
398
+ template_layer: {
399
+ required: true,
400
+ assets: [
401
+ { path: "templates/knowledge/rules/核心工程执行原则.md", asset_kind: "knowledge_rule", consumption_mode: "required" },
402
+ { path: "templates/knowledge/checklists/核心工程执行验收清单.md", asset_kind: "checklist", consumption_mode: "supporting" },
403
+ { path: "templates/knowledge/procedures/编码前澄清流程.md", asset_kind: "pipeline_procedure", consumption_mode: "supporting" },
404
+ ],
405
+ injected_routes: ["code_execution", "multi_stage_plan", "single_artifact"],
406
+ injected_workflows: ["code_change", "verification", "review"],
407
+ target_hosts: ["claude_code"],
408
+ language_policy: "zh_first",
409
+ },
410
+ enforcement_layer: {
411
+ required: true,
412
+ enforcers: ["src/engine/core_engineering_principles.ts"],
413
+ registries: ["mechanism_contract_registry"],
414
+ entrypoints: ["checkCorePrinciples", "validateAntiCircumvention"],
415
+ state_effects: ["principles_failed → repair_reverify", "principles_passed → advance"],
416
+ hard_fail_conditions: ["required principle failed at L2+", "pseudo-satisfaction detected"],
417
+ degradation_behavior: "principles module 不可用时降级为 advisory,不阻断",
418
+ },
419
+ evidence_layer: {
420
+ outputs: ["CorePrinciplesReport", "ClarificationNeed", "AssumptionRecord", "GoalDefinition"],
421
+ reports: ["CorePrinciplesCheckResult"],
422
+ diagnostic_codes: ["principle-violation", "pseudo-satisfaction", "missing-goal-definition"],
423
+ task_context_facts: ["core_principles_result", "task_level"],
424
+ },
425
+ verification_layer: {
426
+ tests: ["tests/engine/core_engineering_principles.test.ts"],
427
+ runtime_checks: ["principle_gate_at_verify"],
428
+ regression_cases: ["L2_requires_all_principles", "anti_circumvention_catches_pseudo"],
429
+ drift_checks: ["principle_rules_match_code_checks"],
430
+ },
431
+ status: "dual_layer_enforced",
432
+ },
433
+ // ── 10. 交付门禁(补齐) ──
434
+ {
435
+ mechanism_id: "mc-delivery-gate",
436
+ mechanism_name: "交付门禁",
437
+ owner_issue_id: "问题十二",
438
+ priority: "P0",
439
+ template_layer: {
440
+ required: true,
441
+ assets: [
442
+ { path: "templates/knowledge/procedures/验证计划流程.md", asset_kind: "pipeline_procedure", consumption_mode: "required" },
443
+ ],
444
+ injected_routes: ["code_execution", "multi_stage_plan"],
445
+ injected_workflows: ["delivery"],
446
+ target_hosts: ["claude_code"],
447
+ language_policy: "zh_first",
448
+ },
449
+ enforcement_layer: {
450
+ required: true,
451
+ enforcers: ["src/engine/delivery.ts"],
452
+ registries: ["mechanism_contract_registry"],
453
+ entrypoints: ["deliver", "generateChangelogEntry"],
454
+ state_effects: ["delivery_ready → deliver", "delivery_blocked → retrying"],
455
+ hard_fail_conditions: ["delivery without verification", "active write lease conflict"],
456
+ degradation_behavior: "delivery module 不可用时降级为 manual_required",
457
+ },
458
+ evidence_layer: {
459
+ outputs: ["DeliveryResult", "ArtifactVerificationResult"],
460
+ reports: ["DeliveryReadinessReport"],
461
+ diagnostic_codes: ["delivery-without-verify", "lease-conflict"],
462
+ task_context_facts: ["delivery_status", "artifact_status"],
463
+ },
464
+ verification_layer: {
465
+ tests: ["tests/engine/delivery.test.ts"],
466
+ runtime_checks: ["delivery_readiness_gate"],
467
+ regression_cases: ["cannot_deliver_without_verify", "lease_conflict_blocks_delivery"],
468
+ drift_checks: ["delivery_contract_matches_verifier_output"],
469
+ },
470
+ status: "dual_layer_enforced",
471
+ },
472
+ // ── 11. 任务上下文生命周期(补齐) ──
473
+ {
474
+ mechanism_id: "mc-task-context-lifecycle",
475
+ mechanism_name: "任务上下文生命周期",
476
+ owner_issue_id: "问题十七",
477
+ priority: "P1",
478
+ template_layer: {
479
+ required: false,
480
+ assets: [
481
+ { path: "templates/knowledge/patterns/core/任务上下文生命周期.md", asset_kind: "capability_knowledge_doc", consumption_mode: "supporting" },
482
+ ],
483
+ injected_routes: ["code_execution", "multi_stage_plan", "read_only_analysis"],
484
+ injected_workflows: ["code_change", "verification", "delivery"],
485
+ target_hosts: ["claude_code"],
486
+ language_policy: "zh_first",
487
+ },
488
+ enforcement_layer: {
489
+ required: true,
490
+ enforcers: ["src/engine/task_context.ts"],
491
+ registries: ["mechanism_contract_registry"],
492
+ entrypoints: ["create", "updateStatus", "load"],
493
+ state_effects: ["status transitions", "fact accumulation"],
494
+ hard_fail_conditions: ["invalid status transition", "stdout/stderr in TaskContext"],
495
+ degradation_behavior: "TaskContext 不可用时降级为无状态模式",
496
+ },
497
+ evidence_layer: {
498
+ outputs: ["TaskContext"],
499
+ reports: ["TaskContextSnapshot"],
500
+ diagnostic_codes: ["invalid-transition", "forbidden-field"],
501
+ task_context_facts: ["status", "verification_result", "injection_report"],
502
+ },
503
+ verification_layer: {
504
+ tests: ["tests/engine/task_context.test.ts"],
505
+ runtime_checks: ["status_transition_gate"],
506
+ regression_cases: ["no_invalid_transition", "no_stdout_in_context"],
507
+ drift_checks: ["context_fields_match_spec"],
508
+ },
509
+ status: "dual_layer_enforced",
510
+ },
511
+ // ── 12. 执行守卫评估(补齐) ──
512
+ {
513
+ mechanism_id: "mc-guard-evaluation",
514
+ mechanism_name: "执行守卫评估",
515
+ owner_issue_id: "问题十一",
516
+ priority: "P2",
517
+ template_layer: {
518
+ required: true,
519
+ assets: [
520
+ { path: "templates/knowledge/rules/执行守卫评估规则.md", asset_kind: "knowledge_rule", consumption_mode: "required" },
521
+ ],
522
+ injected_routes: ["code_execution", "multi_stage_plan"],
523
+ injected_workflows: ["code_change", "verification"],
524
+ target_hosts: ["claude_code"],
525
+ language_policy: "zh_first",
526
+ },
527
+ enforcement_layer: {
528
+ required: true,
529
+ enforcers: ["src/engine/verifier.ts"],
530
+ registries: ["mechanism_contract_registry"],
531
+ entrypoints: ["generateVerifyCommands"],
532
+ state_effects: ["guard_evaluation_executed"],
533
+ hard_fail_conditions: ["guard_bypass"],
534
+ degradation_behavior: "guard 评估集成在各契约内,无独立降级",
535
+ },
536
+ evidence_layer: {
537
+ outputs: ["VerifyResult"],
538
+ reports: ["GuardEvaluationReport"],
539
+ diagnostic_codes: ["guard-failure"],
540
+ task_context_facts: ["guard_status"],
541
+ },
542
+ verification_layer: {
543
+ tests: ["tests/engine/verifier_phase25.test.ts"],
544
+ runtime_checks: ["guard_evaluation_gate"],
545
+ regression_cases: ["guard_blocks_execution"],
546
+ drift_checks: ["guard_rules_match_verifier"],
547
+ },
548
+ status: "dual_layer_enforced",
549
+ },
550
+ // ── 13. 注册表基础设施(补齐) ──
551
+ {
552
+ mechanism_id: "mc-registry-infrastructure",
553
+ mechanism_name: "注册表基础设施",
554
+ owner_issue_id: "问题五",
555
+ priority: "P2",
556
+ template_layer: {
557
+ required: true,
558
+ assets: [
559
+ { path: "templates/knowledge/rules/注册表基础设施规则.md", asset_kind: "knowledge_rule", consumption_mode: "required" },
560
+ ],
561
+ injected_routes: ["operation"],
562
+ injected_workflows: ["init"],
563
+ target_hosts: ["claude_code"],
564
+ language_policy: "zh_first",
565
+ },
566
+ enforcement_layer: {
567
+ required: true,
568
+ enforcers: [
569
+ "src/engine/mechanism_contract_registry.ts",
570
+ "src/engine/consumable_asset_registry.ts",
571
+ ],
572
+ registries: ["mechanism_contract_registry", "consumable_asset_registry"],
573
+ entrypoints: ["listMechanismContracts", "listBuiltinConsumableAssets"],
574
+ state_effects: ["contract registration", "asset discovery"],
575
+ hard_fail_conditions: ["registry entry missing lifecycle test"],
576
+ degradation_behavior: "registry 不可用时整体降级",
577
+ },
578
+ evidence_layer: {
579
+ outputs: ["MechanismContract[]", "ConsumableAssetRef[]"],
580
+ reports: ["RegistryHealthReport"],
581
+ diagnostic_codes: ["missing-lifecycle-test"],
582
+ task_context_facts: [],
583
+ },
584
+ verification_layer: {
585
+ tests: ["tests/engine/mechanism_contract_registry.test.ts", "tests/engine/consumable_asset_registry.test.ts"],
586
+ runtime_checks: ["registry_health_check"],
587
+ regression_cases: ["all_contracts_have_lifecycle_tests"],
588
+ drift_checks: ["registry_entries_match_code_modules"],
589
+ },
590
+ status: "dual_layer_enforced",
591
+ },
592
+ // ── 14. 零配置初始化 ──
593
+ {
594
+ mechanism_id: "mc-zero-config-init",
595
+ mechanism_name: "零配置初始化",
596
+ owner_issue_id: "问题六",
597
+ priority: "P1",
598
+ template_layer: {
599
+ required: true,
600
+ assets: [
601
+ { path: "templates/knowledge/rules/零配置初始化规则.md", asset_kind: "knowledge_rule", consumption_mode: "required" },
602
+ ],
603
+ injected_routes: ["operation"],
604
+ injected_workflows: ["init"],
605
+ target_hosts: ["claude_code"],
606
+ language_policy: "zh_first",
607
+ },
608
+ enforcement_layer: {
609
+ required: true,
610
+ enforcers: ["src/engine/zero_config_init.ts"],
611
+ registries: ["mechanism_contract_registry"],
612
+ entrypoints: ["detectFingerprint", "generateConfigDraft", "validateConfigDraft"],
613
+ state_effects: ["config_initialized"],
614
+ hard_fail_conditions: ["init without config validation"],
615
+ degradation_behavior: "降级为手动配置",
616
+ },
617
+ evidence_layer: {
618
+ outputs: ["ProjectConfig"],
619
+ reports: ["InitReport"],
620
+ diagnostic_codes: ["config-missing-field"],
621
+ task_context_facts: ["init_status"],
622
+ },
623
+ verification_layer: {
624
+ tests: ["tests/engine/zero_config_init.test.ts"],
625
+ runtime_checks: ["init_config_valid"],
626
+ regression_cases: ["init_without_interactive"],
627
+ drift_checks: ["init_fields_match_config"],
628
+ },
629
+ status: "dual_layer_enforced",
630
+ },
631
+ // ── 15. 输入材料契约 ──
632
+ {
633
+ mechanism_id: "mc-input-material-contract",
634
+ mechanism_name: "输入材料契约",
635
+ owner_issue_id: "问题二十三",
636
+ priority: "P0",
637
+ template_layer: {
638
+ required: true,
639
+ assets: [
640
+ { path: "templates/knowledge/rules/输入材料契约规则.md", asset_kind: "knowledge_rule", consumption_mode: "required" },
641
+ ],
642
+ injected_routes: ["code_execution", "read_only_analysis", "source_extraction"],
643
+ injected_workflows: ["expand", "privacy_gate"],
644
+ target_hosts: ["claude_code"],
645
+ language_policy: "zh_first",
646
+ },
647
+ enforcement_layer: {
648
+ required: true,
649
+ enforcers: ["src/engine/input_material_contract_registry.ts"],
650
+ registries: ["mechanism_contract_registry"],
651
+ entrypoints: ["canSupportStrongConclusion", "isWriteAllowed"],
652
+ state_effects: ["material_validated"],
653
+ hard_fail_conditions: ["unregistered material source"],
654
+ degradation_behavior: "降级为宽松模式",
655
+ },
656
+ evidence_layer: {
657
+ outputs: ["InputMaterialContract[]"],
658
+ reports: ["MaterialValidationReport"],
659
+ diagnostic_codes: ["unregistered-material"],
660
+ task_context_facts: ["material_status"],
661
+ },
662
+ verification_layer: {
663
+ tests: ["tests/engine/input_material_contract_registry.test.ts"],
664
+ runtime_checks: ["material_contract_valid"],
665
+ regression_cases: ["unregistered_source_blocked"],
666
+ drift_checks: ["material_types_match_registry"],
667
+ },
668
+ status: "dual_layer_enforced",
669
+ },
670
+ // ── 16. 用户反馈契约(/四十四) ──
671
+ {
672
+ mechanism_id: "mc-user-feedback",
673
+ mechanism_name: "用户反馈契约",
674
+ owner_issue_id: "问题二十九",
675
+ priority: "P1",
676
+ template_layer: {
677
+ required: true,
678
+ assets: [
679
+ { path: "templates/knowledge/rules/用户反馈契约规则.md", asset_kind: "knowledge_rule", consumption_mode: "required" },
680
+ ],
681
+ injected_routes: ["code_execution"],
682
+ injected_workflows: ["verify", "deliver"],
683
+ target_hosts: ["claude_code"],
684
+ language_policy: "zh_first",
685
+ },
686
+ enforcement_layer: {
687
+ required: true,
688
+ enforcers: ["src/engine/user_feedback_contract.ts"],
689
+ registries: ["mechanism_contract_registry"],
690
+ entrypoints: ["createUserFeedbackMessage", "validateUserFeedbackContract", "getAllowedFeedbackKinds"],
691
+ state_effects: ["feedback_generated"],
692
+ hard_fail_conditions: ["forbidden wording in feedback", "verification_summary masking"],
693
+ degradation_behavior: "降级为简单消息",
694
+ },
695
+ evidence_layer: {
696
+ outputs: ["UserFeedbackMessage[]", "UserFeedbackGovernanceFinding[]"],
697
+ reports: ["FeedbackValidationReport"],
698
+ diagnostic_codes: ["forbidden-wording", "severity-mismatch"],
699
+ task_context_facts: ["feedback_status"],
700
+ },
701
+ verification_layer: {
702
+ tests: ["tests/engine/user_feedback_contract.test.ts"],
703
+ runtime_checks: ["feedback_contract_valid"],
704
+ regression_cases: ["blocked_kind_for_verify"],
705
+ drift_checks: ["feedback_kinds_match_tools"],
706
+ },
707
+ status: "dual_layer_enforced",
708
+ },
709
+ // ── 17. 产物契约 ──
710
+ {
711
+ mechanism_id: "mc-artifact-contract",
712
+ mechanism_name: "产物契约",
713
+ owner_issue_id: "问题二十四",
714
+ priority: "P1",
715
+ template_layer: {
716
+ required: true,
717
+ assets: [
718
+ { path: "templates/knowledge/rules/产物契约规则.md", asset_kind: "knowledge_rule", consumption_mode: "required" },
719
+ ],
720
+ injected_routes: ["code_execution", "single_artifact"],
721
+ injected_workflows: ["expand", "deliver"],
722
+ target_hosts: ["claude_code"],
723
+ language_policy: "zh_first",
724
+ },
725
+ enforcement_layer: {
726
+ required: true,
727
+ enforcers: ["src/engine/artifact_contract_registry.ts"],
728
+ registries: ["mechanism_contract_registry"],
729
+ entrypoints: ["canTransition", "transitionRequiresVerification"],
730
+ state_effects: ["artifact_created"],
731
+ hard_fail_conditions: ["artifact without contract", "overwrite without policy"],
732
+ degradation_behavior: "降级为手动产物管理",
733
+ },
734
+ evidence_layer: {
735
+ outputs: ["ArtifactContract[]", "OutputArtifact"],
736
+ reports: ["ArtifactValidationReport"],
737
+ diagnostic_codes: ["missing-contract", "overwrite-violation"],
738
+ task_context_facts: ["artifact_status"],
739
+ },
740
+ verification_layer: {
741
+ tests: ["tests/engine/artifact_contract_registry.test.ts"],
742
+ runtime_checks: ["artifact_contract_valid"],
743
+ regression_cases: ["no_artifact_without_contract"],
744
+ drift_checks: ["artifact_types_match_registry"],
745
+ },
746
+ status: "dual_layer_enforced",
747
+ },
748
+ // ── 18. 配置优先级契约 ──
749
+ {
750
+ mechanism_id: "mc-config-precedence",
751
+ mechanism_name: "配置优先级契约",
752
+ owner_issue_id: "问题三十七",
753
+ priority: "P1",
754
+ template_layer: {
755
+ required: true,
756
+ assets: [
757
+ { path: "templates/knowledge/rules/配置优先级规则.md", asset_kind: "knowledge_rule", consumption_mode: "required" },
758
+ ],
759
+ injected_routes: ["operation"],
760
+ injected_workflows: ["init", "config"],
761
+ target_hosts: ["claude_code"],
762
+ language_policy: "zh_first",
763
+ },
764
+ enforcement_layer: {
765
+ required: true,
766
+ enforcers: ["src/engine/config_precedence_contract.ts"],
767
+ registries: ["mechanism_contract_registry"],
768
+ entrypoints: ["listPrecedenceRules", "getPrecedenceRank"],
769
+ state_effects: ["config_resolved"],
770
+ hard_fail_conditions: ["invalid source override", "circular dependency"],
771
+ degradation_behavior: "降级为默认配置",
772
+ },
773
+ evidence_layer: {
774
+ outputs: ["ConfigPrecedenceResult"],
775
+ reports: ["PrecedenceReport"],
776
+ diagnostic_codes: ["invalid-override", "circular-dep"],
777
+ task_context_facts: ["config_source"],
778
+ },
779
+ verification_layer: {
780
+ tests: ["tests/engine/config_precedence_contract.test.ts"],
781
+ runtime_checks: ["precedence_valid"],
782
+ regression_cases: ["no_circular_deps"],
783
+ drift_checks: ["precedence_rules_match_config"],
784
+ },
785
+ status: "dual_layer_enforced",
786
+ },
787
+ ];
788
+ // ── 查询函数 ──
789
+ /**
790
+ * 列出所有机制的层级映射。
791
+ * @returns 机制层级映射列表
792
+ */
793
+ export function listMechanismLayerMaps() {
794
+ console.error("[soloForge] 双层机制: listMechanismLayerMaps() — 共", MECHANISM_CONTRACTS.length, "个契约");
795
+ return MECHANISM_CONTRACTS.map(contractToLayerMap);
796
+ }
797
+ /**
798
+ * 根据机制 ID 查找层级映射。
799
+ * @param id - 机制 ID
800
+ * @returns 机制层级映射,未找到时返回 undefined
801
+ */
802
+ export function findLayerMapByMechanismId(id) {
803
+ console.error("[soloForge] 双层机制: findLayerMapByMechanismId() — id:", id);
804
+ return MECHANISM_CONTRACTS.map(contractToLayerMap).find((m) => m.mechanism_id === id);
805
+ }
806
+ /**
807
+ * 按优先级列出机制层级映射。
808
+ * @param priority - 优先级(P0/P1/P2/P3)
809
+ * @returns 指定优先级的机制层级映射列表
810
+ */
811
+ export function listLayerMapsByPriority(priority) {
812
+ console.error("[soloForge] 双层机制: listLayerMapsByPriority() — priority:", priority);
813
+ return MECHANISM_CONTRACTS.map(contractToLayerMap).filter((m) => m.priority === priority);
814
+ }
815
+ /**
816
+ * 按状态列出机制层级映射。
817
+ * @param status - 双层机制状态
818
+ * @returns 指定状态的机制层级映射列表
819
+ */
820
+ export function listLayerMapsByStatus(status) {
821
+ console.error("[soloForge] 双层机制: listLayerMapsByStatus() — status:", status);
822
+ return MECHANISM_CONTRACTS.map(contractToLayerMap).filter((m) => m.status === status);
823
+ }
824
+ /**
825
+ * 检查机制的双层完整性。
826
+ * 验证模板层、代码层、证据、测试和注册表是否齐全。
827
+ * @param map - 机制层级映射
828
+ * @returns 双层完整性检查结果
829
+ */
830
+ export function checkDualLayerCompleteness(map) {
831
+ console.error("[soloForge] 双层机制: checkDualLayerCompleteness() — mechanism_id:", map.mechanism_id);
832
+ const missing = [];
833
+ const has_template_layer = map.template_assets.length > 0;
834
+ const has_code_layer = map.code_enforcers.length > 0;
835
+ const has_evidence = map.evidence_outputs.length > 0;
836
+ const has_tests = map.tests.length > 0;
837
+ const has_registries = map.registries.length > 0;
838
+ if (!has_template_layer)
839
+ missing.push("template_layer");
840
+ if (!has_code_layer)
841
+ missing.push("code_layer");
842
+ if (!has_evidence)
843
+ missing.push("evidence");
844
+ if (!has_tests)
845
+ missing.push("tests");
846
+ if (!has_registries)
847
+ missing.push("registries");
848
+ if (missing.length > 0) {
849
+ console.error("[soloForge] 双层机制: 完整性缺失 —", map.mechanism_id, "missing:", missing.join(", "));
850
+ }
851
+ return {
852
+ mechanism_id: map.mechanism_id,
853
+ has_template_layer,
854
+ has_code_layer,
855
+ has_evidence,
856
+ has_tests,
857
+ has_registries,
858
+ is_complete: missing.length === 0,
859
+ missing,
860
+ };
861
+ }
862
+ // ── 基础设施文件豁免(这些是注册表本身,不在其他注册表中追踪) ──
863
+ const INFRASTRUCTURE_EXCEPTIONS = new Set([
864
+ "src/engine/dual_layer_mechanism_registry.ts",
865
+ "src/engine/mechanism_contract_registry.ts",
866
+ "src/engine/consumable_asset_registry.ts",
867
+ ]);
868
+ // ── 治理验证 ──
869
+ /**
870
+ * 验证机制层级映射的合规性。
871
+ * 检查 ID 唯一性、模板/代码缺口、文件存在性、入口点等。
872
+ * @param maps - 机制层级映射列表(默认使用所有契约)
873
+ * @param rootDir - 项目根目录(默认当前目录)
874
+ * @param options.batch1_mode - 是否启用 batch1 模式(可选)
875
+ * @returns 治理发现列表
876
+ */
877
+ export function validateMechanismLayerMaps(maps = MECHANISM_CONTRACTS.map(contractToLayerMap), rootDir = process.cwd(), options) {
878
+ const findings = [];
879
+ const seenIds = new Set();
880
+ console.error(`[soloForge] 双层机制: 开始治理验证 — 共 ${maps.length} 个机制`);
881
+ // 预加载消费资产路径用于交叉验证
882
+ const consumablePaths = new Set(listBuiltinConsumableAssets().map((a) => a.path));
883
+ // 预加载已知机制 ID 用于孤立执行器检查
884
+ const knownMechanismIds = new Set(listMechanismContracts().map((c) => c.id));
885
+ const knownCapabilityIds = new Set(getAllCapabilities().map((c) => c.id));
886
+ for (const m of maps) {
887
+ // 重复 ID
888
+ if (seenIds.has(m.mechanism_id)) {
889
+ findings.push({
890
+ severity: "hard_fail",
891
+ mechanism_id: m.mechanism_id,
892
+ finding_type: "drift_gap",
893
+ message: `Duplicate mechanism_id: ${m.mechanism_id}`,
894
+ });
895
+ }
896
+ seenIds.add(m.mechanism_id);
897
+ // 模板缺口: 有代码执行器但无模板资产
898
+ if (m.code_enforcers.length > 0 && m.template_assets.length === 0) {
899
+ findings.push({
900
+ severity: m.status === "code_only_enforced" ? "advisory" : "hard_fail",
901
+ mechanism_id: m.mechanism_id,
902
+ finding_type: "template_gap",
903
+ message: `机制 ${m.mechanism_id} 有代码执行器但无模板资产 (template_gap)`,
904
+ });
905
+ }
906
+ // 代码缺口: 有模板资产但无代码执行器
907
+ if (m.template_assets.length > 0 && m.code_enforcers.length === 0) {
908
+ findings.push({
909
+ severity: "hard_fail",
910
+ mechanism_id: m.mechanism_id,
911
+ finding_type: "code_gap",
912
+ message: `机制 ${m.mechanism_id} 有模板资产但无代码执行器 (code_gap)`,
913
+ });
914
+ }
915
+ // 证据缺口
916
+ if (m.code_enforcers.length > 0 && m.evidence_outputs.length === 0) {
917
+ findings.push({
918
+ severity: "advisory",
919
+ mechanism_id: m.mechanism_id,
920
+ finding_type: "evidence_gap",
921
+ message: `机制 ${m.mechanism_id} 有代码执行器但无证据输出`,
922
+ });
923
+ }
924
+ // 测试缺口: 未声明测试
925
+ if (m.code_enforcers.length > 0 && m.tests.length === 0) {
926
+ findings.push({
927
+ severity: "hard_fail",
928
+ mechanism_id: m.mechanism_id,
929
+ finding_type: "test_gap",
930
+ message: `机制 ${m.mechanism_id} 有代码执行器但无测试`,
931
+ });
932
+ }
933
+ // 模板资产: 检查文件是否存在 + 消费资产注册表交叉验证
934
+ for (const ta of m.template_assets) {
935
+ // P0/P1/dual_layer_enforced 的资产文件必须存在
936
+ if (!fs.existsSync(path.join(rootDir, ta.path))) {
937
+ const severity = (m.priority === "P0" || m.priority === "P1" || m.status === "dual_layer_enforced")
938
+ ? "hard_fail" : "advisory";
939
+ findings.push({
940
+ severity,
941
+ mechanism_id: m.mechanism_id,
942
+ finding_type: "asset_unconsumed",
943
+ message: `模板资产文件不存在: ${ta.path}${severity === "hard_fail" ? " (P0/P1/dual_layer_enforced 必须)" : ""}`,
944
+ });
945
+ }
946
+ // 与消费资产注册表交叉验证
947
+ if (!consumablePaths.has(ta.path)) {
948
+ findings.push({
949
+ severity: "hard_fail",
950
+ mechanism_id: m.mechanism_id,
951
+ finding_type: "asset_unconsumed",
952
+ message: `模板资产 ${ta.path} 存在但未在 Consumable Asset Registry 中注册`,
953
+ });
954
+ }
955
+ }
956
+ // 检查代码执行器文件是否存在于磁盘
957
+ for (const ce of m.code_enforcers) {
958
+ if (!fs.existsSync(path.join(rootDir, ce))) {
959
+ findings.push({
960
+ severity: "hard_fail",
961
+ mechanism_id: m.mechanism_id,
962
+ finding_type: "code_gap",
963
+ message: `代码执行器文件不存在: ${ce}`,
964
+ });
965
+ }
966
+ }
967
+ // 检查测试文件是否存在于磁盘 — dual_layer_enforced 为 hard_fail
968
+ for (const t of m.tests) {
969
+ if (!fs.existsSync(path.join(rootDir, t))) {
970
+ const severity = m.status === "dual_layer_enforced" ? "hard_fail" : "advisory";
971
+ findings.push({
972
+ severity,
973
+ mechanism_id: m.mechanism_id,
974
+ finding_type: "test_gap",
975
+ message: `测试文件不存在: ${t}${severity === "hard_fail" ? " (dual_layer_enforced 必须)" : ""}`,
976
+ });
977
+ }
978
+ }
979
+ // 检查代码入口点是否存在于执行器文件中
980
+ if (m.code_entrypoints.length > 0 && m.code_enforcers.length > 0) {
981
+ for (const ep of m.code_entrypoints) {
982
+ let found = false;
983
+ for (const enforcer of m.code_enforcers) {
984
+ const enforcerPath = path.join(rootDir, enforcer);
985
+ if (fs.existsSync(enforcerPath)) {
986
+ const content = fs.readFileSync(enforcerPath, "utf-8");
987
+ if (content.includes(ep) && /export\s+(function|const|async\s+function|class)\s+/.test(content.split(ep)[0].slice(-50) + "export " + ep)) {
988
+ found = true;
989
+ break;
990
+ }
991
+ // 简单检查: 仅查找导出名称
992
+ const exportPattern = new RegExp(`export\\s+(async\\s+)?(function|const|class|type|interface)\\s+${ep}\\b`);
993
+ if (exportPattern.test(content)) {
994
+ found = true;
995
+ break;
996
+ }
997
+ // 更简单: 仅检查名称是否作为导出存在
998
+ if (content.includes(ep)) {
999
+ found = true;
1000
+ break;
1001
+ }
1002
+ }
1003
+ }
1004
+ if (!found) {
1005
+ findings.push({
1006
+ severity: "hard_fail",
1007
+ mechanism_id: m.mechanism_id,
1008
+ finding_type: "entrypoint_not_found",
1009
+ message: `代码入口点 ${ep} 在所有强制层文件中未找到`,
1010
+ });
1011
+ }
1012
+ }
1013
+ }
1014
+ // 注册表名称验证: 注册表必须是已知名称
1015
+ for (const reg of m.registries) {
1016
+ if (!KNOWN_REGISTRIES.has(reg)) {
1017
+ findings.push({
1018
+ severity: "hard_fail",
1019
+ mechanism_id: m.mechanism_id,
1020
+ finding_type: "drift_gap",
1021
+ message: `registry "${reg}" 不是已知 registry,机制 ${m.mechanism_id} 声明了不存在的 registry`,
1022
+ });
1023
+ }
1024
+ }
1025
+ // 孤立执行器检查: 不可达的代码执行器文件
1026
+ // 来自机制契约注册表、能力注册表或工作流注册表
1027
+ const workflowMechanismIds = new Set(listWorkflowContracts().flatMap((w) => w.required_mechanisms));
1028
+ for (const ce of m.code_enforcers) {
1029
+ const ceNorm = ce.replace(/\\/g, "/");
1030
+ const isKnown = knownMechanismIds.size > 0 && listMechanismContracts().some((mc) => mc.owner_module.replace(/\\/g, "/") === ceNorm);
1031
+ const isCapKnown = knownCapabilityIds.size > 0 && getAllCapabilities().some((cap) => cap.code_files.some((cf) => cf.replace(/\\/g, "/") === ceNorm));
1032
+ // 检查此机制是否被任何工作流的 required_mechanisms 引用
1033
+ const isWorkflowKnown = workflowMechanismIds.has(m.mechanism_id);
1034
+ // 如果执行器文件存在但未在任何注册表中找到,则为孤立
1035
+ if (fs.existsSync(path.join(rootDir, ce)) && !isKnown && !isCapKnown && !isWorkflowKnown && !INFRASTRUCTURE_EXCEPTIONS.has(ceNorm)) {
1036
+ const orphanSeverity = (m.priority === "P0" || m.priority === "P1" || m.status === "dual_layer_enforced")
1037
+ ? "hard_fail" : "advisory";
1038
+ findings.push({
1039
+ severity: orphanSeverity,
1040
+ mechanism_id: m.mechanism_id,
1041
+ finding_type: "orphan_enforcer",
1042
+ message: `代码执行器 ${ce} 不在 Mechanism Contract Registry、Capability Registry 或 Workflow Registry 中${orphanSeverity === "hard_fail" ? " (P0/P1/dual_layer_enforced 必须)" : ""}`,
1043
+ });
1044
+ }
1045
+ }
1046
+ // P0/P1 必须为 dual_layer_enforced
1047
+ if ((m.priority === "P0" || m.priority === "P1") && m.status !== "dual_layer_enforced") {
1048
+ findings.push({
1049
+ severity: "hard_fail",
1050
+ mechanism_id: m.mechanism_id,
1051
+ finding_type: "p0_not_dual_layer",
1052
+ message: `P0/P1 机制 ${m.mechanism_id} 必须为 dual_layer_enforced,当前: ${m.status}`,
1053
+ });
1054
+ }
1055
+ // template_only_advisory 不能有代码执行器
1056
+ if (m.status === "template_only_advisory" && m.code_enforcers.length > 0) {
1057
+ findings.push({
1058
+ severity: "hard_fail",
1059
+ mechanism_id: m.mechanism_id,
1060
+ finding_type: "template_mechanism_drift",
1061
+ message: `机制 ${m.mechanism_id} 状态为 template_only_advisory 但存在代码执行器,状态与实际不一致`,
1062
+ });
1063
+ }
1064
+ // code_only_enforced 必须产生 template_gap 发现
1065
+ if (m.status === "code_only_enforced") {
1066
+ findings.push({
1067
+ severity: "advisory",
1068
+ mechanism_id: m.mechanism_id,
1069
+ finding_type: "template_gap",
1070
+ message: `机制 ${m.mechanism_id} 为 code_only_enforced,必须补充模板层`,
1071
+ });
1072
+ }
1073
+ }
1074
+ console.error(`[soloForge] 双层机制: 治理验证完成 — 发现 ${findings.length} 个问题`);
1075
+ return findings;
1076
+ }
1077
+ //# sourceMappingURL=dual_layer_mechanism_registry.js.map