lutaml-uml 0.4.3 → 0.5.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 (559) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/release.yml +32 -0
  3. data/.gitignore +5 -9
  4. data/.rspec +1 -1
  5. data/CLAUDE.md +54 -0
  6. data/Gemfile +14 -2
  7. data/README.adoc +22 -33
  8. data/Rakefile +0 -1
  9. data/TODO.next/01-remove-repository-enhanced.md +26 -0
  10. data/TODO.next/02-drop-fontname-autoload.md +32 -0
  11. data/TODO.next/03-add-missing-behavioral-specs.md +56 -0
  12. data/TODO.next/04-finish-double-elimination.md +34 -0
  13. data/TODO.next/05-remove-dead-umlrepository-autoloads.md +31 -0
  14. data/TODO.next/06-cleanup-phantom-requires.md +46 -0
  15. data/TODO.next/07-unused-liquid-templates.md +42 -0
  16. data/TODO.next/08-broken-executables.md +60 -0
  17. data/config/package_metadata.example.yml +58 -0
  18. data/config/static_site.yml +166 -0
  19. data/examples/UML_EA.DTD +6856 -0
  20. data/examples/lur/20251010_current_plateau_v5.1.lur +0 -0
  21. data/examples/lur/basic.lur +0 -0
  22. data/examples/lur/test-output.lur +0 -0
  23. data/examples/lur/test.lur +0 -0
  24. data/examples/lur_basic_usage.rb +220 -0
  25. data/examples/lur_cli_workflow.rb +262 -0
  26. data/examples/lur_statistics.rb +325 -0
  27. data/examples/qea/20251010_current_plateau_v5.1.qea +0 -0
  28. data/examples/qea/ArcGISWorkspace_template.qea +0 -0
  29. data/examples/qea/README_qea_parser.adoc +230 -0
  30. data/examples/qea/UmlModel_template.qea +0 -0
  31. data/examples/qea/basic.qea +0 -0
  32. data/examples/qea/simple.qea +0 -0
  33. data/examples/qea/simple_example.qea +0 -0
  34. data/examples/qea/test.qea +0 -0
  35. data/examples/xmi/20251010_current_plateau_v5.1.xmi +118121 -0
  36. data/examples/xmi/ArcGISWorkspace_template.xmi +1467 -0
  37. data/examples/xmi/Images/EAID_0016F797_D055_4717_AF1A_606413D0A166.svg +158 -0
  38. data/examples/xmi/Images/EAID_00C5C772_5A03_434f_BF30_AC37542A1AAC.svg +659 -0
  39. data/examples/xmi/Images/EAID_0114FD24_9E58_4664_98CD_71305B59AD11.svg +411 -0
  40. data/examples/xmi/Images/EAID_01661E1B_31B6_4167_BCCF_A00678FB4EA2.svg +102 -0
  41. data/examples/xmi/Images/EAID_039FE004_5408_4fc0_89AA_EB319E4F61C7.svg +169 -0
  42. data/examples/xmi/Images/EAID_04EE9625_17A0_4721_BC71_21756DB21D06.svg +403 -0
  43. data/examples/xmi/Images/EAID_05FF9417_1619_4170_B0C9_55AA6B988EF1.svg +175 -0
  44. data/examples/xmi/Images/EAID_09853FB2_AF8A_432f_94C5_6C47461BD937.svg +360 -0
  45. data/examples/xmi/Images/EAID_09927B7F_A657_4819_99E5_AC9DC99227D9.svg +195 -0
  46. data/examples/xmi/Images/EAID_09AF6B8A_557C_43bc_BBB0_47C1E9401EF3.svg +218 -0
  47. data/examples/xmi/Images/EAID_0BE81AC5_031B_4973_A9A0_223CCD92BAA1.svg +471 -0
  48. data/examples/xmi/Images/EAID_0EDEA6EF_4DC8_4979_BB80_28B1B9EBD1D4.svg +56 -0
  49. data/examples/xmi/Images/EAID_0F413534_6AD2_48bc_B4AF_8699D530D91D.svg +262 -0
  50. data/examples/xmi/Images/EAID_1321F39B_AD67_47b5_B5C3_3A42BBFCBDF9.svg +286 -0
  51. data/examples/xmi/Images/EAID_13E09C71_99E7_40b4_B72D_48AF6379BC2E.svg +164 -0
  52. data/examples/xmi/Images/EAID_144955D8_CB4E_4b59_BB0C_E549F7F84943.svg +66 -0
  53. data/examples/xmi/Images/EAID_14E9F5FD_F6CD_4f48_B1CD_F5A40C6D8E83.svg +95 -0
  54. data/examples/xmi/Images/EAID_157826AA_96A7_4278_89A6_94BD0F31409A.svg +63 -0
  55. data/examples/xmi/Images/EAID_159E9DA0_7A54_4817_B72A_401C750F675D.svg +306 -0
  56. data/examples/xmi/Images/EAID_17BC8309_8051_492b_BE87_61CCFE83DB16.svg +45 -0
  57. data/examples/xmi/Images/EAID_1A10EB6D_E2E5_42a6_A31E_B293D93FD07E.svg +193 -0
  58. data/examples/xmi/Images/EAID_1A290AFD_CE96_46a2_8351_A986D77CC727.svg +444 -0
  59. data/examples/xmi/Images/EAID_1B2D9309_C66B_492a_995C_95B2B02E0D7C.svg +168 -0
  60. data/examples/xmi/Images/EAID_1DE6B973_CE8A_416f_909B_54CEA1E5944E.svg +10 -0
  61. data/examples/xmi/Images/EAID_204F4ACC_2230_4c8d_9861_EF5A6844B712.svg +60 -0
  62. data/examples/xmi/Images/EAID_227300E2_4F4B_4955_83B9_FA626CE8680B.svg +188 -0
  63. data/examples/xmi/Images/EAID_22C24D4C_4894_480a_B113_0CB034CB59E9.svg +426 -0
  64. data/examples/xmi/Images/EAID_234BC4F5_8100_4969_BDCB_A24E0E641F23.svg +169 -0
  65. data/examples/xmi/Images/EAID_24446BFC_9FEB_4935_8970_65A4C562A93F.svg +277 -0
  66. data/examples/xmi/Images/EAID_24E8A45C_C99F_49b7_860A_9CF65FF76C76.svg +575 -0
  67. data/examples/xmi/Images/EAID_272F3181_4300_48b7_98A0_A8CFD12B1A72.svg +255 -0
  68. data/examples/xmi/Images/EAID_292E0D94_392C_4da6_A0B5_841501FAE50A.svg +183 -0
  69. data/examples/xmi/Images/EAID_29DD0967_ADAB_4abb_99C5_544821F5E7DA.svg +10 -0
  70. data/examples/xmi/Images/EAID_2A339928_E5EF_4ed2_9E5D_CC2CA5CF248B.svg +310 -0
  71. data/examples/xmi/Images/EAID_2A5E0832_06BE_4381_85D4_9B00E4F95575.svg +155 -0
  72. data/examples/xmi/Images/EAID_2AAB709F_EFCE_496f_8AFE_92809D66A0A9.svg +81 -0
  73. data/examples/xmi/Images/EAID_2C8DD882_8DEA_4065_89F8_DDA796AA0C85.svg +520 -0
  74. data/examples/xmi/Images/EAID_2E98EA19_37D8_4b70_BDCE_CFEE4FA800B0.svg +173 -0
  75. data/examples/xmi/Images/EAID_30D62231_110F_44e8_9C06_6FCDCBA53A09.svg +722 -0
  76. data/examples/xmi/Images/EAID_3206D3FD_1FC4_41c7_8D00_36DB908E9319.svg +181 -0
  77. data/examples/xmi/Images/EAID_3452CC53_9ACB_44eb_9C9D_B90CF862F284.svg +92 -0
  78. data/examples/xmi/Images/EAID_348EE46E_ABD9_40b0_82A1_0285E75BDC52.svg +187 -0
  79. data/examples/xmi/Images/EAID_34FF671B_CFDC_47ad_91DF_ECA6D8358180.svg +217 -0
  80. data/examples/xmi/Images/EAID_359DD694_0100_4bdf_AD5F_712D97E9C69B.svg +157 -0
  81. data/examples/xmi/Images/EAID_35DE714C_49A8_490e_913A_56F39EF317F9.svg +180 -0
  82. data/examples/xmi/Images/EAID_360C79F1_8EDF_41db_A069_DECDC55625BC.svg +31 -0
  83. data/examples/xmi/Images/EAID_36913C58_FF35_4ba2_A04B_9A4824E24609.svg +166 -0
  84. data/examples/xmi/Images/EAID_372F7F7B_57ED_469a_A640_70DB578B3C56.svg +361 -0
  85. data/examples/xmi/Images/EAID_37AC19B9_8433_4fee_A326_763170D54D06.svg +32 -0
  86. data/examples/xmi/Images/EAID_38170608_32B5_4a6f_A68D_A0D7C0C9D019.svg +234 -0
  87. data/examples/xmi/Images/EAID_3A77A5D0_4E1B_4116_8AAD_407FC422B47F.svg +183 -0
  88. data/examples/xmi/Images/EAID_3B8BD087_1683_46b1_8D0D_6F839C46C578.svg +42 -0
  89. data/examples/xmi/Images/EAID_3DC20801_AE8B_4e76_B08C_F574E8A90E13.svg +192 -0
  90. data/examples/xmi/Images/EAID_3DE28C70_C6D4_406c_B49F_EEF52148C8C1.svg +124 -0
  91. data/examples/xmi/Images/EAID_458E093C_BA2B_4292_BEC4_37511C163DDC.svg +140 -0
  92. data/examples/xmi/Images/EAID_45F9B1F7_E568_47c9_B229_953BC2E707E4.svg +266 -0
  93. data/examples/xmi/Images/EAID_46B3041A_8C23_46e6_8E14_ADE7012274C5.svg +80 -0
  94. data/examples/xmi/Images/EAID_47E4600F_CEC9_4245_9BF5_EE38007A9DDB.svg +584 -0
  95. data/examples/xmi/Images/EAID_4881CEEE_792C_4cb0_BEA7_54333B643D0A.svg +155 -0
  96. data/examples/xmi/Images/EAID_48D364F0_DCA4_41e8_B4D4_509B3023B969.svg +17 -0
  97. data/examples/xmi/Images/EAID_4DBDAB9E_4C1C_4cb1_A767_06BD743A50A7.svg +78 -0
  98. data/examples/xmi/Images/EAID_4EB75007_B31D_4f2c_8855_7E9D3A3B17F4.svg +454 -0
  99. data/examples/xmi/Images/EAID_4F421236_FCF3_4aae_B22A_C7E6A5EFBAC7.svg +81 -0
  100. data/examples/xmi/Images/EAID_4FC1D352_2102_4b73_BCB0_1410B29C6BD7.svg +379 -0
  101. data/examples/xmi/Images/EAID_4FE346EA_01E1_4b30_8BE6_BB32EA191E47.svg +126 -0
  102. data/examples/xmi/Images/EAID_5038EEE3_7DD0_4cca_9829_364E044D37E8.svg +199 -0
  103. data/examples/xmi/Images/EAID_508A37DC_9378_4f5a_BD96_48F4D24E03A5.svg +162 -0
  104. data/examples/xmi/Images/EAID_516DA1A2_F0EC_415c_9664_E4CA54E7F05C.svg +136 -0
  105. data/examples/xmi/Images/EAID_52A1DBD3_D3DA_4b6d_8F96_FC6F39F64242.svg +161 -0
  106. data/examples/xmi/Images/EAID_575E87BA_32E9_4a84_AA4E_0EFDFC5D4C07.svg +71 -0
  107. data/examples/xmi/Images/EAID_57E0F1A0_6C72_47ef_B922_B806F9A875E8.svg +209 -0
  108. data/examples/xmi/Images/EAID_5957C373_3FC1_482f_8F35_D809153A17F5.svg +123 -0
  109. data/examples/xmi/Images/EAID_59A66AE2_412C_48a6_BFC7_EA56CF11D269.svg +218 -0
  110. data/examples/xmi/Images/EAID_5A43833E_680B_4a90_8931_0C902304E029.svg +236 -0
  111. data/examples/xmi/Images/EAID_5D6DB5A0_5047_4bac_9E60_69904A60B56D.svg +353 -0
  112. data/examples/xmi/Images/EAID_5DA1E7A7_8E59_4803_A831_E9F3EC27328F.svg +242 -0
  113. data/examples/xmi/Images/EAID_5E2C1E2A_82A8_47f4_B2ED_1398D72BFCFD.svg +246 -0
  114. data/examples/xmi/Images/EAID_6052620C_4BD5_49f6_A21C_AD7E6DCA2795.svg +290 -0
  115. data/examples/xmi/Images/EAID_6481E2CC_35A6_43b0_88D4_10A667A2BC2D.svg +60 -0
  116. data/examples/xmi/Images/EAID_660C7D03_A26C_4977_A7BA_9D0A773DA811.svg +318 -0
  117. data/examples/xmi/Images/EAID_671F3C3D_35B6_4514_B5B6_DD7E84925493.svg +24 -0
  118. data/examples/xmi/Images/EAID_676B9C9A_D85F_4d2f_A46B_73F02090DC87.svg +127 -0
  119. data/examples/xmi/Images/EAID_6797FEFA_5801_48e4_8B9C_3C824C0E165D.svg +412 -0
  120. data/examples/xmi/Images/EAID_6807F4EE_18EF_4e7e_ACCF_D5BD323AFDE9.svg +130 -0
  121. data/examples/xmi/Images/EAID_69E81E34_CF28_4c7f_A48F_5941BA85CEE3.svg +96 -0
  122. data/examples/xmi/Images/EAID_6A3C55E8_3C3C_4f3a_8AAC_0299C5B23070.svg +10 -0
  123. data/examples/xmi/Images/EAID_6BAC333E_E2C2_42c7_8DDF_6B4FA0FFC03B.svg +143 -0
  124. data/examples/xmi/Images/EAID_6D0349D5_3F1B_4b28_82D2_910743DEB5E5.svg +114 -0
  125. data/examples/xmi/Images/EAID_6E95B74E_8A09_4698_9E9E_23BCFD2CE194.svg +37 -0
  126. data/examples/xmi/Images/EAID_70C77F92_5614_4b22_8C8E_67859F59D8FD.svg +254 -0
  127. data/examples/xmi/Images/EAID_71F9216B_E7A7_4083_B08E_6C71B57F3A1F.svg +187 -0
  128. data/examples/xmi/Images/EAID_73025C5A_08FC_47ff_AB2F_C7F79CF54B41.svg +145 -0
  129. data/examples/xmi/Images/EAID_74C974B6_6D07_425d_B7AC_C8899E3B4967.svg +76 -0
  130. data/examples/xmi/Images/EAID_7504FCD2_524C_4e7d_BAE4_4E58A8A8A12C.svg +196 -0
  131. data/examples/xmi/Images/EAID_78030266_3603_4747_9D75_03D16614BE7D.svg +35 -0
  132. data/examples/xmi/Images/EAID_785226C1_12B1_4104_A4C1_F19B70B9FB71.svg +348 -0
  133. data/examples/xmi/Images/EAID_7854470F_26B8_4d3c_AFDF_C05BCE6ED0CD.svg +72 -0
  134. data/examples/xmi/Images/EAID_794F4A8F_18CA_4e9f_8477_A6F0E5ED22D4.svg +187 -0
  135. data/examples/xmi/Images/EAID_7A24839E_C8AE_424d_B7D2_6DA16DC813E7.svg +114 -0
  136. data/examples/xmi/Images/EAID_7A3649FD_E960_4ae6_B9B1_A9001C066AE7.svg +181 -0
  137. data/examples/xmi/Images/EAID_7B2C6765_AB68_439a_87F3_DAC323CB2AF5.svg +196 -0
  138. data/examples/xmi/Images/EAID_7C44AC09_27C1_47b3_9A85_88EC71C081FF.svg +55 -0
  139. data/examples/xmi/Images/EAID_7CE102CA_97C1_4cac_BD3B_0500D3712D2A.svg +195 -0
  140. data/examples/xmi/Images/EAID_7D960BD8_65D8_4934_9C11_4EF860DD8FBA.svg +90 -0
  141. data/examples/xmi/Images/EAID_80939C98_A456_48c3_BCEA_4B72851F2DF6.svg +174 -0
  142. data/examples/xmi/Images/EAID_812FE862_76ED_44f0_B678_7A4601B395CF.svg +142 -0
  143. data/examples/xmi/Images/EAID_81B76F5B_9D64_4bbf_8AC8_34234FB87533.svg +740 -0
  144. data/examples/xmi/Images/EAID_84352F1A_195B_411b_9552_5BFC40BF90B5.svg +105 -0
  145. data/examples/xmi/Images/EAID_846DD800_139C_4d47_A1DF_3FB1AC5D130F.svg +554 -0
  146. data/examples/xmi/Images/EAID_84A9C65B_FD6D_4bb5_818F_E8C35FF5BCD1.svg +228 -0
  147. data/examples/xmi/Images/EAID_853674F5_7DC9_4aae_809B_5728098B5D5B.svg +154 -0
  148. data/examples/xmi/Images/EAID_860CBBFB_2F27_408f_9144_751F9D1F487F.svg +273 -0
  149. data/examples/xmi/Images/EAID_87476527_7B9B_4b92_967E_3D38365470CA.svg +239 -0
  150. data/examples/xmi/Images/EAID_87DAE930_5069_4c58_AC65_4B0B2C0F32C8.svg +10 -0
  151. data/examples/xmi/Images/EAID_88AF6BD7_BC34_406f_BB59_47CFAB4A7D5D.svg +116 -0
  152. data/examples/xmi/Images/EAID_88D0CB44_20D0_44fc_A6E3_B663332EF401.svg +200 -0
  153. data/examples/xmi/Images/EAID_8BB1CA0C_C003_4678_973B_A1C3308E021D.svg +136 -0
  154. data/examples/xmi/Images/EAID_8DAB169F_D189_4320_A0F5_4443E3297F0E.svg +181 -0
  155. data/examples/xmi/Images/EAID_8FD488EF_BAAB_40ec_A7ED_F7CC831D546E.svg +324 -0
  156. data/examples/xmi/Images/EAID_90BCA409_BB45_42c5_AFA5_45FE3D995904.svg +342 -0
  157. data/examples/xmi/Images/EAID_926AFE38_01FA_469e_B6AA_ED5F4D62B66F.svg +105 -0
  158. data/examples/xmi/Images/EAID_92AB0FD0_B0FB_4ceb_8EAE_66B6600D31D7.svg +681 -0
  159. data/examples/xmi/Images/EAID_92C43670_3057_47f1_A576_C60843FF3D26.svg +136 -0
  160. data/examples/xmi/Images/EAID_93F63576_BE01_4cd8_8A91_C674FF77FC3D.svg +718 -0
  161. data/examples/xmi/Images/EAID_9400D9BC_05A5_41fc_83F7_02E5C67F9718.svg +487 -0
  162. data/examples/xmi/Images/EAID_95246DCF_1C09_4a16_9512_98000F56B3D8.svg +292 -0
  163. data/examples/xmi/Images/EAID_9994BF62_51E2_42cd_BB35_16C537B6718A.svg +715 -0
  164. data/examples/xmi/Images/EAID_9AAD6C21_B1E7_4472_B64A_FB5E3569D970.svg +116 -0
  165. data/examples/xmi/Images/EAID_9BD7189A_877B_4ca9_B42C_817DEF144FB2.svg +284 -0
  166. data/examples/xmi/Images/EAID_9DA6C553_94FC_4204_83AD_ECC4B45A53EF.svg +159 -0
  167. data/examples/xmi/Images/EAID_9EE6A41B_5FAA_4c89_B98F_732059778630.svg +10 -0
  168. data/examples/xmi/Images/EAID_9F1A4B54_46F6_435c_9529_E43E54CF6050.svg +172 -0
  169. data/examples/xmi/Images/EAID_9FE1EA7B_4CEF_4976_A281_93A94315BD84.svg +153 -0
  170. data/examples/xmi/Images/EAID_A0695647_6172_4262_8C30_67441399609C.svg +290 -0
  171. data/examples/xmi/Images/EAID_A081C63E_D6F2_41a7_A99C_307836754AFA.svg +149 -0
  172. data/examples/xmi/Images/EAID_A24E2778_5AD9_44f2_AB8F_5CD3913477D6.svg +194 -0
  173. data/examples/xmi/Images/EAID_A264F089_F9B3_406c_A3A8_FF34903797D3.svg +143 -0
  174. data/examples/xmi/Images/EAID_A282E5D1_2A13_4e7f_BC76_5D086DD4A577.svg +357 -0
  175. data/examples/xmi/Images/EAID_A3BCE1D6_9DB5_4272_A020_4C0E194B99CC.svg +171 -0
  176. data/examples/xmi/Images/EAID_A56E3818_D1B8_4b63_B69E_FBAC4A8AF482.svg +218 -0
  177. data/examples/xmi/Images/EAID_A57215D5_75C5_4532_BCF4_264A77CD62F1.svg +204 -0
  178. data/examples/xmi/Images/EAID_A59065AF_9669_486c_9582_9693177CFC7F.svg +263 -0
  179. data/examples/xmi/Images/EAID_A759374D_589A_488c_99EF_537ACB9B1FF9.svg +398 -0
  180. data/examples/xmi/Images/EAID_A7B25F46_F18A_4373_B16D_8C6AC0B868B0.svg +174 -0
  181. data/examples/xmi/Images/EAID_A9FE9E6F_A5F4_47e5_A6BA_26E22C7346B6.svg +310 -0
  182. data/examples/xmi/Images/EAID_AA62CDEB_55EC_498d_B326_4AA2C9AF6A05.svg +144 -0
  183. data/examples/xmi/Images/EAID_AAF52AF6_F7F9_4005_AE46_8920847BEA03.svg +144 -0
  184. data/examples/xmi/Images/EAID_AB281AC1_7CB8_404a_8124_34343DDD84E2.svg +198 -0
  185. data/examples/xmi/Images/EAID_AB7F1FDF_A66B_42a1_B8A3_7F594BAAD508.svg +143 -0
  186. data/examples/xmi/Images/EAID_AC2191E3_76E3_40b2_9E21_0E0B9B5277D2.svg +114 -0
  187. data/examples/xmi/Images/EAID_AD451676_A7C8_4c6a_A925_A9B9CA344142.svg +339 -0
  188. data/examples/xmi/Images/EAID_ADBA40A1_9375_4c1b_9938_0990612EB615.svg +429 -0
  189. data/examples/xmi/Images/EAID_ADC8773C_1B27_48ac_BAC1_14C1C919FAF6.svg +245 -0
  190. data/examples/xmi/Images/EAID_AE0718DF_AF69_4ea1_A099_E20028FE40A1.svg +173 -0
  191. data/examples/xmi/Images/EAID_B0DDB85D_A00C_4a7f_8C06_CCA15E5E4FE5.svg +31 -0
  192. data/examples/xmi/Images/EAID_B27ED282_D5E5_4f33_8AC1_62802F9E0B35.svg +256 -0
  193. data/examples/xmi/Images/EAID_B3AFECCB_17DD_44d6_8A44_2C38D9A64C0B.svg +95 -0
  194. data/examples/xmi/Images/EAID_B3B6C5B1_278E_4714_8244_B6C28B66AB50.svg +176 -0
  195. data/examples/xmi/Images/EAID_B53E76CD_A0F2_4e2f_B3AB_796D85964EF2.svg +179 -0
  196. data/examples/xmi/Images/EAID_B55D6E67_0BDD_4163_B359_11A6FBA89C74.svg +207 -0
  197. data/examples/xmi/Images/EAID_B58D1A53_E860_41a3_8352_11C274093E83.svg +189 -0
  198. data/examples/xmi/Images/EAID_B62C02B3_69DB_49e9_8089_4EE398BDE666.svg +165 -0
  199. data/examples/xmi/Images/EAID_BC008774_B539_4150_8174_B675989053D0.svg +22 -0
  200. data/examples/xmi/Images/EAID_BC1F7E00_082D_4a26_922B_3967A8D66859.svg +266 -0
  201. data/examples/xmi/Images/EAID_BDA613D8_402A_475a_AA15_683D88FD3D23.svg +183 -0
  202. data/examples/xmi/Images/EAID_C028B286_4C85_47d8_B6D5_80B28F556E82.svg +303 -0
  203. data/examples/xmi/Images/EAID_C173A6F4_1D1B_400e_AD8C_64FFF7CD5BE5.svg +178 -0
  204. data/examples/xmi/Images/EAID_C1834072_CADC_4ce4_B0FC_8284AE5CF4A4.svg +158 -0
  205. data/examples/xmi/Images/EAID_C1EC985B_5CBD_4e91_8661_EB4EF23781D9.svg +286 -0
  206. data/examples/xmi/Images/EAID_C31C1314_B679_4413_B8FE_A2CD584FC128.svg +305 -0
  207. data/examples/xmi/Images/EAID_C37CFBD6_69BA_42fb_9AC7_2D329D931BCF.svg +171 -0
  208. data/examples/xmi/Images/EAID_C857C934_306F_463a_87D5_257CB225ECFE.svg +174 -0
  209. data/examples/xmi/Images/EAID_C96797DE_2238_42d3_896A_9F92500270ED.svg +180 -0
  210. data/examples/xmi/Images/EAID_C96CBC24_B20E_459a_8F9D_75B61CDCB89F.svg +656 -0
  211. data/examples/xmi/Images/EAID_CACB523D_56A5_4f05_B3C2_51BB18F380FD.svg +158 -0
  212. data/examples/xmi/Images/EAID_CB34B578_101B_48b4_9271_214FFEA6A83A.svg +409 -0
  213. data/examples/xmi/Images/EAID_CBBD6CF4_0A1E_4406_9930_89DE43527910.svg +361 -0
  214. data/examples/xmi/Images/EAID_CC06A828_3750_472f_8DB2_C2E0863FCE17.svg +96 -0
  215. data/examples/xmi/Images/EAID_CD5CF053_1772_4a0f_962D_B17054D8EEAA.svg +173 -0
  216. data/examples/xmi/Images/EAID_CE440B5A_9534_4c75_9BA5_50862BB396C2.svg +97 -0
  217. data/examples/xmi/Images/EAID_CE4734FC_7986_4b3a_807F_A5B2C7EDE9E4.svg +193 -0
  218. data/examples/xmi/Images/EAID_D14AA320_9D41_4366_8739_9C2C21F96AE1.svg +32 -0
  219. data/examples/xmi/Images/EAID_D2FA55D3_C733_4a4d_92D0_0BC7AC0BB5BC.svg +108 -0
  220. data/examples/xmi/Images/EAID_D351FC34_FB03_488d_ADA4_BDB93DA9CB02.svg +49 -0
  221. data/examples/xmi/Images/EAID_D368FDF3_BDC5_4718_A701_351C8587A376.svg +592 -0
  222. data/examples/xmi/Images/EAID_D4DA8C48_3998_450d_87C4_9D65C9FECDB4.svg +42 -0
  223. data/examples/xmi/Images/EAID_D5464ECF_290E_4b2b_A6C4_25BE80F886CB.svg +76 -0
  224. data/examples/xmi/Images/EAID_D55235B0_61E9_461a_8379_2B8BF2403BE2.svg +147 -0
  225. data/examples/xmi/Images/EAID_D555ED73_F010_45d7_8A53_45A33C64C249.svg +318 -0
  226. data/examples/xmi/Images/EAID_D7AAC526_267E_45a0_A853_3207F02363F8.svg +45 -0
  227. data/examples/xmi/Images/EAID_D998B20D_A875_4ef8_A9CE_996BE56602BD.svg +158 -0
  228. data/examples/xmi/Images/EAID_DBFA8B39_F5B7_4c0e_9552_19AEAE5BA64E.svg +200 -0
  229. data/examples/xmi/Images/EAID_DE47A47D_E7BE_4e6f_BA81_F789EE8CFE72.svg +61 -0
  230. data/examples/xmi/Images/EAID_DFBB1072_8EC5_4384_8241_7EDF4B6B888B.svg +78 -0
  231. data/examples/xmi/Images/EAID_E325B9D8_E955_4aed_8125_63167BD40320.svg +67 -0
  232. data/examples/xmi/Images/EAID_E32D9D02_CAE9_4a47_92A8_3290EDCD6E6D.svg +79 -0
  233. data/examples/xmi/Images/EAID_E3B28611_7857_458a_B0BC_736E777B88EC.svg +194 -0
  234. data/examples/xmi/Images/EAID_E43C37EC_1176_4d2e_8B98_B6F3DFF6A092.svg +96 -0
  235. data/examples/xmi/Images/EAID_E591C1CF_7F35_4160_8A72_DFA097AD5811.svg +271 -0
  236. data/examples/xmi/Images/EAID_E77C66A2_2E94_4196_BFC6_662FE5AEEB6F.svg +332 -0
  237. data/examples/xmi/Images/EAID_E7AABA98_2450_4986_9736_DCCAF0108C50.svg +639 -0
  238. data/examples/xmi/Images/EAID_E7D9A2C4_72D6_40b9_8EB8_6B35476246B3.svg +134 -0
  239. data/examples/xmi/Images/EAID_E9CDAD85_ECF1_43de_819F_30A0D01785E6.svg +193 -0
  240. data/examples/xmi/Images/EAID_EC8AF507_F441_4e8a_B8A7_C1690F3C7D0B.svg +58 -0
  241. data/examples/xmi/Images/EAID_ED501058_D540_47ac_8EBC_5921E8C0BF57.svg +384 -0
  242. data/examples/xmi/Images/EAID_EFBF5F0F_DF74_4944_8791_114F5637C335.svg +590 -0
  243. data/examples/xmi/Images/EAID_EFFFA027_2A1F_425c_8437_BF89AADC8893.svg +365 -0
  244. data/examples/xmi/Images/EAID_F07E7718_B2C2_4a65_B5DD_477CB73E971E.svg +165 -0
  245. data/examples/xmi/Images/EAID_F0F20BDF_C729_47f7_B6FC_25ED2C4609CA.svg +61 -0
  246. data/examples/xmi/Images/EAID_F32E5AFE_8605_4c77_AE69_D0D0A6E380AC.svg +76 -0
  247. data/examples/xmi/Images/EAID_F3F00F45_CD37_46fd_B521_D1040EB2FB16.svg +123 -0
  248. data/examples/xmi/Images/EAID_F46E8F19_D8F1_4a3d_B87B_B0BAB4F50F50.svg +202 -0
  249. data/examples/xmi/Images/EAID_F48E5F6E_2411_4635_9315_3EAA4CFA29F7.svg +351 -0
  250. data/examples/xmi/Images/EAID_F4C23F9E_DD74_4fed_B75D_AD3C6448BA24.svg +189 -0
  251. data/examples/xmi/Images/EAID_F853B3C4_B145_4ef0_B261_C3CC0475B6D2.svg +215 -0
  252. data/examples/xmi/Images/EAID_F8BE68CA_1F8F_47e5_9454_01A2EB7D388A.svg +124 -0
  253. data/examples/xmi/Images/EAID_F92A6A28_612E_468e_9E39_D7AE7D24E24D.svg +208 -0
  254. data/examples/xmi/Images/EAID_F995FA49_B86E_4c94_BE5E_C928FB6B87D0.svg +302 -0
  255. data/examples/xmi/Images/EAID_FEAE013A_A4E4_4283_A491_1FEB8D0EBA28.svg +524 -0
  256. data/examples/xmi/Images/EAID_FEBE5726_3751_470b_9023_8C569202E97E.svg +730 -0
  257. data/examples/xmi/UML_EA.DTD +6856 -0
  258. data/examples/xmi/UmlModel_template.xmi +23 -0
  259. data/examples/xmi/basic.xmi +9086 -0
  260. data/examples/xmi/simple.xmi +655 -0
  261. data/examples/xmi/simple_example.xmi +23 -0
  262. data/examples/xmi/test.xmi +1703 -0
  263. data/exe/lutaml +11 -0
  264. data/exe/lutaml-sysml +22 -0
  265. data/exe/lutaml-wsd2uml +10 -6
  266. data/exe/lutaml-yaml2uml +8 -6
  267. data/frontend/dist/app.iife.js +24 -0
  268. data/frontend/dist/style.css +1 -0
  269. data/frontend/index.html +26 -0
  270. data/frontend/package-lock.json +2805 -0
  271. data/frontend/package.json +26 -0
  272. data/frontend/src/App.vue +59 -0
  273. data/frontend/src/app.ts +8 -0
  274. data/frontend/src/components/AppHeader.vue +127 -0
  275. data/frontend/src/components/AppSidebar.vue +119 -0
  276. data/frontend/src/components/ClassDetails.vue +247 -0
  277. data/frontend/src/components/DiagramView.vue +79 -0
  278. data/frontend/src/components/PackageDetails.vue +92 -0
  279. data/frontend/src/components/PackageTreeNode.vue +64 -0
  280. data/frontend/src/components/SearchResults.vue +48 -0
  281. data/frontend/src/components/WelcomeView.vue +66 -0
  282. data/frontend/src/shims-vue.d.ts +5 -0
  283. data/frontend/src/stores/dataStore.ts +79 -0
  284. data/frontend/src/stores/uiStore.ts +167 -0
  285. data/frontend/src/styles/main.css +1566 -0
  286. data/frontend/src/types.ts +221 -0
  287. data/frontend/tests/e2e/__screenshots__/new-dark-mode.png +0 -0
  288. data/frontend/tests/e2e/__screenshots__/new-package-details.png +0 -0
  289. data/frontend/tests/e2e/__screenshots__/new-search-modal.png +0 -0
  290. data/frontend/tests/e2e/__screenshots__/new-sidebar-collapsed.png +0 -0
  291. data/frontend/tests/e2e/__screenshots__/new-welcome.png +0 -0
  292. data/frontend/tests/e2e/render.spec.ts +188 -0
  293. data/frontend/tsconfig.json +20 -0
  294. data/frontend/vite.config.ts +26 -0
  295. data/frontend/vitest.config.ts +8 -0
  296. data/lib/lutaml/uml/abstraction.rb +1 -0
  297. data/lib/lutaml/uml/action.rb +17 -0
  298. data/lib/lutaml/uml/activity.rb +1 -0
  299. data/lib/lutaml/uml/actor.rb +2 -9
  300. data/lib/lutaml/uml/association.rb +26 -32
  301. data/lib/lutaml/uml/association_generalization.rb +20 -0
  302. data/lib/lutaml/uml/behavior.rb +2 -1
  303. data/lib/lutaml/uml/cardinality.rb +12 -0
  304. data/lib/lutaml/uml/class.rb +43 -73
  305. data/lib/lutaml/uml/classifier.rb +12 -4
  306. data/lib/lutaml/uml/comment.rb +15 -0
  307. data/lib/lutaml/uml/connector.rb +7 -8
  308. data/lib/lutaml/uml/connector_end.rb +22 -0
  309. data/lib/lutaml/uml/constraint.rb +13 -1
  310. data/lib/lutaml/uml/data_type.rb +36 -54
  311. data/lib/lutaml/uml/dependency.rb +7 -8
  312. data/lib/lutaml/uml/diagram.rb +17 -0
  313. data/lib/lutaml/uml/diagram_link.rb +28 -0
  314. data/lib/lutaml/uml/diagram_object.rb +32 -0
  315. data/lib/lutaml/uml/document.rb +45 -62
  316. data/lib/lutaml/uml/enum.rb +12 -36
  317. data/lib/lutaml/uml/event.rb +1 -1
  318. data/lib/lutaml/uml/fidelity.rb +12 -0
  319. data/lib/lutaml/uml/final_state.rb +1 -0
  320. data/lib/lutaml/uml/fontname.rb +19 -0
  321. data/lib/lutaml/uml/general_attribute.rb +24 -0
  322. data/lib/lutaml/uml/generalization.rb +37 -0
  323. data/lib/lutaml/uml/group.rb +21 -0
  324. data/lib/lutaml/uml/has_attributes.rb +2 -2
  325. data/lib/lutaml/uml/has_members.rb +7 -7
  326. data/lib/lutaml/uml/inheritance_walker.rb +96 -0
  327. data/lib/lutaml/uml/instance.rb +7 -7
  328. data/lib/lutaml/uml/model.rb +5 -3
  329. data/lib/lutaml/uml/model_helpers.rb +104 -0
  330. data/lib/lutaml/uml/namespace.rb +12 -0
  331. data/lib/lutaml/uml/opaque_behavior.rb +1 -0
  332. data/lib/lutaml/uml/operation.rb +13 -21
  333. data/lib/lutaml/uml/operation_parameter.rb +19 -0
  334. data/lib/lutaml/uml/package.rb +24 -44
  335. data/lib/lutaml/uml/package_path.rb +235 -0
  336. data/lib/lutaml/uml/package_walker.rb +54 -0
  337. data/lib/lutaml/uml/port.rb +1 -0
  338. data/lib/lutaml/uml/primitive_type.rb +5 -4
  339. data/lib/lutaml/uml/property.rb +17 -17
  340. data/lib/lutaml/uml/pseudostate.rb +1 -0
  341. data/lib/lutaml/uml/qualified_name.rb +175 -0
  342. data/lib/lutaml/uml/realization.rb +1 -0
  343. data/lib/lutaml/uml/region.rb +1 -1
  344. data/lib/lutaml/uml/state.rb +11 -1
  345. data/lib/lutaml/uml/state_machine.rb +1 -1
  346. data/lib/lutaml/uml/tagged_value.rb +23 -0
  347. data/lib/lutaml/uml/top_element.rb +66 -39
  348. data/lib/lutaml/uml/top_element_attribute.rb +52 -26
  349. data/lib/lutaml/uml/transition.rb +13 -1
  350. data/lib/lutaml/uml/trigger.rb +7 -1
  351. data/lib/lutaml/uml/validation/base_validator.rb +67 -0
  352. data/lib/lutaml/uml/validation/document_structure_validator.rb +387 -0
  353. data/lib/lutaml/uml/value.rb +25 -18
  354. data/lib/lutaml/uml/version.rb +1 -1
  355. data/lib/lutaml/uml/vertex.rb +1 -0
  356. data/lib/lutaml/uml.rb +84 -5
  357. data/lib/lutaml/uml_repository/class_lookup_index.rb +39 -0
  358. data/lib/lutaml/uml_repository/error_handler.rb +203 -0
  359. data/lib/lutaml/uml_repository/exporters/base_exporter.rb +61 -0
  360. data/lib/lutaml/uml_repository/exporters/json_exporter.rb +343 -0
  361. data/lib/lutaml/uml_repository/exporters/markdown/class_page_builder.rb +187 -0
  362. data/lib/lutaml/uml_repository/exporters/markdown/formatting.rb +34 -0
  363. data/lib/lutaml/uml_repository/exporters/markdown/index_page_builder.rb +81 -0
  364. data/lib/lutaml/uml_repository/exporters/markdown/link_resolver.rb +40 -0
  365. data/lib/lutaml/uml_repository/exporters/markdown/package_page_builder.rb +107 -0
  366. data/lib/lutaml/uml_repository/exporters/markdown.rb +20 -0
  367. data/lib/lutaml/uml_repository/exporters/markdown_exporter.rb +86 -0
  368. data/lib/lutaml/uml_repository/index_builder.rb +210 -0
  369. data/lib/lutaml/uml_repository/index_builders/association_index.rb +155 -0
  370. data/lib/lutaml/uml_repository/index_builders/class_index.rb +113 -0
  371. data/lib/lutaml/uml_repository/index_builders/package_index.rb +62 -0
  372. data/lib/lutaml/uml_repository/index_builders.rb +13 -0
  373. data/lib/lutaml/uml_repository/lazy_repository.rb +237 -0
  374. data/lib/lutaml/uml_repository/package_exporter.rb +334 -0
  375. data/lib/lutaml/uml_repository/package_loader.rb +240 -0
  376. data/lib/lutaml/uml_repository/package_metadata.rb +77 -0
  377. data/lib/lutaml/uml_repository/presenters/association_presenter.rb +79 -0
  378. data/lib/lutaml/uml_repository/presenters/attribute_presenter.rb +94 -0
  379. data/lib/lutaml/uml_repository/presenters/class_presenter.rb +72 -0
  380. data/lib/lutaml/uml_repository/presenters/datatype_presenter.rb +97 -0
  381. data/lib/lutaml/uml_repository/presenters/element_presenter.rb +91 -0
  382. data/lib/lutaml/uml_repository/presenters/enum_presenter.rb +78 -0
  383. data/lib/lutaml/uml_repository/presenters/package_presenter.rb +48 -0
  384. data/lib/lutaml/uml_repository/presenters/presenter_factory.rb +74 -0
  385. data/lib/lutaml/uml_repository/queries/association_query.rb +184 -0
  386. data/lib/lutaml/uml_repository/queries/base_query.rb +45 -0
  387. data/lib/lutaml/uml_repository/queries/class_query.rb +178 -0
  388. data/lib/lutaml/uml_repository/queries/diagram_query.rb +108 -0
  389. data/lib/lutaml/uml_repository/queries/inheritance_query.rb +327 -0
  390. data/lib/lutaml/uml_repository/queries/package_query.rb +230 -0
  391. data/lib/lutaml/uml_repository/queries/search_query.rb +236 -0
  392. data/lib/lutaml/uml_repository/query_dsl/conditions/base_condition.rb +28 -0
  393. data/lib/lutaml/uml_repository/query_dsl/conditions/block_condition.rb +44 -0
  394. data/lib/lutaml/uml_repository/query_dsl/conditions/hash_condition.rb +82 -0
  395. data/lib/lutaml/uml_repository/query_dsl/conditions/package_condition.rb +89 -0
  396. data/lib/lutaml/uml_repository/query_dsl/order.rb +90 -0
  397. data/lib/lutaml/uml_repository/query_dsl/query_builder.rb +290 -0
  398. data/lib/lutaml/uml_repository/repository/deprecated.rb +39 -0
  399. data/lib/lutaml/uml_repository/repository.rb +689 -0
  400. data/lib/lutaml/uml_repository/repository_enhanced.rb.disabled +431 -0
  401. data/lib/lutaml/uml_repository/search_result.rb +86 -0
  402. data/lib/lutaml/uml_repository/static_site/configuration.rb +377 -0
  403. data/lib/lutaml/uml_repository/static_site/data_transformer.rb +135 -0
  404. data/lib/lutaml/uml_repository/static_site/generator.rb +120 -0
  405. data/lib/lutaml/uml_repository/static_site/id_generator.rb +120 -0
  406. data/lib/lutaml/uml_repository/static_site/models/spa_association.rb +29 -0
  407. data/lib/lutaml/uml_repository/static_site/models/spa_association_end.rb +25 -0
  408. data/lib/lutaml/uml_repository/static_site/models/spa_attribute.rb +58 -0
  409. data/lib/lutaml/uml_repository/static_site/models/spa_base.rb +12 -0
  410. data/lib/lutaml/uml_repository/static_site/models/spa_cardinality.rb +28 -0
  411. data/lib/lutaml/uml_repository/static_site/models/spa_class.rb +60 -0
  412. data/lib/lutaml/uml_repository/static_site/models/spa_diagram.rb +31 -0
  413. data/lib/lutaml/uml_repository/static_site/models/spa_document.rb +31 -0
  414. data/lib/lutaml/uml_repository/static_site/models/spa_inherited_association.rb +25 -0
  415. data/lib/lutaml/uml_repository/static_site/models/spa_inherited_attribute.rb +25 -0
  416. data/lib/lutaml/uml_repository/static_site/models/spa_literal.rb +19 -0
  417. data/lib/lutaml/uml_repository/static_site/models/spa_metadata.rb +39 -0
  418. data/lib/lutaml/uml_repository/static_site/models/spa_operation.rb +34 -0
  419. data/lib/lutaml/uml_repository/static_site/models/spa_package.rb +37 -0
  420. data/lib/lutaml/uml_repository/static_site/models/spa_package_tree_node.rb +32 -0
  421. data/lib/lutaml/uml_repository/static_site/models/spa_parameter.rb +21 -0
  422. data/lib/lutaml/uml_repository/static_site/models/spa_search_entry.rb +34 -0
  423. data/lib/lutaml/uml_repository/static_site/models/spa_search_index.rb +29 -0
  424. data/lib/lutaml/uml_repository/static_site/models/spa_statistics.rb +25 -0
  425. data/lib/lutaml/uml_repository/static_site/models/spa_tree_class_ref.rb +22 -0
  426. data/lib/lutaml/uml_repository/static_site/models.rb +48 -0
  427. data/lib/lutaml/uml_repository/static_site/output/multi_file_strategy.rb +69 -0
  428. data/lib/lutaml/uml_repository/static_site/output/strategy.rb +36 -0
  429. data/lib/lutaml/uml_repository/static_site/output/vue_inlined_strategy.rb +113 -0
  430. data/lib/lutaml/uml_repository/static_site/output.rb +15 -0
  431. data/lib/lutaml/uml_repository/static_site/search_index_builder.rb +216 -0
  432. data/lib/lutaml/uml_repository/static_site/serializers/association_serializer.rb +70 -0
  433. data/lib/lutaml/uml_repository/static_site/serializers/attribute_serializer.rb +24 -0
  434. data/lib/lutaml/uml_repository/static_site/serializers/base.rb +66 -0
  435. data/lib/lutaml/uml_repository/static_site/serializers/class_serializer.rb +97 -0
  436. data/lib/lutaml/uml_repository/static_site/serializers/diagram_serializer.rb +59 -0
  437. data/lib/lutaml/uml_repository/static_site/serializers/inheritance_resolver.rb +151 -0
  438. data/lib/lutaml/uml_repository/static_site/serializers/metadata_builder.rb +102 -0
  439. data/lib/lutaml/uml_repository/static_site/serializers/operation_serializer.rb +52 -0
  440. data/lib/lutaml/uml_repository/static_site/serializers/package_serializer.rb +55 -0
  441. data/lib/lutaml/uml_repository/static_site/serializers/package_tree_builder.rb +77 -0
  442. data/lib/lutaml/uml_repository/static_site/serializers.rb +30 -0
  443. data/lib/lutaml/uml_repository/static_site.rb +92 -0
  444. data/lib/lutaml/uml_repository/statistics_calculator.rb +342 -0
  445. data/lib/lutaml/uml_repository/validators/repository_validator.rb +402 -0
  446. data/lib/lutaml/uml_repository.rb +99 -0
  447. data/lutaml-uml.gemspec +20 -20
  448. data/templates/static_site/assets/images/lutaml-full.svg +1 -0
  449. data/templates/static_site/assets/images/lutaml-icon.svg +1 -0
  450. data/templates/static_site/assets/scripts/app.js +45 -0
  451. data/templates/static_site/assets/scripts/core/state.js +446 -0
  452. data/templates/static_site/assets/scripts/core/utils.js +133 -0
  453. data/templates/static_site/assets/scripts/ui/details.js +74 -0
  454. data/templates/static_site/assets/scripts/ui/diagrams.js +345 -0
  455. data/templates/static_site/assets/scripts/ui/search.js +187 -0
  456. data/templates/static_site/assets/scripts/ui/sidebar.js +123 -0
  457. data/templates/static_site/assets/styles/00-variables.css +144 -0
  458. data/templates/static_site/assets/styles/01-reset.css +69 -0
  459. data/templates/static_site/assets/styles/02-base.css +144 -0
  460. data/templates/static_site/assets/styles/03-layout.css +121 -0
  461. data/templates/static_site/assets/styles/04-components.css +905 -0
  462. data/templates/static_site/assets/styles/05-utilities.css +23 -0
  463. data/templates/static_site/assets/styles/06-diagrams.css +74 -0
  464. data/templates/static_site/components/class_details.liquid +328 -0
  465. data/templates/static_site/components/content.liquid +481 -0
  466. data/templates/static_site/components/diagram_list.liquid +52 -0
  467. data/templates/static_site/components/diagram_viewer.liquid +71 -0
  468. data/templates/static_site/components/header.liquid +114 -0
  469. data/templates/static_site/components/package_details.liquid +119 -0
  470. data/templates/static_site/components/sidebar.liquid +76 -0
  471. data/templates/static_site/components/tree_node.liquid +81 -0
  472. data/templates/static_site/multi_file.liquid +49 -0
  473. data/templates/static_site/single_file.liquid +57 -0
  474. metadata +444 -224
  475. data/.github/workflows/macos.yml +0 -38
  476. data/.github/workflows/ubuntu.yml +0 -40
  477. data/.github/workflows/windows.yml +0 -51
  478. data/.travis.yml +0 -6
  479. data/CODE_OF_CONDUCT.md +0 -74
  480. data/LUTAML.adoc +0 -372
  481. data/bin/console +0 -15
  482. data/bin/folder_yaml2lutaml.sh +0 -6
  483. data/bin/plantuml2lutaml +0 -59
  484. data/bin/setup +0 -8
  485. data/bin/yaml2lutaml +0 -144
  486. data/lib/lutaml/layout/engine.rb +0 -15
  487. data/lib/lutaml/layout/graph_viz_engine.rb +0 -19
  488. data/lib/lutaml/uml/constructor_end.rb +0 -16
  489. data/lib/lutaml/uml/formatter/base.rb +0 -67
  490. data/lib/lutaml/uml/formatter/graphviz.rb +0 -334
  491. data/lib/lutaml/uml/formatter.rb +0 -21
  492. data/lib/lutaml/uml/node/base.rb +0 -21
  493. data/lib/lutaml/uml/node/class_node.rb +0 -57
  494. data/lib/lutaml/uml/node/class_relationship.rb +0 -14
  495. data/lib/lutaml/uml/node/document.rb +0 -18
  496. data/lib/lutaml/uml/node/field.rb +0 -34
  497. data/lib/lutaml/uml/node/has_name.rb +0 -15
  498. data/lib/lutaml/uml/node/has_type.rb +0 -15
  499. data/lib/lutaml/uml/node/method.rb +0 -29
  500. data/lib/lutaml/uml/node/method_argument.rb +0 -16
  501. data/lib/lutaml/uml/node/relationship.rb +0 -28
  502. data/lib/lutaml/uml/parsers/attribute.rb +0 -70
  503. data/lib/lutaml/uml/parsers/dsl.rb +0 -413
  504. data/lib/lutaml/uml/parsers/dsl_preprocessor.rb +0 -59
  505. data/lib/lutaml/uml/parsers/dsl_transform.rb +0 -27
  506. data/lib/lutaml/uml/parsers/yaml.rb +0 -46
  507. data/lib/lutaml/uml/serializers/association.rb +0 -58
  508. data/lib/lutaml/uml/serializers/base.rb +0 -16
  509. data/lib/lutaml/uml/serializers/class.rb +0 -29
  510. data/lib/lutaml/uml/serializers/top_element_attribute.rb +0 -14
  511. data/lib/lutaml/uml/serializers/yaml_view.rb +0 -18
  512. data/spec/fixtures/datamodel/models/AddressClassProfile.yml +0 -90
  513. data/spec/fixtures/datamodel/models/AddressComponentProfile.yml +0 -63
  514. data/spec/fixtures/datamodel/models/AddressComponentSpecification.yml +0 -15
  515. data/spec/fixtures/datamodel/models/AddressProfile.yml +0 -36
  516. data/spec/fixtures/datamodel/models/AttributeProfile.yml +0 -32
  517. data/spec/fixtures/datamodel/models/InterchangeAddressClassProfile.yml +0 -79
  518. data/spec/fixtures/datamodel/models/Localization copy.yml +0 -23
  519. data/spec/fixtures/datamodel/models/Localization.yml +0 -23
  520. data/spec/fixtures/datamodel/models/ProfileCompliantAddress.yml +0 -36
  521. data/spec/fixtures/datamodel/models/ProfileCompliantAddressComponent.yml +0 -15
  522. data/spec/fixtures/datamodel/models/Signature.yml +0 -20
  523. data/spec/fixtures/datamodel/models/SignatureBlankDefinition.yml +0 -20
  524. data/spec/fixtures/datamodel/models/TextDirectionCode copy.yml +0 -16
  525. data/spec/fixtures/datamodel/models/TextDirectionCode.yml +0 -16
  526. data/spec/fixtures/datamodel/models/Validity.yml +0 -14
  527. data/spec/fixtures/datamodel/models/iso19160-1/Address.yml +0 -22
  528. data/spec/fixtures/datamodel/models/iso19160-1/AddressComponent.yml +0 -2
  529. data/spec/fixtures/datamodel/style.uml.inc +0 -37
  530. data/spec/fixtures/datamodel/views/AddressClassProfile.yml +0 -12
  531. data/spec/fixtures/datamodel/views/AddressProfile.yml +0 -3
  532. data/spec/fixtures/datamodel/views/CommonModels.yml +0 -9
  533. data/spec/fixtures/datamodel/views/TopDown.yml +0 -62
  534. data/spec/fixtures/dsl/broken_diagram.lutaml +0 -34
  535. data/spec/fixtures/dsl/diagram.lutaml +0 -3
  536. data/spec/fixtures/dsl/diagram_attributes.lutaml +0 -6
  537. data/spec/fixtures/dsl/diagram_blank_definion.lutaml +0 -6
  538. data/spec/fixtures/dsl/diagram_blank_entities.lutaml +0 -8
  539. data/spec/fixtures/dsl/diagram_class_assocation.lutaml +0 -29
  540. data/spec/fixtures/dsl/diagram_class_fields.lutaml +0 -25
  541. data/spec/fixtures/dsl/diagram_commented_includes.lutaml +0 -5
  542. data/spec/fixtures/dsl/diagram_comments.lutaml +0 -28
  543. data/spec/fixtures/dsl/diagram_concept_model.lutaml +0 -132
  544. data/spec/fixtures/dsl/diagram_data_types.lutaml +0 -44
  545. data/spec/fixtures/dsl/diagram_definitions.lutaml +0 -25
  546. data/spec/fixtures/dsl/diagram_includes.lutaml +0 -6
  547. data/spec/fixtures/dsl/diagram_multiply_classes.lutaml +0 -7
  548. data/spec/fixtures/dsl/diagram_non_existing_include.lutaml +0 -6
  549. data/spec/fixtures/dsl/shared.lutaml +0 -3
  550. data/spec/fixtures/dsl/shared1.lutaml +0 -4
  551. data/spec/fixtures/generated_dot/AddressClassProfile.dot +0 -170
  552. data/spec/fixtures/generated_dot/AddressProfile.dot +0 -34
  553. data/spec/lutaml/layout/graph_viz_engine_spec.rb +0 -31
  554. data/spec/lutaml/uml/formatter/graphviz_spec.rb +0 -41
  555. data/spec/lutaml/uml/parsers/dsl_spec.rb +0 -345
  556. data/spec/lutaml/uml/parsers/yaml_spec.rb +0 -18
  557. data/spec/lutaml/uml/serializers/yaml_view_spec.rb +0 -20
  558. data/spec/lutaml/uml_spec.rb +0 -7
  559. data/spec/spec_helper.rb +0 -25
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5d7db5a90a481773906ffcd2985d36777ba62f2c79a1de83390c7890a4c9f7c4
4
- data.tar.gz: 7d9229702c7b58d2a2d0c8f2261230eb941f7fd76a0f17c784d48da01a22c5c0
3
+ metadata.gz: aacf10e874c4c7f4231804cfd3d9893f396cc822f8fc9fa7e8659a65f6c6c98b
4
+ data.tar.gz: 397bb118c072767eb92019fef01b910b2347bbeb4920d9b42c140cb863d78e5e
5
5
  SHA512:
