@memoarchitect/tools 0.13.0 → 0.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (824) 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 +287 -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 -267
  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.map +1 -1
  376. package/packages/tools/lib/model/short-id.js +4 -0
  377. package/packages/tools/lib/model/short-id.js.map +1 -1
  378. package/packages/tools/lib/model/source-graph.d.ts +9 -7
  379. package/packages/tools/lib/model/source-graph.d.ts.map +1 -1
  380. package/packages/tools/lib/model/source-graph.js +19 -24
  381. package/packages/tools/lib/model/source-graph.js.map +1 -1
  382. package/packages/tools/lib/model/source-provenance.d.ts +5 -1
  383. package/packages/tools/lib/model/source-provenance.d.ts.map +1 -1
  384. package/packages/tools/lib/model/source-provenance.js.map +1 -1
  385. package/packages/tools/lib/model/sysml-files.js +1 -1
  386. package/packages/tools/lib/model/sysml-ir.d.ts +2 -5
  387. package/packages/tools/lib/model/sysml-ir.d.ts.map +1 -1
  388. package/packages/tools/lib/model/sysml-ir.js +1 -100
  389. package/packages/tools/lib/model/sysml-ir.js.map +1 -1
  390. package/packages/tools/lib/model/toolchain-merge.d.ts +4 -0
  391. package/packages/tools/lib/model/toolchain-merge.d.ts.map +1 -0
  392. package/packages/tools/lib/model/toolchain-merge.js +34 -0
  393. package/packages/tools/lib/model/toolchain-merge.js.map +1 -0
  394. package/packages/tools/lib/model/user-settings.d.ts +13 -0
  395. package/packages/tools/lib/model/user-settings.d.ts.map +1 -0
  396. package/packages/tools/lib/model/user-settings.js +83 -0
  397. package/packages/tools/lib/model/user-settings.js.map +1 -0
  398. package/packages/tools/lib/model/variability.d.ts +56 -0
  399. package/packages/tools/lib/model/variability.d.ts.map +1 -0
  400. package/packages/tools/lib/model/variability.js +116 -0
  401. package/packages/tools/lib/model/variability.js.map +1 -0
  402. package/packages/tools/lib/model/version-range.d.ts +2 -0
  403. package/packages/tools/lib/model/version-range.d.ts.map +1 -0
  404. package/packages/tools/lib/model/version-range.js +37 -0
  405. package/packages/tools/lib/model/version-range.js.map +1 -0
  406. package/packages/tools/lib/model/view-deriver.d.ts +16 -0
  407. package/packages/tools/lib/model/view-deriver.d.ts.map +1 -1
  408. package/packages/tools/lib/model/view-deriver.js +129 -30
  409. package/packages/tools/lib/model/view-deriver.js.map +1 -1
  410. package/packages/tools/lib/model/view-layout-block.d.ts +81 -0
  411. package/packages/tools/lib/model/view-layout-block.d.ts.map +1 -0
  412. package/packages/tools/lib/model/view-layout-block.js +525 -0
  413. package/packages/tools/lib/model/view-layout-block.js.map +1 -0
  414. package/packages/tools/lib/model/view-layout-migration.d.ts +54 -0
  415. package/packages/tools/lib/model/view-layout-migration.d.ts.map +1 -0
  416. package/packages/tools/lib/model/view-layout-migration.js +156 -0
  417. package/packages/tools/lib/model/view-layout-migration.js.map +1 -0
  418. package/packages/tools/lib/model/workspace-membership.d.ts +99 -0
  419. package/packages/tools/lib/model/workspace-membership.d.ts.map +1 -0
  420. package/packages/tools/lib/model/workspace-membership.js +281 -0
  421. package/packages/tools/lib/model/workspace-membership.js.map +1 -0
  422. package/packages/tools/lib/ontology/owl-exporter.d.ts +1 -1
  423. package/packages/tools/lib/ontology/owl-exporter.d.ts.map +1 -1
  424. package/packages/tools/lib/ontology/owl-exporter.js +1 -1
  425. package/packages/tools/lib/ontology/owl-exporter.js.map +1 -1
  426. package/packages/tools/lib/operations/ai-authoring.d.ts.map +1 -1
  427. package/packages/tools/lib/operations/ai-authoring.js +7 -5
  428. package/packages/tools/lib/operations/ai-authoring.js.map +1 -1
  429. package/packages/tools/lib/operations/authoring.d.ts +10 -4
  430. package/packages/tools/lib/operations/authoring.d.ts.map +1 -1
  431. package/packages/tools/lib/operations/authoring.js +27 -11
  432. package/packages/tools/lib/operations/authoring.js.map +1 -1
  433. package/packages/tools/lib/operations/index.d.ts +2 -0
  434. package/packages/tools/lib/operations/index.d.ts.map +1 -1
  435. package/packages/tools/lib/operations/index.js +1 -0
  436. package/packages/tools/lib/operations/index.js.map +1 -1
  437. package/packages/tools/lib/operations/project-snapshot.d.ts.map +1 -1
  438. package/packages/tools/lib/operations/project-snapshot.js +7 -13
  439. package/packages/tools/lib/operations/project-snapshot.js.map +1 -1
  440. package/packages/tools/lib/plugin/plugin-scaffold.js +2 -2
  441. package/packages/tools/lib/plugin/plugin-scaffold.js.map +1 -1
  442. package/packages/tools/lib/protocol/messages.d.ts +375 -7
  443. package/packages/tools/lib/protocol/messages.d.ts.map +1 -1
  444. package/packages/tools/lib/serializer/csv-io.d.ts +37 -29
  445. package/packages/tools/lib/serializer/csv-io.d.ts.map +1 -1
  446. package/packages/tools/lib/serializer/csv-io.js +64 -31
  447. package/packages/tools/lib/serializer/csv-io.js.map +1 -1
  448. package/packages/tools/lib/serializer/sysml-generator.d.ts +15 -2
  449. package/packages/tools/lib/serializer/sysml-generator.d.ts.map +1 -1
  450. package/packages/tools/lib/serializer/sysml-generator.js +45 -17
  451. package/packages/tools/lib/serializer/sysml-generator.js.map +1 -1
  452. package/packages/tools/lib/server/conflict-policy.js +1 -1
  453. package/packages/tools/lib/server/conflict-policy.js.map +1 -1
  454. package/packages/tools/lib/server/dashboard-store.d.ts +1 -7
  455. package/packages/tools/lib/server/dashboard-store.d.ts.map +1 -1
  456. package/packages/tools/lib/server/dashboard-store.js +3 -14
  457. package/packages/tools/lib/server/dashboard-store.js.map +1 -1
  458. package/packages/tools/lib/server/dev-server.d.ts +48 -1
  459. package/packages/tools/lib/server/dev-server.d.ts.map +1 -1
  460. package/packages/tools/lib/server/dev-server.js +529 -80
  461. package/packages/tools/lib/server/dev-server.js.map +1 -1
  462. package/packages/tools/lib/server/dev-validate.d.ts +30 -0
  463. package/packages/tools/lib/server/dev-validate.d.ts.map +1 -0
  464. package/packages/tools/lib/server/dev-validate.js +82 -0
  465. package/packages/tools/lib/server/dev-validate.js.map +1 -0
  466. package/packages/tools/lib/server/element-writer.d.ts +4 -1
  467. package/packages/tools/lib/server/element-writer.d.ts.map +1 -1
  468. package/packages/tools/lib/server/element-writer.js +56 -35
  469. package/packages/tools/lib/server/element-writer.js.map +1 -1
  470. package/packages/tools/lib/server/mutation-domain.d.ts +10 -0
  471. package/packages/tools/lib/server/mutation-domain.d.ts.map +1 -1
  472. package/packages/tools/lib/server/mutation-domain.js +45 -8
  473. package/packages/tools/lib/server/mutation-domain.js.map +1 -1
  474. package/packages/tools/lib/server/package-source.d.ts +13 -3
  475. package/packages/tools/lib/server/package-source.d.ts.map +1 -1
  476. package/packages/tools/lib/server/package-source.js +31 -39
  477. package/packages/tools/lib/server/package-source.js.map +1 -1
  478. package/packages/tools/lib/server/package-writer.d.ts +19 -6
  479. package/packages/tools/lib/server/package-writer.d.ts.map +1 -1
  480. package/packages/tools/lib/server/package-writer.js +90 -39
  481. package/packages/tools/lib/server/package-writer.js.map +1 -1
  482. package/packages/tools/lib/server/persistor.d.ts +33 -7
  483. package/packages/tools/lib/server/persistor.d.ts.map +1 -1
  484. package/packages/tools/lib/server/persistor.js +63 -48
  485. package/packages/tools/lib/server/persistor.js.map +1 -1
  486. package/packages/tools/lib/server/project-gitignore.d.ts +9 -0
  487. package/packages/tools/lib/server/project-gitignore.d.ts.map +1 -0
  488. package/packages/tools/lib/server/project-gitignore.js +27 -0
  489. package/packages/tools/lib/server/project-gitignore.js.map +1 -0
  490. package/packages/tools/lib/server/relationship-writer.d.ts +31 -2
  491. package/packages/tools/lib/server/relationship-writer.d.ts.map +1 -1
  492. package/packages/tools/lib/server/relationship-writer.js +255 -95
  493. package/packages/tools/lib/server/relationship-writer.js.map +1 -1
  494. package/packages/tools/lib/server/release-writer.d.ts +46 -0
  495. package/packages/tools/lib/server/release-writer.d.ts.map +1 -0
  496. package/packages/tools/lib/server/release-writer.js +133 -0
  497. package/packages/tools/lib/server/release-writer.js.map +1 -0
  498. package/packages/tools/lib/server/rule-policy-writer.d.ts +17 -4
  499. package/packages/tools/lib/server/rule-policy-writer.d.ts.map +1 -1
  500. package/packages/tools/lib/server/rule-policy-writer.js +92 -7
  501. package/packages/tools/lib/server/rule-policy-writer.js.map +1 -1
  502. package/packages/tools/lib/server/rule-service.d.ts +50 -0
  503. package/packages/tools/lib/server/rule-service.d.ts.map +1 -0
  504. package/packages/tools/lib/server/rule-service.js +89 -0
  505. package/packages/tools/lib/server/rule-service.js.map +1 -0
  506. package/packages/tools/lib/server/rule-writer.d.ts +87 -0
  507. package/packages/tools/lib/server/rule-writer.d.ts.map +1 -0
  508. package/packages/tools/lib/server/rule-writer.js +165 -0
  509. package/packages/tools/lib/server/rule-writer.js.map +1 -0
  510. package/packages/tools/lib/server/suspect-review.d.ts +11 -0
  511. package/packages/tools/lib/server/suspect-review.d.ts.map +1 -0
  512. package/packages/tools/lib/server/suspect-review.js +28 -0
  513. package/packages/tools/lib/server/suspect-review.js.map +1 -0
  514. package/packages/tools/lib/server/sysml-notation.d.ts +1 -1
  515. package/packages/tools/lib/server/sysml-notation.d.ts.map +1 -1
  516. package/packages/tools/lib/server/sysml-notation.js +5 -0
  517. package/packages/tools/lib/server/sysml-notation.js.map +1 -1
  518. package/packages/tools/lib/server/user-preferences.d.ts +8 -0
  519. package/packages/tools/lib/server/user-preferences.d.ts.map +1 -0
  520. package/packages/tools/lib/server/user-preferences.js +47 -0
  521. package/packages/tools/lib/server/user-preferences.js.map +1 -0
  522. package/packages/tools/lib/server/version-servers.d.ts +60 -0
  523. package/packages/tools/lib/server/version-servers.d.ts.map +1 -0
  524. package/packages/tools/lib/server/version-servers.js +106 -0
  525. package/packages/tools/lib/server/version-servers.js.map +1 -0
  526. package/packages/tools/lib/server/view-layout-store.d.ts +28 -13
  527. package/packages/tools/lib/server/view-layout-store.d.ts.map +1 -1
  528. package/packages/tools/lib/server/view-layout-store.js +106 -106
  529. package/packages/tools/lib/server/view-layout-store.js.map +1 -1
  530. package/packages/tools/lib/server/view-writer.d.ts +22 -2
  531. package/packages/tools/lib/server/view-writer.d.ts.map +1 -1
  532. package/packages/tools/lib/server/view-writer.js +99 -44
  533. package/packages/tools/lib/server/view-writer.js.map +1 -1
  534. package/packages/tools/lib/server/write-guard.d.ts +7 -0
  535. package/packages/tools/lib/server/write-guard.d.ts.map +1 -0
  536. package/packages/tools/lib/server/write-guard.js +77 -0
  537. package/packages/tools/lib/server/write-guard.js.map +1 -0
  538. package/packages/tools/lib/stage2/api-model.d.ts +160 -0
  539. package/packages/tools/lib/stage2/api-model.d.ts.map +1 -0
  540. package/packages/tools/lib/stage2/api-model.js +341 -0
  541. package/packages/tools/lib/stage2/api-model.js.map +1 -0
  542. package/packages/tools/lib/stage2/build-from-api.d.ts +47 -0
  543. package/packages/tools/lib/stage2/build-from-api.d.ts.map +1 -0
  544. package/packages/tools/lib/stage2/build-from-api.js +1462 -0
  545. package/packages/tools/lib/stage2/build-from-api.js.map +1 -0
  546. package/packages/tools/lib/stage2/guide-from-api.d.ts +38 -0
  547. package/packages/tools/lib/stage2/guide-from-api.d.ts.map +1 -0
  548. package/packages/tools/lib/stage2/guide-from-api.js +97 -0
  549. package/packages/tools/lib/stage2/guide-from-api.js.map +1 -0
  550. package/packages/tools/lib/stage2/handoff-files.d.ts +13 -0
  551. package/packages/tools/lib/stage2/handoff-files.d.ts.map +1 -0
  552. package/packages/tools/lib/stage2/handoff-files.js +32 -0
  553. package/packages/tools/lib/stage2/handoff-files.js.map +1 -0
  554. package/packages/tools/lib/stage2/methodology-from-api.d.ts +10 -0
  555. package/packages/tools/lib/stage2/methodology-from-api.d.ts.map +1 -0
  556. package/packages/tools/lib/stage2/methodology-from-api.js +109 -0
  557. package/packages/tools/lib/stage2/methodology-from-api.js.map +1 -0
  558. package/packages/tools/lib/stage2/package-metadata-from-api.d.ts +15 -0
  559. package/packages/tools/lib/stage2/package-metadata-from-api.d.ts.map +1 -0
  560. package/packages/tools/lib/stage2/package-metadata-from-api.js +238 -0
  561. package/packages/tools/lib/stage2/package-metadata-from-api.js.map +1 -0
  562. package/packages/tools/lib/stage2/project-from-api.d.ts +60 -0
  563. package/packages/tools/lib/stage2/project-from-api.d.ts.map +1 -0
  564. package/packages/tools/lib/stage2/project-from-api.js +328 -0
  565. package/packages/tools/lib/stage2/project-from-api.js.map +1 -0
  566. package/packages/tools/lib/stage2/registries-from-api.d.ts +68 -0
  567. package/packages/tools/lib/stage2/registries-from-api.d.ts.map +1 -0
  568. package/packages/tools/lib/stage2/registries-from-api.js +313 -0
  569. package/packages/tools/lib/stage2/registries-from-api.js.map +1 -0
  570. package/packages/tools/lib/stage2/stage2-from-handoff.d.ts +26 -0
  571. package/packages/tools/lib/stage2/stage2-from-handoff.d.ts.map +1 -0
  572. package/packages/tools/lib/stage2/stage2-from-handoff.js +34 -0
  573. package/packages/tools/lib/stage2/stage2-from-handoff.js.map +1 -0
  574. package/packages/tools/lib/stage2/sysml-names.d.ts +9 -0
  575. package/packages/tools/lib/stage2/sysml-names.d.ts.map +1 -0
  576. package/packages/tools/lib/stage2/sysml-names.js +39 -0
  577. package/packages/tools/lib/stage2/sysml-names.js.map +1 -0
  578. package/packages/tools/lib/toolchain/default-registry.d.ts +2 -2
  579. package/packages/tools/lib/toolchain/default-registry.d.ts.map +1 -1
  580. package/packages/tools/lib/toolchain/default-registry.js +9 -5
  581. package/packages/tools/lib/toolchain/default-registry.js.map +1 -1
  582. package/packages/tools/lib/toolchain/diagnostic.d.ts +2 -2
  583. package/packages/tools/lib/toolchain/diagnostic.js +1 -1
  584. package/packages/tools/lib/toolchain/diagnostic.js.map +1 -1
  585. package/packages/tools/lib/toolchain/effective.d.ts +25 -17
  586. package/packages/tools/lib/toolchain/effective.d.ts.map +1 -1
  587. package/packages/tools/lib/toolchain/effective.js +45 -40
  588. package/packages/tools/lib/toolchain/effective.js.map +1 -1
  589. package/packages/tools/lib/toolchain/exceptions.d.ts +27 -0
  590. package/packages/tools/lib/toolchain/exceptions.d.ts.map +1 -0
  591. package/packages/tools/lib/toolchain/exceptions.js +77 -0
  592. package/packages/tools/lib/toolchain/exceptions.js.map +1 -0
  593. package/packages/tools/lib/toolchain/index.d.ts +2 -2
  594. package/packages/tools/lib/toolchain/index.d.ts.map +1 -1
  595. package/packages/tools/lib/toolchain/index.js +2 -2
  596. package/packages/tools/lib/toolchain/index.js.map +1 -1
  597. package/packages/tools/lib/toolchain/operations.d.ts +45 -10
  598. package/packages/tools/lib/toolchain/operations.d.ts.map +1 -1
  599. package/packages/tools/lib/toolchain/operations.js +107 -8
  600. package/packages/tools/lib/toolchain/operations.js.map +1 -1
  601. package/packages/tools/lib/toolchain/ownership.d.ts +13 -0
  602. package/packages/tools/lib/toolchain/ownership.d.ts.map +1 -0
  603. package/packages/tools/lib/toolchain/ownership.js +57 -0
  604. package/packages/tools/lib/toolchain/ownership.js.map +1 -0
  605. package/packages/tools/lib/toolchain/process.d.ts +2 -2
  606. package/packages/tools/lib/toolchain/process.js +2 -2
  607. package/packages/tools/lib/toolchain/project-config.d.ts +4 -0
  608. package/packages/tools/lib/toolchain/project-config.d.ts.map +1 -0
  609. package/packages/tools/lib/toolchain/project-config.js +13 -0
  610. package/packages/tools/lib/toolchain/project-config.js.map +1 -0
  611. package/packages/tools/lib/toolchain/project-model.d.ts +75 -0
  612. package/packages/tools/lib/toolchain/project-model.d.ts.map +1 -0
  613. package/packages/tools/lib/toolchain/project-model.js +92 -0
  614. package/packages/tools/lib/toolchain/project-model.js.map +1 -0
  615. package/packages/tools/lib/toolchain/providers/internal-package.d.ts +6 -0
  616. package/packages/tools/lib/toolchain/providers/internal-package.d.ts.map +1 -0
  617. package/packages/tools/lib/toolchain/providers/internal-package.js +47 -0
  618. package/packages/tools/lib/toolchain/providers/internal-package.js.map +1 -0
  619. package/packages/tools/lib/toolchain/providers/opensysml-check.d.ts +20 -0
  620. package/packages/tools/lib/toolchain/providers/opensysml-check.d.ts.map +1 -0
  621. package/packages/tools/lib/toolchain/providers/opensysml-check.js +95 -0
  622. package/packages/tools/lib/toolchain/providers/opensysml-check.js.map +1 -0
  623. package/packages/tools/lib/toolchain/providers/opensysml-compact.d.ts +17 -0
  624. package/packages/tools/lib/toolchain/providers/opensysml-compact.d.ts.map +1 -0
  625. package/packages/tools/lib/toolchain/providers/opensysml-compact.js +69 -0
  626. package/packages/tools/lib/toolchain/providers/opensysml-compact.js.map +1 -0
  627. package/packages/tools/lib/toolchain/providers/opensysml-lowering.d.ts +50 -0
  628. package/packages/tools/lib/toolchain/providers/opensysml-lowering.d.ts.map +1 -0
  629. package/packages/tools/lib/toolchain/providers/opensysml-lowering.js +646 -0
  630. package/packages/tools/lib/toolchain/providers/opensysml-lowering.js.map +1 -0
  631. package/packages/tools/lib/toolchain/providers/opensysml-names.d.ts +16 -0
  632. package/packages/tools/lib/toolchain/providers/opensysml-names.d.ts.map +1 -0
  633. package/packages/tools/lib/toolchain/providers/opensysml-names.js +37 -0
  634. package/packages/tools/lib/toolchain/providers/opensysml-names.js.map +1 -0
  635. package/packages/tools/lib/toolchain/providers/opensysml.d.ts +88 -0
  636. package/packages/tools/lib/toolchain/providers/opensysml.d.ts.map +1 -0
  637. package/packages/tools/lib/toolchain/providers/opensysml.js +178 -0
  638. package/packages/tools/lib/toolchain/providers/opensysml.js.map +1 -0
  639. package/packages/tools/lib/toolchain/providers/recommended.d.ts +2 -0
  640. package/packages/tools/lib/toolchain/providers/recommended.d.ts.map +1 -0
  641. package/packages/tools/lib/toolchain/providers/recommended.js +13 -0
  642. package/packages/tools/lib/toolchain/providers/recommended.js.map +1 -0
  643. package/packages/tools/lib/toolchain/providers/sysand-project.d.ts +60 -0
  644. package/packages/tools/lib/toolchain/providers/sysand-project.d.ts.map +1 -0
  645. package/packages/tools/lib/toolchain/providers/sysand-project.js +160 -0
  646. package/packages/tools/lib/toolchain/providers/sysand-project.js.map +1 -0
  647. package/packages/tools/lib/toolchain/providers/sysand.d.ts.map +1 -1
  648. package/packages/tools/lib/toolchain/providers/sysand.js +26 -2
  649. package/packages/tools/lib/toolchain/providers/sysand.js.map +1 -1
  650. package/packages/tools/lib/toolchain/providers/syside-lowering.d.ts +29 -0
  651. package/packages/tools/lib/toolchain/providers/syside-lowering.d.ts.map +1 -0
  652. package/packages/tools/lib/toolchain/providers/syside-lowering.js +497 -0
  653. package/packages/tools/lib/toolchain/providers/syside-lowering.js.map +1 -0
  654. package/packages/tools/lib/toolchain/providers/syside-python.d.ts +9 -0
  655. package/packages/tools/lib/toolchain/providers/syside-python.d.ts.map +1 -0
  656. package/packages/tools/lib/toolchain/providers/syside-python.js +69 -0
  657. package/packages/tools/lib/toolchain/providers/syside-python.js.map +1 -0
  658. package/packages/tools/lib/toolchain/providers/syside.d.ts.map +1 -1
  659. package/packages/tools/lib/toolchain/providers/syside.js +2 -0
  660. package/packages/tools/lib/toolchain/providers/syside.js.map +1 -1
  661. package/packages/tools/lib/toolchain/registry.d.ts +118 -21
  662. package/packages/tools/lib/toolchain/registry.d.ts.map +1 -1
  663. package/packages/tools/lib/toolchain/registry.js +18 -24
  664. package/packages/tools/lib/toolchain/registry.js.map +1 -1
  665. package/packages/tools/lib/toolchain/schema.d.ts +6 -5
  666. package/packages/tools/lib/toolchain/schema.d.ts.map +1 -1
  667. package/packages/tools/lib/toolchain/schema.js +8 -13
  668. package/packages/tools/lib/toolchain/schema.js.map +1 -1
  669. package/packages/tools/lib/toolchain/shipped-library.d.ts +28 -0
  670. package/packages/tools/lib/toolchain/shipped-library.d.ts.map +1 -0
  671. package/packages/tools/lib/toolchain/shipped-library.js +120 -0
  672. package/packages/tools/lib/toolchain/shipped-library.js.map +1 -0
  673. package/packages/tools/lib/toolchain/source-fingerprint.d.ts +2 -0
  674. package/packages/tools/lib/toolchain/source-fingerprint.d.ts.map +1 -0
  675. package/packages/tools/lib/toolchain/source-fingerprint.js +30 -0
  676. package/packages/tools/lib/toolchain/source-fingerprint.js.map +1 -0
  677. package/packages/tools/lib/toolchain/user-settings-status.d.ts +51 -0
  678. package/packages/tools/lib/toolchain/user-settings-status.d.ts.map +1 -0
  679. package/packages/tools/lib/toolchain/user-settings-status.js +104 -0
  680. package/packages/tools/lib/toolchain/user-settings-status.js.map +1 -0
  681. package/packages/tools/lib/validator/architecture-validator.d.ts.map +1 -1
  682. package/packages/tools/lib/validator/architecture-validator.js +2 -1
  683. package/packages/tools/lib/validator/architecture-validator.js.map +1 -1
  684. package/packages/tools/lib/validator/behavior-validator.js +1 -1
  685. package/packages/tools/lib/validator/behavior-validator.js.map +1 -1
  686. package/packages/tools/lib/validator/builtin-rules.js +1 -1
  687. package/packages/tools/lib/validator/builtin-rules.js.map +1 -1
  688. package/packages/tools/lib/validator/constraint-eval.d.ts +30 -4
  689. package/packages/tools/lib/validator/constraint-eval.d.ts.map +1 -1
  690. package/packages/tools/lib/validator/constraint-eval.js +101 -59
  691. package/packages/tools/lib/validator/constraint-eval.js.map +1 -1
  692. package/packages/tools/lib/validator/constraint-loader-api.d.ts +22 -0
  693. package/packages/tools/lib/validator/constraint-loader-api.d.ts.map +1 -0
  694. package/packages/tools/lib/validator/constraint-loader-api.js +160 -0
  695. package/packages/tools/lib/validator/constraint-loader-api.js.map +1 -0
  696. package/packages/tools/lib/validator/constraint-loader.d.ts +22 -18
  697. package/packages/tools/lib/validator/constraint-loader.d.ts.map +1 -1
  698. package/packages/tools/lib/validator/constraint-loader.js +33 -141
  699. package/packages/tools/lib/validator/constraint-loader.js.map +1 -1
  700. package/packages/tools/lib/validator/rule-clauses.d.ts +51 -0
  701. package/packages/tools/lib/validator/rule-clauses.d.ts.map +1 -0
  702. package/packages/tools/lib/validator/rule-clauses.js +87 -0
  703. package/packages/tools/lib/validator/rule-clauses.js.map +1 -0
  704. package/packages/tools/lib/validator/rule-engine.d.ts +9 -1
  705. package/packages/tools/lib/validator/rule-engine.d.ts.map +1 -1
  706. package/packages/tools/lib/validator/rule-engine.js +50 -6
  707. package/packages/tools/lib/validator/rule-engine.js.map +1 -1
  708. package/packages/tools/lib/validator/rule-registry.d.ts +4 -8
  709. package/packages/tools/lib/validator/rule-registry.d.ts.map +1 -1
  710. package/packages/tools/lib/validator/rule-registry.js +42 -79
  711. package/packages/tools/lib/validator/rule-registry.js.map +1 -1
  712. package/packages/tools/lib/validator/rule-tailoring.d.ts +62 -0
  713. package/packages/tools/lib/validator/rule-tailoring.d.ts.map +1 -0
  714. package/packages/tools/lib/validator/rule-tailoring.js +85 -0
  715. package/packages/tools/lib/validator/rule-tailoring.js.map +1 -0
  716. package/packages/tools/lib/validator/types.d.ts +12 -1
  717. package/packages/tools/lib/validator/types.d.ts.map +1 -1
  718. package/packages/tools/lib/validator/workspace-boundary-validator.d.ts +9 -0
  719. package/packages/tools/lib/validator/workspace-boundary-validator.d.ts.map +1 -0
  720. package/packages/tools/lib/validator/workspace-boundary-validator.js +28 -0
  721. package/packages/tools/lib/validator/workspace-boundary-validator.js.map +1 -0
  722. package/packages/tools/python/memo_model.py +243 -0
  723. package/packages/tools/python/memo_stage1_syside.py +389 -0
  724. package/packages/tools/lib/commands/check.d.ts +0 -6
  725. package/packages/tools/lib/commands/check.d.ts.map +0 -1
  726. package/packages/tools/lib/commands/check.js +0 -191
  727. package/packages/tools/lib/commands/check.js.map +0 -1
  728. package/packages/tools/lib/commands/conformance.d.ts +0 -36
  729. package/packages/tools/lib/commands/conformance.d.ts.map +0 -1
  730. package/packages/tools/lib/commands/conformance.js +0 -212
  731. package/packages/tools/lib/commands/conformance.js.map +0 -1
  732. package/packages/tools/lib/commands/roundtrip.d.ts +0 -6
  733. package/packages/tools/lib/commands/roundtrip.d.ts.map +0 -1
  734. package/packages/tools/lib/commands/roundtrip.js +0 -145
  735. package/packages/tools/lib/commands/roundtrip.js.map +0 -1
  736. package/packages/tools/lib/conformance/baseline.d.ts +0 -26
  737. package/packages/tools/lib/conformance/baseline.d.ts.map +0 -1
  738. package/packages/tools/lib/conformance/baseline.js +0 -170
  739. package/packages/tools/lib/conformance/baseline.js.map +0 -1
  740. package/packages/tools/lib/conformance/bnf.d.ts +0 -84
  741. package/packages/tools/lib/conformance/bnf.d.ts.map +0 -1
  742. package/packages/tools/lib/conformance/bnf.js +0 -166
  743. package/packages/tools/lib/conformance/bnf.js.map +0 -1
  744. package/packages/tools/lib/conformance/corpus.d.ts +0 -125
  745. package/packages/tools/lib/conformance/corpus.d.ts.map +0 -1
  746. package/packages/tools/lib/conformance/corpus.js +0 -190
  747. package/packages/tools/lib/conformance/corpus.js.map +0 -1
  748. package/packages/tools/lib/conformance/diff-xmi.d.ts +0 -118
  749. package/packages/tools/lib/conformance/diff-xmi.d.ts.map +0 -1
  750. package/packages/tools/lib/conformance/diff-xmi.js +0 -276
  751. package/packages/tools/lib/conformance/diff-xmi.js.map +0 -1
  752. package/packages/tools/lib/conformance/generated/syside-rules.d.ts +0 -10
  753. package/packages/tools/lib/conformance/generated/syside-rules.d.ts.map +0 -1
  754. package/packages/tools/lib/conformance/generated/syside-rules.js +0 -1142
  755. package/packages/tools/lib/conformance/generated/syside-rules.js.map +0 -1
  756. package/packages/tools/lib/conformance/index.d.ts +0 -7
  757. package/packages/tools/lib/conformance/index.d.ts.map +0 -1
  758. package/packages/tools/lib/conformance/index.js +0 -19
  759. package/packages/tools/lib/conformance/index.js.map +0 -1
  760. package/packages/tools/lib/conformance/run.d.ts +0 -117
  761. package/packages/tools/lib/conformance/run.d.ts.map +0 -1
  762. package/packages/tools/lib/conformance/run.js +0 -0
  763. package/packages/tools/lib/conformance/run.js.map +0 -1
  764. package/packages/tools/lib/conformance/xmi.d.ts +0 -45
  765. package/packages/tools/lib/conformance/xmi.d.ts.map +0 -1
  766. package/packages/tools/lib/conformance/xmi.js +0 -148
  767. package/packages/tools/lib/conformance/xmi.js.map +0 -1
  768. package/packages/tools/lib/language/generated/ast.d.ts +0 -3565
  769. package/packages/tools/lib/language/generated/ast.d.ts.map +0 -1
  770. package/packages/tools/lib/language/generated/ast.js +0 -2975
  771. package/packages/tools/lib/language/generated/ast.js.map +0 -1
  772. package/packages/tools/lib/language/generated/grammar.d.ts +0 -7
  773. package/packages/tools/lib/language/generated/grammar.d.ts.map +0 -1
  774. package/packages/tools/lib/language/generated/grammar.js +0 -10643
  775. package/packages/tools/lib/language/generated/grammar.js.map +0 -1
  776. package/packages/tools/lib/language/generated/module.d.ts +0 -14
  777. package/packages/tools/lib/language/generated/module.d.ts.map +0 -1
  778. package/packages/tools/lib/language/generated/module.js +0 -21
  779. package/packages/tools/lib/language/generated/module.js.map +0 -1
  780. package/packages/tools/lib/language/memo-sysml-module.d.ts +0 -24
  781. package/packages/tools/lib/language/memo-sysml-module.d.ts.map +0 -1
  782. package/packages/tools/lib/language/memo-sysml-module.js +0 -20
  783. package/packages/tools/lib/language/memo-sysml-module.js.map +0 -1
  784. package/packages/tools/lib/model/builder.d.ts +0 -27
  785. package/packages/tools/lib/model/builder.d.ts.map +0 -1
  786. package/packages/tools/lib/model/builder.js +0 -2103
  787. package/packages/tools/lib/model/builder.js.map +0 -1
  788. package/packages/tools/lib/model/package-registry.d.ts +0 -62
  789. package/packages/tools/lib/model/package-registry.d.ts.map +0 -1
  790. package/packages/tools/lib/model/package-registry.js +0 -175
  791. package/packages/tools/lib/model/package-registry.js.map +0 -1
  792. package/packages/tools/lib/model/parser-utils.d.ts +0 -65
  793. package/packages/tools/lib/model/parser-utils.d.ts.map +0 -1
  794. package/packages/tools/lib/model/parser-utils.js +0 -201
  795. package/packages/tools/lib/model/parser-utils.js.map +0 -1
  796. package/packages/tools/lib/sysmlc/bin/memo-sysmlc.d.ts +0 -3
  797. package/packages/tools/lib/sysmlc/bin/memo-sysmlc.d.ts.map +0 -1
  798. package/packages/tools/lib/sysmlc/bin/memo-sysmlc.js +0 -97
  799. package/packages/tools/lib/sysmlc/bin/memo-sysmlc.js.map +0 -1
  800. package/packages/tools/lib/sysmlc/index.d.ts +0 -2
  801. package/packages/tools/lib/sysmlc/index.d.ts.map +0 -1
  802. package/packages/tools/lib/sysmlc/index.js +0 -7
  803. package/packages/tools/lib/sysmlc/index.js.map +0 -1
  804. package/packages/tools/lib/sysmlc/server.d.ts +0 -29
  805. package/packages/tools/lib/sysmlc/server.d.ts.map +0 -1
  806. package/packages/tools/lib/sysmlc/server.js +0 -168
  807. package/packages/tools/lib/sysmlc/server.js.map +0 -1
  808. package/packages/tools/lib/toolchain/lowering.d.ts +0 -63
  809. package/packages/tools/lib/toolchain/lowering.d.ts.map +0 -1
  810. package/packages/tools/lib/toolchain/lowering.js +0 -100
  811. package/packages/tools/lib/toolchain/lowering.js.map +0 -1
  812. package/packages/tools/lib/toolchain/providers/internal.d.ts +0 -33
  813. package/packages/tools/lib/toolchain/providers/internal.d.ts.map +0 -1
  814. package/packages/tools/lib/toolchain/providers/internal.js +0 -286
  815. package/packages/tools/lib/toolchain/providers/internal.js.map +0 -1
  816. package/packages/tools/lib/toolchain/sysmlc-client.d.ts +0 -77
  817. package/packages/tools/lib/toolchain/sysmlc-client.d.ts.map +0 -1
  818. package/packages/tools/lib/toolchain/sysmlc-client.js +0 -0
  819. package/packages/tools/lib/toolchain/sysmlc-client.js.map +0 -1
  820. package/packages/tools/lib/validator/sysml-constraints.d.ts +0 -64
  821. package/packages/tools/lib/validator/sysml-constraints.d.ts.map +0 -1
  822. package/packages/tools/lib/validator/sysml-constraints.js +0 -251
  823. package/packages/tools/lib/validator/sysml-constraints.js.map +0 -1
  824. package/packages/tools/src/grammar/memo-sysml.langium +0 -1056
