Skip to content

GSN Community Standard v3 conformance matrix

This matrix records Assurance Forge coverage of the normative Goal Structuring Notation Community Standard v3 (SCSC-141C, May 2021). It is the standards-facing counterpart to the product capability matrix: this page asks whether the tool covers GSN, while the capability matrix asks whether a user-facing feature is available.

The inventory follows the five normative areas of GSN v3:

  1. Core GSN
  2. Argument Pattern Extension
  3. Modular Extension
  4. Confidence Argument Extension
  5. Dialectic Extension

Rows group closely related normative statements into testable implementation slices. Sources are the normative standard, the clause analysis in sacm-gsn-mapping.md, and the representation-gap analysis in sacm-gsn-metamodel-gaps.md.

Status vocabulary

Each operation is assessed independently:

Status Meaning
supported Available through the tool and backed by automated tests.
partial A useful subset exists, but the complete requirement is not available.
preserved Data survives compatibility round-trip but is not fully understood or editable.
absent No implementation exists.
blocked The current SACM 2.3 representation cannot carry the requirement without an explicit extension.
n/a The operation does not apply to this requirement.

supported in one column never implies support in another. In particular, rendering imported data is not authoring support, and preserving foreign XML is not semantic interchange.

Core GSN

ID Source Requirement Model/import Create/edit Render Validate Interchange Evidence and notes
GSN3-CORE-001 Part 1, Core GSN Goal element supported supported supported partial partial src/core/element_factory.cpp; src/ui/gsn/gsn_shapes.cpp; tests/test_element_factory.cpp; GSN syntax is normalized to SACM on save.
GSN3-CORE-002 Part 1, Core GSN Strategy element and its inference role supported supported supported partial partial src/core/element_factory.cpp; represented by SACM ArgumentReasoning plus one inference. Validation rejects a Strategy wired as an end of an inference rather than as its reasoning (tests/test_gsn_wellformedness.cpp). That is a GSN rule and not a SACM one: AssertedRelationship's source and target are typed ArgumentAsset, which ArgumentReasoning is, so SACM holds the wrong shape without objecting — which is why it needs checking here. "A Strategy must be supported" is not checked.
GSN3-CORE-003 Part 1, Core GSN Solution as a reference to evidence supported supported supported partial partial src/core/element_factory.cpp; tests/test_assurance_tree.cpp; represented by ArtifactReference plus AssertedEvidence. Validation rejects a non-Solution standing in the evidence position (tests/test_gsn_wellformedness.cpp); whether the artefact actually discharges the goal is a human judgement.
GSN3-CORE-004 Part 1, Core GSN Context element partial supported supported partial partial src/core/element_factory.cpp; tests/test_element_factory.cpp; ambiguous imported Context typing is preserved and diagnosed rather than guessed.
GSN3-CORE-005 Part 1, Core GSN Assumption element supported supported supported partial partial src/core/element_factory.cpp; tests/test_assurance_tree.cpp; maps to an assumed SACM Claim.
GSN3-CORE-006 Part 1, Core GSN Justification element supported supported supported partial partial src/sacm_adapter/gsn_role_tag.h; tests/test_sacm_library_edit.cpp; role requires an Assurance Forge tag because SACM has no distinct Justification class.
GSN3-CORE-007 Part 1, Core GSN SupportedBy relationship and direction supported supported supported partial partial src/core/tree_editing.cpp; tests/test_tree_editing.cpp; endpoints are reversed when translating between GSN and SACM direction. Validation reports an endpoint naming an element that is not in the case, resolving by id, gid and #id (tests/test_gsn_wellformedness.cpp); such a relationship is otherwise silently absent from the drawn argument.
GSN3-CORE-008 Part 1, Core GSN InContextOf relationship and direction supported supported supported partial partial src/core/tree_editing.cpp; tests/test_tree_editing.cpp; endpoints are reversed when translating between GSN and SACM direction. Validation rejects a context declared on anything but a Goal or a Strategy (tests/test_gsn_wellformedness.cpp).
GSN3-CORE-009 Part 1, Core GSN Undeveloped decorator supported supported supported partial partial src/ui/panels/element_panel.cpp; src/ui/gsn/gsn_shapes.cpp; tests/test_gsn_svg_exporter.cpp. Validation warns when the decorator survives on an element that has since been supported (tests/test_gsn_wellformedness.cpp); a challenge is correctly not counted as support. Whether an undecorated unsupported leaf should be flagged is left to the SCCG catalog. Authoring is offered on Goals and Strategies only: SACM records the decorator in the same single assertionDeclaration that carries assumed/axiomatic, and an Assumption or Justification is reached by InContextOf, never SupportedBy, so it has no missing support to declare. Previously the control appeared on every claim and the edit was silently discarded on reload -- see docs/sacm/sacm-gsn-mapping.md.
GSN3-CORE-010 Part 1, Core GSN Every GSN element has exactly one notation identifier partial supported supported partial partial Node notation identifiers are independently imported, edited, rendered and SVG-exported through assuranceForge.gsn.identifier without changing SACM storage ids or references; empty and duplicate edits are rejected. tests/test_element_factory.cpp; tests/test_element_edit_controller.cpp; tests/test_event_replayer.cpp; tests/test_gsn_svg_exporter.cpp. Uniqueness is now also checked across an imported case rather than only at the point of edit (tests/test_gsn_wellformedness.cpp). Mandatory presence is still met by falling back to the SACM storage id rather than by requiring an authored identifier, and standard interchange remains open.
GSN3-CORE-011 Part 1, Core GSN Element statements follow the semantics of their element type supported supported supported absent partial Text editing and round-trip are covered by tests/test_element_factory.cpp and tests/test_sacm_library_edit.cpp, but proposition/noun-phrase and single-statement rules are not validated.
GSN3-CORE-012 Part 1, Core GSN Off-diagram element/reference notation n/a n/a absent n/a n/a Decided in #454: off-diagram is an SVG export concern. It marks where an export split across several SVG files continues, and the diagram it names is that other file (evidence and decision: docs/sacm/sacm-gsn-mapping.md, docs/sacm/sacm-decisions-and-questions.md). Nothing is stored in SACM, so model, authoring, validation and interchange do not apply, and the canvas shows the whole argument without splits. Splitting an export is not built yet. An off-diagram target is not an ArgumentPackage: a package is a GSN Module, reached through an Away Goal (GSN3-MOD-003).
GSN3-CORE-013 Part 1, Core GSN Top goals, including more than one top goal in a structure supported supported supported partial partial core::AddTopGoal; tests/test_element_factory.cpp; top status is derived from graph position rather than stored as an independent GSN property.
GSN3-CORE-014 Part 1, Core GSN Structured argument is a directed acyclic support graph partial supported supported partial partial Edits reject cycles and imported cycles are reported against this requirement id; src/core/problems/argument_cycles.cpp; tests/test_argument_cycles.cpp. There is no complete GSN well-formedness validator.
GSN3-CORE-015 Part 1, Core GSN Only permitted element/relationship combinations are authored supported partial supported supported partial src/core/problems/gsn_wellformedness.cpp; tests/test_gsn_wellformedness.cpp; tests/test_tree_editing.cpp. Imported structures are checked against the Core connection rules — a Solution, Context, Assumption or Justification is a leaf, and only a Goal or a Strategy is supported or declared in context. Authoring enforces the same rule through one shared predicate used by the Add menu, the id planner and the proposal preview, which previously disagreed. Dropping a Solution onto a Strategy is now accepted, matching what the Add menu already created (tests/test_tree_editing.cpp). Create/edit stays partial for one remaining combination: a Strategy under a Strategy, which GSN permits and SACM would hold — AssertedRelationship's source and target are typed ArgumentAsset, which ArgumentReasoning is — but the single-inference encoding records the goal a strategy supports in a strategyTarget tag and nothing has established what that means when the target is itself a strategy. A limit of the encoding, not of the notation.

