@primmel/primmel 1.3.2 → 1.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (423) hide show
  1. package/dist/index.d.ts +40 -4
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +112 -1
  4. package/dist/index.js.map +1 -1
  5. package/dist/src/check-allowlist.d.ts +56 -0
  6. package/dist/src/check-allowlist.d.ts.map +1 -0
  7. package/dist/src/check-allowlist.js +307 -0
  8. package/dist/src/check-allowlist.js.map +1 -0
  9. package/dist/src/check-rules.d.ts +17 -0
  10. package/dist/src/check-rules.d.ts.map +1 -0
  11. package/dist/src/check-rules.js +351 -0
  12. package/dist/src/check-rules.js.map +1 -0
  13. package/dist/src/check.d.ts +115 -0
  14. package/dist/src/check.d.ts.map +1 -0
  15. package/dist/src/check.js +4164 -0
  16. package/dist/src/check.js.map +1 -0
  17. package/dist/src/export/rdf-competency-questions.d.ts +11 -0
  18. package/dist/src/export/rdf-competency-questions.d.ts.map +1 -0
  19. package/dist/src/export/rdf-competency-questions.js +99 -0
  20. package/dist/src/export/rdf-competency-questions.js.map +1 -0
  21. package/dist/src/export/rdf-shapes.d.ts +3 -0
  22. package/dist/src/export/rdf-shapes.d.ts.map +1 -0
  23. package/dist/src/export/rdf-shapes.js +225 -0
  24. package/dist/src/export/rdf-shapes.js.map +1 -0
  25. package/dist/src/export/rdf-vocabulary.d.ts +125 -0
  26. package/dist/src/export/rdf-vocabulary.d.ts.map +1 -0
  27. package/dist/src/export/rdf-vocabulary.js +230 -0
  28. package/dist/src/export/rdf-vocabulary.js.map +1 -0
  29. package/dist/src/export/rdf.d.ts +92 -0
  30. package/dist/src/export/rdf.d.ts.map +1 -0
  31. package/dist/src/export/rdf.js +707 -0
  32. package/dist/src/export/rdf.js.map +1 -0
  33. package/dist/src/export/reqif.d.ts +81 -0
  34. package/dist/src/export/reqif.d.ts.map +1 -0
  35. package/dist/src/export/reqif.js +703 -0
  36. package/dist/src/export/reqif.js.map +1 -0
  37. package/dist/src/instance-resolution.d.ts +68 -0
  38. package/dist/src/instance-resolution.d.ts.map +1 -0
  39. package/dist/src/instance-resolution.js +239 -0
  40. package/dist/src/instance-resolution.js.map +1 -0
  41. package/dist/src/mapping-coverage.d.ts +220 -0
  42. package/dist/src/mapping-coverage.d.ts.map +1 -0
  43. package/dist/src/mapping-coverage.js +528 -0
  44. package/dist/src/mapping-coverage.js.map +1 -0
  45. package/dist/src/model-diff.d.ts +198 -0
  46. package/dist/src/model-diff.d.ts.map +1 -0
  47. package/dist/src/model-diff.js +914 -0
  48. package/dist/src/model-diff.js.map +1 -0
  49. package/dist/src/operational-state.d.ts +112 -0
  50. package/dist/src/operational-state.d.ts.map +1 -0
  51. package/dist/src/operational-state.js +162 -0
  52. package/dist/src/operational-state.js.map +1 -0
  53. package/dist/src/package-diff.d.ts +36 -0
  54. package/dist/src/package-diff.d.ts.map +1 -0
  55. package/dist/src/package-diff.js +104 -0
  56. package/dist/src/package-diff.js.map +1 -0
  57. package/dist/src/ser-des/config/acceptance.d.ts +10 -0
  58. package/dist/src/ser-des/config/acceptance.d.ts.map +1 -0
  59. package/dist/src/ser-des/config/acceptance.js +163 -0
  60. package/dist/src/ser-des/config/acceptance.js.map +1 -0
  61. package/dist/src/ser-des/config/activityArchetype.d.ts +5 -0
  62. package/dist/src/ser-des/config/activityArchetype.d.ts.map +1 -0
  63. package/dist/src/ser-des/config/activityArchetype.js +78 -0
  64. package/dist/src/ser-des/config/activityArchetype.js.map +1 -0
  65. package/dist/src/ser-des/config/artifact.d.ts +16 -0
  66. package/dist/src/ser-des/config/artifact.d.ts.map +1 -0
  67. package/dist/src/ser-des/config/artifact.js +392 -0
  68. package/dist/src/ser-des/config/artifact.js.map +1 -0
  69. package/dist/src/ser-des/config/calculation.d.ts.map +1 -1
  70. package/dist/src/ser-des/config/calculation.js +214 -12
  71. package/dist/src/ser-des/config/calculation.js.map +1 -1
  72. package/dist/src/ser-des/config/comment.d.ts +34 -0
  73. package/dist/src/ser-des/config/comment.d.ts.map +1 -0
  74. package/dist/src/ser-des/config/comment.js +121 -0
  75. package/dist/src/ser-des/config/comment.js.map +1 -0
  76. package/dist/src/ser-des/config/competenceKind.d.ts +8 -0
  77. package/dist/src/ser-des/config/competenceKind.d.ts.map +1 -0
  78. package/dist/src/ser-des/config/competenceKind.js +266 -0
  79. package/dist/src/ser-des/config/competenceKind.js.map +1 -0
  80. package/dist/src/ser-des/config/composition.d.ts +6 -0
  81. package/dist/src/ser-des/config/composition.d.ts.map +1 -0
  82. package/dist/src/ser-des/config/composition.js +165 -0
  83. package/dist/src/ser-des/config/composition.js.map +1 -0
  84. package/dist/src/ser-des/config/conformanceClass.d.ts +9 -0
  85. package/dist/src/ser-des/config/conformanceClass.d.ts.map +1 -0
  86. package/dist/src/ser-des/config/conformanceClass.js +128 -0
  87. package/dist/src/ser-des/config/conformanceClass.js.map +1 -0
  88. package/dist/src/ser-des/config/conformanceTest.d.ts +6 -0
  89. package/dist/src/ser-des/config/conformanceTest.d.ts.map +1 -0
  90. package/dist/src/ser-des/config/conformanceTest.js +929 -0
  91. package/dist/src/ser-des/config/conformanceTest.js.map +1 -0
  92. package/dist/src/ser-des/config/constraint.d.ts +5 -0
  93. package/dist/src/ser-des/config/constraint.d.ts.map +1 -0
  94. package/dist/src/ser-des/config/constraint.js +108 -0
  95. package/dist/src/ser-des/config/constraint.js.map +1 -0
  96. package/dist/src/ser-des/config/data.d.ts.map +1 -1
  97. package/dist/src/ser-des/config/data.js +105 -12
  98. package/dist/src/ser-des/config/data.js.map +1 -1
  99. package/dist/src/ser-des/config/design.d.ts +9 -0
  100. package/dist/src/ser-des/config/design.d.ts.map +1 -0
  101. package/dist/src/ser-des/config/design.js +847 -0
  102. package/dist/src/ser-des/config/design.js.map +1 -0
  103. package/dist/src/ser-des/config/discrepancyRecord.d.ts +5 -0
  104. package/dist/src/ser-des/config/discrepancyRecord.d.ts.map +1 -0
  105. package/dist/src/ser-des/config/discrepancyRecord.js +109 -0
  106. package/dist/src/ser-des/config/discrepancyRecord.js.map +1 -0
  107. package/dist/src/ser-des/config/dual.d.ts +9 -0
  108. package/dist/src/ser-des/config/dual.d.ts.map +1 -0
  109. package/dist/src/ser-des/config/dual.js +84 -0
  110. package/dist/src/ser-des/config/dual.js.map +1 -0
  111. package/dist/src/ser-des/config/field-parser.d.ts +92 -7
  112. package/dist/src/ser-des/config/field-parser.d.ts.map +1 -1
  113. package/dist/src/ser-des/config/field-parser.js +844 -29
  114. package/dist/src/ser-des/config/field-parser.js.map +1 -1
  115. package/dist/src/ser-des/config/form.d.ts.map +1 -1
  116. package/dist/src/ser-des/config/form.js +356 -134
  117. package/dist/src/ser-des/config/form.js.map +1 -1
  118. package/dist/src/ser-des/config/formulasUsed.d.ts +9 -0
  119. package/dist/src/ser-des/config/formulasUsed.d.ts.map +1 -0
  120. package/dist/src/ser-des/config/formulasUsed.js +126 -0
  121. package/dist/src/ser-des/config/formulasUsed.js.map +1 -0
  122. package/dist/src/ser-des/config/index.d.ts.map +1 -1
  123. package/dist/src/ser-des/config/index.js +180 -1
  124. package/dist/src/ser-des/config/index.js.map +1 -1
  125. package/dist/src/ser-des/config/instance.d.ts +22 -0
  126. package/dist/src/ser-des/config/instance.d.ts.map +1 -0
  127. package/dist/src/ser-des/config/instance.js +266 -0
  128. package/dist/src/ser-des/config/instance.js.map +1 -0
  129. package/dist/src/ser-des/config/invariant.d.ts +9 -0
  130. package/dist/src/ser-des/config/invariant.d.ts.map +1 -0
  131. package/dist/src/ser-des/config/invariant.js +143 -0
  132. package/dist/src/ser-des/config/invariant.js.map +1 -0
  133. package/dist/src/ser-des/config/mapProfile.d.ts.map +1 -1
  134. package/dist/src/ser-des/config/mapProfile.js +199 -14
  135. package/dist/src/ser-des/config/mapProfile.js.map +1 -1
  136. package/dist/src/ser-des/config/metadata.js +6 -6
  137. package/dist/src/ser-des/config/metadata.js.map +1 -1
  138. package/dist/src/ser-des/config/monitor.d.ts +9 -0
  139. package/dist/src/ser-des/config/monitor.d.ts.map +1 -0
  140. package/dist/src/ser-des/config/monitor.js +322 -0
  141. package/dist/src/ser-des/config/monitor.js.map +1 -0
  142. package/dist/src/ser-des/config/note.d.ts.map +1 -1
  143. package/dist/src/ser-des/config/note.js +16 -1
  144. package/dist/src/ser-des/config/note.js.map +1 -1
  145. package/dist/src/ser-des/config/packageManifest.d.ts +5 -0
  146. package/dist/src/ser-des/config/packageManifest.d.ts.map +1 -0
  147. package/dist/src/ser-des/config/packageManifest.js +349 -0
  148. package/dist/src/ser-des/config/packageManifest.js.map +1 -0
  149. package/dist/src/ser-des/config/passport.d.ts +9 -0
  150. package/dist/src/ser-des/config/passport.d.ts.map +1 -0
  151. package/dist/src/ser-des/config/passport.js +191 -0
  152. package/dist/src/ser-des/config/passport.js.map +1 -0
  153. package/dist/src/ser-des/config/process.d.ts +5 -3
  154. package/dist/src/ser-des/config/process.d.ts.map +1 -1
  155. package/dist/src/ser-des/config/process.js +915 -8
  156. package/dist/src/ser-des/config/process.js.map +1 -1
  157. package/dist/src/ser-des/config/quantity.d.ts +21 -0
  158. package/dist/src/ser-des/config/quantity.d.ts.map +1 -0
  159. package/dist/src/ser-des/config/quantity.js +114 -0
  160. package/dist/src/ser-des/config/quantity.js.map +1 -0
  161. package/dist/src/ser-des/config/quantityRegister.d.ts +9 -0
  162. package/dist/src/ser-des/config/quantityRegister.d.ts.map +1 -0
  163. package/dist/src/ser-des/config/quantityRegister.js +202 -0
  164. package/dist/src/ser-des/config/quantityRegister.js.map +1 -0
  165. package/dist/src/ser-des/config/reference.d.ts.map +1 -1
  166. package/dist/src/ser-des/config/reference.js +6 -0
  167. package/dist/src/ser-des/config/reference.js.map +1 -1
  168. package/dist/src/ser-des/config/referenceMaterial.d.ts +5 -0
  169. package/dist/src/ser-des/config/referenceMaterial.d.ts.map +1 -0
  170. package/dist/src/ser-des/config/referenceMaterial.js +296 -0
  171. package/dist/src/ser-des/config/referenceMaterial.js.map +1 -0
  172. package/dist/src/ser-des/config/requirement.d.ts +16 -0
  173. package/dist/src/ser-des/config/requirement.d.ts.map +1 -0
  174. package/dist/src/ser-des/config/requirement.js +579 -0
  175. package/dist/src/ser-des/config/requirement.js.map +1 -0
  176. package/dist/src/ser-des/config/role.d.ts.map +1 -1
  177. package/dist/src/ser-des/config/role.js +12 -0
  178. package/dist/src/ser-des/config/role.js.map +1 -1
  179. package/dist/src/ser-des/config/series.d.ts +9 -0
  180. package/dist/src/ser-des/config/series.d.ts.map +1 -0
  181. package/dist/src/ser-des/config/series.js +121 -0
  182. package/dist/src/ser-des/config/series.js.map +1 -0
  183. package/dist/src/ser-des/config/sourceDiscrepancy.d.ts +11 -0
  184. package/dist/src/ser-des/config/sourceDiscrepancy.d.ts.map +1 -0
  185. package/dist/src/ser-des/config/sourceDiscrepancy.js +83 -0
  186. package/dist/src/ser-des/config/sourceDiscrepancy.js.map +1 -0
  187. package/dist/src/ser-des/config/stateMachine.d.ts.map +1 -1
  188. package/dist/src/ser-des/config/stateMachine.js +189 -38
  189. package/dist/src/ser-des/config/stateMachine.js.map +1 -1
  190. package/dist/src/ser-des/config/subform.d.ts.map +1 -1
  191. package/dist/src/ser-des/config/subform.js +25 -33
  192. package/dist/src/ser-des/config/subform.js.map +1 -1
  193. package/dist/src/ser-des/config/subject.d.ts +58 -0
  194. package/dist/src/ser-des/config/subject.d.ts.map +1 -0
  195. package/dist/src/ser-des/config/subject.js +2093 -0
  196. package/dist/src/ser-des/config/subject.js.map +1 -0
  197. package/dist/src/ser-des/config/symbol.d.ts.map +1 -1
  198. package/dist/src/ser-des/config/symbol.js +130 -6
  199. package/dist/src/ser-des/config/symbol.js.map +1 -1
  200. package/dist/src/ser-des/config/table.d.ts.map +1 -1
  201. package/dist/src/ser-des/config/table.js +373 -7
  202. package/dist/src/ser-des/config/table.js.map +1 -1
  203. package/dist/src/ser-des/config/term.d.ts.map +1 -1
  204. package/dist/src/ser-des/config/term.js +107 -0
  205. package/dist/src/ser-des/config/term.js.map +1 -1
  206. package/dist/src/ser-des/config/testPointSet.d.ts +5 -0
  207. package/dist/src/ser-des/config/testPointSet.d.ts.map +1 -0
  208. package/dist/src/ser-des/config/testPointSet.js +199 -0
  209. package/dist/src/ser-des/config/testPointSet.js.map +1 -0
  210. package/dist/src/ser-des/config/testSequence.d.ts +9 -0
  211. package/dist/src/ser-des/config/testSequence.d.ts.map +1 -0
  212. package/dist/src/ser-des/config/testSequence.js +206 -0
  213. package/dist/src/ser-des/config/testSequence.js.map +1 -0
  214. package/dist/src/ser-des/config/text.d.ts +5 -0
  215. package/dist/src/ser-des/config/text.d.ts.map +1 -0
  216. package/dist/src/ser-des/config/text.js +106 -0
  217. package/dist/src/ser-des/config/text.js.map +1 -0
  218. package/dist/src/ser-des/config/twin.d.ts +31 -0
  219. package/dist/src/ser-des/config/twin.d.ts.map +1 -0
  220. package/dist/src/ser-des/config/twin.js +362 -0
  221. package/dist/src/ser-des/config/twin.js.map +1 -0
  222. package/dist/src/ser-des/config/verdict.d.ts +5 -0
  223. package/dist/src/ser-des/config/verdict.d.ts.map +1 -0
  224. package/dist/src/ser-des/config/verdict.js +159 -0
  225. package/dist/src/ser-des/config/verdict.js.map +1 -0
  226. package/dist/src/ser-des/config/viewProfile.d.ts.map +1 -1
  227. package/dist/src/ser-des/config/viewProfile.js +7 -0
  228. package/dist/src/ser-des/config/viewProfile.js.map +1 -1
  229. package/dist/src/ser-des/includes.d.ts.map +1 -1
  230. package/dist/src/ser-des/includes.js +5 -2
  231. package/dist/src/ser-des/includes.js.map +1 -1
  232. package/dist/src/ser-des/index.d.ts +12 -0
  233. package/dist/src/ser-des/index.d.ts.map +1 -1
  234. package/dist/src/ser-des/index.js +42 -0
  235. package/dist/src/ser-des/index.js.map +1 -1
  236. package/dist/src/ser-des/package.d.ts +53 -0
  237. package/dist/src/ser-des/package.d.ts.map +1 -0
  238. package/dist/src/ser-des/package.js +404 -0
  239. package/dist/src/ser-des/package.js.map +1 -0
  240. package/dist/src/ser-des/parse-block.d.ts.map +1 -1
  241. package/dist/src/ser-des/parse-block.js +7 -1
  242. package/dist/src/ser-des/parse-block.js.map +1 -1
  243. package/dist/src/ser-des/parse.d.ts.map +1 -1
  244. package/dist/src/ser-des/parse.js +45 -0
  245. package/dist/src/ser-des/parse.js.map +1 -1
  246. package/dist/src/ser-des/prm.d.ts +53 -0
  247. package/dist/src/ser-des/prm.d.ts.map +1 -0
  248. package/dist/src/ser-des/prm.js +257 -0
  249. package/dist/src/ser-des/prm.js.map +1 -0
  250. package/dist/src/ser-des/resolve.d.ts.map +1 -1
  251. package/dist/src/ser-des/resolve.js +1 -0
  252. package/dist/src/ser-des/resolve.js.map +1 -1
  253. package/dist/src/ser-des/tokenize.d.ts +11 -0
  254. package/dist/src/ser-des/tokenize.d.ts.map +1 -1
  255. package/dist/src/ser-des/tokenize.js +28 -1
  256. package/dist/src/ser-des/tokenize.js.map +1 -1
  257. package/dist/src/ser-des/types.d.ts +56 -1
  258. package/dist/src/ser-des/types.d.ts.map +1 -1
  259. package/dist/src/spelling.d.ts +35 -0
  260. package/dist/src/spelling.d.ts.map +1 -0
  261. package/dist/src/spelling.js +140 -0
  262. package/dist/src/spelling.js.map +1 -0
  263. package/dist/src/text-coverage.d.ts +164 -0
  264. package/dist/src/text-coverage.d.ts.map +1 -0
  265. package/dist/src/text-coverage.js +679 -0
  266. package/dist/src/text-coverage.js.map +1 -0
  267. package/dist/src/time.d.ts +55 -0
  268. package/dist/src/time.d.ts.map +1 -0
  269. package/dist/src/time.js +223 -0
  270. package/dist/src/time.js.map +1 -0
  271. package/dist/src/type-expr.d.ts +31 -0
  272. package/dist/src/type-expr.d.ts.map +1 -0
  273. package/dist/src/type-expr.js +110 -0
  274. package/dist/src/type-expr.js.map +1 -0
  275. package/dist/src/types/Acceptance.d.ts +31 -0
  276. package/dist/src/types/Acceptance.d.ts.map +1 -0
  277. package/dist/src/types/Acceptance.js +12 -0
  278. package/dist/src/types/Acceptance.js.map +1 -0
  279. package/dist/src/types/ActivityArchetype.d.ts +14 -0
  280. package/dist/src/types/ActivityArchetype.d.ts.map +1 -0
  281. package/dist/src/types/ActivityArchetype.js +17 -0
  282. package/dist/src/types/ActivityArchetype.js.map +1 -0
  283. package/dist/src/types/Artifact.d.ts +117 -0
  284. package/dist/src/types/Artifact.d.ts.map +1 -0
  285. package/dist/src/types/Artifact.js +35 -0
  286. package/dist/src/types/Artifact.js.map +1 -0
  287. package/dist/src/types/Calculation.d.ts +49 -0
  288. package/dist/src/types/Calculation.d.ts.map +1 -1
  289. package/dist/src/types/Comment.d.ts +23 -0
  290. package/dist/src/types/Comment.d.ts.map +1 -0
  291. package/dist/src/types/Comment.js +3 -0
  292. package/dist/src/types/Comment.js.map +1 -0
  293. package/dist/src/types/CompetenceKind.d.ts +70 -0
  294. package/dist/src/types/CompetenceKind.d.ts.map +1 -0
  295. package/dist/src/types/CompetenceKind.js +3 -0
  296. package/dist/src/types/CompetenceKind.js.map +1 -0
  297. package/dist/src/types/Composition.d.ts +80 -0
  298. package/dist/src/types/Composition.d.ts.map +1 -0
  299. package/dist/src/types/Composition.js +44 -0
  300. package/dist/src/types/Composition.js.map +1 -0
  301. package/dist/src/types/ConformanceClass.d.ts +22 -0
  302. package/dist/src/types/ConformanceClass.d.ts.map +1 -0
  303. package/dist/src/types/ConformanceClass.js +7 -0
  304. package/dist/src/types/ConformanceClass.js.map +1 -0
  305. package/dist/src/types/ConformanceTest.d.ts +206 -0
  306. package/dist/src/types/ConformanceTest.d.ts.map +1 -0
  307. package/dist/src/types/ConformanceTest.js +3 -0
  308. package/dist/src/types/ConformanceTest.js.map +1 -0
  309. package/dist/src/types/Constraint.d.ts +34 -0
  310. package/dist/src/types/Constraint.d.ts.map +1 -0
  311. package/dist/src/types/Constraint.js +3 -0
  312. package/dist/src/types/Constraint.js.map +1 -0
  313. package/dist/src/types/Design.d.ts +147 -0
  314. package/dist/src/types/Design.d.ts.map +1 -0
  315. package/dist/src/types/Design.js +10 -0
  316. package/dist/src/types/Design.js.map +1 -0
  317. package/dist/src/types/DiscrepancyRecord.d.ts +42 -0
  318. package/dist/src/types/DiscrepancyRecord.d.ts.map +1 -0
  319. package/dist/src/types/DiscrepancyRecord.js +3 -0
  320. package/dist/src/types/DiscrepancyRecord.js.map +1 -0
  321. package/dist/src/types/Form.d.ts +132 -1
  322. package/dist/src/types/Form.d.ts.map +1 -1
  323. package/dist/src/types/FormulasUsed.d.ts +95 -0
  324. package/dist/src/types/FormulasUsed.d.ts.map +1 -0
  325. package/dist/src/types/FormulasUsed.js +64 -0
  326. package/dist/src/types/FormulasUsed.js.map +1 -0
  327. package/dist/src/types/Instance.d.ts +105 -0
  328. package/dist/src/types/Instance.d.ts.map +1 -0
  329. package/dist/src/types/Instance.js +40 -0
  330. package/dist/src/types/Instance.js.map +1 -0
  331. package/dist/src/types/Invariant.d.ts +82 -0
  332. package/dist/src/types/Invariant.d.ts.map +1 -0
  333. package/dist/src/types/Invariant.js +50 -0
  334. package/dist/src/types/Invariant.js.map +1 -0
  335. package/dist/src/types/MapProfile.d.ts +36 -1
  336. package/dist/src/types/MapProfile.d.ts.map +1 -1
  337. package/dist/src/types/Monitor.d.ts +144 -0
  338. package/dist/src/types/Monitor.d.ts.map +1 -0
  339. package/dist/src/types/Monitor.js +74 -0
  340. package/dist/src/types/Monitor.js.map +1 -0
  341. package/dist/src/types/Note.d.ts +4 -1
  342. package/dist/src/types/Note.d.ts.map +1 -1
  343. package/dist/src/types/Package.d.ts +161 -0
  344. package/dist/src/types/Package.d.ts.map +1 -0
  345. package/dist/src/types/Package.js +3 -0
  346. package/dist/src/types/Package.js.map +1 -0
  347. package/dist/src/types/Passport.d.ts +125 -0
  348. package/dist/src/types/Passport.d.ts.map +1 -0
  349. package/dist/src/types/Passport.js +84 -0
  350. package/dist/src/types/Passport.js.map +1 -0
  351. package/dist/src/types/Quantity.d.ts +99 -0
  352. package/dist/src/types/Quantity.d.ts.map +1 -0
  353. package/dist/src/types/Quantity.js +24 -0
  354. package/dist/src/types/Quantity.js.map +1 -0
  355. package/dist/src/types/Reference.d.ts +2 -0
  356. package/dist/src/types/Reference.d.ts.map +1 -1
  357. package/dist/src/types/ReferenceMaterial.d.ts +53 -0
  358. package/dist/src/types/ReferenceMaterial.d.ts.map +1 -0
  359. package/dist/src/types/ReferenceMaterial.js +14 -0
  360. package/dist/src/types/ReferenceMaterial.js.map +1 -0
  361. package/dist/src/types/Requirement.d.ts +111 -0
  362. package/dist/src/types/Requirement.d.ts.map +1 -0
  363. package/dist/src/types/Requirement.js +10 -0
  364. package/dist/src/types/Requirement.js.map +1 -0
  365. package/dist/src/types/Role.d.ts +4 -0
  366. package/dist/src/types/Role.d.ts.map +1 -1
  367. package/dist/src/types/Series.d.ts +31 -0
  368. package/dist/src/types/Series.d.ts.map +1 -0
  369. package/dist/src/types/Series.js +14 -0
  370. package/dist/src/types/Series.js.map +1 -0
  371. package/dist/src/types/SourceDiscrepancy.d.ts +21 -0
  372. package/dist/src/types/SourceDiscrepancy.d.ts.map +1 -0
  373. package/dist/src/types/SourceDiscrepancy.js +13 -0
  374. package/dist/src/types/SourceDiscrepancy.js.map +1 -0
  375. package/dist/src/types/Standard.d.ts +68 -0
  376. package/dist/src/types/Standard.d.ts.map +1 -1
  377. package/dist/src/types/StateMachine.d.ts +43 -0
  378. package/dist/src/types/StateMachine.d.ts.map +1 -1
  379. package/dist/src/types/StateMachine.js +7 -0
  380. package/dist/src/types/StateMachine.js.map +1 -1
  381. package/dist/src/types/Subject.d.ts +432 -0
  382. package/dist/src/types/Subject.d.ts.map +1 -0
  383. package/dist/src/types/Subject.js +13 -0
  384. package/dist/src/types/Subject.js.map +1 -0
  385. package/dist/src/types/Symbol.d.ts +31 -1
  386. package/dist/src/types/Symbol.d.ts.map +1 -1
  387. package/dist/src/types/Table.d.ts +43 -0
  388. package/dist/src/types/Table.d.ts.map +1 -1
  389. package/dist/src/types/Term.d.ts +29 -0
  390. package/dist/src/types/Term.d.ts.map +1 -1
  391. package/dist/src/types/TestPointSet.d.ts +33 -0
  392. package/dist/src/types/TestPointSet.d.ts.map +1 -0
  393. package/dist/src/types/TestPointSet.js +11 -0
  394. package/dist/src/types/TestPointSet.js.map +1 -0
  395. package/dist/src/types/TestSequence.d.ts +105 -0
  396. package/dist/src/types/TestSequence.d.ts.map +1 -0
  397. package/dist/src/types/TestSequence.js +65 -0
  398. package/dist/src/types/TestSequence.js.map +1 -0
  399. package/dist/src/types/Text.d.ts +21 -0
  400. package/dist/src/types/Text.d.ts.map +1 -0
  401. package/dist/src/types/Text.js +38 -0
  402. package/dist/src/types/Text.js.map +1 -0
  403. package/dist/src/types/Time.d.ts +43 -0
  404. package/dist/src/types/Time.d.ts.map +1 -0
  405. package/dist/src/types/Time.js +14 -0
  406. package/dist/src/types/Time.js.map +1 -0
  407. package/dist/src/types/Twin.d.ts +155 -0
  408. package/dist/src/types/Twin.d.ts.map +1 -0
  409. package/dist/src/types/Twin.js +102 -0
  410. package/dist/src/types/Twin.js.map +1 -0
  411. package/dist/src/types/Verdict.d.ts +40 -0
  412. package/dist/src/types/Verdict.d.ts.map +1 -0
  413. package/dist/src/types/Verdict.js +14 -0
  414. package/dist/src/types/Verdict.js.map +1 -0
  415. package/dist/src/types/ViewProfile.d.ts +6 -0
  416. package/dist/src/types/ViewProfile.d.ts.map +1 -1
  417. package/dist/src/types/data.d.ts +27 -0
  418. package/dist/src/types/data.d.ts.map +1 -1
  419. package/dist/src/types/process.d.ts +231 -0
  420. package/dist/src/types/process.d.ts.map +1 -1
  421. package/dist-browser/index.mjs +6699 -661
  422. package/dist-cli/primmel.mjs +21462 -0
  423. package/package.json +61 -5
