@blockml/bom 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (130) hide show
  1. package/blocks/org/blockml/bml/bom/Library.bml +153 -0
  2. package/blocks/org/blockml/bml/bom/README.bml +55 -0
  3. package/blocks/org/blockml/bml/bom/UrmodellType.bml +39 -0
  4. package/blocks/org/blockml/bml/bom/api/ParseOptions.bml +42 -0
  5. package/blocks/org/blockml/bml/bom/api/ParseResult.bml +45 -0
  6. package/blocks/org/blockml/bml/bom/api/SerializeOptions.bml +42 -0
  7. package/blocks/org/blockml/bml/bom/api/SerializeResult.bml +45 -0
  8. package/blocks/org/blockml/bml/bom/api/TypeRegistryReader.bml +34 -0
  9. package/blocks/org/blockml/bml/bom/api/ValidateOptions.bml +50 -0
  10. package/blocks/org/blockml/bml/bom/api/ValidateResult.bml +46 -0
  11. package/blocks/org/blockml/bml/bom/block/AliasEntry.bml +51 -0
  12. package/blocks/org/blockml/bml/bom/block/BlockDefinition.bml +136 -0
  13. package/blocks/org/blockml/bml/bom/block/ChangelogEntry.bml +48 -0
  14. package/blocks/org/blockml/bml/bom/block/DocumentationExample.bml +57 -0
  15. package/blocks/org/blockml/bml/bom/block/DocumentationProseEntry.bml +51 -0
  16. package/blocks/org/blockml/bml/bom/block/DocumentationReference.bml +72 -0
  17. package/blocks/org/blockml/bml/bom/block/GenericType.bml +45 -0
  18. package/blocks/org/blockml/bml/bom/block/KeywordEntry.bml +51 -0
  19. package/blocks/org/blockml/bml/bom/block/TypeReferenceEntityInstance.bml +45 -0
  20. package/blocks/org/blockml/bml/bom/capability/BomEquals.bml +45 -0
  21. package/blocks/org/blockml/bml/bom/capability/StripProvenance.bml +42 -0
  22. package/blocks/org/blockml/bml/bom/common/CharacterDataForm.bml +39 -0
  23. package/blocks/org/blockml/bml/bom/common/Diagnostic.bml +48 -0
  24. package/blocks/org/blockml/bml/bom/common/DiagnosticSeverity.bml +39 -0
  25. package/blocks/org/blockml/bml/bom/common/MemberSectionName.bml +39 -0
  26. package/blocks/org/blockml/bml/bom/common/MetadataElementTrivia.bml +39 -0
  27. package/blocks/org/blockml/bml/bom/common/SourceInfo.bml +51 -0
  28. package/blocks/org/blockml/bml/bom/common/SourceLocation.bml +51 -0
  29. package/blocks/org/blockml/bml/bom/common/XmlNodeKind.bml +39 -0
  30. package/blocks/org/blockml/bml/bom/common/XmlRenderingBlock.bml +39 -0
  31. package/blocks/org/blockml/bml/bom/common/XmlRenderingMember.bml +48 -0
  32. package/blocks/org/blockml/bml/bom/common/XmlTrivia.bml +42 -0
  33. package/blocks/org/blockml/bml/bom/composition/BlockInstance.bml +72 -0
  34. package/blocks/org/blockml/bml/bom/composition/BlockInstanceNode.bml +49 -0
  35. package/blocks/org/blockml/bml/bom/composition/CompositionNode.bml +35 -0
  36. package/blocks/org/blockml/bml/bom/composition/CompositionTemplate.bml +48 -0
  37. package/blocks/org/blockml/bml/bom/composition/DirectiveAttribute.bml +35 -0
  38. package/blocks/org/blockml/bml/bom/composition/EachDirective.bml +49 -0
  39. package/blocks/org/blockml/bml/bom/composition/IfDirective.bml +43 -0
  40. package/blocks/org/blockml/bml/bom/composition/InstanceAggregationComposition.bml +42 -0
  41. package/blocks/org/blockml/bml/bom/composition/UnlessDirective.bml +43 -0
  42. package/blocks/org/blockml/bml/bom/composition/VirtualContainerNode.bml +49 -0
  43. package/blocks/org/blockml/bml/bom/composition/WithBinding.bml +42 -0
  44. package/blocks/org/blockml/bml/bom/composition/WithDirective.bml +43 -0
  45. package/blocks/org/blockml/bml/bom/document/BomDocument.bml +49 -0
  46. package/blocks/org/blockml/bml/bom/documentation/AbstractionPrinciple.bml +46 -0
  47. package/blocks/org/blockml/bml/bom/documentation/ArchitectureOverview.bml +49 -0
  48. package/blocks/org/blockml/bml/bom/documentation/AuthoredSurfaceTable.bml +47 -0
  49. package/blocks/org/blockml/bml/bom/documentation/CalibratorExample.bml +53 -0
  50. package/blocks/org/blockml/bml/bom/documentation/CompositionDirectives.bml +45 -0
  51. package/blocks/org/blockml/bml/bom/documentation/DesignDecisions.bml +64 -0
  52. package/blocks/org/blockml/bml/bom/documentation/InstanceIdRules.bml +45 -0
  53. package/blocks/org/blockml/bml/bom/documentation/Introduction.bml +50 -0
  54. package/blocks/org/blockml/bml/bom/documentation/LayerSeparation.bml +47 -0
  55. package/blocks/org/blockml/bml/bom/documentation/MemberValueSemantics.bml +48 -0
  56. package/blocks/org/blockml/bml/bom/documentation/PackageOwnership.bml +56 -0
  57. package/blocks/org/blockml/bml/bom/documentation/PublicApi.bml +59 -0
  58. package/blocks/org/blockml/bml/bom/documentation/RelatedDiagnostics.bml +51 -0
  59. package/blocks/org/blockml/bml/bom/documentation/ScopeExclusions.bml +47 -0
  60. package/blocks/org/blockml/bml/bom/documentation/SubBlockAndEmbeddedBlocks.bml +45 -0
  61. package/blocks/org/blockml/bml/bom/documentation/TypeExpressionsOverview.bml +47 -0
  62. package/blocks/org/blockml/bml/bom/documentation/ValidationResponsibilities.bml +51 -0
  63. package/blocks/org/blockml/bml/bom/documentation/VersionRules.bml +41 -0
  64. package/blocks/org/blockml/bml/bom/documentation/XmlComments.bml +47 -0
  65. package/blocks/org/blockml/bml/bom/member/AggregationDefinition.bml +58 -0
  66. package/blocks/org/blockml/bml/bom/member/AssociationDefinition.bml +46 -0
  67. package/blocks/org/blockml/bml/bom/member/CapabilityDefinition.bml +52 -0
  68. package/blocks/org/blockml/bml/bom/member/ConstrainableDefinition.bml +39 -0
  69. package/blocks/org/blockml/bml/bom/member/EmbeddedExpression.bml +45 -0
  70. package/blocks/org/blockml/bml/bom/member/ImplementationBlock.bml +51 -0
  71. package/blocks/org/blockml/bml/bom/member/MemberDefinition.bml +35 -0
  72. package/blocks/org/blockml/bml/bom/member/MemberDefinitionBase.bml +90 -0
  73. package/blocks/org/blockml/bml/bom/member/PropertyDefinition.bml +61 -0
  74. package/blocks/org/blockml/bml/bom/member/PropertyValueEntry.bml +42 -0
  75. package/blocks/org/blockml/bml/bom/type/AnonymousStructType.bml +43 -0
  76. package/blocks/org/blockml/bml/bom/type/GenericParameterReference.bml +43 -0
  77. package/blocks/org/blockml/bml/bom/type/InstanceConfiguration.bml +42 -0
  78. package/blocks/org/blockml/bml/bom/type/Multiplicity.bml +42 -0
  79. package/blocks/org/blockml/bml/bom/type/NamedTypeReference.bml +52 -0
  80. package/blocks/org/blockml/bml/bom/type/SelfTypeReference.bml +40 -0
  81. package/blocks/org/blockml/bml/bom/type/StructField.bml +42 -0
  82. package/blocks/org/blockml/bml/bom/type/TypeDescriptor.bml +37 -0
  83. package/blocks/org/blockml/bml/bom/type/TypeExpression.bml +35 -0
  84. package/blocks/org/blockml/bml/bom/type/UnionTypeExpression.bml +43 -0
  85. package/blocks/org/blockml/bml/bom/value/Address.bml +54 -0
  86. package/blocks/org/blockml/bml/bom/value/AddressValue.bml +43 -0
  87. package/blocks/org/blockml/bml/bom/value/ExpressionValue.bml +49 -0
  88. package/blocks/org/blockml/bml/bom/value/LiteralValue.bml +49 -0
  89. package/blocks/org/blockml/bml/bom/value/MemberValue.bml +35 -0
  90. package/dist/equals.d.ts +10 -0
  91. package/dist/equals.d.ts.map +1 -0
  92. package/dist/equals.js +94 -0
  93. package/dist/equals.js.map +1 -0
  94. package/dist/index.d.ts +10 -0
  95. package/dist/index.d.ts.map +1 -0
  96. package/dist/index.js +2 -0
  97. package/dist/index.js.map +1 -0
  98. package/dist/types/api.d.ts +50 -0
  99. package/dist/types/api.d.ts.map +1 -0
  100. package/dist/types/api.js +2 -0
  101. package/dist/types/api.js.map +1 -0
  102. package/dist/types/block-definition.d.ts +150 -0
  103. package/dist/types/block-definition.d.ts.map +1 -0
  104. package/dist/types/block-definition.js +2 -0
  105. package/dist/types/block-definition.js.map +1 -0
  106. package/dist/types/common.d.ts +60 -0
  107. package/dist/types/common.d.ts.map +1 -0
  108. package/dist/types/common.js +2 -0
  109. package/dist/types/common.js.map +1 -0
  110. package/dist/types/composition.d.ts +77 -0
  111. package/dist/types/composition.d.ts.map +1 -0
  112. package/dist/types/composition.js +2 -0
  113. package/dist/types/composition.js.map +1 -0
  114. package/dist/types/document.d.ts +12 -0
  115. package/dist/types/document.d.ts.map +1 -0
  116. package/dist/types/document.js +2 -0
  117. package/dist/types/document.js.map +1 -0
  118. package/dist/types/member-definition.d.ts +96 -0
  119. package/dist/types/member-definition.d.ts.map +1 -0
  120. package/dist/types/member-definition.js +2 -0
  121. package/dist/types/member-definition.js.map +1 -0
  122. package/dist/types/type-expression.d.ts +42 -0
  123. package/dist/types/type-expression.d.ts.map +1 -0
  124. package/dist/types/type-expression.js +2 -0
  125. package/dist/types/type-expression.js.map +1 -0
  126. package/dist/types/values.d.ts +35 -0
  127. package/dist/types/values.d.ts.map +1 -0
  128. package/dist/types/values.js +2 -0
  129. package/dist/types/values.js.map +1 -0
  130. package/package.json +40 -0
