@memoarchitect/ontology 0.15.1 → 0.15.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 +1 -1
- package/extensions/aadl/memo.package.yaml +1 -1
- package/extensions/clinical/memo.package.yaml +1 -1
- package/extensions/cloud/memo.package.yaml +1 -1
- package/extensions/container/memo.package.yaml +1 -1
- package/extensions/messaging/memo.package.yaml +1 -1
- package/extensions/ros/memo.package.yaml +1 -1
- package/methodologies/default/memo.package.yaml +1 -1
- package/methodologies/gpca/memo.package.yaml +1 -1
- package/ontology/memo.package.yaml +1 -1
- package/package.json +1 -1
- package/profile/memo.package.yaml +1 -1
- package/src/architecture/logical/structure/memo_logical_structure.sysml +14 -0
- package/src/assurance/safety_risk/memo_risk.sysml +12 -4
- package/src/core/relationships/memo_relationships.sysml +20 -0
- package/src/core/relationships/memo_workspace_membership.sysml +3 -0
- package/src/memo_namespaces.sysml +1 -0
- package/src/methodology/profiles/memo_profiles.sysml +2 -2
- package/src/viewpoints/matrix/memo_matrix_views.sysml +93 -0
package/README.md
CHANGED
|
@@ -25,7 +25,7 @@ pin an exact release; the package has no repository or runtime dependency on Mem
|
|
|
25
25
|
Tools or Memo Architect.
|
|
26
26
|
|
|
27
27
|
```bash
|
|
28
|
-
pnpm add @memoarchitect/ontology@0.15.
|
|
28
|
+
pnpm add @memoarchitect/ontology@0.15.3
|
|
29
29
|
```
|
|
30
30
|
|
|
31
31
|
> **Pre-1.0 notice:** ontology names, relationships, and package layout may
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
# (`type`, `extends`, `usage`, `ontologies`, `methodology`, `modules`) were
|
|
8
8
|
# removed at the native semantic flip and are now rejected if present.
|
|
9
9
|
name: '@memoarchitect/extension-aadl'
|
|
10
|
-
version: 0.15.
|
|
10
|
+
version: 0.15.3
|
|
11
11
|
description: AADL (SAE AS5506) correspondence profile and runtime component families
|
|
12
12
|
license: MIT
|
|
13
13
|
tags:
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
# (`type`, `extends`, `usage`, `ontologies`, `methodology`, `modules`) were
|
|
8
8
|
# removed at the native semantic flip and are now rejected if present.
|
|
9
9
|
name: '@memoarchitect/example-extension-clinical'
|
|
10
|
-
version: 0.15.
|
|
10
|
+
version: 0.15.3
|
|
11
11
|
description: Example methodology extension for clinical-procedure vocabulary
|
|
12
12
|
license: MIT
|
|
13
13
|
tags:
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
# (`type`, `extends`, `usage`, `ontologies`, `methodology`, `modules`) were
|
|
8
8
|
# removed at the native semantic flip and are now rejected if present.
|
|
9
9
|
name: '@memoarchitect/extension-cloud'
|
|
10
|
-
version: 0.15.
|
|
10
|
+
version: 0.15.3
|
|
11
11
|
description: Networked services and managed data stores
|
|
12
12
|
license: MIT
|
|
13
13
|
tags:
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
# (`type`, `extends`, `usage`, `ontologies`, `methodology`, `modules`) were
|
|
8
8
|
# removed at the native semantic flip and are now rejected if present.
|
|
9
9
|
name: '@memoarchitect/extension-container'
|
|
10
|
-
version: 0.15.
|
|
10
|
+
version: 0.15.3
|
|
11
11
|
description: OCI container images and container runtimes as deployment content
|
|
12
12
|
license: MIT
|
|
13
13
|
tags:
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
# (`type`, `extends`, `usage`, `ontologies`, `methodology`, `modules`) were
|
|
8
8
|
# removed at the native semantic flip and are now rejected if present.
|
|
9
9
|
name: '@memoarchitect/extension-messaging'
|
|
10
|
-
version: 0.15.
|
|
10
|
+
version: 0.15.3
|
|
11
11
|
description: Publish/subscribe messaging — topics, brokers, and delivery semantics
|
|
12
12
|
license: MIT
|
|
13
13
|
tags:
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
# (`type`, `extends`, `usage`, `ontologies`, `methodology`, `modules`) were
|
|
8
8
|
# removed at the native semantic flip and are now rejected if present.
|
|
9
9
|
name: '@memoarchitect/extension-ros'
|
|
10
|
-
version: 0.15.
|
|
10
|
+
version: 0.15.3
|
|
11
11
|
description: ROS 2 nodes, messages, topic/service/action interfaces, QoS, and containerized deployment
|
|
12
12
|
license: MIT
|
|
13
13
|
tags:
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
# (`type`, `extends`, `usage`, `ontologies`, `methodology`, `modules`) were
|
|
8
8
|
# removed at the native semantic flip and are now rejected if present.
|
|
9
9
|
name: '@memoarchitect/methodology-default'
|
|
10
|
-
version: 0.15.
|
|
10
|
+
version: 0.15.3
|
|
11
11
|
description: "MEMO default medical-device methodology \u2014 selects viewpoints/views/DHF documents from @memoarchitect/ontology and adds rules, gates, patterns, profiles, and workflow."
|
|
12
12
|
license: MIT
|
|
13
13
|
tags:
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
# (`type`, `extends`, `usage`, `ontologies`, `methodology`, `modules`) were
|
|
8
8
|
# removed at the native semantic flip and are now rejected if present.
|
|
9
9
|
name: '@memoarchitect/methodology-gpca'
|
|
10
|
-
version: 0.15.
|
|
10
|
+
version: 0.15.3
|
|
11
11
|
description: "GPCA infusion pump methodology \u2014 subtraction-based tailoring of @memoarchitect/methodology-default for the non-networked prototype variant. Excludes cybersecurity and SOUP."
|
|
12
12
|
license: MIT
|
|
13
13
|
tags:
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
# (`type`, `extends`, `usage`, `ontologies`, `methodology`, `modules`) were
|
|
8
8
|
# removed at the native semantic flip and are now rejected if present.
|
|
9
9
|
name: '@memoarchitect/ontology'
|
|
10
|
-
version: 0.15.
|
|
10
|
+
version: 0.15.3
|
|
11
11
|
description: "MEMO \u2014 the single canonical medical-device ontology: core semantics, the Arcadia-inspired architecture layers (context, requirements, behavior, structure, interfaces, risk, cybersecurity,\
|
|
12
12
|
\ assurance, \u2026), compliance, viewpoints, views, and invariant rules. One namespace (memo::), one src/ tree."
|
|
13
13
|
license: MIT
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@memoarchitect/ontology",
|
|
3
|
-
"version": "0.15.
|
|
3
|
+
"version": "0.15.3",
|
|
4
4
|
"packageManager": "pnpm@9.15.0",
|
|
5
5
|
"description": "MEMO — Medical Engineering Modelling Ontology. Pure SysML v2 medical-device ontology with native constraints, portable to any conformant SysML v2 tool (SysIDE, SysON, sysand).",
|
|
6
6
|
"scripts": {
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
# (`type`, `extends`, `usage`, `ontologies`, `methodology`, `modules`) were
|
|
8
8
|
# removed at the native semantic flip and are now rejected if present.
|
|
9
9
|
name: '@memoarchitect/medical-modeling-profile'
|
|
10
|
-
version: 0.15.
|
|
10
|
+
version: 0.15.3
|
|
11
11
|
description: Closure rules and viewpoints for medical device modeling
|
|
12
12
|
license: MIT
|
|
13
13
|
tags:
|
|
@@ -73,6 +73,18 @@ package memo_architecture_logical_structure {
|
|
|
73
73
|
enum hardware;
|
|
74
74
|
}
|
|
75
75
|
|
|
76
|
+
// Who builds a system or system of systems: this organisation, or others.
|
|
77
|
+
// Distinct from `componentRole`, which says what a logical component DOES
|
|
78
|
+
// (an `externalSystem` is a role in a context). This says whose it is to
|
|
79
|
+
// build, which decides what the project is responsible for delivering and
|
|
80
|
+
// verifying versus what it only interfaces with.
|
|
81
|
+
enum def SystemOriginKind {
|
|
82
|
+
/** Built by this organisation: the project delivers and verifies it. */
|
|
83
|
+
enum internal;
|
|
84
|
+
/** Built by others: the project interfaces with it and relies on what its maker states. */
|
|
85
|
+
enum external;
|
|
86
|
+
}
|
|
87
|
+
|
|
76
88
|
// ─── System hierarchy ────────────────────────────────────────
|
|
77
89
|
// Three types rather than three role values, because they differ in what
|
|
78
90
|
// they may CONTAIN — and containment legality cannot live on an attribute.
|
|
@@ -91,6 +103,7 @@ package memo_architecture_logical_structure {
|
|
|
91
103
|
// battery are not — which is why ownership is recorded here and is the
|
|
92
104
|
// attribute that distinguishes an SoS from a merely large system.
|
|
93
105
|
attribute systemBoundaryDescription : String;
|
|
106
|
+
attribute origin : SystemOriginKind[0..1];
|
|
94
107
|
attribute constituentOwnership : String;
|
|
95
108
|
// A constituent may itself coordinate systems-of-systems, or it may be
|
|
96
109
|
// an independently operated system. Subsystems and components remain
|
|
@@ -101,6 +114,7 @@ package memo_architecture_logical_structure {
|
|
|
101
114
|
|
|
102
115
|
part def System specializes LogicalComponent {
|
|
103
116
|
attribute systemBoundaryDescription : String;
|
|
117
|
+
attribute origin : SystemOriginKind[0..1];
|
|
104
118
|
part system : System[0..*];
|
|
105
119
|
part subsystem : Subsystem[0..*];
|
|
106
120
|
part component : LogicalComponent[0..*];
|
|
@@ -29,6 +29,12 @@ package memo_assurance_safety_risk {
|
|
|
29
29
|
attribute estimationBasis : String;
|
|
30
30
|
attribute analysisContext : String;
|
|
31
31
|
attribute foreseeableMisuseIncluded : Boolean;
|
|
32
|
+
doc /* The risk that remains after the controls (ISO 14971 clause 7) is the same risk
|
|
33
|
+
* re-estimated, so a register that holds one row per risk states it here. A
|
|
34
|
+
* ResidualRisk part is for a model that evaluates it as an element of its own. */
|
|
35
|
+
attribute residualProbabilityEstimate : ProbabilityKind[0..1];
|
|
36
|
+
attribute residualSeverityEstimate : SeverityKind[0..1];
|
|
37
|
+
attribute residualBenefitRiskRequired : Boolean[0..1];
|
|
32
38
|
}
|
|
33
39
|
part def ResidualRisk specializes Risk {
|
|
34
40
|
attribute benefitRiskRequired : Boolean;
|
|
@@ -40,10 +46,12 @@ package memo_assurance_safety_risk {
|
|
|
40
46
|
attribute acceptabilityThresholds : String;
|
|
41
47
|
}
|
|
42
48
|
// `DesignControlRiskRow` was a denormalized spreadsheet transcription.
|
|
43
|
-
// Risk rows now decompose into the ISO 14971 chain below:
|
|
44
|
-
//
|
|
45
|
-
//
|
|
46
|
-
//
|
|
49
|
+
// Risk rows now decompose into the ISO 14971 chain below: a Hazard,
|
|
50
|
+
// SequenceOfEvents, HazardousSituation and Harm are independent elements, not
|
|
51
|
+
// owned by a risk, because the same hazard is the hazard of many risks. A Risk
|
|
52
|
+
// is linked to each by EstimatedFor, and the chain runs through TracesRisk /
|
|
53
|
+
// LeadsToHarm, with ResidualRisk after mitigation. The risk itself is reached
|
|
54
|
+
// by EstimatedFor / ReducedBy / EvaluatedIn below.
|
|
47
55
|
// A device characteristic whose implementation, failure, or misuse can
|
|
48
56
|
// affect safety. This is the modelable output of ISO 14971 §5.3.
|
|
49
57
|
part def SafetyRelatedCharacteristic specializes MemoPart {
|
|
@@ -126,6 +126,26 @@ package memo_core_relationships {
|
|
|
126
126
|
// inherited `rationale` — an untyped link with no stated reason is an
|
|
127
127
|
// audit gap, not a model fact.
|
|
128
128
|
|
|
129
|
+
// An item belongs to the scope of one system or system of systems: a need,
|
|
130
|
+
// requirement, risk or verification case that describes, constrains or
|
|
131
|
+
// assesses that system and is its to deliver or verify. Imported records
|
|
132
|
+
// arrive with no design element to anchor them (a requirement is not
|
|
133
|
+
// allocated to anything yet), so this is how an import says whose they are;
|
|
134
|
+
// without it they are Unassigned in every workspace. The target is the
|
|
135
|
+
// system, typed as a part (a System and a SystemOfSystems both are). The
|
|
136
|
+
// source stays untyped: the items span metaclasses (a need is a requirement
|
|
137
|
+
// def, a risk an item, a verification case an action), as for DerivesFrom.
|
|
138
|
+
connection def ScopedTo :> MemoRelationship {
|
|
139
|
+
end scopedItem :>> source;
|
|
140
|
+
end scopeSystem : MemoPart :>> target;
|
|
141
|
+
}
|
|
142
|
+
abstract connection scopedToLinks : ScopedTo[*];
|
|
143
|
+
metadata def <scopedTo> ScopedToMetadata :> SemanticMetadata {
|
|
144
|
+
:> annotatedElement : SysML::ConnectionDefinition;
|
|
145
|
+
:> annotatedElement : SysML::ConnectionUsage;
|
|
146
|
+
:>> baseType = scopedToLinks meta SysML::Usage;
|
|
147
|
+
}
|
|
148
|
+
|
|
129
149
|
connection def DerivesFrom :> MemoRelationship {
|
|
130
150
|
// Drivers span metaclasses — a need is a requirement def, a hazard an
|
|
131
151
|
// item, a threat an item — so the source end stays untyped. The target
|
|
@@ -163,6 +163,9 @@ package memo_core_relationships_workspace_membership {
|
|
|
163
163
|
// system through the relation that ties it to one (a failure mode, a control measure's allocation).
|
|
164
164
|
// Decided 2026-10-14: a risk chain with no such tie is Unassigned, which is the finding, not a gap here.
|
|
165
165
|
part membershipTracesRisk : WorkspaceMembershipEntry { attribute :>> relation = "tracesRisk"; attribute :>> direction = WorkspaceMembershipKind::neither; }
|
|
166
|
+
// An item scoped to a system follows that system: the whole purpose of the relation. The items an
|
|
167
|
+
// item owns (a risk's hazard chain) join with it by ownership, so one link anchors a chain.
|
|
168
|
+
part membershipScopedTo : WorkspaceMembershipEntry { attribute :>> relation = "scopedTo"; attribute :>> direction = WorkspaceMembershipKind::sourceFollowsTarget; }
|
|
166
169
|
// A harm follows the hazardous situation that leads to it.
|
|
167
170
|
part membershipLeadsToHarm : WorkspaceMembershipEntry { attribute :>> relation = "leadsToHarm"; attribute :>> direction = WorkspaceMembershipKind::targetFollowsSource; }
|
|
168
171
|
// Neither: a scenario illustrates a hazard without being part of it.
|
|
@@ -40,6 +40,7 @@ package memo {
|
|
|
40
40
|
public import memo_architecture_variability::*;
|
|
41
41
|
|
|
42
42
|
public import memo_viewpoints_definitions::*;
|
|
43
|
+
public import memo_viewpoints_matrix::*;
|
|
43
44
|
public import memo_viewpoints_stakeholders_concerns::*;
|
|
44
45
|
public import memo_viewpoints_catalog::*;
|
|
45
46
|
public import memo_viewpoints_context_context_viewpoint::*;
|
|
@@ -16,7 +16,7 @@ package memo_methodology_profiles {
|
|
|
16
16
|
private import memo_core_common::MemoIdentity;
|
|
17
17
|
part mdCoreLibrary : MethodologyLibrary {
|
|
18
18
|
@MemoIdentity { :>> providedId = "METHLIB-001"; :>> label = "MedicalDeviceMethodologyLibrary"; }
|
|
19
|
-
attribute :>> version = "0.15.
|
|
19
|
+
attribute :>> version = "0.15.3";
|
|
20
20
|
attribute :>> domain = "medical device modeling";
|
|
21
21
|
doc /* Methodology layer for selecting, restricting, sequencing, tailoring, and lightly extending use of the medical-device ontology. */
|
|
22
22
|
}
|
|
@@ -37,7 +37,7 @@ package memo_methodology_profiles {
|
|
|
37
37
|
// second scope authority.
|
|
38
38
|
part mdDefaultDefinition : MethodologyDefinition {
|
|
39
39
|
@MemoIdentity { :>> providedId = "METH-MD-DEFAULT"; :>> label = "MedicalDeviceDefault"; }
|
|
40
|
-
attribute :>> version = "0.15.
|
|
40
|
+
attribute :>> version = "0.15.3";
|
|
41
41
|
attribute :>> domain = "medical device modeling";
|
|
42
42
|
doc /* MEMO default medical-device methodology. Selects every layer, discipline, standard, artifact kind, and viewpoint the resolved ontology and extension packages provide. */
|
|
43
43
|
attribute :>> scopeMode = ScopeModeKind::allAvailable;
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
// Traceability matrices and design structure matrices, declared as views.
|
|
2
|
+
//
|
|
3
|
+
// A matrix is a native SysML `view` usage (ViewUsage, SysML-textual-bnf.kebnf:1610)
|
|
4
|
+
// typed by a `view def` (ViewDefinition, :1584), like every other MEMO view, so
|
|
5
|
+
// it is written, derived, listed and moved by the same machinery. It declares no
|
|
6
|
+
// `expose`: ViewBodyItem makes Expose optional (:1618-1622), and a matrix shows
|
|
7
|
+
// what its axes select, not a package's contents.
|
|
8
|
+
//
|
|
9
|
+
// An axis is a part usage (PartUsage, :627) typed by MemoMatrixAxis. It is
|
|
10
|
+
// hand-picked elements, a memo-query, or both. A query is stored as its text and
|
|
11
|
+
// evaluated against the model when the matrix opens, so the matrix answers the
|
|
12
|
+
// same question after the model has grown; the ids it matched are never stored.
|
|
13
|
+
package memo_viewpoints_matrix {
|
|
14
|
+
private import ScalarValues::*;
|
|
15
|
+
|
|
16
|
+
private import memo_core_common::*;
|
|
17
|
+
private import memo_core_enumerations::*;
|
|
18
|
+
private import memo_viewpoints_definitions::*;
|
|
19
|
+
|
|
20
|
+
enum def MatrixOrderingKind {
|
|
21
|
+
enum natural;
|
|
22
|
+
enum kind;
|
|
23
|
+
enum partition;
|
|
24
|
+
enum cluster;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
enum def MatrixGroupKind {
|
|
28
|
+
enum owningPackage;
|
|
29
|
+
enum memoQuery;
|
|
30
|
+
enum clusterResult;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* One axis of a matrix: the elements it lists.
|
|
35
|
+
*
|
|
36
|
+
* `includeElementKinds` and `includeElementIds` are inherited from the
|
|
37
|
+
* selection query a view already carries; the ids are hand-picked elements,
|
|
38
|
+
* by qualified name. `query` adds the text of a `memo-query` block, the same
|
|
39
|
+
* query language the DHF templates use. The axis is the union of the two.
|
|
40
|
+
*/
|
|
41
|
+
part def MemoMatrixAxis :> ViewSelectionQuery {
|
|
42
|
+
attribute query : String[0..1];
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/** A named group of rows in a design structure matrix. */
|
|
46
|
+
part def MemoMatrixGroup :> MemoPart {
|
|
47
|
+
attribute groupName : String;
|
|
48
|
+
attribute groupedBy : MatrixGroupKind;
|
|
49
|
+
/** A package qualified name, or the text of a `memo-query`; empty for a cluster result. */
|
|
50
|
+
attribute expression : String[0..1];
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Which elements the relationship types connect, and how the matrix reads
|
|
55
|
+
* them. The relationship types are the model's own, never a list kept here.
|
|
56
|
+
*/
|
|
57
|
+
view def MemoTraceabilityMatrixView :> MemoDiagramView {
|
|
58
|
+
attribute :>> viewKind = DiagramViewKind::grid;
|
|
59
|
+
@MemoIdentity { :>> shortDescription = "Rows traced to columns by relationships, each axis chosen by hand or by query."; }
|
|
60
|
+
/**
|
|
61
|
+
* The system or system of systems the matrix is about: the qualified name
|
|
62
|
+
* of its definition (a workspace root). Its queries run in that workspace.
|
|
63
|
+
* A string, because a `ref` cannot name a definition.
|
|
64
|
+
*/
|
|
65
|
+
attribute system : String[0..1];
|
|
66
|
+
part rowAxis : MemoMatrixAxis[0..1];
|
|
67
|
+
part columnAxis : MemoMatrixAxis[0..1];
|
|
68
|
+
/** Relationship types that count as a link; empty means any. */
|
|
69
|
+
attribute linkTypes : String[*];
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* A design structure matrix has one axis because rows equal columns. The
|
|
74
|
+
* options after `axis` apply to a dependency reading and are not on the
|
|
75
|
+
* traceability definition.
|
|
76
|
+
*/
|
|
77
|
+
view def MemoDependencyMatrixView :> MemoDiagramView {
|
|
78
|
+
attribute :>> viewKind = DiagramViewKind::grid;
|
|
79
|
+
@MemoIdentity { :>> shortDescription = "Dependencies among one set of elements, chosen by hand or by query."; }
|
|
80
|
+
/** The system or system of systems the matrix is about, as on the traceability matrix. */
|
|
81
|
+
attribute system : String[0..1];
|
|
82
|
+
part axis : MemoMatrixAxis[0..1];
|
|
83
|
+
/** Relationship types that put a mark in a cell; empty means any. */
|
|
84
|
+
attribute dependencyTypes : String[*];
|
|
85
|
+
/** Relationship types that build the nesting, so the hierarchy is the one the model declares. */
|
|
86
|
+
attribute containmentTypes : String[*];
|
|
87
|
+
attribute symmetric : Boolean[0..1];
|
|
88
|
+
attribute ordering : MatrixOrderingKind[0..1];
|
|
89
|
+
part groups : MemoMatrixGroup[*];
|
|
90
|
+
/** Elements to highlight on the axis and in the cell inspector. */
|
|
91
|
+
part criticalElements : MemoMatrixAxis[0..1];
|
|
92
|
+
}
|
|
93
|
+
}
|