@@ -11,20 +11,42 @@ import { existsSync, readFileSync } from 'node:fs';
11
11
  import { createHash } from 'node:crypto';
12
12
  import { execSync } from 'node:child_process';
13
13
  import chalk from 'chalk';
14
- import { IncrementalProjectParser, buildMemoModel, modelToDTO, lowerAstToSysmlIr, irIdentityTable, loadOntologyRegistries, getPackageMetadata, loadMethodologyDescriptor, resolveNativeProject, deriveModelViews, collectNativeConstraints, loadProjectSettings, resolveEffectiveRules, ruleCandidatesFromConstraints } from '@memoarchitect/tools';
15
- import { buildSourceGraph, sourceGraphToDTO, viewSourceFiles } from '@memoarchitect/tools';
14
+ import { modelToDTO, apiPackageMetadata, loadMethodologyDescriptor, deriveModelViews, collectApiConstraints, loadProjectSettings, } from '@memoarchitect/tools';
15
+ import { sourceGraphToDTO, viewSourceFiles } from '@memoarchitect/tools';
16
+ import { buildSourceGraphFromPackages } from '../model/source-graph.js';
17
+ import { computeWorkspaceMembership, selectWorkspace, workspaceMembershipToDTO } from '../model/workspace-membership.js';
16
18
  import { validateModel } from '@memoarchitect/tools';