6
- metadata.gz: ec111d11c2354621c95c3708296356906977f9c949f96a07c8e1ee71928733ff68089b5339bb2017f824fa76274fe2e043693ca48b7cbd1305c85756791097a0
7
- data.tar.gz: 81de391a9fc9a1d546d82dcfde50b802a67e4bc28ffee88f08699faa6f54b3e7052107e2824c77dfd2b5cd40f3c78518757e7e1955c2715584225508f543389d
6
+ metadata.gz: 2504a3f5e075518691fa4fb31a2f97b7ba85f9ef91030b72b81257b6895af6fa53f33ebf12c0286c5dfa6c6b54a2ffa792f20dfc047c722e7b867068eb3105a7
7
+ data.tar.gz: 56009d73018c61a5eac9d168dba558fe9617dc6f854e364ef5166f6b59e2b55a407089e5bef37d82571efa5487ffef94b231665f2bf9dc98f1ee9745f02065af
@@ -0,0 +1,32 @@
1
+ name: release
2
+
3
+ permissions:
4
+ contents: write
5
+ packages: write
6
+ id-token: write
7
+
8
+ on:
9
+ workflow_dispatch:
10
+ inputs:
11
+ next_version:
12
+ description: |
13
+ Next release version. Possible values: x.y.z, major, minor, patch or pre|rc|etc
14
+ required: true
15
+ default: "skip"
16
+ acknowledge_breaking_in_patch:
17
+ description: "Skip the release-breaking-check guard"
18
+ required: false
19
+ default: "true"
20
+ repository_dispatch:
21
+ types: [do-release]
22
+
23
+ jobs:
24
+ release:
25
+ uses: metanorma/ci/.github/workflows/rubygems-release.yml@main
26
+ with:
27
+ next_version: ${{ github.event.inputs.next_version }}
28
+ acknowledge_breaking_in_patch: ${{ github.event.inputs.acknowledge_breaking_in_patch == 'true' }}
29
+ gated: false
30
+ secrets:
31
+ rubygems-api-key: ${{ secrets.LUTAML_CI_RUBYGEMS_API_KEY }}
32
+ pat_token: ${{ secrets.GITHUB_TOKEN }}
data/.gitignore CHANGED
@@ -1,12 +1,8 @@
1
1
  /.bundle/