Argument Pattern Extension

ID Source Requirement Model/import Create/edit Render Validate Interchange Evidence and notes
GSN3-PAT-001 Part 1, Argument Pattern Extension Uninstantiated decorator supported absent supported absent partial SACM isAbstract is projected to the hollow triangle; tests/test_sacm_library_parallel_load.cpp; tests/test_gsn_svg_exporter.cpp. The UI has no authoring control.
GSN3-PAT-002 Part 1, Argument Pattern Extension Combined undeveloped and uninstantiated decorator partial absent supported absent partial tests/test_gsn_svg_exporter.cpp; the standard bisected marker is rendered and exported, while authoring remains absent.
GSN3-PAT-003 Part 1, Argument Pattern Extension Multiplicity decorator absent absent absent absent absent No carrier for the GSN multiple/isMany property.
GSN3-PAT-004 Part 1, Argument Pattern Extension Optionality decorator absent absent absent absent absent No carrier for the GSN optional/isOptional property.
GSN3-PAT-005 §1:3.2.2 Choice structural abstraction preserved absent absent absent preserved GSN Choice/ChoiceNode XML is retained as compatibility content but has no SACM 2.3 semantic equivalent. It is part of the Pattern Extension, not Core GSN.
GSN3-PAT-006 §1:3.2.2 Choice minimum/maximum cardinality absent absent absent absent absent GSN v2.2 Choice has no attributes; SACM 2.4 draft Join.lowerBound/upperBound is the intended alignment point.
GSN3-PAT-007 Part 1, Argument Pattern Extension Pattern argument model absent absent absent absent absent No Pattern domain model exists.
GSN3-PAT-008 Part 1, Argument Pattern Extension Template argument model absent absent absent absent absent No Template domain model exists.
GSN3-PAT-009 §1:3.4 Pattern Definition and pattern identifier absent absent absent absent absent The normative concept has no class in the published GSN or SACM metamodels; the tool still needs an explicit representation.
GSN3-PAT-010 Part 1, Argument Pattern Extension Pattern Catalogue absent absent absent absent absent A product catalogue workflow must be kept separate from the normative catalogue data.
GSN3-PAT-011 Part 1, Argument Pattern Extension Pattern instantiation relationship absent absent absent absent absent No instantiationOf relationship exists.
GSN3-PAT-012 Part 1, Argument Pattern Extension Instantiation Data Reference attached to a Template absent absent absent absent absent No model, notation or attachment relationship exists.
GSN3-PAT-013 Part 1, Argument Pattern Extension Related-pattern references absent absent absent absent absent No relatedTo pattern relationship exists.
GSN3-PAT-014 Part 1, Argument Pattern Extension Published/final pattern and argument states absent absent absent absent absent No published or final state exists.

