soloforge 1.1.43 → 1.1.45

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 (408) hide show
  1. package/dist/context/adapters/claude_code/claude_md.js +9 -8
  2. package/dist/context/adapters/claude_code/claude_md.js.map +1 -1
  3. package/dist/context/adapters/shared/integration_guide.d.ts +28 -0
  4. package/dist/context/adapters/shared/integration_guide.d.ts.map +1 -0
  5. package/dist/context/adapters/shared/integration_guide.js +85 -0
  6. package/dist/context/adapters/shared/integration_guide.js.map +1 -0
  7. package/dist/context/adapters/shared/workflow_template.d.ts +2 -2
  8. package/dist/context/adapters/shared/workflow_template.d.ts.map +1 -1
  9. package/dist/context/adapters/shared/workflow_template.js +17 -20
  10. package/dist/context/adapters/shared/workflow_template.js.map +1 -1
  11. package/dist/context/adapters/trae/trae_rules.js +8 -7
  12. package/dist/context/adapters/trae/trae_rules.js.map +1 -1
  13. package/dist/context/templates/template_init_sync.d.ts.map +1 -1
  14. package/dist/context/templates/template_init_sync.js +10 -1
  15. package/dist/context/templates/template_init_sync.js.map +1 -1
  16. package/dist/context/templates/workflow_rule_generator.d.ts +9 -0
  17. package/dist/context/templates/workflow_rule_generator.d.ts.map +1 -1
  18. package/dist/context/templates/workflow_rule_generator.js +19 -7
  19. package/dist/context/templates/workflow_rule_generator.js.map +1 -1
  20. package/dist/domain/engine_helpers.d.ts.map +1 -1
  21. package/dist/domain/engine_helpers.js +45 -3
  22. package/dist/domain/engine_helpers.js.map +1 -1
  23. package/dist/gate/contracts/capability_registry.js +1 -1
  24. package/dist/gate/contracts/capability_registry.js.map +1 -1
  25. package/dist/gate/contracts/control_plane_contract.d.ts.map +1 -1
  26. package/dist/gate/contracts/control_plane_contract.js +8 -28
  27. package/dist/gate/contracts/control_plane_contract.js.map +1 -1
  28. package/dist/gate/contracts/tool_actions.d.ts +25 -0
  29. package/dist/gate/contracts/tool_actions.d.ts.map +1 -0
  30. package/dist/gate/contracts/tool_actions.js +30 -0
  31. package/dist/gate/contracts/tool_actions.js.map +1 -0
  32. package/dist/gate/contracts/tool_invocation_contract_registry.js +1 -1
  33. package/dist/gate/contracts/tool_invocation_contract_registry.js.map +1 -1
  34. package/dist/gate/executors/executors_annotation.d.ts.map +1 -1
  35. package/dist/gate/executors/executors_annotation.js +8 -1
  36. package/dist/gate/executors/executors_annotation.js.map +1 -1
  37. package/dist/gate/executors/executors_artifact.d.ts +1 -1
  38. package/dist/gate/executors/executors_artifact.d.ts.map +1 -1
  39. package/dist/gate/executors/executors_artifact.js +37 -16
  40. package/dist/gate/executors/executors_artifact.js.map +1 -1
  41. package/dist/gate/executors/executors_build.d.ts.map +1 -1
  42. package/dist/gate/executors/executors_build.js +32 -0
  43. package/dist/gate/executors/executors_build.js.map +1 -1
  44. package/dist/gate/executors/executors_deploy.d.ts.map +1 -1
  45. package/dist/gate/executors/executors_deploy.js +3 -2
  46. package/dist/gate/executors/executors_deploy.js.map +1 -1
  47. package/dist/gate/executors/executors_openapi_sync.d.ts.map +1 -1
  48. package/dist/gate/executors/executors_openapi_sync.js +15 -2
  49. package/dist/gate/executors/executors_openapi_sync.js.map +1 -1
  50. package/dist/gate/executors/executors_prerequisite.d.ts +1 -1
  51. package/dist/gate/executors/executors_prerequisite.d.ts.map +1 -1
  52. package/dist/gate/executors/executors_prerequisite.js +3 -15
  53. package/dist/gate/executors/executors_prerequisite.js.map +1 -1
  54. package/dist/gate/executors/executors_regex_scan.d.ts.map +1 -1
  55. package/dist/gate/executors/executors_regex_scan.js +9 -0
  56. package/dist/gate/executors/executors_regex_scan.js.map +1 -1
  57. package/dist/gate/executors/executors_trace.d.ts.map +1 -1
  58. package/dist/gate/executors/executors_trace.js +12 -2
  59. package/dist/gate/executors/executors_trace.js.map +1 -1
  60. package/dist/gate/gate_engine.d.ts.map +1 -1
  61. package/dist/gate/gate_engine.js +6 -4
  62. package/dist/gate/gate_engine.js.map +1 -1
  63. package/dist/gate/gate_registry_bridge.d.ts.map +1 -1
  64. package/dist/gate/gate_registry_bridge.js +3 -1
  65. package/dist/gate/gate_registry_bridge.js.map +1 -1
  66. package/dist/gate/release/release_issue_scenario_registry/registry.d.ts.map +1 -1
  67. package/dist/gate/release/release_issue_scenario_registry/registry.js +0 -4
  68. package/dist/gate/release/release_issue_scenario_registry/registry.js.map +1 -1
  69. package/dist/server/tools/lazy_loaders.d.ts +0 -1
  70. package/dist/server/tools/lazy_loaders.d.ts.map +1 -1
  71. package/dist/server/tools/lazy_loaders.js +1 -1
  72. package/dist/server/tools/lazy_loaders.js.map +1 -1
  73. package/dist/server/tools/middleware/authorization.d.ts.map +1 -1
  74. package/dist/server/tools/middleware/authorization.js +1 -4
  75. package/dist/server/tools/middleware/authorization.js.map +1 -1
  76. package/dist/server/tools/sf_doctor.d.ts +7 -0
  77. package/dist/server/tools/sf_doctor.d.ts.map +1 -1
  78. package/dist/server/tools/sf_doctor.js +22 -1
  79. package/dist/server/tools/sf_doctor.js.map +1 -1
  80. package/dist/server/tools/sf_knowledge.d.ts.map +1 -1
  81. package/dist/server/tools/sf_knowledge.js +2 -1
  82. package/dist/server/tools/sf_knowledge.js.map +1 -1
  83. package/dist/server/tools/sf_task.d.ts.map +1 -1
  84. package/dist/server/tools/sf_task.js +9 -2
  85. package/dist/server/tools/sf_task.js.map +1 -1
  86. package/dist/server/tools/sf_work.d.ts.map +1 -1
  87. package/dist/server/tools/sf_work.js +2 -1
  88. package/dist/server/tools/sf_work.js.map +1 -1
  89. package/dist/verify/audit/probe_rule.d.ts.map +1 -1
  90. package/dist/verify/audit/probe_rule.js +3 -0
  91. package/dist/verify/audit/probe_rule.js.map +1 -1
  92. package/dist/verify/contracts/mechanism_contract_registry/contracts-audit.js +2 -2
  93. package/dist/verify/contracts/mechanism_contract_registry/contracts-audit.js.map +1 -1
  94. package/dist/verify/contracts/mechanism_contract_registry/contracts-governance.js +1 -1
  95. package/dist/verify/contracts/mechanism_contract_registry/contracts-governance.js.map +1 -1
  96. package/package.json +1 -1
  97. package/templates/build/Bug/345/210/206/346/236/220.md +0 -6
  98. package/templates/build/Git/346/223/215/344/275/234.md +0 -4
  99. package/templates/build/OOD/350/256/276/350/256/241/346/221/230/350/246/201.md +0 -10
  100. package/templates/build/React/346/216/245/345/217/243/351/233/206/346/210/220.md +0 -4
  101. package/templates/build/Schema/345/217/230/346/233/264/346/265/201/346/260/264/347/272/277.md +0 -11
  102. package/templates/build/TS/350/264/250/351/207/217/345/256/241/346/237/245.md +0 -2
  103. package/templates/build//344/270/212/346/270/270/344/272/244/345/217/211/351/252/214/350/257/201.md +0 -1
  104. package/templates/build//344/270/273/351/223/276/350/267/257/346/216/245/345/205/245/351/252/214/350/257/201.md +4 -10
  105. package/templates/build//344/273/243/347/240/201/351/227/250/347/246/201.md +0 -9
  106. package/templates/build//345/205/250/346/240/210/346/265/201/347/250/213/344/277/256/345/244/215.md +0 -4
  107. package/templates/build//345/210/207/347/211/207/346/211/247/350/241/214/347/272/252/345/276/213.md +0 -1
  108. package/templates/build//345/210/207/347/211/207/347/253/257/345/210/260/347/253/257/351/252/214/350/257/201.md +0 -1
  109. package/templates/build//345/212/237/350/203/275/345/274/200/345/217/221.md +0 -9
  110. package/templates/build//345/220/216/347/253/257/345/256/236/347/216/260.md +0 -21
  111. package/templates/build//345/220/216/347/253/257/345/256/236/347/216/260/345/267/245/347/250/213.md +0 -5
  112. package/templates/build//345/220/216/347/253/257/345/256/236/347/216/260/345/267/245/347/250/213/345/256/241/346/237/245.md +0 -6
  113. package/templates/build//345/220/216/347/253/257/346/216/245/345/217/243/345/256/236/347/216/260.md +0 -9
  114. package/templates/build//345/233/275/351/231/205/345/214/226.md +0 -4
  115. package/templates/build//345/256/211/345/205/250/345/212/240/345/233/272/346/265/201/346/260/264/347/272/277.md +0 -10
  116. package/templates/build//345/256/211/345/205/250/345/256/241/346/237/245.md +0 -2
  117. package/templates/build//345/256/211/345/205/250/345/256/241/350/256/241.md +0 -6
  118. package/templates/build//345/267/245/347/250/213/347/272/252/345/276/213.md +0 -4
  119. package/templates/build//346/200/247/350/203/275/345/210/206/346/236/220.md +0 -6
  120. package/templates/build//346/200/247/350/203/275/346/265/201/346/260/264/347/272/277.md +0 -10
  121. package/templates/build//346/216/245/345/217/243/351/233/206/346/210/220/346/265/201/346/260/264/347/272/277.md +0 -10
  122. package/templates/build//346/225/260/346/215/256/345/272/223/350/277/201/347/247/273.md +0 -11
  123. package/templates/build//346/226/260/350/200/201/351/200/273/350/276/221/346/257/224/345/257/271/346/227/245/345/277/227.md +0 -9
  124. package/templates/build//346/235/203/351/231/220/350/256/244/350/257/201.md +0 -4
  125. package/templates/build//346/265/213/350/257/225/344/274/230/345/205/210/347/274/226/347/240/201.md +0 -12
  126. package/templates/build//346/265/213/350/257/225/350/256/241/345/210/222.md +0 -7
  127. package/templates/build//346/265/213/350/257/225/350/264/250/351/207/217.md +0 -4
  128. package/templates/build//347/206/224/346/226/255/351/231/215/347/272/247.md +0 -4
  129. package/templates/build//347/212/266/346/200/201/346/265/201/350/275/254.md +0 -4
  130. package/templates/build//347/272/246/346/235/237/345/256/236/347/216/260.md +0 -4
  131. package/templates/build//347/274/226/347/240/201/345/260/261/347/273/252/345/256/241/346/237/245.md +0 -2
  132. package/templates/build//347/274/226/347/240/201/350/264/250/351/207/217.md +0 -4
  133. package/templates/build//347/274/226/347/240/201/351/230/266/346/256/265/346/211/247/350/241/214.md +0 -9
  134. package/templates/build//347/274/272/351/231/267/347/256/241/347/220/206.md +0 -4
  135. package/templates/build//350/200/246/345/220/210/346/243/200/346/265/213.md +0 -3
  136. package/templates/build//350/260/203/350/257/225/346/216/222/346/237/245.md +0 -10
  137. package/templates/build//350/264/250/351/207/217/345/256/241/346/237/245.md +0 -2
  138. package/templates/build//350/277/201/347/247/273/346/265/201/346/260/264/347/272/277.md +0 -11
  139. package/templates/build//351/200/232/347/224/250/350/264/250/351/207/217.md +0 -15
  140. package/templates/build//351/207/215/346/236/204/346/226/271/346/241/210.md +0 -6
  141. package/templates/build//351/207/215/346/236/204/346/265/201/346/260/264/347/272/277.md +0 -10
  142. package/templates/build//351/230/262/345/276/241/346/200/247/347/274/226/347/240/201.md +0 -3
  143. package/templates/build//351/233/206/346/210/220/351/252/214/350/257/201.md +0 -9
  144. package/templates/build//351/233/267/345/214/272/345/217/215/346/250/241/345/274/217.md +0 -3
  145. package/templates/build//351/252/214/346/224/266/346/240/207/345/207/206/345/256/241/346/237/245.md +0 -2
  146. package/templates/build//351/252/214/346/224/266/346/265/213/350/257/225/350/247/204/345/210/222.md +0 -9
  147. package/templates/design/API/346/216/245/345/217/243/350/247/204/346/240/274/346/226/207/346/241/243.md +0 -24
  148. package/templates/design/API/350/256/276/350/256/241.md +0 -4
  149. package/templates/design/N/345/212/2401/346/237/245/350/257/242.md +0 -4
  150. package/templates/design/OOD/350/256/276/350/256/241.md +0 -11
  151. package/templates/design//344/270/215/347/241/256/345/256/232/346/227/266/345/244/264/350/204/221/351/243/216/346/232/264.md +0 -2
  152. package/templates/design//344/273/273/345/212/241/346/213/206/350/247/243.md +0 -9
  153. package/templates/design//344/273/273/345/212/241/350/247/204/345/210/222.md +0 -11
  154. package/templates/design//344/274/232/350/257/235/346/201/242/345/244/215-procedures.md +0 -10
  155. package/templates/design//345/205/250/347/224/237/345/221/275/345/221/250/346/234/237/345/267/245/344/275/234/346/265/201/345/257/274/350/210/252.md +0 -15
  156. package/templates/design//345/205/274/345/256/271/346/200/247/346/243/200/346/237/245.md +0 -2
  157. package/templates/design//345/210/207/347/211/207/350/247/204/345/210/222.md +0 -1
  158. package/templates/design//345/210/207/347/211/207/350/256/241/345/210/222.md +0 -17
  159. package/templates/design//345/211/215/347/253/257/346/200/247/350/203/275.md +0 -4
  160. package/templates/design//345/216/206/345/217/262/351/201/227/347/225/231/351/233/267/345/214/272/346/270/205/345/215/225.md +0 -11
  161. package/templates/design//345/216/237/345/236/213/346/272/220/347/240/201/346/217/220/345/217/226.md +0 -1
  162. package/templates/design//345/216/237/345/236/213/350/257/264/346/230/216.md +0 -15
  163. package/templates/design//345/216/237/345/236/213/350/257/264/346/230/216/345/256/241/346/237/245.md +0 -2
  164. package/templates/design//345/220/221/345/220/216/345/205/274/345/256/271/346/200/247/345/220/210/350/247/204/346/212/245/345/221/212.md +0 -11
  165. package/templates/design//345/221/275/344/273/244/346/211/247/350/241/214-procedures.md +0 -10
  166. package/templates/design//345/221/275/344/273/244/350/267/257/347/224/261-procedures.md +0 -2
  167. package/templates/design//345/221/275/345/220/215.md +0 -4
  168. package/templates/design//345/242/236/351/207/217/350/276/271/347/225/214/347/225/214/345/256/232/346/226/207/346/241/243.md +0 -11
  169. package/templates/design//345/267/245/345/205/267/350/260/203/347/224/250-procedures.md +0 -10
  170. package/templates/design//345/271/266/345/217/221/346/216/247/345/210/266.md +0 -4
  171. package/templates/design//346/212/200/346/234/257/351/200/211/345/236/213.md +0 -6
  172. package/templates/design//346/216/245/345/217/243/345/257/271/346/216/245/346/226/271/346/241/210.md +0 -8
  173. package/templates/design//346/224/271/351/200/240/345/275/261/345/223/215/350/214/203/345/233/264/350/257/204/344/274/260.md +0 -8
  174. package/templates/design//346/225/260/346/215/256/345/272/223/345/217/230/346/233/264/346/226/271/346/241/210.md +0 -8
  175. package/templates/design//346/225/260/346/215/256/345/272/223/350/256/276/350/256/241/346/226/207/346/241/243.md +0 -21
  176. package/templates/design//346/225/260/346/215/256/350/241/200/347/274/230/345/233/276.md +0 -10
  177. package/templates/design//346/227/240/351/232/234/347/242/215.md +0 -4
  178. package/templates/design//346/236/266/346/236/204/345/206/263/347/255/226/350/256/260/345/275/225.md +0 -10
  179. package/templates/design//346/236/266/346/236/204/345/256/241/346/237/245.md +0 -2
  180. package/templates/design//346/236/266/346/236/204/350/256/276/350/256/241-constraints.md +0 -8
  181. package/templates/design//346/236/266/346/236/204/350/256/276/350/256/241-procedures.md +0 -19
  182. package/templates/design//346/236/266/346/236/204/350/256/276/350/256/241.md +0 -16
  183. package/templates/design//346/246/202/345/277/265/351/252/214/350/257/201/346/265/201/346/260/264/347/272/277.md +0 -12
  184. package/templates/design//346/272/220/347/240/201/345/216/237/345/236/213/344/272/244/344/273/230.md +4 -10
  185. package/templates/design//347/216/260/346/234/211/347/263/273/347/273/237/345/267/256/350/267/235/345/210/206/346/236/220.md +0 -15
  186. package/templates/design//347/237/245/350/257/206/347/273/264/346/212/244/346/265/201/346/260/264/347/272/277.md +0 -10
  187. package/templates/design//347/254/254/344/270/200/346/200/247/345/216/237/347/220/206/346/216/250/347/220/206.md +0 -2
  188. package/templates/design//347/264/247/346/200/245/345/233/236/346/273/232/346/211/213/345/206/214.md +0 -12
  189. package/templates/design//347/274/226/347/240/201/345/211/215/346/276/204/346/270/205.md +4 -10
  190. package/templates/design//350/200/201/347/263/273/347/273/237/345/210/207/347/211/207/350/247/204/345/210/222.md +0 -2
  191. package/templates/design//350/207/252/344/270/273/351/200/211/345/236/213.md +0 -10
  192. package/templates/design//350/256/276/350/256/241/344/270/200/350/207/264/346/200/247/351/252/214/346/224/266/346/212/245/345/221/212.md +0 -14
  193. package/templates/design//350/256/276/350/256/241/344/272/247/347/211/251/347/224/237/346/210/220/344/270/216/345/244/215/351/252/214.md +0 -13
  194. package/templates/design//350/257/246/347/273/206/350/256/276/350/256/241-procedures.md +0 -16
  195. package/templates/design//350/257/246/347/273/206/350/256/276/350/256/241.md +0 -15
  196. package/templates/design//350/257/246/347/273/206/350/256/276/350/256/241/345/256/241/346/237/245.md +0 -1
  197. package/templates/design//350/260/203/350/257/225/346/226/271/346/263/225/350/256/272.md +0 -4
  198. package/templates/design//350/277/201/347/247/273/350/257/204/344/274/260.md +0 -6
  199. package/templates/design//351/232/224/347/246/273/351/200/202/351/205/215/345/231/250/346/226/271/346/241/210.md +0 -11
  200. package/templates/design//351/234/200/346/261/202/345/210/206/346/236/220.md +0 -12
  201. package/templates/design//351/234/200/346/261/202/346/276/204/346/270/205.md +0 -12
  202. package/templates/design//351/234/200/346/261/202/350/264/250/351/207/217/345/256/241/346/237/245.md +0 -2
  203. package/templates/design//351/242/206/345/237/237/351/251/261/345/212/250/350/256/276/350/256/241.md +0 -4
  204. package/templates/operate//344/270/212/347/272/277/350/247/202/345/257/237.md +0 -7
  205. package/templates/operate//345/217/221/345/270/203/350/257/264/346/230/216.md +0 -7
  206. package/templates/operate//345/217/221/345/270/203/350/257/264/346/230/216/345/256/241/346/237/245.md +0 -15
  207. package/templates/operate//351/203/250/347/275/262/351/205/215/347/275/256/345/256/241/346/237/245.md +0 -15
  208. package/templates/shared/Diff/345/275/222/345/261/236/350/277/275/350/270/252.md +0 -4
  209. package/templates/shared/Java/350/264/250/351/207/217/351/227/250/347/246/201.md +0 -4
  210. package/templates/shared/LLM/351/242/204/347/256/227/347/275/221/345/205/263.md +0 -4
  211. package/templates/shared/OOD/344/270/216SOLID/350/256/276/350/256/241.md +9 -14
  212. package/templates/shared//344/272/247/347/211/251Schema/346/263/250/345/206/214/344/270/255/345/277/203.md +0 -4
  213. package/templates/shared//344/272/247/347/211/251/345/245/221/347/272/246.md +0 -11
  214. package/templates/shared//344/273/243/347/240/201/346/263/250/351/207/212/344/270/216/346/227/245/345/277/227/345/245/221/347/272/246.md +8 -20
  215. package/templates/shared//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 +0 -18
  216. package/templates/shared//344/273/273/345/212/241/347/212/266/346/200/201/346/234/272.md +0 -4
  217. package/templates/shared//344/273/273/345/212/241/347/256/241/347/220/206/345/231/250.md +0 -4
  218. package/templates/shared//344/274/230/351/233/205/345/201/234/346/234/272.md +0 -4
  219. package/templates/shared//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 +0 -4
  220. package/templates/shared//344/275/234/347/224/250/345/237/237/347/247/237/347/272/246.md +0 -4
  221. package/templates/shared//345/206/262/347/252/201/351/227/250/347/246/201.md +0 -4
  222. package/templates/shared//345/206/263/347/255/226/347/275/221/345/205/263.md +0 -4
  223. package/templates/shared//345/210/207/347/211/207/350/201/232/345/220/210/346/243/200/346/237/245.md +1 -1
  224. package/templates/shared//345/217/230/345/274/202/345/256/241/350/256/241.md +0 -4
  225. package/templates/shared//345/220/216/347/253/257/345/256/236/347/216/260/345/267/245/347/250/213/345/245/221/347/272/246.md +8 -14
  226. package/templates/shared//345/221/275/344/273/244/346/211/247/350/241/214.md +0 -11
  227. package/templates/shared//345/221/275/344/273/244/350/267/257/347/224/261.md +0 -2
  228. package/templates/shared//345/233/236/345/275/222/347/237/251/351/230/265.md +0 -4
  229. package/templates/shared//345/244/232/347/247/237/346/210/267.md +0 -4
  230. package/templates/shared//345/256/241/350/256/241/346/227/245/345/277/227.md +0 -4
  231. package/templates/shared//345/257/274/345/205/245/345/257/274/345/207/272.md +0 -4
  232. package/templates/shared//345/267/245/344/275/234/345/214/272/344/272/222/346/226/245/351/224/201.md +0 -4
  233. package/templates/shared//345/267/245/344/275/234/345/214/272/345/224/244/351/206/222.md +0 -4
  234. package/templates/shared//345/267/245/344/275/234/346/265/201/345/245/221/347/272/246.md +0 -12
  235. package/templates/shared//345/267/245/344/275/234/346/265/201/345/257/274/350/210/252/345/245/221/347/272/246.md +0 -16
  236. package/templates/shared//345/267/245/344/275/234/346/265/201/345/274/225/346/223/216.md +0 -4
  237. package/templates/shared//345/267/245/344/275/234/346/265/201/346/250/241/347/211/210/345/214/205.md +0 -12
  238. package/templates/shared//345/267/245/344/275/234/346/265/201/347/241/254/350/247/204/345/210/231/345/245/221/347/272/246.md +3 -8
  239. package/templates/shared//345/267/245/345/205/267/350/260/203/347/224/250.md +0 -11
  240. package/templates/shared//345/271/266/345/217/221/351/224/201.md +0 -4
  241. package/templates/shared//345/274/200/345/217/221/350/200/205/345/256/252/346/263/225.md +0 -4
  242. package/templates/shared//346/211/247/350/241/214/345/256/210/345/215/253/350/257/204/344/274/260.md +0 -11
  243. package/templates/shared//346/211/251/345/261/225/347/224/237/345/221/275/345/221/250/346/234/237.md +0 -12
  244. package/templates/shared//346/212/200/346/234/257/345/206/263/347/255/226/344/270/273/346/235/203.md +7 -17
  245. package/templates/shared//346/212/245/350/241/250/347/273/237/350/256/241.md +0 -4
  246. package/templates/shared//346/224/257/344/273/230.md +0 -4
  247. package/templates/shared//346/225/217/346/204/237/344/277/241/346/201/257/345/244/204/347/220/206.md +7 -12
  248. package/templates/shared//346/225/217/346/204/237/344/277/241/346/201/257/346/211/253/346/217/217.md +0 -4
  249. package/templates/shared//346/225/260/346/215/256/346/235/203/351/231/220.md +0 -4
  250. package/templates/shared//346/226/275/345/267/245/346/214/207/344/273/244/345/245/221/347/272/246.md +8 -14
  251. package/templates/shared//346/227/245/345/277/227/346/262/273/347/220/206.md +0 -11
  252. package/templates/shared//346/234/272/345/210/266/350/207/252/346/262/273/347/220/206.md +0 -10
  253. package/templates/shared//346/240/207/345/207/206/350/265/204/344/272/247/350/246/206/347/233/226.md +0 -15
  254. package/templates/shared//346/240/270/345/277/203/344/275/223/351/252/214/345/216/237/345/210/231.md +0 -11
  255. package/templates/shared//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 +7 -11
  256. package/templates/shared//346/250/241/347/211/210Frontmatter.md +0 -1
  257. package/templates/shared//346/250/241/347/211/210/350/264/241/347/214/256/346/214/207/345/215/227.md +0 -1
  258. package/templates/shared//346/250/241/347/211/210/350/265/204/344/272/247/345/217/257/350/247/201/346/200/247.md +0 -15
  259. package/templates/shared//346/262/273/347/220/206/350/277/220/350/241/214/346/227/266/345/276/252/347/216/257.md +0 -4
  260. package/templates/shared//346/263/250/345/206/214/350/241/250/345/237/272/347/241/200/350/256/276/346/226/275.md +0 -11
  261. package/templates/shared//346/265/201/345/274/217/345/277/203/350/267/263.md +0 -4
  262. package/templates/shared//346/274/224/350/277/233/345/233/236/345/275/222/351/227/250/346/216/247.md +0 -19
  263. package/templates/shared//347/224/250/346/210/267/345/217/215/351/246/210/345/245/221/347/272/246.md +0 -20
  264. package/templates/shared//347/237/245/350/257/206/344/270/273/346/235/203.md +0 -4
  265. package/templates/shared//347/237/245/350/257/206/346/262/273/347/220/206.md +0 -11
  266. package/templates/shared//347/237/245/350/257/206/346/263/250/345/205/245/350/276/271/347/225/214.md +1 -13
  267. package/templates/shared//347/273/206/350/212/202/347/272/252/345/276/213.md +8 -17
  268. package/templates/shared//350/204/221/346/232/264/344/270/216/346/226/271/346/241/210/346/216/242/347/264/242.md +7 -18
  269. package/templates/shared//350/256/241/345/210/222/345/211/215/347/275/256/351/227/250.md +0 -11
  270. package/templates/shared//350/256/276/350/256/241/344/272/247/347/211/251/345/214/205.md +0 -15
  271. package/templates/shared//350/257/201/346/215/256/351/251/261/345/212/250/344/270/216/345/217/215/345/271/273/350/247/211.md +8 -17
  272. package/templates/shared//350/257/255/344/271/211/350/257/201/346/215/256.md +0 -4
  273. package/templates/shared//350/267/250/345/271/263/345/217/260/350/267/257/345/276/204/345/256/211/345/205/250.md +7 -12
  274. package/templates/shared//350/276/223/345/205/245/346/235/220/346/226/231/345/245/221/347/272/246.md +0 -11
  275. package/templates/shared//350/277/220/350/241/214/345/256/211/345/205/250/345/214/205.md +0 -4
  276. package/templates/shared//351/200/232/347/224/250/345/206/263/347/255/226/347/240/224/350/256/250.md +11 -14
  277. package/templates/shared//351/200/232/347/224/250/346/234/272/346/242/260/346/235/241/346/254/276.md +0 -4
  278. package/templates/shared//351/200/232/347/237/245.md +0 -4
  279. package/templates/shared//351/205/215/347/275/256/344/274/230/345/205/210/347/272/247.md +0 -8
  280. package/templates/shared//351/205/215/347/275/256/350/220/275/347/233/230/350/276/271/347/225/214.md +0 -11
  281. package/templates/shared//351/230/262/345/255/244/345/262/233/345/256/236/347/216/260.md +5 -12
  282. package/templates/shared//351/233/266/351/205/215/347/275/256/345/210/235/345/247/213/345/214/226.md +0 -8
  283. package/templates/shared//351/252/214/346/224/266/346/250/241/347/211/210/350/276/223/345/207/272/345/245/221/347/272/246.md +0 -15
  284. package/templates/shared//351/252/214/350/257/201/345/221/275/344/273/244/347/224/237/346/210/220.md +0 -4
  285. package/templates/shared//351/252/214/350/257/201/345/245/221/347/272/246.md +0 -11
  286. package/templates/verify/Docker/351/203/250/347/275/262.md +0 -4
  287. package/templates/verify/POC/347/273/223/350/256/272.md +0 -6
  288. package/templates/verify/React/345/210/227/350/241/250/350/241/250/346/240/274.md +0 -4
  289. package/templates/verify/React/347/212/266/346/200/201/347/256/241/347/220/206.md +0 -4
  290. package/templates/verify/React/347/273/204/344/273/266.md +0 -4
  291. package/templates/verify/React/350/241/250/345/215/225.md +0 -4
  292. package/templates/verify/React/350/267/257/347/224/261.md +0 -4
  293. package/templates/verify/SOLID/344/273/243/347/240/201/345/256/241/346/237/245.md +0 -4
  294. package/templates/verify/SOLID/350/256/276/350/256/241.md +0 -5
  295. package/templates/verify/Schema/345/205/274/345/256/271.md +0 -4
  296. package/templates/verify/Vue/347/212/266/346/200/201/347/256/241/347/220/206.md +0 -4
  297. package/templates/verify/Vue/347/273/204/344/273/266.md +0 -4
  298. package/templates/verify/Vue/350/267/257/347/224/261.md +0 -4
  299. package/templates/verify/enforced.md +5 -5
  300. package/templates/verify//344/270/212/346/270/270/350/256/276/350/256/241/344/272/244/345/217/211/351/252/214/350/257/201/345/256/241/346/237/245.md +0 -2
  301. package/templates/verify//344/270/273/351/223/276/350/267/257/346/216/245/345/205/245.md +0 -3
  302. package/templates/verify//344/272/213/344/273/266/351/251/261/345/212/250.md +0 -4
  303. package/templates/verify//344/272/213/345/212/241/346/250/241/345/274/217.md +0 -4
  304. package/templates/verify//344/272/244/344/273/230/345/256/214/345/244/207/346/200/247/345/256/241/346/237/245.md +0 -2
  305. package/templates/verify//344/273/243/347/240/201/345/217/257/347/273/264/346/212/244/346/200/247/344/270/216/345/217/257/350/247/202/346/265/213/346/200/247/345/256/241/346/237/245.md +0 -4
  306. package/templates/verify//344/273/243/347/240/201/345/256/241/346/237/245/346/212/245/345/221/212.md +0 -19
  307. package/templates/verify//344/273/243/347/240/201/346/263/250/351/207/212/344/270/216/346/227/245/345/277/227/351/252/214/346/224/266.md +0 -10
  308. package/templates/verify//344/274/232/350/257/235/346/201/242/345/244/215.md +0 -3
  309. package/templates/verify//345/206/263/347/255/226/345/256/214/346/225/264/346/200/247/345/256/241/346/237/245.md +0 -2
  310. package/templates/verify//345/210/206/351/241/265/346/237/245/350/257/242.md +0 -4
  311. package/templates/verify//345/211/215/347/253/257/351/241/265/351/235/242.md +0 -6
  312. package/templates/verify//345/216/206/345/217/262/346/225/260/346/215/256/346/270/205/346/264/227/350/204/232/346/234/254.md +0 -9
  313. package/templates/verify//345/217/221/345/270/203/345/220/216/345/256/241/346/237/245.md +0 -2
  314. package/templates/verify//345/220/216/347/253/257API.md +0 -6
  315. package/templates/verify//345/242/236/345/210/240/346/224/271/346/237/245.md +0 -4
  316. package/templates/verify//345/244/226/351/203/250/344/276/235/350/265/226.md +0 -4
  317. package/templates/verify//345/245/221/347/272/246/345/205/274/345/256/271.md +0 -4
  318. package/templates/verify//345/256/232/346/227/266/344/273/273/345/212/241.md +0 -4
  319. package/templates/verify//345/256/236/346/227/266/346/216/250/351/200/201.md +0 -4
  320. package/templates/verify//345/256/241/346/237/245/346/221/230/350/246/201.md +0 -6
  321. package/templates/verify//345/267/245/344/275/234/346/265/201.md +0 -4
  322. package/templates/verify//345/271/266/345/217/221/345/256/241/346/237/245.md +0 -2
  323. package/templates/verify//345/274/202/346/255/245/345/257/274/345/207/272.md +0 -4
  324. package/templates/verify//346/200/247/350/203/275/345/256/241/346/237/245.md +0 -2
  325. package/templates/verify//346/216/245/345/217/243/345/245/221/347/272/246.md +0 -4
  326. package/templates/verify//346/216/245/345/217/243/345/245/221/347/272/246/345/256/241/346/237/245.md +0 -2
  327. package/templates/verify//346/220/234/347/264/242/346/250/241/345/274/217.md +0 -4
  328. package/templates/verify//346/225/205/351/232/234/345/244/215/347/233/230.md +0 -14
  329. package/templates/verify//346/225/260/346/215/256/345/272/223/345/217/230/346/233/264.md +0 -6
  330. package/templates/verify//346/225/260/346/215/256/351/232/220/347/247/201.md +0 -4
  331. package/templates/verify//346/226/207/344/273/266/344/270/212/344/274/240.md +0 -4
  332. package/templates/verify//346/227/245/345/277/227.md +0 -4
  333. package/templates/verify//346/234/254/345/234/260/346/265/217/350/247/210/345/231/250/351/252/214/346/224/266.md +0 -10
  334. package/templates/verify//346/240/270/345/277/203/345/267/245/347/250/213/346/211/247/350/241/214.md +0 -3
  335. package/templates/verify//347/237/245/350/257/206/346/263/250/345/205/245.md +1 -5
  336. package/templates/verify//347/264/247/346/200/245/344/277/256/345/244/215/346/265/201/346/260/264/347/272/277.md +0 -10
  337. package/templates/verify//347/274/223/345/255/230/347/255/226/347/225/245.md +0 -4
  338. package/templates/verify//350/201/224/350/260/203/350/256/276/350/256/241/347/274/272/351/231/267/345/210/244/345/256/232.md +0 -4
  339. package/templates/verify//350/201/224/350/260/203/351/252/214/350/257/201.md +0 -2
  340. package/templates/verify//350/256/276/350/256/241/345/256/241/350/256/241.md +0 -10
  341. package/templates/verify//350/257/225/350/277/220/350/241/214/347/206/224/346/226/255.md +0 -4
  342. package/templates/verify//350/276/223/345/205/245/346/240/241/351/252/214.md +0 -4
  343. package/templates/verify//351/203/250/347/275/262/345/217/221/345/270/203.md +0 -9
  344. package/templates/verify//351/224/231/350/257/257/345/244/204/347/220/206.md +0 -4
  345. package/templates/verify//351/224/231/350/257/257/350/276/271/347/225/214.md +0 -4
  346. package/templates/verify//351/232/220/347/247/201/345/256/241/346/237/245.md +0 -3
  347. package/templates/verify//351/252/214/350/257/201.md +0 -3
  348. package/CHANGELOG.md +0 -279
  349. package/dist/context/templates/template_mechanism_auditor.d.ts +0 -123
  350. package/dist/context/templates/template_mechanism_auditor.d.ts.map +0 -1
  351. package/dist/context/templates/template_mechanism_auditor.js +0 -679
  352. package/dist/context/templates/template_mechanism_auditor.js.map +0 -1
  353. package/dist/gate/release/foundation_scenario_registry.d.ts +0 -51
  354. package/dist/gate/release/foundation_scenario_registry.d.ts.map +0 -1
  355. package/dist/gate/release/foundation_scenario_registry.js +0 -235
  356. package/dist/gate/release/foundation_scenario_registry.js.map +0 -1
  357. package/dist/gate/release/release_issue_scenario_registry/scenarios_template_contract.d.ts +0 -16
  358. package/dist/gate/release/release_issue_scenario_registry/scenarios_template_contract.d.ts.map +0 -1
  359. package/dist/gate/release/release_issue_scenario_registry/scenarios_template_contract.js +0 -254
  360. package/dist/gate/release/release_issue_scenario_registry/scenarios_template_contract.js.map +0 -1
  361. package/dist/gate/release/release_issue_scenario_registry/scenarios_template_visibility.d.ts +0 -16
  362. package/dist/gate/release/release_issue_scenario_registry/scenarios_template_visibility.d.ts.map +0 -1
  363. package/dist/gate/release/release_issue_scenario_registry/scenarios_template_visibility.js +0 -315
  364. package/dist/gate/release/release_issue_scenario_registry/scenarios_template_visibility.js.map +0 -1
  365. package/dist/verify/contracts/dual_layer_mechanism_registry/index.d.ts +0 -9
  366. package/dist/verify/contracts/dual_layer_mechanism_registry/index.d.ts.map +0 -1
  367. package/dist/verify/contracts/dual_layer_mechanism_registry/index.js +0 -8
  368. package/dist/verify/contracts/dual_layer_mechanism_registry/index.js.map +0 -1
  369. package/dist/verify/contracts/dual_layer_mechanism_registry/mechanisms_audit.d.ts +0 -16
  370. package/dist/verify/contracts/dual_layer_mechanism_registry/mechanisms_audit.d.ts.map +0 -1
  371. package/dist/verify/contracts/dual_layer_mechanism_registry/mechanisms_audit.js +0 -423
  372. package/dist/verify/contracts/dual_layer_mechanism_registry/mechanisms_audit.js.map +0 -1
  373. package/dist/verify/contracts/dual_layer_mechanism_registry/mechanisms_audit_tail.d.ts +0 -16
  374. package/dist/verify/contracts/dual_layer_mechanism_registry/mechanisms_audit_tail.d.ts.map +0 -1
  375. package/dist/verify/contracts/dual_layer_mechanism_registry/mechanisms_audit_tail.js +0 -90
  376. package/dist/verify/contracts/dual_layer_mechanism_registry/mechanisms_audit_tail.js.map +0 -1
  377. package/dist/verify/contracts/dual_layer_mechanism_registry/mechanisms_core.d.ts +0 -16
  378. package/dist/verify/contracts/dual_layer_mechanism_registry/mechanisms_core.d.ts.map +0 -1
  379. package/dist/verify/contracts/dual_layer_mechanism_registry/mechanisms_core.js +0 -389
  380. package/dist/verify/contracts/dual_layer_mechanism_registry/mechanisms_core.js.map +0 -1
  381. package/dist/verify/contracts/dual_layer_mechanism_registry/mechanisms_extension.d.ts +0 -16
  382. package/dist/verify/contracts/dual_layer_mechanism_registry/mechanisms_extension.d.ts.map +0 -1
  383. package/dist/verify/contracts/dual_layer_mechanism_registry/mechanisms_extension.js +0 -415
  384. package/dist/verify/contracts/dual_layer_mechanism_registry/mechanisms_extension.js.map +0 -1
  385. package/dist/verify/contracts/dual_layer_mechanism_registry/mechanisms_governance.d.ts +0 -16
  386. package/dist/verify/contracts/dual_layer_mechanism_registry/mechanisms_governance.d.ts.map +0 -1
  387. package/dist/verify/contracts/dual_layer_mechanism_registry/mechanisms_governance.js +0 -283
  388. package/dist/verify/contracts/dual_layer_mechanism_registry/mechanisms_governance.js.map +0 -1
  389. package/dist/verify/contracts/dual_layer_mechanism_registry/mechanisms_infra.d.ts +0 -16
  390. package/dist/verify/contracts/dual_layer_mechanism_registry/mechanisms_infra.d.ts.map +0 -1
  391. package/dist/verify/contracts/dual_layer_mechanism_registry/mechanisms_infra.js +0 -256
  392. package/dist/verify/contracts/dual_layer_mechanism_registry/mechanisms_infra.js.map +0 -1
  393. package/dist/verify/contracts/dual_layer_mechanism_registry/mechanisms_platform.d.ts +0 -16
  394. package/dist/verify/contracts/dual_layer_mechanism_registry/mechanisms_platform.d.ts.map +0 -1
  395. package/dist/verify/contracts/dual_layer_mechanism_registry/mechanisms_platform.js +0 -475
  396. package/dist/verify/contracts/dual_layer_mechanism_registry/mechanisms_platform.js.map +0 -1
  397. package/dist/verify/contracts/dual_layer_mechanism_registry/mechanisms_release.d.ts +0 -16
  398. package/dist/verify/contracts/dual_layer_mechanism_registry/mechanisms_release.d.ts.map +0 -1
  399. package/dist/verify/contracts/dual_layer_mechanism_registry/mechanisms_release.js +0 -290
  400. package/dist/verify/contracts/dual_layer_mechanism_registry/mechanisms_release.js.map +0 -1
  401. package/dist/verify/contracts/dual_layer_mechanism_registry/shared.d.ts +0 -18
  402. package/dist/verify/contracts/dual_layer_mechanism_registry/shared.d.ts.map +0 -1
  403. package/dist/verify/contracts/dual_layer_mechanism_registry/shared.js +0 -71
  404. package/dist/verify/contracts/dual_layer_mechanism_registry/shared.js.map +0 -1
  405. package/dist/verify/contracts/dual_layer_mechanism_registry/validation.d.ts +0 -66
  406. package/dist/verify/contracts/dual_layer_mechanism_registry/validation.d.ts.map +0 -1
  407. package/dist/verify/contracts/dual_layer_mechanism_registry/validation.js +0 -376
  408. package/dist/verify/contracts/dual_layer_mechanism_registry/validation.js.map +0 -1
