Repository navigation
v0.10.1 - Resolution Repair Release
OpenSysML 0.10.1
0.10.1 is a patch release of the OpenSysML REDK, cut from main while 0.11.0 continues on develop. It carries the fixes merged to develop since 0.10.0 that keep every model 0.10.0 accepted behaving the same, plus work done on the release branch itself: a SonarCloud sweep (211 findings closed, no rule or exclusion changed), the performance fixes the release gate found, and corrections to the shipped examples and guide snippets. Full detail per change is in CHANGELOG.md § 0.10.1.
The wire is unchanged: buf breaking against the 0.10.0 api/proto reports nothing, and every client at 0.10.1 pins this release's service digests. Nothing 0.11-only is included — hidden conflicting imports, strict indistinguishable memberships, the migrator's root-model package and anonymous-association output, the rendering defaults — so a model, golden or migration output pinned to 0.10.0 reads the same, with the exceptions under Upgrading.
Upgrading
- An unset attribute or parameter reads as unset. A body read a name as the nearest frame that happened to bind that spelling; a performed action whose
inparameter nothing bound could read the performer's same-named attribute, and a typed usage's body could read the enclosing action's output through the callee's unset one. The frame holding the feature the name resolves to now decides the read: an unbound parameter is the empty sequence, an unset attributeno value for feature x. Models that relied on the fall-through now report the unbound value (result = 12on 0.10.0 becameoperator '+' is not defined for a sequence and an Integer); the homonym-free spelling of the same model behaved this way on 0.10.0 already. - A qualified id whose prefix the model declares twice resolves to nothing in the REPL's
%action/%stateand the gRPCExecuteAction,ExecuteState,ExportGraphsand session RPCs, instead of running whichever duplicate the lookup met first. A model type that shares a library type's name (part def Items) now shadows the library one in those ids, as the notation resolves it. - Diagnostics that moved.
-instantiateover aShapeItems::Box(anyCuboidOrTriangularPrism) no longer reports its open edge and vertex groups asbinding end cannot be resolved; reading such a group still answers with the typed diagnostic. A directedanalysisorverificationusage in a behavior body is that parameter only, no longer also a case step the action performs.
Execution, verification and analysis
- A body reads a name as the feature name resolution binds it to: a short name reads the value the performance holds, a body attribute shadows a same-named accept payload, a transition declared in a state definition reads the definition's attribute rather than its source state's or exhibiting part's, and a nested attribute declared with no value reads as missing.
- An inherited action or state machine is named by the subtype's qualified name (
%action BigPlant::fill pwithBigPlant :> Plant), in the REPL and through the gRPC symbol ids — including through a model type that shadows a library name. - The materialization check walks every object its budget admits, so the errors of objects that fit are reported and
boundedis set only for what is actually cut. - A redefining feature answers to the redefined feature's short name (
gear.tmsbinds the redefinition, not the hiddenADS::t).
Notation
- A keyword only the other language reserves is a name wherever a name stands:
step,expr,inv,class,feature,chains,type, … are ordinary names in a.sysmlfile and SysML's literals are names in a.kermlfile;assert constraint { step <= upperBound }parses. - A direction prefixes every usage kind a behavior body admits (
out concern c : C;,out requirement r : R;,out use case u : U;,out verification v[*] : V;). - A MultiplicityPart may follow the specializations a usage states (
:>> values ordered : Real;); a trailing comma in a sequence expression parses ((a, b,),s[1,]); a string literal or unrestricted name spanning lines lexes as one token, and an unclosed one is reported once.
SysML v1 migration and documents
- English constraint and guard bodies translate calls of mathematical functions by their bare names (
sin(t)→TrigFunctions::sin(t),sqrt,abs,min,max,floor,ceil,round,pow,exp,ln,log,atan2), refusing aComplexwhere aRealis due. - Diagrams: no
DiagramLayout::Layoutis written for an association or connector end's symbol; symbols Cameo lists under a part shape'spartsor a state shape'sregionsare placed inside their part; a migrated view qualifies the references its ownexposes would capture; layouts use private aliases when exposed names hide the positioned member, choosing a name no reference in the owner's body already resolves to. - Document queries keep a name's
\'/\nescapes, quote every path segment that is not a basic name (a tag namedSafety::Scopesorts), and name a deferred action through thebuffer/flushwrapper the deferral encoding writes; a document title, paragraph or query argument may span lines or escape a quote.
Clients, editors and packaging scripts
- SysON plugin: the members of SysON's unnamed root namespace are exported as the document's roots (every name in a project was unresolved before); "Run with OpenSysML…" opens its dialog from the explorer palette of SysON 2026.9.
- The Rust and Python clients report how a private service that served no address really ended (
exited with code 3,ended with signal 11) instead ofexited with code None; the client test suites accept a release that pins the Jupyter kernel binaries beside the service. install.sh --tools allandinstall.ps1 -Tools allinstall every tool the chosen release published, resolvingallagainst the release'sSHA256SUMS.txt.
Performance
docs/project/performance-release-0.10.1-vs-0.10.0.md measures the release against v0.10.0 under benchstat: parity everywhere except the executor loop rows, which cost +7–17% per step at unchanged allocations — the inherent cost of the frame feature-identity rule — after five regressions it exposed were fixed on the release branch (a resolver lookup per name read, the generalization re-walk, frames copied per probe, a per-member slice in the distinguishability check, a root frame index grown entry by entry). Analysis allocates 1–6% less than 0.10.0; whole-binary start-up and size are at parity.
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.1; the wheel, sdist, crate, npm tarball and jar pin this release's service digests. Published:opensysml0.10.1 andjupyter-opensysml-kernel0.10.1 on PyPI,@openmbee/opensysml0.10.1 on npm,opensysml0.10.1 on crates.io. The Java client is not on Maven Central for this release; install it from a checkout of the tag asjava-api.mddescribes. curl -fsSL https://opensysml.org/install.sh | shandirm https://opensysml.org/install.ps1 | iexinstall the matching release on any supported platform.- macOS binaries are not Developer ID signed or notarized;
macos-distribution.mdgives 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 ./..., make lint (golangci-lint, gosec) clean, the full suite with the OMG training corpus, the three pilot corpora, the pilot library XMI and the PSSM suite required, the transformation census and the stdlib snapshot unmoved, buf breaking against the 0.10.0 schema with no breaking change, and python3 scripts/changelog.py check clean. Every examples/ model, guide snippet and README command block was re-run on the release build, and the 152 examples/ models validate identically to the v0.10.0 binary. The CircleCI release rehearsal on the release commit passed end to end — the 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 79.1%, overall 86.3%, no open bug, vulnerability or hotspot). Every change in the range merged through the pull-request CI, the release branch's through the full pull-request CI against main.