Skip to content

Release notes

Versioned under semantic versioning. Before 1.0 a change that breaks a model, a command or a setting raises the minor number; a fix or addition that breaks nothing raises the patch. Every release is tagged in the repository. The notes for all three packages are also on memoarchitect.com/releases.html.

0.16.2

  • Every view traces to a viewpoint. New rule CR-ONT-092: a view that traces to no viewpoint is an error. The shipped examples keep a view under the viewpoint it traces to, or under viewpoints/shared/ when it traces to several.
  • ISO 14971. Rules over clauses 5.2, 5.3 and 7.4; WeighedAgainst links a benefit to a risk and places neither in a workspace of its own. TestRun records one execution of a verification case. MC-001 makes a model's own constraints a tailorable rule.
  • Added. NavigatesTo (a UI element to the screen it opens); a function and a scenario carry a precondition and a postcondition; isConnector on a relation; a regulated device has an intended use and is used with other devices; partNumber and revision on a part.
  • Changed. Measurable attributes are ISQ quantities (durations, frequencies, storage capacity, voltage, current); a function's output summary is outputDescription; an exchange has no direction of its own, and AR-EXCH-001 and AR-EXCH-002 hold it to its ports.
  • Removed. SoftwareSystem.version, ModeConfiguration.activeElement, regulatoryRegime (a model's regimes are its RegulatedDevice jurisdictions), UseCase.standalone, and the rules CR-ONT-086 and CR-ONT-087.

0.16.0

  • No ontology change. The version moves with MEMO Tools and Architect, which now support SysIDE 1.0.

0.15.3

  • Matrix views and system scope. Matrix view defs for traceability matrices and DSMs, with the system a matrix is about; ScopedTo ties an item to the scope of one system; System and SystemOfSystems state their origin (built by this organisation or by others).
  • Risk estimates. The ISO 14971 chain is independent elements linked by EstimatedFor, not owned; Risk states residualProbabilityEstimate, residualSeverityEstimate and residualBenefitRiskRequired.

0.15.2

No change to the ontology; released with tools and Architect 0.15.2, which pin it.

0.15.1

  • MemoKind marks a definition that extends the ontology. @MemoKind { :>> idPrefix = "AFS"; } on a part def gives that definition, and what is typed by it, its own display-id family (AFS-1). Without it, a project definition is a model element and its ids take the family of the ontology kind it descends from. Tools 0.15.1 reads the marker; before it, every project definition minted a family from the first word of its own name.

0.15.0 (experimental release)

This release adds support for the OpenSysML compiler alongside SysIDE. The OpenSysML path is new and has had less use. The next version will be more stable.

Breaking

  • A methodology selects packages by importing them; the inclusion lists are gone. includedLayer and includedModule are removed from MethodologyDefinition, ResolvedMethodology and ProjectMethodBinding, and so is includedExtension, which an earlier 0.14.0 change had added. What a methodology selects is what the package declaring it publicly imports, followed through public imports transitively; a project adds packages the same way, by publicly importing them in the package that declares its binding. A private import selects nothing. A misspelled package is an import the compiler rejects, so the unavailable-module, unavailable-layer and missing-extension diagnostics are gone with the lists. Each architecture layer is now a package that publicly imports every package in the layer (memo_architecture_operational, …_functional, …_logical, …_implementation, …_realization). The extension methodologies (rosExtensionMethod, cloudExtensionMethod, …, in memo_extension_<name>_methodology) are deleted: an extension is brought in by importing its facade, memo_extension_<name>, which publicly imports the extension's packages and the extensions it builds on — ros now publicly imports messaging and container. A package declares at most one methodology, because the package is the selection. To move a methodology, replace attribute :>> includedLayer = ("memo_architecture_logical", …); and attribute :>> includedModule = ("memo_rules_closure", …); with public import memo_architecture_logical::*; and public import memo_rules_closure::*; in its package. To move a binding, replace ref :>> includedExtension = rosExtensionMethod; and its private import memo_extension_ros_methodology::rosExtensionMethod; with public import memo_extension_ros::*; in the binding's package, and an includedModule string the same way. A model that still writes the attributes no longer compiles, which is the point: they named packages by string beside the import that already did.

  • A methodology selects standards, artifact kinds and viewpoints by type. includedStandard and includedViewpoint are references to a RegulatoryStandard and a MemoViewpoint, and includedArtifactKind is typed by ArtifactKind. They were strings, and a string that names nothing selects nothing without a word: the GPCA methodology listed ISO 14155, IEC 62366, IEC 60601-1 and a "RiskManagementPlan" that the ontology does not declare. Write ref :>> includedStandard = (iso14971, iec62304); and import the elements. A compiler that resolves names (SysIDE, as memo build runs) now reports a misspelling as a reference error. (Modules and layers are now selected by import; see above.)

  • ROS: one statement of each fact. RosReliabilityKind and RosQosProfile.reliability are gone: reliability is the port's deliverySemantics (best effort is at-most-once, reliable is at-least-once), which a port could previously contradict. RosServiceClient.timeoutMs is gone; the timeout belongs to the interface (timeoutMs). RosTopicInterface defaults direction to output, so a topic usage no longer repeats it.

  • Interface is abstract. Type an interface as LogicalInterface, SoftwareInterface or PhysicalInterface. The hardware-signal fields (electricalStandard, nominalVoltageV, nominalCurrentA, bitRateBps, signalRange) moved to PhysicalInterface and the API fields (apiStyle, schemaReference) to SoftwareInterface. directionality is gone (direction already said it) and the free-text signaling and signalKind are replaced by signalingKind. LogicalInterface now specializes Interface.

  • SoftwareItem is DataItem; SBOMComponent is SBOMEntry. The item family is exchanged or stored data, so it no longer borrows IEC 62304's term for a program part. SBOMEntry is now a part def that references a SoftwareElement, its license and hash are licenseExpression and checksum (the spelling OTSSoftwareModule uses), and SbomFormatKind moved with it. SBOMComponent is gone; AffectsSBOMComponent and MonitorsSBOMComponent are AffectsSBOMEntry and MonitorsSBOMEntry.

  • SOUP is a type. ModuleKind::soup and the soupVersion, soupVendor, knownAnomalies, riskAcceptance and soupClassification attributes of SoftwareModule are gone. Type the module SOUPSoftwareModule (supplier, version, knownAnomalies, riskAcceptance, soupClassification), or OTSSoftwareModule for off-the-shelf software, which specializes it (IEC 62304 §3.29 counts off-the-shelf software as SOUP) and adds licenseExpression, packageUrl and checksum. CR-MED-015, 016 and 017 apply to SOUPSoftwareModule and so to every OTS module; CR-MED-016 reads version and supplier. The SOUP DHF templates list both types instead of filtering on a module kind that no longer resolved. To move, replace part x : SoftwareModule { attribute :>> moduleKind = ModuleKind::soup; attribute :>> soupVendor = ...; attribute :>> soupVersion = ...; } with part x : SOUPSoftwareModule { attribute :>> supplier = ...; attribute :>> version = ...; } (or OTSSoftwareModule).

  • A rule traces to a clause by a dependency. The trace was a ref enforces member of the rule. It is now #EnforcesClause dependency from <Rule> to <clause>, <clause>;, written beside the rule. A rule may name several clauses or none. To move, replace each ref enforces : StandardClause[1..*] = a.b.c; with the dependency, spell the clause with ::, and import memo_artifacts_standards_traceability::EnforcesClause. The previous form is tagged pre-typed-rule-clause-relation.

  • One project skeleton. The manifest's templates map and init.defaultTemplate are replaced by init.template: ./templates/default, and the samd, infusion-pump, monitoring-device and connected-device starters are removed. Start from an example instead (memo-architect init --example <id>). A manifest in the old form is rejected by tools 0.14.0.

Fixed

  • Versions agree. A methodology's version (0.6.5, 0.7.0, 0.1) and the clinical extension's package version (0.6.1) sat far behind the 0.13 product. They carry the product version now, and version:check covers every methodology and extension descriptor, so they cannot drift again.

Added

  • One KPAR per extension. memo build produced a single memo-extensions archive holding every extension, so ROS could not be shipped or depended on without clinical and AADL. Each extension is now memo-extension-<name>, declaring the base and the extensions its source imports (ROS declares messaging and container). memo-extensions is no longer built.

  • Cybersecurity: product security and threat intelligence. ThreatActor, AttackTechnique (an external framework's identifier), AttackPath, SecurityProperty, CybersecurityAssumption, SBOMEntry, SecurityFinding, PostmarketProcess and CyberRiskAssessment (inherent or residual, without copying the risk), thirteen relations that link them (ExposesAsset, UsesAttackTechnique, IdentifiesVulnerability, AssessesCyberRisk, ...), and cveReference and vulnerabilityDisposition on a vulnerability. Additive: no existing model changes. From a proposal against 0.11.2, merged onto 0.13.2.

  • One interface per layer. Interface is abstract and holds what every interface states (what crosses, direction, timing, safety and security). LogicalInterface, SoftwareInterface and the new PhysicalInterface each add only what their layer can say, so a hardware link is no longer described with software API fields or the reverse. PhysicalInterface adds signalingKind (analog, digital, discrete, pulse, power transfer), mediumKind and the electrical descriptors, and hardware gets its own PhysicalFlow. The cable or connector that carries a link is a part related by ConnectionBinding.
  • Security assessment and OTS software. SecurityAssessmentCase is a verification case whose method is penetration test, SAST, DAST or SCA; it produces a SecurityAssessmentReport (ProducesEvidence), which holds its SecurityFindings. SecurityFinding replaces PenTestFinding from the same release, and its status type is SecurityFindingStatusKind. SOUPSoftwareModule, OTSSoftwareModule, OTSSoftwareComponent; SoftwareBillOfMaterials.

  • Rule obligation. Every rule states required, recommended or bestPractice (RuleObligationKind). Rules that trace to a clause start required; the rest start recommended. A rule that states no severity takes error, warning or info from it.