2
- /.yardoc
3
- /_yardoc/
4
- /coverage/
5
- /doc/
2
+ /vendor/
6
3
  /pkg/
7
- /spec/reports/
8
- /tmp/
9
-
10
- # rspec failure tracking
11
- .rspec_status
4
+ *.gem
12
5
  Gemfile.lock
6
+ .rspec_status
7
+ node_modules/
8
+ frontend/node_modules/
data/.rspec CHANGED
@@ -1,3 +1,3 @@
1
+ --require spec_helper
1
2
  --format documentation
2
3
  --color
3
- --require spec_helper
data/CLAUDE.md ADDED
@@ -0,0 +1,54 @@
1
+ # CLAUDE.md — Lutaml::Uml Gem
2
+
3
+ ## Project Overview
4
+ `lutaml-uml` provides UML domain models, a repository pattern for querying/presenting UML documents, format converters, EA diagram rendering, and a Vue.js SPA static site generator. It is the core UML library used by the `lutaml` gem.
5
+
6
+ ## Testing Constraints
7
+
8
+ **CRITICAL: Do NOT run the full test suite at once.** It will crash due to memory. Run targeted subsets:
9
+ - `bundle exec rspec spec/lutaml/uml/` — UML model specs
10
+ - `bundle exec rspec spec/lutaml/uml_repository/` — Repository, presenters, queries, SPA specs
11
+ - Combine at most 2-3 suites at a time for targeted verification.
12
+
13
+ ## Code Quality Rules
14
+ - Never use `send` (breaks encapsulation). Use `public_send` only when dynamic dispatch is truly necessary.
15
+ - Never use `respond_to?` (poor typing). Use `is_a?` for type checks.
16
+ - Extract god methods into focused helpers.
17
+ - Keep files under ~300 lines. Extract into modules/classes when growing.
18
+ - DRY: consolidate duplicated patterns.
19
+ - Never commit TODO tracking files to git.
20
+
21
+ ## Spec Require Rules
22
+
23
+ In this repo, specs should use `require` since the gem's lib is on the load path via bundler:
24
+ ```ruby
25
+ require "spec_helper"
26
+ require "lutaml/uml"
27
+ require "lutaml/uml_repository"
28
+ ```
29
+
30
+ For code in the **lutaml** gem (xmi, formatter), use `require` — it's a dev dependency:
31
+ ```ruby
32
+ require "lutaml/formatter"
33
+ require "lutaml/xmi"
34
+ ```
35
+
36
+ ## Architecture
37
+ - `lib/lutaml/uml/` — UML domain models (Class, Association, Package, DataType, Enum, etc.)
38
+ - `lib/lutaml/uml_repository/` — Repository pattern (queries, presenters, exporters, SPA, web UI)
39
+ - `lib/lutaml/converter/` — Format converters (XMI→UML, DSL→UML)
40
+ - `lib/lutaml/ea/` — EA diagram SVG rendering
41
+ - `frontend/` — Vue 3 SPA frontend (pre-built dist checked in)
42
+ - `templates/` — Liquid templates for web UI
43
+ - `config/` — Default SPA configuration
44
+
45
+ ## SPA Static Site Generator
46
+ The SPA generator uses typed models + strategy pattern:
47
+ - `DataTransformer` builds a `SpaDocument` from a repository
48
+ - `Output::Strategy` subclasses render HTML (single-file or multi-file)
49
+ - `Output::VueInlinedStrategy` embeds Vue IIFE + JSON data in single HTML
50
+ - Frontend built with Vue 3 + Vite + TypeScript in `frontend/`
51
+
52
+ ## CI Notes
53
+ - Ignore Ruby 3.4 ubuntu failures (performance-related, not code issues)
54
+ - Ignore macOS job slowness (GitHub Actions is slow for macOS)
data/Gemfile CHANGED
@@ -2,7 +2,19 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
- # Specify your gem's dependencies in lutaml-uml.gemspec
6
5
  gemspec