@@ -1,10 +1,619 @@
1
1
  "use strict";
2
+ // ─────────────────────────────────────────────────────────────────────
3
+ // `process` construct — v2 MMEL process + v3 process-model extensions
4
+ // (TODO.roadmap/02).
5
+ //
6
+ // The v2 shape is untouched: name/actor/modality, registry I/O
7
+ // (reference_data_registry / output), validate_provision /
8
+ // validate_measurement, canvas page, nested child processes.
9
+ //
10
+ // The v3 additions make the process a recursive subject with two
11
+ // definition forms (concept doc §4):
12
+ //
13
+ // process creep_test {
14
+ // name "Creep test method (R 60-2, 2.7.3)"
15
+ // # IS — signature, invariants, preconditions, executor
16
+ // signature {
17
+ // in { applied_load : mass duration : time }
18
+ // out { indication_series : mass_series }
19
+ // }
20
+ // invariants { "ocl{self.applied_load <= self.e_max}" }
21
+ // preconditions {
22
+ // precondition warmed-up {
23
+ // check "ocl{self.state = #ready and self.warmed_up}"
24
+ // description "An unwarmed run is invalid, never a fail."
25
+ // on_violation invalid
26
+ // }
27
+ // }
28
+ // executor lab
29
+ // # HAS — registers, state
30
+ // registers { conditions_log : text indication_series : mass_series }
31
+ // state OperationalStates
32
+ // # per-classification instances (R 60: n_runs A/B=5, C/D=3)
33
+ // instances {
34
+ // by accuracy_class
35
+ // values { A { n_runs: 5 } B { n_runs: 5 } C { n_runs: 3 } D { n_runs: 3 } }
36
+ // }
37
+ // # DOES — the executable body (absent = abstract form, always valid)
38
+ // does {
39
+ // start_event s
40
+ // action stabilize { executor actor role lab_technician capture stab_form write { conditions_log } }
41
+ // action apply_load { executor actor role lab_technician read { applied_load } }
42
+ // action hold { executor machine wait duration }
43
+ // action record { executor machine read { applied_load } write { indication_series } }
44
+ // end_event e
45
+ // flow {
46
+ // s -> stabilize -> apply_load -> hold -> record -> e
47
+ // }
48
+ // }
49
+ // }
50
+ //
51
+ // A step may declare `fires <transition>` (TODO.roadmap/07): when the step
52
+ // completes, the process's bound state machine (`state <machineRef>`) takes
53
+ // the named transition — e.g. `action warm_up { executor machine fires warm }`
54
+ // drives an operational machine off → ready.
55
+ //
56
+ // A step may declare `calls <process>` (TODO.roadmap/38): the step invokes
57
+ // a sub-process, binding its declared signature —
58
+ // `calls creep_method { with { in { applied_load : test_load } out { indication_series : raw } } }`
59
+ // maps every callee IN parameter to a caller register (read) and every
60
+ // callee OUT parameter back to a caller register (write). The linter
61
+ // (C76 subprocess-signature-bound) checks resolution, completeness and
62
+ // kind compatibility; the caller-side names count as step I/O for
63
+ // C12/C13/C75.
64
+ //
65
+ // Step kinds: action, approval, gateway, parallel_gateway, start_event,
66
+ // end_event, timer_event (period for recurrence), signal_event. Flow
67
+ // edges chain (`a -> b -> c`); an optional `{ when "ocl{...}" }` body
68
+ // conditions the LAST hop of a chain (first match in document order wins
69
+ // at a gateway; the unconditioned edge is the default).
70
+ //
71
+ // `child_composition gateway` (default `all`) declares how the process's
72
+ // CHILDREN combine for the coverage calculus (TODO.roadmap/04): `all` =
73
+ // every child required; `gateway` = the children are exclusive branches
74
+ // and at least one suffices for minimal cover.
75
+ //
76
+ // `activity_kind { <id>+ }` (TODO.roadmap/39) classifies the process
77
+ // against the ISO/IEC 17000 functional-approach activity taxonomy —
78
+ // multi-kind is deliberate (ISO/IEC 17065 §7.4 "evaluation" = selection +
79
+ // determination). Classification, not inheritance; the ids resolve against
80
+ // a declared activity_archetype register when one is in scope (C58).
81
+ //
82
+ // `segregation { constraint <id> { … } }` (TODO.roadmap/39b) declares the
83
+ // ISO/IEC 17065 role-segregation constraints as first-class structure —
84
+ // review/decision personnel disjoint from evaluation personnel (7.5.1 /
85
+ // 7.6.2), complaint-resolution independence (7.13.5, the reserved
86
+ // `case_personnel` pair member), and the consultancy bars (4.2.10
87
+ // body-specified period; 7.13.6 fixed P2Y):
88
+ //
89
+ // segregation {
90
+ // constraint review_not_evaluation {
91
+ // kind case_personnel_disjoint
92
+ // clause "7.5.1"
93
+ // pair { review evaluation }
94
+ // statement "The review shall be carried out by person(s) who have
95
+ // not been involved in the evaluation process."
96
+ // }
97
+ // constraint complaint_two_year_bar {
98
+ // kind consultancy_bar
99
+ // clause "7.13.6"
100
+ // period P2Y
101
+ // barred { consultancy employment }
102
+ // statement "…"
103
+ // }
104
+ // }
105
+ //
106
+ // Pair members are PROCESS ids (a process's personnel set for the case at
107
+ // hand), never roles — a scheme may bind one role to evaluation, review
108
+ // AND decision, so the norms quantify over process involvement. C59
109
+ // (segregation-members-resolve) checks declaration well-formedness.
110
+ // ─────────────────────────────────────────────────────────────────────
2
111
  Object.defineProperty(exports, "__esModule", { value: true });
