Repository navigation
v0.10.0 - Runtime Environment and Development Kit Release
OpenSysML 0.10.0
0.10.0 is the first minor release of the OpenSysML REDK — the Runtime Environment and Development
Kit, the second generation of OpenMBEE's Model Development Kit (MDK2), expanded and updated for
SysML v2; the Cameo plugin is now OpenSysML MDK. It is cut from main and carries everything that
landed on develop after 0.9.2 — some 250 pull requests, 75 additions, 64 changes and 118 fixes;
full detail per change is in
CHANGELOG.md § 0.10.0.
The headlines: exact arithmetic (unbounded Integers, exact Rationals, across every client); -migrate
as the verb for SysML v1 models, with -portable and -strict output that loads in a tool shipping
only the standard library; action, state-machine, interconnection, case and mixed diagrams with
links back to the source, timelines and message sequences; -import of CSV/TSV/JSON data into feature
values; -compile over Strings, enumerations, records, closures and function values; -self-check
over the SysMLValidation library; a combined sysml-wasm module; a Jupyter kernel with JupyterLab 4
highlighting; every client (Go, Python, Node, Java, Rust, Julia, MATLAB/Octave) reaching the whole
service surface, with install scripts and agent skills for each; and the documentation site at
https://runtime.opensysml.org/.
The wire is additive: three new RPCs (Migrate, RenderView, ExportGraphs) and new optional
fields and capabilities (rational_values, export_graphs, verification arguments); buf breaking
against the 0.9.2 api/proto reports nothing. A service without a capability says so and refuses
what it cannot carry. The notation accepted by 0.9.2 is accepted by 0.10.0 with the exceptions under
Upgrading.
Upgrading
defer <event>;is removed; the pseudostate keywords are deprecated. Thedeferstate member,
an OpenSysML extension SysML v2 has no counterpart for, is adefer-notation-removedparse error in
either conformance mode, pointing at the standard encoding (an ordered buffer, a keeping accept loop
markedMigrationMetadata::DeferredKeeper, an exit flush);deferis an ordinary name again. The
choice,junction,history,shallow history,deep historyanddeferkeywords still parse
but warnnonstandard-notation(an error under-strict) naming theStateMachineslibrary
spelling (#StateMachines::choice state …), with a quick-fix that rewrites and imports. The SysML
v1 migrator writes the library spellings.- Arithmetic is exact. Integers are unbounded (
2**70is1180591620717411303424, no
arithmetic overflow); a decimal literal is the exact Rational it spells (0.1 + 0.2 == 0.3is
true,1 / 3is1/3). Code comparing against rounded binary64 results, or goldens holding them,
will see the difference;Realstays binary64. gRPC carries them asValue.rational_valueand
Quantity.rational_magnitudeunder therational_valuescapability. - A SysML v1 model is migrated, not converted.
sysml Model.mdzip -convert sysmlexits
non-zero and names-migrate;-migrateis its own verb, with-portable(one self-contained
file),-strict(no OpenSysML library references, apart from the deferred-signal
MigrationMetadata::Deferred*annotations) and-migration-results. Migration output
changed shape in many places — object flows as succession flows, operation calls and send/accept
actions, parameter sets, value-specification multiplicities, untyped properties following the
tool's kind marker, use-case diagrams as connections — and the report says where a run stops on a
construct the tool simulated and v2 cannot run as written. Goldens pinned to 0.9.2 output need
refreshing. - Diagnostics that moved. An
assume/requireoutside a requirement or case body and a
one-endedfirst <node>;outside an action body are parse errors, not warnings; imports that make
a namespace's memberships indistinguishable are reported; an end feature that may vary in time is
read-only (SysML v2 §8.4.2.2); a multiplicity bound is a literal or a feature name; a standalone
@M about x;annotatesx. Subactions no succession orders are now performed, unordered, instead
of refused; a signal nothing of its object takes is discarded, not held for a later state. - Bundled extension libraries are
library package, notstandard library package
(DiagramLayout,IdentityMetadata,MigrationMetadata,SysMLValidation); RDF export no longer
writessysml:isStandard truefor them, and the pilot's warning about them goes away. - Clients.
strictConformanceis the parse option andstrictits deprecated alias (passing both
with different values is refused); action and state execution return typed results instead of raw
dictionaries; a dead service isServiceUnavailableError; the MATLAB client's
opensysml.symbol(model, id)isopensysml.getSymbol(model, id); Julia'sstrict=trueraises
ModelErrorandstrict_conformance=truerequests strict conformance;OPENSYSML_SERVICEnames
an external service, otherwise a private one is started. - Names and places. The Go project is the OpenSysML REDK, the Cameo plugin OpenSysML MDK; the
documentation site is https://runtime.opensysml.org/ (the old URLs forward) and publishes from
develop; the standard SysML v2 API client is its own package; a program that only creates a
REPL session no longer links the translators, protobuf or the network stack (replext/all
restores them).
Execution, verification and analysis
- Actions. Values pass through forks, joins and merges; several succession flows may leave one
action, and a succession may lead to a succession flow; an action definition that specializes
another performs the inherited steps, successions, flows and statements, with redefinition,
multiplicities, gates and pin bindings honoured;assert constraints a succession orders are
checked when the flow reaches them;terminateinside a loop names its own loop;for <s> in stepsdeclares and traces its variable;first a if g then b;is aTransitionUsage. - State machines. Entry actions, transitions out of a named entry action, entry routes that
terminate the machine; a deferred signal in the standard buffer / accept-loop / exit-flush encoding
(the PSSM referee and the migrator share the lowering);fill.isActivereads whether a state usage
is active (StateActivitylibrary); change triggers observe every completed write; junctions
without an enabled route no longer consume events. The service, every client and the browser
engine return state-machine execution traces. - Verification. A constraint or requirement with
inparameters is verified with positional
argumentsornamed_arguments; statements in a constraint body run as steps of the check before
its conditions; a satisfaction is decided through the requirements it requires by reference;
-self-checkapplies theSysMLValidationlibrary and-self-check-packageany package's
constraint defs. - Exploration and the model checker reach every order of a body's unordered statements and the
interleavings inside concurrent bodies; executors due at one instant interleave move by move
underexplore,check,replayand seeded schedules; traces and witnesses name loop,ifand
other statement nodes by what they do;%check-*and-check-*set properties, divergence
features, inputs, assumptions, witnesses and bounds. - Compiled models.
sysml -compilecompiles Strings, enumerations, mixed numeric sequences,
run-time function values and closures, records and record-feature access, with step budgets;
calcs pass Integers, Rationals, Reals and Booleans in three words. The lowered graph of an action
or state machine is a public artifact (-graphs,%graphs,ExportGraphs). - Data.
-import/%importset feature values from CSV, TSV, JSON and JSON Lines
(-import-map,-import-as,-import-dry-run), with a data-import demo; table views export as
CSV and TSV;===over sequences is element-wise identity; a printed String reads back as itself. - A model piped or redirected into
sysmlis read byte for byte: a literal TAB no longer reaches the
line editor's completer (which panicked), and CRLF line endings parse as single lines.
Diagrams and documents
- Action views draw an action's parameters as pins and its bindings as edges; interconnection
diagrams show ports on their nodes and connect edges to them; case and mixed diagrams; a
GeneralViewdraws the requirement, definition and usage, and package graphs its filters select;
filteredGridViews render as relationship matrices; a tree rendering draws the relationships
between the elements it shows; recorded runs render as timelines and message sequences; rendered
elements link to their source (-render-link); D2 joins Mermaid, PlantUML and Graphviz as a
rendering form, and Mermaid output preserves far more detail. sysml model.sysml -list documents|views|diagrams|pseudo-views|allnames what a model declares;
machine-readable view rendering is exposed through gRPC (RenderView) and every client; the
in-browser engine renders declared views and targeted pseudo-views.- Diagram pictures refuse active SVG content and non-data URL schemes (security); diagrams pack a
container's unconnected children into rows and keep siblings in declaration order; moved nodes
route at right angles around the other boxes (libavoid is bundled in the VS Code diagram panel).
SysML v1 migration
-migratewrites activities the action executor performs: object flows as succession flows,
operation calls on the object the target pin holds, send object and send signal actions addressed
to their target, accept nodes asAcceptActionUsage, variables and variable actions, buffer nodes,
ReduceAction,RaiseExceptionAction,ReadSelfActionresults bound tothis, structural
feature reads and writes on the object they are given, parameter sets,xor/impliesexpression
trees,uml:Expressionelse guards, interaction uses, state invariants, and owned rules as
assertions.-portablemakes one self-contained file;-strictoutput loads in the pilot implementation,
referring to no OpenSysML library beyond the deferred-signal annotations; the service migrates with aMigrateRPC and every client
migrates (GoMigrateFile/MigrateSource, Pythonopensysml.migrate(), …).- A SysML v1 to v2 transformation census records what each construct becomes; the migration report
says where a run will stop on a construct the tool simulated; migrated comments resolve their
cross-references; a migrated parametric diagram of MagicDraw's Monte Carlo pattern draws again. - A migrated action usage a part definition owns writes the part's features when it is performed on
a part declared in another file, so the migration guide's%action Plant::fill plantwalkthrough
runs as shown.
Interchange and the model API
- Load API element-form JSON files directly; convert to a compact form of API JSON, or only some
documents of a model, over the service; each document of a model has its own root Namespace in
the element form. - The REPL and the Jupyter kernel read and write a SysML v2 API repository (
%load/%publishwith
the OMG pilot kernel's four commits model); the standard SysML v2 API client is its own package;
a bearer token is never paged on to another host. - RDF: relationships written as notation (
:,:>,:>>,::>,=>,~,conjugates, …) are
exported as the metamodel has them; connector ends and feature-chain targets are reflected;
include <ref>;is aReferenceSubsetting; a transition's guard is owned through a
TransitionFeatureMembership; the default[1..1]multiplicity follows the usage metaclass. - The spec-vs-pilot gap register records where the pinned pilot's own source departs from the
specification; the twoSImagnetic dipole moment units are typed by the quantity they measure.
Clients, editors and the browser
- Go, Python, Node/TypeScript, Java, Rust, Julia, MATLAB/Octave reach the service surface:
the Node client covers the whole service and connects tosysml-wasmwithout a service; the Rust
client reaches every RPC through a typed API and recovers from a dead private service; the Java
client gains the Python client's newer surface; Julia and MATLAB were expanded with model
inspection, analysis, document queries and chainable source edits. Task-oriented guides per client;
agent skills for every client and for modeling (packaging/agent-skills/). - Jupyter.
sysml-jupyter-kernel(pip install jupyter-opensysml-kernel) runs cells through the
REPL session and ships SysML highlighting for JupyterLab 4 and Notebook 7;%loadreads notebooks. - Browser.
sysml-wasmcombines the execution and validation JSON-RPC surfaces in one module,
published as@openmbee/opensysml-wasm; the CLI page of the documentation site runs the real
REPL in the browser with guided walkthroughs, and the landing page's state machine can be edited
and debugged there. - Editors. OpenSysML MDK runs inside MDK's DocGen documents;
sysml-lspanswers its first
request promptly on a multi-file workspace and names its real version;ParseSourcesnames the
documents an edit reached; a productionsysmlbuild without the optional features.
Packaging
- Linux amd64/arm64, macOS amd64/arm64 and Windows amd64 archives,
sysml-grpcbinaries with
.sha256sidecars,SHA256SUMS.txtwith its cosign bundle and SLSA provenance, the Python wheel
and sdist, the Jupyter kernel wheels, the combined WebAssembly module, and the npm, crates.io and
Maven packages are built by the release workflow from tagv0.10.0; the wheel, sdist, crate, npm
tarball and jar pin this release's service digests. Published:opensysml0.10.0 and
jupyter-opensysml-kernel0.10.0 on PyPI,@openmbee/opensysml0.10.0 on npm,opensysml0.10.0
on crates.io. The Java client is not on Maven Central for this release; install it from a
checkout of the tag as java-api.md
describes. - New:
curl -fsSL https://opensysml.org/install.sh | shand
irm https://opensysml.org/install.ps1 | iexinstall the matching release on any supported
platform (--tools/-Toolstakesysml,sysml-lsp,sysml-grpc,sysml-jupyter-kernelor
allin both scripts); the documentation site's Downloads page lists every artifact and package-manager route;
nightly snapshots of the Python and Node clients publish from the same commit as the binaries. - macOS binaries are not Developer ID signed or notarized;
macos-distribution.md
gives the workarounds. Windows binaries are unsigned; SmartScreen warns on first launch.
Verification
The pre-tag gate of docs/project/releasing.md on the release commit (Go 1.25, Linux amd64):
gofmt -l . empty, go build ./..., go vet ./..., golangci-lint and gosec clean, the full
race suite with the OMG training corpus, the three pilot corpora, the pilot library XMI and the PSSM
suite required and the RDF round-trip ratchet unmoved, the stdlib snapshot and conformance gates,
the extension-library pin check, the Python client's 1459 tests, buf breaking against the 0.9.2
schema with no breaking change, the documentation id, link and figure checks, mkdocs --strict
and python3 scripts/changelog.py check clean. The CircleCI release rehearsal on the release
commit passed end to end — the five race shards, binaries, Python and Jupyter distributions,
release artifacts, the GitHub release, digest pin, PyPI/npm/crates/Maven/Jupyter publish rehearsals
and the zero-config smoke — and the merged main passes the SonarCloud quality gate (new-code
coverage 80.9%, overall 86.3%, no open bug or vulnerability). 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.