7
6
 
8
- gem "rake", "~> 12.0"
7
+ gem "lutaml-model", github: "lutaml/lutaml-model", branch: "main"
8
+ gem "rack-test"
9
+ gem "rake", "~> 13.0"
10
+ gem "rspec", "~> 3.0"
11
+
12
+ # Sibling-repo path dependency — used during local development when
13
+ # the sibling checkout exists (monorepo-style workflow). In CI and for
14
+ # gem install, fall back to the published rubygems version.
15
+ ea_path = File.expand_path("../ea", __dir__)
16
+ if File.directory?(ea_path)
17
+ gem "ea", path: ea_path
18
+ else
19
+ gem "ea"
20
+ end
data/README.adoc CHANGED
@@ -1,44 +1,33 @@
1
- # Lutaml::Uml
1
+ = lutaml-uml
2
2
 
3
- image:https://badge.fury.io/rb/lutaml-uml.svg["Gem Version", link="https://badge.fury.io/rb/lutaml-uml"]
3
+ UML domain models, repository pattern, format converters, and SPA generator for LutaML.
4
4
 
5
- image:https://github.com/lutaml/lutaml-uml/actions/workflows/macos.yml/badge.svg["macos", link="https://github.com/lutaml/lutaml-uml/actions/workflows/macos.yml"]
6
- image:https://github.com/lutaml/lutaml-uml/actions/workflows/ubuntu.yml/badge.svg["ubuntu", link="https://github.com/lutaml/lutaml-uml/actions/workflows/ubuntu.yml"]
7
- image:https://github.com/lutaml/lutaml-uml/actions/workflows/windows.yml/badge.svg["windows", link="https://github.com/lutaml/lutaml-uml/actions/workflows/windows.yml"]
5
+ == Overview
8
6
 