17
19
  import { computeCompleteness } from '@memoarchitect/tools';
18
20
  import { createDevServer } from '../server/dev-server.js';
19
21
  import { createProjectWatcher, createOntologyWatcher } from '../server/file-watcher.js';
20
- import { checkLockFile } from '../lock.js';
22
+ import { layoutBlindRevision } from '../model/view-layout-block.js';
23
+ import { setReadOnlyRoots } from '../server/write-guard.js';
24
+ import { readLegacyLayouts } from '../model/view-layout-migration.js';
25
+ import { checkLockFile, lockableDependencies } from '../lock.js';
21
26
  import { findSysmlFiles } from '../model/sysml-files.js';
22
27
  import { enforceRuntimeBudget } from '../server/runtime-budget.js';
23
28
  import { withToolchainOverrides } from '../toolchain/schema.js';
29
+ import { format } from 'node:util';
30
+ import { sourceFingerprint } from '../toolchain/source-fingerprint.js';
31
+ import { newToken, removeDevServerRecord, writeDevServerRecord } from '../server/dev-validate.js';
32
+ import { createVersionServers } from '../server/version-servers.js';
33
+ import { compileDeviceDhf } from '../dhf/device-dhf.js';
34
+ import { evaluateWorkspaceGuide } from '../methodology/guide-service.js';
35
+ import { computeChangeImpact } from '../model/impact.js';
36
+ import { runValidation, validationExitCode } from './validate.js';
37
+ import { compileResolvedProject } from '../toolchain/operations.js';
24
38
  import { resolveToolchain } from '../toolchain/effective.js';
