SACM 2.4 Beta 1: impact analysis
Status: analysis, 2026-10-02. Nothing here changes what the project claims.
SACM 2.3 (formal/23-05-08) remains the only version libs/sacm implements and
the only one the conformance matrix records. Raised by
#474.
Summary
OMG published SACM 2.4 Beta 1 in September 2026. It is a rewrite of the metamodel, not a revision of it, and it cannot be implemented as an interchange format yet.
- It is not the standard. OMG labels the beta "for informational purposes" and says the formal version "is the version that should be followed for compliance". 2.3 is still that version.
- Almost nothing carries over unchanged. Of the 55 classifiers in the 2.3
model, 23 are gone and 30 of the remaining 32 changed. Only
ParticipantandTechniqueare identical. The 2.4 model has 131 classifiers. - The file format is not defined. Every compliance point requires XMI that conforms to "the SACM XML Schema", and no schema, namespace URI or native example document is published. The only example in the specification is a UML model with a MagicDraw profile applied.
- The specification text and its normative model disagree on identity
(
gidagainstelementId), on the assertion-declaration literals, and on several types and multiplicities. A conformance test cannot be written against a requirement the two sources state differently. - The direction is good for us. The two changes
#200 asked the RTF for
both landed: defeat now applies to every argument element, and
Claim.subjectreaches any element. GSN Choice cardinality, Challenge and undeveloped all get a standard home.
Recommendation: do not implement 2.4 against Beta 1. Report the defects below to OMG while finalization is open, keep the 2.3 claim as it is, and revisit when one of the triggers fires. A 2.4 implementation is a second metamodel beside the first, on the scale of the original library build.
What was reviewed
Fetched with bash scripts/fetch-sacm24-beta1-references.sh into
third_party/sacm-2.4-beta1/ (git-ignored). The script fails if OMG republishes
a file, because this page would then describe something else.
| Document | OMG ID | Standing | SHA-256 |
|---|---|---|---|
| Specification PDF, 161 pages | ptc/26-06-34 |
Normative | 25f32d1c…c39997ff5 |
SACM2.4_Metamodel.xml |
ptc/26-05-28 |
Normative, machine readable | 0581dfa0…23db110830 |
| Specification with change bars, 181 pages | ptc/26-06-35 |
Informative | 6840a0f6…ef1fe5f96 |
| XMI for the SACM 2.4 UML Profile | ptc/26-05-21 |
Informative, machine readable | 9149a041…1918838b |
Source: https://www.omg.org/spec/SACM/2.4/Beta1/About-SACM.
State of the revision. All 59 SACM24-* issues, which were all open when
the watch list was written in July, are now closed. The
public list of issues against 2.4 Beta 1 is empty. The specification page links
a SACM25 tracker that is members-only, and a public "report an issue" form.
No date for the formal 2.4 is published.
How the class tables were produced. python tools/sacm/diff_sacm24_metamodel.py
compares the two machine-readable models and prints every removed, added and
changed classifier with its features. Every class-level statement on this page
comes from that output, not from reading diagrams.
Limit of the text review. Both PDFs embed their fonts without a Unicode map, so ordinary text extraction returns nothing readable. The text was recovered by matching each embedded glyph outline against the installed Times New Roman, Arial and Courier New fonts, which recovered 98% of the characters. The remaining 2% is set in Aptos, which was not available to match, and is almost entirely labels inside figures. Clause prose, attribute lists, constraints and the Annex B listing were all read; the figures were not.
What changed in the metamodel
Structure
| 2.3 | 2.4 Beta 1 | |
|---|---|---|
| Classifiers | 55 | 131 |
| Packages | Base, AssuranceCase, Terminology, Argumentation, Artifact | Foundation, Base, Packaging, Terminology, Argument, Artifact, Mapping (GSN, CAE), NonNormative (seven sub-packages) |
| Mandatory compliance point | Assurance case | Packaging |
| Optional compliance points | 4 | 10 |
| Model form | UML model exported from MagicDraw | The same, with the classes nested inside a uml:Profile |
The 131 classifiers split as 66 in the six core packages, 30 in the GSN and CAE
mapping packages, and 35 under NonNormative.
- New
Foundationpackage.Element,NamedElement,Namespace,Package,PackageableElement,DirectedRelationshipandVisibilityKind, copied from UML.SACMElementnow extendsPackageableElement, so every element has UML visibility and ownership. - Multiple inheritance throughout.
Artifactis both anArtifactAssetand anArtifactReference.Joinis both aClaimand anArtifactReference.SACMModel, the base of every package and group, is aModelElement, anAssertionand anAssessment. The library's model is a single-inheritance C++ hierarchy that mirrors 2.3. - Optional capabilities are added onto the core classes. Clause 15 defines
seven optional capabilities as "additions to the existing items". In the model
they are already merged in: seventeen features of core classes are typed by
NonNormativeclassifiers, andSACMModelspecializesAssessment. This is the authors' design, not an error. For an implementer it means the core classes cannot be read from the model file without also meeting those types.
Removed and renamed
All of these were predicted by the watch list from the draft issue text, and all of them landed.
| 2.3 | 2.4 Beta 1 | Watch row |
|---|---|---|
AssertionDeclaration (5 literals) |
AssertionDeclarationKind: axiomatic, assumed, asserted, byRule |
001 |
defeated literal |
ArgumentConcept.isDefeated : Boolean[0..1] |
002 |
Assertion.metaClaim |
removed | 003 |
| — | Claim.subject : SACMElement[0..*], Claim.whole : SACMModel[0..*] |
004 |
AssertedArtifactSupport, AssertedArtifactContext |
removed; AssertedEvidence and AssertedContext cover them |
005 |
Relationship ends typed ArgumentAsset, restricted by OCL |
New abstract Targetable; each relationship redefines its own ends |
006 |
gid : String[0..1] |
elementId : UID[1] |
007 |
isAbstract, citedElement, settable isCitation |
isSACMAbstract, cited plus citedIRI, derived isCitation |
007 |
UtilityElement, Note, TaggedValue, ImplementationConstraint |
BaseElement, SACMComment, NamedValue, SACMConstraint |
008 |
Description class |
SACMElement.description attribute |
008 |
LangString |
merged into MultiLangString, moved to Terminology |
009 |
ModelElement.name : LangString[1] |
elementName : ExpressionLangString[0..1] plus derived /name |
010 |
ArgumentationElement |
ArgumentElement |
011 |
XPackageInterface, three XPackageBinding classes |
XInterfacePackage, one BindingPackage |
012 |
ArtifactElement in Base, parent of everything |
moved to Artifact; ModelElement is the shared base |
013 |
ArgumentGroup, ArtifactGroup, TerminologyGroup |
one Group |
016 |
Property |
removed; NamedValue |
017 |
| Package content rules as prose | ownership rules made part of the mandatory point | 018 |
Further changes the watch list did not have:
AssertedRelationship.reasoningis gone. The link is inverted:ArgumentReasoning.relationship : AssertedRelationship[0..*].needsSupportis replaced bySACMElement.needsDevelopment, available on every element, not only assertions.- Assets nest.
ArgumentAsset.ownedArgumentAssetandArtifactAsset.ownedArtifactAssetlet an asset contain assets. ArtifactReference.referenceis typedSACMElement, notArtifactElement, so an argument can cite a whole package as evidence.Artifact.datebecameversionReleaseDate, with newexternalDocumentIRIandinternalReference.Resource.locationis now in the model. Its absence fromptc/22-03-13is one of the 2.3 defects we recorded.- New
SACMDependency, andSACMModel.isPattern/isModelon every package and group.
Annex G does not give a migration
Annex G is titled "Transformation from SACM 2.3 to SACM 2.4" and marked
normative. It is two pages of numbered remarks ("TagValue is renamed
NamedValue"). It covers most renames and merges, but it does not mention
metaClaim, gid, AssertedRelationship.reasoning, participantPackage,
Property or Description, all of which are removed. For those, a 2.3-to-2.4
converter would be our own design, and the specification gives no way to check
it.
Why Beta 1 cannot be implemented yet
No interchange format is determined
Clause 2 requires each compliance point to "import and export XMI documents that conform with the SACM XML Schema produced by applying XMI rules to the normative MOF metamodel". Three things are missing.
- No schema is published. The specification page lists four documents and none is an XSD.
- The normative model declares no namespace URI. No package in
SACM2.4_Metamodel.xmlhas aURI. This was already true of 2.3, and is why our namespace is a project pin. 2.4 does not fix it. - The model's names are not ready to be element names. Like the 2.3 model
it is a UML export from MagicDraw, now with the classes nested inside a
uml:ProfilenamedSACM2.4. Under XMI rules a class name becomes an element name, and several are visibly unedited:Asssessment,DefeationtMechanismKind,StructuredAssuraceArtifactDiagram,RealNameValue, andGSNContextwith a trailing line break inside the name.
The one example document, Annex B, is still headed "Examples of Assurance Cases
in SACM 2.0 XMI". It is a uml:Model of uml:Class and uml:Dependency
elements with stereotypes applied from
http://www.magicdraw.com/schemas/Profile.xmi. That is a vendor namespace, and
it is the UML Profile dialect, which is the one compliance point we do not claim
in 2.3 either.
So two tools that each implement 2.4 Beta 1 natively have no basis for reading each other's files. For 2.3 we had the EMF reference implementation and third-party files to build an interoperability corpus from. For 2.4 there is no reference implementation and no file to test against.
The text and the model contradict each other
Each row is a place where a test would have to pick one source and fail the other.
| Subject | Specification text | SACM2.4_Metamodel.xml |
|---|---|---|
| Element identity | 9.2 lists gid : String[0..1] |
elementId : UID[1]; no gid |
| Declaration literals | 13.6: axiomatic, assumed, asserted, needsSupport |
axiomatic, assumed, asserted, plus byRule from clause 15; no needsSupport |
AssertedEvidence.evidence |
13.13: [0..*] |
[1..*] |
Claim.value |
13.9: MultiLangString |
ExpressionLangString |
BindingPackage superclass |
10.5: SACMPackageWithBinding, ScopedPackage; 11.3: ModelElement |
ScopedPackage, SACMPackageWithBinding |
SACMElement.abstraction |
9.2: [0..1] |
[0..*] |
AssertedRelationship.isCounter |
13.11: Boolean [1] |
Boolean [0..1] |
Other signs that the text has not been through editing:
- Clause 2.1 announces "eleven compliance points". Clause 2 then numbers them 2.2 to 2.5 and 6.6 to 6.12.
- Six compliance points require conformance to a "non-normative MOF metamodel defined in the informative" clause 15, so it is unclear whether that clause binds a tool claiming one of them.
- Annex C still gives concrete syntax for
needsSupport,defeatedandasCitedclaims and relationships. The model has none of the three as a declaration. - 13.4 describes
ArgumentPackageInterface,ArgumentPackageBindingandArgumentationElement, which are the 2.3 names.
The full list, limited to what can be checked from the documents alone, is in Beta 1 inconsistencies to report. It was reviewed a second time on 2026-10-02 to remove anything that reflected our GSN-only use of SACM or that the authors plainly intended.
Effect on GSN support
The canvas and the SVG export draw GSN, and 2.4 changes no GSN symbol. The effect is on how a GSN argument is stored, so the issue's "GSN canvas and visualization" area is the least affected part of the application.
Annex A adds a GSN mapping as classes (Mapping/GSN, 19 classifiers). It is
marked informative in the text, although the classes sit in the normative model
file. It cites GSN v2 (SCSC-141B, 2018), not v3, and it differs from
the mapping we implement, which follows the SCSC GSN
Metamodel v2.2.
| GSN | Ours today (2.3) | 2.4 Beta 1 Annex A |
|---|---|---|
| Goal | Claim |
GSNGoal, a Claim |
| Strategy | ArgumentReasoning |
GSNStrategy: ArgumentReasoning and Join, so also a Claim |
| Solution | ArtifactReference |
GSNSolution, an Artifact (itself now an ArtifactReference) |
| Context | no SACM class; preserved | GSNContext: Context in the model, Artifact in the text |
| Assumption, Justification | Claim, assumed / axiomatic |
the same |
| Undeveloped | assertionDeclaration = needsSupport |
needsDevelopment, on any element |
| Uninstantiated | isAbstract |
isSACMAbstract |
| Choice, and "m of n" | no SACM class; cardinality has no carrier | GSNChoice, a Join with lowerBound / upperBound |
| Challenge | partial; on assertions only | isChallenge, redefining isCounter, on every GSN relationship |
| Defeated | declaration literal, assertions only | isDefeated, any argument element |
| Assurance Claim Point | metaClaim, plus assuranceForge.acp tagged values where metaClaim cannot reach |
no ACP class; Claim.subject can reference any element |
| Away elements | isCitation / citedElement |
cited, or citedIRI across models |
| Contract module | ArgumentPackageBinding |
the single BindingPackage |
| Architecture view | planned (AF-MOD-010) | GSNArchitectureView diagram class |
What this means:
- Three of our recorded gaps would close. Defeat on Solutions and Strategies, ACPs on Solutions and Contexts, and Choice cardinality are all expressible in 2.4. The first two are what #200 was going to ask the RTF for.
- Our ACP storage would have to move.
metaClaimis deleted, so the ACPs we write today have no 2.4 form except throughClaim.subject. The vendorassuranceForge.acptagged values would become unnecessary. - GSN v3 is still not covered. Annex A has no ACP class and no dialectic
vocabulary beyond
isChallenge. The SCSC metamodel remains at v2.2. Neither body has published a GSN v3 metamodel, so our v3 features would still rest on our own reading. - Strategy changes meaning. Under Annex A a strategy is a claim. Under the SCSC mapping it is reasoning attached to an inference. A file written one way does not read as the other.
Layout
Layout policy keeps coordinates out of the library, and
that still holds: SACMView is an optional compliance point. The watch list
said SACM would define no geometry itself. Beta 1 does: NonNormative/SACMView/DI
contains Bounds, Point, Shape, and Edge with waypoint, copied from OMG
Diagram Interchange. If layout ever has to travel inside a SACM file, this is the
standard target, and our deterministic layout output already has that shape.
Exposure in this repository
| Area | Size today | What 2.4 would require |
|---|---|---|
libs/sacm model, XMI reader and writer, validators, commands |
about 10,400 lines, 38 element kinds | A second model. The class hierarchy, the name tables, containment rules and every validator are 2.3-shaped. |
libs/sacm tests and fixtures |
about 5,400 lines, 34 fixtures | New fixtures, with nothing external to derive them from |
| Conformance matrix | 38 rows, 37 verified, all SACM23-* |
A separate SACM24-* matrix; the 2.3 one must not be edited to fit |
src/sacm_adapter |
about 5,500 lines | New projection for strategy, context, undeveloped, ACP and defeat |
Legacy sacm and parser layers |
being retired (#350) | Should be gone before 2.4 work starts, or the work is done twice |
| Projects users already have | SACM 2.3 files | A 2.3-to-2.4 converter that Annex G does not specify, and a decision on whether saving upgrades a file |
Two constraints from the project's own rules apply. Round-trip integrity means a
2.3 file must still save as the same 2.3 file, so 2.4 support is additive: a
version the document declares, not a replacement. And the library's
StandardVersion seam was added for exactly this; V2_4 is one enum value, but
everything behind it is new.
Options
| Option | Cost | Result | |
|---|---|---|---|
| A | Stay on 2.3, report defects, watch | Small | Conformance claim stays true. We influence the formal text. |
| B | Read-only 2.4 import | Medium | Not possible today: there is no file format to read. |
| C | Dual-version library | Large | The eventual shape, once the format exists. |
| D | Move to 2.4 and drop 2.3 | Large | Breaks every existing project file and the only conformance claim we can evidence. |
A is recommended. C is where this ends up, and the preparation for it is cheap
discipline, not code: keep version-specific vocabulary (metaClaim,
needsSupport, TaggedValue) from spreading through src/ as user-level
concepts, as the watch list already asks.
Decision and preparation
Decided 2026-10-02: implementation is postponed. Too much of the beta is missing or unclear to build against. What could be prepared without the missing parts has been:
| Prepared | Where | Use |
|---|---|---|
| Pinned copies of the four beta documents | scripts/fetch-sacm24-beta1-references.sh |
Detects a republished beta |
| Class-level comparison with 2.3 | tools/sacm/diff_sacm24_metamodel.py |
Re-run against a Beta 2 or the formal version |
| Baseline of the beta model | metamodel inventory | A later version is diffed against this page |
| List of inconsistencies for OMG | Beta 1 inconsistencies to report | Input to OMG while finalization is open |
| Where 2.3 vocabulary sits in our code | below | Scope of the eventual migration |
Not prepared, deliberately:
- No
StandardVersion::V2_4and no detection of a 2.4 document. With no namespace to detect, any rule would be a guess, and a change underlibs/sacmneeds a conformance row that could not be verified. - No 2.4 classes, fixtures or matrix rows. The 2.3 claim is untouched.
- No refactoring of the ACP code ahead of need. See below.
Sending the defect list to OMG is a human action, tracked in #200.
Where the 2.3 vocabulary sits today
The watch list asked for two disciplines so that a later migration stays small. Checked on 2026-10-02:
- Branching on declaration literals is contained. Outside
libs/sacm, onlysrc/sacm_adaptertestsAssertionDeclaration::values (two files). That is the intended seam. metaClaimhas spread intocore. ACP editing and its commands (src/core/acp/acp_editing.cpp,src/core/commands/acp_commands.cpp), audit replay (src/core/audit/event_replayer.cpp), the argument sync and the adapter all callmeta_claimsoperations by name. This is the largest single piece of migration work: in 2.4 the reference points the other way, from the confidence claim to its subject.- The audit hash names it.
src/core/audit/canonical_model_hash.cppfeeds the literal"metaClaims"into the canonical hash. Renaming the field would change the hash of every existing audit record, so the label has to stay even after the storage moves. - One user-visible string names a 2.3 feature: "Could not assign a SACM gid
for confidence storage." 2.4 has no
gid.
None of this is worth changing now. Rewriting working ACP code against a target that may still move would add risk for no present benefit. It is recorded so the work is scoped when a trigger fires.
Order of work once a trigger fires
- Re-run the fetch script and the diff tool; update this page and the inventory.
- Finish the legacy-bridge retirement (#350) first, so one model is migrated, not two.
- Decide the GSN mapping: Annex A or the SCSC metamodel, per construct, in the mapping page.
- Start a separate
SACM24-*conformance matrix from the formal clauses. - Add the 2.4 model beside the 2.3 one behind
StandardVersion, reader first, with fixtures taken from whatever external files then exist. - Design the 2.3-to-2.4 conversion as an explicit, user-invoked action. Opening and saving a 2.3 file must keep producing the same 2.3 file.
When to revisit
Re-run the fetch script and the diff tool, and re-read this page, when any of these happens:
- OMG publishes the formal SACM 2.4, or a Beta 2.
- A namespace URI, an XSD or an Ecore for 2.4 appears, from OMG or from the maintainers of the 2.3 EMF implementation.
- Any other tool writes a native 2.4 file we can obtain.
- SCSC publishes a GSN metamodel for v3, which would settle the Strategy and ACP mappings independently of Annex A.
Open questions
- Is
needsSupportmeant to survive? The text keeps it and the model replaces it withbyRule.needsDevelopmentappears to be the intended replacement. - Is Annex A's GSN mapping meant to supersede the SCSC metamodel's? The two disagree on Strategy, Solution and Context.
- Does clause 15 bind a tool that claims one of its compliance points? It is headed informative, and clause 2 uses "shall" about it.
- Will the formal version define a native XMI namespace, or is the UML Profile the intended interchange?