9
- Lutaml is a language for specifying UML class diagrams and a tool for converting it into various different formats.
7
+ This gem provides:
10
8
 
11
- ## Install
9
+ * `Lutaml::Uml` — UML domain model classes (Class, Association, Package, DataType, Enum, etc.)
10
+ * `Lutaml::UmlRepository` — Repository pattern for querying and presenting UML documents
11
+ * `Lutaml::Converter` — Format converters (XMI to UML, DSL to UML)
12
+ * `Lutaml::Ea` — Enterprise Architect diagram SVG rendering
13
+ * SPA static site generator with Vue.js frontend
12
14
 
13
- ### Bundler: `gem "lutaml-uml"`
15
+ == Installation
14
16
 
15
- ### RubyGems: `gem install lutaml-uml`
17
+ Add to your Gemfile:
16
18
 
17
- ## Language
19
+ [source,ruby]
20
+ gem "lutaml-uml"
18
21
 
19
- See link:LUTAML.adoc[LUTAML.adoc]
22
+ == Usage
20
23
 
21
- ## Usage
24
+ [source,ruby]
25
+ require "lutaml/uml"
22
26
 
23
- Converter executables are available:
27
+ == Architecture
24
28
 
25
- * PlantUML WSD to LutaML UML: `lutaml-wsd2uml`
26
- * LutaML YAML to LutaML UML: `lutaml-yaml2uml`
27
-
28
- EXAMPLE: `lutaml-wsd2uml mn/metanorma-model-standoc/models/StandardDoc_Blocks_New.wsd`
29
-
30
-
31
- ## Development
32
-
33
- After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
34
-
35
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
36
-
37
- ## Contributing
38
-
39
- Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/lutaml-uml. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://github.com/[USERNAME]/lutaml-uml/blob/master/CODE_OF_CONDUCT.md).
40
-
41
-
42
- ## Code of Conduct
43
-
44
- Everyone interacting in the Lutaml::Uml project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/[USERNAME]/lutaml-uml/blob/master/CODE_OF_CONDUCT.md).
29
+ * `lib/lutaml/uml/` UML domain models
30
+ * `lib/lutaml/uml_repository/` Repository, queries, presenters, exporters, SPA
31
+ * `lib/lutaml/converter/` — XMI→UML and DSL→UML converters
32
+ * `lib/lutaml/ea/` — EA diagram SVG rendering
33
+ * `frontend/` — Vue 3 SPA frontend (pre-built dist included)
data/Rakefile CHANGED
@@ -4,5 +4,4 @@ require "bundler/gem_tasks"
4
4
  require "rspec/core/rake_task"
