SACM 2.4 watch list
Overtaken on 2026-10-02. OMG published SACM 2.4 Beta 1 in September 2026 and closed all 59 RTF issues. This page was written from draft issue text in July 2026 and is kept for its reasoning. Every row in the table below landed in the beta. For what was actually published and what it means for this project, read the SACM 2.4 Beta 1 impact analysis.
Nothing here is normative, and nothing here is implementable. SACM 2.3
(formal/23-05-08) is the only formal SACM. Every row below was written from
draft text in an OMG RTF issue that was open at the time.
These rows must never appear in sacm-conformance-matrix.md. That matrix
records 2.3 compliance; mixing in speculative 2.4 rows would let an unbuilt,
unpublished requirement look like a conformance claim. The SACM24-WATCH-*
prefix exists so the two can never be confused, and the sacm_matrix_check
CTest only ever reads the 2.3 matrix.
Why we track this
Our project decision is to support SACM 2.3 only, while not making future
version support impossible. Watching 2.4 tells us which of today's design
choices would be expensive to unwind — and it has already changed one decision:
we now know SACM 2.4 removes metaClaim, so building Assurance Claim Point
support on it would have been building on sand.
Status of the revision
As of 2026-07-20. Superseded: the beta now exists at
omg.org/spec/SACM/2.4/Beta1 and every issue below is closed.
- Issue list: https://issues.omg.org/issues/spec/SACM/2.3 — 59 issues, all
status
open, all against "SACM 2.3b1" (checked 2026-07-20). - The
/fixedendpoint contains noSACM24-*item, so no 2.4 change has a formal disposition. Claims that something is "decided" are not supportable from the public tracker, though SACM24-58 refers to "the modifications from the first two ballots", so provisional agreement exists that the tracker does not show. - No 2.4 beta exists.
omg.org/spec/SACM/2.4/and its variants 404. Issue attachments (issues.omg.org/secure/attachment/<id>/<name>.pdf, public despite the path) are the only source. - No published RTF schedule or target date.
Changes that would break a 2.3 implementation
| ID | Issue | Change | Our exposure |
|---|---|---|---|
| WATCH-001 | SACM24-12 | AssertionDeclaration → AssertionDeclarationKind; defeated and asCited leave the enum |
model::AssertionDeclaration |
| WATCH-002 | SACM24-48/73/82 | defeated becomes isDefeated : Boolean on a new abstract ArgumentConcept |
as above |
| WATCH-003 | SACM24-38, -50 | metaClaim removed from Assertion |
Assertion::meta_claims(), AddMetaClaim |
| WATCH-004 | SACM24-83 | New Claim.subject : SACMElement[0..*] — the metaClaim replacement |
future ACP work |
| WATCH-005 | SACM24-15 | AssertedArtifactSupport and AssertedArtifactContext deleted |
two ElementKinds |
| WATCH-006 | SACM24-49, -82 | New abstract Targetable; relationship source/target retyped and restricted in the metamodel rather than by OCL |
validation rules |
| WATCH-007 | SACM24-17 | gid → mandatory private elementId : UID[1]; isAbstract→isSACMAbstract; isCitation becomes derived; citedElement→cited |
SACMElement identity |
| WATCH-008 | SACM24-13 | Base renames: UtilityElement→BaseElement, Note→SACMComment, TaggedValue→NamedValue, ImplementationConstraint→SACMConstraint |
XMI element names, ElementKind |
| WATCH-009 | SACM24-2/3/6, -98 | LangString merged into MultiLangString; moves Base → Terminology |
model::LangString |
| WATCH-010 | SACM24-4, -37 | ModelElement.name : LangString[1] → elementName : ExpressionLangString[0..1] + derived /name |
naming round-trip |
| WATCH-011 | SACM24-8 | ArgumentationElement → ArgumentElement |
XMI names |
| WATCH-012 | SACM24-11 | XPackageInterface→XInterfacePackage; one BindingPackage replaces the per-domain ones |
packaging kinds |
| WATCH-013 | SACM24-7, -13 | ArtifactElement moves out of Base; ModelElement becomes the cross-domain base |
type hierarchy |
| WATCH-016 | SACM24-16 | One Group replaces the per-domain groups |
three ElementKinds |
| WATCH-017 | SACM24-53 | Property removed, subsumed by NamedValue |
one ElementKind |
| WATCH-018 | SACM24-18/56/57/105 | Package ownership tightened into a conformance requirement | validation |
Chapter 15 — "Advanced SACM Capabilities"
Seven capabilities (15.1–15.7). Headed (informative), yet SACM24-105 makes six of them compliance points — a contradiction one side will have to resolve.
Two matter to us:
- §15.1
Join—joinType,isNot,lowerBound,upperBound,joinRule. This is where GSN Choice "m of n" cardinality lands, so our gap report should ask SCSC to align with it rather than invent a syntax. - §15.3
SACMView/SACMDiagram— see below.
§15.3 and our layout policy
docs/sacm/sacm-layout-policy.md says layout is not SACM and must not enter the
library. That decision survives 2.4: SACMView is an optional compliance
point, the mandatory one is Packaging, and strict export at the mandatory point
still needs no diagram data.
What changes is the fallback. Our policy currently suggests a sidecar or a
vendor extension if layout ever has to be persisted. Once SACMDiagram exists,
a vendor extension is the wrong target — the standard-aligned one is
SACMDiagram + SACMDiagramElement, which are built on OMG Diagram
Definition/Interchange. Notably SACM itself defines no geometry: it adds only
that a diagram exists, which elements each diagram element denotes, and an
opaque rendered representation (e.g. SVG). Coordinates come from DD/DI.
Practical consequence, no code change now: keep the deterministic layout
module's output expressible as (element reference → geometry/representation)
pairs, because that is the shape SACMDiagramElement takes.
What we changed because of this
- Added
StandardVersionandLoadResult::source_version, so the version axis is explicit at the API boundary while adding a value is still cheap. Version is deliberately orthogonal toio::Mode— resist any futureMode::Strict24. - Implemented
SaveOptions::namespace_uri. 2.4 introduces no native SACM nsURI either — its own Annex B example serializes through the UML Profile — so the pin stays a project choice and callers can rebind it.
What we deliberately did not change
AssertionDeclarationstays a bare enum. In 2.3 it is one, and renaming it now would misrepresent the published standard. The exposure is in client code: nothing outsidelibs/sacmshould branch on== AssertionDeclaration::Defeated. Route that through a predicate and the eventual migration is one function body.meta_claims()stays. It is normative 2.3 and must round-trip. 2.4 does not generalize it, it deletes it and solves the problem from the other end (Claim.subject), so abstracting now would buy nothing. Discipline instead: don't surface "metaClaim" as an adapter- or user-level concept name.- No 2.4 classes, renames, or deletions. Implementing an open, unballoted draft would break 2.3 conformance to chase a moving target.
Open questions
Answered, as far as Beta 1 answers them, in the
impact analysis. Questions 1 and 3 were published
unresolved: the text and the model disagree. On §15.3 above, Beta 1 does define
geometry (Bounds, Point, waypoint), which this page said it would not.
- Does
needsSupportsurvive? Annex G says "AssertionDeclaration is one of axiomatic, assumed, asserted", omitting it — but SACM24-12's stated scope removes onlydefeatedandasCited, and Annex C still gives concrete syntax for needsSupport. Unresolved. assertionDeclarationmultiplicity: some draft diagrams show[1] = asserted(as 2.3), others[0..1].- Chapter 15: informative or normative?
- SACM24-107 "various cleanup items" has no attachment — content unknown.
- If 2.4 keeps producing no nsURI while adding a Profile-based Annex B, the interchange story arguably regresses for non-UML tools. Relevant to our interop work.