@memoarchitect/tools 0.13.2 → 0.15.1

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 (825) hide show
  1. package/README.md +40 -26
  2. package/corpus/README.md +20 -36
  3. package/package.json +9 -10
  4. package/packages/tools/lib/analysis/impact.d.ts +30 -0
  5. package/packages/tools/lib/analysis/impact.d.ts.map +1 -1
  6. package/packages/tools/lib/analysis/impact.js +47 -74
  7. package/packages/tools/lib/analysis/impact.js.map +1 -1
  8. package/packages/tools/lib/analysis/interfaces-between.d.ts +36 -0
  9. package/packages/tools/lib/analysis/interfaces-between.d.ts.map +1 -0
  10. package/packages/tools/lib/analysis/interfaces-between.js +66 -0
  11. package/packages/tools/lib/analysis/interfaces-between.js.map +1 -0
  12. package/packages/tools/lib/analysis/suspect-links.d.ts +45 -0
  13. package/packages/tools/lib/analysis/suspect-links.d.ts.map +1 -0
  14. package/packages/tools/lib/analysis/suspect-links.js +66 -0
  15. package/packages/tools/lib/analysis/suspect-links.js.map +1 -0
  16. package/packages/tools/lib/analysis-starters.d.ts +2 -0
  17. package/packages/tools/lib/analysis-starters.d.ts.map +1 -1
  18. package/packages/tools/lib/analysis-starters.js +73 -68
  19. package/packages/tools/lib/analysis-starters.js.map +1 -1
  20. package/packages/tools/lib/authoring/outline-identity.d.ts +34 -0
  21. package/packages/tools/lib/authoring/outline-identity.d.ts.map +1 -0
  22. package/packages/tools/lib/authoring/outline-identity.js +95 -0
  23. package/packages/tools/lib/authoring/outline-identity.js.map +1 -0
  24. package/packages/tools/lib/authoring/outline-source.d.ts +57 -0
  25. package/packages/tools/lib/authoring/outline-source.d.ts.map +1 -0
  26. package/packages/tools/lib/authoring/outline-source.js +203 -0
  27. package/packages/tools/lib/authoring/outline-source.js.map +1 -0
  28. package/packages/tools/lib/authoring/source-outline.d.ts +82 -0
  29. package/packages/tools/lib/authoring/source-outline.d.ts.map +1 -0
  30. package/packages/tools/lib/authoring/source-outline.js +267 -0
  31. package/packages/tools/lib/authoring/source-outline.js.map +1 -0
  32. package/packages/tools/lib/bin/memo.js +181 -632
  33. package/packages/tools/lib/bin/memo.js.map +1 -1
  34. package/packages/tools/lib/browser/index.d.ts +12 -0
  35. package/packages/tools/lib/browser/index.d.ts.map +1 -1
  36. package/packages/tools/lib/browser/index.js +8 -0
  37. package/packages/tools/lib/browser/index.js.map +1 -1
  38. package/packages/tools/lib/cli/project-commands.d.ts +3 -0
  39. package/packages/tools/lib/cli/project-commands.d.ts.map +1 -0
  40. package/packages/tools/lib/cli/project-commands.js +577 -0
  41. package/packages/tools/lib/cli/project-commands.js.map +1 -0
  42. package/packages/tools/lib/commands/ask.d.ts.map +1 -1
  43. package/packages/tools/lib/commands/ask.js +10 -18
  44. package/packages/tools/lib/commands/ask.js.map +1 -1
  45. package/packages/tools/lib/commands/compile.d.ts +18 -0
  46. package/packages/tools/lib/commands/compile.d.ts.map +1 -0
  47. package/packages/tools/lib/commands/compile.js +122 -0
  48. package/packages/tools/lib/commands/compile.js.map +1 -0
  49. package/packages/tools/lib/commands/convert.js +2 -2
  50. package/packages/tools/lib/commands/convert.js.map +1 -1
  51. package/packages/tools/lib/commands/create-package.js +4 -4
  52. package/packages/tools/lib/commands/create-package.js.map +1 -1
  53. package/packages/tools/lib/commands/dev.d.ts +20 -2
  54. package/packages/tools/lib/commands/dev.d.ts.map +1 -1
  55. package/packages/tools/lib/commands/dev.js +386 -97
  56. package/packages/tools/lib/commands/dev.js.map +1 -1
  57. package/packages/tools/lib/commands/dhf-draft.d.ts.map +1 -1
  58. package/packages/tools/lib/commands/dhf-draft.js +7 -16
  59. package/packages/tools/lib/commands/dhf-draft.js.map +1 -1
  60. package/packages/tools/lib/commands/dhf-init.js +3 -3
  61. package/packages/tools/lib/commands/dhf-init.js.map +1 -1
  62. package/packages/tools/lib/commands/dhf-lint.d.ts.map +1 -1
  63. package/packages/tools/lib/commands/dhf-lint.js +4 -3
  64. package/packages/tools/lib/commands/dhf-lint.js.map +1 -1
  65. package/packages/tools/lib/commands/dhf-preview.d.ts.map +1 -1
  66. package/packages/tools/lib/commands/dhf-preview.js +5 -26
  67. package/packages/tools/lib/commands/dhf-preview.js.map +1 -1
  68. package/packages/tools/lib/commands/dhf.d.ts +4 -0
  69. package/packages/tools/lib/commands/dhf.d.ts.map +1 -1
  70. package/packages/tools/lib/commands/dhf.js +77 -31
  71. package/packages/tools/lib/commands/dhf.js.map +1 -1
  72. package/packages/tools/lib/commands/element.d.ts.map +1 -1
  73. package/packages/tools/lib/commands/element.js +44 -6
  74. package/packages/tools/lib/commands/element.js.map +1 -1
  75. package/packages/tools/lib/commands/export.d.ts +1 -1
  76. package/packages/tools/lib/commands/export.d.ts.map +1 -1
  77. package/packages/tools/lib/commands/export.js +25 -18
  78. package/packages/tools/lib/commands/export.js.map +1 -1
  79. package/packages/tools/lib/commands/generate.d.ts.map +1 -1
  80. package/packages/tools/lib/commands/generate.js +10 -30
  81. package/packages/tools/lib/commands/generate.js.map +1 -1
  82. package/packages/tools/lib/commands/ids-rebase.d.ts +15 -0
  83. package/packages/tools/lib/commands/ids-rebase.d.ts.map +1 -0
  84. package/packages/tools/lib/commands/ids-rebase.js +133 -0
  85. package/packages/tools/lib/commands/ids-rebase.js.map +1 -0
  86. package/packages/tools/lib/commands/import-ea.d.ts +3 -3
  87. package/packages/tools/lib/commands/import-ea.d.ts.map +1 -1
  88. package/packages/tools/lib/commands/import-ea.js +12 -9
  89. package/packages/tools/lib/commands/import-ea.js.map +1 -1
  90. package/packages/tools/lib/commands/import-owl.d.ts +1 -1
  91. package/packages/tools/lib/commands/import-owl.js +2 -2
  92. package/packages/tools/lib/commands/import-owl.js.map +1 -1
  93. package/packages/tools/lib/commands/import-sysand.d.ts +1 -1
  94. package/packages/tools/lib/commands/import-sysand.d.ts.map +1 -1
  95. package/packages/tools/lib/commands/import-sysand.js +15 -6
  96. package/packages/tools/lib/commands/import-sysand.js.map +1 -1
  97. package/packages/tools/lib/commands/import.d.ts +13 -0
  98. package/packages/tools/lib/commands/import.d.ts.map +1 -1
  99. package/packages/tools/lib/commands/import.js +89 -29
  100. package/packages/tools/lib/commands/import.js.map +1 -1
  101. package/packages/tools/lib/commands/init.d.ts +0 -8
  102. package/packages/tools/lib/commands/init.d.ts.map +1 -1
  103. package/packages/tools/lib/commands/init.js +56 -51
  104. package/packages/tools/lib/commands/init.js.map +1 -1
  105. package/packages/tools/lib/commands/inspect.d.ts.map +1 -1
  106. package/packages/tools/lib/commands/inspect.js +22 -15
  107. package/packages/tools/lib/commands/inspect.js.map +1 -1
  108. package/packages/tools/lib/commands/install.d.ts.map +1 -1
  109. package/packages/tools/lib/commands/install.js +9 -6
  110. package/packages/tools/lib/commands/install.js.map +1 -1
  111. package/packages/tools/lib/commands/interfaces.d.ts +8 -0
  112. package/packages/tools/lib/commands/interfaces.d.ts.map +1 -0
  113. package/packages/tools/lib/commands/interfaces.js +71 -0
  114. package/packages/tools/lib/commands/interfaces.js.map +1 -0
  115. package/packages/tools/lib/commands/lock.d.ts.map +1 -1
  116. package/packages/tools/lib/commands/lock.js +13 -6
  117. package/packages/tools/lib/commands/lock.js.map +1 -1
  118. package/packages/tools/lib/commands/mcp.js +7 -7
  119. package/packages/tools/lib/commands/mcp.js.map +1 -1
  120. package/packages/tools/lib/commands/migrate-layout.d.ts +5 -0
  121. package/packages/tools/lib/commands/migrate-layout.d.ts.map +1 -0
  122. package/packages/tools/lib/commands/migrate-layout.js +90 -0
  123. package/packages/tools/lib/commands/migrate-layout.js.map +1 -0
  124. package/packages/tools/lib/commands/ontology.d.ts.map +1 -1
  125. package/packages/tools/lib/commands/ontology.js +26 -22
  126. package/packages/tools/lib/commands/ontology.js.map +1 -1
  127. package/packages/tools/lib/commands/pack.d.ts.map +1 -1
  128. package/packages/tools/lib/commands/pack.js +14 -9
  129. package/packages/tools/lib/commands/pack.js.map +1 -1
  130. package/packages/tools/lib/commands/pinned-target.d.ts +12 -0
  131. package/packages/tools/lib/commands/pinned-target.d.ts.map +1 -0
  132. package/packages/tools/lib/commands/pinned-target.js +74 -0
  133. package/packages/tools/lib/commands/pinned-target.js.map +1 -0
  134. package/packages/tools/lib/commands/plugin.d.ts.map +1 -1
  135. package/packages/tools/lib/commands/plugin.js +13 -22
  136. package/packages/tools/lib/commands/plugin.js.map +1 -1
  137. package/packages/tools/lib/commands/prune.d.ts +5 -0
  138. package/packages/tools/lib/commands/prune.d.ts.map +1 -0
  139. package/packages/tools/lib/commands/prune.js +27 -0
  140. package/packages/tools/lib/commands/prune.js.map +1 -0
  141. package/packages/tools/lib/commands/retired.d.ts +10 -0
  142. package/packages/tools/lib/commands/retired.d.ts.map +1 -0
  143. package/packages/tools/lib/commands/retired.js +35 -0
  144. package/packages/tools/lib/commands/retired.js.map +1 -0
  145. package/packages/tools/lib/commands/rules.d.ts +49 -5
  146. package/packages/tools/lib/commands/rules.d.ts.map +1 -1
  147. package/packages/tools/lib/commands/rules.js +340 -172
  148. package/packages/tools/lib/commands/rules.js.map +1 -1
  149. package/packages/tools/lib/commands/ship-library.d.ts +4 -0
  150. package/packages/tools/lib/commands/ship-library.d.ts.map +1 -0
  151. package/packages/tools/lib/commands/ship-library.js +45 -0
  152. package/packages/tools/lib/commands/ship-library.js.map +1 -0
  153. package/packages/tools/lib/commands/standards.d.ts +2 -2
  154. package/packages/tools/lib/commands/standards.d.ts.map +1 -1
  155. package/packages/tools/lib/commands/standards.js +78 -33
  156. package/packages/tools/lib/commands/standards.js.map +1 -1
  157. package/packages/tools/lib/commands/sysand-publish.d.ts +16 -1
  158. package/packages/tools/lib/commands/sysand-publish.d.ts.map +1 -1
  159. package/packages/tools/lib/commands/sysand-publish.js +75 -193
  160. package/packages/tools/lib/commands/sysand-publish.js.map +1 -1
  161. package/packages/tools/lib/commands/toolchain.d.ts +5 -0
  162. package/packages/tools/lib/commands/toolchain.d.ts.map +1 -1
  163. package/packages/tools/lib/commands/toolchain.js +50 -1
  164. package/packages/tools/lib/commands/toolchain.js.map +1 -1
  165. package/packages/tools/lib/commands/validate-client.d.ts +11 -0
  166. package/packages/tools/lib/commands/validate-client.d.ts.map +1 -0
  167. package/packages/tools/lib/commands/validate-client.js +54 -0
  168. package/packages/tools/lib/commands/validate-client.js.map +1 -0
  169. package/packages/tools/lib/commands/validate.d.ts +33 -2
  170. package/packages/tools/lib/commands/validate.d.ts.map +1 -1
  171. package/packages/tools/lib/commands/validate.js +432 -186
  172. package/packages/tools/lib/commands/validate.js.map +1 -1
  173. package/packages/tools/lib/dhf/device-dhf.d.ts +57 -0
  174. package/packages/tools/lib/dhf/device-dhf.d.ts.map +1 -0
  175. package/packages/tools/lib/dhf/device-dhf.js +152 -0
  176. package/packages/tools/lib/dhf/device-dhf.js.map +1 -0
  177. package/packages/tools/lib/dhf/dhf-config-v2.d.ts +1 -1
  178. package/packages/tools/lib/dhf/dhf-config-v2.d.ts.map +1 -1
  179. package/packages/tools/lib/dhf/query-engine.d.ts +9 -2
  180. package/packages/tools/lib/dhf/query-engine.d.ts.map +1 -1
  181. package/packages/tools/lib/dhf/query-engine.js +29 -25
  182. package/packages/tools/lib/dhf/query-engine.js.map +1 -1
  183. package/packages/tools/lib/dhf/query-executor.d.ts +1 -1
  184. package/packages/tools/lib/dhf/query-executor.js +1 -1
  185. package/packages/tools/lib/dhf/query-executor.js.map +1 -1
  186. package/packages/tools/lib/dhf/standards-block.js +1 -1
  187. package/packages/tools/lib/dhf/standards-block.js.map +1 -1
  188. package/packages/tools/lib/dhf/standards-library.d.ts.map +1 -1
  189. package/packages/tools/lib/dhf/standards-library.js +16 -9
  190. package/packages/tools/lib/dhf/standards-library.js.map +1 -1
  191. package/packages/tools/lib/dhf/standards-report.d.ts +11 -3
  192. package/packages/tools/lib/dhf/standards-report.d.ts.map +1 -1
  193. package/packages/tools/lib/dhf/standards-report.js +43 -13
  194. package/packages/tools/lib/dhf/standards-report.js.map +1 -1
  195. package/packages/tools/lib/dhf/template-engine.d.ts +2 -0
  196. package/packages/tools/lib/dhf/template-engine.d.ts.map +1 -1
  197. package/packages/tools/lib/dhf/template-engine.js +5 -5
  198. package/packages/tools/lib/dhf/template-engine.js.map +1 -1
  199. package/packages/tools/lib/import/import-diff.d.ts +31 -1
  200. package/packages/tools/lib/import/import-diff.d.ts.map +1 -1
  201. package/packages/tools/lib/import/import-diff.js +91 -19
  202. package/packages/tools/lib/import/import-diff.js.map +1 -1
  203. package/packages/tools/lib/import/import-sources.d.ts +21 -0
  204. package/packages/tools/lib/import/import-sources.d.ts.map +1 -0
  205. package/packages/tools/lib/import/import-sources.js +36 -0
  206. package/packages/tools/lib/import/import-sources.js.map +1 -0
  207. package/packages/tools/lib/import/reqif.d.ts +23 -0
  208. package/packages/tools/lib/import/reqif.d.ts.map +1 -0
  209. package/packages/tools/lib/import/reqif.js +151 -0
  210. package/packages/tools/lib/import/reqif.js.map +1 -0
  211. package/packages/tools/lib/import/source-import.d.ts +128 -0
  212. package/packages/tools/lib/import/source-import.d.ts.map +1 -0
  213. package/packages/tools/lib/import/source-import.js +305 -0
  214. package/packages/tools/lib/import/source-import.js.map +1 -0
  215. package/packages/tools/lib/importer/cameo-importer.d.ts.map +1 -1
  216. package/packages/tools/lib/importer/cameo-importer.js +4 -1
  217. package/packages/tools/lib/importer/cameo-importer.js.map +1 -1
  218. package/packages/tools/lib/importer/ea-importer.d.ts.map +1 -1
  219. package/packages/tools/lib/importer/ea-importer.js +4 -1
  220. package/packages/tools/lib/importer/ea-importer.js.map +1 -1
  221. package/packages/tools/lib/importer/sysand-importer.d.ts +2 -1
  222. package/packages/tools/lib/importer/sysand-importer.d.ts.map +1 -1
  223. package/packages/tools/lib/importer/sysand-importer.js +27 -10
  224. package/packages/tools/lib/importer/sysand-importer.js.map +1 -1
  225. package/packages/tools/lib/index.d.ts +20 -6
  226. package/packages/tools/lib/index.d.ts.map +1 -1
  227. package/packages/tools/lib/index.js +22 -8
  228. package/packages/tools/lib/index.js.map +1 -1
  229. package/packages/tools/lib/llm/draft-engine.js +1 -1
  230. package/packages/tools/lib/llm/draft-engine.js.map +1 -1
  231. package/packages/tools/lib/llm/model-context.js +1 -1
  232. package/packages/tools/lib/llm/model-context.js.map +1 -1
  233. package/packages/tools/lib/lock.d.ts +37 -2
  234. package/packages/tools/lib/lock.d.ts.map +1 -1
  235. package/packages/tools/lib/lock.js +93 -8
  236. package/packages/tools/lib/lock.js.map +1 -1
  237. package/packages/tools/lib/mcp/index.js +1 -1
  238. package/packages/tools/lib/mcp/index.js.map +1 -1
  239. package/packages/tools/lib/mcp/model-loader.d.ts.map +1 -1
  240. package/packages/tools/lib/mcp/model-loader.js +6 -18
  241. package/packages/tools/lib/mcp/model-loader.js.map +1 -1
  242. package/packages/tools/lib/mcp/server.js +2 -2
  243. package/packages/tools/lib/mcp/server.js.map +1 -1
  244. package/packages/tools/lib/mcp/tools.d.ts.map +1 -1
  245. package/packages/tools/lib/mcp/tools.js +5 -4
  246. package/packages/tools/lib/mcp/tools.js.map +1 -1
  247. package/packages/tools/lib/methodology/guide-service.d.ts +28 -0
  248. package/packages/tools/lib/methodology/guide-service.d.ts.map +1 -0
  249. package/packages/tools/lib/methodology/guide-service.js +32 -0
  250. package/packages/tools/lib/methodology/guide-service.js.map +1 -0
  251. package/packages/tools/lib/methodology/guide.d.ts +56 -0
  252. package/packages/tools/lib/methodology/guide.d.ts.map +1 -0
  253. package/packages/tools/lib/methodology/guide.js +80 -0
  254. package/packages/tools/lib/methodology/guide.js.map +1 -0
  255. package/packages/tools/lib/model/census-projects.d.ts +26 -0
  256. package/packages/tools/lib/model/census-projects.d.ts.map +1 -0
  257. package/packages/tools/lib/model/census-projects.js +53 -0
  258. package/packages/tools/lib/model/census-projects.js.map +1 -0
  259. package/packages/tools/lib/model/census.d.ts +103 -0
  260. package/packages/tools/lib/model/census.d.ts.map +1 -0
  261. package/packages/tools/lib/model/census.js +229 -0
  262. package/packages/tools/lib/model/census.js.map +1 -0
  263. package/packages/tools/lib/model/complete-model.d.ts +52 -0
  264. package/packages/tools/lib/model/complete-model.d.ts.map +1 -0
  265. package/packages/tools/lib/model/complete-model.js +333 -0
  266. package/packages/tools/lib/model/complete-model.js.map +1 -0
  267. package/packages/tools/lib/model/config-loader.d.ts +8 -3
  268. package/packages/tools/lib/model/config-loader.d.ts.map +1 -1
  269. package/packages/tools/lib/model/config-loader.js +37 -6
  270. package/packages/tools/lib/model/config-loader.js.map +1 -1
  271. package/packages/tools/lib/model/config.d.ts +21 -7
  272. package/packages/tools/lib/model/config.d.ts.map +1 -1
  273. package/packages/tools/lib/model/effective-scope.d.ts +55 -28
  274. package/packages/tools/lib/model/effective-scope.d.ts.map +1 -1
  275. package/packages/tools/lib/model/effective-scope.js +96 -35
  276. package/packages/tools/lib/model/effective-scope.js.map +1 -1
  277. package/packages/tools/lib/model/element-index.d.ts +207 -0
  278. package/packages/tools/lib/model/element-index.d.ts.map +1 -0
  279. package/packages/tools/lib/model/element-index.js +316 -0
  280. package/packages/tools/lib/model/element-index.js.map +1 -0
  281. package/packages/tools/lib/model/id-rebase.d.ts +35 -0
  282. package/packages/tools/lib/model/id-rebase.d.ts.map +1 -0
  283. package/packages/tools/lib/model/id-rebase.js +199 -0
  284. package/packages/tools/lib/model/id-rebase.js.map +1 -0
  285. package/packages/tools/lib/model/identity-registry.d.ts +34 -3
  286. package/packages/tools/lib/model/identity-registry.d.ts.map +1 -1
  287. package/packages/tools/lib/model/identity-registry.js +40 -7
  288. package/packages/tools/lib/model/identity-registry.js.map +1 -1
  289. package/packages/tools/lib/model/impact.d.ts +75 -0
  290. package/packages/tools/lib/model/impact.d.ts.map +1 -0
  291. package/packages/tools/lib/model/impact.js +167 -0
  292. package/packages/tools/lib/model/impact.js.map +1 -0
  293. package/packages/tools/lib/model/ir-identity.d.ts +3 -51
  294. package/packages/tools/lib/model/ir-identity.d.ts.map +1 -1
  295. package/packages/tools/lib/model/ir-identity.js +14 -121
  296. package/packages/tools/lib/model/ir-identity.js.map +1 -1
  297. package/packages/tools/lib/model/kind-registry.d.ts +66 -22
  298. package/packages/tools/lib/model/kind-registry.d.ts.map +1 -1
  299. package/packages/tools/lib/model/kind-registry.js +104 -145
  300. package/packages/tools/lib/model/kind-registry.js.map +1 -1
  301. package/packages/tools/lib/model/manifest.d.ts +2 -2
  302. package/packages/tools/lib/model/manifest.d.ts.map +1 -1
  303. package/packages/tools/lib/model/manifest.js +5 -4
  304. package/packages/tools/lib/model/manifest.js.map +1 -1
  305. package/packages/tools/lib/model/methodology-loader.d.ts +11 -2
  306. package/packages/tools/lib/model/methodology-loader.d.ts.map +1 -1
  307. package/packages/tools/lib/model/methodology-loader.js +24 -130
  308. package/packages/tools/lib/model/methodology-loader.js.map +1 -1
  309. package/packages/tools/lib/model/methodology-resolver.d.ts +71 -6
  310. package/packages/tools/lib/model/methodology-resolver.d.ts.map +1 -1
  311. package/packages/tools/lib/model/methodology-resolver.js +210 -24
  312. package/packages/tools/lib/model/methodology-resolver.js.map +1 -1
  313. package/packages/tools/lib/model/model-diff.d.ts +73 -0
  314. package/packages/tools/lib/model/model-diff.d.ts.map +1 -0
  315. package/packages/tools/lib/model/model-diff.js +91 -0
  316. package/packages/tools/lib/model/model-diff.js.map +1 -0
  317. package/packages/tools/lib/model/narrow-model.d.ts +9 -0
  318. package/packages/tools/lib/model/narrow-model.d.ts.map +1 -0
  319. package/packages/tools/lib/model/narrow-model.js +54 -0
  320. package/packages/tools/lib/model/narrow-model.js.map +1 -0
  321. package/packages/tools/lib/model/native-project.d.ts +92 -11
  322. package/packages/tools/lib/model/native-project.d.ts.map +1 -1
  323. package/packages/tools/lib/model/native-project.js +163 -269
  324. package/packages/tools/lib/model/native-project.js.map +1 -1
  325. package/packages/tools/lib/model/ontology-loader.d.ts +10 -61
  326. package/packages/tools/lib/model/ontology-loader.d.ts.map +1 -1
  327. package/packages/tools/lib/model/ontology-loader.js +11 -512
  328. package/packages/tools/lib/model/ontology-loader.js.map +1 -1
  329. package/packages/tools/lib/model/package-manifest.d.ts +8 -2
  330. package/packages/tools/lib/model/package-manifest.d.ts.map +1 -1
  331. package/packages/tools/lib/model/package-manifest.js +14 -2
  332. package/packages/tools/lib/model/package-manifest.js.map +1 -1
  333. package/packages/tools/lib/model/pinned.d.ts +216 -0
  334. package/packages/tools/lib/model/pinned.d.ts.map +1 -0
  335. package/packages/tools/lib/model/pinned.js +481 -0
  336. package/packages/tools/lib/model/pinned.js.map +1 -0
  337. package/packages/tools/lib/model/project-conversion.d.ts +3 -2
  338. package/packages/tools/lib/model/project-conversion.d.ts.map +1 -1
  339. package/packages/tools/lib/model/project-conversion.js +55 -10
  340. package/packages/tools/lib/model/project-conversion.js.map +1 -1
  341. package/packages/tools/lib/model/project-settings.d.ts +10 -0
  342. package/packages/tools/lib/model/project-settings.d.ts.map +1 -0
  343. package/packages/tools/lib/model/project-settings.js +48 -0
  344. package/packages/tools/lib/model/project-settings.js.map +1 -0
  345. package/packages/tools/lib/model/relation-selection.d.ts +25 -0
  346. package/packages/tools/lib/model/relation-selection.d.ts.map +1 -0
  347. package/packages/tools/lib/model/relation-selection.js +65 -0
  348. package/packages/tools/lib/model/relation-selection.js.map +1 -0
  349. package/packages/tools/lib/model/relationship-legality.d.ts +6 -0
  350. package/packages/tools/lib/model/relationship-legality.d.ts.map +1 -1
  351. package/packages/tools/lib/model/relationship-legality.js.map +1 -1
  352. package/packages/tools/lib/model/relationship-registry.d.ts +21 -8
  353. package/packages/tools/lib/model/relationship-registry.d.ts.map +1 -1
  354. package/packages/tools/lib/model/relationship-registry.js +77 -129
  355. package/packages/tools/lib/model/relationship-registry.js.map +1 -1
  356. package/packages/tools/lib/model/relationship-subjects.d.ts +28 -0
  357. package/packages/tools/lib/model/relationship-subjects.d.ts.map +1 -0
  358. package/packages/tools/lib/model/relationship-subjects.js +126 -0
  359. package/packages/tools/lib/model/relationship-subjects.js.map +1 -0
  360. package/packages/tools/lib/model/release-target.d.ts +12 -0
  361. package/packages/tools/lib/model/release-target.d.ts.map +1 -0
  362. package/packages/tools/lib/model/release-target.js +35 -0
  363. package/packages/tools/lib/model/release-target.js.map +1 -0
  364. package/packages/tools/lib/model/selector-vocabulary.d.ts +47 -0
  365. package/packages/tools/lib/model/selector-vocabulary.d.ts.map +1 -0
  366. package/packages/tools/lib/model/selector-vocabulary.js +181 -0
  367. package/packages/tools/lib/model/selector-vocabulary.js.map +1 -0
  368. package/packages/tools/lib/model/semantic.d.ts +99 -7
  369. package/packages/tools/lib/model/semantic.d.ts.map +1 -1
  370. package/packages/tools/lib/model/semantic.js +13 -1
  371. package/packages/tools/lib/model/semantic.js.map +1 -1
  372. package/packages/tools/lib/model/settings-boundary.d.ts.map +1 -1
  373. package/packages/tools/lib/model/settings-boundary.js +9 -8
  374. package/packages/tools/lib/model/settings-boundary.js.map +1 -1
  375. package/packages/tools/lib/model/short-id.d.ts +2 -0
  376. package/packages/tools/lib/model/short-id.d.ts.map +1 -1
  377. package/packages/tools/lib/model/short-id.js +9 -0
  378. package/packages/tools/lib/model/short-id.js.map +1 -1
  379. package/packages/tools/lib/model/source-graph.d.ts +9 -7
  380. package/packages/tools/lib/model/source-graph.d.ts.map +1 -1
  381. package/packages/tools/lib/model/source-graph.js +19 -24
  382. package/packages/tools/lib/model/source-graph.js.map +1 -1
  383. package/packages/tools/lib/model/source-provenance.d.ts +5 -1
  384. package/packages/tools/lib/model/source-provenance.d.ts.map +1 -1
  385. package/packages/tools/lib/model/source-provenance.js.map +1 -1
  386. package/packages/tools/lib/model/sysml-files.js +1 -1
  387. package/packages/tools/lib/model/sysml-ir.d.ts +2 -5
  388. package/packages/tools/lib/model/sysml-ir.d.ts.map +1 -1
  389. package/packages/tools/lib/model/sysml-ir.js +1 -100
  390. package/packages/tools/lib/model/sysml-ir.js.map +1 -1
  391. package/packages/tools/lib/model/toolchain-merge.d.ts +4 -0
  392. package/packages/tools/lib/model/toolchain-merge.d.ts.map +1 -0
  393. package/packages/tools/lib/model/toolchain-merge.js +34 -0
  394. package/packages/tools/lib/model/toolchain-merge.js.map +1 -0
  395. package/packages/tools/lib/model/user-settings.d.ts +13 -0
  396. package/packages/tools/lib/model/user-settings.d.ts.map +1 -0
  397. package/packages/tools/lib/model/user-settings.js +83 -0
  398. package/packages/tools/lib/model/user-settings.js.map +1 -0
  399. package/packages/tools/lib/model/variability.d.ts +56 -0
  400. package/packages/tools/lib/model/variability.d.ts.map +1 -0
  401. package/packages/tools/lib/model/variability.js +116 -0
  402. package/packages/tools/lib/model/variability.js.map +1 -0
  403. package/packages/tools/lib/model/version-range.d.ts +2 -0
  404. package/packages/tools/lib/model/version-range.d.ts.map +1 -0
  405. package/packages/tools/lib/model/version-range.js +37 -0
  406. package/packages/tools/lib/model/version-range.js.map +1 -0
  407. package/packages/tools/lib/model/view-deriver.d.ts +16 -0
  408. package/packages/tools/lib/model/view-deriver.d.ts.map +1 -1
  409. package/packages/tools/lib/model/view-deriver.js +100 -26
  410. package/packages/tools/lib/model/view-deriver.js.map +1 -1
  411. package/packages/tools/lib/model/view-layout-block.d.ts +81 -0
  412. package/packages/tools/lib/model/view-layout-block.d.ts.map +1 -0
  413. package/packages/tools/lib/model/view-layout-block.js +525 -0
  414. package/packages/tools/lib/model/view-layout-block.js.map +1 -0
  415. package/packages/tools/lib/model/view-layout-migration.d.ts +54 -0
  416. package/packages/tools/lib/model/view-layout-migration.d.ts.map +1 -0
  417. package/packages/tools/lib/model/view-layout-migration.js +156 -0
  418. package/packages/tools/lib/model/view-layout-migration.js.map +1 -0
  419. package/packages/tools/lib/model/workspace-membership.d.ts +99 -0
  420. package/packages/tools/lib/model/workspace-membership.d.ts.map +1 -0
  421. package/packages/tools/lib/model/workspace-membership.js +281 -0
  422. package/packages/tools/lib/model/workspace-membership.js.map +1 -0
  423. package/packages/tools/lib/ontology/owl-exporter.d.ts +1 -1
  424. package/packages/tools/lib/ontology/owl-exporter.d.ts.map +1 -1
  425. package/packages/tools/lib/ontology/owl-exporter.js +1 -1
  426. package/packages/tools/lib/ontology/owl-exporter.js.map +1 -1
  427. package/packages/tools/lib/operations/ai-authoring.d.ts.map +1 -1
  428. package/packages/tools/lib/operations/ai-authoring.js +7 -5
  429. package/packages/tools/lib/operations/ai-authoring.js.map +1 -1
  430. package/packages/tools/lib/operations/authoring.d.ts +10 -4
  431. package/packages/tools/lib/operations/authoring.d.ts.map +1 -1
  432. package/packages/tools/lib/operations/authoring.js +27 -11
  433. package/packages/tools/lib/operations/authoring.js.map +1 -1
  434. package/packages/tools/lib/operations/index.d.ts +2 -0
  435. package/packages/tools/lib/operations/index.d.ts.map +1 -1
  436. package/packages/tools/lib/operations/index.js +1 -0
  437. package/packages/tools/lib/operations/index.js.map +1 -1
  438. package/packages/tools/lib/operations/project-snapshot.d.ts.map +1 -1
  439. package/packages/tools/lib/operations/project-snapshot.js +7 -13
  440. package/packages/tools/lib/operations/project-snapshot.js.map +1 -1
  441. package/packages/tools/lib/plugin/plugin-scaffold.js +2 -2
  442. package/packages/tools/lib/plugin/plugin-scaffold.js.map +1 -1
  443. package/packages/tools/lib/protocol/messages.d.ts +375 -7
  444. package/packages/tools/lib/protocol/messages.d.ts.map +1 -1
  445. package/packages/tools/lib/serializer/csv-io.d.ts +37 -29
  446. package/packages/tools/lib/serializer/csv-io.d.ts.map +1 -1
  447. package/packages/tools/lib/serializer/csv-io.js +64 -31
  448. package/packages/tools/lib/serializer/csv-io.js.map +1 -1
  449. package/packages/tools/lib/serializer/sysml-generator.d.ts +15 -2
  450. package/packages/tools/lib/serializer/sysml-generator.d.ts.map +1 -1
  451. package/packages/tools/lib/serializer/sysml-generator.js +45 -17
  452. package/packages/tools/lib/serializer/sysml-generator.js.map +1 -1
  453. package/packages/tools/lib/server/conflict-policy.js +1 -1
  454. package/packages/tools/lib/server/conflict-policy.js.map +1 -1
  455. package/packages/tools/lib/server/dashboard-store.d.ts +1 -7
  456. package/packages/tools/lib/server/dashboard-store.d.ts.map +1 -1
  457. package/packages/tools/lib/server/dashboard-store.js +3 -14
  458. package/packages/tools/lib/server/dashboard-store.js.map +1 -1
  459. package/packages/tools/lib/server/dev-server.d.ts +48 -1
  460. package/packages/tools/lib/server/dev-server.d.ts.map +1 -1
  461. package/packages/tools/lib/server/dev-server.js +529 -80
  462. package/packages/tools/lib/server/dev-server.js.map +1 -1
  463. package/packages/tools/lib/server/dev-validate.d.ts +30 -0
  464. package/packages/tools/lib/server/dev-validate.d.ts.map +1 -0
  465. package/packages/tools/lib/server/dev-validate.js +82 -0
  466. package/packages/tools/lib/server/dev-validate.js.map +1 -0
  467. package/packages/tools/lib/server/element-writer.d.ts +4 -1
  468. package/packages/tools/lib/server/element-writer.d.ts.map +1 -1
  469. package/packages/tools/lib/server/element-writer.js +56 -35
  470. package/packages/tools/lib/server/element-writer.js.map +1 -1
  471. package/packages/tools/lib/server/mutation-domain.d.ts +10 -0
  472. package/packages/tools/lib/server/mutation-domain.d.ts.map +1 -1
  473. package/packages/tools/lib/server/mutation-domain.js +45 -8
  474. package/packages/tools/lib/server/mutation-domain.js.map +1 -1
  475. package/packages/tools/lib/server/package-source.d.ts +13 -3
  476. package/packages/tools/lib/server/package-source.d.ts.map +1 -1
  477. package/packages/tools/lib/server/package-source.js +31 -39
  478. package/packages/tools/lib/server/package-source.js.map +1 -1
  479. package/packages/tools/lib/server/package-writer.d.ts +19 -6
  480. package/packages/tools/lib/server/package-writer.d.ts.map +1 -1
  481. package/packages/tools/lib/server/package-writer.js +90 -39
  482. package/packages/tools/lib/server/package-writer.js.map +1 -1
  483. package/packages/tools/lib/server/persistor.d.ts +33 -7
  484. package/packages/tools/lib/server/persistor.d.ts.map +1 -1
  485. package/packages/tools/lib/server/persistor.js +63 -48
  486. package/packages/tools/lib/server/persistor.js.map +1 -1
  487. package/packages/tools/lib/server/project-gitignore.d.ts +9 -0
  488. package/packages/tools/lib/server/project-gitignore.d.ts.map +1 -0
  489. package/packages/tools/lib/server/project-gitignore.js +27 -0
  490. package/packages/tools/lib/server/project-gitignore.js.map +1 -0
  491. package/packages/tools/lib/server/relationship-writer.d.ts +31 -2
  492. package/packages/tools/lib/server/relationship-writer.d.ts.map +1 -1
  493. package/packages/tools/lib/server/relationship-writer.js +255 -95
  494. package/packages/tools/lib/server/relationship-writer.js.map +1 -1
  495. package/packages/tools/lib/server/release-writer.d.ts +46 -0
  496. package/packages/tools/lib/server/release-writer.d.ts.map +1 -0
  497. package/packages/tools/lib/server/release-writer.js +133 -0
  498. package/packages/tools/lib/server/release-writer.js.map +1 -0
  499. package/packages/tools/lib/server/rule-policy-writer.d.ts +17 -4
  500. package/packages/tools/lib/server/rule-policy-writer.d.ts.map +1 -1
  501. package/packages/tools/lib/server/rule-policy-writer.js +92 -7
  502. package/packages/tools/lib/server/rule-policy-writer.js.map +1 -1
  503. package/packages/tools/lib/server/rule-service.d.ts +50 -0
  504. package/packages/tools/lib/server/rule-service.d.ts.map +1 -0
  505. package/packages/tools/lib/server/rule-service.js +89 -0
  506. package/packages/tools/lib/server/rule-service.js.map +1 -0
  507. package/packages/tools/lib/server/rule-writer.d.ts +87 -0
  508. package/packages/tools/lib/server/rule-writer.d.ts.map +1 -0
  509. package/packages/tools/lib/server/rule-writer.js +165 -0
  510. package/packages/tools/lib/server/rule-writer.js.map +1 -0
  511. package/packages/tools/lib/server/suspect-review.d.ts +11 -0
  512. package/packages/tools/lib/server/suspect-review.d.ts.map +1 -0
  513. package/packages/tools/lib/server/suspect-review.js +28 -0
  514. package/packages/tools/lib/server/suspect-review.js.map +1 -0
  515. package/packages/tools/lib/server/sysml-notation.d.ts +1 -1
  516. package/packages/tools/lib/server/sysml-notation.d.ts.map +1 -1
  517. package/packages/tools/lib/server/sysml-notation.js +5 -0
  518. package/packages/tools/lib/server/sysml-notation.js.map +1 -1
  519. package/packages/tools/lib/server/user-preferences.d.ts +8 -0
  520. package/packages/tools/lib/server/user-preferences.d.ts.map +1 -0
  521. package/packages/tools/lib/server/user-preferences.js +47 -0
  522. package/packages/tools/lib/server/user-preferences.js.map +1 -0
  523. package/packages/tools/lib/server/version-servers.d.ts +60 -0
  524. package/packages/tools/lib/server/version-servers.d.ts.map +1 -0
  525. package/packages/tools/lib/server/version-servers.js +106 -0
  526. package/packages/tools/lib/server/version-servers.js.map +1 -0
  527. package/packages/tools/lib/server/view-layout-store.d.ts +28 -13
  528. package/packages/tools/lib/server/view-layout-store.d.ts.map +1 -1
  529. package/packages/tools/lib/server/view-layout-store.js +106 -106
  530. package/packages/tools/lib/server/view-layout-store.js.map +1 -1
  531. package/packages/tools/lib/server/view-writer.d.ts +22 -2
  532. package/packages/tools/lib/server/view-writer.d.ts.map +1 -1
  533. package/packages/tools/lib/server/view-writer.js +99 -44
  534. package/packages/tools/lib/server/view-writer.js.map +1 -1
  535. package/packages/tools/lib/server/write-guard.d.ts +7 -0
  536. package/packages/tools/lib/server/write-guard.d.ts.map +1 -0
  537. package/packages/tools/lib/server/write-guard.js +77 -0
  538. package/packages/tools/lib/server/write-guard.js.map +1 -0
  539. package/packages/tools/lib/stage2/api-model.d.ts +160 -0
  540. package/packages/tools/lib/stage2/api-model.d.ts.map +1 -0
  541. package/packages/tools/lib/stage2/api-model.js +341 -0
  542. package/packages/tools/lib/stage2/api-model.js.map +1 -0
  543. package/packages/tools/lib/stage2/build-from-api.d.ts +47 -0
  544. package/packages/tools/lib/stage2/build-from-api.d.ts.map +1 -0
  545. package/packages/tools/lib/stage2/build-from-api.js +1462 -0
  546. package/packages/tools/lib/stage2/build-from-api.js.map +1 -0
  547. package/packages/tools/lib/stage2/guide-from-api.d.ts +38 -0
  548. package/packages/tools/lib/stage2/guide-from-api.d.ts.map +1 -0
  549. package/packages/tools/lib/stage2/guide-from-api.js +97 -0
  550. package/packages/tools/lib/stage2/guide-from-api.js.map +1 -0
  551. package/packages/tools/lib/stage2/handoff-files.d.ts +13 -0
  552. package/packages/tools/lib/stage2/handoff-files.d.ts.map +1 -0
  553. package/packages/tools/lib/stage2/handoff-files.js +32 -0
  554. package/packages/tools/lib/stage2/handoff-files.js.map +1 -0
  555. package/packages/tools/lib/stage2/methodology-from-api.d.ts +10 -0
  556. package/packages/tools/lib/stage2/methodology-from-api.d.ts.map +1 -0
  557. package/packages/tools/lib/stage2/methodology-from-api.js +109 -0
  558. package/packages/tools/lib/stage2/methodology-from-api.js.map +1 -0
  559. package/packages/tools/lib/stage2/package-metadata-from-api.d.ts +15 -0
  560. package/packages/tools/lib/stage2/package-metadata-from-api.d.ts.map +1 -0
  561. package/packages/tools/lib/stage2/package-metadata-from-api.js +238 -0
  562. package/packages/tools/lib/stage2/package-metadata-from-api.js.map +1 -0
  563. package/packages/tools/lib/stage2/project-from-api.d.ts +60 -0
  564. package/packages/tools/lib/stage2/project-from-api.d.ts.map +1 -0
  565. package/packages/tools/lib/stage2/project-from-api.js +328 -0
  566. package/packages/tools/lib/stage2/project-from-api.js.map +1 -0
  567. package/packages/tools/lib/stage2/registries-from-api.d.ts +68 -0
  568. package/packages/tools/lib/stage2/registries-from-api.d.ts.map +1 -0
  569. package/packages/tools/lib/stage2/registries-from-api.js +313 -0
  570. package/packages/tools/lib/stage2/registries-from-api.js.map +1 -0
  571. package/packages/tools/lib/stage2/stage2-from-handoff.d.ts +26 -0
  572. package/packages/tools/lib/stage2/stage2-from-handoff.d.ts.map +1 -0
  573. package/packages/tools/lib/stage2/stage2-from-handoff.js +34 -0
  574. package/packages/tools/lib/stage2/stage2-from-handoff.js.map +1 -0
  575. package/packages/tools/lib/stage2/sysml-names.d.ts +9 -0
  576. package/packages/tools/lib/stage2/sysml-names.d.ts.map +1 -0
  577. package/packages/tools/lib/stage2/sysml-names.js +39 -0
  578. package/packages/tools/lib/stage2/sysml-names.js.map +1 -0
  579. package/packages/tools/lib/toolchain/default-registry.d.ts +2 -2
  580. package/packages/tools/lib/toolchain/default-registry.d.ts.map +1 -1
  581. package/packages/tools/lib/toolchain/default-registry.js +9 -5
  582. package/packages/tools/lib/toolchain/default-registry.js.map +1 -1
  583. package/packages/tools/lib/toolchain/diagnostic.d.ts +2 -2
  584. package/packages/tools/lib/toolchain/diagnostic.js +1 -1
  585. package/packages/tools/lib/toolchain/diagnostic.js.map +1 -1
  586. package/packages/tools/lib/toolchain/effective.d.ts +25 -17
  587. package/packages/tools/lib/toolchain/effective.d.ts.map +1 -1
  588. package/packages/tools/lib/toolchain/effective.js +45 -40
  589. package/packages/tools/lib/toolchain/effective.js.map +1 -1
  590. package/packages/tools/lib/toolchain/exceptions.d.ts +27 -0
  591. package/packages/tools/lib/toolchain/exceptions.d.ts.map +1 -0
  592. package/packages/tools/lib/toolchain/exceptions.js +77 -0
  593. package/packages/tools/lib/toolchain/exceptions.js.map +1 -0
  594. package/packages/tools/lib/toolchain/index.d.ts +2 -2
  595. package/packages/tools/lib/toolchain/index.d.ts.map +1 -1
  596. package/packages/tools/lib/toolchain/index.js +2 -2
  597. package/packages/tools/lib/toolchain/index.js.map +1 -1
  598. package/packages/tools/lib/toolchain/operations.d.ts +45 -10
  599. package/packages/tools/lib/toolchain/operations.d.ts.map +1 -1
  600. package/packages/tools/lib/toolchain/operations.js +107 -8
  601. package/packages/tools/lib/toolchain/operations.js.map +1 -1
  602. package/packages/tools/lib/toolchain/ownership.d.ts +13 -0
  603. package/packages/tools/lib/toolchain/ownership.d.ts.map +1 -0
  604. package/packages/tools/lib/toolchain/ownership.js +57 -0
  605. package/packages/tools/lib/toolchain/ownership.js.map +1 -0
  606. package/packages/tools/lib/toolchain/process.d.ts +2 -2
  607. package/packages/tools/lib/toolchain/process.js +2 -2
  608. package/packages/tools/lib/toolchain/project-config.d.ts +4 -0
  609. package/packages/tools/lib/toolchain/project-config.d.ts.map +1 -0
  610. package/packages/tools/lib/toolchain/project-config.js +13 -0
  611. package/packages/tools/lib/toolchain/project-config.js.map +1 -0
  612. package/packages/tools/lib/toolchain/project-model.d.ts +75 -0
  613. package/packages/tools/lib/toolchain/project-model.d.ts.map +1 -0
  614. package/packages/tools/lib/toolchain/project-model.js +92 -0
  615. package/packages/tools/lib/toolchain/project-model.js.map +1 -0
  616. package/packages/tools/lib/toolchain/providers/internal-package.d.ts +6 -0
  617. package/packages/tools/lib/toolchain/providers/internal-package.d.ts.map +1 -0
  618. package/packages/tools/lib/toolchain/providers/internal-package.js +47 -0
  619. package/packages/tools/lib/toolchain/providers/internal-package.js.map +1 -0
  620. package/packages/tools/lib/toolchain/providers/opensysml-check.d.ts +20 -0
  621. package/packages/tools/lib/toolchain/providers/opensysml-check.d.ts.map +1 -0
  622. package/packages/tools/lib/toolchain/providers/opensysml-check.js +95 -0
  623. package/packages/tools/lib/toolchain/providers/opensysml-check.js.map +1 -0
  624. package/packages/tools/lib/toolchain/providers/opensysml-compact.d.ts +17 -0
  625. package/packages/tools/lib/toolchain/providers/opensysml-compact.d.ts.map +1 -0
  626. package/packages/tools/lib/toolchain/providers/opensysml-compact.js +69 -0
  627. package/packages/tools/lib/toolchain/providers/opensysml-compact.js.map +1 -0
  628. package/packages/tools/lib/toolchain/providers/opensysml-lowering.d.ts +50 -0
  629. package/packages/tools/lib/toolchain/providers/opensysml-lowering.d.ts.map +1 -0
  630. package/packages/tools/lib/toolchain/providers/opensysml-lowering.js +646 -0
  631. package/packages/tools/lib/toolchain/providers/opensysml-lowering.js.map +1 -0
  632. package/packages/tools/lib/toolchain/providers/opensysml-names.d.ts +16 -0
  633. package/packages/tools/lib/toolchain/providers/opensysml-names.d.ts.map +1 -0
  634. package/packages/tools/lib/toolchain/providers/opensysml-names.js +37 -0
  635. package/packages/tools/lib/toolchain/providers/opensysml-names.js.map +1 -0
  636. package/packages/tools/lib/toolchain/providers/opensysml.d.ts +88 -0
  637. package/packages/tools/lib/toolchain/providers/opensysml.d.ts.map +1 -0
  638. package/packages/tools/lib/toolchain/providers/opensysml.js +178 -0
  639. package/packages/tools/lib/toolchain/providers/opensysml.js.map +1 -0
  640. package/packages/tools/lib/toolchain/providers/recommended.d.ts +2 -0
  641. package/packages/tools/lib/toolchain/providers/recommended.d.ts.map +1 -0
  642. package/packages/tools/lib/toolchain/providers/recommended.js +13 -0
  643. package/packages/tools/lib/toolchain/providers/recommended.js.map +1 -0
  644. package/packages/tools/lib/toolchain/providers/sysand-project.d.ts +60 -0
  645. package/packages/tools/lib/toolchain/providers/sysand-project.d.ts.map +1 -0
  646. package/packages/tools/lib/toolchain/providers/sysand-project.js +160 -0
  647. package/packages/tools/lib/toolchain/providers/sysand-project.js.map +1 -0
  648. package/packages/tools/lib/toolchain/providers/sysand.d.ts.map +1 -1
  649. package/packages/tools/lib/toolchain/providers/sysand.js +26 -2
  650. package/packages/tools/lib/toolchain/providers/sysand.js.map +1 -1
  651. package/packages/tools/lib/toolchain/providers/syside-lowering.d.ts +29 -0
  652. package/packages/tools/lib/toolchain/providers/syside-lowering.d.ts.map +1 -0
  653. package/packages/tools/lib/toolchain/providers/syside-lowering.js +497 -0
  654. package/packages/tools/lib/toolchain/providers/syside-lowering.js.map +1 -0
  655. package/packages/tools/lib/toolchain/providers/syside-python.d.ts +9 -0
  656. package/packages/tools/lib/toolchain/providers/syside-python.d.ts.map +1 -0
  657. package/packages/tools/lib/toolchain/providers/syside-python.js +69 -0
  658. package/packages/tools/lib/toolchain/providers/syside-python.js.map +1 -0
  659. package/packages/tools/lib/toolchain/providers/syside.d.ts.map +1 -1
  660. package/packages/tools/lib/toolchain/providers/syside.js +2 -0
  661. package/packages/tools/lib/toolchain/providers/syside.js.map +1 -1
  662. package/packages/tools/lib/toolchain/registry.d.ts +118 -21
  663. package/packages/tools/lib/toolchain/registry.d.ts.map +1 -1
  664. package/packages/tools/lib/toolchain/registry.js +18 -24
  665. package/packages/tools/lib/toolchain/registry.js.map +1 -1
  666. package/packages/tools/lib/toolchain/schema.d.ts +6 -5
  667. package/packages/tools/lib/toolchain/schema.d.ts.map +1 -1
  668. package/packages/tools/lib/toolchain/schema.js +8 -13
  669. package/packages/tools/lib/toolchain/schema.js.map +1 -1
  670. package/packages/tools/lib/toolchain/shipped-library.d.ts +28 -0
  671. package/packages/tools/lib/toolchain/shipped-library.d.ts.map +1 -0
  672. package/packages/tools/lib/toolchain/shipped-library.js +120 -0
  673. package/packages/tools/lib/toolchain/shipped-library.js.map +1 -0
  674. package/packages/tools/lib/toolchain/source-fingerprint.d.ts +2 -0
  675. package/packages/tools/lib/toolchain/source-fingerprint.d.ts.map +1 -0
  676. package/packages/tools/lib/toolchain/source-fingerprint.js +30 -0
  677. package/packages/tools/lib/toolchain/source-fingerprint.js.map +1 -0
  678. package/packages/tools/lib/toolchain/user-settings-status.d.ts +51 -0
  679. package/packages/tools/lib/toolchain/user-settings-status.d.ts.map +1 -0
  680. package/packages/tools/lib/toolchain/user-settings-status.js +104 -0
  681. package/packages/tools/lib/toolchain/user-settings-status.js.map +1 -0
  682. package/packages/tools/lib/validator/architecture-validator.d.ts.map +1 -1
  683. package/packages/tools/lib/validator/architecture-validator.js +2 -1
  684. package/packages/tools/lib/validator/architecture-validator.js.map +1 -1
  685. package/packages/tools/lib/validator/behavior-validator.js +1 -1
  686. package/packages/tools/lib/validator/behavior-validator.js.map +1 -1
  687. package/packages/tools/lib/validator/builtin-rules.js +1 -1
  688. package/packages/tools/lib/validator/builtin-rules.js.map +1 -1
  689. package/packages/tools/lib/validator/constraint-eval.d.ts +30 -4
  690. package/packages/tools/lib/validator/constraint-eval.d.ts.map +1 -1
  691. package/packages/tools/lib/validator/constraint-eval.js +101 -59
  692. package/packages/tools/lib/validator/constraint-eval.js.map +1 -1
  693. package/packages/tools/lib/validator/constraint-loader-api.d.ts +22 -0
  694. package/packages/tools/lib/validator/constraint-loader-api.d.ts.map +1 -0
  695. package/packages/tools/lib/validator/constraint-loader-api.js +160 -0
  696. package/packages/tools/lib/validator/constraint-loader-api.js.map +1 -0
  697. package/packages/tools/lib/validator/constraint-loader.d.ts +22 -18
  698. package/packages/tools/lib/validator/constraint-loader.d.ts.map +1 -1
  699. package/packages/tools/lib/validator/constraint-loader.js +33 -141
  700. package/packages/tools/lib/validator/constraint-loader.js.map +1 -1
  701. package/packages/tools/lib/validator/rule-clauses.d.ts +51 -0
  702. package/packages/tools/lib/validator/rule-clauses.d.ts.map +1 -0
  703. package/packages/tools/lib/validator/rule-clauses.js +87 -0
  704. package/packages/tools/lib/validator/rule-clauses.js.map +1 -0
  705. package/packages/tools/lib/validator/rule-engine.d.ts +9 -1
  706. package/packages/tools/lib/validator/rule-engine.d.ts.map +1 -1
  707. package/packages/tools/lib/validator/rule-engine.js +50 -6
  708. package/packages/tools/lib/validator/rule-engine.js.map +1 -1
  709. package/packages/tools/lib/validator/rule-registry.d.ts +4 -8
  710. package/packages/tools/lib/validator/rule-registry.d.ts.map +1 -1
  711. package/packages/tools/lib/validator/rule-registry.js +42 -79
  712. package/packages/tools/lib/validator/rule-registry.js.map +1 -1
  713. package/packages/tools/lib/validator/rule-tailoring.d.ts +62 -0
  714. package/packages/tools/lib/validator/rule-tailoring.d.ts.map +1 -0
  715. package/packages/tools/lib/validator/rule-tailoring.js +85 -0
  716. package/packages/tools/lib/validator/rule-tailoring.js.map +1 -0
  717. package/packages/tools/lib/validator/types.d.ts +12 -1
  718. package/packages/tools/lib/validator/types.d.ts.map +1 -1
  719. package/packages/tools/lib/validator/workspace-boundary-validator.d.ts +9 -0
  720. package/packages/tools/lib/validator/workspace-boundary-validator.d.ts.map +1 -0
  721. package/packages/tools/lib/validator/workspace-boundary-validator.js +28 -0
  722. package/packages/tools/lib/validator/workspace-boundary-validator.js.map +1 -0
  723. package/packages/tools/python/memo_model.py +243 -0
  724. package/packages/tools/python/memo_stage1_syside.py +389 -0
  725. package/packages/tools/lib/commands/check.d.ts +0 -6
  726. package/packages/tools/lib/commands/check.d.ts.map +0 -1
  727. package/packages/tools/lib/commands/check.js +0 -191
  728. package/packages/tools/lib/commands/check.js.map +0 -1
  729. package/packages/tools/lib/commands/conformance.d.ts +0 -36
  730. package/packages/tools/lib/commands/conformance.d.ts.map +0 -1
  731. package/packages/tools/lib/commands/conformance.js +0 -212
  732. package/packages/tools/lib/commands/conformance.js.map +0 -1
  733. package/packages/tools/lib/commands/roundtrip.d.ts +0 -6
  734. package/packages/tools/lib/commands/roundtrip.d.ts.map +0 -1
  735. package/packages/tools/lib/commands/roundtrip.js +0 -145
  736. package/packages/tools/lib/commands/roundtrip.js.map +0 -1
  737. package/packages/tools/lib/conformance/baseline.d.ts +0 -26
  738. package/packages/tools/lib/conformance/baseline.d.ts.map +0 -1
  739. package/packages/tools/lib/conformance/baseline.js +0 -170
  740. package/packages/tools/lib/conformance/baseline.js.map +0 -1
  741. package/packages/tools/lib/conformance/bnf.d.ts +0 -84
  742. package/packages/tools/lib/conformance/bnf.d.ts.map +0 -1
  743. package/packages/tools/lib/conformance/bnf.js +0 -166
  744. package/packages/tools/lib/conformance/bnf.js.map +0 -1
  745. package/packages/tools/lib/conformance/corpus.d.ts +0 -125
  746. package/packages/tools/lib/conformance/corpus.d.ts.map +0 -1
  747. package/packages/tools/lib/conformance/corpus.js +0 -190
  748. package/packages/tools/lib/conformance/corpus.js.map +0 -1
  749. package/packages/tools/lib/conformance/diff-xmi.d.ts +0 -118
  750. package/packages/tools/lib/conformance/diff-xmi.d.ts.map +0 -1
  751. package/packages/tools/lib/conformance/diff-xmi.js +0 -276
  752. package/packages/tools/lib/conformance/diff-xmi.js.map +0 -1
  753. package/packages/tools/lib/conformance/generated/syside-rules.d.ts +0 -10
  754. package/packages/tools/lib/conformance/generated/syside-rules.d.ts.map +0 -1
  755. package/packages/tools/lib/conformance/generated/syside-rules.js +0 -1142
  756. package/packages/tools/lib/conformance/generated/syside-rules.js.map +0 -1
  757. package/packages/tools/lib/conformance/index.d.ts +0 -7
  758. package/packages/tools/lib/conformance/index.d.ts.map +0 -1
  759. package/packages/tools/lib/conformance/index.js +0 -19
  760. package/packages/tools/lib/conformance/index.js.map +0 -1
  761. package/packages/tools/lib/conformance/run.d.ts +0 -117
  762. package/packages/tools/lib/conformance/run.d.ts.map +0 -1
  763. package/packages/tools/lib/conformance/run.js +0 -0
  764. package/packages/tools/lib/conformance/run.js.map +0 -1
  765. package/packages/tools/lib/conformance/xmi.d.ts +0 -45
  766. package/packages/tools/lib/conformance/xmi.d.ts.map +0 -1
  767. package/packages/tools/lib/conformance/xmi.js +0 -148
  768. package/packages/tools/lib/conformance/xmi.js.map +0 -1
  769. package/packages/tools/lib/language/generated/ast.d.ts +0 -3571
  770. package/packages/tools/lib/language/generated/ast.d.ts.map +0 -1
  771. package/packages/tools/lib/language/generated/ast.js +0 -2980
  772. package/packages/tools/lib/language/generated/ast.js.map +0 -1
  773. package/packages/tools/lib/language/generated/grammar.d.ts +0 -7
  774. package/packages/tools/lib/language/generated/grammar.d.ts.map +0 -1
  775. package/packages/tools/lib/language/generated/grammar.js +0 -10687
  776. package/packages/tools/lib/language/generated/grammar.js.map +0 -1
  777. package/packages/tools/lib/language/generated/module.d.ts +0 -14
  778. package/packages/tools/lib/language/generated/module.d.ts.map +0 -1
  779. package/packages/tools/lib/language/generated/module.js +0 -21
  780. package/packages/tools/lib/language/generated/module.js.map +0 -1
  781. package/packages/tools/lib/language/memo-sysml-module.d.ts +0 -24
  782. package/packages/tools/lib/language/memo-sysml-module.d.ts.map +0 -1
  783. package/packages/tools/lib/language/memo-sysml-module.js +0 -20
  784. package/packages/tools/lib/language/memo-sysml-module.js.map +0 -1
  785. package/packages/tools/lib/model/builder.d.ts +0 -27
  786. package/packages/tools/lib/model/builder.d.ts.map +0 -1
  787. package/packages/tools/lib/model/builder.js +0 -2112
  788. package/packages/tools/lib/model/builder.js.map +0 -1
  789. package/packages/tools/lib/model/package-registry.d.ts +0 -64
  790. package/packages/tools/lib/model/package-registry.d.ts.map +0 -1
  791. package/packages/tools/lib/model/package-registry.js +0 -184
  792. package/packages/tools/lib/model/package-registry.js.map +0 -1
  793. package/packages/tools/lib/model/parser-utils.d.ts +0 -65
  794. package/packages/tools/lib/model/parser-utils.d.ts.map +0 -1
  795. package/packages/tools/lib/model/parser-utils.js +0 -201
  796. package/packages/tools/lib/model/parser-utils.js.map +0 -1
  797. package/packages/tools/lib/sysmlc/bin/memo-sysmlc.d.ts +0 -3
  798. package/packages/tools/lib/sysmlc/bin/memo-sysmlc.d.ts.map +0 -1
  799. package/packages/tools/lib/sysmlc/bin/memo-sysmlc.js +0 -97
  800. package/packages/tools/lib/sysmlc/bin/memo-sysmlc.js.map +0 -1
  801. package/packages/tools/lib/sysmlc/index.d.ts +0 -2
  802. package/packages/tools/lib/sysmlc/index.d.ts.map +0 -1
  803. package/packages/tools/lib/sysmlc/index.js +0 -7
  804. package/packages/tools/lib/sysmlc/index.js.map +0 -1
  805. package/packages/tools/lib/sysmlc/server.d.ts +0 -29
  806. package/packages/tools/lib/sysmlc/server.d.ts.map +0 -1
  807. package/packages/tools/lib/sysmlc/server.js +0 -168
  808. package/packages/tools/lib/sysmlc/server.js.map +0 -1
  809. package/packages/tools/lib/toolchain/lowering.d.ts +0 -63
  810. package/packages/tools/lib/toolchain/lowering.d.ts.map +0 -1
  811. package/packages/tools/lib/toolchain/lowering.js +0 -100
  812. package/packages/tools/lib/toolchain/lowering.js.map +0 -1
  813. package/packages/tools/lib/toolchain/providers/internal.d.ts +0 -33
  814. package/packages/tools/lib/toolchain/providers/internal.d.ts.map +0 -1
  815. package/packages/tools/lib/toolchain/providers/internal.js +0 -286
  816. package/packages/tools/lib/toolchain/providers/internal.js.map +0 -1
  817. package/packages/tools/lib/toolchain/sysmlc-client.d.ts +0 -77
  818. package/packages/tools/lib/toolchain/sysmlc-client.d.ts.map +0 -1
  819. package/packages/tools/lib/toolchain/sysmlc-client.js +0 -0
  820. package/packages/tools/lib/toolchain/sysmlc-client.js.map +0 -1
  821. package/packages/tools/lib/validator/sysml-constraints.d.ts +0 -64
  822. package/packages/tools/lib/validator/sysml-constraints.d.ts.map +0 -1
  823. package/packages/tools/lib/validator/sysml-constraints.js +0 -251
  824. package/packages/tools/lib/validator/sysml-constraints.js.map +0 -1
  825. package/packages/tools/src/grammar/memo-sysml.langium +0 -1064