@@ -1,679 +0,0 @@
1
- /**
2
- * 模板机制审计器 — 审计组统一入口。
3
- *
4
- * 合并了四个独立模块:
5
- * - 本文件 (template_mechanism_auditor): 机制审计主逻辑
6
- * - standard_asset_contract: 标准资产契约定义与验证
7
- * - standard_asset_coverage: 资产覆盖完整性审计
8
- * - template_asset_visibility: 可见性与注入边界控制
9
- *
10
- * 职责边界:
11
- * - 负责:模板机制审计、资产契约验证、覆盖率审计、可见性控制
12
- * - 不负责:资产注册表数据(consumable/explicit_registry)
13
- *
14
- * 被谁调用:release gate / mechanism contracts / observed_consumption
15
- * 调用谁:consumable_asset_registry / dual_layer_mechanism_registry
16
- *
17
- * 数据流:模板文件 → 扫描 → 与注册表交叉校验 → 审计报告
18
- * 持久化:无(只读扫描)
19
- */
20
- // ── 重新导出审计组其他模块(统一导入入口) ──
21
- export { P0_TEMPLATE_CONTRACTS, getStandardAssetContractSchema, verifyStandardAssetContract, matchTemplateContract, verifyOutputAgainstContract, createRepairReverifyDirective, isLowRiskTask, isDraftDocument, verifyOutputAgainstSchema, findSchemaByArtifactKind, matchTemplateContractEnhanced, } from "./standard_asset_contract.js";
22
- export { auditStandardAssetCoverage, } from "./standard_asset_coverage.js";
23
- export { isInherentlyInternal, inferVisibilityFromPath, inferVisibilityFromContent, parseFrontmatterVisibility, detectVisibilityConflict, scanInternalTerms, filterAssetsForUserProject, filterSyncAssets, checkAssetVisibilityGate, filterByTechStack, isScaffoldAsset, isPackageInternalPath, auditTemplateVisibility, auditAllTemplateAssets, } from "./template_asset_visibility.js";
24
- import fs from "node:fs";
25
- import path from "node:path";
26
- import { getRegistry } from "../../gate/gate_registry_bridge.js";
27
- import { getActive } from "../../domain/asset_registry/derived_registry.js";
28
- function toCompatRef(a) {
29
- const modeMap = { copy_to_project: "required", engine_only: "advisory", internal: "supporting" };
30
- const mech = typeof a.extra.owner_mechanism === "string" ? a.extra.owner_mechanism : undefined;
31
- return {
32
- id: a.id, path: `templates/${a.path}`,
33
- consumers: mech ? [mech] : [],
34
- consumption_mode: modeMap[a.sync_policy] ?? "advisory",
35
- trigger: a.triggers.length > 0 ? a.triggers[0] : undefined,
36
- owner_mechanism_id: mech,
37
- };
38
- }
39
- function listBuiltinConsumableAssetsCompat() {
40
- const reg = getRegistry();
41
- return getActive(reg.registry).map(toCompatRef);
42
- }
43
- import { listMechanismLayerMaps, checkDualLayerCompleteness, } from "../../verify/contracts/dual_layer_mechanism_registry/index.js";
44
- import { getHardRules } from "../../domain/asset_registry/derived_registry.js";
45
- import { generateWorkflowRules } from "./workflow_rule_generator.js";
46
- import { debug } from "../../shared/logger.js";
47
- /** 工作流硬规则(决策3:从"工作流硬规则契约.md"派生,替代 asset_manifest.WORKFLOW_TEMPLATE_HARD_RULES) */
48
- const WORKFLOW_TEMPLATE_HARD_RULES = getHardRules();
49
- // ── 模板扫描目录(去重后的权威常量 — TAR-005 修复:统一导出供审计器和同步器共用) ──
50
- /** 应跳过的扫描目录前缀(用户自定义模板目录、沙盒目录等) */
51
- const SKIP_SCAN_PREFIXES = [
52
- ".soloforge/templates/scaffolds/", // 用户自定义脚手架模板
53
- ".soloforge/knowledge/", // 用户知识目录
54
- ];
55
- /** 模板扫描目录(扁平化后按阶段组织 — TAR-004 修复,TAR-005: 导出供同步器共用) */
56
- export const TEMPLATE_SCAN_DIRS = [
57
- "templates/design",
58
- "templates/build",
59
- "templates/verify",
60
- "templates/operate",
61
- "templates/shared",
62
- "templates/scaffolds",
63
- "templates/profiles",
64
- ];
65
- // ── 适配器承诺关键字模式 ──
66
- const ENFORCED_PROMISE_PATTERNS = [
67
- { pattern: /必须阻断|硬性阻断|hard.?block|hard.?fail/i, keywords: ["必须阻断", "hard_block"] },
68
- { pattern: /强制执行|enforced|enforce/i, keywords: ["enforced"] },
69
- { pattern: /自动验证|自动校验|auto.?verif/i, keywords: ["自动验证"] },
70
- { pattern: /不允许|禁止|forbidden|blocked/i, keywords: ["blocked"] },
71
- ];
72
- // ── 主审计函数 ──
73
- /**
74
- * 执行模板-机制交叉审计。
75
- * 扫描所有模板目录,与 Consumable Asset Registry 和 Dual-Layer Mechanism Registry 交叉校验。
76
- * @param rootDir - 项目根目录
77
- * @returns 完整的审计报告
78
- */
79
- export function auditTemplateMechanisms(rootDir, options) {
80
- debug("TemplateMechanismAuditor", "开始模板机制审计");
81
- const assets = listBuiltinConsumableAssetsCompat();
82
- const maps = listMechanismLayerMaps();
83
- const assetPathMap = new Map();
84
- for (const a of assets)
85
- assetPathMap.set(a.path, a);
86
- const mechanismMap = new Map();
87
- for (const m of maps)
88
- mechanismMap.set(m.mechanism_id, m);
89
- // 1. 扫描磁盘上的模板文件
90
- const diskTemplatePaths = scanTemplateFiles(rootDir);
91
- // 2. 未映射模板(磁盘上存在但未在注册表中)
92
- const unmappedTemplateAssets = [];
93
- for (const tp of diskTemplatePaths) {
94
- if (!assetPathMap.has(tp)) {
95
- unmappedTemplateAssets.push({
96
- path: tp,
97
- registered: false,
98
- issue: "unmapped",
99
- });
100
- }
101
- }
102
- // 3. 未消费的已注册资产(无消费者或无触发器)
103
- const unconsumedTemplateAssets = [];
104
- for (const a of assets) {
105
- if (a.consumers.length === 0 || !a.trigger || a.trigger.trim() === "") {
106
- unconsumedTemplateAssets.push({
107
- path: a.path,
108
- registered: true,
109
- owner_mechanism_id: a.owner_mechanism_id,
110
- consumption_mode: a.consumption_mode,
111
- consumers: a.consumers,
112
- trigger: a.trigger,
113
- issue: "unconsumed",
114
- });
115
- }
116
- }
117
- // 4. 仅模板的机制
118
- const templateOnlyMechanisms = [];
119
- // 5. 仅代码的机制
120
- const codeOnlyMechanisms = [];
121
- for (const m of maps) {
122
- if (m.status === "experimental_dual_layer" || m.status === "code_only_enforced" || m.status === "deprecated")
123
- continue;
124
- const completeness = checkDualLayerCompleteness(m, rootDir);
125
- if (!completeness.has_template_layer && completeness.has_code_layer) {
126
- codeOnlyMechanisms.push({
127
- mechanism_id: m.mechanism_id,
128
- priority: m.priority,
129
- status: m.status,
130
- has_template_assets: false,
131
- has_code_enforcers: true,
132
- completeness,
133
- issue: "code_only",
134
- });
135
- }
136
- else if (completeness.has_template_layer && !completeness.has_code_layer) {
137
- templateOnlyMechanisms.push({
138
- mechanism_id: m.mechanism_id,
139
- priority: m.priority,
140
- status: m.status,
141
- has_template_assets: true,
142
- has_code_enforcers: false,
143
- completeness,
144
- issue: "template_only",
145
- });
146
- }
147
- }
148
- // 6. 可能被注入的已弃用资产
149
- const deprecatedInjected = [];
150
- for (const a of assets) {
151
- if (a.consumption_mode === "deprecated") {
152
- const mechId = a.owner_mechanism_id;
153
- if (mechId) {
154
- const map = mechanismMap.get(mechId);
155
- if (map && map.status !== "deprecated") {
156
- deprecatedInjected.push({
157
- path: a.path,
158
- registered: true,
159
- owner_mechanism_id: mechId,
160
- consumption_mode: a.consumption_mode,
161
- issue: "deprecated_injected",
162
- });
163
- }
164
- }
165
- }
166
- }
167
- // 7. required 资产无执行器
168
- const requiredWithoutEnforcer = [];
169
- for (const a of assets) {
170
- if (a.consumption_mode === "required" && a.owner_mechanism_id) {
171
- const map = mechanismMap.get(a.owner_mechanism_id);
172
- if (map && map.code_enforcers.length === 0) {
173
- requiredWithoutEnforcer.push({
174
- path: a.path,
175
- registered: true,
176
- owner_mechanism_id: a.owner_mechanism_id,
177
- consumption_mode: a.consumption_mode,
178
- consumers: a.consumers,
179
- trigger: a.trigger,
180
- issue: "no_owner_mechanism",
181
- });
182
- }
183
- }
184
- }
185
- // 8. 漂移发现
186
- const driftFindings = computeDriftFindings(maps, assets, rootDir);
187
- // 9. 适配器过度承诺检查
188
- const overpromised = auditAdapterPromises(rootDir, mechanismMap);
189
- // 10. 空机制(既无模板资产也无代码执行器)
190
- const emptyMechanisms = [];
191
- for (const m of maps) {
192
- // deprecated 机制跳过空检查(已删除模块,已知为空)
193
- if (m.status === "deprecated")
194
- continue;
195
- const completeness = checkDualLayerCompleteness(m, rootDir);
196
- if (!completeness.has_template_layer && !completeness.has_code_layer) {
197
- emptyMechanisms.push({
198
- mechanism_id: m.mechanism_id,
199
- priority: m.priority,
200
- status: m.status,
201
- has_template_assets: false,
202
- has_code_enforcers: false,
203
- completeness,
204
- issue: "template_only",
205
- });
206
- }
207
- }
208
- // 11. 薄模板发现(厚重内容、过大模板)
209
- const thinTemplateFindings = computeThinTemplateFindings(rootDir);
210
- // 12. 工作流硬性规则发现
211
- const wfContent = options?.workflowContentOverride ?? generateWorkflowRules({});
212
- const workflowHardRuleFindings = computeWorkflowHardRuleFindings(rootDir, mechanismMap, wfContent);
213
- // 计算统计数量
214
- const allFindings = [
215
- ...driftFindings,
216
- ...unmappedTemplateAssets.map((u) => ({
217
- severity: "advisory",
218
- mechanism_id: "template_audit",
219
- finding_type: "asset_unconsumed",
220
- message: `未注册模板: ${u.path}`,
221
- })),
222
- ];
223
- for (const m of codeOnlyMechanisms) {
224
- if (m.priority === "P0" || m.priority === "P1") {
225
- allFindings.push({
226
- severity: "hard_fail",
227
- mechanism_id: m.mechanism_id,
228
- finding_type: "template_gap",
229
- message: `P0/P1 机制 ${m.mechanism_id} 为 code_only,必须补充模板层`,
230
- });
231
- }
232
- }
233
- for (const m of templateOnlyMechanisms) {
234
- if (m.priority === "P0" || m.priority === "P1") {
235
- allFindings.push({
236
- severity: "hard_fail",
237
- mechanism_id: m.mechanism_id,
238
- finding_type: "code_gap",
239
- message: `P0/P1 机制 ${m.mechanism_id} 为 template_only,必须补充代码层`,
240
- });
241
- }
242
- }
243
- for (const o of overpromised) {
244
- allFindings.push({
245
- severity: "hard_fail",
246
- mechanism_id: o.promised_mechanism_id,
247
- finding_type: "template_mechanism_drift",
248
- message: `适配器模板 ${o.source_file} 承诺 ${o.promise_keywords.join(",")} 但机制 ${o.promised_mechanism_id} 无 enforcer 支持`,
249
- });
250
- }
251
- for (const r of requiredWithoutEnforcer) {
252
- allFindings.push({
253
- severity: "hard_fail",
254
- mechanism_id: r.owner_mechanism_id ?? "unknown",
255
- finding_type: "template_mechanism_drift",
256
- message: `required 资产 ${r.path} 的机制 ${r.owner_mechanism_id} 无代码 enforcer`,
257
- });
258
- }
259
- // 将工作流硬性规则发现计入 hard_fail 数量
260
- for (const wf of workflowHardRuleFindings) {
261
- if (wf.severity === "hard_fail") {
262
- allFindings.push(wf);
263
- }
264
- }
265
- const hardFailCount = allFindings.filter((f) => f.severity === "hard_fail").length;
266
- const advisoryCount = allFindings.filter((f) => f.severity === "advisory").length;
267
- debug("TemplateMechanismAuditor", "审计完成", "hard_fail:", hardFailCount, "advisory:", advisoryCount);
268
- return {
269
- generated_at: new Date().toISOString(),
270
- root_dir: rootDir,
271
- total_template_files: diskTemplatePaths.length,
272
- total_registered_assets: assets.length,
273
- total_mechanisms: maps.length,
274
- unmapped_template_assets: unmappedTemplateAssets,
275
- unconsumed_template_assets: unconsumedTemplateAssets,
276
- template_only_mechanisms: templateOnlyMechanisms,
277
- code_only_mechanisms: codeOnlyMechanisms,
278
- overpromised_adapter_rules: overpromised,
279
- template_mechanism_drift: driftFindings,
280
- deprecated_assets_injected: deprecatedInjected,
281
- required_assets_without_enforcer: requiredWithoutEnforcer,
282
- empty_mechanisms: emptyMechanisms,
283
- thin_template_findings: thinTemplateFindings,
284
- workflow_hard_rule_findings: workflowHardRuleFindings,
285
- hard_fail_count: hardFailCount,
286
- advisory_count: advisoryCount,
287
- };
288
- }
289
- // ── 模板文件扫描器 ──
290
- /** 扫描指定根目录下的模板文件(排除用户自定义目录) */
291
- function scanTemplateFiles(rootDir) {
292
- const paths = [];
293
- for (const dir of TEMPLATE_SCAN_DIRS) {
294
- const fullDir = path.join(rootDir, dir);
295
- if (!fs.existsSync(fullDir))
296
- continue;
297
- walkDir(fullDir, rootDir, paths);
298
- }
299
- // 排除用户自定义模板目录 — 用户自定义模板不应被报 unmapped
300
- return paths
301
- .filter((p) => !SKIP_SCAN_PREFIXES.some((prefix) => p.startsWith(prefix)))
302
- .sort();
303
- }
304
- /** 递归遍历目录,收集模板文件路径 */
305
- function walkDir(dir, rootDir, accumulator) {
306
- for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
307
- const full = path.join(dir, entry.name);
308
- if (entry.isDirectory()) {
309
- walkDir(full, rootDir, accumulator);
310
- }
311
- else if (entry.isFile() && /\.(md|yaml|yml|hbs|ts|js|tsx|jsx)$/.test(entry.name)) {
312
- accumulator.push(path.relative(rootDir, full).replace(/\\/g, "/"));
313
- }
314
- }
315
- }
316
- // ── 漂移发现计算 ──
317
- /**
318
- * 计算模板-机制漂移发现。
319
- * 检查 P0/P1 机制是否为 dual_layer_enforced、模板资产是否注册、文件是否存在等。
320
- */
321
- function computeDriftFindings(maps, assets, rootDir) {
322
- const findings = [];
323
- const assetPathSet = new Set(assets.map((a) => a.path));
324
- for (const m of maps) {
325
- if (m.status === "experimental_dual_layer" || m.status === "deprecated")
326
- continue;
327
- if ((m.priority === "P0" || m.priority === "P1") && m.status !== "dual_layer_enforced" && m.status !== "code_only_enforced") {
328
- findings.push({
329
- severity: "hard_fail",
330
- mechanism_id: m.mechanism_id,
331
- finding_type: "p0_not_dual_layer",
332
- message: `P0/P1 机制 ${m.mechanism_id} 必须为 dual_layer_enforced,当前: ${m.status}`,
333
- });
334
- }
335
- for (const ta of m.template_assets) {
336
- if (!assetPathSet.has(ta.path)) {
337
- findings.push({
338
- severity: "hard_fail",
339
- mechanism_id: m.mechanism_id,
340
- finding_type: "asset_unconsumed",
341
- message: `模板资产 ${ta.path} 未在 Consumable Asset Registry 注册`,
342
- });
343
- }
344
- if ((m.priority === "P0" || m.priority === "P1") && !fs.existsSync(path.join(rootDir, ta.path))) {
345
- findings.push({
346
- severity: "hard_fail",
347
- mechanism_id: m.mechanism_id,
348
- finding_type: "asset_unconsumed",
349
- message: `模板文件不存在: ${ta.path}`,
350
- });
351
- }
352
- }
353
- if (m.status === "template_only_advisory" && m.code_enforcers.length > 0) {
354
- findings.push({
355
- severity: "hard_fail",
356
- mechanism_id: m.mechanism_id,
357
- finding_type: "template_mechanism_drift",
358
- message: `template_only_advisory 不应有代码 enforcer`,
359
- });
360
- }
361
- if (m.status === "code_only_enforced" && m.template_assets.length > 0) {
362
- findings.push({
363
- severity: "advisory",
364
- mechanism_id: m.mechanism_id,
365
- finding_type: "template_mechanism_drift",
366
- message: `code_only_enforced 已有模板资产,建议升级为 dual_layer_enforced`,
367
- });
368
- }
369
- }
370
- return findings;
371
- }
372
- // ── 适配器过度承诺检查 ──
373
- /**
374
- * 检查适配器文件是否存在过度承诺(承诺强制行为但无机制支持)。
375
- */
376
- function auditAdapterPromises(rootDir, maps) {
377
- const results = [];
378
- const adapterFiles = [
379
- "src/context/adapters/claude_code/hooks.ts",
380
- "src/context/adapters/claude_code/claude_md.ts",
381
- "src/context/adapters/shared/workflow_template.ts",
382
- "src/context/adapters/trae/trae_rules.ts",
383
- "src/context/adapters/codex/codex_rules.ts",
384
- ];
385
- const keywordToMechanism = [
386
- { keywords: ["命令路由", "意图路由", "command-router", "intent-router"], mechanism_id: "mc-command-router" },
387
- { keywords: ["工作流契约", "workflow"], mechanism_id: "mc-workflow-contract" },
388
- { keywords: ["知识注入", "knowledge-injection"], mechanism_id: "mc-knowledge-injection-boundary" },
389
- { keywords: ["工具调用", "tool-invocation"], mechanism_id: "mc-tool-invocation-contract" },
390
- { keywords: ["验证契约", "verify", "verifier"], mechanism_id: "mc-verifier" },
391
- { keywords: ["防孤岛", "main-path"], mechanism_id: "mc-main-path-integration" },
392
- { keywords: ["隐私", "敏感信息", "privacy"], mechanism_id: "mc-privacy-boundary" },
393
- { keywords: ["命令执行", "command-execution"], mechanism_id: "mc-command-execution" },
394
- { keywords: ["核心工程", "core-engineering"], mechanism_id: "mc-core-engineering-principles" },
395
- { keywords: ["交付门禁", "delivery"], mechanism_id: "mc-delivery-gate" },
396
- { keywords: ["任务上下文", "task-context"], mechanism_id: "mc-task-context-lifecycle" },
397
- ];
398
- for (const file of adapterFiles) {
399
- const fullPath = path.join(rootDir, file);
400
- if (!fs.existsSync(fullPath))
401
- continue;
402
- let content;
403
- try {
404
- content = fs.readFileSync(fullPath, "utf-8");
405
- }
406
- catch {
407
- debug("TemplateMechanismAuditor", "读取适配器文件失败", fullPath);
408
- continue;
409
- }
410
- for (const { keywords, mechanism_id } of keywordToMechanism) {
411
- for (const kw of keywords) {
412
- const lines = content.split("\n");
413
- for (const line of lines) {
414
- if (!line.toLowerCase().includes(kw.toLowerCase()))
415
- continue;
416
- for (const { pattern, keywords: promiseKws } of ENFORCED_PROMISE_PATTERNS) {
417
- if (pattern.test(line)) {
418
- const map = maps.get(mechanism_id);
419
- const backed = !!map && map.status === "dual_layer_enforced" && map.code_enforcers.length > 0;
420
- const hasEnforcer = !!map && map.code_enforcers.length > 0;
421
- if (!backed) {
422
- const already = results.some((r) => r.source_file === file && r.promised_mechanism_id === mechanism_id);
423
- if (!already) {
424
- results.push({
425
- source_file: file,
426
- promised_mechanism_id: mechanism_id,
427
- promise_keywords: promiseKws,
428
- backed_by_mechanism: backed,
429
- mechanism_status: map?.status,
430
- has_enforcer: hasEnforcer,
431
- issue: !map ? "drift" : "overpromised",
432
- });
433
- }
434
- }
435
- }
436
- }
437
- }
438
- }
439
- }
440
- }
441
- return results;
442
- }
443
- // ── 注入守卫 ──
444
- /**
445
- * 检查资产是否允许注入到当前上下文。
446
- * 基于资产消费模式、所属机制状态、当前路由和工作流进行多重校验。
447
- * @param asset - 可消费资产引用
448
- * @param currentRoute - 当前路由(可选)
449
- * @param currentWorkflow - 当前工作流(可选)
450
- * @returns 注入是否允许及原因
451
- */
452
- export function isInjectionAllowed(asset, currentRoute, currentWorkflow) {
453
- const mode = asset.consumption_mode;
454
- if (mode === "deprecated") {
455
- return { allowed: false, reason: "deprecated asset must not be injected" };
456
- }
457
- if (mode === "manual_reference") {
458
- return { allowed: false, reason: "manual_reference asset requires explicit request" };
459
- }
460
- if (mode === "copy_only") {
461
- return { allowed: false, reason: "copy_only asset is only copied on init, not injected into prompt" };
462
- }
463
- if (!asset.owner_mechanism_id) {
464
- return { allowed: false, reason: `asset ${asset.id} has no owner_mechanism_id` };
465
- }
466
- const maps = listMechanismLayerMaps();
467
- const map = maps.find((m) => m.mechanism_id === asset.owner_mechanism_id);
468
- if (!map) {
469
- return { allowed: false, reason: `owner_mechanism_id ${asset.owner_mechanism_id} not found in registry` };
470
- }
471
- if (map.status === "template_only_advisory" && mode === "required") {
472
- return { allowed: false, reason: `template_only_advisory mechanism ${map.mechanism_id} assets cannot be required-injected` };
473
- }
474
- if (map.status === "deprecated") {
475
- return { allowed: false, reason: `mechanism ${map.mechanism_id} is deprecated` };
476
- }
477
- if (map.status === "dual_layer_enforced" && currentRoute && map.injected_stages && map.injected_stages.length > 0) {
478
- if (!map.injected_stages.includes(currentRoute)) {
479
- return { allowed: false, reason: `route ${currentRoute} not in mechanism ${map.mechanism_id} injected_stages` };
480
- }
481
- }
482
- if (map.status === "dual_layer_enforced" && currentWorkflow && map.injected_workflows && map.injected_workflows.length > 0) {
483
- if (!map.injected_workflows.includes(currentWorkflow)) {
484
- return { allowed: false, reason: `workflow ${currentWorkflow} not in mechanism ${map.mechanism_id} injected_workflows` };
485
- }
486
- }
487
- if ((mode === "required" || mode === "supporting") &&
488
- map.status !== "dual_layer_enforced" && map.status !== "experimental_dual_layer") {
489
- return { allowed: false, reason: `mechanism ${map.mechanism_id} status ${map.status} does not support required/supporting injection` };
490
- }
491
- return { allowed: true };
492
- }
493
- // ── 薄模板发现 ──
494
- /**
495
- * 检查 workflow_template.ts 中的厚重内容(工具说明/流程细节/治理闭环等)。
496
- */
497
- function computeThinTemplateFindings(rootDir) {
498
- const findings = [];
499
- const wfPath = path.join(rootDir, "src/context/adapters/shared/workflow_template.ts");
500
- if (!fs.existsSync(wfPath))
501
- return findings;
502
- const content = fs.readFileSync(wfPath, "utf-8");
503
- const lines = content.split("\n");
504
- // 检查厚重清单内容(共享模板中的复选框列表)
505
- const thickPatterns = [
506
- /- \[x\].{10,}/,
507
- /##\s+编码规范/,
508
- /##\s+工程执行/,
509
- /步骤\s+5\.[5-8]/,
510
- /任务完成后,可执行治理闭环检查/,
511
- /四个工具按以下时机调用/,
512
- /sf_(?:status|pipeline_status)\s+action=/,
513
- /sf_audit_sample.*时机/,
514
- /sf_work.*confirm/,
515
- ];
516
- const hasThickContent = thickPatterns.some((p) => p.test(content));
517
- if (hasThickContent) {
518
- findings.push({
519
- severity: "hard_fail",
520
- mechanism_id: "template_audit",
521
- finding_type: "thick_knowledge_in_shared_template",
522
- message: "workflow_template.ts 包含厚重知识内容(工具说明/流程细节/治理闭环),应拆分为独立知识资产",
523
- });
524
- }
525
- // 逐段密度检查:任何 ### 步骤 段落超过 8 行即为厚重
526
- const sectionRegex = /^###\s+步骤/gm;
527
- let match;
528
- while ((match = sectionRegex.exec(content)) !== null) {
529
- const startIdx = match.index;
530
- const afterSection = content.slice(startIdx);
531
- const sectionLines = afterSection.split("\n");
532
- let bodyLen = 0;
533
- for (let i = 1; i < sectionLines.length; i++) {
534
- if (/^###\s+步骤|^##\s+/.test(sectionLines[i]))
535
- break;
536
- bodyLen++;
537
- }
538
- if (bodyLen > 8) {
539
- findings.push({
540
- severity: "hard_fail",
541
- mechanism_id: "template_audit",
542
- finding_type: "thick_knowledge_in_shared_template",
543
- message: "workflow_template.ts 步骤段落超过 8 行,属于厚重内容",
544
- });
545
- break;
546
- }
547
- }
548
- // 检查过大模板(薄化后超过 100 行)
549
- if (lines.length > 100) {
550
- findings.push({
551
- severity: "hard_fail",
552
- mechanism_id: "template_audit",
553
- finding_type: "template_too_thick",
554
- message: "workflow_template.ts 有 " + lines.length + " 行,超过 100 行上限",
555
- });
556
- }
557
- // 检查 ## 任务管理 section(工具 API 文档)
558
- if (/##\s+任务管理/.test(content)) {
559
- findings.push({
560
- severity: "hard_fail",
561
- mechanism_id: "template_audit",
562
- finding_type: "thick_knowledge_in_shared_template",
563
- message: "workflow_template.ts 包含 任务管理 section,属于工具文档,应迁移至知识库",
564
- });
565
- }
566
- return findings;
567
- }
568
- // ── 工作流硬性规则发现 ──
569
- /**
570
- * 检查工作流模板硬性规则的一致性。
571
- * 校验 marker 与 manifest 的对应关系、source_ref 有效性和机制状态。
572
- */
573
- function computeWorkflowHardRuleFindings(rootDir, mechanismMap, workflowContent) {
574
- const findings = [];
575
- const registeredRules = new Map(WORKFLOW_TEMPLATE_HARD_RULES.map(r => [r.rule_id, r]));
576
- // 收集生成输出中所有 marker(单真源方向: manifest → hardRuleTag → 输出)
577
- const markerIds = new Set();
578
- const markerMechanisms = new Map();
579
- const content = workflowContent ?? generateWorkflowRules({});
580
- const markerRegex = /@sf-hard-rule\s+id=(\S+)\s+mechanism=(\S+)/g;
581
- let match;
582
- while ((match = markerRegex.exec(content)) !== null) {
583
- markerIds.add(match[1]);
584
- markerMechanisms.set(match[1], match[2]);
585
- }
586
- // 检查 1: marker → manifest(marker 存在但未在 manifest 中注册)
587
- for (const markerId of markerIds) {
588
- if (!registeredRules.has(markerId)) {
589
- findings.push({
590
- severity: "hard_fail",
591
- mechanism_id: "workflow_hard_rule",
592
- finding_type: "unregistered_hard_rule",
593
- message: `@sf-hard-rule id=${markerId} 未在 WORKFLOW_TEMPLATE_HARD_RULES 中注册`,
594
- });
595
- }
596
- }
597
- // 检查 2: manifest → marker(manifest 规则在模板中无对应 marker)
598
- for (const rule of WORKFLOW_TEMPLATE_HARD_RULES) {
599
- // deprecated 规则跳过双向对账(已删除模块的遗留规则)
600
- if (rule.enforcement_status === "deprecated")
601
- continue;
602
- if (!markerIds.has(rule.rule_id)) {
603
- findings.push({
604
- severity: "hard_fail",
605
- mechanism_id: rule.mechanism_id,
606
- finding_type: "unregistered_hard_rule",
607
- message: `manifest rule ${rule.rule_id} 在 workflow_template.ts 中无对应 @sf-hard-rule marker`,
608
- });
609
- }
610
- }
611
- // 检查 3: source_ref 文件是否存在
612
- for (const rule of WORKFLOW_TEMPLATE_HARD_RULES) {
613
- if (rule.enforcement_status === "deprecated")
614
- continue;
615
- const anchorSep = rule.source_ref.indexOf("#");
616
- const sourceFile = anchorSep >= 0 ? rule.source_ref.substring(0, anchorSep) : rule.source_ref;
617
- if (!fs.existsSync(path.join(rootDir, sourceFile))) {
618
- findings.push({
619
- severity: "hard_fail",
620
- mechanism_id: rule.mechanism_id,
621
- finding_type: "unregistered_hard_rule",
622
- message: `manifest rule ${rule.rule_id} source_ref 文件不存在: ${sourceFile}`,
623
- });
624
- }
625
- }
626
- // 检查 4: source_ref anchor 是否与 rule_id 一致
627
- for (const rule of WORKFLOW_TEMPLATE_HARD_RULES) {
628
- if (rule.enforcement_status === "deprecated")
629
- continue;
630
- const anchorSep = rule.source_ref.indexOf("#");
631
- const anchorId = anchorSep >= 0 ? rule.source_ref.substring(anchorSep + 1) : undefined;
632
- if (anchorId && anchorId !== rule.rule_id) {
633
- findings.push({
634
- severity: "hard_fail",
635
- mechanism_id: rule.mechanism_id,
636
- finding_type: "unregistered_hard_rule",
637
- message: `manifest rule ${rule.rule_id} source_ref anchor=${anchorId} 与 rule_id 不一致`,
638
- });
639
- }
640
- }
641
- // 检查 5: marker mechanism 是否与 manifest mechanism_id 一致
642
- for (const rule of WORKFLOW_TEMPLATE_HARD_RULES) {
643
- if (rule.enforcement_status === "deprecated")
644
- continue;
645
- const markerMech = markerMechanisms.get(rule.rule_id);
646
- if (markerMech && markerMech !== rule.mechanism_id) {
647
- findings.push({
648
- severity: "hard_fail",
649
- mechanism_id: rule.mechanism_id,
650
- finding_type: "unregistered_hard_rule",
651
- message: `rule ${rule.rule_id} marker mechanism=${markerMech} vs manifest mechanism_id=${rule.mechanism_id}`,
652
- });
653
- }
654
- }
655
- // 检查 6: manifest mechanism_id 是否存在且为 dual_layer_enforced
656
- for (const rule of WORKFLOW_TEMPLATE_HARD_RULES) {
657
- if (rule.enforcement_status === "deprecated")
658
- continue;
659
- const mech = mechanismMap.get(rule.mechanism_id);
660
- if (!mech) {
661
- findings.push({
662
- severity: "hard_fail",
663
- mechanism_id: rule.mechanism_id,
664
- finding_type: "unregistered_hard_rule",
665
- message: `manifest rule ${rule.rule_id} mechanism_id=${rule.mechanism_id} 未在机制注册表中找到`,
666
- });
667
- }
668
- else if (mech.status !== "dual_layer_enforced" && mech.status !== "experimental_dual_layer" && mech.status !== "code_only_enforced") {
669
- findings.push({
670
- severity: "hard_fail",
671
- mechanism_id: rule.mechanism_id,
672
- finding_type: "unregistered_hard_rule",
673
- message: `manifest rule ${rule.rule_id} mechanism_id=${rule.mechanism_id} status=${mech.status}, 应为 dual_layer_enforced`,
674
- });
675
- }
676
- }
677
- return findings;
678
- }
679
- //# sourceMappingURL=template_mechanism_auditor.js.map