Modular Extension

ID Source Requirement Model/import Create/edit Render Validate Interchange Evidence and notes
GSN3-MOD-001 Part 1, Modular Extension Module and Argument View notation partial partial absent absent partial SACM ArgumentPackage provides storage and package editing, but the GSN Module symbol and Argument View are not implemented.
GSN3-MOD-002 Part 1, Modular Extension Contract Module partial partial absent absent partial SACM ArgumentPackageBinding is available as substrate; GSN contract notation and behavior are absent.
GSN3-MOD-003 Part 1, Modular Extension Away Goal partial supported supported partial partial Import can map the type to a cited Claim. Authoring cites a goal in another module from the Add menu, recording SACM isCitation and citedElement, and offering only goals that can legally be cited: src/core/element_factory.cpp, src/core/commands/element_commands.cpp, src/ui/element_context_menu.cpp. Both renderers draw the module in a compartment across the bottom of the shape and resolve the goal's statement through the citation rather than copying it: src/ui/gsn/gsn_shapes.cpp, src/export/svg_writer.cpp, tests/test_away_goal.cpp. A citation inside one module is refused rather than drawn as away, because it would report support from a module that does not carry it. Validation reports a citation that resolves to nothing and an away goal that is also argued in this module, each naming GSN3-MOD-003 (src/core/problems/gsn_wellformedness.cpp); neither offers a quick fix, because clearing a citation and deleting someone's argument are both decisions for a person. Developing an away goal inside the citing module is an error, because GSN forbids it (v2 Annex B1.3.1.1), and a module name two packages share falls back to the package id, because a module identifier must be unique (v2 2.5.2.6). The cross-module consistency and substitution rules of GSN3-MOD-014 are not checked, which is why this is partial. An away goal cites only goals in the same SACM file, by decision in #454: a reference into another file is an XMI external reference, which the library reports and drops on load (SACM23-XMI-003). An away goal cannot be staged into a draft.
GSN3-MOD-004 Part 1, Modular Extension Away Solution partial absent absent absent partial Import can map the type to an ArtifactReference; authoring and notation are absent.
GSN3-MOD-005 Part 1, Modular Extension Away Context preserved absent absent absent preserved The published metamodel typing is contested; the source fragment is preserved rather than retyped.
GSN3-MOD-006 Part 1, Modular Extension Away Assumption partial supported supported partial partial A Claim declared assumed carrying isCitation and citedElement, classified by its declaration so it is not mistaken for an away goal. Authoring cites an assumption in another module from the Add menu, in context of the selected goal or strategy, offering only assumptions: src/core/element_factory.cpp, src/core/commands/element_commands.cpp, src/ui/element_context_menu.cpp. The audit event records the kind, and replay reproduces it (tests/test_event_replayer.cpp). Both renderers draw the Assumption shape with its module and read the statement through the citation (tests/test_away_assumption_justification.cpp). Validation reports a citation that resolves to nothing under this requirement (src/core/problems/gsn_wellformedness.cpp). Partial for the same reasons as GSN3-MOD-003: GSN3-MOD-014's cross-module rules are not checked, citations stay within one SACM file, and it cannot be staged into a draft.
GSN3-MOD-007 Part 1, Modular Extension Away Justification partial supported supported partial partial As GSN3-MOD-006, for a Claim carrying the justification role: authored from the Add menu offering only justifications in other modules, drawn with its module by both renderers, and an unresolved citation reported under this requirement (tests/test_away_assumption_justification.cpp). Partial for the same reasons.
GSN3-MOD-008 Part 1, Modular Extension Module Reference partial absent absent absent partial Can map to an ArtifactReference, but its GSN role is not usable in the canvas.
GSN3-MOD-009 Part 1, Modular Extension Contract Module Reference partial absent absent absent partial Can map to an ArtifactReference, but its GSN role is not usable in the canvas.
GSN3-MOD-010 §1:4.6 Module Interface partial absent absent absent partial SACM ArgumentPackageInterface exists, while GSN v2.2 OCL disables it.
GSN3-MOD-011 Part 1, Modular Extension Architecture View absent absent absent absent absent Diagrammatic feature expected to align with SACM 2.4.
GSN3-MOD-012 Part 1, Modular Extension Public decorator absent absent absent absent absent No model or renderer exists.
GSN3-MOD-013 Part 1, Modular Extension To-be-supported-by-contract decorator absent absent absent absent absent No model or renderer exists.
GSN3-MOD-014 Part 1, Modular Extension Cross-module consistency, substitution, contract and dependency rules absent absent absent absent absent Context consistency, away-goal substitution, contract constraints and circular module dependency checks are not implemented.

