@formicoidea/labre-framework-uml 0.42.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.
- package/LICENSE +384 -0
- package/dist/actions.d.ts +430 -0
- package/dist/actions.js +724 -0
- package/dist/background.d.ts +153 -0
- package/dist/background.js +557 -0
- package/dist/board-hit.d.ts +137 -0
- package/dist/board-hit.js +191 -0
- package/dist/commands-manifest.d.ts +19 -0
- package/dist/commands-manifest.js +571 -0
- package/dist/commands.d.ts +4 -0
- package/dist/commands.js +983 -0
- package/dist/component.d.ts +521 -0
- package/dist/component.js +708 -0
- package/dist/consts.d.ts +365 -0
- package/dist/consts.js +463 -0
- package/dist/descriptor.d.ts +12 -0
- package/dist/descriptor.js +10 -0
- package/dist/drawio-decode.d.ts +32 -0
- package/dist/drawio-decode.js +96 -0
- package/dist/drawio-import.d.ts +133 -0
- package/dist/drawio-import.js +885 -0
- package/dist/edge-morph.d.ts +154 -0
- package/dist/edge-morph.js +153 -0
- package/dist/edge-styles.d.ts +78 -0
- package/dist/edge-styles.js +210 -0
- package/dist/effects.d.ts +9 -0
- package/dist/effects.js +6 -0
- package/dist/element-renderer.d.ts +64 -0
- package/dist/element-renderer.js +114 -0
- package/dist/element-view.d.ts +234 -0
- package/dist/element-view.js +430 -0
- package/dist/export.d.ts +61 -0
- package/dist/export.js +41 -0
- package/dist/filename.d.ts +17 -0
- package/dist/filename.js +26 -0
- package/dist/frame-tag.d.ts +70 -0
- package/dist/frame-tag.js +78 -0
- package/dist/grammar.d.ts +695 -0
- package/dist/grammar.js +1436 -0
- package/dist/import.d.ts +306 -0
- package/dist/import.js +1270 -0
- package/dist/index.d.ts +47 -0
- package/dist/index.js +67 -0
- package/dist/interchange.d.ts +125 -0
- package/dist/interchange.js +372 -0
- package/dist/keywords.d.ts +204 -0
- package/dist/keywords.js +361 -0
- package/dist/kinds.d.ts +73 -0
- package/dist/kinds.js +91 -0
- package/dist/legend.d.ts +30 -0
- package/dist/legend.js +255 -0
- package/dist/model.d.ts +862 -0
- package/dist/model.js +1316 -0
- package/dist/morph.d.ts +178 -0
- package/dist/morph.js +496 -0
- package/dist/node/act-glyphs.d.ts +30 -0
- package/dist/node/act-glyphs.js +142 -0
- package/dist/node/compartment-watcher.d.ts +107 -0
- package/dist/node/compartment-watcher.js +163 -0
- package/dist/node/fit.d.ts +85 -0
- package/dist/node/fit.js +129 -0
- package/dist/node/node-renderer.d.ts +49 -0
- package/dist/node/node-renderer.js +611 -0
- package/dist/node/node-view.d.ts +51 -0
- package/dist/node/node-view.js +89 -0
- package/dist/node/paint.d.ts +84 -0
- package/dist/node/paint.js +143 -0
- package/dist/node/sd-glyphs.d.ts +36 -0
- package/dist/node/sd-glyphs.js +79 -0
- package/dist/node/stm-glyphs.d.ts +22 -0
- package/dist/node/stm-glyphs.js +111 -0
- package/dist/node/tier-metrics.d.ts +38 -0
- package/dist/node/tier-metrics.js +45 -0
- package/dist/operators.d.ts +45 -0
- package/dist/operators.js +75 -0
- package/dist/plantuml-import.d.ts +113 -0
- package/dist/plantuml-import.js +1723 -0
- package/dist/plantuml.d.ts +94 -0
- package/dist/plantuml.js +985 -0
- package/dist/presets.d.ts +149 -0
- package/dist/presets.js +302 -0
- package/dist/profiles.d.ts +2 -0
- package/dist/profiles.js +358 -0
- package/dist/reading.d.ts +160 -0
- package/dist/reading.js +648 -0
- package/dist/roles.d.ts +257 -0
- package/dist/roles.js +997 -0
- package/dist/rules.d.ts +267 -0
- package/dist/rules.js +3090 -0
- package/dist/templates.d.ts +2 -0
- package/dist/templates.js +197 -0
- package/dist/toolbar/config.d.ts +228 -0
- package/dist/toolbar/config.js +833 -0
- package/dist/toolbar/icons.d.ts +440 -0
- package/dist/toolbar/icons.js +711 -0
- package/dist/toolbar/senior-tool.d.ts +11 -0
- package/dist/toolbar/senior-tool.js +21 -0
- package/dist/toolbar/uml-menu.d.ts +17 -0
- package/dist/toolbar/uml-menu.js +20 -0
- package/dist/toolbar/uml-senior-button.d.ts +18 -0
- package/dist/toolbar/uml-senior-button.js +22 -0
- package/dist/translations.d.ts +27 -0
- package/dist/translations.js +117 -0
- package/dist/view.d.ts +33 -0
- package/dist/view.js +236 -0
- package/dist/xmi-import.d.ts +174 -0
- package/dist/xmi-import.js +2268 -0
- package/dist/xmi.d.ts +61 -0
- package/dist/xmi.js +1860 -0
- package/dist/xml-reader.d.ts +157 -0
- package/dist/xml-reader.js +430 -0
- package/dist/xml.d.ts +72 -0
- package/dist/xml.js +96 -0
- package/package.json +38 -0
package/dist/rules.d.ts
ADDED
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
import type { EndpointTriplet, ValidationRule } from '@formicoidea/labre-core/blocks/surface';
|
|
2
|
+
/**
|
|
3
|
+
* Every ordered pair of the element roles — the ALPHABET, and not a grammar.
|
|
4
|
+
*
|
|
5
|
+
* This table sanctions all four hundred and forty-one sentences — twenty-one
|
|
6
|
+
* element roles squared, since the behaviour vocabulary joined the alphabet —
|
|
7
|
+
* so a rule holding it judges none of them. It exists so {@link untypedEdge}
|
|
8
|
+
* can say "between two
|
|
9
|
+
* UML artefacts" — which is the only thing `flagNeutral` reads a matrix FOR —
|
|
10
|
+
* without inheriting a judgement that belongs to {@link actorActorAssociation}.
|
|
11
|
+
*/
|
|
12
|
+
export declare const UML_ELEMENT_MATRIX: readonly EndpointTriplet[];
|
|
13
|
+
export declare const UML_ASSOCIATION_MATRIX: readonly EndpointTriplet[];
|
|
14
|
+
/**
|
|
15
|
+
* The permissive table — every ordered pair of {@link UML_GENERALIZATION_ROLES}.
|
|
16
|
+
*
|
|
17
|
+
* Held by {@link generalizationSelfLoop} alone, for the reason C4 states: a
|
|
18
|
+
* second rule carrying the real grammar would report every wrong sentence a
|
|
19
|
+
* second time, with two brackets and two suggestions for one gesture to fix. The
|
|
20
|
+
* loop rule needs the same ALPHABET (so a generalization looped onto a note or a
|
|
21
|
+
* frame stays outside the conversation) and no grammar at all.
|
|
22
|
+
*/
|
|
23
|
+
export declare const UML_GENERALIZATION_ALPHABET: readonly EndpointTriplet[];
|
|
24
|
+
/**
|
|
25
|
+
* The generalization GRAMMAR: like specialises like, and an instance is not a
|
|
26
|
+
* kind of anything.
|
|
27
|
+
*
|
|
28
|
+
* Four diagonal sentences and one ALPHABET entry. The fifth triplet is a link
|
|
29
|
+
* between two instances (§9.8.4) — a true sentence, carrying the ASSOCIATION
|
|
30
|
+
* role — and it is here so that `uml:object` is a role this rule speaks about:
|
|
31
|
+
* without it a generalization drawn onto an instance would be outside the
|
|
32
|
+
* alphabet and silently unjudged. `inMatrix` matches the edge role with
|
|
33
|
+
* `roleIsA`, so it can never sanction a generalization.
|
|
34
|
+
*
|
|
35
|
+
* The enumeration is absent from both ends, and that is a silence rather than a
|
|
36
|
+
* permission: a generalization between two enumerations is legal in the
|
|
37
|
+
* metamodel (an Enumeration is a DataType) and vanishingly rare on a drawing, so
|
|
38
|
+
* the pack declines to have an opinion about it.
|
|
39
|
+
*/
|
|
40
|
+
export declare const UML_GENERALIZATION_MATRIX: readonly EndpointTriplet[];
|
|
41
|
+
/**
|
|
42
|
+
* What a REALIZATION points at: an interface, and nothing else (§10.4.3, whose
|
|
43
|
+
* `contract` end is typed `Interface`).
|
|
44
|
+
*
|
|
45
|
+
* One sentence, and an alphabet of one role — `uml:interface` specialises
|
|
46
|
+
* `uml:classifier`, so the source entry covers both ends of every realization
|
|
47
|
+
* drawn between two compartmented boxes. A realization onto a package, an
|
|
48
|
+
* object, an actor or a use case is outside the alphabet and is not judged:
|
|
49
|
+
* those are drawings of something else entirely, and the notation has no reading
|
|
50
|
+
* of them to correct.
|
|
51
|
+
*/
|
|
52
|
+
export declare const UML_REALIZATION_MATRIX: readonly EndpointTriplet[];
|
|
53
|
+
export declare const UML_DEPENDENCY_MATRIX: readonly EndpointTriplet[];
|
|
54
|
+
/**
|
|
55
|
+
* The use case diagram's grammar, whole — read by TWO rules, each seeing the
|
|
56
|
+
* slice its own edge role selects.
|
|
57
|
+
*
|
|
58
|
+
* §18.1.3 types both ends of an Include (`addition: UseCase`) and both ends of
|
|
59
|
+
* an Extend (`extendedCase: UseCase`), so the only sentence either sanctions is
|
|
60
|
+
* use case → use case. That alone would give each rule an alphabet of one role
|
|
61
|
+
* and nothing it could ever report — an include drawn from an ACTOR, which is
|
|
62
|
+
* the mistake these two exist for, would be outside the alphabet and silent.
|
|
63
|
+
*
|
|
64
|
+
* The two ASSOCIATION triplets are what fix that. They are true sentences of
|
|
65
|
+
* §18.1.3 (an actor associates with a use case) and they carry the association
|
|
66
|
+
* role, so `inMatrix` — which matches a triplet's edge with `roleIsA` — can never
|
|
67
|
+
* let them sanction an include or an extend. Their only effect is to put
|
|
68
|
+
* `uml:actor` in the alphabet both rules speak.
|
|
69
|
+
*
|
|
70
|
+
* The two rules never double-report: an edge carries one role, and the include
|
|
71
|
+
* rule reads `uml:include` while the extend rule reads `uml:extend` — flat
|
|
72
|
+
* siblings, so neither reaches the other's edges, and neither reaches the
|
|
73
|
+
* associations this table also describes.
|
|
74
|
+
*/
|
|
75
|
+
export declare const UML_USE_CASE_MATRIX: readonly EndpointTriplet[];
|
|
76
|
+
/**
|
|
77
|
+
* What a DEPLOY may run between: an artefact onto a node, and nothing else.
|
|
78
|
+
*
|
|
79
|
+
* §19.4.4 draws it as the dashed arrow with the `«deploy»` keyword, and §19.2.3
|
|
80
|
+
* types its two ends — a DeployedArtifact onto a DeploymentTarget. `uml:node` is
|
|
81
|
+
* the parent of `uml:device` and `uml:execution-environment` (`roles.ts`), so the
|
|
82
|
+
* single sentence below reaches all three targets through `roleIsA` rather than
|
|
83
|
+
* being restated once per cube.
|
|
84
|
+
*
|
|
85
|
+
* The second triplet is an ALPHABET entry, the device the file header explains:
|
|
86
|
+
* a manifestation is a true sentence of §19.3.4, it carries the `uml:manifest`
|
|
87
|
+
* role and can therefore never sanction a deploy, and its whole effect is to put
|
|
88
|
+
* `uml:component` into the alphabet this rule speaks. Without it a `«deploy»`
|
|
89
|
+
* drawn from a component — which is the mistake this rule exists for, since a
|
|
90
|
+
* component is not what gets deployed, its artefact is — would be outside the
|
|
91
|
+
* alphabet and silently unjudged.
|
|
92
|
+
*/
|
|
93
|
+
export declare const UML_DEPLOY_MATRIX: readonly EndpointTriplet[];
|
|
94
|
+
/**
|
|
95
|
+
* What a MANIFEST may run between: an artefact onto the element it embodies.
|
|
96
|
+
*
|
|
97
|
+
* §19.3.3 — "An Artifact may embody, or manifest, a number of model elements" —
|
|
98
|
+
* and §19.3.4 draws it as the dashed open arrow labelled `«manifest»`. The
|
|
99
|
+
* metamodel's `utilizedElement` is a PackageableElement, so a manifestation may
|
|
100
|
+
* point at a great many things; this pack draws the one §19.3.5's own figure
|
|
101
|
+
* draws, "A Manifestation relationship between an Artifact and a Component",
|
|
102
|
+
* because a component diagram is where a manifestation is drawn at all.
|
|
103
|
+
*
|
|
104
|
+
* {@link UML_DEPLOY_MATRIX}'s twin, mirrored: the foreign triplet here is the
|
|
105
|
+
* DEPLOY, which puts `uml:node` in the alphabet so that a `«manifest»` aimed at
|
|
106
|
+
* a cube — the same arrow drawn at the wrong end of the deployment story — is a
|
|
107
|
+
* finding rather than silence.
|
|
108
|
+
*/
|
|
109
|
+
export declare const UML_MANIFEST_MATRIX: readonly EndpointTriplet[];
|
|
110
|
+
/**
|
|
111
|
+
* What a COMMUNICATION PATH may run between: two nodes.
|
|
112
|
+
*
|
|
113
|
+
* §19.4.3 is as narrow as a clause gets — "A CommunicationPath is an Association
|
|
114
|
+
* between two DeploymentTargets, through which they may exchange Signals and
|
|
115
|
+
* Messages" — and §19.4.4 draws it as the plain association link between two
|
|
116
|
+
* cubes. One sentence, and `uml:node` on both ends, so a device talking to an
|
|
117
|
+
* execution environment is sanctioned through the parent role.
|
|
118
|
+
*
|
|
119
|
+
* TWO alphabet entries this time, and both are foreign edges: they put
|
|
120
|
+
* `uml:artifact` and `uml:component` into the alphabet, which is what makes a
|
|
121
|
+
* network line drawn onto a `.jar` or onto a component box a finding. A
|
|
122
|
+
* communication path is about MACHINES talking to machines, and the wire drawn
|
|
123
|
+
* to the software running on one of them is the confusion the rule is for.
|
|
124
|
+
*/
|
|
125
|
+
export declare const UML_COMMUNICATION_PATH_MATRIX: readonly EndpointTriplet[];
|
|
126
|
+
/**
|
|
127
|
+
* What a CONTROL FLOW may run between: the activity vertices, and never an
|
|
128
|
+
* object node.
|
|
129
|
+
*
|
|
130
|
+
* §15.7.9.4 is one of the few constraints in Clause 15 that OCL can state in a
|
|
131
|
+
* line — "ControlFlows may not have ObjectNodes at either end, except for
|
|
132
|
+
* ObjectNodes with control type" — and the exception is the reason the rule that
|
|
133
|
+
* holds this table stays a remark rather than a defect: `isControlType` is a
|
|
134
|
+
* property of the metamodel with no notation at all (§15.4.4 draws the same
|
|
135
|
+
* rectangle either way), so a canvas cannot say which of the two an author meant.
|
|
136
|
+
* The table therefore reports the drawing the specification's own default
|
|
137
|
+
* forbids, and the rule's suggestion names the exception.
|
|
138
|
+
*
|
|
139
|
+
* Twenty-five sentences over five roles, plus the four alphabet entries: the
|
|
140
|
+
* grammar judges WHICH vertices, never how many edges reach one. The counts are
|
|
141
|
+
* {@link initialNoIncomingFlow}, {@link activityFinalNoOutgoing},
|
|
142
|
+
* {@link flowFinalNoOutgoing} and {@link decisionIncomingCount}, and keeping the
|
|
143
|
+
* two apart is what stops one wrong arrow being reported twice.
|
|
144
|
+
*/
|
|
145
|
+
export declare const UML_CONTROL_FLOW_MATRIX: readonly EndpointTriplet[];
|
|
146
|
+
export declare const UML_OBJECT_FLOW_MATRIX: readonly EndpointTriplet[];
|
|
147
|
+
/**
|
|
148
|
+
* What a TRANSITION may run between: the vertices of a state machine, and
|
|
149
|
+
* nothing else.
|
|
150
|
+
*
|
|
151
|
+
* §14.5.12 in one sentence — "A Transition is a single directed arc originating
|
|
152
|
+
* from a single source Vertex and terminating on a single target Vertex" — and a
|
|
153
|
+
* Vertex is a State, a FinalState or a Pseudostate (§14.5.14). So the table is
|
|
154
|
+
* the full square over {@link UML_STATE_VERTEX_ROLES}: twenty-five sentences,
|
|
155
|
+
* judging WHICH vertices and not how many arcs reach one.
|
|
156
|
+
*
|
|
157
|
+
* ## The square is deliberate, and it is what stops the double report
|
|
158
|
+
*
|
|
159
|
+
* A transition INTO an initial disc and a transition OUT OF a final state are
|
|
160
|
+
* both wrong, and both are already said — by {@link initialNoIncomingTransition}
|
|
161
|
+
* and {@link finalStateNoOutgoing}, each of which names the side the author has
|
|
162
|
+
* to act on. Removing those two sentences from this table would make the same
|
|
163
|
+
* arrow off-matrix as well, and the user would get two brackets and two
|
|
164
|
+
* suggestions for one drag to fix. The DEGREE rules own the counts; this table
|
|
165
|
+
* owns the vocabulary.
|
|
166
|
+
*/
|
|
167
|
+
export declare const UML_TRANSITION_MATRIX: readonly EndpointTriplet[];
|
|
168
|
+
/**
|
|
169
|
+
* What a MESSAGE may run between, sort by sort — §17.4.4, which is the one place
|
|
170
|
+
* in Clause 17 where the notation constrains an ARROW's ends rather than its
|
|
171
|
+
* shape.
|
|
172
|
+
*
|
|
173
|
+
* Three of the five sorts are the full square over {@link UML_MESSAGE_ENDS}: a
|
|
174
|
+
* call, a signal and a reply run from a participant to a participant, and the
|
|
175
|
+
* clause says nothing more. The other two each carry a sentence the
|
|
176
|
+
* specification states outright:
|
|
177
|
+
*
|
|
178
|
+
* - a **create** message "has a dashed line with an open arrow head" and is
|
|
179
|
+
* drawn to the HEAD of the lifeline it brings into existence (§17.4.4,
|
|
180
|
+
* Figure 17.13), so its target is a LIFELINE and never an execution — there
|
|
181
|
+
* is nothing to be executing on a participant that does not exist yet;
|
|
182
|
+
* - a **delete** message "must end in a DestructionOccurrenceSpecification"
|
|
183
|
+
* (§17.4.4, quoted in the rule's provenance), which is the X this canvas
|
|
184
|
+
* draws as `uml:destruction`. The LIFELINE is admitted beside it, and that is
|
|
185
|
+
* a deliberate tolerance rather than a reading of the clause: an author draws
|
|
186
|
+
* the arrow first and drops the cross on its end afterwards, and a grammar
|
|
187
|
+
* that indicted the intermediate state would be indicting the gesture.
|
|
188
|
+
* `uml.strict` promotes this rule, so the tolerance is the same at both
|
|
189
|
+
* levels — the finding that is worth having is the delete drawn onto an
|
|
190
|
+
* EXECUTION, which is a participant carrying on after it has been destroyed.
|
|
191
|
+
*
|
|
192
|
+
* Self-loops are NOT forbidden, and §17.4.4 is explicit about why: "The send and
|
|
193
|
+
* receive events may both be on the same lifeline." A participant calling itself
|
|
194
|
+
* is the notation's own figure for a nested activation.
|
|
195
|
+
*/
|
|
196
|
+
export declare const UML_MESSAGE_MATRIX: readonly EndpointTriplet[];
|
|
197
|
+
/**
|
|
198
|
+
* The pack, whole: forty-three rules over ten families.
|
|
199
|
+
*
|
|
200
|
+
* Sixteen in phase 1, and not that brief's seventeen ids because the actor's
|
|
201
|
+
* name and the use case's name are ONE rule: they are the same tier role, and
|
|
202
|
+
* two rules on one role report one emptied word twice (see
|
|
203
|
+
* {@link unnamedActorOrUseCase}). The structural sheets appended three — the
|
|
204
|
+
* grammars of the three edges they draw — and skipped two the engine could not
|
|
205
|
+
* be asked; one of those two came back as the forty-third rule below, once the
|
|
206
|
+
* engine grew the family it needed. The BEHAVIOUR sheets appended fifteen, which is the largest single
|
|
207
|
+
* addition this library has taken: an activity and a state machine are the two
|
|
208
|
+
* diagrams UML constrains arithmetically, so where a class diagram's pack is
|
|
209
|
+
* mostly a vocabulary these are counts, degrees and a graph walk.
|
|
210
|
+
*
|
|
211
|
+
* The SEQUENCE sheet appended four, and all four are families this pack already
|
|
212
|
+
* had — which says something about the notation rather than about the effort:
|
|
213
|
+
* an interaction's whole grammar is "who may exchange a message with whom",
|
|
214
|
+
* "what a message label says", and the two questions any tier is asked about
|
|
215
|
+
* the words in a lifeline's head. Those last two are the ones that cost a role:
|
|
216
|
+
* `uml:lifeline-ident` exists because §17.3.4 prints a BNF for a head and
|
|
217
|
+
* §18.1.4 prints none for an actor's word, and one tier carrying both would have
|
|
218
|
+
* had to ask them the same question (`roles.ts`, {@link unnamedLifeline}). The
|
|
219
|
+
* four requirements Clause 17 states that this library CANNOT state — a message
|
|
220
|
+
* never traversed upwards (§17.4.4), an execution bar sat on a lifeline's spine
|
|
221
|
+
* (§17.3.4), a create message landing on a head, an operand's guard written in
|
|
222
|
+
* brackets (§17.6.4) — are each a geometry no family expresses, and they are
|
|
223
|
+
* recorded in `docs/adr/0022` rather than approximated here. A rule that fires
|
|
224
|
+
* on the wrong thing costs more than a requirement nobody checks.
|
|
225
|
+
*
|
|
226
|
+
* The PO recette of 2026-09-16 appended the forty-third, and it is the one rule
|
|
227
|
+
* in the pack that was written down as impossible before it was written: a port
|
|
228
|
+
* dragged into the middle of its component (§11.3.4). See {@link portOnBorder},
|
|
229
|
+
* and the paragraph above the six remaining gaps on how it left that list.
|
|
230
|
+
*
|
|
231
|
+
* ## TWO of the ten families are new to the ENGINE, and they are the only ones
|
|
232
|
+
*
|
|
233
|
+
* `label-syntax` (`docs/adr/0021`) arrived with four spelling rules and carries
|
|
234
|
+
* six, and it was the first family this library added for a reason no table
|
|
235
|
+
* could meet: a notation's GRAMMAR is a parser, and the clauses these rules cite
|
|
236
|
+
* are already written as one in `grammar.ts` for the exporters.
|
|
237
|
+
* `border-proximity` (`docs/adr/0024`) is the second, and its reason is the
|
|
238
|
+
* opposite one — pure geometry that three existing families each get NEARLY
|
|
239
|
+
* right and none of them states: a distance from a glyph's centre to another
|
|
240
|
+
* artefact's outline. In both cases the family owns the walk and the pack owns
|
|
241
|
+
* the reading, and in both cases the alternative on the table was approximating
|
|
242
|
+
* the requirement with a neighbouring family. Everything else the thirty-odd
|
|
243
|
+
* roles of phases 2 and 3 needed, the engine already had.
|
|
244
|
+
*
|
|
245
|
+
* ## The other eight are the engine's, and two of them are BPMN's
|
|
246
|
+
*
|
|
247
|
+
* `role-count` and `reachability` are BPMN's, registered here with UML's own
|
|
248
|
+
* roles and nothing else: a state machine with two beginnings and a ring of
|
|
249
|
+
* states nothing enters are the same two questions a pool with two start events
|
|
250
|
+
* and an unreachable task ask. So the claim `docs/add-a-framework` makes about
|
|
251
|
+
* the seam survives the largest notation in the library twice over — the
|
|
252
|
+
* fifteen edge roles are fifteen readings of `relation-endpoints`, the four
|
|
253
|
+
* frames are the membership families C4 already uses, and the sheet's own
|
|
254
|
+
* declaration is the `view-admissibility` C4 opened.
|
|
255
|
+
*
|
|
256
|
+
* ## Several rules say one sentence twice, and the reason is always the same
|
|
257
|
+
*
|
|
258
|
+
* Five pairs — the two histories, the two initial-node counts, the two finals,
|
|
259
|
+
* the two reachability walks — are one requirement declared twice because the
|
|
260
|
+
* family that answers it names ONE role: one subject role, or one edge role.
|
|
261
|
+
* They never double-report (an element carries one role, an edge carries one
|
|
262
|
+
* role, and each pair's two halves are flat siblings), and each half carries the
|
|
263
|
+
* sentence and the authority its own half of the notation has. Where the pair
|
|
264
|
+
* could have been collapsed by inventing an ancestor role, it was not: this
|
|
265
|
+
* vocabulary's whole authority is that every role in it is the specification's.
|
|
266
|
+
*/
|
|
267
|
+
export declare const UML_RULES: readonly ValidationRule[];
|