@@ -1,20 +1,34 @@
1
1
  // ─── memo rules ──────────────────────────────────────────────────────────────
2
2
  //
3
3
  // CLI subcommands for consistency rule management:
4
- // memo rules list — list all rules with category and severity
5
- // memo rules check — evaluate rules against the current model
6
- // memo rules explain — show detailed info for a specific rule
7
- // memo rules coverage — show coverage rules grouped by standard
4
+ // memo validate --rules — list all rules with category and severity
5
+ // memo validate --explain-rule — show detailed info for a specific rule
6
+ // `memo validate` evaluates the rules; `memo validate --standards` reports which
7
+ // clauses they enforce.
8
8
  // ─────────────────────────────────────────────────────────────────────────────
9
- import { resolve } from 'node:path';
9
+ import { isAbsolute, relative, resolve, sep } from 'node:path';
10
10
  import chalk from 'chalk';
11
- import { findConfigFile, findProjectRoot, loadProjectSettings, parseFiles, buildMemoModel, loadOntologyRegistries, RuleRegistry, collectNativeConstraints, loadMethodologyDescriptor, resolveEffectiveRules, ruleCandidatesFromConstraints, buildEffectiveScope, activeRuleCandidates, BUILTIN_RULES, evaluateConstraintNode, validateArchitecture, } from '@memoarchitect/tools';
12
- import { findSysmlFiles } from '../model/sysml-files.js';
11
+ import { findConfigFile, findProjectRoot, loadProjectSettings, RuleRegistry, loadMethodologyDescriptor, BUILTIN_RULES, } from '@memoarchitect/tools';
12
+ import { loadProjectModel, projectConstraints } from '../toolchain/project-model.js';
13
+ import { handoffFileOf } from '../stage2/handoff-files.js';
14
+ import { clauseLabel, readClauseFacts } from '../validator/rule-clauses.js';
15
+ import { inactiveRules, resolveProjectRules } from '../model/effective-scope.js';
16
+ import { isProjectSource } from '../stage2/project-from-api.js';
17
+ import { bulkDecisions, tailoringRecord } from '../validator/rule-tailoring.js';
18
+ import { checkNewRule, dryRunRule, insertRule, resolveClauseReference } from '../server/rule-writer.js';
19
+ import { commitSource } from '../server/persistor.js';
20
+ import { checkRulePolicy, insertRulePolicy, renderRulePolicy, resolveStandardReference, } from '../server/rule-policy-writer.js';
21
+ import { rulesSelectedBy } from '../model/methodology-resolver.js';
22
+ import { selectedOutlineSource } from '../authoring/outline-source.js';
23
+ import { existsSync, readFileSync } from 'node:fs';
24
+ const RULE_DOMAINS = ['modelling', 'medicalDevice', 'organisation'];
25
+ const RULE_OBLIGATIONS = ['required', 'recommended', 'bestPractice'];
26
+ import { resolutionLoads } from '../stage2/project-from-api.js';
13
27
  // ─── Helpers ─────────────────────────────────────────────────────────────────