3
112
  exports.dumpProcess = exports.resolveProcess = exports.parseProcess = void 0;
4
113
  exports.dumpProcessTree = dumpProcessTree;
5
114
  const resolve_1 = require("../resolve");
6
115
  const tokenize_1 = require("../tokenize");
7
116
  const parse_block_1 = require("../parse-block");
117
+ const field_parser_1 = require("./field-parser");
118
+ const quantity_1 = require("./quantity");
119
+ /** Numeric-looking values parse as numbers, everything else stays a string. */
120
+ function numOrString(s) {
121
+ if (s.trim() !== '' && !isNaN(Number(s))) {
122
+ return Number(s);
123
+ }
124
+ return s;
125
+ }
126
+ /** A token that heads a `key :` entry: unquoted, trailing colon. */
127
+ function isKeyHead(tok) {
128
+ return !tok.startsWith('"') && tok.endsWith(':') && tok.length > 1;
129
+ }
130
+ // ── v3 block sub-parsers ─────────────────────────────────────────────
131
+ /**
132
+ * Read `name [: type]` entries (signature params, registers, call
133
+ * bindings). When `allowInitial` is set (registers only — TODO.roadmap/50),
134
+ * an entry may carry an INITIAL value: `name : type = <value> [unit]`.
135
+ * The value shape follows the instance `key : value [unit]` contract
136
+ * (ser-des/config/instance.ts readValueMap): the value is one token
137
+ * (quoted strings stay one token), the optional unit a second, and a
138
+ * single brace-block token is the QuantityValue block form
139
+ * (`= { value 2.2 unit t }`); anything more is a parse error — multi-word
140
+ * values must be quoted so the unit position stays unambiguous. Entry
141
+ * boundaries: the next entry head is a bare `name` token followed by a
142
+ * `:` token, or an attached-colon `name:` token.
143
+ */
144
+ function parseParamList(block, allowInitial = false) {
145
+ const out = [];
146
+ const t = (0, tokenize_1.default)(block);
147
+ let i = 0;
148
+ while (i < t.length) {
149
+ const name = (0, field_parser_1.stripColon)(t[i++]);
150
+ if (!name) {
151
+ break;
152
+ }
153
+ let type = '';
154
+ if (i < t.length && t[i] === ':') {
155
+ i++;
156
+ }
157
+ if (i < t.length) {
158
+ type = (0, tokenize_1.stripWrapping)(t[i++]);
159
+ }
160
+ const param = { name, type };
161
+ if (i < t.length && t[i] === '=') {
162
+ if (!allowInitial) {
163
+ throw new Error(`Parsing error: parameter "${name}" declares an initial value — initial values are a registers facet (signature parameters and call bindings take their values at the call)`);
164
+ }
165
+ i++;
166
+ const parts = [];
167
+ while (i < t.length && t[i + 1] !== ':' && !isKeyHead(t[i])) {
168
+ parts.push(t[i++]);
169
+ }
170
+ if (parts.length === 0) {
171
+ throw new Error(`Parsing error: register "${name}" declares "=" with no value (shape: name : type = value [unit])`);
172
+ }
173
+ if (parts.length > 2) {
174
+ throw new Error(`Parsing error: register "${name}" initial value has ${parts.length} tokens ` +
175
+ `(shape: name : type = value [unit]) — quote multi-word values`);
176
+ }
177
+ // QuantityValue block form: `= { value … unit … }`.
178
+ if (parts.length === 1 && parts[0].startsWith('{')) {
179
+ param.initial = (0, quantity_1.readQuantityBlock)((0, tokenize_1.unwrapBlock)(parts[0]));
180
+ }
181
+ else {
182
+ const [rawValue, rawUnit] = parts;
183
+ const value = (0, quantity_1.coerceValueToken)(rawValue);
184
+ const initial = rawUnit === undefined
185
+ ? { value }
186
+ : { value, unit: (0, tokenize_1.stripWrapping)(rawUnit) };
187
+ param.initial = initial;
188
+ }
189
+ }
190
+ out.push(param);
191
+ }
192
+ return out;
193
+ }
194
+ /** Read OCL entries — quoted strings or bare `ocl{…}` (reassembled). */
195
+ function parseOclList(block) {
196
+ const out = [];
197
+ const t = (0, tokenize_1.default)(block);
198
+ let i = 0;
199
+ while (i < t.length) {
200
+ const read = (0, field_parser_1.readValueToken)(t, i);
201
+ const text = (0, tokenize_1.stripWrapping)(read.text);
202
+ i = read.next;
203
+ if (text) {
204
+ out.push(text);
205
+ }
206
+ }
207
+ return out;
208
+ }
209
+ /**
210
+ * Forward-compatible skip of an unknown keyword entry. `i` is the index
211
+ * AFTER the unknown keyword; consumes the optional value and, when a
212
+ * `{ … }` block follows, the balanced block — so `kw value`,
213
+ * `kw { block }`, and `kw value { block }` all stay aligned with the
214
+ * token walk (the tokenizer keeps a `{…}` group as ONE balanced token).
215
+ */
216
+ function skipUnknownEntry(t, i) {
217
+ if (i >= t.length) {
218
+ return i;
219
+ }
220
+ if (t[i].startsWith('{')) {
221
+ return i + 1; // `kw { block }`
222
+ }
223
+ i++; // the value
224
+ if (i < t.length && t[i].startsWith('{')) {
225
+ i++; // `kw value { block }`
226
+ }
227
+ return i;
228
+ }
229
+ /**
230
+ * Preconditions — same shape as conformance-test preconditions (an OCL
231
+ * Boolean check, a description, and the violation outcome). The outcome
232
+ * is always `invalid` (a violated entry guard voids the run, never fails
233
+ * it); the keyword is carried for parallelism with cc.yaml.
234
+ */
235
+ function parseProcessPreconditions(block) {
236
+ const out = [];
237
+ const t = (0, tokenize_1.default)(block);
238
+ let i = 0;
239
+ while (i < t.length) {
240
+ const cmd = t[i++];
241
+ if (cmd !== 'precondition') {
242
+ i = skipUnknownEntry(t, i);
243
+ continue;
244
+ }
245
+ const pid = (0, tokenize_1.stripWrapping)(t[i++]);
246
+ const p = {
247
+ id: pid,
248
+ check: '',
249
+ description: '',
250
+ onViolation: 'invalid',
251
+ };
252
+ if (i < t.length && t[i].startsWith('{')) {
253
+ const pt = (0, tokenize_1.default)((0, tokenize_1.unwrapBlock)(t[i++]));
254
+ let j = 0;
255
+ while (j < pt.length) {
256
+ const pc = pt[j++];
257
+ if (j >= pt.length) {
258
+ break;
259
+ }
260
+ if (pc === 'check') {
261
+ const read = (0, field_parser_1.readValueToken)(pt, j);
262
+ p.check = (0, tokenize_1.stripWrapping)(read.text);
263
+ j = read.next;
264
+ }
265
+ else if (pc === 'description') {
266
+ p.description = (0, tokenize_1.stripWrapping)(pt[j++]);
267
+ }
268
+ else if (pc === 'on_violation') {
269
+ p.onViolation = (0, tokenize_1.stripWrapping)(pt[j++]);
270
+ }
271
+ else {
272
+ (0, tokenize_1.unwrapBlock)(pt[j++]);
273
+ }
274
+ }
275
+ }
276
+ out.push(p);
277
+ }
278
+ return out;
279
+ }
280
+ /**
281
+ * Segregation constraints (TODO.roadmap/39b): `constraint <id> { … }`
282
+ * entries of a `segregation { … }` block — the ISO/IEC 17065
283
+ * non-involvement rules as first-class structure (kind, clause, pair /
284
+ * period / barred, statement).
285
+ */
286
+ function parseSegregation(block) {
287
+ const out = [];
288
+ const t = (0, tokenize_1.default)(block);
289
+ let i = 0;
290
+ while (i < t.length) {
291
+ const cmd = t[i++];
292
+ if (cmd !== 'constraint') {
293
+ i = skipUnknownEntry(t, i);
294
+ continue;
295
+ }
296
+ const sid = (0, tokenize_1.stripWrapping)(t[i++]);
297
+ const entry = {
298
+ id: sid,
299
+ kind: '',
300
+ clause: '',
301
+ pair: [],
302
+ period: '',
303
+ barred: [],
304
+ statement: '',
305
+ };
306
+ if (i < t.length && t[i].startsWith('{')) {
307
+ const et = (0, tokenize_1.default)((0, tokenize_1.unwrapBlock)(t[i++]));
308
+ let j = 0;
309
+ while (j < et.length) {
310
+ const ec = et[j++];
311
+ if (j >= et.length) {
312
+ break;
313
+ }
314
+ if (ec === 'kind') {
315
+ entry.kind = (0, tokenize_1.stripWrapping)(et[j++]);
316
+ }
317
+ else if (ec === 'clause') {
318
+ entry.clause = (0, tokenize_1.stripWrapping)(et[j++]);
319
+ }
320
+ else if (ec === 'pair') {
321
+ entry.pair.push(...(0, tokenize_1.default)((0, tokenize_1.stripWrapping)(et[j++]))
322
+ .map(field_parser_1.stripColon)
323
+ .map(tokenize_1.stripWrapping)
324
+ .filter(s => s.length > 0));
325
+ }
326
+ else if (ec === 'period') {
327
+ entry.period = (0, tokenize_1.stripWrapping)(et[j++]);
328
+ }
329
+ else if (ec === 'barred') {
330
+ entry.barred.push(...(0, tokenize_1.default)((0, tokenize_1.stripWrapping)(et[j++]))
331
+ .map(field_parser_1.stripColon)
332
+ .map(tokenize_1.stripWrapping)
333
+ .filter(s => s.length > 0));
334
+ }
335
+ else if (ec === 'statement') {
336
+ entry.statement = (0, tokenize_1.stripWrapping)(et[j++]);
337
+ }
338
+ else {
339
+ (0, tokenize_1.unwrapBlock)(et[j++]);
340
+ }
341
+ }
342
+ }
343
+ out.push(entry);
344
+ }
345
+ return out;
346
+ }
347
+ /** Per-classification instances: `by <dimension> values { V { k: n } … }`. */ function parseProcessInstances(block) {
348
+ const out = { by: '', values: {} };
349
+ const t = (0, tokenize_1.default)(block);
350
+ let i = 0;
351
+ while (i < t.length) {
352
+ const cmd = t[i++];
353
+ if (i >= t.length) {
354
+ break;
355
+ }
356
+ if (cmd === 'by') {
357
+ out.by = (0, tokenize_1.stripWrapping)(t[i++]);
358
+ }
359
+ else if (cmd === 'values') {
360
+ const vt = (0, tokenize_1.default)((0, tokenize_1.unwrapBlock)(t[i++]));
361
+ let j = 0;
362
+ while (j < vt.length) {
363
+ const key = (0, field_parser_1.stripColon)(vt[j++]);
364
+ if (j >= vt.length) {
365
+ break;
366
+ }
367
+ if (vt[j] === ':') {
368
+ j++;
369
+ }
370
+ if (j < vt.length && vt[j].startsWith('{')) {
371
+ const pt = (0, tokenize_1.default)((0, tokenize_1.unwrapBlock)(vt[j++]));
372
+ const params = {};
373
+ let k = 0;
374
+ while (k < pt.length) {
375
+ const pkey = (0, field_parser_1.stripColon)(pt[k++]);
376
+ if (k >= pt.length) {
377
+ break;
378
+ }
379
+ if (pt[k] === ':') {
380
+ k++;
381
+ }
382
+ if (k < pt.length) {
383
+ params[pkey] = numOrString((0, tokenize_1.stripWrapping)(pt[k++]));
384
+ }
385
+ }
386
+ out.values[key] = params;
387
+ }
388
+ }
389
+ }
390
+ else {
391
+ (0, tokenize_1.unwrapBlock)(t[i++]);
392
+ }
393
+ }
394
+ return out;
395
+ }
396
+ const STEP_KINDS = new Set([
397
+ 'action',
398
+ 'approval',
399
+ 'gateway',
400
+ 'parallel_gateway',
401
+ 'start_event',
402
+ 'end_event',
403
+ 'timer_event',
404
+ 'signal_event',
405
+ ]);
406
+ /** Read one step body (the `{ … }` after `<kind> <id>`). */
407
+ function parseStepBody(id, kind, block) {
408
+ const step = {
409
+ id,
410
+ kind,
411
+ executor: '',
412
+ role: '',
413
+ capture: '',
414
+ reads: [],
415
+ writes: [],
416
+ wait: '',
417
+ period: '',
418
+ signal: '',
419
+ fires: '',
420
+ calls: '',
421
+ callIn: [],
422
+ callOut: [],
423
+ description: '',
424
+ };
425
+ const t = (0, tokenize_1.default)(block);
426
+ let i = 0;
427
+ while (i < t.length) {
428
+ const cmd = t[i++];
429
+ if (i >= t.length) {
430
+ break;
431
+ }
432
+ if (cmd === 'executor') {
433
+ const ex = (0, tokenize_1.stripWrapping)(t[i++]);
434
+ if (ex !== 'machine' && ex !== 'actor') {
435
+ throw new Error(`Parsing error: process step. ID ${id}: Unknown executor ${ex} (valid: machine, actor)`);
436
+ }
437
+ step.executor = ex;
438
+ }
439
+ else if (cmd === 'role') {
440
+ step.role = (0, tokenize_1.stripWrapping)(t[i++]);
441
+ }
442
+ else if (cmd === 'capture') {
443
+ step.capture = (0, tokenize_1.stripWrapping)(t[i++]);
444
+ }
445
+ else if (cmd === 'read') {
446
+ step.reads.push(...(0, tokenize_1.default)((0, tokenize_1.stripWrapping)(t[i++]))
447
+ .map(field_parser_1.stripColon)
448
+ .map(tokenize_1.stripWrapping)
449
+ .filter(s => s.length > 0));
450
+ }
451
+ else if (cmd === 'write') {
452
+ step.writes.push(...(0, tokenize_1.default)((0, tokenize_1.stripWrapping)(t[i++]))
453
+ .map(field_parser_1.stripColon)
454
+ .map(tokenize_1.stripWrapping)
455
+ .filter(s => s.length > 0));
456
+ }
457
+ else if (cmd === 'wait') {
458
+ step.wait = (0, tokenize_1.stripWrapping)(t[i++]);
459
+ }
460
+ else if (cmd === 'period') {
461
+ step.period = (0, tokenize_1.stripWrapping)(t[i++]);
462
+ }
463
+ else if (cmd === 'signal') {
464
+ step.signal = (0, tokenize_1.stripWrapping)(t[i++]);
465
+ }
466
+ else if (cmd === 'fires') {
467
+ step.fires = (0, tokenize_1.stripWrapping)(t[i++]);
468
+ }
469
+ else if (cmd === 'calls') {
470
+ // calls <process> — optionally followed by a `with { in {…} out {…} }`
471
+ // signature-binding block (TODO.roadmap/38). The binding lists reuse
472
+ // the `name : name` param-list shape: callee param : caller name.
473
+ step.calls = (0, tokenize_1.stripWrapping)(t[i++]);
474
+ if (i < t.length && t[i].startsWith('{')) {
475
+ const bind = (b) => parseParamList((0, tokenize_1.unwrapBlock)(b)).map(p => ({
476
+ param: p.name,
477
+ bind: p.type,
478
+ }));
479
+ const ct = (0, tokenize_1.default)((0, tokenize_1.unwrapBlock)(t[i++]));
480
+ let j = 0;
481
+ while (j < ct.length) {
482
+ const cc = ct[j++];
483
+ if (j >= ct.length) {
484
+ break;
485
+ }
486
+ if (cc === 'with') {
487
+ const wt = (0, tokenize_1.default)((0, tokenize_1.unwrapBlock)(ct[j++]));
488
+ let k = 0;
489
+ while (k < wt.length) {
490
+ const wc = wt[k++];
491
+ if (k >= wt.length) {
492
+ break;
493
+ }
494
+ if (wc === 'in') {
495
+ step.callIn.push(...bind(wt[k++]));
496
+ }
497
+ else if (wc === 'out') {
498
+ step.callOut.push(...bind(wt[k++]));
499
+ }
500
+ else {
501
+ (0, tokenize_1.unwrapBlock)(wt[k++]);
502
+ }
503
+ }
504
+ }
505
+ else {
506
+ j = skipUnknownEntry(ct, j);
507
+ }
508
+ }
509
+ }
510
+ }
511
+ else if (cmd === 'description') {
512
+ step.description = (0, tokenize_1.stripWrapping)(t[i++]);
513
+ }
514
+ else {
515
+ i = skipUnknownEntry(t, i);
516
+ }
517
+ }
518
+ return step;
519
+ }
520
+ /**
521
+ * Read the flow block: chained edges `a -> b -> c`, each hop optionally
522
+ * followed by `{ when "ocl{…}" }` (the condition binds to the LAST hop
523
+ * of the chain). `condition` is accepted as an alias of `when` for
524
+ * symmetry with canvas edges.
525
+ *
526
+ * A FUSED arrow (`s->a->e`, `s→a→e` — no whitespace around the arrow)
527
+ * tokenizes as ONE token and would otherwise yield zero edges, surfacing
528
+ * later as misleading C11 errors. Reject it at parse time with a clear
529
+ * message instead of silently dropping the chain or attempting to split
530
+ * it. Block (`{…}`) and quoted tokens are exempt — an OCL `->` inside a
531
+ * `when` condition is not a flow arrow.
532
+ */
533
+ function parseFlowEdges(block) {
534
+ const edges = [];
535
+ const t = (0, tokenize_1.default)(block);
536
+ for (const tok of t) {
537
+ if (!tok.startsWith('{') &&
538
+ !tok.startsWith('"') &&
539
+ tok !== '->' &&
540
+ tok !== '→' &&
541
+ (tok.includes('->') || tok.includes('→'))) {
542
+ throw new Error(`Parsing error: process flow edge "${tok}" contains a fused arrow — separate steps and "->" with whitespace`);
543
+ }
544
+ }
545
+ let i = 0;
546
+ while (i < t.length) {
547
+ let current = (0, tokenize_1.stripWrapping)(t[i++]);
548
+ if (!current) {
549
+ break;
550
+ }
551
+ while (i < t.length && (t[i] === '->' || t[i] === '→')) {
552
+ i++;
553
+ if (i >= t.length) {
554
+ break;
555
+ }
556
+ const to = (0, tokenize_1.stripWrapping)(t[i++]);
557
+ let condition = '';
558
+ if (i < t.length && t[i].startsWith('{')) {
559
+ const bt = (0, tokenize_1.default)((0, tokenize_1.unwrapBlock)(t[i++]));
560
+ let j = 0;
561
+ while (j < bt.length) {
562
+ const cmd = bt[j++];
563
+ if (j >= bt.length) {
564
+ break;
565
+ }
566
+ if (cmd === 'when' || cmd === 'condition') {
567
+ const read = (0, field_parser_1.readValueToken)(bt, j);
568
+ condition = (0, tokenize_1.stripWrapping)(read.text);
569
+ j = read.next;
570
+ }
571
+ else {
572
+ (0, tokenize_1.unwrapBlock)(bt[j++]);
573
+ }
574
+ }
575
+ }
576
+ edges.push({ from: current, to, condition });
577
+ current = to;
578
+ }
579
+ }
580
+ return edges;
581
+ }
582
+ /** Read the `does { … }` executable body: step declarations + one flow block. */
583
+ function parseDoes(block) {
584
+ const flow = { steps: [], edges: [] };
585
+ const t = (0, tokenize_1.default)(block);
586
+ let i = 0;
587
+ while (i < t.length) {
588
+ const cmd = t[i++];
589
+ if (i >= t.length) {
590
+ break;
591
+ }
592
+ if (cmd === 'flow') {
593
+ flow.edges.push(...parseFlowEdges((0, tokenize_1.unwrapBlock)(t[i++])));
594
+ }
595
+ else if (STEP_KINDS.has(cmd)) {
596
+ const stepId = (0, tokenize_1.stripWrapping)(t[i++]);
597
+ let body = '';
598
+ if (i < t.length && t[i].startsWith('{')) {
599
+ body = (0, tokenize_1.unwrapBlock)(t[i++]);
600
+ }
601
+ flow.steps.push(parseStepBody(stepId, cmd, body));
602
+ }
603
+ else {
604
+ // Forward-compatible: skip `kw value` and `kw id { body }` shapes.
605
+ const v = t[i++];
606
+ if (v !== undefined &&
607
+ !v.startsWith('{') &&
608
+ i < t.length &&
609
+ t[i].startsWith('{')) {
610
+ i++;
611
+ }
612
+ }
613
+ }
614
+ return flow;
615
+ }
616
+ // ── process parser ───────────────────────────────────────────────────
8
617
  const parseProcess = function (id, data) {
9
618
  const result = {
10
619
  id: id,
@@ -18,6 +627,20 @@ const parseProcess = function (id, data) {
18
627
  measure: [],
19
628
  parent: '',
20
629
  children: [],
630
+ // v3 process model — defaults keep a plain v2 process exactly as before
631
+ signature: null,
632
+ invariants: [],
633
+ activityKinds: [],
634
+ segregation: [],
635
+ preconditions: [],
636
+ executor: '',
637
+ registers: [],
638
+ state: '',
639
+ instances: null,
640
+ childComposition: 'all',
641
+ does: null,
642
+ source: null,
643
+ provisionRefs: [],
21
644
  _relations: {
22
645
  actor: '',
23
646
  output: [],
@@ -84,6 +707,84 @@ const parseProcess = function (id, data) {
84
707
  else if (keyword === 'reference_data_registry') {
85
708
  result._relations.input = (0, tokenize_1.tokenizePackage)(value());
86
709
  }
710
+ else if (keyword === 'signature') {
711
+ // signature { in { … } out { … } }
712
+ const sig = { inputs: [], outputs: [] };
713
+ const st = (0, tokenize_1.default)((0, tokenize_1.unwrapBlock)(value()));
714
+ let j = 0;
715
+ while (j < st.length) {
716
+ const sc = st[j++];
717
+ if (j >= st.length) {
718
+ break;
719
+ }
720
+ if (sc === 'in') {
721
+ sig.inputs.push(...parseParamList((0, tokenize_1.unwrapBlock)(st[j++])));
722
+ }
723
+ else if (sc === 'out') {
724
+ sig.outputs.push(...parseParamList((0, tokenize_1.unwrapBlock)(st[j++])));
725
+ }
726
+ else {
727
+ (0, tokenize_1.unwrapBlock)(st[j++]);
728
+ }
729
+ }
730
+ result.signature = sig;
731
+ }
732
+ else if (keyword === 'invariants') {
733
+ result.invariants = parseOclList((0, tokenize_1.unwrapBlock)(value()));
734
+ }
735
+ else if (keyword === 'activity_kind') {
736
+ // activity_kind { testing verification … } — ISO/IEC 17000
737
+ // functional-approach classification (TODO.roadmap/39; C58).
738
+ result.activityKinds = (0, tokenize_1.default)((0, tokenize_1.stripWrapping)(value()))
739
+ .map(field_parser_1.stripColon)
740
+ .map(tokenize_1.stripWrapping)
741
+ .filter(s => s.length > 0);
742
+ }
743
+ else if (keyword === 'segregation') {
744
+ // segregation { constraint <id> { … } … } — ISO/IEC 17065 role
745
+ // segregation (TODO.roadmap/39b; C59).
746
+ result.segregation = parseSegregation((0, tokenize_1.unwrapBlock)(value()));
747
+ }
748
+ else if (keyword === 'preconditions') {
749
+ result.preconditions = parseProcessPreconditions((0, tokenize_1.unwrapBlock)(value()));
750
+ }
751
+ else if (keyword === 'executor') {
752
+ result.executor = (0, tokenize_1.stripWrapping)(value());
753
+ }
754
+ else if (keyword === 'registers') {
755
+ // registers { name : type [= value [unit]] … } — HAS state slots;
756
+ // the optional initial value is the register's starting content
757
+ // (TODO.roadmap/50).
758
+ result.registers = parseParamList((0, tokenize_1.unwrapBlock)(value()), true);
759
+ }
760
+ else if (keyword === 'state') {
761
+ result.state = (0, tokenize_1.stripWrapping)(value());
762
+ }
763
+ else if (keyword === 'instances') {
764
+ result.instances = parseProcessInstances((0, tokenize_1.unwrapBlock)(value()));
765
+ }
766
+ else if (keyword === 'child_composition') {
767
+ const comp = (0, tokenize_1.stripWrapping)(value());
768
+ if (comp !== 'all' && comp !== 'gateway') {
769
+ throw new Error(`Parsing error: process. ID ${id}: Unknown child_composition "${comp}" (valid: all, gateway)`);
770
+ }
771
+ result.childComposition = comp;
772
+ }
773
+ else if (keyword === 'does') {
774
+ // The presence of the body marks the process EXECUTABLE — even an
775
+ // empty `does { }` (the linter then reports the missing start event).
776
+ result.does = parseDoes((0, tokenize_1.unwrapBlock)(value()));
777
+ }
778
+ else if (keyword === 'source') {
779
+ // Clause-URN provenance — the same facet requirement carries.
780
+ // Repeated source blocks collect into sourceRefs (TODO.roadmap/24);
781
+ // source stays the first entry for back-compatibility.
782
+ const src = (0, field_parser_1.readSource)((0, tokenize_1.unwrapBlock)(value()));
783
+ if (!result.source) {
784
+ result.source = src;
785
+ }
786
+ (result.sourceRefs ??= []).push(src);
787
+ }
87
788
  else {
88
789
  return false;
89
790
  }
@@ -105,6 +806,10 @@ const resolveProcess = function (ctx, unresolved) {
105
806
  output: [],
106
807
  input: [],
107
808
  provision: [],
809
+ // The raw validate_provision ids survive resolution even when they
810
+ // name no declared `provision` construct (e.g. `/req/cs/*`
811
+ // requirements) — the linter and the dumper read this list.
812
+ provisionRefs: [..._relations.provision],
108
813
  actor: null,
109
814
  page: null,
110
815
  };
@@ -142,14 +847,14 @@ function indentBlock(block) {
142
847
  .map(line => (line ? ' ' + line : line))
143
848
  .join('\n');
144
849
  }
145
- function dumpProcessTree(process, lookup) {
146
- let out = (0, exports.dumpProcess)(process);
850
+ function dumpProcessTree(process, lookup, nested = false) {
851
+ let out = (0, exports.dumpProcess)(process, { nested });
147
852
  if (process.children.length > 0) {
148
853
  const childBlocks = [];
149
854
  for (const childId of process.children) {
150
855
  const child = lookup.get(childId);
151
856
  if (child) {
152
- childBlocks.push(indentBlock(dumpProcessTree(child, lookup)));
857
+ childBlocks.push(indentBlock(dumpProcessTree(child, lookup, true)));
153
858
  }
154
859
  }
155
860
  if (childBlocks.length > 0) {
@@ -158,7 +863,102 @@ function dumpProcessTree(process, lookup) {
158
863
  }
159
864
  return out;
160
865
  }
161
- const dumpProcess = function (process) {
866
+ // ── v3 block dumpers ─────────────────────────────────────────────────
867
+ function dumpParamList(params) {
868
+ return params
869
+ .map(p => p.name +
870
+ (p.type ? ' : ' + p.type : '') +
871
+ (p.initial !== undefined ? ' = ' + (0, quantity_1.dumpQuantityValue)(p.initial) : ''))
872
+ .join(' ');
873
+ }
874
+ function dumpSignature(sig) {
875
+ let out = ' signature {\n';
876
+ if (sig.inputs.length > 0) {
877
+ out += ' in { ' + dumpParamList(sig.inputs) + ' }\n';
878
+ }
879
+ if (sig.outputs.length > 0) {
880
+ out += ' out { ' + dumpParamList(sig.outputs) + ' }\n';
881
+ }
882
+ out += ' }\n';
883
+ return out;
884
+ }
885
+ function dumpStep(step) {
886
+ const inner = [];
887
+ if (step.executor) {
888
+ inner.push('executor ' + step.executor);
889
+ }
890
+ if (step.role) {
891
+ inner.push('role ' + (0, field_parser_1.dumpBareSafe)(step.role));
892
+ }
893
+ if (step.capture) {
894
+ inner.push('capture ' + (0, field_parser_1.dumpBareSafe)(step.capture));
895
+ }
896
+ if (step.reads.length > 0) {
897
+ inner.push('read { ' + step.reads.map(field_parser_1.dumpBareSafe).join(' ') + ' }');
898
+ }
899
+ if (step.writes.length > 0) {
900
+ inner.push('write { ' + step.writes.map(field_parser_1.dumpBareSafe).join(' ') + ' }');
901
+ }
902
+ if (step.wait) {
903
+ inner.push('wait ' + (0, field_parser_1.dumpBareSafe)(step.wait));
904
+ }
905
+ if (step.period) {
906
+ inner.push('period ' + (0, field_parser_1.dumpBareSafe)(step.period));
907
+ }
908
+ if (step.signal) {
909
+ inner.push('signal ' + (0, field_parser_1.dumpBareSafe)(step.signal));
910
+ }
911
+ if (step.fires) {
912
+ inner.push('fires ' + (0, field_parser_1.dumpBareSafe)(step.fires));
913
+ }
914
+ if (step.calls) {
915
+ let c = 'calls ' + (0, field_parser_1.dumpBareSafe)(step.calls);
916
+ if (step.callIn.length > 0 || step.callOut.length > 0) {
917
+ const bind = (bs) => bs
918
+ .map(b => (0, field_parser_1.dumpBareSafe)(b.param) + ' : ' + (0, field_parser_1.dumpBareSafe)(b.bind))
919
+ .join(' ');
920
+ c += ' { with {';
921
+ if (step.callIn.length > 0) {
922
+ c += ' in { ' + bind(step.callIn) + ' }';
923
+ }
924
+ if (step.callOut.length > 0) {
925
+ c += ' out { ' + bind(step.callOut) + ' }';
926
+ }
927
+ c += ' } }';
928
+ }
929
+ inner.push(c);
930
+ }
931
+ if (step.description) {
932
+ inner.push('description "' + (0, tokenize_1.escapeString)(step.description) + '"');
933
+ }
934
+ if (inner.length === 0) {
935
+ return ' ' + step.kind + ' ' + step.id + '\n';
936
+ }
937
+ return ' ' + step.kind + ' ' + step.id + ' { ' + inner.join(' ') + ' }\n';
938
+ }
939
+ function dumpDoes(flow) {
940
+ let out = ' does {\n';
941
+ for (const s of flow.steps) {
942
+ out += dumpStep(s);
943
+ }
944
+ if (flow.edges.length > 0) {
945
+ out += ' flow {\n';
946
+ for (const e of flow.edges) {
947
+ out += ' ' + e.from + ' -> ' + e.to;
948
+ if (e.condition) {
949
+ out += ' { when "' + (0, tokenize_1.escapeString)(e.condition) + '" }';
950
+ }
951
+ out += '\n';
952
+ }
953
+ out += ' }\n';
954
+ }
955
+ out += ' }\n';
956
+ return out;
957
+ }
958
+ // Wider than Dumper<Process> by one OPTIONAL context arg (still
959
+ // assignable to Dumper<Process>): `nested` marks emission inside the
960
+ // parent's block, where the nesting itself expresses the parent link.
961
+ const dumpProcess = function (process, ctx) {
162
962
  let out = 'process ' + process.id + ' {\n';
163
963
  out += ' name "' + (0, tokenize_1.escapeString)(process.name) + '"\n';
164
964
  if (process.actor !== null) {
@@ -174,10 +974,10 @@ const dumpProcess = function (process) {
174
974
  }
175
975
  out += ' }\n';
176
976
  }
177
- if (process.provision.length > 0) {
977
+ if (process.provisionRefs.length > 0) {
178
978
  out += ' validate_provision {\n';
179
- for (const r of process.provision) {
180
- out += ' ' + r.id + '\n';
979
+ for (const id of process.provisionRefs) {
980
+ out += ' ' + id + '\n';
181
981
  }
182
982
  out += ' }\n';
183
983
  }
@@ -198,7 +998,114 @@ const dumpProcess = function (process) {
198
998
  if (process.page !== null) {
199
999
  out += ' canvas ' + process.page.id + '\n';
200
1000
  }
201
- if (process.parent && process.children.length === 0) {
1001
+ // ── v3 blocks (emitted only when declared) ──
1002
+ if (process.signature !== null && process.signature !== undefined) {
1003
+ out += dumpSignature(process.signature);
1004
+ }
1005
+ if (process.invariants && process.invariants.length > 0) {
1006
+ out += ' invariants {\n';
1007
+ for (const inv of process.invariants) {
1008
+ out += ' "' + (0, tokenize_1.escapeString)(inv) + '"\n';
1009
+ }
1010
+ out += ' }\n';
1011
+ }
1012
+ if (process.activityKinds && process.activityKinds.length > 0) {
1013
+ out +=
1014
+ ' activity_kind { ' +
1015
+ process.activityKinds.map(field_parser_1.dumpBareSafe).join(' ') +
1016
+ ' }\n';
1017
+ }
1018
+ if (process.segregation && process.segregation.length > 0) {
1019
+ out += ' segregation {\n';
1020
+ for (const s of process.segregation) {
1021
+ out += ' constraint ' + s.id + ' {\n';
1022
+ if (s.kind) {
1023
+ out += ' kind ' + (0, field_parser_1.dumpBareSafe)(s.kind) + '\n';
1024
+ }
1025
+ if (s.clause) {
1026
+ out += ' clause "' + (0, tokenize_1.escapeString)(s.clause) + '"\n';
1027
+ }
1028
+ if (s.pair.length > 0) {
1029
+ out += ' pair { ' + s.pair.map(field_parser_1.dumpBareSafe).join(' ') + ' }\n';
1030
+ }
1031
+ if (s.period) {
1032
+ out += ' period ' + (0, field_parser_1.dumpBareSafe)(s.period) + '\n';
1033
+ }
1034
+ if (s.barred.length > 0) {
1035
+ out +=
1036
+ ' barred { ' + s.barred.map(field_parser_1.dumpBareSafe).join(' ') + ' }\n';
1037
+ }
1038
+ if (s.statement) {
1039
+ out += ' statement "' + (0, tokenize_1.escapeString)(s.statement) + '"\n';
1040
+ }
1041
+ out += ' }\n';
1042
+ }
1043
+ out += ' }\n';
1044
+ }
1045
+ if (process.preconditions && process.preconditions.length > 0) {
1046
+ out += ' preconditions {\n';
1047
+ for (const p of process.preconditions) {
1048
+ let line = ' precondition ' + p.id + ' { ';
1049
+ if (p.check) {
1050
+ line += 'check "' + (0, tokenize_1.escapeString)(p.check) + '" ';
1051
+ }
1052
+ if (p.description) {
1053
+ line += 'description "' + (0, tokenize_1.escapeString)(p.description) + '" ';
1054
+ }
1055
+ line += 'on_violation ' + p.onViolation + ' ';
1056
+ out += line + '}\n';
1057
+ }
1058
+ out += ' }\n';
1059
+ }
1060
+ if (process.executor) {
1061
+ out += ' executor ' + (0, field_parser_1.dumpBareSafe)(process.executor) + '\n';
1062
+ }
1063
+ if (process.registers && process.registers.length > 0) {
1064
+ out += ' registers { ' + dumpParamList(process.registers) + ' }\n';
1065
+ }
1066
+ if (process.state) {
1067
+ out += ' state ' + (0, field_parser_1.dumpBareSafe)(process.state) + '\n';
1068
+ }
1069
+ if (process.instances) {
1070
+ let line = ' instances { by ' + process.instances.by + ' values { ';
1071
+ for (const [key, params] of Object.entries(process.instances.values)) {
1072
+ line += key + ' { ';
1073
+ for (const [pk, pv] of Object.entries(params)) {
1074
+ line += pk + ': ' + (0, field_parser_1.dumpBareSafe)(String(pv)) + ' ';
1075
+ }
1076
+ line += '} ';
1077
+ }
1078
+ out += line + '} }\n';
1079
+ }
1080
+ if (process.childComposition === 'gateway') {
1081
+ out += ' child_composition gateway\n';
1082
+ }
1083
+ if (process.does) {
1084
+ out += dumpDoes(process.does);
1085
+ }
1086
+ // Clause-URN provenance (the requirement facet shape) — repeated blocks
1087
+ // from sourceRefs, single-block fallback.
1088
+ for (const src of process.sourceRefs ??
1089
+ (process.source && (process.source.doc || process.source.clause)
1090
+ ? [process.source]
1091
+ : [])) {
1092
+ out +=
1093
+ ' source { doc "' +
1094
+ (0, tokenize_1.escapeString)(src.doc) +
1095
+ '" clause "' +
1096
+ (0, tokenize_1.escapeString)(src.clause) +
1097
+ '"' +
1098
+ (src.fragment ? ' fragment "' + (0, tokenize_1.escapeString)(src.fragment) + '"' : '') +
1099
+ ' }\n';
1100
+ }
1101
+ // A `parent` link is emitted explicitly whenever nesting does not
1102
+ // already express it: leaf processes keep the historical flat form,
1103
+ // and a non-leaf process dumped at TOP LEVEL (a flat `parent X`
1104
+ // declaration that itself has children) must emit it too — dropping it
1105
+ // would silently re-root the subtree across a dump/load cycle, which
1106
+ // the coverage calculus aggregates over. A non-leaf process dumped
1107
+ // NESTED inside its parent needs no line (the nesting expresses it).
1108
+ if (process.parent && (process.children.length === 0 || !ctx?.nested)) {
202
1109
  out += ' parent ' + process.parent + '\n';
203
1110
  }
204
1111
  out += '}\n';