25
39
  import { defaultRegistry } from '../toolchain/default-registry.js';
26
40
  import { computeStandardsReport, readDeclaredRegimes } from '../dhf/standards-report.js';
27
41
  import { loadStandardsLibrary } from '../dhf/standards-library.js';
42
+ import { loadProjectModel, stage1CacheDir } from '../toolchain/project-model.js';
43
+ import { apiEnumerations, apiProjectSourcePackages, resolutionLoads } from '../stage2/project-from-api.js';
44
+ import { outlinesFromHandoff } from '../authoring/outline-source.js';
45
+ import { outlineIdentityTable } from '../authoring/outline-identity.js';
46
+ import { discoverProjectSources } from '../model/native-project.js';
47
+ import { isRulePackageInScope, resolveProjectRules, scopedSubjectIds } from '../model/effective-scope.js';
48
+ import { isProjectSource } from '../stage2/project-from-api.js';
49
+ import { readClauseFacts } from '../validator/rule-clauses.js';
28
50
  /** Gather git info for model metadata */
29
51
  function getGitInfo(cwd) {
30
52
  const git = (cmd) => {
@@ -48,21 +70,6 @@ function getGitInfo(cwd) {
48
70
  gitDirty: porcelain ? true : undefined,
49
71
  };
50
72
  }
51
- /** Presentation enums are model facts, so ship their literal sets to the canvas. */
52
- function collectEnumerations(documents) {
53
- const found = new Map();
54
- const visit = (member) => {
55
- if (member?.$type === 'EnumDefinition' && member.name) {
56
- found.set(member.name, { name: member.name, literals: (member.literals ?? []).map((literal) => literal.name).filter(Boolean) });
57
- }
58
- for (const child of member?.members ?? [])
59
- visit(child);
60
- };
61
- for (const document of documents)
62
- for (const member of document.document.parseResult.value.members)
63
- visit(member);
64
- return [...found.values()];
65
- }
66
73
  /**
67
74
  * Strip stale relationship types from user diagrams, warn on any dropped.
68
75
  * Diagrams themselves are kept — only their stale relationshipType filter entries are removed.
@@ -100,7 +107,7 @@ function computeOntologyHash(registries) {
100
107
  export async function devCommand(options) {
101
108
  const bootstrapStartedAt = performance.now();
102
109
  const cwd = process.cwd();
103
- const port = options.port || 3000;
110
+ const port = options.readOnly ? (options.port ?? 0) : (options.port || 3000);
104
111
  const host = '127.0.0.1';
105
112
  console.log(chalk.bold('\n🚀 MEMO Dev Server\n'));
106
113
  // ── bootstrap: runs once ───────────────────────────────────────────────────
@@ -109,18 +116,32 @@ export async function devCommand(options) {
109
116
  const toolchain = resolveToolchain(config, defaultRegistry);
110
117
  const gitInfo = getGitInfo(cwd);
111
118
  let buildCount = 0;
112
- console.log(chalk.gray(`Project: ${config.projectName}`));
113
- console.log(chalk.gray(`Toolchain: validator=${toolchain.validator} lowering=${toolchain.lowering} `
114
- + `packager=${toolchain.packager}`));
119
+ console.log(chalk.gray(`Model: ${config.modelName}`));
120
+ console.log(chalk.gray(`Toolchain: ${toolchain.selections.map(s => `${s.role === 'package' ? 'packager' : s.role}=${s.provider}`).join(' ')}`));
115
121
  for (const note of toolchain.deprecations)
116
122
  console.log(chalk.yellow(` ⚠ ${note}`));
117
- const nativeResolution = await resolveNativeProject(cwd);
123
+ // The compiler resolves the project from what it compiled, so MEMO parses
124
+ // neither the ontology nor the closure; a stage 1 that reports an error
125
+ // stops here, as it stops `memo validate`.
126
+ let compiled;
127
+ try {
128
+ compiled = await loadProjectModel({ projectRoot: cwd, config });
129
+ }
130
+ catch (error) {
131
+ console.error(chalk.red(`\n❌ ${error instanceof Error ? error.message : error}\n`));
132
+ process.exit(1);
133
+ }
134
+ console.log(chalk.gray(`Stage 1: ${toolchain.lowering} ${compiled.providerVersion ?? ''}${compiled.cached ? ' (reused .memo/stage1)' : ''}`));
135
+ const nativeResolution = compiled.resolution ?? (() => {
136
+ console.error(chalk.red(`\n❌ ${toolchain.lowering} resolved no project: no entrypoint was compiled.\n`));
137
+ return process.exit(1);
138
+ })();
118
139
  for (const d of nativeResolution.diagnostics) {
119
140
  console.log(chalk.yellow(` ⚠ ${d.code}: ${d.message}`));
120
141
  }
121
142
  const lockCheck = checkLockFile(cwd, nativeResolution.selectedRoots.map(root => ({
122
143
  ...root, origin: 'ontology', importDepth: 1,
123
- })));
144
+ })), lockableDependencies(nativeResolution.dependencies));
124
145
  if (!lockCheck.ok) {
125
146
  console.error(chalk.red(`\n❌ ${lockCheck.message}\n`));
126
147
  process.exit(1);
@@ -132,38 +153,26 @@ export async function devCommand(options) {
132
153
  let ontologyRegistries;
133
154
  let ontologyRoots = [];
134
155
  let provenance;
135
- let ontologyDocuments = [];
136
156
  let ontologyHash = '';
137
- try {
138
- const loadResult = await loadOntologyRegistries(cwd);
139
- if (loadResult.fileCount > 0) {
140
- ontologyRegistries = { ...loadResult.registries, provenance: loadResult.provenance };
141
- // Include the resolved KPAR cache roots as restart-scoped library
142
- // content. They must never be picked up by the project hot watcher.
143
- ontologyRoots = [...new Set([
144
- ...loadResult.ontologyDirs,
145
- ...nativeResolution.selectedRoots.map(root => root.sysmlDir),
146
- ])];
147
- provenance = loadResult.provenance;
148
- ontologyDocuments = loadResult.parsedDocuments;
149
- if (ontologyRegistries.kindRegistry)
150
- Object.freeze(ontologyRegistries.kindRegistry);
151
- if (ontologyRegistries.relationshipRegistry)
152
- Object.freeze(ontologyRegistries.relationshipRegistry);
153
- ontologyHash = computeOntologyHash(ontologyRegistries);
154
- const kr = loadResult.registries.kindRegistry;
155
- const rr = loadResult.registries.relationshipRegistry;
156
- console.log(chalk.gray(`Ontology: ${kr?.size ?? 0} kinds, ${rr?.size ?? 0} relationships ` +
157
- `(from ${loadResult.fileCount} SysML files)`));
158
- }
157
+ if (compiled.registries) {
158
+ ontologyRegistries = compiled.registries;
159
+ ontologyRoots = [...new Set(nativeResolution.selectedRoots.map(root => root.sysmlDir))];
160
+ provenance = compiled.registries.provenance;
161
+ if (ontologyRegistries.kindRegistry)
162
+ Object.freeze(ontologyRegistries.kindRegistry);
163
+ if (ontologyRegistries.relationshipRegistry)
164
+ Object.freeze(ontologyRegistries.relationshipRegistry);
165
+ ontologyHash = computeOntologyHash(ontologyRegistries);
166
+ console.log(chalk.gray(`Ontology: ${ontologyRegistries.kindRegistry?.size ?? 0} kinds, `
167
+ + `${ontologyRegistries.relationshipRegistry?.size ?? 0} relationships (from ${toolchain.lowering}'s handoff)`));
159
168
  }
160
- catch (e) {
161
- console.log(chalk.yellow(` ⚠ Could not load ontology registries: ${e instanceof Error ? e.message : e}`));
169
+ else {
170
+ console.log(chalk.yellow(` ⚠ ${toolchain.lowering}'s handoff stated no ontology registries`));
162
171
  }
163
172
  // Phase B — methodology descriptor (data-only; no UI consumer yet)
164
173
  let methodologyDescriptor = { folders: [], errors: [] };
165
174
  try {
166
- methodologyDescriptor = await loadMethodologyDescriptor(cwd, nativeResolution);
175
+ methodologyDescriptor = await loadMethodologyDescriptor(cwd, nativeResolution, compiled.api);
167
176
  const folderCount = methodologyDescriptor.folders.length;
168
177
  const totalParts = methodologyDescriptor.folders.reduce((s, f) => s + Object.values(f.parts).reduce((a, p) => a + p.length, 0), 0);
169
178
  const totalDefs = methodologyDescriptor.folders.reduce((s, f) => s + f.partDefs.length, 0);
@@ -187,42 +196,130 @@ export async function devCommand(options) {
187
196
  }
188
197
  // ── end bootstrap ──────────────────────────────────────────────────────────
189
198
  // ── rebuildProject: hot path — no ontology reload ─────────────────────────
190
- const projectParser = new IncrementalProjectParser(cwd);
191
199
  /** Revision of the newest rebuild that parsed — what a client is still showing. */
192
200
  let lastGoodRevision = 0;
201
+ /**
202
+ * What the last accepted stage 1 built: a rejected edit leaves the model,
203
+ * its identities, rules and registries where the last valid revision put
204
+ * them. There is no second opinion to fall back on.
205
+ */
206
+ /** The project as last built, for previewing and writing a user's rule. */
207
+ let ruleContext;
208
+ let latestClauses = [];
209
+ let lastPackages = [];
210
+ let lastAccepted;
211
+ // The newest compile, with the fingerprint of the sources it read (taken
212
+ // before it ran): what `memo validate` is answered from while the
213
+ // fingerprint still matches the files on disk.
214
+ let latestCompile;
215
+ /** The layout-blind revision of every source file as of the last rebuild. */
216
+ let lastSourceHashes = {};
193
217
  async function rebuildProject(changedFiles) {
194
218
  const rebuildStartedAt = performance.now();
195
219
  buildCount++;
220
+ const sysmlFiles = findSysmlFiles(cwd);
221
+ let errors = [];
222
+ // `toolchain.compiler` decides where the model comes from. A stage 1
223
+ // that reports errors makes this build incoherent, so a client keeps
224
+ // showing the last good one.
225
+ // The same resolved compile every command runs, reusing `.memo/stage1/`.
226
+ const fingerprint = sourceFingerprint(cwd);
227
+ const stage1 = await compileResolvedProject({ config, projectDir: cwd, cacheDir: stage1CacheDir(cwd) });
228
+ latestCompile = { fingerprint, stage1 };
229
+ // The methodology follows the project's imports, which an edit can
230
+ // change: from the compiled resolution.
196
231
  try {
197
- methodologyDescriptor = await loadMethodologyDescriptor(cwd);
232
+ if (stage1.api)
233
+ methodologyDescriptor = await loadMethodologyDescriptor(cwd, stage1.resolution, stage1.api);
198
234
  }
199
235
  catch {
200
236
  // keep last good descriptor on transient parse failure
201
237
  }
202
- const sysmlFiles = findSysmlFiles(cwd);
203
- const { documents, errors } = await projectParser.parse(sysmlFiles, changedFiles);
204
- const projectRegistries = ontologyRegistries
205
- ? {
206
- ...ontologyRegistries,
207
- kindRegistry: ontologyRegistries.kindRegistry?.withProjectExtensions(documents),
208
- }
238
+ if (!stage1.accepted || !stage1.model) {
239
+ errors = [...errors, ...stage1.diagnostics.filter(d => d.severity === 'error').map(d => ({
240
+ file: d.file ?? '', line: d.range?.start.line, message: d.message, code: d.code,
241
+ }))];
242
+ }
243
+ const accepted = stage1.accepted && stage1.model && stage1.api;
244
+ const kept = !accepted ? lastAccepted : undefined;
245
+ // A rejected first build has nothing to keep: the dev server starts only
246
+ // from a valid project, so `lastAccepted` is set by the bootstrap compile.
247
+ if (!accepted && !kept)
248
+ throw new Error('No accepted build to show');
249
+ const model = accepted ? stage1.model : kept.model;
250
+ // Identities for the authoring write-back: each element's declaration in
251
+ // its file's outline (plans/memo-write-back-from-handoff.md), read from
252
+ // the handoff stage 1 built the model from.
253
+ const irIdentities = kept?.irIdentities ?? outlineIdentityTable(outlinesFromHandoff(resolve(cwd), stage1.api), model.elements.values(), resolve(cwd));
254
+ // An accepted stage 1 carries the ontology it resolved, rules included,
255
+ // so they are read from its handoff rather than from MEMO's own parse.
256
+ // The rules resolution loads, and the project's own: a rule the project
257
+ // wrote in a file nothing imports still runs, as in `memo validate`.
258
+ const resolutionOf = stage1.resolution ?? nativeResolution;
259
+ const ruleFileLoaded = resolutionOf
260
+ ? (file) => resolutionLoads(resolutionOf)(file) || isProjectSource(resolutionOf)(file)
261
+ : undefined;
262
+ // No write may land in a package the model depends on: it is shown, linked to, and changed elsewhere.
263
+ setReadOnlyRoots([...(resolutionOf?.closure.values() ?? [])]
264
+ .filter(pkg => pkg.origin === 'dependency' && pkg.root)
265
+ .flatMap(pkg => [pkg.root.dir, pkg.root.sysmlDir]));
266
+ const nativeConstraints = accepted
267
+ ? collectApiConstraints(stage1.api, undefined, stage1.resolution?.filePackages, ruleFileLoaded)
268
+ : kept.constraints;
269
+ // An accepted stage 1 states the ontology with the project's own kinds.
270
+ const stage2Registries = accepted && stage1.registries
271
+ ? stage1.registries
272
+ : kept?.registries;
273
+ // The effective rule set, activated and tailored as `memo validate` and
274
+ // `memo validate --rules` do it (`resolveProjectRules`), so Architect reports
275
+ // the rule set they do. Rule resolution must never take the rebuild down:
276
+ // a bad policy is a diagnostic about the methodology, not a reason the
277
+ // model cannot be shown.
278
+ let validation;
279
+ // Which workspace holds each element; also validated per workspace below, so a client shows a
280
+ // workspace's problems from the same computation `memo validate --workspace` runs.
281
+ const membership = stage2Registries?.kindRegistry && stage2Registries.relationshipRegistry
282
+ ? computeWorkspaceMembership(model, stage2Registries)
209
283
  : undefined;
210
- const model = buildMemoModel(documents, config, errors, projectRegistries);
211
- // Identities for the authoring write-back (§6.2). The surgical rebuild
212
- // stays surgical — this lowers the documents it already parsed, and the
213
- // provider-backed recompile happens on the write path, not here.
214
- const irIdentities = irIdentityTable(lowerAstToSysmlIr(documents, modelToDTO(model), cwd));
215
- const nativeConstraints = collectNativeConstraints([...ontologyDocuments, ...documents]);
216
- const validation = validateModel(model, nativeConstraints, projectRegistries?.kindRegistry);
284
+ const validateWorkspaces = (run) => {
285
+ if (!membership || membership.missingSystem)
286
+ return;
287
+ const byWorkspace = {};
288
+ for (const workspace of membership.workspaces) {
289
+ const selection = selectWorkspace(model, membership, workspace.root);
290
+ if (selection.ok)
291
+ byWorkspace[workspace.root] = run(selection.scope);
292
+ }
293
+ validation.byWorkspace = byWorkspace;
294
+ };
217
295
  const effectiveRuleSet = (() => {
218
296
  try {
219
- const resolved = resolveEffectiveRules(ruleCandidatesFromConstraints(nativeConstraints), methodologyDescriptor.effective?.policyChain ?? []);
297
+ const kindRegistry = stage2Registries?.kindRegistry;
298
+ const filePackages = resolutionOf?.filePackages ?? new Map();
299
+ const { rules: resolved, scope } = resolveProjectRules({
300
+ constraints: nativeConstraints,
301
+ effective: methodologyDescriptor.effective,
302
+ filePackages,
303
+ kindSourceFile: kind => kindRegistry?.getKind(kind)?.sourceFile,
304
+ isOwnFile: resolutionOf ? isProjectSource(resolutionOf) : undefined,
305
+ });
306
+ // Scope decides which elements rules RUN ON, not the model they navigate.
307
+ const inScopeIds = scope && scope.mode !== 'allAvailable'
308
+ ? scopedSubjectIds(model, kind => {
309
+ const sourceFile = kindRegistry?.getKind(kind)?.sourceFile;
310
+ const declaringPackage = sourceFile ? filePackages.get(sourceFile) : undefined;
311
+ return !declaringPackage || isRulePackageInScope(scope, declaringPackage);
312
+ })
313
+ : undefined;
314
+ const runRules = (workspace) => validateModel(model, resolved.activeConstraints, kindRegistry, resolved.rules, inScopeIds && (element => inScopeIds.has(element.id)), workspace, membership);
315
+ validation = runRules();
316
+ validateWorkspaces(runRules);
220
317
  return { rules: resolved.rules, diagnostics: resolved.diagnostics };
221
318
  }
222
319
  catch (error) {
223
- // Rule resolution must never take the rebuild down: a bad
224
- // policy is a diagnostic about the methodology, not a reason
225
- // the model cannot be shown.
320
+ const runNative = (workspace) => validateModel(model, nativeConstraints, stage2Registries?.kindRegistry, undefined, undefined, workspace, membership);
321
+ validation = runNative();
322
+ validateWorkspaces(runNative);
226
323
  return {
227
324
  rules: [],
228
325
  diagnostics: [{
@@ -232,6 +329,18 @@ export async function devCommand(options) {
232
329
  };
233
330
  }
234
331
  })();
332
+ // The clauses the model carries, to name and choose what a rule enforces.
333
+ // Only an accepted stage 1 states them; a rejected edit keeps the last.
334
+ if (accepted)
335
+ latestClauses = readClauseFacts(stage1.api);
336
+ const projectSourceFiles = discoverProjectSources(cwd).projectFiles;
337
+ effectiveRuleSet.clauses = latestClauses;
338
+ effectiveRuleSet.projectFiles = projectSourceFiles
339
+ .map(file => relative(cwd, file).replaceAll('\\', '/')).sort();
340
+ ruleContext = {
341
+ projectRoot: cwd, config, model, kindRegistry: stage2Registries?.kindRegistry,
342
+ constraints: nativeConstraints, clauses: latestClauses, projectFiles: new Set(projectSourceFiles.map(file => resolve(file))),
343
+ };
235
344
  const completeness = computeCompleteness(model, validation);
236
345
  console.log(chalk.cyan(` ${model.elements.size} elements, ${model.relationships.length} relationships, ` +
237
346
  `${validation.violations.length} violations, ${completeness.overall}% complete`));
@@ -241,7 +350,7 @@ export async function devCommand(options) {
241
350
  const viewpoints = [];
242
351
  // Views modelled in SysML (DiagramView/DocumentView usages) surface as
243
352
  // viewpoint-grouped auto diagrams.
244
- const derivedViews = deriveModelViews(model, projectRegistries?.kindRegistry);
353
+ const derivedViews = deriveModelViews(model, stage2Registries?.kindRegistry);
245
354
  viewpoints.push(...derivedViews.viewpoints);
246
355
  const diagrams = [];
247
356
  diagrams.push(...derivedViews.diagrams);
@@ -250,7 +359,8 @@ export async function devCommand(options) {
250
359
  const architectureLayers = undefined;
251
360
  const baseVersion = nativeResolution.selectedRoots[0]?.packageVersion || '0.1.0';
252
361
  const metadata = {
253
- projectName: config.projectName,
362
+ modelName: config.modelName,
363
+ projectName: config.modelName, // deprecated alias, deleted in 0.15.0
254
364
  version: `${baseVersion}-dev.${buildCount}`,
255
365
  ...gitInfo,
256
366
  };
@@ -258,8 +368,8 @@ export async function devCommand(options) {
258
368
  if (existsSync(userDiagramsPath)) {
259
369
  try {
260
370
  const rawUserDiagrams = JSON.parse(readFileSync(userDiagramsPath, 'utf8'));
261
- const validUserDiagrams = projectRegistries
262
- ? validateDiagramsAgainstOntology(rawUserDiagrams, projectRegistries)
371
+ const validUserDiagrams = stage2Registries
372
+ ? validateDiagramsAgainstOntology(rawUserDiagrams, stage2Registries)
263
373
  : rawUserDiagrams;
264
374
  diagrams.push(...validUserDiagrams);
265
375
  }
@@ -269,37 +379,49 @@ export async function devCommand(options) {
269
379
  }
270
380
  // Ship the ontology registries with the model so the client resolves
271
381
  // relationship legality from the ontology, not a hardcoded table.
272
- const registriesDTO = projectRegistries
382
+ const registriesDTO = stage2Registries
273
383
  ? {
274
- relationships: projectRegistries.relationshipRegistry?.toDefinitionDTOs() ?? [],
275
- kinds: projectRegistries.kindRegistry?.toDefinitionDTOs() ?? [],
384
+ relationships: stage2Registries.relationshipRegistry?.toDefinitionDTOs() ?? [],
385
+ kinds: stage2Registries.kindRegistry?.toDefinitionDTOs() ?? [],
276
386
  }
277
387
  : undefined;
278
388
  // Which files can change what each view renders. Computed once per
279
389
  // rebuild so every client can answer "does this change affect me?"
280
390
  // locally, without a round trip per changed file.
281
- const sourceGraph = buildSourceGraph(documents);
391
+ // From the handoff stage 1 built the model from.
392
+ const sourceGraph = accepted
393
+ ? (() => {
394
+ const { packages, files } = apiProjectSourcePackages(stage1.api, resolve(cwd));
395
+ return buildSourceGraphFromPackages(packages, files);
396
+ })()
397
+ : kept.sourceGraph;
398
+ const enumerations = accepted ? apiEnumerations(stage1.api) : kept.enumerations;
399
+ if (accepted) {
400
+ lastAccepted = { model, irIdentities, constraints: nativeConstraints, registries: stage2Registries, sourceGraph, enumerations, api: stage1.api };
401
+ }
282
402
  for (const diagram of diagrams) {
283
403
  diagram.sourceFiles = viewSourceFiles(diagram, model.elements, sourceGraph);
284
404
  }
405
+ lastSourceHashes = Object.fromEntries(sysmlFiles.map(file => [
406
+ relative(cwd, file).replaceAll('\\', '/'),
407
+ layoutBlindRevision(readFileSync(file, 'utf8')),
408
+ ]));
285
409
  const dto = modelToDTO(model, {
286
410
  viewpoints, architectureLayers, diagrams, registries: registriesDTO,
287
411
  revision: buildCount,
288
412
  sourceGraph: sourceGraphToDTO(sourceGraph),
289
413
  irIdentities,
290
- sourceHashes: Object.fromEntries(sysmlFiles.map(file => [
291
- relative(cwd, file).replaceAll('\\', '/'),
292
- createHash('sha256').update(readFileSync(file)).digest('hex').slice(0, 16),
293
- ])),
294
- enumerations: collectEnumerations(documents),
414
+ sourceHashes: lastSourceHashes,
415
+ enumerations,
416
+ workspaceMembership: membership ? workspaceMembershipToDTO(membership, model) : undefined,
295
417
  });
296
418
  // Compute the clause coverage report and attach it to the model DTO
297
419
  // so the Architect can badge document cards with gap counts without a
298
- // second request. Same computation as `memo standards check`.
420
+ // second request. Same computation as `memo validate --standards`.
299
421
  try {
300
422
  const library = loadStandardsLibrary(cwd);
301
- const kindRegistry = projectRegistries?.kindRegistry;
302
- const declared = readDeclaredRegimes(model);
423
+ const kindRegistry = stage2Registries?.kindRegistry;
424
+ const declared = readDeclaredRegimes(model, kindRegistry);
303
425
  dto.standardsReport = computeStandardsReport({
304
426
  library,
305
427
  model,
@@ -314,7 +436,11 @@ export async function devCommand(options) {
314
436
  }
315
437
  dto.metadata = metadata;
316
438
  dto.ontologyHash = ontologyHash;
317
- const ontologyPackages = getPackageMetadata(cwd);
439
+ // The packages of the last accepted build: a rejected edit keeps them.
440
+ if (accepted) {
441
+ lastPackages = apiPackageMetadata(stage1.api, cwd, new Set(nativeResolution.selectedRoots.map(root => root.dir)), resolutionOf?.filePackages);
442
+ }
443
+ const ontologyPackages = lastPackages;
318
444
  if (errors.length === 0)
319
445
  lastGoodRevision = buildCount;
320
446
  const result = {
@@ -346,11 +472,20 @@ export async function devCommand(options) {
346
472
  if (sysmlCount === 0) {
347
473
  console.log(chalk.yellow(' ⚠ No .sysml files found in this directory.'));
348
474
  console.log(chalk.gray(' Create model files in a model/ subdirectory, or run:'));
349
- console.log(chalk.gray(' memo init <project-name>'));
350
- console.log(chalk.gray(' memo import template elements\n'));
475
+ console.log(chalk.gray(' memo-architect init <project-name>'));
476
+ console.log(chalk.gray(' memo-architect import template elements\n'));
351
477
  }
352
478
  console.log(chalk.gray(' Building model...'));
353
479
  const initial = await rebuildProject();
480
+ // Layouts moved into their views; a sidecar left behind is no longer read.
481
+ try {
482
+ const leftover = readLegacyLayouts(cwd);
483
+ if (leftover.length > 0) {
484
+ console.log(chalk.yellow(` ⚠ ${leftover.length} diagram layout(s) in .viewlayout files are no longer read. `
485
+ + 'Run `memo-architect migrate-layout` to move them into their views.'));
486
+ }
487
+ }
488
+ catch { /* a warning, never a reason not to serve */ }
354
489
  let shuttingDown = false;
355
490
  let idleShutdownTimer;
356
491
  let projectWatcher;
@@ -362,19 +497,116 @@ export async function devCommand(options) {
362
497
  if (idleShutdownTimer)
363
498
  clearTimeout(idleShutdownTimer);
364
499
  console.log(chalk.gray(`\n ${reason}`));
500
+ if (layoutSettleTimer)
501
+ clearTimeout(layoutSettleTimer);
365
502
  projectWatcher?.close();
366
503
  ontologyWatcher?.close();
504
+ versions?.close();
505
+ removeDevServerRecord(cwd);
367
506
  server.close();
368
507
  process.exit(0);
369
508
  };
509
+ // Compiles run one at a time, whether a save or a `memo validate` asked.
510
+ let compileChain = Promise.resolve();
511
+ const serialized = (run) => {
512
+ const next = compileChain.then(run, run);
513
+ compileChain = next.then(() => undefined, () => undefined);
514
+ return next;
515
+ };
516
+ // `memo validate`, answered from the model held here (server/dev-validate.ts).
517
+ // The settings are read once, at startup: changed since, this process is
518
+ // not the one to validate them, and the caller validates on its own.
519
+ const settingsAtStart = JSON.stringify(loadProjectSettings(cwd));
520
+ const validateToken = newToken();
521
+ const validateHere = (validateOptions) => serialized(async () => {
522
+ if (JSON.stringify(loadProjectSettings(cwd)) !== settingsAtStart) {
523
+ throw new Error('the project settings changed since memo dev started');
524
+ }
525
+ if (latestCompile?.fingerprint !== sourceFingerprint(cwd))
526
+ await rebuildAndPublish([]);
527
+ const held = latestCompile;
528
+ if (!held)
529
+ throw new Error('memo dev holds no compile');
530
+ let stdout = '';
531
+ let stderr = '';
532
+ const io = {
533
+ out: (...args) => { stdout += format(...args) + '\n'; },
534
+ err: (...args) => { stderr += format(...args) + '\n'; },
535
+ write: text => { stdout += text; },
536
+ };
537
+ const exitCode = await validationExitCode(() => runValidation(cwd, validateOptions, io, async () => held.stage1));
538
+ return { exitCode, stdout, stderr };
539
+ });
370
540
  // Start dev server
541
+ const versions = options.versionChild && !options.readOnly
542
+ ? createVersionServers({
543
+ projectRoot: cwd, entry: options.versionChild.entry, args: options.versionChild.args,
544
+ workingModel: () => lastAccepted?.model, workingUrl: () => `http://${host}:${workingPort}`,
545
+ toolchain: config.toolchain,
546
+ })
547
+ : undefined;
548
+ let workingPort = port;
549
+ const devices = options.readOnly ? undefined : {
550
+ generate: (device) => {
551
+ if (!lastAccepted)
552
+ throw new Error('the working model is not built yet');
553
+ return compileDeviceDhf({
554
+ projectRoot: cwd, working: { model: lastAccepted.model, registries: lastAccepted.registries },
555
+ device, outputDir: resolve(cwd, 'dhf-output'), config: { toolchain: config.toolchain },
556
+ });
557
+ },
558
+ };
559
+ // Where the model stands against its method, for one workspace. Read-only: it writes nothing.
560
+ const guide = {
561
+ evaluate: (workspace) => {
562
+ if (!lastAccepted?.api || !lastAccepted.registries)
563
+ throw new Error('the working model is not built yet');
564
+ const packages = (methodologyDescriptor.effective?.chain ?? []).map(m => m.packageQualifiedName).filter((p) => !!p);
565
+ return evaluateWorkspaceGuide({
566
+ api: lastAccepted.api, model: lastAccepted.model, registries: lastAccepted.registries,
567
+ constraints: lastAccepted.constraints, packages, workspace,
568
+ });
569
+ },
570
+ };
571
+ // What the working tree's change reaches, measured from the commit it branched from (T11).
572
+ const impact = options.readOnly ? undefined : {
573
+ compute: (target) => {
574
+ if (!lastAccepted?.api || !lastAccepted.registries)
575
+ throw new Error('the working model is not built yet');
576
+ const packages = (methodologyDescriptor.effective?.chain ?? []).map(m => m.packageQualifiedName).filter((p) => !!p);
577
+ return computeChangeImpact({
578
+ projectRoot: cwd, target,
579
+ head: { model: lastAccepted.model, registries: lastAccepted.registries, api: lastAccepted.api, constraints: lastAccepted.constraints, packages },
580
+ build: { config: { toolchain: config.toolchain } },
581
+ });
582
+ },
583
+ };
371
584
  const server = await createDevServer({
585
+ memoModel: () => lastAccepted?.model,
586
+ workspaceScope: root => {
587
+ if (!lastAccepted?.registries?.kindRegistry || !lastAccepted.registries.relationshipRegistry)
588
+ return undefined;
589
+ const membership = computeWorkspaceMembership(lastAccepted.model, lastAccepted.registries);
590
+ const selection = selectWorkspace(lastAccepted.model, membership, root);
591
+ return selection.ok ? selection.scope : undefined;
592
+ },
593
+ impact,
594
+ guide,
595
+ devices,
596
+ versions,
597
+ readOnly: options.readOnly,
598
+ pinned: options.pinned,
599
+ preferencesRoot: options.preferencesRoot,
600
+ validate: validateHere,
601
+ validateToken,
372
602
  port,
373
603
  projectRoot: cwd,
374
604
  webPackagePath: options.clientRoot,
375
605
  initialMessages: initial.messages,
606
+ ruleContext: () => ruleContext,
376
607
  ontologyRegistries,
377
608
  ontologyRoots,
609
+ packageMetadata: () => lastPackages,
378
610
  relationshipFiles: config.relationshipFiles,
379
611
  canonicalRelationshipFile: config.canonicalRelationshipFile,
380
612
  transformClientHtml: options.transformClientHtml,
@@ -396,6 +628,14 @@ export async function devCommand(options) {
396
628
  }
397
629
  },
398
630
  });
631
+ // Say where `memo validate` can find this model. Not when this run names a
632
+ // toolchain of its own: a plain `memo validate` would then be answered by
633
+ // another compiler than the settings select.
634
+ const ownToolchain = Object.values(options.toolchainOptions ?? {}).some(value => value !== undefined);
635
+ if (!ownToolchain && !options.readOnly) {
636
+ writeDevServerRecord({ pid: process.pid, url: `http://${host}:${port}`, token: validateToken, projectRoot: cwd });
637
+ process.once('exit', () => removeDevServerRecord(cwd));
638
+ }
399
639
  if (!initial.coherent) {
400
640
  // Starting on a project that does not parse is allowed — the user
401
641
  // opened Architect precisely to see and fix it. There is no last good
@@ -417,7 +657,15 @@ export async function devCommand(options) {
417
657
  : performance.now() - bootstrapStartedAt;
418
658
  const runtimeBudget = enforceRuntimeBudget(budgetPath, elapsed);
419
659
  console.log(chalk.gray(` ${budgetPath}: ${runtimeBudget.elapsedMs.toFixed(0)}ms / ${runtimeBudget.budgetMs}ms`));
420
- console.log(chalk.green(`\n ➜ http://${host}:${port}\n`));
660
+ const boundPort = options.readOnly ? server.port : port;
661
+ workingPort = boundPort;
662
+ console.log(chalk.green(`\n ➜ http://${host}:${boundPort}\n`));
663
+ // A pinned server is a child of the server that opened it: it tells that parent where it is, and
664
+ // goes when the parent does.
665
+ if (options.readOnly && process.send) {
666
+ process.send({ type: 'memo:read-only-ready', url: `http://${host}:${boundPort}` });
667
+ process.once('disconnect', () => process.exit(0));
668
+ }
421
669
  // ── notifyRestartRequired: ontology watcher callback ───────────────────────
422
670
  // Declared after server so it can reference server directly.
423
671
  function notifyRestartRequired(reason, changedFile) {
@@ -447,7 +695,8 @@ export async function devCommand(options) {
447
695
  }, 50);
448
696
  }
449
697
  }
450
- // Project watcher — hot reload.
698
+ // Project watcher — hot reload. Not in a read-only server: the directory is a pinned commit and
699
+ // does not change under it.
451
700
  //
452
701
  // The rebuild is broadcast together with the list of files that caused it,
453
702
  // so open editors and views can tell whether the change was theirs instead
@@ -482,7 +731,7 @@ export async function devCommand(options) {
482
731
  })),
483
732
  lastGoodRevision,
484
733
  });
485
- console.log(chalk.yellow(` ⚠ ${result.firstErrorFile ?? 'project source'} does not parse — showing the last good model`
734
+ console.log(chalk.yellow(` ⚠ ${result.firstErrorFile ?? 'project source'} does not compile — showing the last good model`
486
735
  + ` (revision ${lastGoodRevision}). Mutations are held until it does.`));
487
736
  return;
488
737
  }
@@ -496,8 +745,17 @@ export async function devCommand(options) {
496
745
  },
497
746
  }]);
498
747
  };
499
- projectWatcher = createProjectWatcher(cwd, async (changedFiles) => {
500
- for (const file of changedFiles)
748
+ // A layout is saved at the end of a drag, into the view that declares it. Such a
749
+ // write changes no model fact, so it does not rebuild at once: the clients that
750
+ // did not make it are given the new layout, and one rebuild follows when the
751
+ // saves stop. That rebuild is not for the model's sake but for the source
752
+ // ranges the compile recorded, which a block of statements shifts for every
753
+ // declaration after it in the file.
754
+ const LAYOUT_SETTLE_MS = 2500;
755
+ let layoutSettleTimer;
756
+ const settlingLayoutFiles = new Set();
757
+ const runRebuilds = async (files) => {
758
+ for (const file of files)
501
759
  pendingRebuildFiles.add(file);
502
760
  if (rebuildInFlight)
503
761
  return;
@@ -506,15 +764,46 @@ export async function devCommand(options) {
506
764
  while (pendingRebuildFiles.size > 0) {
507
765
  const nextFiles = [...pendingRebuildFiles].sort();
508
766
  pendingRebuildFiles.clear();
509
- await rebuildAndPublish(nextFiles);
767
+ await serialized(() => rebuildAndPublish(nextFiles));
510
768
  }
511
769
  }
512
770
  finally {
513
771
  rebuildInFlight = false;
514
772
  }
515
- }, 300, false, { ontologyRoots, provenance });
773
+ };
774
+ if (!options.readOnly)
775
+ projectWatcher = createProjectWatcher(cwd, async (changedFiles) => {
776
+ const layoutOnly = changedFiles.filter(file => {
777
+ const known = lastSourceHashes[file.replaceAll('\\', '/')];
778
+ const path = resolve(cwd, file);
779
+ return known !== undefined && existsSync(path) && layoutBlindRevision(readFileSync(path, 'utf8')) === known;
780
+ });
781
+ const rest = changedFiles.filter(file => !layoutOnly.includes(file));
782
+ if (layoutOnly.length > 0) {
783
+ const mine = server.consumeWriteTransactions(layoutOnly).matched;
784
+ const outside = layoutOnly.filter(file => !(file.replaceAll('\\', '/') in mine));
785
+ if (outside.length > 0)
786
+ server.refreshLayouts(outside);
787
+ // Whatever else changed in the same burst rebuilds anyway, and that
788
+ // rebuild covers these files; otherwise settle first.
789
+ if (rest.length === 0) {
790
+ for (const file of layoutOnly)
791
+ settlingLayoutFiles.add(file);
792
+ if (layoutSettleTimer)
793
+ clearTimeout(layoutSettleTimer);
794
+ layoutSettleTimer = setTimeout(() => {
795
+ const files = [...settlingLayoutFiles];
796
+ settlingLayoutFiles.clear();
797
+ void runRebuilds(files);
798
+ }, LAYOUT_SETTLE_MS);
799
+ return;
800
+ }
801
+ }
802
+ await runRebuilds(rest.length > 0 ? changedFiles : []);
803
+ }, 300, false, { ontologyRoots, provenance });
516
804
  // Ontology watcher — restart notification only, no registry reload
517
- ontologyWatcher = createOntologyWatcher(cwd, ontologyRoots, (changedFile) => notifyRestartRequired('ontology-source-changed', changedFile), 300, provenance);
805
+ if (!options.readOnly)
806
+ ontologyWatcher = createOntologyWatcher(cwd, ontologyRoots, (changedFile) => notifyRestartRequired('ontology-source-changed', changedFile), 300, provenance);
518
807
  // Open browser
519
808
  if (options.open !== false) {
520
809
  const openModule = await import('open');