@@ -0,0 +1,64 @@
1
+ <!--
2
+ BOM Documentation — DesignDecisions
3
+ FQN: org.blockml.bml.bom.documentation.DesignDecisions
4
+ -->
5
+ <block
6
+ xmlns="http://blockml.org/bml"
7
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
8
+ xsi:schemaLocation="http://blockml.org/bml https://blockml.org/schemas/bml.xsd
9
+ "
10
+ xmlns:blockml="org.blockml.bml"
11
+ xmlns:bom="org.blockml.bml.bom"
12
+ xmlns:bomapi="org.blockml.bml.bom.api"
13
+ xmlns:bomblock="org.blockml.bml.bom.block"
14
+ xmlns:bomcap="org.blockml.bml.bom.capability"
15
+ xmlns:bomcommon="org.blockml.bml.bom.common"
16
+ xmlns:bomcomp="org.blockml.bml.bom.composition"
17
+ xmlns:bomdoc="org.blockml.bml.bom.document"
18
+ xmlns:bomdocumentation="org.blockml.bml.bom.documentation"
19
+ xmlns:bommember="org.blockml.bml.bom.member"
20
+ xmlns:bomtype="org.blockml.bml.bom.type"
21
+ xmlns:bomvalue="org.blockml.bml.bom.value"
22
+ xmlns:core="org.blockml.bml.core"
23
+ xmlns:def="org.blockml.bml.definition"
24
+ xmlns:type="org.blockml.bml.type"
25
+ xmlns:doc="org.blockml.bml.documentation">
26
+
27
+ <name>DesignDecisions</name>
28
+ <type>bomdocumentation:DesignDecisions</type>
29
+ <baseType>core:Documentation</baseType>
30
+ <is>Normative Urmodell design decisions</is>
31
+
32
+ <documentation>Immutability: Urmodell (BomDocument) is immutable after parse or BomBuilder.seal().
33
+ No utility or renderer writes derived data back. Validator/renderers use pragmatic forks.
34
+
35
+ Builder / LSP reuse: construction-friendly, provenance-agnostic interfaces. Parser and
36
+ BomBuilder produce the same graph. Source spans optional on types but populated by parser.
37
+
38
+ Member inheritance: utility lookup only. BOM stores declared members per block.
39
+ resolveEffectiveMembers() → EffectiveMemberSet — never flattened into BOM.
40
+
41
+ Capabilities: stored in BOM; no synthetic getter/setter generation; renderer interprets.
42
+
43
+ Member identity: uniqueness by resolved (namespace, name).
44
+
45
+ Composition: nested inside aggregation on definitions only; instances open aggregations directly.
46
+
47
+ Sub-Blocks: nested in BlockDefinition.subBlocks[]; FQN = parent.type + "." + name.
48
+
49
+ Embedded Blocks: root embeddedBlocks[] only — virtual .bml files; FQN = type element.
50
+
51
+ Directives: flow-control bml:* → directives[] unexpanded. bml:id/version → BlockInstance fields.
52
+ bml:xml → first-class xmlRendering (not directives[]).
53
+
54
+ XML comments (B11): bind to following element; trailing on next line + blank line (B22).
55
+ Whitespace (B13): not on Urmodell. Dual placement (D9): store authoredPlacement.
56
+ Visibility (B14): logical name in BOM; emit _/__ from visibility.
57
+
58
+ Instance version: bml:version optional exact assert on external refs (BML_UNKNOWN_VERSION).
59
+ Definition version: effectiveBlockVersion = own version | library.version | error.
60
+ Instance id: bml:id only on BlockInstance.id; no auto-ID in BomDocument; bml:each requires id.
61
+
62
+ Property values: deep copy only — never linked. FQN::id cross-instance refs only on associations.</documentation>
63
+
64
+ </block>
@@ -0,0 +1,45 @@
1
+ <!--
2
+ BOM Documentation — InstanceIdRules
3
+ FQN: org.blockml.bml.bom.documentation.InstanceIdRules
4
+ -->
5
+ <block
6
+ xmlns="http://blockml.org/bml"
7
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
8
+ xsi:schemaLocation="http://blockml.org/bml https://blockml.org/schemas/bml.xsd
9
+ "
10
+ xmlns:blockml="org.blockml.bml"
11
+ xmlns:bom="org.blockml.bml.bom"
12
+ xmlns:bomapi="org.blockml.bml.bom.api"
13
+ xmlns:bomblock="org.blockml.bml.bom.block"
14
+ xmlns:bomcap="org.blockml.bml.bom.capability"
15
+ xmlns:bomcommon="org.blockml.bml.bom.common"
16
+ xmlns:bomcomp="org.blockml.bml.bom.composition"
17
+ xmlns:bomdoc="org.blockml.bml.bom.document"
18
+ xmlns:bomdocumentation="org.blockml.bml.bom.documentation"
19
+ xmlns:bommember="org.blockml.bml.bom.member"
20
+ xmlns:bomtype="org.blockml.bml.bom.type"
21
+ xmlns:bomvalue="org.blockml.bml.bom.value"
22
+ xmlns:core="org.blockml.bml.core"
23
+ xmlns:def="org.blockml.bml.definition"
24
+ xmlns:type="org.blockml.bml.type"
25
+ xmlns:doc="org.blockml.bml.documentation">
26
+
27
+ <name>InstanceIdRules</name>
28
+ <type>bomdocumentation:InstanceIdRules</type>
29
+ <baseType>core:Documentation</baseType>
30
+ <is>bml:id identity and cross-instance references</is>
31
+
32
+ <documentation>bml:id identifies child within parent composition tree. No FQN fallback.
33
+
34
+ Pipeline: Parse stores authored id → Validate cross-refs → Expand directives →
35
+ Resolve/auto-ID static unreferenced children → Render.
36
+
37
+ Auto-IDs NOT in BomDocument — only on expanded composition tree.
38
+ Referenced instances and bml:each require explicit bml:id (BML_MISSING_ID).
39
+
40
+ Auto-ID: hash(typeFqn, sibling index post-expansion, parent partId) → 6 hex chars.
41
+
42
+ Qualified FQN::id: target in public aggregation, literal id, literal reference token.
43
+ Same-document unqualified ids resolve within visible aggregations.</documentation>
44
+
45
+ </block>
@@ -0,0 +1,50 @@
1
+ <!--
2
+ BOM Documentation — Introduction
3
+ FQN: org.blockml.bml.bom.documentation.Introduction
4
+ -->
5
+ <block
6
+ xmlns="http://blockml.org/bml"
7
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
8
+ xsi:schemaLocation="http://blockml.org/bml https://blockml.org/schemas/bml.xsd
9
+ "
10
+ xmlns:blockml="org.blockml.bml"
11
+ xmlns:bom="org.blockml.bml.bom"
12
+ xmlns:bomapi="org.blockml.bml.bom.api"
13
+ xmlns:bomblock="org.blockml.bml.bom.block"
14
+ xmlns:bomcap="org.blockml.bml.bom.capability"
15
+ xmlns:bomcommon="org.blockml.bml.bom.common"
16
+ xmlns:bomcomp="org.blockml.bml.bom.composition"
17
+ xmlns:bomdoc="org.blockml.bml.bom.document"
18
+ xmlns:bomdocumentation="org.blockml.bml.bom.documentation"
19
+ xmlns:bommember="org.blockml.bml.bom.member"
20
+ xmlns:bomtype="org.blockml.bml.bom.type"
21
+ xmlns:bomvalue="org.blockml.bml.bom.value"
22
+ xmlns:core="org.blockml.bml.core"
23
+ xmlns:def="org.blockml.bml.definition"
24
+ xmlns:type="org.blockml.bml.type"
25
+ xmlns:doc="org.blockml.bml.documentation">
26
+
27
+ <name>Introduction</name>
28
+ <type>bomdocumentation:Introduction</type>
29
+ <baseType>core:Documentation</baseType>
30
+ <is>Purpose and scope of the BOM Urmodell package</is>
31
+
32
+ <documentation>The @blockml/bom package defines the formal Block Object Model (Urmodell) — canonical,
33
+ immutable, lossless parse/build results produced by @blockml/parser (or V3 BomBuilder.seal())
34
+ and consumed by serializer, validator, compiler, LSP, and render targets.
35
+
36
+ This library (org.blockml.bml.bom.*) is the SSOT. TypeScript in packages/bom/src/ implements
37
+ it. Parity tests in packages/bom/test/ verify BML ↔ TS alignment.
38
+
39
+ Related reading outside this package:
40
+ • Conceptual foundations — 01_bom_core.md
41
+ • BML authoring syntax — org.blockml.bml.documentation.* (@blockml/core)
42
+ • BML → BOM mapping — @blockml/parser (13_bml_to_bom_mapping.md)
43
+ • Expression AST — 10_expression_language.md</documentation>
44
+
45
+ <references>
46
+ <see type="bomdocumentation:LayerSeparation" relation="ReadNext"></see>
47
+ <see type="bomdocumentation:ArchitectureOverview" relation="SeeAlso"></see>
48
+ </references>
49
+
50
+ </block>
@@ -0,0 +1,47 @@
1
+ <!--
2
+ BOM Documentation — LayerSeparation
3
+ FQN: org.blockml.bml.bom.documentation.LayerSeparation
4
+ -->
5
+ <block
6
+ xmlns="http://blockml.org/bml"
7
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
8
+ xsi:schemaLocation="http://blockml.org/bml https://blockml.org/schemas/bml.xsd
9
+ "
10
+ xmlns:blockml="org.blockml.bml"
11
+ xmlns:bom="org.blockml.bml.bom"
12
+ xmlns:bomapi="org.blockml.bml.bom.api"
13
+ xmlns:bomblock="org.blockml.bml.bom.block"
14
+ xmlns:bomcap="org.blockml.bml.bom.capability"
15
+ xmlns:bomcommon="org.blockml.bml.bom.common"
16
+ xmlns:bomcomp="org.blockml.bml.bom.composition"
17
+ xmlns:bomdoc="org.blockml.bml.bom.document"
18
+ xmlns:bomdocumentation="org.blockml.bml.bom.documentation"
19
+ xmlns:bommember="org.blockml.bml.bom.member"
20
+ xmlns:bomtype="org.blockml.bml.bom.type"
21
+ xmlns:bomvalue="org.blockml.bml.bom.value"
22
+ xmlns:core="org.blockml.bml.core"
23
+ xmlns:def="org.blockml.bml.definition"
24
+ xmlns:type="org.blockml.bml.type"
25
+ xmlns:doc="org.blockml.bml.documentation">
26
+
27
+ <name>LayerSeparation</name>
28
+ <type>bomdocumentation:LayerSeparation</type>
29
+ <baseType>core:Documentation</baseType>
30
+ <is>Urmodell types vs BML definition meta-model</is>
31
+
32
+ <documentation>Two layers share names but differ in semantics:
33
+
34
+ org.blockml.bml.definition.* (@blockml/core) — BML meta-model. Describes what block
35
+ definition documents mean (PropertyDefinition, BlockDefinition meta-type, …).
36
+
37
+ org.blockml.bml.bom.* (this package) — Urmodell runtime. Parse-result data structures
38
+ (BomDocument, BlockDefinition as TS interface, MemberDefinition, …).
39
+
40
+ Example: org.blockml.bml.definition.BlockDefinition describes BML syntax; org.blockml.bml.bom.block.BlockDefinition
41
+ describes the parser output shape. See 19_definition_blocks_and_bml_xml.md.</documentation>
42
+
43
+ <references>
44
+ <see type="def:BlockDefinition" relation="SeeAlso"></see>
45
+ </references>
46
+
47
+ </block>
@@ -0,0 +1,48 @@
1
+ <!--
2
+ BOM Documentation — MemberValueSemantics
3
+ FQN: org.blockml.bml.bom.documentation.MemberValueSemantics
4
+ -->
5
+ <block
6
+ xmlns="http://blockml.org/bml"
7
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
8
+ xsi:schemaLocation="http://blockml.org/bml https://blockml.org/schemas/bml.xsd
9
+ "
10
+ xmlns:blockml="org.blockml.bml"
11
+ xmlns:bom="org.blockml.bml.bom"
12
+ xmlns:bomapi="org.blockml.bml.bom.api"
13
+ xmlns:bomblock="org.blockml.bml.bom.block"
14
+ xmlns:bomcap="org.blockml.bml.bom.capability"
15
+ xmlns:bomcommon="org.blockml.bml.bom.common"
16
+ xmlns:bomcomp="org.blockml.bml.bom.composition"
17
+ xmlns:bomdoc="org.blockml.bml.bom.document"
18
+ xmlns:bomdocumentation="org.blockml.bml.bom.documentation"
19
+ xmlns:bommember="org.blockml.bml.bom.member"
20
+ xmlns:bomtype="org.blockml.bml.bom.type"
21
+ xmlns:bomvalue="org.blockml.bml.bom.value"
22
+ xmlns:core="org.blockml.bml.core"
23
+ xmlns:def="org.blockml.bml.definition"
24
+ xmlns:type="org.blockml.bml.type"
25
+ xmlns:doc="org.blockml.bml.documentation">
26
+
27
+ <name>MemberValueSemantics</name>
28
+ <type>bomdocumentation:MemberValueSemantics</type>
29
+ <baseType>core:Documentation</baseType>
30
+ <is>Property value deep-copy rules</is>
31
+
32
+ <documentation>Property values are never linked — always deep copies on instances and definitions.
33
+ Cross-instance FQN::id references exist only on associations (basePresets, Step.part, …).
34
+
35
+ EnumType tokens (Standard, FQN::id) are resolution keys — BOM stores id + typeFqn only.
36
+ Struct/primitive literals stay inline in authored form — not normalized at parse time.
37
+
38
+ LiteralValue: kind literal, opaque value, typeFqn, optional authoredPlacement (D9).
39
+ ExpressionValue: kind expression, raw ${} text only in BOM; AST via parseExpression().
40
+ AddressValue: parsed org.blockml.bml.type.Address shape.
41
+
42
+ Preset/config merge copies into render-time view — never writes references back to BomDocument.</documentation>
43
+
44
+ <references>
45
+ <see type="bomvalue:MemberValue" relation="Defines"></see>
46
+ </references>
47
+
48
+ </block>
@@ -0,0 +1,56 @@
1
+ <!--
2
+ BOM Documentation — PackageOwnership
3
+ FQN: org.blockml.bml.bom.documentation.PackageOwnership
4
+ -->
5
+ <block
6
+ xmlns="http://blockml.org/bml"
7
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
8
+ xsi:schemaLocation="http://blockml.org/bml https://blockml.org/schemas/bml.xsd
9
+ "
10
+ xmlns:blockml="org.blockml.bml"
11
+ xmlns:bom="org.blockml.bml.bom"
12
+ xmlns:bomapi="org.blockml.bml.bom.api"
13
+ xmlns:bomblock="org.blockml.bml.bom.block"
14
+ xmlns:bomcap="org.blockml.bml.bom.capability"
15
+ xmlns:bomcommon="org.blockml.bml.bom.common"
16
+ xmlns:bomcomp="org.blockml.bml.bom.composition"
17
+ xmlns:bomdoc="org.blockml.bml.bom.document"
18
+ xmlns:bomdocumentation="org.blockml.bml.bom.documentation"
19
+ xmlns:bommember="org.blockml.bml.bom.member"
20
+ xmlns:bomtype="org.blockml.bml.bom.type"
21
+ xmlns:bomvalue="org.blockml.bml.bom.value"
22
+ xmlns:core="org.blockml.bml.core"
23
+ xmlns:def="org.blockml.bml.definition"
24
+ xmlns:type="org.blockml.bml.type"
25
+ xmlns:doc="org.blockml.bml.documentation">
26
+
27
+ <name>PackageOwnership</name>
28
+ <type>bomdocumentation:PackageOwnership</type>
29
+ <baseType>core:Documentation</baseType>
30
+ <is>Toolchain package responsibilities for the Urmodell</is>
31
+
32
+ <documentation>@blockml/bom — all Urmodell interfaces, ParseResult/SerializeResult/ValidateResult (B26 + Stage 2),
33
+ ValidateOptions, TypeRegistryReader, Diagnostic (compiler result type), bomEquals/stripProvenance (B20),
34
+ future BomBuilder (V3).
35
+
36
+ @blockml/framework — TypeRegistry, forkBom, resolveEffectiveMembers, validateTypes, parseExpression.
37
+ Utilities never mutate Urmodell.
38
+
39
+ @blockml/core — BlockML language BML corpus (org.blockml.bml.*); npm SSOT in node_modules.
40
+
41
+ @blockml/parser — BML → BomDocument mapper; single file per invocation; parse() → ParseResult.
42
+ Does not own BOM interfaces or expand directives.
43
+
44
+ @blockml/serializer — BomDocument → canonical BML XML; serialize() → SerializeResult.
45
+
46
+ @blockml/validator — checks on BomDocument using framework utilities.
47
+
48
+ @blockml/cli — TypeRegistry bootstrap, validateTypes/validateConstraints, compile pipeline.
49
+
50
+ @blockml/lsp (V2) — reuses parser, validator, serializer; no parallel IDE AST.
51
+
52
+ @blockml/compiler — Target Registry facade.
53
+
54
+ @machineblocks/core — domain BML; extends TypeRegistry bootstrap.</documentation>
55
+
56
+ </block>
@@ -0,0 +1,59 @@
1
+ <!--
2
+ BOM Documentation — PublicApi
3
+ FQN: org.blockml.bml.bom.documentation.PublicApi
4
+ -->
5
+ <block
6
+ xmlns="http://blockml.org/bml"
7
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
8
+ xsi:schemaLocation="http://blockml.org/bml https://blockml.org/schemas/bml.xsd
9
+ "
10
+ xmlns:blockml="org.blockml.bml"
11
+ xmlns:bom="org.blockml.bml.bom"
12
+ xmlns:bomapi="org.blockml.bml.bom.api"
13
+ xmlns:bomblock="org.blockml.bml.bom.block"
14
+ xmlns:bomcap="org.blockml.bml.bom.capability"
15
+ xmlns:bomcommon="org.blockml.bml.bom.common"
16
+ xmlns:bomcomp="org.blockml.bml.bom.composition"
17
+ xmlns:bomdoc="org.blockml.bml.bom.document"
18
+ xmlns:bomdocumentation="org.blockml.bml.bom.documentation"
19
+ xmlns:bommember="org.blockml.bml.bom.member"
20
+ xmlns:bomtype="org.blockml.bml.bom.type"
21
+ xmlns:bomvalue="org.blockml.bml.bom.value"
22
+ xmlns:core="org.blockml.bml.core"
23
+ xmlns:def="org.blockml.bml.definition"
24
+ xmlns:type="org.blockml.bml.type"
25
+ xmlns:doc="org.blockml.bml.documentation">
26
+
27
+ <name>PublicApi</name>
28
+ <type>bomdocumentation:PublicApi</type>
29
+ <baseType>core:Documentation</baseType>
30
+ <is>Shared parse/serialize/validate results (B26 + Stage 2)</is>
31
+
32
+ <documentation>ParseResult: document (BomDocument | null), diagnostics[], success (false if any error).
33
+
34
+ SerializeResult: text (string | null), diagnostics[], success.
35
+
36
+ ValidateResult: optional pragmaticModel (forked BomDocument), diagnostics[], success.
37
+
38
+ ParseOptions: filePath (default "<memory>"), continueOnError (default true).
39
+
40
+ SerializeOptions: indent (default 2; 0=compact B13), xmlDeclaration (default false B17/B24).
41
+
42
+ ValidateOptions: typeRegistry (TypeRegistryReader), bootstrapPaths, libraryPaths,
43
+ continueOnError (default true).
44
+
45
+ TypeRegistryReader: minimal get/has surface for ValidateOptions — implemented by @blockml/framework.
46
+
47
+ bomEquals(a, b): structural equality modulo provenance (B20).
48
+ stripProvenance(node): deep-clone omitting sourceLocation, endLine, endColumn, provenance source.
49
+ Preserves ImplementationBlock.source (code body).
50
+
51
+ Sync only. No throw on recoverable diagnostics. Diagnostic distinct from org.blockml.bml.core.Diagnostic.</documentation>
52
+
53
+ <references>
54
+ <see type="bomapi:ParseResult" relation="Defines"></see>
55
+ <see type="bomapi:ValidateResult" relation="Defines"></see>
56
+ <see type="bomcap:BomEquals" relation="Defines"></see>
57
+ </references>
58
+
59
+ </block>
@@ -0,0 +1,51 @@
1
+ <!--
2
+ BOM Documentation — RelatedDiagnostics
3
+ FQN: org.blockml.bml.bom.documentation.RelatedDiagnostics
4
+ -->
5
+ <block
6
+ xmlns="http://blockml.org/bml"
7
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
8
+ xsi:schemaLocation="http://blockml.org/bml https://blockml.org/schemas/bml.xsd
9
+ "
10
+ xmlns:blockml="org.blockml.bml"
11
+ xmlns:bom="org.blockml.bml.bom"
12
+ xmlns:bomapi="org.blockml.bml.bom.api"
13
+ xmlns:bomblock="org.blockml.bml.bom.block"
14
+ xmlns:bomcap="org.blockml.bml.bom.capability"
15
+ xmlns:bomcommon="org.blockml.bml.bom.common"
16
+ xmlns:bomcomp="org.blockml.bml.bom.composition"
17
+ xmlns:bomdoc="org.blockml.bml.bom.document"
18
+ xmlns:bomdocumentation="org.blockml.bml.bom.documentation"
19
+ xmlns:bommember="org.blockml.bml.bom.member"
20
+ xmlns:bomtype="org.blockml.bml.bom.type"
21
+ xmlns:bomvalue="org.blockml.bml.bom.value"
22
+ xmlns:core="org.blockml.bml.core"
23
+ xmlns:def="org.blockml.bml.definition"
24
+ xmlns:type="org.blockml.bml.type"
25
+ xmlns:doc="org.blockml.bml.documentation">
26
+
27
+ <name>RelatedDiagnostics</name>
28
+ <type>bomdocumentation:RelatedDiagnostics</type>
29
+ <baseType>core:Documentation</baseType>
30
+ <is>BOM-relevant diagnostic codes</is>
31
+
32
+ <documentation>BML_MISSING_BASE_TYPE, BML_MISSING_BLOCK_TYPE, BML_BLOCK_NAME_TYPE_MISMATCH,
33
+ BML_MISSING_SUBBLOCK_NAME, BML_SUBBLOCK_TYPE_MISMATCH, BML_EMBEDDED_BLOCKS_ON_SUBBLOCK,
34
+ BML_NESTED_EMBEDDED_BLOCKS, BML_DUPLICATE_EMBEDDED_BLOCK, BML_DEFINITION_TYPE_MISMATCH,
35
+ BML_MISSING_EMBEDDED_BLOCK_TYPE, BML_UNQUALIFIED_EMBEDDED_BLOCK_TYPE, BML_AMBIGUOUS_TYPE,
36
+ BML_CONSTRAINT_*, BML_MISSING_IS, BML_MISSING_DOCUMENTATION, BML_MISSING_ISNOT,
37
+ BML_MISSING_SUMMARY, BML_DUPLICATE_*, BML_INVALID_SINCE_VERSION, BML_CHANGELOG_VERSION_ORDER,
38
+ BML_EXAMPLE_*, BML_UNKNOWN_NATURAL_LANGUAGE, BML_MISSING_VERSION, BML_UNKNOWN_VERSION,
39
+ BML_VERSION_BELOW_LIBRARY, BML_VERSION_MINOR_DRIFT, BML_LIBRARY_NESTING_VIOLATION,
40
+ BML_MISSING_ID, BML_UNRESOLVABLE_INSTANCE_REF, BML_UNEXPORTED_INSTANCE_REF,
41
+ BML_NON_STATIC_INSTANCE_REF, BML_DUPLICATE_MEMBER_*, BML_INVALID_PROPERTY_TYPE,
42
+ BML_UNKNOWN_TYPE, BML_INVALID_DEFINITION_BRANCH, BML_INVALID_TYPE_REFERENCE,
43
+ BML_UNKNOWN_PROPERTY, BML_UNKNOWN_DIRECTIVE, BML_DIRECTIVE_NOT_ALLOWED,
44
+ BML_PROPERTY_CYCLE, BML_VISIBILITY_*, BML_FINAL_MEMBER_OVERRIDE, BML_OVERRIDE_*,
45
+ BML_ABSTRACT_MEMBER_NOT_IMPLEMENTED, BML_READONLY_MEMBER_WRITE, BML_STANDALONE_COMPOSITION,
46
+ BML_NAMESPACE_*, BML_XML_*, BML_PRESET_CYCLE, BML_GENERIC_*, BML_TYPE_BOUND_NOT_SATISFIED,
47
+ BML_UNKNOWN_CONTRACT, BML_CONTRACT_*, BML_EXPR_UNKNOWN_PROPERTY.
48
+
49
+ Full catalog: org.blockml.bml.diagnostic.* (@blockml/core) and 06_compiler.md.</documentation>
50
+
51
+ </block>
@@ -0,0 +1,47 @@
1
+ <!--
2
+ BOM Documentation — ScopeExclusions
3
+ FQN: org.blockml.bml.bom.documentation.ScopeExclusions
4
+ -->
5
+ <block
6
+ xmlns="http://blockml.org/bml"
7
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
8
+ xsi:schemaLocation="http://blockml.org/bml https://blockml.org/schemas/bml.xsd
9
+ "
10
+ xmlns:blockml="org.blockml.bml"
11
+ xmlns:bom="org.blockml.bml.bom"
12
+ xmlns:bomapi="org.blockml.bml.bom.api"
13
+ xmlns:bomblock="org.blockml.bml.bom.block"
14
+ xmlns:bomcap="org.blockml.bml.bom.capability"
15
+ xmlns:bomcommon="org.blockml.bml.bom.common"
16
+ xmlns:bomcomp="org.blockml.bml.bom.composition"
17
+ xmlns:bomdoc="org.blockml.bml.bom.document"
18
+ xmlns:bomdocumentation="org.blockml.bml.bom.documentation"
19
+ xmlns:bommember="org.blockml.bml.bom.member"
20
+ xmlns:bomtype="org.blockml.bml.bom.type"
21
+ xmlns:bomvalue="org.blockml.bml.bom.value"
22
+ xmlns:core="org.blockml.bml.core"
23
+ xmlns:def="org.blockml.bml.definition"
24
+ xmlns:type="org.blockml.bml.type"
25
+ xmlns:doc="org.blockml.bml.documentation">
26
+
27
+ <name>ScopeExclusions</name>
28
+ <type>bomdocumentation:ScopeExclusions</type>
29
+ <baseType>core:Documentation</baseType>
30
+ <is>Topics intentionally outside @blockml/bom</is>
31
+
32
+ <documentation>Not specified in this library:
33
+
34
+ Expression AST node union → 10_expression_language.md
35
+ Embedded expressions in implementations → 10_expression_language.md
36
+ BML → BOM mapping algorithm → @blockml/parser, 13_bml_to_bom_mapping.md
37
+ Framework base types (BML) → @blockml/core, 16_framework_base_types.md
38
+ ValueType / Language BML → 17_type_system_bml.md
39
+ Dev setup → 15_dev_setup.md
40
+ MBOM native params → NativeBlock.bml + com.machineblocks.bml.type.*
41
+ MBOM → SCAD → 04_types.md, 05_scad_renderer.md
42
+ ManagedObject / synthetic accessors → 08_managed_object.md
43
+ Built-in #math / #strings → @blockml/core services
44
+
45
+ Also outside Urmodell: EffectiveMemberSet, TypeRegistry (core utilities).</documentation>
46
+
47
+ </block>
@@ -0,0 +1,45 @@
1
+ <!--
2
+ BOM Documentation — SubBlockAndEmbeddedBlocks
3
+ FQN: org.blockml.bml.bom.documentation.SubBlockAndEmbeddedBlocks
4
+ -->
5
+ <block
6
+ xmlns="http://blockml.org/bml"
7
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
8
+ xsi:schemaLocation="http://blockml.org/bml https://blockml.org/schemas/bml.xsd
9
+ "
10
+ xmlns:blockml="org.blockml.bml"
11
+ xmlns:bom="org.blockml.bml.bom"
12
+ xmlns:bomapi="org.blockml.bml.bom.api"
13
+ xmlns:bomblock="org.blockml.bml.bom.block"
14
+ xmlns:bomcap="org.blockml.bml.bom.capability"
15
+ xmlns:bomcommon="org.blockml.bml.bom.common"
16
+ xmlns:bomcomp="org.blockml.bml.bom.composition"
17
+ xmlns:bomdoc="org.blockml.bml.bom.document"
18
+ xmlns:bomdocumentation="org.blockml.bml.bom.documentation"
19
+ xmlns:bommember="org.blockml.bml.bom.member"
20
+ xmlns:bomtype="org.blockml.bml.bom.type"
21
+ xmlns:bomvalue="org.blockml.bml.bom.value"
22
+ xmlns:core="org.blockml.bml.core"
23
+ xmlns:def="org.blockml.bml.definition"
24
+ xmlns:type="org.blockml.bml.type"
25
+ xmlns:doc="org.blockml.bml.documentation">
26
+
27
+ <name>SubBlockAndEmbeddedBlocks</name>
28
+ <type>bomdocumentation:SubBlockAndEmbeddedBlocks</type>
29
+ <baseType>core:Documentation</baseType>
30
+ <is>Sub-Block FQN derivation and inline library embeds</is>
31
+
32
+ <documentation>Sub-Blocks omit type in BML by convention. FQN derived recursively:
33
+ parent.type + "." + name (BML_SUBBLOCK_TYPE_MISMATCH if explicit type differs).
34
+
35
+ Sub-Blocks share one BomDocument; may nest arbitrarily. Must not declare embeddedBlocks
36
+ (BML_EMBEDDED_BLOCKS_ON_SUBBLOCK).
37
+
38
+ embeddedBlocks: Inline Library on document root only. Each entry is a virtual .bml file.
39
+ FQN = fully qualified type element value — not nested under root. No nested embeds
40
+ (BML_NESTED_EMBEDDED_BLOCKS). Duplicate FQNs → BML_DUPLICATE_EMBEDDED_BLOCK.
41
+ Shadows library definitions within BomDocument; invisible externally.
42
+
43
+ Composition references to embeds must use fully qualified block type.</documentation>
44
+
45
+ </block>
@@ -0,0 +1,47 @@
1
+ <!--
2
+ BOM Documentation — TypeExpressionsOverview
3
+ FQN: org.blockml.bml.bom.documentation.TypeExpressionsOverview
4
+ -->
5
+ <block
6
+ xmlns="http://blockml.org/bml"
7
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
8
+ xsi:schemaLocation="http://blockml.org/bml https://blockml.org/schemas/bml.xsd
9
+ "
10
+ xmlns:blockml="org.blockml.bml"
11
+ xmlns:bom="org.blockml.bml.bom"
12
+ xmlns:bomapi="org.blockml.bml.bom.api"
13
+ xmlns:bomblock="org.blockml.bml.bom.block"
14
+ xmlns:bomcap="org.blockml.bml.bom.capability"
15
+ xmlns:bomcommon="org.blockml.bml.bom.common"
16
+ xmlns:bomcomp="org.blockml.bml.bom.composition"
17
+ xmlns:bomdoc="org.blockml.bml.bom.document"
18
+ xmlns:bomdocumentation="org.blockml.bml.bom.documentation"
19
+ xmlns:bommember="org.blockml.bml.bom.member"
20
+ xmlns:bomtype="org.blockml.bml.bom.type"
21
+ xmlns:bomvalue="org.blockml.bml.bom.value"
22
+ xmlns:core="org.blockml.bml.core"
23
+ xmlns:def="org.blockml.bml.definition"
24
+ xmlns:type="org.blockml.bml.type"
25
+ xmlns:doc="org.blockml.bml.documentation">
26
+
27
+ <name>TypeExpressionsOverview</name>
28
+ <type>bomdocumentation:TypeExpressionsOverview</type>
29
+ <baseType>core:Documentation</baseType>
30
+ <is>Parse-time type expression model</is>
31
+
32
+ <documentation>TypeExpression (alias TypeDescriptor in V1) — structured parse-time AST, not a ValueType.
33
+ Used for Capability inputType/outputType and Property type attributes.
34
+
35
+ Union variants: named, union, genericParam, self, anonymousStruct.
36
+
37
+ Anonymous struct = shorthand for inline class with ordered fields (FunctionMapping positional order).
38
+ Single primitive = NamedTypeReference directly — not wrapped in one-field struct.
39
+
40
+ Union variant discrimination and AST are validateTypes()/parseExpression() utility results —
41
+ not stored in Canonical BOM.</documentation>
42
+
43
+ <references>
44
+ <see type="bomtype:TypeExpression" relation="Defines"></see>
45
+ </references>
46
+
47
+ </block>
@@ -0,0 +1,51 @@
1
+ <!--
2
+ BOM Documentation — ValidationResponsibilities
3
+ FQN: org.blockml.bml.bom.documentation.ValidationResponsibilities
4
+ -->
5
+ <block
6
+ xmlns="http://blockml.org/bml"
7
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
8
+ xsi:schemaLocation="http://blockml.org/bml https://blockml.org/schemas/bml.xsd
9
+ "
10
+ xmlns:blockml="org.blockml.bml"
11
+ xmlns:bom="org.blockml.bml.bom"
12
+ xmlns:bomapi="org.blockml.bml.bom.api"
13
+ xmlns:bomblock="org.blockml.bml.bom.block"
14
+ xmlns:bomcap="org.blockml.bml.bom.capability"
15
+ xmlns:bomcommon="org.blockml.bml.bom.common"
16
+ xmlns:bomcomp="org.blockml.bml.bom.composition"
17
+ xmlns:bomdoc="org.blockml.bml.bom.document"
18
+ xmlns:bomdocumentation="org.blockml.bml.bom.documentation"
19
+ xmlns:bommember="org.blockml.bml.bom.member"
20
+ xmlns:bomtype="org.blockml.bml.bom.type"
21
+ xmlns:bomvalue="org.blockml.bml.bom.value"
22
+ xmlns:core="org.blockml.bml.core"
23
+ xmlns:def="org.blockml.bml.definition"
24
+ xmlns:type="org.blockml.bml.type"
25
+ xmlns:doc="org.blockml.bml.documentation">
26
+
27
+ <name>ValidationResponsibilities</name>
28
+ <type>bomdocumentation:ValidationResponsibilities</type>
29
+ <baseType>core:Documentation</baseType>
30
+ <is>Full validator checklist on BomDocument</is>
31
+
32
+ <documentation>Parser produces BomDocument. Validator (@blockml/validator + @blockml/framework) checks:
33
+
34
+ Member namespace uniqueness; baseType in TypeRegistry; property values inline deep copies;
35
+ resolveEffectiveMembers for expression refs; effective version (BML_MISSING_VERSION);
36
+ library block.version >= library.version; bml:version asserts (BML_UNKNOWN_VERSION);
37
+ cross-instance refs to explicit authored id; qualified FQN::id on public aggregations;
38
+ bml:each explicit id; Sub-Block qualified/FQN refs; generic param ≠ block/sub-block names;
39
+ visibility rules; no duplicate visibility-prefix variants; expression types match;
40
+ preset properties exist; property value cycles; basePresets resolve without cycles;
41
+ contracts merge order; validateConstraints after resolveEffectiveMembers;
42
+ readOnly enforcement (BML_READONLY_MEMBER_WRITE); library blocks/deps resolve;
43
+ no outer library re-export from inner library (BML_LIBRARY_NESTING_VIOLATION).
44
+
45
+ Validator does NOT expand directives, assign auto-IDs, or interpret aggregations.</documentation>
46
+
47
+ <references>
48
+ <see type="bomdocumentation:RelatedDiagnostics" relation="SeeAlso"></see>
49
+ </references>
50
+
51
+ </block>
@@ -0,0 +1,41 @@
1
+ <!--
2
+ BOM Documentation — VersionRules
3
+ FQN: org.blockml.bml.bom.documentation.VersionRules
4
+ -->
5
+ <block
6
+ xmlns="http://blockml.org/bml"
7
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
8
+ xsi:schemaLocation="http://blockml.org/bml https://blockml.org/schemas/bml.xsd
9
+ "
10
+ xmlns:blockml="org.blockml.bml"
11
+ xmlns:bom="org.blockml.bml.bom"
12
+ xmlns:bomapi="org.blockml.bml.bom.api"
13
+ xmlns:bomblock="org.blockml.bml.bom.block"
14
+ xmlns:bomcap="org.blockml.bml.bom.capability"
15
+ xmlns:bomcommon="org.blockml.bml.bom.common"
16
+ xmlns:bomcomp="org.blockml.bml.bom.composition"
17
+ xmlns:bomdoc="org.blockml.bml.bom.document"
18
+ xmlns:bomdocumentation="org.blockml.bml.bom.documentation"
19
+ xmlns:bommember="org.blockml.bml.bom.member"
20
+ xmlns:bomtype="org.blockml.bml.bom.type"
21
+ xmlns:bomvalue="org.blockml.bml.bom.value"
22
+ xmlns:core="org.blockml.bml.core"
23
+ xmlns:def="org.blockml.bml.definition"
24
+ xmlns:type="org.blockml.bml.type"
25
+ xmlns:doc="org.blockml.bml.documentation">
26
+
27
+ <name>VersionRules</name>
28
+ <type>bomdocumentation:VersionRules</type>
29
+ <baseType>core:Documentation</baseType>
30
+ <is>Effective block version and instance version asserts</is>
31
+
32
+ <documentation>Definition effectiveBlockVersion = own version | library.version (if exported) | BML_MISSING_VERSION.
33
+ Block in library: version >= library.version when both declared.
34
+
35
+ Same-document Sub-Block refs: bml:version not allowed as resolution hint.
36
+ External refs: bml:version omitted → registry context; present → exact assert (BML_UNKNOWN_VERSION).
37
+ Library catalog sugar (readMe, bootstrap, dependencies, blocks): same bml:version rules.
38
+
39
+ Framework convention: version only on Library.bml for org.blockml.bml.* / com.machineblocks.bml.*</documentation>
40
+
41
+ </block>