Repository navigation
v0.9.1 - Conforming Migration Release
OpenSysML 0.9.1
0.9.1 is a patch release on 0.9.0: 125 pull requests merged to develop in the day after the
executable-migration release, folded into one changelog section, and nothing that changes what a
valid model means. Most of it is the SysML v1 migration read against the OMG pilot validator and
against Cameo's own diagrams — the output that 0.9.0 wrote in OpenSysML's extended notation, or
with references the v2 accessibility rules do not admit, now validates clean under the reference
implementation, and a migrated Cameo diagram keeps its layout, colours, notes and pasted pictures
from the .mdzip alone, no MTIP export needed. Around that: the RDF and API JSON interchange
write the normative shapes for triggers, flow ends, payloads, messages and verifications; the
ApplyEdits authoring surface covers most of the grammar's body members; the runtime reads a
parameter's multiplicity as §7.6.3 says; two lints; FMI models import and run; the commands build
for WebAssembly; and every client — Python, Node, Java, Rust, Go, plus new Julia and MATLAB
clients — is published from the core tag at the core version.
Full detail per change is in CHANGELOG.md § 0.9.1.
The wire is additive (buf breaking against the 0.9.0 api/proto passes; the new fields and
RPC options are optional), no CLI flag, REPL command or import path is removed, and every
model 0.9.0 accepted is accepted, with the diagnostic differences listed under Upgrading.
Upgrading
- Every client releases with the binaries.
v0.9.1publishes, from the one tag:opensysml
0.9.1 to PyPI,@openmbee/opensysml0.9.1 and its five@openmbee/opensysml-sysml-grpc-<os>-<cpu>
packages to npm,org.openmbee:opensysml:0.9.1(andopensysml-parent) to Maven Central, the
opensysml0.9.1 crate to crates.io, andgithub.com/Open-MBEE/OpenSysML/client/opensysml@v0.9.1
for Go through the module proxy. The Java artifact isopensysml, notopensysml-client
(nothing was ever published under the old name; the module directory and package names are
unchanged). Theclient-node-v*,opensysml-java-v*andopensysml-rust-v*tag lines are gone,
and the VS Code, SysON and Cameo editor manifests carry the core version too. - Files given together are separate documents.
sysml -validate a.sysml b.sysml,-satisfy,
-eand%loadused to join their files into one buffer; each file is now its own workspace
document, as the editor and the corpus gates read it. A root-level import in one file no longer
serves the others, and two files declaringpackage Aare two root namespaces rather than a
duplicate-member error — the same behaviour as the language server.-convertof several files
now writes one graph, with cross-document references linked (#653). - Diagnostics that moved. A bare
in x : T;parameter is optional under §7.6.3 (an explicit
[1]stays required); a kind-less usage (x : Integer;) is aReferenceUsage, as the export
already wrote it;part def X :> A :> B;and other malformed relationship clauses are rejected
(#615); aconnectiontyped by anallocation deforinterface defis accepted (#630); a
parttyped only by non-part definitions, a connector end or annotation value naming a
definition, and a trigger naming a usage are now reported, as the pilot reports them;then
/elsewritten after a non-action member, and a comment where no member may start, are
nonstandard-notationwarnings (errors under-strict); a root package named like a standard
library package gets alibrary-root-namewarning. Diagnostic ranges end at the last token of
what they report rather than at the next token. - Migration output changed shape. Deferred signals are written in standard SysML v2 in both
modes (deferno longer appears in migration output);this.<feature>inside a behavior
definition became anin ref context : <Block>;parameter, or the behavior an action usage of
the block; a top-level package named like a library root is written as<name>Model; and
-strictrefuses every construct whose only v2 form is an OpenSysML extension. Goldens pinned on
0.9.0 migration output will move. - Interchange output states more subjects. Turtle and API JSON write transition triggers as
triggerActionstructure, flow ends asFlowEnds, payloads asPayloadFeatures, message ends as
EventOccurrenceUsages,verifyas aRequirementVerificationMembership(not a satisfy), a
dependency's prefix metadata as anAnnotation, source positions on every declared element, and
same-named members with distinct positional identities. Graphs written by 0.9.0 still read.
SysML v1 migration
- Output the reference implementation accepts. Reception methods read the payload through the
accept that holds it; an «Allocate» between definitions is anallocation def; a stereotype tag
naming a definition is the element cast to its metaclass; a decision'selsebranch follows the
decide; a block's activity that reads the block's features is an action usage of the block, or
a definition takingcontext; parameter multiplicities,ordered/nonunique, context-parameter
order and shadowed names are kept or qualified; «Probability» reads reach the property they name.
The OpenSysML libraries themselves (DocumentQueries,MOSA,OOSEM,Simulation) now validate
clean under the pilot too. - Diagrams from the stream.
sysml Project.mdzip -convert sysmlreads each diagram's own
MagicDraw symbols — frame, geometry, routes, fill/pen/text colours, fonts, notes, hidden symbols
— and writes them asDiagramLayoutCanvas,Layout,Route,Style,NoteandPicture
metadata; pasted images are decoded and written underimages/.-render-style cameothen draws
the DOT form as Cameo draws it (frame tab, gradient fills, compartments, pseudo-state symbols,
pins on the action border,trigger [guard] / effectlabels), and a migrated document publishes
to PDF with those figures at their stated positions. - Documents. Cameo instance/generic tables migrate with their rows, tree modes, exclusions,
column widths, stereotype-tag columns and saved filters; a DocGenImageof a table embeds the
table; a view conforming to no viewpoint shows what MDK shows; 2022x collaborator paragraphs are
read and placed at their anchors; a view's own documentation opens its section; View Editor image
paragraphs and attachments becomeImageblocks. -compare-resultsover a large model runs in bounded memory (the TMT reproduction killed at
8 GiB completes under 3 GiB, same numbers), and the writer is twice as fast.
Diagrams and documents
DiagramLayout::Style,NoteandPictureare library metadata any view can carry; a
document's diagram form is chosen per diagram (positioned views as Graphviz, the rest Mermaid);
the three graph forms draw the same nodes for a positioned view; routed edges end in arrowheads
at both stated ends; notes, labels and pseudo-states are placed where the diagram put them.- Documents gain an
Imageblock,-doc-number-figures, member-path columns
(stat.runs), multi-valued cells,Tree,WhereText,columnWidthsandcolumnLabels; wide
tables fit their PDF pages;-render-documentswrites every document it can and exits3when
one could not be rendered.
Authoring, runtime and verification
ApplyEditsnow authors connections, allocations and flows, transitions, behavior
parameters, action-body sequencing and nested statements,performusages, constraint bodies and
assertions, stateentry/do/exit, imports, metadata prefixes and usages,verify
memberships, comments, notes and documentation — each behind a capability the clients preflight —
and a batch resolves its references against the whole batch.- Runtime. Parameters take their §7.6.3 effective multiplicity; nested usages implicitly
subsetsubparts/subactions/…; a nested chain redefinition (attribute :>> mid.leaf.value)
applies at every level (an extension, warned);thisin a behavior definition is the run's own
occurrence; a performed action's unbound input ends that performance, not its performer's
creation; chained writes through a one-element collection reach it. - Verification asks
holdsandsatisfiable, not onlyevaluate(question=in Python,
Asking(...)in Go,VerifyOptions.asking(...)in Java), with witnesses, undecided reasons and
a rounding-sound proof rule. - External tools. Manifests compose the command line (
invocation) and read the reply in JSON,
CSV, key–value lines or exit code (reply); tools answer sequences;ToolExecutionworks on a
calc def;-tool-dry-run/%toolpreview an invocation; runs record the tools they reached.
FMI models (1.0–3.0) import as calcs and run throughpip install opensysml[fmi]'s reference
runner, with units as ISQ types. - Lints
undeclared-signalandport-type-mismatch; a workspace holds closed documents as
interface records and hydrates them on demand; a batch of files is analysed on a worker pool
(the 34-file stress constellation in 9.2 s against 22.0 s).
Clients and integrations
- Julia (
client/julia/OpenSysML) and MATLAB/Octave (client/matlab) clients over the
Connect-JSON surface, each with a conformance runner. - Python
parse_sourcesfor multi-document models;ExecuteState/ExecuteActionon a performer
report the performer's attributes; queries exposesatisfiedRequirement/satisfyingFeatureand
identify unnamed declarations by their export identity. - The commands build and run for
wasip1andjs(make build-wasm,docs/reference/wasm.md);
no artifact ships yet.
Performance
Occurrences of one shape share derived defaults and verdicts (the 12 800-satellite fleet's 2 412
satisfaction checks: 8.84 s / 23.4 GiB → 4.59 s / 7.2 GiB; one summed attribute over every
occurrence 42.7 s → 3.85 s); a view with many exposes no longer stalls (#636) and cyclic public
imports analyse in polynomial time (#633); ParseSources over many documents is linear;
the API JSON writer takes half the time; satisfying requirements allocates less than 0.9.0 and is
within 11% of its time. The Apollo 11 model still loads, resolves and validates in 0.27 s.
Packaging
- Linux amd64/arm64, macOS amd64/arm64 and Windows amd64 archives,
sysml-grpcbinaries with
.sha256sidecars,SHA256SUMS.txtand its cosign bundle, the Python wheel and sdist are built
by the release workflow from tagv0.9.1. New: the release carries signed SLSA provenance
(provenance.intoto.json+.bundle, verified withcosign verify-blob-attestation). - The release workflow can be rehearsed on a branch (
release_rehearsal) with every check live and
the irreversible steps skipped; this release was rehearsed twice before tagging. - macOS binaries are not Developer ID signed or notarized;
macos-distribution.md
gives the workarounds.
Verification
The pre-tag gate of docs/project/releasing.md on the release commit (Go 1.25, Linux amd64):
gofmt -l . empty, go build ./... and go vet ./... clean, go test -count=1 ./... all
packages ok with the OMG training corpus, the three pilot corpora, the pilot library XMI and the
PSSM suite required, the standard-library conformance gate, make conformance (149 passed, 1
skipped), the Python client's 1237 tests, Node 149, Java mvn verify, Rust cargo test and
cargo package, buf breaking against the 0.9.0 api/proto with no breaking change, and the
documentation id, link and figure checks and python3 scripts/changelog.py check clean. An
end-to-end shakedown of the built binaries, the REPL debuggers, TTL round-trip, document
rendering, XMI migration in both modes, the gRPC service and the four clients preceded the cut.
Every change in the range merged through the pull-request CI on develop and, for the release
branch, through the full pull-request CI against main and two green release rehearsals.