5
5
 
6
6
  RSpec::Core::RakeTask.new(:spec)
7
-
8
7
  task default: :spec
@@ -0,0 +1,26 @@
1
+ # 01 - Remove Dead `RepositoryEnhanced` From lutaml-uml
2
+
3
+ ## Status: ✅ DONE (2026-06-27)
4
+
5
+ ## What was done
6
+
7
+ 1. Removed `autoload :RepositoryEnhanced, ...` from
8
+ `lib/lutaml/uml_repository.rb` (line 24).
9
+ 2. Renamed the source file to
10
+ `lib/lutaml/uml_repository/repository_enhanced.rb.disabled` — preserves the
11
+ source per the "never delete source" rule while preventing autoload.
12
+
13
+ ## Verification
14
+
15
+ ```bash
16
+ grep -rn 'RepositoryEnhanced' lib/ spec/
17
+ # → only the .disabled file (not loadable as Ruby)
18
+ bundle exec rspec # → still green
19
+ ```
20
+
21
+ ## Why disabled, not deleted
22
+
23
+ The class body still references `ModelTransformations::*` constants (now in
24
+ `ea`). If re-enabled, callers would trigger `NameError` unless `ea` is also
25
+ loaded. Keeping it as `.disabled` lets a future caller (if any legitimate use
26
+ emerges) explicitly opt in by renaming back, after restoring the references.
@@ -0,0 +1,32 @@
1
+ # 02 - Drop `Fontname` Autoload (Dead Code)
2
+
3
+ ## Status: ✅ DONE (2026-06-27)
4
+
5
+ ## What was done
6
+
7
+ 1. Removed `autoload :Fontname, "lutaml/uml/fontname"` from
8
+ `lib/lutaml/uml.rb`.
9
+ 2. Added deprecation header to `lib/lutaml/uml/fontname.rb`.
10
+ 3. **Kept** `autoload :Group` — `Document` uses it
11
+ (`attribute :groups, Group, collection: true`). The original TODO.namespace
12
+ audit was incorrect.
13
+
14
+ ## Source file (kept, not deleted)
15
+
16
+ - `lib/lutaml/uml/fontname.rb` — deprecated header added; file retained per
17
+ never-delete-source rule.
18
+
19
+ ## Verification
20
+
21
+ ```bash
22
+ grep -n 'Fontname' lib/lutaml/uml.rb # → no autoload
23
+ grep -n 'Group' lib/lutaml/uml.rb # → autoload still present (used by Document)
24
+ bundle exec rspec # → 754 examples, 0 failures, 103 pending
25
+ ```
26
+
27
+ ## Lesson
28
+
29
+ The audit "Group is unused" was based on grepping for `:Group,` as a type.
30
+ The actual usage is `Group, collection: true` (no leading colon) in
31
+ `lib/lutaml/uml/document.rb:11`. Future dead-code audits must check both
32
+ `:Symbol` and bare constant forms.
@@ -0,0 +1,56 @@
1
+ # 03 - Add Missing Behavioral Specs
2
+
3
+ ## Status: NOT YET APPLIED
4
+
5
+ ## Problem
6
+
7
+ Critical behavioral coverage gaps in `lutaml-uml`:
8
+
9
+ ### High-priority gaps
10
+ 1. `spec/lutaml/uml/uml_class_spec.rb` — only 57 lines, tests YAML
11
+ serialization only. Missing: association management, attribute handling,
12
+ generalization, stereotypes, constraints.
13
+ 2. `spec/lutaml/uml_repository/static_site/serializers/inheritance_resolver_spec.rb`
14
+ — only tests "returns empty for no generalization." Missing: actual
15
+ multi-level inheritance attribute/association flow.
16
+ 3. No spec for circular inheritance detection with actual circular graphs.
17
+ 4. `spec/lutaml/uml_repository/validators/repository_validator_spec.rb` —
18
+ private method tests only assert `result.is_a?(Array)`, never assert
19
+ specific errors found.
20
+ 5. No spec for `Repository#from_file_cached` cache invalidation behavior.
21
+
22
+ ### Edge cases missing
23
+ - Self-referential associations
24
+ - Diamond inheritance
25
+ - Special regex characters in search
26
+
27
+ ### Silent skip patterns to fix
28
+ These patterns silently pass tests when their precondition fails. They should
29
+ either use `skip` with a reason, or guarantee the test data:
30
+
31
+ - `spec/lutaml/uml_repository/queries/class_query_spec.rb` — `next unless`
32
+ silently passes ~9 tests
33
+ - `spec/lutaml/uml_repository/queries/inheritance_query_spec.rb` — `next unless`
34
+ silently passes ~4 tests
35
+ - `spec/lutaml/uml_repository/parsing/full_parsing_spec.rb` — `next if ...`
36
+ silently passes ~7 tests
37
+
38
+ ## Source
39
+
40
+ Migrated from `TODO.refactor/12-add-missing-behavioral-specs.md`.
41
+
42
+ ## Fix
43
+
44
+ 1. Expand `uml_class_spec.rb` to cover the metamodel API surface
45
+ (associations, attributes, generalization, stereotypes).
46
+ 2. Replace `next unless` patterns with either:
47
+ - `skip "reason"` if the data is sometimes unavailable, OR
48
+ - A guaranteed fixture (programmatic document via `create_simple_test_document`)
49
+ 3. Add circular inheritance fixture (programmatic).
50
+ 4. Add cache invalidation spec for `from_file_cached` using `sleep` + `touch`
51
+ to control mtimes.
52
+ 5. Assert specific validator errors, not just result types.
53
+
54
+ ## Out of scope (deferred)
55
+
56
+ Regenerating `.lur` fixtures via the `ea` gem — those are tracked separately.
@@ -0,0 +1,34 @@
1
+ # 04 - Finish Replacing Double-Based Specs
2
+
3
+ ## Status: LOW PRIORITY — residue only
4
+
5
+ ## Problem
6
+
7
+ The bulk of the double-elimination work is done (see
8
+ `TODO.refactor/11-rewrite-double-based-specs.md` history). What remains:
9
+
10
+ - `spec/lutaml/uml_repository/presenters/diagram_presenter_spec.rb` lines 7-27:
11
+ top-level repository/diagram doubles shared by many tests. Complex to
12
+ replace without rewriting the SVG-rendering assertions.
13
+ - 18 total `double()` calls remain in lutaml-uml specs.
14
+
15
+ These don't cause failures and aren't blocking.
16
+
17
+ ## Source
18
+
19
+ Migrated from `TODO.refactor/11-rewrite-double-based-specs.md`.
20
+
21
+ ## Fix
22
+
23
+ For each remaining double:
24
+ 1. If the doubled interface is a real UML model — instantiate the real model
25
+ with the needed attributes.
26
+ 2. If the doubled interface is a struct/DTO — replace with
27
+ `Struct.new(:attr1, :attr2).new(val1, val2)`.
28
+ 3. Test behavior, not interactions.
29
+
30
+ ## Verification
31
+
32
+ ```bash
33
+ grep -rn 'double(' spec/ | wc -l # target: 0
34
+ ```
@@ -0,0 +1,31 @@
1
+ # 05 - Remove Dead Autoload Modules in UmlRepository
2
+
3
+ ## Status: DONE (2026-06-27)
4
+
5
+ ## Problem
6
+ `lib/lutaml/uml_repository.rb` had two pieces of dead code:
7
+
8
+ 1. `module UmlRepositoryComponents` — autoloaded `IndexBuilder`,
9
+ `StatisticsCalculator`, `PackageExporter`, `PackageLoader` from the
10
+ same paths as the top-level autoloads already declared above it.
11
+ Pure DRY violation: no caller ever referenced
12
+ `Lutaml::UmlRepository::UmlRepositoryComponents::*`. The classes are
13
+ accessed via the top-level `Lutaml::UmlRepository::IndexBuilder` etc.
14
+
15
+ 2. `module WebUi` with `autoload :App,
16
+ "lutaml/uml_repository/web_ui/app"` — the target file does not
17
+ exist. Any attempt to access `Lutaml::UmlRepository::WebUi::App`
18
+ would raise `LoadError` at runtime. No spec or lib code references
19
+ this module.
20
+
21
+ ## Fix
22
+ Deleted both module blocks from `lib/lutaml/uml_repository.rb`. No
23
+ behavior change (the autoloads were never triggered). The real
24
+ IndexBuilder/StatisticsCalculator/PackageExporter/PackageLoader
25
+ autoloads at the top of the file are unchanged.
26
+
27
+ ## Verification
28
+ - `bundle exec rspec` in lutaml-uml: 754 examples, 0 failures, 103
29
+ pending (unchanged from baseline)
30
+ - `grep -rn UmlRepositoryComponents lib/ spec/` → no results
31
+ - `grep -rn "WebUi\b" lib/ spec/` → no results
@@ -0,0 +1,46 @@
1
+ # 06 - Clean Up Phantom Requires and Unused gemspec Dependencies
2
+
3
+ ## Status: DONE (2026-06-29)
4
+
5
+ ## Problem
6
+ `lib/lutaml/uml_repository.rb` declared two top-level requires for gems
7
+ that no code in `lib/` actually uses:
8
+
9
+ ```ruby
10
+ require "liquid" # no Liquid:: namespace reference anywhere in lib/
11
+ require "lutaml/path" # no Lutaml::Path usage anywhere in lib/
12
+ ```
13
+
14
+ The gemspec mirrored this with two corresponding runtime dependencies:
15
+
16
+ ```ruby
17
+ spec.add_dependency "liquid"
18
+ spec.add_dependency "lutaml-path"
19
+ ```
20
+
21
+ Both were residue from a Liquid-based rendering pipeline that was
22
+ replaced by the Vue IIFE strategy (`Output::VueInlinedStrategy`). The
23
+ `templates/static_site/*.liquid` files themselves remain on disk but
24
+ nothing loads them at runtime — see [[07-unused-liquid-templates]].
25
+
26
+ ## Fix
27
+ - Removed `require "liquid"` and `require "lutaml/path"` from the top
28
+ of `lib/lutaml/uml_repository.rb`.
29
+ - Removed `spec.add_dependency "liquid"` and
30
+ `spec.add_dependency "lutaml-path"` from `lutaml-uml.gemspec`.
31
+
32
+ No behavior change. Both gems were load-time phantom requires with no
33
+ runtime callers.
34
+
35
+ ## Verification
36
+ - `find lib -name '*.rb' -print0 | xargs -0 grep -l 'Liquid::'` → no results
37
+ - `find lib -name '*.rb' -print0 | xargs -0 grep -l 'Lutaml::Path'` → no results
38
+ - `bundle exec rspec` in lutaml-uml: 754 examples, 0 failures, 103 pending
39
+ (unchanged from baseline)
40
+
41
+ ## Lesson
42
+ A `require` at the top of a file is a load-time dependency commitment.
43
+ When the code that used the required library is removed or replaced,
44
+ the require statement is often left behind, silently pulling in gems
45
+ that no caller actually needs. Audit requires the same way you audit
46
+ method calls.
@@ -0,0 +1,42 @@
1
+ # 07 - Unused Liquid Templates (Flag, Don't Delete)
2
+
3
+ ## Status: FLAGGED — preserved per never-delete-source rule
4
+
5
+ ## What
6
+ `templates/static_site/` contains 248K of `.liquid` template files:
7
+
8
+ ```
9
+ templates/static_site/multi_file.liquid
10
+ templates/static_site/single_file.liquid
11
+ templates/static_site/components/{tree_node,diagram_viewer,diagram_list,
12
+ content,header,package_details,sidebar,class_details,...}.liquid
13
+ ```
14
+
15
+ These were the rendering templates for a Liquid-based static site
16
+ generator. That pipeline was replaced by the Vue 3 IIFE strategy
17
+ (`lib/lutaml/uml_repository/static_site/output/vue_inlined_strategy.rb`).
18
+ The current generator (`static_site/generator.rb`) does not load any
19
+ `.liquid` files and does not reference `Liquid::` anywhere.
20
+
21
+ `grep -rln 'static_site.*liquid\|\.liquid' lib/` → no results.
22
+
23
+ ## Why not delete
24
+ Per the global rule "NEVER DELETE source files. ANY source file." The
25
+ templates were authored source; their derived output (the Vue strategy)
26
+ existing does not make them disposable. They may be repurposed for a
27
+ future Liquid-rendered export path, kept as reference for templating
28
+ patterns, or moved to a separate gem.
29
+
30
+ ## Suggested resolution (user decision required)
31
+ Three options, none taken yet:
32
+
33
+ 1. **Keep in place** — accept that `templates/` ships unused source.
34
+ Zero code change; just document.
35
+ 2. **Exclude from gem package** — add to gemspec's `spec.files` reject
36
+ list. Source files stay in git but `gem install` no longer ships
37
+ them. Minimal blast radius.
38
+ 3. **Move to `archive/templates/`** — preserves source on disk, removes
39
+ from primary tree. Requires a small `spec.files` adjustment.
40
+
41
+ Until the user picks one, leave the files untouched and the gemspec
42
+ unchanged.
@@ -0,0 +1,60 @@
1
+ # 08 - Broken / Misplaced Executables (Flag, Don't Delete)
2
+
3
+ ## Status: FLAGGED — gemspec ships broken scripts
4
+
5
+ ## What
6
+ The gemspec declares `bindir = "exe"` and
7
+ `spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }`,
8
+ which picks up all four files in `exe/`. Two are broken; two are
9
+ unrelated to lutaml-uml's actual purpose.
10
+
11
+ | File | Status | Issue |
12
+ |---|---|---|
13
+ | `exe/lutaml` | BROKEN | `require "lutaml"` — no `lib/lutaml.rb` exists. `require "lutaml/cli"` — `lib/lutaml/cli.rb` was removed in commit `e7b5e68` (the EA-extraction refactor) because it was incorrectly classified as EA-specific. |
14
+ | `exe/lutaml-sysml` | BROKEN | `require "reeper"` (long-orphaned gem), plus same `lutaml/cli` issue. |
15
+ | `exe/lutaml-wsd2uml` | UNRELATED | Standalone PlantUML→LutaML converter. No `lutaml/uml` or `lutaml/uml_repository` deps. Belongs in a separate `lutaml-wsd2uml` gem or in `lutaml-lml`. |
16
+ | `exe/lutaml-yaml2uml` | UNRELATED | Standalone YAML→LutaML converter. Same — no lib deps, wrong gem. |
17
+
18
+ ## Why this matters
19
+ `gem install lutaml-uml` currently installs four commands onto the
20
+ user's PATH. Two of them crash immediately on invocation. The other
21
+ two work but are misleading — they suggest the gem does PlantUML and
22
+ YAML conversion, which it does not.
23
+
24
+ ## Root cause
25
+ Commit `e7b5e68` (refactor: remove EA-specific code from lutaml-uml)
26
+ removed `lib/lutaml/cli.rb` along with `lib/lutaml/cli/` because the
27
+ CLI was thought to be EA-flavored. In fact the CLI was a UML/Repository
28
+ CLI (`thor`-based, drove `Lutaml::UmlRepository::Repository`). It should
29
+ have stayed in `lutaml-uml`, or been moved to `lutaml-lml`. The exes
30
+ that called it were left in place, leaving the gem half-gutted.
31
+
32
+ ## Why not delete
33
+ - **Never-delete-source rule** — these exes are source files; deleting
34
+ them is destructive and irreversible.
35
+ - **Scope uncertainty** — the right fix depends on user intent:
36
+ - Restore the CLI to lutaml-uml (revert part of e7b5e68)?
37
+ - Move the CLI to lutaml-lml?
38
+ - Replace with a new minimal `lutaml-uml` CLI?
39
+ - Just remove the broken exes from the gemspec (keep files in git)?
40
+
41
+ ## Suggested resolution (user decision required)
42
+ Minimal safe option until user picks a path:
43
+
44
+ 1. Update gemspec to NOT ship the broken/unrelated executables:
45
+ ```ruby
46
+ spec.executables = [] # none of the existing exes are functional
47
+ ```
48
+ Files stay in git; `gem install` no longer puts broken scripts on PATH.
49
+
50
+ OR
51
+
52
+ 2. Restore `lib/lutaml/cli.rb` from `git show e7b5e68^:lib/lutaml/cli.rb`
53
+ and re-wire `exe/lutaml` to drive it. (The CLI uses `lutaml/converter`
54
+ which would also need to be restored — non-trivial.)
55
+
56
+ Either way, the standalone `exe/lutaml-wsd2uml` and `exe/lutaml-yaml2uml`
57
+ scripts don't belong in this gem. They should move to `lutaml-lml` or a
58
+ dedicated converter gem, regardless of which CLI option is chosen.
59
+
60
+ No action taken yet — waiting on user direction.
@@ -0,0 +1,58 @@
1
+ # Package Metadata Configuration Example
2
+ #
3
+ # This file demonstrates how to configure package metadata for use with
4
+ # LutaML's PackageMetadata system.
5
+ #
6
+ # Package metadata enables external configuration of:
7
+ # - XSD generation: xmlns, targetNamespace, schemaLocation
8
+ # - Documentation: Package descriptions
9
+ # - Styling: Package-specific styling rules
10
+ # - Validation: Package constraints
11
+ #
12
+ # Format: YAML with "packages" root key
13
+
14
+ packages:
15
+ # Exact package path match
16
+ "ModelRoot::i-UR::Urban Planning ADE 3.2::uro":
17
+ xmlns: "http://www.kantei.go.jp/jp/singi/tiiki/toshisaisei/itoshisaisei/iur/uro/2.0"
18
+ targetNamespace: "http://www.kantei.go.jp/jp/singi/tiiki/toshisaisei/itoshisaisei/iur/uro/2.0"
19
+ schemaLocation: "../../schemas/uro/2.0/urbanObject.xsd"
20
+ prefix: "uro"
21
+ documentation: |
22
+ Urban Object package containing classes for urban planning and
23
+ infrastructure modeling in PLATEAU i-UR standard.
24
+ version: "2.0"
25
+
26
+ # Another exact match
27
+ "ModelRoot::CityGML2.0::Core":
28
+ xmlns: "http://www.opengis.net/citygml/2.0"
29
+ targetNamespace: "http://www.opengis.net/citygml/2.0/core"
30
+ schemaLocation: "http://schemas.opengis.net/citygml/2.0/cityGMLBase.xsd"
31
+ prefix: "core"
32
+ documentation: "CityGML 2.0 Core module - fundamental city model classes"
33
+
34
+ # Wildcard pattern: matches any direct child of ModelRoot::CityGML2.0
35
+ "ModelRoot::CityGML2.0::*":
36
+ xmlns: "http://www.opengis.net/citygml/2.0"
37
+ prefix: "citygml"
38
+ documentation: "Default CityGML 2.0 namespace"
39
+
40
+ # Multi-level wildcard: matches ModelRoot::<anything>::Common
41
+ "ModelRoot::*::Common":
42
+ documentation: "Common elements package"
43
+ category: "utilities"
44
+
45
+ # Package with custom metadata
46
+ "ModelRoot::CustomPackage":
47
+ xmlns: "http://example.com/custom/1.0"
48
+ prefix: "custom"
49
+ author: "Your Organization"
50
+ license: "Apache-2.0"
51
+ contact: "info@example.com"
52
+
53
+ # Notes:
54
+ # 1. Exact matches take precedence over wildcard patterns
55
+ # 2. Multiple wildcards can match the same package path
56
+ # 3. Metadata from all matches is merged (exact match wins)
57
+ # 4. Any custom keys are supported beyond the standard ones
58
+ # 5. Package paths use "::" as separator (UML qualified name format)