14
- async function loadContext(projectDir) {
28
+ export async function loadContext(projectDir) {
15
29
  const cwd = resolve(projectDir || process.cwd());
16
30
  // The loader resolves a PROJECT ROOT, not a settings file. Passing the
17
- // config path resolved no documents, so `memo rules list` reported "No
31
+ // config path resolved no documents, so `memo validate --rules` reported "No
18
32
  // rules found" on a project `memo validate` was evaluating 61 rules
19
33
  // against. The two commands must agree about what the effective rule set
20
34
  // is — that is the whole point of section 10.4.
@@ -22,33 +36,32 @@ async function loadContext(projectDir) {
22
36
  if (!projectRoot) {
23
37
  console.error(chalk.red('❌ No MEMO project found. A project is located by the `entrypoint` in its '
24
38
  + '`memo.package.yaml`, which names the SysML file declaring its identity '
25
- + 'and method binding — run `memo init` to scaffold one.'));
39
+ + 'and method binding — run `memo-architect init` to scaffold one.'));
26
40
  process.exit(1);
27
41
  }
28
42
  // A package descriptor is an optional LOCATOR, not a requirement. Demanding
29
- // one made `memo rules list` refuse to run on a project `memo validate`
43
+ // one made `memo validate --rules` refuse to run on a project `memo validate`
30
44
  // handles fine — GPCA has no `memo.package.yaml` and does not need one,
31
45
  // because the entrypoint and the binding decide what the model contains.
32
46
  const configPath = findConfigFile(projectRoot);
33
47
  const config = loadProjectSettings(projectRoot);
34
- // Load ontology registries
35
- let ontologyRegistries;
36
- let ruleRegistry;
37
- let ontologyDocuments = [];
38
- let filePackages = new Map();
39
- try {
40
- const loadResult = await loadOntologyRegistries(projectRoot);
41
- filePackages = loadResult.resolution?.filePackages ?? new Map();
42
- if (loadResult.fileCount > 0) {
43
- ontologyRegistries = loadResult.registries;
44
- ontologyDocuments = loadResult.parsedDocuments;
45
- // Build rule registry from already-parsed ontology documents (discovery/catalog)
46
- ruleRegistry = new RuleRegistry();
47
- ruleRegistry.populateFromDocuments(loadResult.parsedDocuments);
48
- }
49
- }
50
- catch {
51
- // Ontology loading optional
48
+ // The project as every command loads it, from the selected compiler:
49
+ // the model, the registries, the resolution and the rule definitions.
50
+ const project = await loadProjectModel({ projectRoot, config });
51
+ const ontologyRegistries = project.registries;
52
+ const filePackages = project.resolution?.filePackages ?? new Map();
53
+ const constraints = projectConstraints(project);
54
+ // The rule catalogue: the rule parts the project's closure declares, from
55
+ // the compiler's handoff.
56
+ const ruleRegistry = new RuleRegistry();
57
+ {
58
+ const loads = project.resolution ? resolutionLoads(project.resolution) : () => true;
59
+ const fileOf = handoffFileOf(project.api, project.resolution?.filePackages);
60
+ const catalogue = new RuleRegistry();
61
+ catalogue.populateFromApi(project.api, fileOf);
62
+ for (const entry of catalogue.entries())
63
+ if (loads(entry.file))
64
+ ruleRegistry.register(entry);
52
65
  }
53
66
  // The EFFECTIVE rule set, resolved exactly as `memo validate` and the dev
54
67
  // server resolve it. `ruleRegistry` above is a discovery catalogue of
@@ -57,33 +70,37 @@ async function loadContext(projectDir) {
57
70
  // with `validate` about how many rules exist.
58
71
  let effectiveRules = [];
59
72
  let ruleDiagnostics = [];
73
+ let inactive = [];
60
74
  try {
61
- const projectFiles = findSysmlFiles(projectRoot);
62
- const { documents } = await parseFiles(projectFiles, `${projectRoot}/`);
63
- const constraints = collectNativeConstraints([...ontologyDocuments, ...documents]);
64
- const descriptor = await loadMethodologyDescriptor(projectRoot);
65
- // The same activation `memo validate` applies. Reporting every resolved
66
- // constraint instead would describe a rule set the project does not
67
- // have: GPCA's methodology excludes cybersecurity, and listing its
68
- // rules as effective is the exact claim the scope work exists to stop.
69
- const scope = descriptor.effective
70
- ? buildEffectiveScope(descriptor.effective)
71
- : undefined;
75
+ const descriptor = await loadMethodologyDescriptor(projectRoot, project.resolution, project.api);
76
+ // The same activation `memo validate` and the dev server apply
77
+ // (`resolveProjectRules`). Reporting every resolved constraint instead
78
+ // would describe a rule set the project does not have: GPCA's methodology
79
+ // excludes cybersecurity, and listing its rules as effective is the exact
80
+ // claim the scope work exists to stop. A rule the project wrote in its own
81
+ // files always counts; the rules the methodology leaves out are listed
82
+ // with the reason, so an absent rule is never mistaken for a passing one.
72
83
  const kindRegistry = ontologyRegistries?.kindRegistry;
73
- const candidates = scope
74
- ? activeRuleCandidates(constraints, scope, filePackages, kindName => kindRegistry?.getKind(kindName)?.sourceFile)
75
- : ruleCandidatesFromConstraints(constraints);
76
- const resolved = resolveEffectiveRules(candidates, descriptor.effective?.policyChain ?? []);
84
+ const kindSourceFile = (kindName) => kindRegistry?.getKind(kindName)?.sourceFile;
85
+ const isOwnFile = project.resolution ? isProjectSource(project.resolution) : () => false;
86
+ const { rules: resolved, scope } = resolveProjectRules({
87
+ constraints, effective: descriptor.effective, filePackages, kindSourceFile, isOwnFile,
88
+ });
77
89
  effectiveRules = resolved.rules;
78
90
  ruleDiagnostics = resolved.diagnostics;
91
+ if (scope)
92
+ inactive = inactiveRules(constraints, scope, filePackages, kindSourceFile, isOwnFile);
79
93
  }
80
94
  catch {
81
95
  // Rule resolution is reported, not fatal: a bad policy is a diagnostic
82
96
  // about the methodology, not a reason the command cannot run.
83
97
  }
98
+ // The clauses the model carries, to name what a rule enforces. Only a
99
+ // compiler that builds the model states them.
100
+ const clauseFacts = project.api ? readClauseFacts(project.api) : [];
84
101
  return {
85
- cwd, configPath, config, ontologyRegistries, ruleRegistry, ontologyDocuments,
86
- effectiveRules, ruleDiagnostics,
102
+ cwd, projectRoot, configPath, config, ontologyRegistries, ruleRegistry, constraints, model: project.model,
103
+ effectiveRules, ruleDiagnostics, inactive, clauseFacts,
87
104
  };
88
105
  }
89
106
  function severityIcon(severity) {
@@ -94,21 +111,49 @@ function severityIcon(severity) {
94
111
  default: return ' ';
95
112
  }
96
113
  }
114
+ /**
115
+ * Where a rule is written: in this project (a rule its users made), or in a library it imports
116
+ * (the ontology, a methodology). Both kinds are rules; only the first is the project's to edit.
117
+ */
118
+ function originOf(rule, projectRoot) {
119
+ if (!rule.sourceFile)
120
+ return 'library';
121
+ const relativePath = relative(projectRoot, resolve(projectRoot, rule.sourceFile));
122
+ return relativePath.startsWith('..') || isAbsolute(relativePath) || relativePath.split(sep).includes('node_modules')
123
+ ? 'library' : 'project';
124
+ }
97
125
  export async function rulesListCommand(projectDir, options) {
98
126
  const format = options?.format || 'text';
99
- const { effectiveRules, ruleDiagnostics } = await loadContext(projectDir);
127
+ const { effectiveRules, ruleDiagnostics, inactive, clauseFacts } = await loadContext(projectDir);
128
+ const projectRoot = resolve(projectDir ?? process.cwd());
129
+ if (options?.domain && !RULE_DOMAINS.includes(options.domain)) {
130
+ console.error(chalk.red(`❌ --domain expects one of ${RULE_DOMAINS.join(', ')}, got "${options.domain}".`));
131
+ process.exit(1);
132
+ }
133
+ if (options?.obligation && !RULE_OBLIGATIONS.includes(options.obligation)) {
134
+ console.error(chalk.red(`❌ --rules-obligation expects one of ${RULE_OBLIGATIONS.join(', ')}, got "${options.obligation}".`));
135
+ process.exit(1);
136
+ }
100
137
  // Section 19 asks that the effective rule SET be auditable: identity,
101
138
  // disposition, severity, and policy chain. That is what this reports —
102
139
  // governance, not evidence that anything was validated (section 10.4).
103
- const filteredRules = options?.category
104
- ? effectiveRules.filter(r => r.tailoring === options.category)
105
- : effectiveRules;
140
+ const filteredRules = effectiveRules
141
+ .filter(r => !options?.category || r.tailoring === options.category)
142
+ .filter(r => !options?.domain || r.domain === options.domain)
143
+ .filter(r => !options?.obligation || r.obligation === options.obligation);
144
+ // A domain filter narrows to MEMO's tailorable rules: the built-in ones state no domain.
145
+ const narrowed = Boolean(options?.category || options?.domain || options?.obligation);
106
146
  if (format === 'json') {
107
147
  console.log(JSON.stringify({
108
- tailorable: filteredRules,
109
- builtin: options?.category ? [] : BUILTIN_RULES,
110
- total: filteredRules.length + (options?.category ? 0 : BUILTIN_RULES.length),
148
+ tailorable: filteredRules.map(rule => ({
149
+ ...rule,
150
+ clauses: (rule.enforces ?? []).map(clause => ({ qualifiedName: clause, label: clauseLabel(clauseFacts, clause) })),
151
+ origin: originOf(rule, projectRoot),
152
+ })),
153
+ builtin: narrowed ? [] : BUILTIN_RULES,
154
+ total: filteredRules.length + (narrowed ? 0 : BUILTIN_RULES.length),
111
155
  diagnostics: ruleDiagnostics,
156
+ inactive,
112
157
  }, null, 2));
113
158
  return;
114
159
  }
@@ -135,11 +180,18 @@ export async function rulesListCommand(projectDir, options) {
135
180
  ? '' : chalk.yellow(` [${rule.disposition}]`);
136
181
  const overridden = rule.effectiveSeverity !== rule.declaredSeverity
137
182
  ? chalk.gray(` (declared ${rule.declaredSeverity})`) : '';
183
+ const own = originOf(rule, projectRoot) === 'project' ? chalk.green(' [this project\'s own]') : '';
184
+ const domain = rule.domain === 'medicalDevice'
185
+ ? chalk.magenta(' [medical device]') : rule.domain === 'organisation' ? chalk.blue(' [organisation]') : '';
186
+ const obligation = rule.obligation ? chalk.gray(` [${rule.obligation}]`) : '';
138
187
  console.log(` ${icon} ${chalk.white(rule.sourceRuleId)} ${rule.sourceRuleType}`
139
- + `${disposition}${overridden}`);
188
+ + `${domain}${obligation}${own}${disposition}${overridden}`);
140
189
  if (rule.rationaleText) {
141
190
  console.log(` ${chalk.gray(rule.rationaleText)}`);
142
191
  }
192
+ for (const clause of rule.enforces ?? []) {
193
+ console.log(` ${chalk.gray(`enforces ${clauseLabel(clauseFacts, clause)}`)}`);
194
+ }
143
195
  if (rule.authority) {
144
196
  console.log(` ${chalk.gray(`authority: ${rule.authority}`)}`);
145
197
  }
@@ -151,7 +203,7 @@ export async function rulesListCommand(projectDir, options) {
151
203
  // none. Listing them here is what makes this command's total reconcile
152
204
  // with `memo validate` — the two used to report different numbers because
153
205
  // only one of them knew these rules existed.
154
- if (!options?.category) {
206
+ if (!narrowed) {
155
207
  console.log(chalk.bold.cyan(` BUILT-IN — not tailorable (${BUILTIN_RULES.length})`));
156
208
  for (const rule of BUILTIN_RULES) {
157
209
  console.log(` ${severityIcon(rule.severity)} ${chalk.white(rule.id)} ${rule.name}`);
@@ -170,78 +222,22 @@ export async function rulesListCommand(projectDir, options) {
170
222
  for (const diagnostic of ruleDiagnostics) {
171
223
  console.log(chalk.yellow(` [${diagnostic.code}] ${diagnostic.message}`));
172
224
  }
173
- }
174
- // ─── memo rules check ────────────────────────────────────────────────────────
175
- export async function rulesCheckCommand(projectDir, options) {
176
- const format = options?.format || 'text';
177
- const { cwd, config, ontologyRegistries, ontologyDocuments } = await loadContext(projectDir);
178
- // Parse project SysML files
179
- const sysmlFiles = findSysmlFiles(cwd);
180
- if (sysmlFiles.length === 0) {
181
- console.error(chalk.red('❌ No .sysml files found.'));
182
- process.exit(1);
183
- }
184
- const parseResult = await parseFiles(sysmlFiles);
185
- const model = buildMemoModel(parseResult.documents, config, parseResult.errors, ontologyRegistries);
186
- // Evaluate native `constraint def` bodies (KerML expressions) across ontology + project docs.
187
- const constraints = collectNativeConstraints([...ontologyDocuments, ...parseResult.documents]);
188
- let rulesPassed = 0;
189
- const violations = [];
190
- for (const constraint of constraints) {
191
- const ruleViolations = constraint.evaluator === 'architecture'
192
- ? validateArchitecture(model, constraint.appliesToKind, ontologyRegistries?.kindRegistry)
193
- : constraint.evaluator && constraint.evaluator !== 'native'
194
- ? []
195
- : evaluateConstraintNode(constraint, constraint.ast, model, ontologyRegistries?.kindRegistry);
196
- if (ruleViolations.length === 0)
197
- rulesPassed++;
198
- violations.push(...ruleViolations);
199
- }
200
- const result = {
201
- rulesEvaluated: constraints.length,
202
- rulesPassed,
203
- violations,
204
- timestamp: Date.now(),
205
- };
206
- if (format === 'json') {
207
- console.log(JSON.stringify(result, null, 2));
208
- return;
209
- }
210
- console.log(chalk.bold('\n📋 Rule Check Results\n'));
211
- console.log(chalk.gray(` Rules evaluated: ${result.rulesEvaluated}`));
212
- console.log(chalk.gray(` Rules passed: ${result.rulesPassed}`));
213
- console.log(chalk.gray(` Violations: ${result.violations.length}`));
214
- console.log();
215
- if (result.violations.length === 0) {
216
- console.log(chalk.green(' ✅ All rules passed!'));
217
- return;
218
- }
219
- // Group violations by rule
220
- const byRule = new Map();
221
- for (const v of result.violations) {
222
- if (!byRule.has(v.ruleId))
223
- byRule.set(v.ruleId, []);
224
- byRule.get(v.ruleId).push(v);
225
- }
226
- for (const [ruleId, violations] of byRule) {
227
- const first = violations[0];
228
- const icon = severityIcon(first.severity);
229
- console.log(` ${icon} ${chalk.white(ruleId)}: ${first.description} (${violations.length} violations)`);
230
- for (const v of violations.slice(0, 5)) {
231
- console.log(` ${chalk.gray('→')} ${v.elementKind}/${v.elementName} ${chalk.gray(`(${v.elementId})`)}`);
232
- }
233
- if (violations.length > 5) {
234
- console.log(chalk.gray(` ... and ${violations.length - 5} more`));
225
+ // A rule that does not run for this project says so, with the reason: a rule
226
+ // that is silently absent reads as one that passed.
227
+ if (!narrowed && inactive.length > 0) {
228
+ console.log(chalk.bold.cyan(`\n NOT RUNNING IN THIS PROJECT (${inactive.length})`));
229
+ for (const rule of inactive) {
230
+ console.log(chalk.gray(` ${rule.id} ${rule.typeName ?? ''} — ${rule.detail}`));
235
231
  }
236
232
  }
237
233
  }
238
- // ─── memo rules explain ──────────────────────────────────────────────────────
234
+ // ─── memo validate --explain-rule ──────────────────────────────────────────────────────
239
235
  export async function rulesExplainCommand(ruleId, projectDir, options) {
240
236
  const format = options?.format || 'text';
241
- const { ruleRegistry, ontologyDocuments } = await loadContext(projectDir);
237
+ const { ruleRegistry, constraints } = await loadContext(projectDir);
242
238
  // Look up in registry first (catalog metadata), then in native constraint defs.
243
239
  const registryEntry = ruleRegistry?.getRule(ruleId);
244
- const constraint = collectNativeConstraints(ontologyDocuments).find(c => c.id === ruleId);
240
+ const constraint = constraints.find(c => c.id === ruleId);
245
241
  if (!registryEntry && !constraint) {
246
242
  console.error(chalk.red(`❌ Rule "${ruleId}" not found.`));
247
243
  process.exit(1);
@@ -291,65 +287,237 @@ export async function rulesExplainCommand(ruleId, projectDir, options) {
291
287
  console.log(` ${chalk.cyan('Source:')} native constraint def`);
292
288
  }
293
289
  }
294
- // ─── memo rules coverage ────────────────────────────────────────────────────
295
- export async function rulesCoverageCommand(projectDir, options) {
296
- const format = options?.format || 'text';
297
- const { cwd, config, ontologyRegistries, ruleRegistry } = await loadContext(projectDir);
298
- const coverageRules = ruleRegistry?.byCategory('coverage') ?? [];
299
- // Parse project model to evaluate coverage
300
- const sysmlFiles = findSysmlFiles(cwd);
301
- let model;
302
- if (sysmlFiles.length > 0) {
303
- const parseResult = await parseFiles(sysmlFiles);
304
- model = buildMemoModel(parseResult.documents, config, parseResult.errors, ontologyRegistries);
305
- }
306
- const results = coverageRules.map(rule => {
307
- const target = rule.attributes['coverageTarget'] || rule.appliesTo;
308
- const count = model ? [...model.elements.values()].filter((e) => e.kind === target).length : 0;
309
- return { rule, passed: count > 0, count };
310
- });
290
+ // ─── memo-architect rules tailoring ────────────────────────────────────────────────────
291
+ //
292
+ // The record of every rule this project's policies switched off, downgraded or
293
+ // replaced, with who decided and why. A user may tailor any rule; what the
294
+ // project owes is this record, and it belongs in the DHF.
295
+ export async function rulesTailoringCommand(projectDir, options) {
296
+ const { effectiveRules, ruleDiagnostics } = await loadContext(projectDir);
297
+ const entries = tailoringRecord(effectiveRules);
298
+ const decisions = bulkDecisions(entries);
299
+ const describe = (d) => d.selection.standard ? `every rule of the standard ${d.selection.standard}` : `every rule on the layer ${d.selection.category}`;
300
+ // A policy whose target is not in the project's rule set changes nothing,
301
+ // but the decision it states is still the project's record.
302
+ const inert = ruleDiagnostics.filter(d => d.code === 'missing-target');
303
+ const format = options?.format ?? 'text';
311
304
  if (format === 'json') {
312
- const grouped = {};
313
- for (const r of results) {
314
- const std = r.rule.attributes['standard'] || 'unspecified';
315
- if (!grouped[std])
316
- grouped[std] = [];
317
- grouped[std].push({ id: r.rule.id, name: r.rule.name, passed: r.passed, count: r.count });
318
- }
319
- const totalPassed = results.filter(r => r.passed).length;
320
- const pct = results.length > 0 ? Math.round((totalPassed / results.length) * 100) : 0;
321
- console.log(JSON.stringify({ total: results.length, passed: totalPassed, percentage: pct, byStandard: grouped }, null, 2));
305
+ console.log(JSON.stringify({ tailored: entries, total: entries.length, decisions, inertPolicies: inert }, null, 2));
322
306
  return;
323
307
  }
324
- console.log(chalk.bold('\n📊 Coverage Rules by Standard\n'));
325
- if (coverageRules.length === 0) {
326
- console.log(chalk.gray(' No coverage rules found.'));
308
+ if (format === 'markdown') {
309
+ console.log('# Rule tailoring record\n');
310
+ if (entries.length === 0)
311
+ console.log('No rule has been switched off, downgraded or replaced.');
312
+ if (decisions.length > 0) {
313
+ console.log('## Decisions that reached several rules\n');
314
+ for (const d of decisions) {
315
+ console.log(`### ${d.policy}: ${describe(d)}\n`);
316
+ console.log(`- ${d.disposition ?? 'enabled'}${d.severityOverride ? `, severity ${d.severityOverride}` : ''} (${d.level}, ${d.source}): ${d.rationaleText ?? '*no rationale*'}`);
317
+ console.log(`- Authority: ${d.authority ?? '*none*'}; approval: ${d.approvalReference ?? '*none*'}`);
318
+ console.log(`- Reached ${d.ruleIds.length} rule(s): ${d.ruleIds.join(', ')}\n`);
319
+ }
320
+ console.log('## Rules\n');
321
+ }
322
+ for (const entry of entries) {
323
+ console.log(`## ${entry.ruleId} ${entry.ruleType}${entry.domain === 'medicalDevice' ? ' (medical device)' : ''}\n`);
324
+ console.log(`- Disposition: ${entry.disposition}${entry.activeRuleId ? ` → ${entry.activeRuleId}` : ''}`);
325
+ console.log(`- Severity: ${entry.declaredSeverity} → ${entry.effectiveSeverity}`);
326
+ for (const change of entry.changes) {
327
+ console.log(`- ${change.policy} (${change.level}, ${change.source}): ${change.rationaleText ?? '*no rationale*'}`);
328
+ console.log(` - Authority: ${change.authority ?? '*none*'}; approval: ${change.approvalReference ?? '*none*'}`
329
+ + `${change.approvedBy ? `; approved by ${change.approvedBy}` : ''}${change.approvedOn ? ` on ${change.approvedOn}` : ''}`);
330
+ }
331
+ if (entry.gaps.length > 0)
332
+ console.log(`- **Record incomplete:** ${entry.gaps.join(', ')}`);
333
+ console.log();
334
+ }
335
+ if (inert.length > 0) {
336
+ console.log('## Policies that target a rule outside the project\'s rule set\n');
337
+ for (const d of inert)
338
+ console.log(`- ${d.policy}: ${d.message}`);
339
+ }
327
340
  return;
328
341
  }
329
- // Group by standard
330
- const byStandard = new Map();
331
- for (const r of results) {
332
- const std = r.rule.attributes['standard'] || 'unspecified';
333
- if (!byStandard.has(std))
334
- byStandard.set(std, []);
335
- byStandard.get(std).push(r);
336
- }
337
- for (const [standard, stdResults] of byStandard) {
338
- const stdPassed = stdResults.filter(r => r.passed).length;
339
- const stdPct = Math.round((stdPassed / stdResults.length) * 100);
340
- const pctColor = stdPct >= 90 ? chalk.green : stdPct >= 50 ? chalk.yellow : chalk.red;
341
- console.log(chalk.bold.cyan(` ${standard}`) + chalk.gray(` (${stdResults.length} rules)`) + ` ${pctColor(`${stdPct}%`)}`);
342
- for (const r of stdResults) {
343
- const clause = r.rule.attributes['clause'] ? chalk.gray(`[${r.rule.attributes['clause']}]`) : '';
344
- const icon = r.passed ? chalk.green('✔') : severityIcon(r.rule.severity);
345
- const countLabel = r.passed ? chalk.green(`${r.count} found`) : chalk.red('0 found');
346
- console.log(` ${icon} ${chalk.white(r.rule.id)} ${r.rule.name} ${clause} — ${countLabel}`);
342
+ console.log(chalk.bold('\n📝 Rule tailoring record\n'));
343
+ if (entries.length === 0) {
344
+ console.log(chalk.gray(' No rule has been switched off, downgraded or replaced.\n'));
345
+ }
346
+ for (const d of decisions) {
347
+ console.log(` ${chalk.bold(d.policy)} — ${chalk.yellow(`${d.disposition ?? 'enabled'}${d.severityOverride ? ` at ${d.severityOverride}` : ''} ${describe(d)}`)}`);
348
+ console.log(chalk.gray(` ${d.rationaleText ?? 'no rationale'}`));
349
+ console.log(chalk.gray(` authority: ${d.authority ?? 'none'}; approval: ${d.approvalReference ?? 'none'}`));
350
+ console.log(chalk.gray(` reached ${d.ruleIds.length} rule(s): ${d.ruleIds.join(', ')}`));
351
+ }
352
+ if (decisions.length > 0)
353
+ console.log();
354
+ for (const entry of entries) {
355
+ const medical = entry.domain === 'medicalDevice' ? chalk.magenta(' [medical device]') : '';
356
+ const state = entry.disposition === 'enabled'
357
+ ? `severity ${entry.declaredSeverity} → ${entry.effectiveSeverity}`
358
+ : entry.disposition === 'replaced' ? `replaced by ${entry.activeRuleId}` : 'disabled';
359
+ console.log(` ${chalk.white(entry.ruleId)} ${entry.ruleType}${medical} — ${chalk.yellow(state)}`);
360
+ for (const change of entry.changes) {
361
+ console.log(chalk.gray(` ${change.policy} (${change.level}): ${change.rationaleText ?? 'no rationale'}`));
362
+ console.log(chalk.gray(` authority: ${change.authority ?? 'none'}; approval: ${change.approvalReference ?? 'none'}`
363
+ + `${change.approvedBy ? `; approved by ${change.approvedBy}` : ''}${change.approvedOn ? ` on ${change.approvedOn}` : ''}`));
364
+ }
365
+ if (entry.gaps.length > 0)
366
+ console.log(chalk.yellow(` record incomplete: ${entry.gaps.join(', ')}`));
367
+ }
368
+ if (entries.length > 0)
369
+ console.log(chalk.gray(`\n ${entries.length} rule(s) tailored.\n`));
370
+ if (inert.length > 0) {
371
+ console.log(chalk.bold(' Policies that target a rule outside this project\'s rule set (they change nothing)\n'));
372
+ for (const d of inert)
373
+ console.log(chalk.gray(` ${d.policy}: ${d.message}`));
374
+ console.log();
375
+ }
376
+ }
377
+ export async function rulesNewCommand(projectDir, options) {
378
+ const missing = ['id', 'type', 'appliesTo', 'predicate', 'rationale', 'file'].filter(key => !options[key]);
379
+ if (missing.length > 0) {
380
+ console.error(chalk.red(`❌ Missing: ${missing.map(m => `--${m.replace(/[A-Z]/g, c => `-${c.toLowerCase()}`)}`).join(', ')}`));
381
+ process.exit(1);
382
+ }
383
+ if (options.obligation && !RULE_OBLIGATIONS.includes(options.obligation)) {
384
+ console.error(chalk.red(`❌ --obligation expects one of ${RULE_OBLIGATIONS.join(', ')}, got "${options.obligation}".`));
385
+ process.exit(1);
386
+ }
387
+ const { projectRoot, config, constraints, model, ontologyRegistries, clauseFacts } = await loadContext(projectDir);
388
+ const enforces = [];
389
+ for (const text of options.enforces ?? []) {
390
+ const clause = resolveClauseReference(clauseFacts, text);
391
+ if (!clause) {
392
+ console.error(chalk.red(`❌ "${text}" names no single clause. Use the qualified name, or "<standard> §<number>" such as "62304 §5.2".`));
393
+ process.exit(1);
347
394
  }
395
+ enforces.push(clause.qualifiedName);
396
+ }
397
+ const request = {
398
+ id: options.id, typeName: options.type, appliesTo: options.appliesTo,
399
+ predicateExpression: options.predicate, severity: (options.severity ?? (options.obligation === 'required' ? 'error' : options.obligation === 'bestPractice' ? 'info' : 'warning')),
400
+ rationaleText: options.rationale, file: options.file,
401
+ ...(options.obligation ? { obligation: options.obligation } : {}),
402
+ ...(options.tailoring ? { tailoring: options.tailoring } : {}),
403
+ ...(enforces.length > 0 ? { enforces } : {}),
404
+ };
405
+ const kindRegistry = ontologyRegistries?.kindRegistry;
406
+ const refusal = checkNewRule(request, {
407
+ existingIds: new Set(constraints.map(c => c.id)),
408
+ existingTypeNames: new Set(constraints.map(c => c.typeName).filter((n) => Boolean(n))),
409
+ kindNames: kindRegistry ? new Set(kindRegistry.kindNames()) : undefined,
410
+ clauses: clauseFacts,
411
+ });
412
+ if (refusal) {
413
+ console.error(chalk.red(`❌ [${refusal.code}] ${refusal.message}`));
414
+ process.exit(1);
415
+ }
416
+ if (model) {
417
+ const result = dryRunRule(request, model, kindRegistry);
418
+ console.log(chalk.bold(`\nDry run: ${request.id} would flag ${result.flagged.length} of ${result.subjects} ${request.appliesTo}`));
419
+ for (const element of result.flagged.slice(0, 20)) {
420
+ console.log(` ${chalk.yellow('⚠')} ${element.elementKind} ${element.elementName || element.elementId}`);
421
+ }
422
+ if (result.flagged.length > 20)
423
+ console.log(chalk.gray(` … and ${result.flagged.length - 20} more`));
348
424
  console.log();
349
425
  }
350
- const totalPassed = results.filter(r => r.passed).length;
351
- const totalPct = results.length > 0 ? Math.round((totalPassed / results.length) * 100) : 0;
352
- const totalColor = totalPct >= 90 ? chalk.green : totalPct >= 50 ? chalk.yellow : chalk.red;
353
- console.log(chalk.gray(` Total: ${totalPassed}/${results.length} coverage rules satisfied`) + ` ${totalColor(`(${totalPct}%)`)}`);
426
+ if (options.dryRun)
427
+ return;
428
+ const relativePath = request.file.replaceAll('\\', '/');
429
+ const filePath = resolve(projectRoot, relativePath);
430
+ if (!existsSync(filePath)) {
431
+ // A methodology runs the rules of the packages it includes, so a rule in a
432
+ // package nothing includes is written and never runs. Put it in one the project has.
433
+ console.error(chalk.red(`❌ ${relativePath} does not exist. Write the rule into a file of a package the project already includes; `
434
+ + 'a methodology only runs the rules of the packages it includes.'));
435
+ process.exit(1);
436
+ }
437
+ const updated = insertRule(readFileSync(filePath, 'utf8'), request);
438
+ if (updated === undefined) {
439
+ console.error(chalk.red(`❌ ${relativePath} declares no package to put the rule in; nothing was written.`));
440
+ process.exit(1);
441
+ }
442
+ const committed = await commitSource(filePath, relativePath, updated, selectedOutlineSource(projectRoot, config));
443
+ if (!committed.success) {
444
+ console.error(chalk.red(`❌ ${committed.error}`));
445
+ process.exit(1);
446
+ }
447
+ console.log(chalk.green(`✅ Wrote ${request.id} (${request.typeName}) to ${relativePath}`));
448
+ }
449
+ export async function rulesTailorCommand(projectDir, options) {
450
+ const fail = (message) => { console.error(chalk.red(`❌ ${message}`)); process.exit(1); };
451
+ const given = [options.rule, options.standard, options.category].filter(Boolean);
452
+ if (given.length !== 1)
453
+ fail('Name exactly one of --rule, --standard and --category.');
454
+ if (!options.disable && !options.severity && !options.replaceWith) {
455
+ fail('State the decision: --disable, --severity <error|warning|info>, or --replace-with <rule> (one rule only).');
456
+ }
457
+ if (options.severity && !['error', 'warning', 'info'].includes(options.severity))
458
+ fail('--severity expects error, warning or info.');
459
+ if (!options.dryRun && !options.file)
460
+ fail('Missing --file: the project binding or methodology source to write the policy into.');
461
+ const { projectRoot, config, effectiveRules, clauseFacts } = await loadContext(projectDir);
462
+ const request = {
463
+ disposition: options.replaceWith ? 'replaced' : options.disable ? 'disabled' : 'enabled',
464
+ rationaleText: options.rationale ?? '',
465
+ ...(options.severity ? { severityOverride: options.severity } : {}),
466
+ ...(options.replaceWith ? { replacementRuleType: options.replaceWith } : {}),
467
+ ...(options.authority ? { authority: options.authority } : {}),
468
+ ...(options.approval ? { approvalReference: options.approval } : {}),
469
+ };
470
+ if (options.rule) {
471
+ // A rule is named by its `constraint def` or by its id.
472
+ const target = effectiveRules.find(r => r.sourceRuleType === options.rule || r.sourceRuleId === options.rule);
473
+ request.targetRuleType = target?.sourceRuleType ?? options.rule;
474
+ }
475
+ else if (options.standard) {
476
+ if (clauseFacts.length === 0) {
477
+ fail('A standard is selected by the clauses its rules enforce, which only a compiler that builds the model can read. '
478
+ + 'Select the compiler (--toolchain.compiler, or the compiler setting), or name rules one at a time.');
479
+ }
480
+ const standard = resolveStandardReference(clauseFacts, options.standard);
481
+ if (!standard)
482
+ fail(`"${options.standard}" names no single standard of the model. Use its designation, such as "ISO 14971", or its qualified name.`);
483
+ request.targetStandard = standard;
484
+ }
485
+ else {
486
+ request.targetCategory = options.category;
487
+ }
488
+ const refusal = checkRulePolicy(request, effectiveRules);
489
+ if (refusal)
490
+ fail(`[${refusal.code}] ${refusal.message}`);
491
+ const reached = request.targetRuleType
492
+ ? effectiveRules.filter(r => r.sourceRuleType === request.targetRuleType)
493
+ : rulesSelectedBy(effectiveRules, request);
494
+ const left = reached.filter(r => r.tailoring === 'invariant' && request.disposition !== 'enabled');
495
+ const changed = reached.filter(r => !left.includes(r));
496
+ console.log(chalk.bold(`\n${request.disposition === 'disabled' ? 'Disables' : request.disposition === 'replaced' ? 'Replaces' : 'Changes the severity of'} ${changed.length} rule(s):`));
497
+ for (const r of changed) {
498
+ const medical = r.domain === 'medicalDevice' ? chalk.magenta(' [medical device]') : '';
499
+ console.log(` ${r.sourceRuleId} ${r.sourceRuleType}${medical}`);
500
+ }
501
+ if (left.length > 0) {
502
+ console.log(chalk.yellow(` ${left.length} invariant rule(s) in the selection keep running: ${left.map(r => r.sourceRuleId).join(', ')}`));
503
+ }
504
+ if (changed.some(r => r.domain === 'medicalDevice') && request.disposition !== 'enabled'
505
+ && !(request.authority && request.approvalReference)) {
506
+ console.log(chalk.yellow(' A medical-device rule\'s record also needs --authority and --approval; the tailoring record will report it incomplete.'));
507
+ }
508
+ console.log();
509
+ if (options.dryRun)
510
+ return;
511
+ const relativePath = options.file.replaceAll('\\', '/');
512
+ const filePath = resolve(projectRoot, relativePath);
513
+ if (!existsSync(filePath))
514
+ fail(`${relativePath} does not exist.`);
515
+ const updated = insertRulePolicy(readFileSync(filePath, 'utf8'), renderRulePolicy(request));
516
+ if (updated === undefined)
517
+ fail(`${relativePath} declares no ModelMethodBinding or MethodologyDefinition to attach the policy to; nothing was written.`);
518
+ const committed = await commitSource(filePath, relativePath, updated, selectedOutlineSource(projectRoot, config));
519
+ if (!committed.success)
520
+ fail(committed.error ?? 'The compiler rejected the policy; nothing was written.');
521
+ console.log(chalk.green(`✅ Wrote the policy to ${relativePath}`));
354
522
  }
355
523
  //# sourceMappingURL=rules.js.map