@rse/specbook 1.2.1 → 1.2.3
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/README.md +6 -2
- package/dst/specbook-api.d.ts +1 -0
- package/dst/specbook-api.js +19 -5
- package/dst/specbook-cli.js +1 -1
- package/dst/specbook-cmd-describe.js +2 -2
- package/dst/specbook-cmd-lint.js +10 -2
- package/dst/specbook-cmd-preview.js +12 -9
- package/dst/specbook-config.d.ts +4 -0
- package/dst/specbook-config.js +48 -10
- package/dst/specbook-diagram.js +56 -37
- package/dst/specbook-export-common.js +33 -22
- package/dst/specbook-export-html.css +62 -0
- package/dst/specbook-export-html.d.ts +1 -0
- package/dst/specbook-export-html.js +178 -63
- package/dst/specbook-export-md.js +9 -7
- package/dst/specbook-export-pdf.js +22 -8
- package/dst/specbook-format-schema.js +2 -0
- package/dst/specbook-format-spec.js +2 -0
- package/dst/specbook-format.md +3 -2
- package/dst/specbook-format.yaml +200 -216
- package/dst/specbook-link.d.ts +1 -0
- package/dst/specbook-link.js +11 -4
- package/dst/specbook-parse-common.d.ts +1 -0
- package/dst/specbook-parse-common.js +5 -0
- package/dst/specbook-parse-semantic.d.ts +2 -1
- package/dst/specbook-parse-semantic.js +37 -25
- package/dst/specbook-parse-syntax.js +20 -23
- package/dst/specbook-parse.d.ts +5 -0
- package/dst/specbook-parse.js +20 -1
- package/package.json +3 -3
package/dst/specbook-format.yaml
CHANGED
|
@@ -169,7 +169,7 @@
|
|
|
169
169
|
Why the solution exists.
|
|
170
170
|
- name: TARGET-AUDIENCE
|
|
171
171
|
desc: >
|
|
172
|
-
|
|
172
|
+
Whom the solution serves.
|
|
173
173
|
- name: SOLUTION
|
|
174
174
|
desc: >
|
|
175
175
|
What the solution is, in a single sentence naming its kind or
|
|
@@ -223,7 +223,7 @@
|
|
|
223
223
|
https://doi.org/10.1109/52.62930
|
|
224
224
|
diagram:
|
|
225
225
|
type: grid
|
|
226
|
-
nodes: "[[
|
|
226
|
+
nodes: "[[PREMISE:*]]"
|
|
227
227
|
properties:
|
|
228
228
|
- TYPE
|
|
229
229
|
- LIKELIHOOD
|
|
@@ -301,7 +301,7 @@
|
|
|
301
301
|
https://www.domainlanguage.com/ddd/
|
|
302
302
|
diagram:
|
|
303
303
|
type: grid
|
|
304
|
-
nodes: "[[
|
|
304
|
+
nodes: "[[TERM:*]]"
|
|
305
305
|
properties:
|
|
306
306
|
- TYPE
|
|
307
307
|
config:
|
|
@@ -327,8 +327,7 @@
|
|
|
327
327
|
diagram:
|
|
328
328
|
type: hub
|
|
329
329
|
center: self
|
|
330
|
-
nodes: "[[
|
|
331
|
-
[[REQS:UP.PERSONA:*]]"
|
|
330
|
+
nodes: "[[TERM:*]], [[PREMISE:*]], [[RULE:*]], [[DM.ENTITY:*]], [[PERSONA:*]]"
|
|
332
331
|
labeled: true
|
|
333
332
|
qualified: true
|
|
334
333
|
config:
|
|
@@ -355,7 +354,7 @@
|
|
|
355
354
|
that the terms form a hierarchy in which a rule governing the broader term
|
|
356
355
|
covers the narrower ones, too; at most one broader term, keeping the
|
|
357
356
|
hierarchy a tree.
|
|
358
|
-
value: "[[
|
|
357
|
+
value: "[[TERM:*]]"
|
|
359
358
|
optional: true
|
|
360
359
|
acyclic: true
|
|
361
360
|
- name: DISTINCT-FROM
|
|
@@ -363,7 +362,7 @@
|
|
|
363
362
|
Comma-separated references to the GLOSSARY terms easily confused with this
|
|
364
363
|
one but deliberately *not* synonymous, listed on both terms of each pair,
|
|
365
364
|
with the distinction stated in the definitions.
|
|
366
|
-
value: list([[
|
|
365
|
+
value: list([[TERM:*]])
|
|
367
366
|
optional: true
|
|
368
367
|
symmetric: true
|
|
369
368
|
- name: PREMISES
|
|
@@ -372,7 +371,7 @@
|
|
|
372
371
|
term, i.e. the assumptions, dependencies, and risks concerning the thing
|
|
373
372
|
or party it denotes (e.g. the dependency on the external system an
|
|
374
373
|
`Actor` term names), anchoring every premise in the ubiquitous language.
|
|
375
|
-
value: list([[
|
|
374
|
+
value: list([[PREMISE:*]])
|
|
376
375
|
optional: true
|
|
377
376
|
|
|
378
377
|
- kind: REQS
|
|
@@ -393,7 +392,7 @@
|
|
|
393
392
|
https://www.sciencedirect.com/book/9780125662512/the-persona-lifecycle
|
|
394
393
|
diagram:
|
|
395
394
|
type: grid
|
|
396
|
-
nodes: "[[
|
|
395
|
+
nodes: "[[PERSONA:*]]"
|
|
397
396
|
properties:
|
|
398
397
|
- TYPE
|
|
399
398
|
- ROLE
|
|
@@ -411,7 +410,7 @@
|
|
|
411
410
|
format:
|
|
412
411
|
maxTableColumns: 5
|
|
413
412
|
referenced:
|
|
414
|
-
- "[[
|
|
413
|
+
- "[[ROLE:*]]"
|
|
415
414
|
props:
|
|
416
415
|
- name: TYPE
|
|
417
416
|
desc: >
|
|
@@ -442,7 +441,7 @@
|
|
|
442
441
|
Comma-separated references to the GLOSSARY terms the persona embodies, i.e.
|
|
443
442
|
the domain roles it acts in and the domain concepts it primarily deals
|
|
444
443
|
with, so that every persona is anchored in the ubiquitous language.
|
|
445
|
-
value: list([[
|
|
444
|
+
value: list([[TERM:*]])
|
|
446
445
|
optional: true
|
|
447
446
|
- name: PROFICIENCY
|
|
448
447
|
desc: >
|
|
@@ -466,7 +465,7 @@
|
|
|
466
465
|
(usually a `Stakeholder`) vouches for, i.e. whose assumption it confirms,
|
|
467
466
|
whose dependency agreement it holds, or whose risk mitigation it owns;
|
|
468
467
|
omitted when the persona is accountable for no premise.
|
|
469
|
-
value: list([[
|
|
468
|
+
value: list([[PREMISE:*]])
|
|
470
469
|
optional: true
|
|
471
470
|
|
|
472
471
|
- kind: REQS
|
|
@@ -488,7 +487,7 @@
|
|
|
488
487
|
https://www.thisisservicedesigndoing.com/
|
|
489
488
|
diagram:
|
|
490
489
|
type: grid
|
|
491
|
-
nodes: "[[
|
|
490
|
+
nodes: "[[JOURNEY:*]]"
|
|
492
491
|
properties:
|
|
493
492
|
- ACTORS
|
|
494
493
|
childs:
|
|
@@ -501,7 +500,7 @@
|
|
|
501
500
|
desc: >
|
|
502
501
|
Comma-separated references to the User Personas objects experiencing the
|
|
503
502
|
journey.
|
|
504
|
-
value: list([[
|
|
503
|
+
value: list([[PERSONA:*]])
|
|
505
504
|
childs:
|
|
506
505
|
- kind: STEP
|
|
507
506
|
desc: >
|
|
@@ -564,7 +563,7 @@
|
|
|
564
563
|
https://www.agilebusiness.org/dsdm-project-framework/moscow-prioritisation.html
|
|
565
564
|
diagram:
|
|
566
565
|
type: grid
|
|
567
|
-
nodes: "[[
|
|
566
|
+
nodes: "[[FR.REQUIREMENT:*]]"
|
|
568
567
|
properties:
|
|
569
568
|
- PRIORITY
|
|
570
569
|
config:
|
|
@@ -586,7 +585,7 @@
|
|
|
586
585
|
format:
|
|
587
586
|
maxTableColumns: 6
|
|
588
587
|
referenced:
|
|
589
|
-
- "[[
|
|
588
|
+
- "[[USE-CASE:*]]"
|
|
590
589
|
props:
|
|
591
590
|
- name: PRIORITY
|
|
592
591
|
desc: >
|
|
@@ -601,7 +600,7 @@
|
|
|
601
600
|
Comma-separated references to the SOLUTION-PREMISES objects the
|
|
602
601
|
requirement rests on, i.e. the assumptions, dependencies, and risks whose
|
|
603
602
|
failure calls for revisiting it.
|
|
604
|
-
value: list([[
|
|
603
|
+
value: list([[PREMISE:*]])
|
|
605
604
|
optional: true
|
|
606
605
|
|
|
607
606
|
- kind: REQS
|
|
@@ -622,7 +621,7 @@
|
|
|
622
621
|
- Doran: There's a S.M.A.R.T. Way to Write Management's Goals and Objectives, Management Review 70(11) (1981)
|
|
623
622
|
diagram:
|
|
624
623
|
type: grid
|
|
625
|
-
nodes: "[[
|
|
624
|
+
nodes: "[[NR.REQUIREMENT:*]]"
|
|
626
625
|
properties:
|
|
627
626
|
- PRIORITY
|
|
628
627
|
- CATEGORY
|
|
@@ -663,14 +662,14 @@
|
|
|
663
662
|
desc: >
|
|
664
663
|
Comma-separated references to the FUNCTIONAL-REQUIREMENTS objects whose
|
|
665
664
|
capability the requirement bounds or constrains.
|
|
666
|
-
value: list([[
|
|
665
|
+
value: list([[FR.*]])
|
|
667
666
|
optional: true
|
|
668
667
|
- name: PREMISES
|
|
669
668
|
desc: >
|
|
670
669
|
Comma-separated references to the SOLUTION-PREMISES objects the
|
|
671
670
|
requirement rests on, i.e. the assumptions, dependencies, and risks whose
|
|
672
671
|
failure calls for revisiting it.
|
|
673
|
-
value: list([[
|
|
672
|
+
value: list([[PREMISE:*]])
|
|
674
673
|
optional: true
|
|
675
674
|
- name: METRIC
|
|
676
675
|
desc: >
|
|
@@ -697,7 +696,7 @@
|
|
|
697
696
|
https://www.omg.org/spec/DMN/
|
|
698
697
|
diagram:
|
|
699
698
|
type: grid
|
|
700
|
-
nodes: "[[
|
|
699
|
+
nodes: "[[RULE:*]]"
|
|
701
700
|
properties:
|
|
702
701
|
- CATEGORY
|
|
703
702
|
- SOURCE
|
|
@@ -730,7 +729,7 @@
|
|
|
730
729
|
format:
|
|
731
730
|
maxTableColumns: 5
|
|
732
731
|
referenced:
|
|
733
|
-
- "[[TEST
|
|
732
|
+
- "[[TEST-CASE:*]]"
|
|
734
733
|
props:
|
|
735
734
|
- name: CATEGORY
|
|
736
735
|
desc: >
|
|
@@ -763,20 +762,20 @@
|
|
|
763
762
|
Comma-separated references to the GLOSSARY terms the rule governs, i.e.
|
|
764
763
|
the domain terms its statement is about, so that every rule is anchored in
|
|
765
764
|
the ubiquitous language and every term shows the rules that hold for it.
|
|
766
|
-
value: list([[
|
|
765
|
+
value: list([[TERM:*]])
|
|
767
766
|
optional: true
|
|
768
767
|
- name: CONSTRAINS
|
|
769
768
|
desc: >
|
|
770
769
|
Comma-separated references to the FUNCTIONAL-REQUIREMENTS or
|
|
771
770
|
NON-FUNCTIONAL-REQUIREMENTS objects the rule constrains.
|
|
772
|
-
value: list([[
|
|
771
|
+
value: list([[FR.*]], [[NR.*]])
|
|
773
772
|
optional: true
|
|
774
773
|
- name: PREMISES
|
|
775
774
|
desc: >
|
|
776
775
|
Comma-separated references to the SOLUTION-PREMISES objects the rule
|
|
777
776
|
rests on, i.e. the assumptions, dependencies, and risks whose failure
|
|
778
777
|
calls for revisiting it.
|
|
779
|
-
value: list([[
|
|
778
|
+
value: list([[PREMISE:*]])
|
|
780
779
|
optional: true
|
|
781
780
|
|
|
782
781
|
- kind: REQS
|
|
@@ -800,7 +799,7 @@
|
|
|
800
799
|
https://link.springer.com/book/10.1007/978-3-662-49851-4
|
|
801
800
|
diagram:
|
|
802
801
|
type: grid
|
|
803
|
-
nodes: "[[
|
|
802
|
+
nodes: "[[WORKFLOW:*]]"
|
|
804
803
|
properties:
|
|
805
804
|
- ACTORS
|
|
806
805
|
config:
|
|
@@ -832,7 +831,7 @@
|
|
|
832
831
|
final: FINAL
|
|
833
832
|
diagram:
|
|
834
833
|
type: graph
|
|
835
|
-
edges: "[[
|
|
834
|
+
edges: "[[HANDOFF:*]]"
|
|
836
835
|
edgeSource: FROM
|
|
837
836
|
edgeTarget: TO
|
|
838
837
|
onlyConnected: true
|
|
@@ -846,13 +845,13 @@
|
|
|
846
845
|
Comma-separated references to the User Personas objects taking part in the
|
|
847
846
|
workflow, in the order of their first appearance, so that every `ACTOR` of
|
|
848
847
|
an activity is listed here.
|
|
849
|
-
value: list([[
|
|
848
|
+
value: list([[PERSONA:*]])
|
|
850
849
|
- name: OWNER
|
|
851
850
|
desc: >
|
|
852
851
|
Reference to the User Personas object (usually a `Stakeholder`) accountable
|
|
853
852
|
for the workflow as a whole, i.e. for its outcome and its rules, as opposed
|
|
854
853
|
to the actors performing its activities.
|
|
855
|
-
value: "[[
|
|
854
|
+
value: "[[PERSONA:*]]"
|
|
856
855
|
optional: true
|
|
857
856
|
- name: TRIGGER
|
|
858
857
|
desc: >
|
|
@@ -867,20 +866,20 @@
|
|
|
867
866
|
Comma-separated references to the User Journey objects the workflow spans,
|
|
868
867
|
i.e. the per-persona experiences of which the workflow is the cross-persona
|
|
869
868
|
counterpart.
|
|
870
|
-
value: list([[
|
|
869
|
+
value: list([[JOURNEY:*]])
|
|
871
870
|
optional: true
|
|
872
871
|
- name: TERMS
|
|
873
872
|
desc: >
|
|
874
873
|
Comma-separated references to the GLOSSARY terms of type `Activity` the
|
|
875
874
|
workflow realizes, anchoring it in the ubiquitous language.
|
|
876
|
-
value: list([[
|
|
875
|
+
value: list([[TERM:*]])
|
|
877
876
|
optional: true
|
|
878
877
|
- name: RULES
|
|
879
878
|
desc: >
|
|
880
879
|
Comma-separated references to the DOMAIN-RULES objects governing the
|
|
881
880
|
workflow as a whole (e.g. a deadline or an approval policy), while a rule
|
|
882
881
|
checked at a single handoff is referenced from the handoff instead.
|
|
883
|
-
value: list([[
|
|
882
|
+
value: list([[RULE:*]])
|
|
884
883
|
optional: true
|
|
885
884
|
childs:
|
|
886
885
|
- kind: ACTIVITY
|
|
@@ -901,7 +900,7 @@
|
|
|
901
900
|
sending the invitations) or `Time` for a waiting period ending with
|
|
902
901
|
a deadline; several parties are given only for an activity they
|
|
903
902
|
perform jointly, as a change of the acting party is a handoff.
|
|
904
|
-
value: list([[
|
|
903
|
+
value: list([[PERSONA:*]], enum(System,Time))
|
|
905
904
|
- name: INITIAL
|
|
906
905
|
desc: >
|
|
907
906
|
Whether the activity is the initial one, i.e. the single activity
|
|
@@ -933,11 +932,11 @@
|
|
|
933
932
|
props:
|
|
934
933
|
- name: FROM
|
|
935
934
|
desc: The activity (of the same workflow) the handoff departs from.
|
|
936
|
-
value: "[[
|
|
935
|
+
value: "[[ACTIVITY:*]]"
|
|
937
936
|
local: true
|
|
938
937
|
- name: TO
|
|
939
938
|
desc: The activity (of the same workflow) the handoff arrives at.
|
|
940
|
-
value: "[[
|
|
939
|
+
value: "[[ACTIVITY:*]]"
|
|
941
940
|
local: true
|
|
942
941
|
- name: CONDITION
|
|
943
942
|
desc: >
|
|
@@ -950,7 +949,7 @@
|
|
|
950
949
|
desc: >
|
|
951
950
|
Comma-separated references to the DOMAIN-RULES objects the
|
|
952
951
|
handoff enforces, usually through its `CONDITION`.
|
|
953
|
-
value: list([[
|
|
952
|
+
value: list([[RULE:*]])
|
|
954
953
|
optional: true
|
|
955
954
|
|
|
956
955
|
- kind: REQS
|
|
@@ -971,7 +970,7 @@
|
|
|
971
970
|
https://www.ivarjacobson.com/publications/white-papers/use-case-20-e-book
|
|
972
971
|
diagram:
|
|
973
972
|
type: grid
|
|
974
|
-
nodes: "[[
|
|
973
|
+
nodes: "[[USE-CASE:*]]"
|
|
975
974
|
config:
|
|
976
975
|
size-node-height-scale: 4
|
|
977
976
|
grid-columns-max: 4
|
|
@@ -992,9 +991,8 @@
|
|
|
992
991
|
diagram:
|
|
993
992
|
type: hub
|
|
994
993
|
center: self
|
|
995
|
-
nodes: "[[
|
|
996
|
-
[[
|
|
997
|
-
[[DATA:SM.LIFECYCLE:*.TRANSITION:*]]"
|
|
994
|
+
nodes: "[[USE-CASE:*]], [[PERSONA:*]], [[STEP:*]], [[ACTIVITY:*]],
|
|
995
|
+
[[FR.REQUIREMENT:*]], [[RULE:*]], [[TRANSITION:*]]"
|
|
998
996
|
labeled: true
|
|
999
997
|
qualified: true
|
|
1000
998
|
config:
|
|
@@ -1005,33 +1003,33 @@
|
|
|
1005
1003
|
desc: >
|
|
1006
1004
|
Reference to the PERSONAS object denoting the primary actor pursuing the
|
|
1007
1005
|
goal.
|
|
1008
|
-
value: "[[
|
|
1006
|
+
value: "[[PERSONA:*]]"
|
|
1009
1007
|
- name: JOURNEYS
|
|
1010
1008
|
desc: >
|
|
1011
1009
|
Comma-separated references to the User Journey STEP objects the use case
|
|
1012
1010
|
covers, tracing the journey into the use cases.
|
|
1013
|
-
value: list([[
|
|
1011
|
+
value: list([[STEP:*]])
|
|
1014
1012
|
optional: true
|
|
1015
1013
|
- name: ACTIVITIES
|
|
1016
1014
|
desc: >
|
|
1017
1015
|
Comma-separated references to the Domain Workflow ACTIVITY objects within
|
|
1018
1016
|
which the actor performs the use case, tracing the workflow into the use
|
|
1019
1017
|
cases; omitted for a use case outside any workflow.
|
|
1020
|
-
value: list([[
|
|
1018
|
+
value: list([[ACTIVITY:*]])
|
|
1021
1019
|
optional: true
|
|
1022
1020
|
- name: REQUIREMENTS
|
|
1023
1021
|
desc: >
|
|
1024
1022
|
Comma-separated references to the FUNCTIONAL-REQUIREMENTS objects the use
|
|
1025
1023
|
case exercises, i.e. whose behavior its scenarios walk through, so that every
|
|
1026
1024
|
Functional Requirement is exercised by at least one use case.
|
|
1027
|
-
value: list([[
|
|
1025
|
+
value: list([[FR.*]])
|
|
1028
1026
|
optional: true
|
|
1029
1027
|
- name: RULES
|
|
1030
1028
|
desc: >
|
|
1031
1029
|
Comma-separated references to the DOMAIN-RULES objects the scenarios of
|
|
1032
1030
|
the use case apply, i.e. whose condition a scenario step checks or enforces
|
|
1033
1031
|
(e.g. an access rule in an authentication step).
|
|
1034
|
-
value: list([[
|
|
1032
|
+
value: list([[RULE:*]])
|
|
1035
1033
|
optional: true
|
|
1036
1034
|
- name: INCLUDES
|
|
1037
1035
|
desc: >
|
|
@@ -1040,7 +1038,7 @@
|
|
|
1040
1038
|
invokes (e.g. `The attendee authenticates ([[USE-CASE:authenticate]]).`),
|
|
1041
1039
|
factoring a flow shared by several use cases out into a use case of its own
|
|
1042
1040
|
instead of restating its steps.
|
|
1043
|
-
value: list([[
|
|
1041
|
+
value: list([[USE-CASE:*]])
|
|
1044
1042
|
optional: true
|
|
1045
1043
|
acyclic: true
|
|
1046
1044
|
- name: PRE-CONDITION
|
|
@@ -1122,8 +1120,8 @@
|
|
|
1122
1120
|
https://www.omg.org/spec/UML/2.5.1
|
|
1123
1121
|
diagram:
|
|
1124
1122
|
type: graph
|
|
1125
|
-
nodes: "[[
|
|
1126
|
-
edges: "[[
|
|
1123
|
+
nodes: "[[DM.ENTITY:*]]"
|
|
1124
|
+
edges: "[[RELATION:*]]"
|
|
1127
1125
|
childs:
|
|
1128
1126
|
- kind: ENTITY
|
|
1129
1127
|
name: "[A-Z][a-zA-Z0-9]*"
|
|
@@ -1134,8 +1132,8 @@
|
|
|
1134
1132
|
diagram:
|
|
1135
1133
|
type: hub
|
|
1136
1134
|
center: self
|
|
1137
|
-
nodes: "[[
|
|
1138
|
-
edges: "[[
|
|
1135
|
+
nodes: "[[DM.ENTITY:*]]"
|
|
1136
|
+
edges: "[[RELATION:*]]"
|
|
1139
1137
|
config:
|
|
1140
1138
|
size-node-width-max: 440
|
|
1141
1139
|
props:
|
|
@@ -1144,14 +1142,14 @@
|
|
|
1144
1142
|
Comma-separated references to the FUNCTIONAL-REQUIREMENTS objects the
|
|
1145
1143
|
entity supports, i.e. whose behavior needs the information it carries,
|
|
1146
1144
|
tracing the requirements into the data model.
|
|
1147
|
-
value: list([[
|
|
1145
|
+
value: list([[FR.*]])
|
|
1148
1146
|
optional: true
|
|
1149
1147
|
- name: TERMS
|
|
1150
1148
|
desc: >
|
|
1151
1149
|
Comma-separated references to the GLOSSARY terms the entity materializes,
|
|
1152
1150
|
i.e. the domain terms whose information it carries, so that every entity
|
|
1153
1151
|
is anchored in the ubiquitous language and every term shows its data.
|
|
1154
|
-
value: list([[
|
|
1152
|
+
value: list([[TERM:*]])
|
|
1155
1153
|
optional: true
|
|
1156
1154
|
childs:
|
|
1157
1155
|
- kind: ATTRIBUTE
|
|
@@ -1222,7 +1220,7 @@
|
|
|
1222
1220
|
props:
|
|
1223
1221
|
- name: TARGET
|
|
1224
1222
|
desc: Reference to the DATA-MODEL entity the directed relation targets.
|
|
1225
|
-
value: "[[
|
|
1223
|
+
value: "[[DM.ENTITY:*]]"
|
|
1226
1224
|
- name: KIND
|
|
1227
1225
|
desc: >
|
|
1228
1226
|
The kind of the directed relation: `association` for a plain
|
|
@@ -1259,7 +1257,7 @@
|
|
|
1259
1257
|
https://www.omg.org/spec/UML/2.5.1
|
|
1260
1258
|
diagram:
|
|
1261
1259
|
type: grid
|
|
1262
|
-
nodes: "[[
|
|
1260
|
+
nodes: "[[LIFECYCLE:*]]"
|
|
1263
1261
|
properties:
|
|
1264
1262
|
- ENTITY
|
|
1265
1263
|
config:
|
|
@@ -1283,7 +1281,7 @@
|
|
|
1283
1281
|
final: FINAL
|
|
1284
1282
|
diagram:
|
|
1285
1283
|
type: graph
|
|
1286
|
-
edges: "[[
|
|
1284
|
+
edges: "[[TRANSITION:*]]"
|
|
1287
1285
|
edgeSource: FROM
|
|
1288
1286
|
edgeTarget: TO
|
|
1289
1287
|
onlyConnected: true
|
|
@@ -1297,7 +1295,7 @@
|
|
|
1297
1295
|
desc: >
|
|
1298
1296
|
Reference to the DATA-MODEL entity whose lifecycle this models, at most one
|
|
1299
1297
|
lifecycle per entity (an entity without a lifecycle has a trivial one).
|
|
1300
|
-
value: "[[
|
|
1298
|
+
value: "[[DM.ENTITY:*]]"
|
|
1301
1299
|
unique: true
|
|
1302
1300
|
childs:
|
|
1303
1301
|
- kind: STATE
|
|
@@ -1348,11 +1346,11 @@
|
|
|
1348
1346
|
props:
|
|
1349
1347
|
- name: FROM
|
|
1350
1348
|
desc: The state (of the same lifecycle) the transition departs from.
|
|
1351
|
-
value: "[[
|
|
1349
|
+
value: "[[STATE:*]]"
|
|
1352
1350
|
local: true
|
|
1353
1351
|
- name: TO
|
|
1354
1352
|
desc: The state (of the same lifecycle) the transition arrives at.
|
|
1355
|
-
value: "[[
|
|
1353
|
+
value: "[[STATE:*]]"
|
|
1356
1354
|
local: true
|
|
1357
1355
|
- name: ACTOR
|
|
1358
1356
|
desc: >
|
|
@@ -1360,7 +1358,7 @@
|
|
|
1360
1358
|
the transition, and/or `System` for a transition the solution
|
|
1361
1359
|
triggers on its own or `Time` for one triggered by the passing of
|
|
1362
1360
|
time (e.g. an expiry); omitted when the trigger is irrelevant.
|
|
1363
|
-
value: list([[
|
|
1361
|
+
value: list([[PERSONA:*]], enum(System,Time))
|
|
1364
1362
|
optional: true
|
|
1365
1363
|
- name: GUARD
|
|
1366
1364
|
desc: >
|
|
@@ -1373,7 +1371,7 @@
|
|
|
1373
1371
|
desc: >
|
|
1374
1372
|
Comma-separated references to the DOMAIN-RULES objects the
|
|
1375
1373
|
transition enforces, usually through its `GUARD`.
|
|
1376
|
-
value: list([[
|
|
1374
|
+
value: list([[RULE:*]])
|
|
1377
1375
|
optional: true
|
|
1378
1376
|
- name: USE-CASES
|
|
1379
1377
|
desc: >
|
|
@@ -1382,7 +1380,7 @@
|
|
|
1382
1380
|
causes the state change, tracing the transition into the use
|
|
1383
1381
|
cases exercising it; omitted for a transition no use case
|
|
1384
1382
|
triggers (e.g. one triggered by `Time` or by the system alone).
|
|
1385
|
-
value: list([[
|
|
1383
|
+
value: list([[USE-CASE:*]])
|
|
1386
1384
|
optional: true
|
|
1387
1385
|
|
|
1388
1386
|
- kind: DATA
|
|
@@ -1409,8 +1407,8 @@
|
|
|
1409
1407
|
https://docs.oasis-open.org/xacml/3.0/xacml-3.0-core-spec-os-en.html
|
|
1410
1408
|
diagram:
|
|
1411
1409
|
type: graph
|
|
1412
|
-
nodes: "[[
|
|
1413
|
-
edges: "[[
|
|
1410
|
+
nodes: "[[ROLE:*]], [[DM.ENTITY:*]]"
|
|
1411
|
+
edges: "[[PERMISSION:*]]"
|
|
1414
1412
|
edgeTarget: ENTITY
|
|
1415
1413
|
onlyConnected: true
|
|
1416
1414
|
qualified: true
|
|
@@ -1431,8 +1429,7 @@
|
|
|
1431
1429
|
type: hub
|
|
1432
1430
|
center: self
|
|
1433
1431
|
deep: true
|
|
1434
|
-
nodes: "[[
|
|
1435
|
-
[[REQS:DR.RULE:*]]"
|
|
1432
|
+
nodes: "[[ROLE:*]], [[PERSONA:*]], [[TERM:*]], [[DM.ENTITY:*]], [[RULE:*]]"
|
|
1436
1433
|
labeled: true
|
|
1437
1434
|
qualified: true
|
|
1438
1435
|
config:
|
|
@@ -1448,12 +1445,12 @@
|
|
|
1448
1445
|
`Actor` denoting the external systems holding the role (e.g. a registration
|
|
1449
1446
|
system calling the machine-facing interface), as an external system is no
|
|
1450
1447
|
persona.
|
|
1451
|
-
value: list([[
|
|
1448
|
+
value: list([[PERSONA:*]], [[TERM:*]])
|
|
1452
1449
|
- name: TERM
|
|
1453
1450
|
desc: >
|
|
1454
1451
|
Reference to the GLOSSARY term of type `Actor` the role grants, anchoring
|
|
1455
1452
|
the role in the ubiquitous language.
|
|
1456
|
-
value: "[[
|
|
1453
|
+
value: "[[TERM:*]]"
|
|
1457
1454
|
optional: true
|
|
1458
1455
|
- name: INHERITS
|
|
1459
1456
|
desc: >
|
|
@@ -1461,7 +1458,7 @@
|
|
|
1461
1458
|
this role holds in addition to its own (a role hierarchy, e.g. a manager
|
|
1462
1459
|
inheriting the rights of a moderator), where an inherited permission is
|
|
1463
1460
|
not restated.
|
|
1464
|
-
value: list([[
|
|
1461
|
+
value: list([[ROLE:*]])
|
|
1465
1462
|
optional: true
|
|
1466
1463
|
acyclic: true
|
|
1467
1464
|
childs:
|
|
@@ -1481,7 +1478,7 @@
|
|
|
1481
1478
|
props:
|
|
1482
1479
|
- name: ENTITY
|
|
1483
1480
|
desc: Reference to the DATA-MODEL entity the permission is granted on.
|
|
1484
|
-
value: "[[
|
|
1481
|
+
value: "[[DM.ENTITY:*]]"
|
|
1485
1482
|
- name: OPERATIONS
|
|
1486
1483
|
desc: >
|
|
1487
1484
|
Comma-separated operations the role may perform on the entity: the
|
|
@@ -1490,14 +1487,14 @@
|
|
|
1490
1487
|
(a state change is not an `Update`: it is granted by its transition
|
|
1491
1488
|
only), where every persona named as `ACTOR` of a transition holds
|
|
1492
1489
|
a role granting it.
|
|
1493
|
-
value: list(enum(Create,Read,Update,Delete), [[
|
|
1490
|
+
value: list(enum(Create,Read,Update,Delete), [[TRANSITION:*]])
|
|
1494
1491
|
- name: STATES
|
|
1495
1492
|
desc: >
|
|
1496
1493
|
Comma-separated references to the STATE-MODEL states of the entity
|
|
1497
1494
|
in which the operations are granted (`Create` needs none, as a
|
|
1498
1495
|
creation enters the initial state); omitted when granted in every
|
|
1499
1496
|
state or when the entity has no lifecycle.
|
|
1500
|
-
value: list([[
|
|
1497
|
+
value: list([[STATE:*]])
|
|
1501
1498
|
optional: true
|
|
1502
1499
|
- name: CONDITION
|
|
1503
1500
|
desc: >
|
|
@@ -1514,7 +1511,7 @@
|
|
|
1514
1511
|
Comma-separated references to the DOMAIN-RULES objects justifying
|
|
1515
1512
|
or bounding the permission, i.e. the rules whose statement grants
|
|
1516
1513
|
or limits the right.
|
|
1517
|
-
value: list([[
|
|
1514
|
+
value: list([[RULE:*]])
|
|
1518
1515
|
optional: true
|
|
1519
1516
|
|
|
1520
1517
|
- kind: APIS
|
|
@@ -1543,7 +1540,7 @@
|
|
|
1543
1540
|
https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/V1_chap12.html
|
|
1544
1541
|
diagram:
|
|
1545
1542
|
type: grid
|
|
1546
|
-
nodes: "[[
|
|
1543
|
+
nodes: "[[INTERFACE:*]]"
|
|
1547
1544
|
properties:
|
|
1548
1545
|
- KIND
|
|
1549
1546
|
- DIRECTION
|
|
@@ -1563,7 +1560,7 @@
|
|
|
1563
1560
|
diagram:
|
|
1564
1561
|
type: hub
|
|
1565
1562
|
center: self
|
|
1566
|
-
nodes: "[[
|
|
1563
|
+
nodes: "[[INTERFACE:*]], [[TYPE:*]], [[ENDPOINT:*]]"
|
|
1567
1564
|
labeled: true
|
|
1568
1565
|
qualified: true
|
|
1569
1566
|
config:
|
|
@@ -1603,7 +1600,7 @@
|
|
|
1603
1600
|
Comma-separated references to the PERSONAS objects which use the interface
|
|
1604
1601
|
(the external systems using it reference the interface from the
|
|
1605
1602
|
CONTEXT-VIEW instead).
|
|
1606
|
-
value: list([[
|
|
1603
|
+
value: list([[PERSONA:*]])
|
|
1607
1604
|
optional: true
|
|
1608
1605
|
|
|
1609
1606
|
- kind: APIS
|
|
@@ -1625,7 +1622,7 @@
|
|
|
1625
1622
|
https://spec.graphql.org/October2021/
|
|
1626
1623
|
diagram:
|
|
1627
1624
|
type: graph
|
|
1628
|
-
nodes: "[[
|
|
1625
|
+
nodes: "[[TYPE:*]]"
|
|
1629
1626
|
deep: true
|
|
1630
1627
|
onlyConnected: true
|
|
1631
1628
|
labeled: true
|
|
@@ -1648,7 +1645,7 @@
|
|
|
1648
1645
|
diagram:
|
|
1649
1646
|
type: hub
|
|
1650
1647
|
center: self
|
|
1651
|
-
nodes: "[[
|
|
1648
|
+
nodes: "[[TYPE:*]], [[INTERFACE:*]]"
|
|
1652
1649
|
deep: true
|
|
1653
1650
|
labeled: true
|
|
1654
1651
|
qualified: true
|
|
@@ -1661,7 +1658,7 @@
|
|
|
1661
1658
|
Comma-separated references to the INTERFACE-MODEL objects the type is
|
|
1662
1659
|
exchanged through, i.e. the interfaces whose endpoints consume or return it,
|
|
1663
1660
|
directly or through the fields of another type.
|
|
1664
|
-
value: list([[
|
|
1661
|
+
value: list([[INTERFACE:*]])
|
|
1665
1662
|
- name: BASE
|
|
1666
1663
|
desc: >
|
|
1667
1664
|
The underlying type of a non-object (value) type: one of the primitives
|
|
@@ -1673,7 +1670,7 @@
|
|
|
1673
1670
|
object (an alias), where several
|
|
1674
1671
|
comma-separated alternatives form a named union type; omitted for
|
|
1675
1672
|
an object type composed of fields.
|
|
1676
|
-
value: list([[
|
|
1673
|
+
value: list([[TYPE:*]], /^(?:boolean|string|text|integer|float|decimal|uuid|bytes|date|time|datetime|duration|any|enum\((?:[A-Za-z0-9_-]+)(?:,\s*[A-Za-z0-9_-]+)*\))$/)
|
|
1677
1674
|
optional: true
|
|
1678
1675
|
- name: EXTENDS
|
|
1679
1676
|
desc: >
|
|
@@ -1683,7 +1680,7 @@
|
|
|
1683
1680
|
envelope type, or a GraphQL type implementing interfaces), where an
|
|
1684
1681
|
inherited field is not redeclared; omitted for a type carrying a
|
|
1685
1682
|
`BASE`.
|
|
1686
|
-
value: list([[
|
|
1683
|
+
value: list([[TYPE:*]])
|
|
1687
1684
|
acyclic: true
|
|
1688
1685
|
optional: true
|
|
1689
1686
|
- name: MATERIALIZES
|
|
@@ -1692,7 +1689,7 @@
|
|
|
1692
1689
|
materializes (e.g. as a data transfer object carrying the
|
|
1693
1690
|
attributes of one entity, or as a view flattening several
|
|
1694
1691
|
entities), tracing the interface into the data model.
|
|
1695
|
-
value: list([[
|
|
1692
|
+
value: list([[DM.ENTITY:*]])
|
|
1696
1693
|
optional: true
|
|
1697
1694
|
childs:
|
|
1698
1695
|
- kind: FIELD
|
|
@@ -1715,7 +1712,7 @@
|
|
|
1715
1712
|
enumeration `enum(XXX,YYY[,...])` (a reusable one is a `TYPE`
|
|
1716
1713
|
object with an `enum(...)` base), where several comma-separated
|
|
1717
1714
|
alternatives form a union type.
|
|
1718
|
-
value: list([[
|
|
1715
|
+
value: list([[TYPE:*]], /^(?:boolean|string|text|integer|float|decimal|uuid|bytes|date|time|datetime|duration|any|enum\((?:[A-Za-z0-9_-]+)(?:,\s*[A-Za-z0-9_-]+)*\))$/)
|
|
1719
1716
|
- name: ARITY
|
|
1720
1717
|
desc: >
|
|
1721
1718
|
The arity (cardinality) of the field value: `0..1` or `?`
|
|
@@ -1758,7 +1755,7 @@
|
|
|
1758
1755
|
object (a scalar, enumeration, alias, or union
|
|
1759
1756
|
type carrying a `BASE`); an object type composed of fields is no
|
|
1760
1757
|
value type and hence not admitted, as a literal cannot express it.
|
|
1761
|
-
value: list([[
|
|
1758
|
+
value: list([[TYPE:*]], /^(?:boolean|string|text|integer|float|decimal|uuid|bytes|date|time|datetime|duration|any|enum\((?:[A-Za-z0-9_-]+)(?:,\s*[A-Za-z0-9_-]+)*\))$/)
|
|
1762
1759
|
- name: VALUE
|
|
1763
1760
|
desc: >
|
|
1764
1761
|
The literal value of the constant (e.g. `100`, `event/`), matching
|
|
@@ -1788,7 +1785,7 @@
|
|
|
1788
1785
|
https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/V1_chap12.html
|
|
1789
1786
|
diagram:
|
|
1790
1787
|
type: graph
|
|
1791
|
-
nodes: "[[
|
|
1788
|
+
nodes: "[[ENDPOINT:*]], [[TYPE:*]]"
|
|
1792
1789
|
deep: true
|
|
1793
1790
|
onlyConnected: true
|
|
1794
1791
|
labeled: true
|
|
@@ -1818,8 +1815,8 @@
|
|
|
1818
1815
|
diagram:
|
|
1819
1816
|
type: hub
|
|
1820
1817
|
center: self
|
|
1821
|
-
nodes: "[[
|
|
1822
|
-
[[
|
|
1818
|
+
nodes: "[[ENDPOINT:*]], [[TYPE:*]], [[CONSTANT:*]], [[INTERFACE:*]],
|
|
1819
|
+
[[PERMISSION:*]]"
|
|
1823
1820
|
deep: true
|
|
1824
1821
|
labeled: true
|
|
1825
1822
|
qualified: true
|
|
@@ -1829,7 +1826,7 @@
|
|
|
1829
1826
|
props:
|
|
1830
1827
|
- name: INTERFACE
|
|
1831
1828
|
desc: The INTERFACES object the endpoint belongs to and is addressed within.
|
|
1832
|
-
value: "[[
|
|
1829
|
+
value: "[[INTERFACE:*]]"
|
|
1833
1830
|
- name: PERMISSIONS
|
|
1834
1831
|
desc: >
|
|
1835
1832
|
Comma-separated references to the AUTHORIZATION-MODEL permission objects
|
|
@@ -1838,7 +1835,7 @@
|
|
|
1838
1835
|
the operation, so that the authorization of every endpoint is stated
|
|
1839
1836
|
rather than left to the implementation; omitted for an endpoint open to
|
|
1840
1837
|
every caller.
|
|
1841
|
-
value: list([[
|
|
1838
|
+
value: list([[PERMISSION:*]])
|
|
1842
1839
|
optional: true
|
|
1843
1840
|
- name: OPERATION
|
|
1844
1841
|
desc: |
|
|
@@ -1873,7 +1870,7 @@
|
|
|
1873
1870
|
desc: >
|
|
1874
1871
|
Comma-separated references to the USE-CASES objects the endpoint
|
|
1875
1872
|
realizes, tracing the requirements into the interface.
|
|
1876
|
-
value: list([[
|
|
1873
|
+
value: list([[USE-CASE:*]])
|
|
1877
1874
|
optional: true
|
|
1878
1875
|
childs:
|
|
1879
1876
|
- kind: OPTION
|
|
@@ -1896,7 +1893,7 @@
|
|
|
1896
1893
|
enumeration `enum(XXX,YYY[,...])` (a reusable one is a `TYPE`
|
|
1897
1894
|
object with an `enum(...)` base), where several comma-separated
|
|
1898
1895
|
alternatives form a union type.
|
|
1899
|
-
value: list([[
|
|
1896
|
+
value: list([[TYPE:*]], /^(?:boolean|string|text|integer|float|decimal|uuid|bytes|date|time|datetime|duration|any|enum\((?:[A-Za-z0-9_-]+)(?:,\s*[A-Za-z0-9_-]+)*\))$/)
|
|
1900
1897
|
- name: ALIAS
|
|
1901
1898
|
desc: >
|
|
1902
1899
|
Comma-separated alternative names of the option in the
|
|
@@ -1945,7 +1942,7 @@
|
|
|
1945
1942
|
inline enumeration `enum(XXX,YYY[,...])` (a reusable one is a
|
|
1946
1943
|
`TYPE` object with an `enum(...)` base), where several comma-separated
|
|
1947
1944
|
alternatives form a union type.
|
|
1948
|
-
value: list([[
|
|
1945
|
+
value: list([[TYPE:*]], /^(?:boolean|string|text|integer|float|decimal|uuid|bytes|date|time|datetime|duration|any|enum\((?:[A-Za-z0-9_-]+)(?:,\s*[A-Za-z0-9_-]+)*\))$/)
|
|
1949
1946
|
- name: ARITY
|
|
1950
1947
|
desc: >
|
|
1951
1948
|
The arity (cardinality) of the argument:
|
|
@@ -1989,7 +1986,7 @@
|
|
|
1989
1986
|
enumeration `enum(XXX,YYY[,...])` (a reusable one is a `TYPE`
|
|
1990
1987
|
object with an `enum(...)` base), where several comma-separated
|
|
1991
1988
|
alternatives form a union type.
|
|
1992
|
-
value: list([[
|
|
1989
|
+
value: list([[TYPE:*]], /^(?:boolean|string|text|integer|float|decimal|uuid|bytes|date|time|datetime|duration|any|enum\((?:[A-Za-z0-9_-]+)(?:,\s*[A-Za-z0-9_-]+)*\))$/)
|
|
1993
1990
|
- name: ARITY
|
|
1994
1991
|
desc: >
|
|
1995
1992
|
The arity (cardinality) of the result:
|
|
@@ -2030,7 +2027,7 @@
|
|
|
2030
2027
|
optional: true
|
|
2031
2028
|
diagram:
|
|
2032
2029
|
type: grid
|
|
2033
|
-
nodes: "[[
|
|
2030
|
+
nodes: "[[PRINCIPLE:*]]"
|
|
2034
2031
|
properties:
|
|
2035
2032
|
- CATEGORY
|
|
2036
2033
|
config:
|
|
@@ -2049,12 +2046,11 @@
|
|
|
2049
2046
|
it rejects is its `TRADE-OFF`), and is not verifiable by a metric (a measurable
|
|
2050
2047
|
quality bound is a Non-Functional Requirement instead).
|
|
2051
2048
|
referenced:
|
|
2052
|
-
- "[[
|
|
2049
|
+
- "[[PATTERN:*]]"
|
|
2053
2050
|
diagram:
|
|
2054
2051
|
type: hub
|
|
2055
2052
|
center: self
|
|
2056
|
-
nodes: "[[
|
|
2057
|
-
[[UXUI:DP.PATTERN:*]]"
|
|
2053
|
+
nodes: "[[PRINCIPLE:*]], [[PERSONA:*]], [[STEP:*]], [[PATTERN:*]]"
|
|
2058
2054
|
labeled: true
|
|
2059
2055
|
qualified: true
|
|
2060
2056
|
config:
|
|
@@ -2073,14 +2069,14 @@
|
|
|
2073
2069
|
Comma-separated references to the User Personas objects whose experience
|
|
2074
2070
|
the principle governs, omitted for a principle governing the experience of
|
|
2075
2071
|
all users alike.
|
|
2076
|
-
value: list([[
|
|
2072
|
+
value: list([[PERSONA:*]])
|
|
2077
2073
|
optional: true
|
|
2078
2074
|
- name: MOTIVATED-BY
|
|
2079
2075
|
desc: >
|
|
2080
2076
|
Comma-separated references to the User Journey step objects whose
|
|
2081
2077
|
`PAIN-POINT` or `OPPORTUNITY` the principle answers, so that a principle is
|
|
2082
2078
|
grounded in the observed experience rather than in taste alone.
|
|
2083
|
-
value: list([[
|
|
2079
|
+
value: list([[STEP:*]])
|
|
2084
2080
|
optional: true
|
|
2085
2081
|
- name: TRADE-OFF
|
|
2086
2082
|
desc: >
|
|
@@ -2112,7 +2108,7 @@
|
|
|
2112
2108
|
optional: true
|
|
2113
2109
|
diagram:
|
|
2114
2110
|
type: grid
|
|
2115
|
-
nodes: "[[
|
|
2111
|
+
nodes: "[[CONVENTION:*]]"
|
|
2116
2112
|
properties:
|
|
2117
2113
|
- CATEGORY
|
|
2118
2114
|
config:
|
|
@@ -2144,21 +2140,21 @@
|
|
|
2144
2140
|
Comma-separated references to the User Personas objects the convention
|
|
2145
2141
|
addresses, omitted for a convention governing the text shown to all users
|
|
2146
2142
|
alike.
|
|
2147
|
-
value: list([[
|
|
2143
|
+
value: list([[PERSONA:*]])
|
|
2148
2144
|
optional: true
|
|
2149
2145
|
- name: PRINCIPLES
|
|
2150
2146
|
desc: >
|
|
2151
2147
|
Comma-separated references to the INTERACTION-CONCEPT objects the convention
|
|
2152
2148
|
supports in wording, so that a convention is grounded in the interaction
|
|
2153
2149
|
philosophy rather than in taste alone.
|
|
2154
|
-
value: list([[
|
|
2150
|
+
value: list([[PRINCIPLE:*]])
|
|
2155
2151
|
optional: true
|
|
2156
2152
|
- name: TERMS
|
|
2157
2153
|
desc: >
|
|
2158
2154
|
Comma-separated references to the GLOSSARY terms whose surfacing in the
|
|
2159
2155
|
user-facing text the convention governs, so that the Domain Glossary defines
|
|
2160
2156
|
the term and the convention states how it is written.
|
|
2161
|
-
value: list([[
|
|
2157
|
+
value: list([[TERM:*]])
|
|
2162
2158
|
optional: true
|
|
2163
2159
|
- name: EXAMPLE
|
|
2164
2160
|
desc: >
|
|
@@ -2183,7 +2179,7 @@
|
|
|
2183
2179
|
optional: true
|
|
2184
2180
|
diagram:
|
|
2185
2181
|
type: grid
|
|
2186
|
-
nodes: "[[
|
|
2182
|
+
nodes: "[[PATTERN:*]]"
|
|
2187
2183
|
properties:
|
|
2188
2184
|
- CATEGORY
|
|
2189
2185
|
config:
|
|
@@ -2205,7 +2201,7 @@
|
|
|
2205
2201
|
diagram:
|
|
2206
2202
|
type: hub
|
|
2207
2203
|
center: self
|
|
2208
|
-
nodes: "[[
|
|
2204
|
+
nodes: "[[PATTERN:*]], [[PRINCIPLE:*]], [[STORYBOARD:*]]"
|
|
2209
2205
|
deep: true
|
|
2210
2206
|
labeled: true
|
|
2211
2207
|
qualified: true
|
|
@@ -2226,7 +2222,7 @@
|
|
|
2226
2222
|
Comma-separated references to the User Personas objects whose interaction
|
|
2227
2223
|
the pattern structures, omitted for a pattern applied to the interaction of
|
|
2228
2224
|
all users alike.
|
|
2229
|
-
value: list([[
|
|
2225
|
+
value: list([[PERSONA:*]])
|
|
2230
2226
|
optional: true
|
|
2231
2227
|
- name: CONTEXT
|
|
2232
2228
|
desc: >
|
|
@@ -2242,7 +2238,7 @@
|
|
|
2242
2238
|
Comma-separated references to the INTERACTION-CONCEPT objects the pattern
|
|
2243
2239
|
embodies, so that every principle is shown to be honored by at least one
|
|
2244
2240
|
pattern rather than merely declared.
|
|
2245
|
-
value: list([[
|
|
2241
|
+
value: list([[PRINCIPLE:*]])
|
|
2246
2242
|
optional: true
|
|
2247
2243
|
- name: USES
|
|
2248
2244
|
desc: >
|
|
@@ -2250,7 +2246,7 @@
|
|
|
2250
2246
|
pattern is composed of (e.g. a `Master-Detail` using an `Inline Edit` in
|
|
2251
2247
|
its detail), so that the patterns form a language of related structures
|
|
2252
2248
|
rather than a flat catalogue.
|
|
2253
|
-
value: list([[
|
|
2249
|
+
value: list([[PATTERN:*]])
|
|
2254
2250
|
optional: true
|
|
2255
2251
|
- name: TRADE-OFF
|
|
2256
2252
|
desc: >
|
|
@@ -2277,7 +2273,7 @@
|
|
|
2277
2273
|
optional: true
|
|
2278
2274
|
diagram:
|
|
2279
2275
|
type: grid
|
|
2280
|
-
nodes: "[[
|
|
2276
|
+
nodes: "[[STORYBOARD:*]]"
|
|
2281
2277
|
properties:
|
|
2282
2278
|
- ACTORS
|
|
2283
2279
|
config:
|
|
@@ -2295,8 +2291,7 @@
|
|
|
2295
2291
|
diagram:
|
|
2296
2292
|
type: hub
|
|
2297
2293
|
center: self
|
|
2298
|
-
nodes: "[[
|
|
2299
|
-
[[REQS:UC.USE-CASE:*.SCENARIO:*]], [[UXUI:DP.PATTERN:*]]"
|
|
2294
|
+
nodes: "[[STORYBOARD:*]], [[PERSONA:*]], [[SCENARIO:*]], [[PATTERN:*]]"
|
|
2300
2295
|
deep: true
|
|
2301
2296
|
labeled: true
|
|
2302
2297
|
qualified: true
|
|
@@ -2310,12 +2305,12 @@
|
|
|
2310
2305
|
storyboard tells, in the order of their appearance, so that a storyboard
|
|
2311
2306
|
switching its viewpoint between actors (e.g. from a moderator to a
|
|
2312
2307
|
presenter) names all of them.
|
|
2313
|
-
value: list([[
|
|
2308
|
+
value: list([[PERSONA:*]])
|
|
2314
2309
|
- name: SCENARIO
|
|
2315
2310
|
desc: >
|
|
2316
2311
|
Reference to the USE-CASES scenario object the storyboard renders as user
|
|
2317
2312
|
interface, omitted for a storyboard of a flow no scenario covers.
|
|
2318
|
-
value: "[[
|
|
2313
|
+
value: "[[SCENARIO:*]]"
|
|
2319
2314
|
optional: true
|
|
2320
2315
|
childs:
|
|
2321
2316
|
- kind: FRAME
|
|
@@ -2341,14 +2336,14 @@
|
|
|
2341
2336
|
Reference to the User Personas object from whose viewpoint the frame
|
|
2342
2337
|
is depicted, given whenever the storyboard names several `ACTORS`
|
|
2343
2338
|
and omitted for a storyboard of a single actor.
|
|
2344
|
-
value: "[[
|
|
2339
|
+
value: "[[PERSONA:*]]"
|
|
2345
2340
|
optional: true
|
|
2346
2341
|
- name: PATTERNS
|
|
2347
2342
|
desc: >
|
|
2348
2343
|
Comma-separated references to the DIALOG-PATTERNS objects the frame
|
|
2349
2344
|
instantiates, so that a pattern is shown to recur across the
|
|
2350
2345
|
concrete flows rather than merely being catalogued.
|
|
2351
|
-
value: list([[
|
|
2346
|
+
value: list([[PATTERN:*]])
|
|
2352
2347
|
optional: true
|
|
2353
2348
|
- name: SKETCH
|
|
2354
2349
|
desc: >
|
|
@@ -2383,7 +2378,7 @@
|
|
|
2383
2378
|
optional: true
|
|
2384
2379
|
diagram:
|
|
2385
2380
|
type: grid
|
|
2386
|
-
nodes: "[[
|
|
2381
|
+
nodes: "[[ELEMENT:*]]"
|
|
2387
2382
|
properties:
|
|
2388
2383
|
- CATEGORY
|
|
2389
2384
|
config:
|
|
@@ -2409,7 +2404,7 @@
|
|
|
2409
2404
|
diagram:
|
|
2410
2405
|
type: hub
|
|
2411
2406
|
center: self
|
|
2412
|
-
nodes: "[[
|
|
2407
|
+
nodes: "[[ELEMENT:*]], [[PERSONA:*]], [[PRINCIPLE:*]], [[MOCKUP:*]]"
|
|
2413
2408
|
labeled: true
|
|
2414
2409
|
qualified: true
|
|
2415
2410
|
config:
|
|
@@ -2431,14 +2426,14 @@
|
|
|
2431
2426
|
Comma-separated references to the User Personas objects for whom the
|
|
2432
2427
|
element governs the appearance, omitted for an element governing the
|
|
2433
2428
|
appearance for all users alike.
|
|
2434
|
-
value: list([[
|
|
2429
|
+
value: list([[PERSONA:*]])
|
|
2435
2430
|
optional: true
|
|
2436
2431
|
- name: PRINCIPLES
|
|
2437
2432
|
desc: >
|
|
2438
2433
|
Comma-separated references to the INTERACTION-CONCEPT objects the element
|
|
2439
2434
|
supports in appearance, so that an element is grounded in the interaction
|
|
2440
2435
|
philosophy rather than in taste alone.
|
|
2441
|
-
value: list([[
|
|
2436
|
+
value: list([[PRINCIPLE:*]])
|
|
2442
2437
|
optional: true
|
|
2443
2438
|
- name: SOURCE
|
|
2444
2439
|
desc: >
|
|
@@ -2468,20 +2463,20 @@
|
|
|
2468
2463
|
desc: >
|
|
2469
2464
|
Comma-separated references to the User Personas objects who see the
|
|
2470
2465
|
depicted screen.
|
|
2471
|
-
value: list([[
|
|
2466
|
+
value: list([[PERSONA:*]])
|
|
2472
2467
|
- name: STORYBOARD
|
|
2473
2468
|
desc: >
|
|
2474
2469
|
Reference to the DIALOG-STORYBOARD object whose flow the depicted screen
|
|
2475
2470
|
belongs to, so that the high-fidelity look traces back to the sketched
|
|
2476
2471
|
flow, omitted for a mockup of a screen no storyboard covers.
|
|
2477
|
-
value: "[[
|
|
2472
|
+
value: "[[STORYBOARD:*]]"
|
|
2478
2473
|
optional: true
|
|
2479
2474
|
- name: ELEMENTS
|
|
2480
2475
|
desc: >
|
|
2481
2476
|
Comma-separated references to the `ELEMENT` objects the mockup shows
|
|
2482
2477
|
applied, so that an element is shown to be realized rather than merely
|
|
2483
2478
|
declared.
|
|
2484
|
-
value: list([[
|
|
2479
|
+
value: list([[ELEMENT:*]])
|
|
2485
2480
|
- name: IMAGE
|
|
2486
2481
|
desc: >
|
|
2487
2482
|
An image (``) of the mockup, a high-fidelity rendering from
|
|
@@ -2507,9 +2502,9 @@
|
|
|
2507
2502
|
https://www.iso.org/standard/74393.html
|
|
2508
2503
|
diagram:
|
|
2509
2504
|
type: hub
|
|
2510
|
-
nodes: "[[
|
|
2505
|
+
nodes: "[[CV.ENTITY:*]]"
|
|
2511
2506
|
center:
|
|
2512
|
-
source: "[[
|
|
2507
|
+
source: "[[TI]]"
|
|
2513
2508
|
property: TITLE
|
|
2514
2509
|
kind: Solution
|
|
2515
2510
|
centerEdges:
|
|
@@ -2563,7 +2558,7 @@
|
|
|
2563
2558
|
the domain (usually a term of type `Actor`, which covers an external system
|
|
2564
2559
|
as a party acting in the domain), anchoring every boundary entity in the
|
|
2565
2560
|
ubiquitous language.
|
|
2566
|
-
value: list([[
|
|
2561
|
+
value: list([[TERM:*]])
|
|
2567
2562
|
optional: true
|
|
2568
2563
|
- name: INTERFACE
|
|
2569
2564
|
desc: >
|
|
@@ -2572,7 +2567,7 @@
|
|
|
2572
2567
|
`Provided` one) or offers (for a `Required` one); omitted when the
|
|
2573
2568
|
interaction happens through the user interface or outside any modeled
|
|
2574
2569
|
interface (e.g. a file exchange).
|
|
2575
|
-
value: list([[
|
|
2570
|
+
value: list([[INTERFACE:*]])
|
|
2576
2571
|
optional: true
|
|
2577
2572
|
- name: ACTORS
|
|
2578
2573
|
desc: >
|
|
@@ -2582,7 +2577,7 @@
|
|
|
2582
2577
|
the `Stakeholder` personas representing it, so the entity aggregates the
|
|
2583
2578
|
personas instead of re-stating them; omitted when no persona stands behind
|
|
2584
2579
|
the entity.
|
|
2585
|
-
value: list([[
|
|
2580
|
+
value: list([[PERSONA:*]])
|
|
2586
2581
|
optional: true
|
|
2587
2582
|
- name: PREMISES
|
|
2588
2583
|
desc: >
|
|
@@ -2591,7 +2586,7 @@
|
|
|
2591
2586
|
structural interaction with the external party, the premise the reliance
|
|
2592
2587
|
on it and the consequence of its failure, so the risky context entities
|
|
2593
2588
|
are found by traversal.
|
|
2594
|
-
value: list([[
|
|
2589
|
+
value: list([[PREMISE:*]])
|
|
2595
2590
|
optional: true
|
|
2596
2591
|
- name: DATA
|
|
2597
2592
|
desc: >
|
|
@@ -2615,7 +2610,7 @@
|
|
|
2615
2610
|
https://c4model.com/
|
|
2616
2611
|
diagram:
|
|
2617
2612
|
type: graph
|
|
2618
|
-
nodes: "[[
|
|
2613
|
+
nodes: "[[FV.COMPONENT:*]]"
|
|
2619
2614
|
labeled: true
|
|
2620
2615
|
properties:
|
|
2621
2616
|
- KIND
|
|
@@ -2634,8 +2629,7 @@
|
|
|
2634
2629
|
diagram:
|
|
2635
2630
|
type: hub
|
|
2636
2631
|
center: self
|
|
2637
|
-
nodes: "[[
|
|
2638
|
-
[[DATA:DM.ENTITY:*]]"
|
|
2632
|
+
nodes: "[[FV.COMPONENT:*]], [[FR.REQUIREMENT:*]], [[INTERFACE:*]], [[DM.ENTITY:*]]"
|
|
2639
2633
|
labeled: true
|
|
2640
2634
|
qualified: true
|
|
2641
2635
|
properties:
|
|
@@ -2662,7 +2656,7 @@
|
|
|
2662
2656
|
references the component it groups functionality within, and a component
|
|
2663
2657
|
references the `Subsystem` it belongs to; omitted for a top-level
|
|
2664
2658
|
component.
|
|
2665
|
-
value: "[[
|
|
2659
|
+
value: "[[FV.COMPONENT:*]]"
|
|
2666
2660
|
optional: true
|
|
2667
2661
|
acyclic: true
|
|
2668
2662
|
- name: REALIZES
|
|
@@ -2670,7 +2664,7 @@
|
|
|
2670
2664
|
Comma-separated references to the FUNCTIONAL-REQUIREMENTS objects the
|
|
2671
2665
|
component realizes, i.e. whose capability its functionality delivers, so
|
|
2672
2666
|
that every Functional Requirement is owned by at least one component.
|
|
2673
|
-
value: list([[
|
|
2667
|
+
value: list([[FR.*]])
|
|
2674
2668
|
optional: true
|
|
2675
2669
|
- name: OWNS
|
|
2676
2670
|
desc: >
|
|
@@ -2679,7 +2673,7 @@
|
|
|
2679
2673
|
components access an owned entity through the owner's interfaces or hold
|
|
2680
2674
|
derived copies only), so that every entity is owned by at most one
|
|
2681
2675
|
component; omitted when the component owns no entity.
|
|
2682
|
-
value: list([[
|
|
2676
|
+
value: list([[DM.ENTITY:*]])
|
|
2683
2677
|
optional: true
|
|
2684
2678
|
- name: PROVIDES
|
|
2685
2679
|
desc: >
|
|
@@ -2687,7 +2681,7 @@
|
|
|
2687
2681
|
provides, i.e. through which other components and external entities
|
|
2688
2682
|
interact with it; omitted when the component provides no modeled interface
|
|
2689
2683
|
(e.g. a user interface or an internal module).
|
|
2690
|
-
value: list([[
|
|
2684
|
+
value: list([[INTERFACE:*]])
|
|
2691
2685
|
optional: true
|
|
2692
2686
|
- name: CONSUMES
|
|
2693
2687
|
desc: >
|
|
@@ -2696,7 +2690,7 @@
|
|
|
2696
2690
|
`Required` interfaces offered by external entities, through which its
|
|
2697
2691
|
dependencies are exercised; omitted when the component consumes no
|
|
2698
2692
|
modeled interface.
|
|
2699
|
-
value: list([[
|
|
2693
|
+
value: list([[INTERFACE:*]])
|
|
2700
2694
|
optional: true
|
|
2701
2695
|
- name: DEPENDS-ON
|
|
2702
2696
|
desc: >
|
|
@@ -2704,7 +2698,7 @@
|
|
|
2704
2698
|
depends on at runtime, naming the target component only, while the
|
|
2705
2699
|
interface through which a dependency is exercised is stated by `CONSUMES`
|
|
2706
2700
|
where modeled.
|
|
2707
|
-
value: list([[
|
|
2701
|
+
value: list([[FV.COMPONENT:*]])
|
|
2708
2702
|
optional: true
|
|
2709
2703
|
|
|
2710
2704
|
- kind: ARCH
|
|
@@ -2723,7 +2717,7 @@
|
|
|
2723
2717
|
https://c4model.com/diagrams/container
|
|
2724
2718
|
diagram:
|
|
2725
2719
|
type: grid
|
|
2726
|
-
nodes: "[[
|
|
2720
|
+
nodes: "[[TS.TIER:*]]"
|
|
2727
2721
|
childs:
|
|
2728
2722
|
- kind: TIER
|
|
2729
2723
|
desc: |
|
|
@@ -2766,8 +2760,7 @@
|
|
|
2766
2760
|
diagram:
|
|
2767
2761
|
type: hub
|
|
2768
2762
|
center: self
|
|
2769
|
-
nodes: "[[
|
|
2770
|
-
[[ARCH:DD.DECISION:*]]"
|
|
2763
|
+
nodes: "[[TS.TIER:*.COMPONENT:*]], [[FV.COMPONENT:*]], [[DECISION:*]]"
|
|
2771
2764
|
labeled: true
|
|
2772
2765
|
qualified: true
|
|
2773
2766
|
properties:
|
|
@@ -3052,7 +3045,7 @@
|
|
|
3052
3045
|
impact-analyzed; omitted for a component not tied to particular
|
|
3053
3046
|
functional components (e.g. a language or a build tool used by
|
|
3054
3047
|
all).
|
|
3055
|
-
value: list([[
|
|
3048
|
+
value: list([[FV.COMPONENT:*]])
|
|
3056
3049
|
optional: true
|
|
3057
3050
|
|
|
3058
3051
|
- kind: ARCH
|
|
@@ -3074,7 +3067,7 @@
|
|
|
3074
3067
|
https://www.informit.com/store/documenting-software-architectures-views-and-beyond-9780321552686
|
|
3075
3068
|
diagram:
|
|
3076
3069
|
type: grid
|
|
3077
|
-
nodes: "[[
|
|
3070
|
+
nodes: "[[ASPECT:*]]"
|
|
3078
3071
|
properties:
|
|
3079
3072
|
- CATEGORY
|
|
3080
3073
|
childs:
|
|
@@ -3121,7 +3114,7 @@
|
|
|
3121
3114
|
https://www.wiley.com/en-us/Pattern+Oriented+Software+Architecture,+Volume+2,+Patterns+for+Concurrent+and+Networked+Objects-p-9781118725177
|
|
3122
3115
|
diagram:
|
|
3123
3116
|
type: graph
|
|
3124
|
-
nodes: "[[
|
|
3117
|
+
nodes: "[[UNIT:*]]"
|
|
3125
3118
|
labeled: true
|
|
3126
3119
|
properties:
|
|
3127
3120
|
- KIND
|
|
@@ -3143,7 +3136,7 @@
|
|
|
3143
3136
|
diagram:
|
|
3144
3137
|
type: hub
|
|
3145
3138
|
center: self
|
|
3146
|
-
nodes: "[[
|
|
3139
|
+
nodes: "[[UNIT:*]], [[FV.COMPONENT:*]], [[NODE:*]]"
|
|
3147
3140
|
labeled: true
|
|
3148
3141
|
qualified: true
|
|
3149
3142
|
properties:
|
|
@@ -3168,14 +3161,14 @@
|
|
|
3168
3161
|
expressing the containment the kinds imply: a `Thread`, `Task`, `Pool`, or
|
|
3169
3162
|
`EventLoop` references the `Process` it executes within, and a `Task` the
|
|
3170
3163
|
`EventLoop` or `Pool` scheduling it; omitted for a top-level unit.
|
|
3171
|
-
value: "[[
|
|
3164
|
+
value: "[[UNIT:*]]"
|
|
3172
3165
|
optional: true
|
|
3173
3166
|
acyclic: true
|
|
3174
3167
|
- name: HOSTS
|
|
3175
3168
|
desc: >
|
|
3176
3169
|
Comma-separated references to the FUNCTIONALITY-VIEW objects that run inside
|
|
3177
3170
|
this concurrency unit; omitted when no modeled component runs inside it.
|
|
3178
|
-
value: list([[
|
|
3171
|
+
value: list([[FV.COMPONENT:*]])
|
|
3179
3172
|
optional: true
|
|
3180
3173
|
- name: MULTIPLICITY
|
|
3181
3174
|
desc: >
|
|
@@ -3187,7 +3180,7 @@
|
|
|
3187
3180
|
coordinates or communicates with at runtime, naming the peer unit only
|
|
3188
3181
|
(e.g. a producer names the consumer it feeds through a shared queue),
|
|
3189
3182
|
while the mechanism is stated by `COORDINATION`.
|
|
3190
|
-
value: list([[
|
|
3183
|
+
value: list([[UNIT:*]])
|
|
3191
3184
|
optional: true
|
|
3192
3185
|
- name: COORDINATION
|
|
3193
3186
|
desc: >
|
|
@@ -3212,7 +3205,7 @@
|
|
|
3212
3205
|
https://c4model.com/diagrams/deployment
|
|
3213
3206
|
diagram:
|
|
3214
3207
|
type: graph
|
|
3215
|
-
nodes: "[[
|
|
3208
|
+
nodes: "[[NODE:*]]"
|
|
3216
3209
|
labeled: true
|
|
3217
3210
|
properties:
|
|
3218
3211
|
- TIER
|
|
@@ -3240,7 +3233,7 @@
|
|
|
3240
3233
|
diagram:
|
|
3241
3234
|
type: hub
|
|
3242
3235
|
center: self
|
|
3243
|
-
nodes: "[[
|
|
3236
|
+
nodes: "[[DV.TIER:*]], [[NODE:*]]"
|
|
3244
3237
|
labeled: true
|
|
3245
3238
|
qualified: true
|
|
3246
3239
|
properties:
|
|
@@ -3255,7 +3248,7 @@
|
|
|
3255
3248
|
Reference to the DEPLOYMENT-VIEW tier this tier is contained in (e.g. the
|
|
3256
3249
|
`Server` and `Database` tiers reference the `Data Center` tier hosting
|
|
3257
3250
|
them); omitted for a top-level tier.
|
|
3258
|
-
value: "[[
|
|
3251
|
+
value: "[[DV.TIER:*]]"
|
|
3259
3252
|
optional: true
|
|
3260
3253
|
acyclic: true
|
|
3261
3254
|
- name: LOCATION
|
|
@@ -3269,7 +3262,7 @@
|
|
|
3269
3262
|
Reference to the TECHNOLOGY-STACK tier whose products run in this tier;
|
|
3270
3263
|
omitted when the Technology Stack is absent, has no matching tier, or the
|
|
3271
3264
|
tier (e.g. a data center) groups other tiers only.
|
|
3272
|
-
value: "[[
|
|
3265
|
+
value: "[[TS.TIER:*]]"
|
|
3273
3266
|
optional: true
|
|
3274
3267
|
- kind: AREA
|
|
3275
3268
|
desc: >
|
|
@@ -3290,7 +3283,7 @@
|
|
|
3290
3283
|
diagram:
|
|
3291
3284
|
type: hub
|
|
3292
3285
|
center: self
|
|
3293
|
-
nodes: "[[
|
|
3286
|
+
nodes: "[[AREA:*]], [[NODE:*]]"
|
|
3294
3287
|
labeled: true
|
|
3295
3288
|
qualified: true
|
|
3296
3289
|
properties:
|
|
@@ -3316,8 +3309,8 @@
|
|
|
3316
3309
|
diagram:
|
|
3317
3310
|
type: hub
|
|
3318
3311
|
center: self
|
|
3319
|
-
nodes: "[[
|
|
3320
|
-
[[
|
|
3312
|
+
nodes: "[[DV.TIER:*]], [[AREA:*]], [[NODE:*]], [[NETWORK:*]], [[FV.COMPONENT:*]],
|
|
3313
|
+
[[UNIT:*]]"
|
|
3321
3314
|
labeled: true
|
|
3322
3315
|
qualified: true
|
|
3323
3316
|
properties:
|
|
@@ -3344,13 +3337,13 @@
|
|
|
3344
3337
|
desc: >
|
|
3345
3338
|
Reference to the DEPLOYMENT-VIEW tier the node belongs to, exactly one, as a
|
|
3346
3339
|
single deployment unit never spans tiers.
|
|
3347
|
-
value: "[[
|
|
3340
|
+
value: "[[DV.TIER:*]]"
|
|
3348
3341
|
- name: AREA
|
|
3349
3342
|
desc: >
|
|
3350
3343
|
Reference to the DEPLOYMENT-VIEW area the node is dedicated to, at most one,
|
|
3351
3344
|
as a single deployment unit never spans areas; omitted for a node shared by
|
|
3352
3345
|
several areas or when the solution is not split vertically.
|
|
3353
|
-
value: "[[
|
|
3346
|
+
value: "[[AREA:*]]"
|
|
3354
3347
|
optional: true
|
|
3355
3348
|
- name: PLATFORM
|
|
3356
3349
|
desc: >
|
|
@@ -3364,7 +3357,7 @@
|
|
|
3364
3357
|
expressing the nesting the kinds imply: a `Container` references the
|
|
3365
3358
|
`Server` or `Cluster` running it, and a `Server` the `Cluster` it belongs
|
|
3366
3359
|
to; omitted for a top-level node.
|
|
3367
|
-
value: "[[
|
|
3360
|
+
value: "[[NODE:*]]"
|
|
3368
3361
|
optional: true
|
|
3369
3362
|
acyclic: true
|
|
3370
3363
|
- name: HOSTS
|
|
@@ -3374,7 +3367,7 @@
|
|
|
3374
3367
|
node (which themselves state the components they host), and the functional
|
|
3375
3368
|
components not mapped by any concurrency unit directly. A containing node
|
|
3376
3369
|
does not repeat what its `PART-OF` nodes host.
|
|
3377
|
-
value: list([[
|
|
3370
|
+
value: list([[UNIT:*]], [[FV.COMPONENT:*]])
|
|
3378
3371
|
optional: true
|
|
3379
3372
|
- name: INSTANCES
|
|
3380
3373
|
desc: >
|
|
@@ -3386,14 +3379,14 @@
|
|
|
3386
3379
|
Comma-separated references to the DEPLOYMENT-VIEW objects this node opens
|
|
3387
3380
|
network connections to at runtime, naming the target node only, while the
|
|
3388
3381
|
carried protocols are stated by the `PROTOCOLS` of the shared `NETWORK`.
|
|
3389
|
-
value: list([[
|
|
3382
|
+
value: list([[NODE:*]])
|
|
3390
3383
|
optional: true
|
|
3391
3384
|
- name: NETWORKS
|
|
3392
3385
|
desc: >
|
|
3393
3386
|
Comma-separated references to the DEPLOYMENT-VIEW network segments the node
|
|
3394
3387
|
is attached to (e.g. a public ingress and a private backend network); omitted
|
|
3395
3388
|
when the topology models no network segments.
|
|
3396
|
-
value: list([[
|
|
3389
|
+
value: list([[NETWORK:*]])
|
|
3397
3390
|
optional: true
|
|
3398
3391
|
- kind: NETWORK
|
|
3399
3392
|
desc: >
|
|
@@ -3414,7 +3407,7 @@
|
|
|
3414
3407
|
diagram:
|
|
3415
3408
|
type: hub
|
|
3416
3409
|
center: self
|
|
3417
|
-
nodes: "[[
|
|
3410
|
+
nodes: "[[NETWORK:*]], [[NODE:*]]"
|
|
3418
3411
|
labeled: true
|
|
3419
3412
|
qualified: true
|
|
3420
3413
|
properties:
|
|
@@ -3459,7 +3452,7 @@
|
|
|
3459
3452
|
https://www.iso.org/standard/70636.html
|
|
3460
3453
|
diagram:
|
|
3461
3454
|
type: grid
|
|
3462
|
-
nodes: "[[
|
|
3455
|
+
nodes: "[[CONCERN:*]]"
|
|
3463
3456
|
properties:
|
|
3464
3457
|
- CATEGORY
|
|
3465
3458
|
childs:
|
|
@@ -3484,9 +3477,9 @@
|
|
|
3484
3477
|
diagram:
|
|
3485
3478
|
type: hub
|
|
3486
3479
|
center: self
|
|
3487
|
-
nodes: "[[
|
|
3488
|
-
[[
|
|
3489
|
-
[[
|
|
3480
|
+
nodes: "[[CONCERN:*]], [[NR.REQUIREMENT:*]], [[PERSONA:*]], [[TACTIC:*]],
|
|
3481
|
+
[[FV.COMPONENT:*]], [[UNIT:*]], [[NODE:*]], [[DM.ENTITY:*]],
|
|
3482
|
+
[[TS.TIER:*.COMPONENT:*]]"
|
|
3490
3483
|
labeled: true
|
|
3491
3484
|
qualified: true
|
|
3492
3485
|
properties:
|
|
@@ -3529,30 +3522,29 @@
|
|
|
3529
3522
|
procedure, usually a `Stakeholder` persona like the operations team (a
|
|
3530
3523
|
procedure performed by a `User` persona through the solution is a Use Case
|
|
3531
3524
|
instead); omitted when no persona of the operating organization is modeled.
|
|
3532
|
-
value: list([[
|
|
3525
|
+
value: list([[PERSONA:*]])
|
|
3533
3526
|
optional: true
|
|
3534
3527
|
- name: ADDRESSES
|
|
3535
3528
|
desc: >
|
|
3536
3529
|
Comma-separated references to the NON-FUNCTIONAL-REQUIREMENTS objects the
|
|
3537
3530
|
procedure fulfills (e.g. a recovery objective, a retention obligation);
|
|
3538
3531
|
omitted when the concern fulfills no stated requirement.
|
|
3539
|
-
value: list([[
|
|
3532
|
+
value: list([[NR.*]])
|
|
3540
3533
|
optional: true
|
|
3541
3534
|
- name: ELEMENTS
|
|
3542
3535
|
desc: >
|
|
3543
3536
|
Comma-separated references to the FUNCTIONALITY-VIEW, CONCURRENCY-VIEW,
|
|
3544
3537
|
DEPLOYMENT-VIEW, or DATA-MODEL objects the procedure acts upon (e.g. the
|
|
3545
3538
|
nodes scaled, the units restarted, the entities backed up or migrated).
|
|
3546
|
-
value: list([[
|
|
3547
|
-
[[
|
|
3548
|
-
[[DATA:DM.ENTITY:*]])
|
|
3539
|
+
value: list([[FV.COMPONENT:*]], [[UNIT:*]], [[DV.TIER:*]], [[AREA:*]],
|
|
3540
|
+
[[NODE:*]], [[NETWORK:*]], [[DM.ENTITY:*]])
|
|
3549
3541
|
optional: true
|
|
3550
3542
|
- name: TOOLS
|
|
3551
3543
|
desc: >
|
|
3552
3544
|
Comma-separated references to the TECHNOLOGY-STACK components (usually of
|
|
3553
3545
|
`PHASE` `Operate-Time`) supporting the procedure; omitted when the procedure
|
|
3554
3546
|
uses no modeled product.
|
|
3555
|
-
value: list([[
|
|
3547
|
+
value: list([[TS.TIER:*.COMPONENT:*]])
|
|
3556
3548
|
optional: true
|
|
3557
3549
|
|
|
3558
3550
|
- kind: ARCH
|
|
@@ -3572,7 +3564,7 @@
|
|
|
3572
3564
|
https://www.iso.org/standard/78176.html
|
|
3573
3565
|
diagram:
|
|
3574
3566
|
type: grid
|
|
3575
|
-
nodes: "[[
|
|
3567
|
+
nodes: "[[TACTIC:*]]"
|
|
3576
3568
|
properties:
|
|
3577
3569
|
- QUALITY
|
|
3578
3570
|
childs:
|
|
@@ -3603,9 +3595,9 @@
|
|
|
3603
3595
|
diagram:
|
|
3604
3596
|
type: hub
|
|
3605
3597
|
center: self
|
|
3606
|
-
nodes: "[[
|
|
3607
|
-
[[
|
|
3608
|
-
[[
|
|
3598
|
+
nodes: "[[TACTIC:*]], [[NR.REQUIREMENT:*]], [[FV.COMPONENT:*]], [[UNIT:*]],
|
|
3599
|
+
[[ASPECT:*]], [[NODE:*]], [[DM.ENTITY:*]], [[CONCERN:*]], [[DECISION:*]],
|
|
3600
|
+
[[TS.TIER:*.COMPONENT:*]]"
|
|
3609
3601
|
labeled: true
|
|
3610
3602
|
qualified: true
|
|
3611
3603
|
properties:
|
|
@@ -3634,7 +3626,7 @@
|
|
|
3634
3626
|
desc: >
|
|
3635
3627
|
Comma-separated references to the NON-FUNCTIONAL-REQUIREMENTS objects the
|
|
3636
3628
|
tactic addresses.
|
|
3637
|
-
value: list([[
|
|
3629
|
+
value: list([[NR.*]])
|
|
3638
3630
|
- name: MECHANISM
|
|
3639
3631
|
desc: >
|
|
3640
3632
|
The design mechanism through which the tactic is applied to achieve the
|
|
@@ -3655,9 +3647,9 @@
|
|
|
3655
3647
|
INTERFACE-MODEL objects the tactic shapes (e.g. the components replicated,
|
|
3656
3648
|
the aspects governing modifiability, the entities anonymized, the roles
|
|
3657
3649
|
and interfaces secured).
|
|
3658
|
-
value: list([[
|
|
3659
|
-
[[
|
|
3660
|
-
[[
|
|
3650
|
+
value: list([[FV.COMPONENT:*]], [[UNIT:*]], [[ASPECT:*]], [[DV.TIER:*]],
|
|
3651
|
+
[[AREA:*]], [[NODE:*]], [[NETWORK:*]], [[DM.ENTITY:*]], [[ROLE:*]],
|
|
3652
|
+
[[INTERFACE:*]])
|
|
3661
3653
|
optional: true
|
|
3662
3654
|
- name: OPERATED-BY
|
|
3663
3655
|
desc: >
|
|
@@ -3665,14 +3657,14 @@
|
|
|
3665
3657
|
acts upon the design mechanism of the tactic (e.g. the scaling out of the
|
|
3666
3658
|
replication, the restoring of the backup); omitted when no modeled procedure
|
|
3667
3659
|
operates the tactic.
|
|
3668
|
-
value: list([[
|
|
3660
|
+
value: list([[CONCERN:*]])
|
|
3669
3661
|
optional: true
|
|
3670
3662
|
- name: TOOLS
|
|
3671
3663
|
desc: >
|
|
3672
3664
|
Comma-separated references to the TECHNOLOGY-STACK components realizing the
|
|
3673
3665
|
tactic (e.g. the load balancer, the message broker, the CDN); omitted when
|
|
3674
3666
|
the tactic uses no modeled product.
|
|
3675
|
-
value: list([[
|
|
3667
|
+
value: list([[TS.TIER:*.COMPONENT:*]])
|
|
3676
3668
|
optional: true
|
|
3677
3669
|
- kind: ARCH
|
|
3678
3670
|
name: Design Decisions
|
|
@@ -3693,7 +3685,7 @@
|
|
|
3693
3685
|
https://adr.github.io/
|
|
3694
3686
|
diagram:
|
|
3695
3687
|
type: grid
|
|
3696
|
-
nodes: "[[
|
|
3688
|
+
nodes: "[[DECISION:*]]"
|
|
3697
3689
|
properties:
|
|
3698
3690
|
- STATUS
|
|
3699
3691
|
config:
|
|
@@ -3761,14 +3753,12 @@
|
|
|
3761
3753
|
diagram:
|
|
3762
3754
|
type: hub
|
|
3763
3755
|
center: self
|
|
3764
|
-
nodes: "[[
|
|
3765
|
-
[[
|
|
3766
|
-
[[
|
|
3767
|
-
[[
|
|
3768
|
-
[[
|
|
3769
|
-
[[
|
|
3770
|
-
[[ARCH:DA.ASPECT:*]], [[ARCH:DV.TIER:*]], [[ARCH:DV.AREA:*]], [[ARCH:DV.NODE:*]],
|
|
3771
|
-
[[ARCH:DV.NETWORK:*]], [[ARCH:QP.TACTIC:*]], [[ARCH:TS.TIER:*.COMPONENT:*]]"
|
|
3756
|
+
nodes: "[[DECISION:*]], [[NR.REQUIREMENT:*]], [[PREMISE:*]], [[DM.ENTITY:*]],
|
|
3757
|
+
[[LIFECYCLE:*]], [[ROLE:*]], [[INTERFACE:*]], [[TYPE:*]], [[ENDPOINT:*]],
|
|
3758
|
+
[[PRINCIPLE:*]], [[CONVENTION:*]], [[PATTERN:*]], [[STORYBOARD:*]],
|
|
3759
|
+
[[ELEMENT:*]], [[CV.ENTITY:*]], [[FV.COMPONENT:*]], [[UNIT:*]], [[ASPECT:*]],
|
|
3760
|
+
[[DV.TIER:*]], [[AREA:*]], [[NODE:*]], [[NETWORK:*]], [[TACTIC:*]],
|
|
3761
|
+
[[TS.TIER:*.COMPONENT:*]]"
|
|
3772
3762
|
labeled: true
|
|
3773
3763
|
qualified: true
|
|
3774
3764
|
properties:
|
|
@@ -3791,7 +3781,7 @@
|
|
|
3791
3781
|
Reference to the DESIGN-DECISIONS object that supersedes this decision,
|
|
3792
3782
|
present if and only if `STATUS` is `Superseded` (which the schema cannot
|
|
3793
3783
|
enforce itself).
|
|
3794
|
-
value: "[[
|
|
3784
|
+
value: "[[DECISION:*]]"
|
|
3795
3785
|
optional: true
|
|
3796
3786
|
acyclic: true
|
|
3797
3787
|
- name: DRIVEN-BY
|
|
@@ -3801,7 +3791,7 @@
|
|
|
3801
3791
|
obligation, the budget constraint, the dependency taken as given), anchoring
|
|
3802
3792
|
the forces `WHEN` describes in prose; omitted when no modeled requirement or
|
|
3803
3793
|
premise drives the decision.
|
|
3804
|
-
value: list([[
|
|
3794
|
+
value: list([[NR.*]], [[PREMISE:*]])
|
|
3805
3795
|
optional: true
|
|
3806
3796
|
- name: AFFECTS
|
|
3807
3797
|
desc: >
|
|
@@ -3813,13 +3803,11 @@
|
|
|
3813
3803
|
context, the interface styled REST instead of GraphQL, the dialog pattern
|
|
3814
3804
|
chosen over a native one, the components split, the external system
|
|
3815
3805
|
integrated); omitted for a decision shaping no modeled element.
|
|
3816
|
-
value: list([[
|
|
3817
|
-
[[
|
|
3818
|
-
[[
|
|
3819
|
-
[[
|
|
3820
|
-
[[
|
|
3821
|
-
[[ARCH:DA.ASPECT:*]], [[ARCH:DV.TIER:*]], [[ARCH:DV.AREA:*]], [[ARCH:DV.NODE:*]],
|
|
3822
|
-
[[ARCH:DV.NETWORK:*]])
|
|
3806
|
+
value: list([[DM.ENTITY:*]], [[LIFECYCLE:*]], [[ROLE:*]], [[INTERFACE:*]],
|
|
3807
|
+
[[TYPE:*]], [[ENDPOINT:*]], [[PRINCIPLE:*]], [[CONVENTION:*]],
|
|
3808
|
+
[[PATTERN:*]], [[STORYBOARD:*]], [[ELEMENT:*]], [[CV.ENTITY:*]],
|
|
3809
|
+
[[FV.COMPONENT:*]], [[UNIT:*]], [[ASPECT:*]], [[DV.TIER:*]], [[AREA:*]],
|
|
3810
|
+
[[NODE:*]], [[NETWORK:*]])
|
|
3823
3811
|
optional: true
|
|
3824
3812
|
- name: DECIDES
|
|
3825
3813
|
desc: >
|
|
@@ -3827,7 +3815,7 @@
|
|
|
3827
3815
|
TECHNOLOGY-STACK components the decision chose over their alternatives,
|
|
3828
3816
|
i.e. the mechanism or product which exists because of this decision; omitted
|
|
3829
3817
|
when the decision chose no modeled tactic or product.
|
|
3830
|
-
value: list([[
|
|
3818
|
+
value: list([[TACTIC:*]], [[TS.TIER:*.COMPONENT:*]])
|
|
3831
3819
|
optional: true
|
|
3832
3820
|
- name: ALTERNATIVES
|
|
3833
3821
|
desc: >
|
|
@@ -3885,7 +3873,7 @@
|
|
|
3885
3873
|
- the deciding factors (which forces from the context carried the most
|
|
3886
3874
|
weight, and how the chosen option satisfies them best);
|
|
3887
3875
|
- the trade-off reasoning (what was optimized for and what was knowingly
|
|
3888
|
-
sacrificed - naming the trade-off is the heart of rationale);
|
|
3876
|
+
sacrificed - naming the trade-off is the heart of the rationale);
|
|
3889
3877
|
- why the alternatives lost (the comparative argument: "option B failed
|
|
3890
3878
|
on X, option C cost too much on Y"); and
|
|
3891
3879
|
- assumptions and evidence (benchmarks, prior experience, constraints, or
|
|
@@ -3938,7 +3926,7 @@
|
|
|
3938
3926
|
https://istqb.org/certifications/certified-tester-foundation-level-ctfl-v4-0/
|
|
3939
3927
|
diagram:
|
|
3940
3928
|
type: grid
|
|
3941
|
-
nodes: "[[TEST
|
|
3929
|
+
nodes: "[[TEST-CASE:*]]"
|
|
3942
3930
|
config:
|
|
3943
3931
|
size-node-width-max: 440
|
|
3944
3932
|
size-node-height-scale: 2
|
|
@@ -3978,13 +3966,11 @@
|
|
|
3978
3966
|
diagram:
|
|
3979
3967
|
type: hub
|
|
3980
3968
|
center: self
|
|
3981
|
-
nodes: "[[TEST
|
|
3982
|
-
[[
|
|
3983
|
-
[[
|
|
3984
|
-
[[
|
|
3985
|
-
[[
|
|
3986
|
-
[[ARCH:DA.ASPECT:*]], [[ARCH:DV.NODE:*]], [[ARCH:DV.NETWORK:*]],
|
|
3987
|
-
[[ARCH:OV.CONCERN:*]], [[ARCH:QP.TACTIC:*]], [[ARCH:DD.DECISION:*]]"
|
|
3969
|
+
nodes: "[[TEST-CASE:*]], [[FR.REQUIREMENT:*]], [[NR.REQUIREMENT:*]], [[RULE:*]],
|
|
3970
|
+
[[SCENARIO:*]], [[WORKFLOW:*]], [[TRANSITION:*]], [[ATTRIBUTE:*]],
|
|
3971
|
+
[[PERMISSION:*]], [[ENDPOINT:*]], [[FRAME:*]], [[FV.COMPONENT:*]], [[UNIT:*]],
|
|
3972
|
+
[[ASPECT:*]], [[NODE:*]], [[NETWORK:*]], [[CONCERN:*]], [[TACTIC:*]],
|
|
3973
|
+
[[DECISION:*]]"
|
|
3988
3974
|
labeled: true
|
|
3989
3975
|
qualified: true
|
|
3990
3976
|
config:
|
|
@@ -4002,7 +3988,7 @@
|
|
|
4002
3988
|
(node and network), OPERATIONS-VIEW, and QUALITY-PERSPECTIVES objects,
|
|
4003
3989
|
and/or the DESIGN-DECISIONS objects the test case verifies, so that a
|
|
4004
3990
|
scenario (in particular an `Exceptional` one, judged by its `OUTCOME`) is
|
|
4005
|
-
covered by an acceptance test
|
|
3991
|
+
covered by an acceptance test besides the requirements it exercises, a rule
|
|
4006
3992
|
(judged by the condition it states) is proven to hold, not just to be
|
|
4007
3993
|
documented, a transition (judged by its `GUARD` and the resulting state) is
|
|
4008
3994
|
proven to be permitted exactly as modeled, an attribute (judged by its
|
|
@@ -4020,12 +4006,10 @@
|
|
|
4020
4006
|
proven to be performable, a tactic (judged by its `MECHANISM`) is proven to
|
|
4021
4007
|
take effect, and a decision (judged by its `WHAT`) is proven to be complied
|
|
4022
4008
|
with.
|
|
4023
|
-
value: list([[
|
|
4024
|
-
[[
|
|
4025
|
-
[[
|
|
4026
|
-
[[
|
|
4027
|
-
[[ARCH:DA.ASPECT:*]], [[ARCH:DV.NODE:*]], [[ARCH:DV.NETWORK:*]],
|
|
4028
|
-
[[ARCH:OV.CONCERN:*]], [[ARCH:QP.TACTIC:*]], [[ARCH:DD.DECISION:*]])
|
|
4009
|
+
value: list([[REQUIREMENT:*]], [[RULE:*]], [[SCENARIO:*]], [[TRANSITION:*]],
|
|
4010
|
+
[[ATTRIBUTE:*]], [[PERMISSION:*]], [[ENDPOINT:*]], [[FRAME:*]],
|
|
4011
|
+
[[FV.COMPONENT:*]], [[UNIT:*]], [[ASPECT:*]], [[NODE:*]], [[NETWORK:*]],
|
|
4012
|
+
[[CONCERN:*]], [[TACTIC:*]], [[DECISION:*]])
|
|
4029
4013
|
- name: WORKFLOWS
|
|
4030
4014
|
desc: >
|
|
4031
4015
|
Comma-separated references to the DOMAIN-WORKFLOWS objects the test case
|
|
@@ -4033,7 +4017,7 @@
|
|
|
4033
4017
|
steps cross in order, so that the collaboration across actors and sittings
|
|
4034
4018
|
(not just the use cases of each single sitting) is proven to work as
|
|
4035
4019
|
modeled; omitted for a test case confined to a single sitting.
|
|
4036
|
-
value: list([[
|
|
4020
|
+
value: list([[WORKFLOW:*]])
|
|
4037
4021
|
optional: true
|
|
4038
4022
|
- name: PRE-CONDITION
|
|
4039
4023
|
desc: >
|