OpenSysML 0.8.1
0.8.1 is a patch release on 0.8.0: the fixes that landed on develop in the days after the
engines release, and nothing that changes what a model means. Most of it is the SysML v1
migration read against real tool exports — the current TMT observatory model now migrates to
notation with no analysis errors, down from a hundred, and keeps the structure of its instance
trees — alongside the VS Code extension building and testing on Windows, a diagram that opens
with a keystroke, the smt engine honouring the timeout it was given, and a Mermaid rendering
that follows its declared direction inside every container. Every build of the three binaries is
now statically linked, not only the release job's.
Full detail per change is in CHANGELOG.md § 0.8.1.
No import path moves, no CLI flag, REPL command, RPC or wire field is added, removed or
renamed, and the clients keep their names, versions and contents. Every model 0.8.0 accepted
is accepted with the same diagnostics, with the one library-internal exception under Upgrading.
Upgrading
- A transition's
accepttrigger payload is a member of the transition. The parameter an
accept trigger declares (transition t first a accept p : Payload then b;) was catalogued in a
scope of its own with no owner and no qualified name, so the one such parameter in the standard
library was the last named library element whose normative id differed from the pilot's XMI.
It now lives in the transition's own scope beside the effect and body members:t::pnames it,
the guard, effect and body reach it as before, and any other reference to it reportsMust be an accessible feature, as the pilot does. - A Linux
sysml-grpcbuilt withmake buildormake installno longer needs glibc 2.34.
CGO_ENABLED=0moved from the release scripts into the Makefile, so every build is static; a
dynamically linked binary now fails the build (make static-check) instead of shipping. - Golden execution traces,
.expected.jsonfiles and-jsonreport shapes are unchanged.
The migration's output changes only where 0.8.0 wrote notation that did not analyse cleanly.
SysML v1 migration
- Opaque expressions written in v2 syntax are copied when — and only when — they resolve. A
body expression's own parameters and members ({ in v; v > limit }) are read as its own, so
only the names it reaches for beyond itself are checked for visibility, in nested bodies,
nested constraints and multiplicity bounds alike. A feature chain on a body-local name is checked
against the type the name is declared with ({ in v : Pt; v.missing }is left as a comment; an
untypedv.xtoo, since there is nothing to checkxagainst), and a qualified name rooted in a
standard-library package —ScalarValues::Integer,ISQ::mass— is checked against the bundled
library, which a v2 model reaches without importing it. A body declaring a member kind the check
does not read is left unmapped rather than copied unchecked. - The migration reads past the UML metaclass where the tool's own encoding hides the v2 form.
A Signal is anitem defand properties typed by one areitem/ref item; a constraint
block's parameters are publicin attributes (in ref parts when typed by a block) whether the
tool stores them as Properties or, as MagicDraw does under «ConstraintParameter», as Ports; a
private feature a connector, slot, redefinition or subset reaches from outside is written public
with a note naming what reached it, as is a private packaged element v2 would put out of reach of
the packages importing it. Types referenced by href into the SysML or UML primitive library
resolve from plain and dotted fragments and from MagicDraw'sreferentPath, and the tool
library'sfloat,double,int,long,short,byteandbooleanare written as the
matching scalar and reported as approximations. - Instances and slots are written as individuals. An instance of a block is an
individual part defand of a constraint block anindividual constraint def, typed by the block alone; a
slot of a part, item or constraint property redefines or subsets it under the individual, and a
slot that contradicts its feature — more values than the multiplicity allows, a repeated value of
a unique feature, an empty slot of a feature of multiplicity 1 or more, a feature of a classifier
the instance is not written to specialize — is left as a comment with that note rather than
written as a redefinition bound to the wrong thing or to nothing. An instance of a value type is
anattributetyped by it; a default naming an instance of a block types the usage by that
individual. - Typed-in numbers of any size are kept.
"9223372036854775808"for anIntegerand
"1e400"for aRealare written as those values instead of being left as comments for
exceeding a machine word or a double. A real literal on anIntegerfeature and a numeric string
on a scalar feature take the feature's scalar; a literal on a value type or enumeration with no
scalar base is not bound. - A nested connector end's
propertyPathgiven as one whitespace-separated attribute is split
into its ids; an undirected part or item property of an interface block is aref; a
specializing block's property named like an inherited one redefines it when both are the same
kind of usage and is reported when they are not.
VS Code
- The extension builds and tests on Windows.
tools/test.mjsderived itssrc/andout/
directories from a file URL'spathname, which on Windows carries a leading slash before the
drive letter, sonpm testandnpm run packagefailed withENOENT … scandir 'C:\C:\…\src'.
The paths now come fromfileURLToPath. - The diagram opens with a keystroke or a click.
SysML: Open Diagramis bound to
Alt+D (Option+D on macOS) and
Ctrl+Shift+V (Cmd+Shift+V),
active in a.sysmlor.kermleditor and in the diagram panel itself, where the same key
returns to the source. The command sits in the editor's title bar and right-click menu and in
the Explorer's menu for model files, which opens the file and its diagram side by side;
SysML: Export Diagramjoins it there. Without a server that can draw, the commands say so
instead of greying out. - A diagram drawn from an older
sysml-lspno longer labels a typed usageundefined. The
panel fills in what a server predating the nodetypefield omits — a node'stype,name
anddetail, an edge'slabel, absent lists — before drawing, so such a usage readsengine,
«part»,Engine, and an unnamed element leads with its kind alone.
Engines, rendering and libraries
-check-timeout(%check-bounds timeout=) is thesmtengine's solver clock as well as the
plan's. Each solver query runs under the check's timeout in place ofOPENSYSML_SMT_TIMEOUT,
so a check told it may run for2mis no longer left not covered by a query the solver's own
10 s default cut short; thesolverbound the result names is the clock the query ran under.- Every Mermaid flowchart
subgraphstates the flowchart'sdirection. An action rendering
declaredflowchart TDdrew its containers' contents left to right, and adirection BTor
RLwas lost inside every container; eachsubgraph, nested ones included, now opens on the
flow's direction. A tree draws containment as edges and is unchanged. - A library copy whose root package states only a short name is read as the library. A copy
opening withstandard library package <Occurrences> {fell through to user-document analysis
and its elements took derived ids; the notation-side check now uses the name the symbol table
registers the package under, as the graph-side check already did. - The landing page's four refereed-comparison cards lay out in one row of four on wide
screens, two rows of two below that width and a single column on phones, instead of three and
one.
Packaging
- Linux amd64/arm64, macOS amd64/arm64 and Windows amd64 archives,
sysml-grpcbinaries with
.sha256sidecars,SHA256SUMS.txtand its cosign bundle are built by the release workflow from
tagv0.8.1;opensysml-0.8.1-windows-amd64.msiinstallssysml,sysml-lspandsysml-grpc
onPATHwith Z3 as an optional feature.make static-checkverifies the Linux binaries are
statically linked, and the release and pull-request pipelines run it. - macOS binaries are not Developer ID signed or notarized, so a browser download trips Gatekeeper;
macos-distribution.md
gives the workarounds. Windows binaries are Authenticode signed through SignPath Foundation
only once the signing request for this tag is approved. - The Python client stays at
opensysml0.5.0 (tagopensysml-v0.5.0); this release adds no
wire field or RPC, so nothing on the client side changes. A client release is published
separately.
Verification
The pre-tag gate of docs/project/releasing.md on the release commit (Go 1.25.0, Linux amd64):
gofmt -l . empty, go build ./... and go vet ./... clean, make lint, go test -race -count=1 ./... all 82 packages ok with the OMG training corpus and the three pilot corpora
required (OPENSYSML_REQUIRE_TRAINING_CORPUS=1 OPENSYSML_REQUIRE_PILOT_CORPORA=1) and no
corpus expectation moved, the SMT suite run against Z3, the documentation id, link and figure
checks, python3 scripts/changelog.py check and go run ./cmd/doc-counts -check clean, and the
VS Code extension's build and 110 tests green. 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 SonarCloud's quality gate.