Confidence Argument Extension

ID Source Requirement Model/import Create/edit Render Validate Interchange Evidence and notes
GSN3-ACP-001 Part 1, Confidence Argument Extension ACP on SupportedBy supported supported supported partial partial src/core/acp; tests/test_assurance_claim_point.cpp; stored in vendor TaggedValues with a SACM meta-claim where representable.
GSN3-ACP-002 Part 1, Confidence Argument Extension ACP on InContextOf supported supported supported partial partial src/core/acp/acp_relationship_index.cpp; tests/test_acp_relationship_index.cpp.
GSN3-ACP-003 §1:5.2.2 ACP on an element that references an artefact, such as Solution or Context supported supported supported partial partial src/core/acp/acp_editing.cpp; tests/test_acp_editing.cpp; uses vendor TaggedValues because SACM 2.3 ArtifactReference has no metaClaim.
GSN3-ACP-004 §1:5.2.3 ACP has a unique identifier supported supported supported partial partial tests/test_assurance_claim_point.cpp; deterministic ACP<n> generation is tested, while standard module qualification is a separate requirement below.
GSN3-ACP-005 Part 1, Confidence Argument Extension ACP associates the risk argument point with a confidence argument supported supported supported partial partial Separate confidence argument packages can be created, linked, selected and opened; tests/test_acp_editing.cpp.
GSN3-ACP-006 §1:5.2.3 Module-qualified ACP notation when the confidence argument is elsewhere partial partial absent absent partial The package/top-goal link exists, but the canvas does not render notation such as ACP1[Confidence].
GSN3-ACP-007 Part 1, Confidence Argument Extension Risk and confidence arguments are explicitly distinguished partial partial partial partial partial Confidence packages use an Assurance Forge purpose tag; there is no general GSN argument-type model or standard interchange.

Confidence scoring, confidence stores and their panel are Assurance Forge analysis features. They are deliberately excluded from this normative section.

Dialectic Extension

ID Source Requirement Model/import Create/edit Render Validate Interchange Evidence and notes
GSN3-DIA-001 Part 1, Dialectic Extension Counter-argument expressed by a Goal supported supported supported partial partial core::AddChallenge; tests/test_dialectic_challenge.cpp; uses SACM isCounter.
GSN3-DIA-002 Part 1, Dialectic Extension Counter-evidence expressed by a Solution supported supported supported partial partial core::AddChallenge; tests/test_dialectic_challenge.cpp.
GSN3-DIA-003 Part 1, Dialectic Extension Challenge targets a GSN element supported supported supported partial partial tests/test_dialectic_challenge.cpp; dashed open-arrow notation and side layout are tested. Validation reports a challenge whose target is not in the case — it is stored but never drawn against anything (tests/test_gsn_wellformedness.cpp). The well-formedness checker deliberately exempts counter relationships from the support rules, since a challenge is not support and GSN v3 lets one point at a relationship.
GSN3-DIA-004 Part 1, Dialectic Extension Challenge targets a relationship supported supported supported partial partial tests/test_dialectic_challenge.cpp; canvas and SVG arrows land on the target relationship midpoint.
GSN3-DIA-005 Part 1, Dialectic Extension A challenge relationship can itself be challenged supported supported supported partial partial tests/test_dialectic_challenge.cpp; counter-challenges are supported, but generated counter identifiers are not nesting-aware.
GSN3-DIA-006 Part 1, Dialectic Extension Challenged elements can be marked in doubt pending review absent absent absent absent absent The canvas shows a non-normative attention cue, but no GSN inDoubt state exists.
GSN3-DIA-007 Part 1, Dialectic Extension Defeated decorator applies to GSN elements and relationships partial absent absent absent partial SACM can preserve AssertionDeclaration::defeated on assertions only. Strategy, Solution and Context are not SACM Assertions.
GSN3-DIA-008 §1:6.3.12 and related rules Challenge resolution propagates in-doubt/defeated semantics without reinterpreting support blocked absent absent absent absent Full coverage needs a GSN extension carrier for targets that SACM 2.3 cannot annotate.

Cross-cutting interchange and conformance

ID Source Requirement Model/import Create/edit Render Validate Interchange Evidence and notes
GSN3-XMI-001 Published GSN metamodels and project interoperability policy Recognized GSN v2.2 and legacy types import without reversing argument meaning partial n/a partial partial partial libs/sacm/src/io/name_tables.cpp; libs/sacm/tests/test_roundtrip.cpp; abstract or contested types remain preserved fragments.
GSN3-XMI-002 Project round-trip policy Original GSN type provenance survives compatibility save and reload supported n/a partial partial supported libs/sacm/src/io/xmi_reader.cpp; libs/sacm/tests/test_roundtrip.cpp; provenance is retained as sacm.import.extensionType, while output syntax is SACM rather than GSN.
GSN3-XMI-003 GSN v3 Export a GSN-native representation of every supported v3 construct absent n/a n/a absent absent GSN v3 has no published complete metamodel. A project extension dialect must be explicit and must not be presented as normative GSN XMI.
GSN3-VAL-001 GSN v3 Part 1 Produce requirement-traceable GSN conformance diagnostics partial supported n/a partial n/a The mechanism exists and is tested: src/core/problems/gsn_wellformedness.cpp returns rule-tagged findings, src/app/structure_problem_sync.cpp carries each requirement id into the Problems panel, and every check in tests/test_gsn_wellformedness.cpp names the requirement it backs. Covered: GSN3-CORE-002, -003, -007, -008, -009, -010, -014, -015 and GSN3-DIA-003. Not covered: statement constraints (GSN3-CORE-011), off-diagram notation, and every Pattern, Modular and Confidence extension rule — so this is not yet a complete GSN v3 validator. Create/edit is supported because every finding now carries a repair that clears it (src/core/relationship_editing.cpp; tests/test_gsn_repair.cpp); a diagnostic the tool cannot act on is a defect report the user can only work around.

Conformance conclusion

Assurance Forge currently provides substantial Core GSN, ACP and Challenge functionality, limited Pattern rendering, and SACM package infrastructure that can host future Modular GSN. It does not yet fully support GSN v3.

Full support requires an explicit GSN extension representation for normative concepts that SACM 2.3 cannot carry. That representation must remain outside the public API of the independent libs/sacm library, preserve SACM XML as the project source of truth, and refuse rather than silently reinterpret data.

Independent GSN notation identifiers and the first tranche of a requirement-traceable well-formedness validator are now in place. The validator covers the Core connection rules, relationship endpoint resolution, identifier uniqueness, the undeveloped decorator and challenge targets, and every diagnostic names the GSN3-* requirement it enforces so a reader can check the tool against the standard rather than trust it. Each finding also carries a repair chosen for its rule, and relationship removal became a first-class edit in the process — a validator that reports defects the tool cannot correct only tells a user their imported case is wrong.

The next implementation tranche is:

  1. Core off-diagram notation (GSN3-CORE-012), decided in #454 to be an SVG export concern: splitting an export across several SVG files and marking where each continues. Nothing about it is stored in SACM;
  2. statement-form validation (GSN3-CORE-011), which needs a decision on what a tool may assert about a proposition before any code; and
  3. extending the validator to the Pattern, Modular and Confidence extension rules, each of which first needs the carrier its matrix row above describes.