Skip to content

chore(release): 0.9.1 - #614

Open
devin-ai-integration[bot] wants to merge 593 commits into
mainfrom
release/0.9.1
Open

devin-ai-integration[bot] wants to merge 593 commits into
mainfrom
release/0.9.1

Conversation

@devin-ai-integration

@devin-ai-integration devin-ai-integration Bot commented Sep 26, 2026 •

Copy link
Copy Markdown
Contributor

What and why

Release branch for 0.9.1, cut from develop per docs/project/releasing.md § The release branch. It carries everything merged into develop since 0.9.0 (as of 614373cb2, which includes #582, #606, #616, #617, #618, #619, #620, #622, #624, #625, #626) plus the open PRs the maintainer asked to include, merged from their branches:

Left out: #483 (SysON) and #583 (wasm). #635 is deferred until its author rebases it onto develop after #629 lands; it will then come in through a develop merge.

Bookkeeping commits:

  • c7b18504, c07d41cf, 70072f1b, d295dc4a0 fold all fragments under changes/unreleased/ into ## 0.9.1 — 2026-09-26 (the last one by hand, verbatim, incl. a new ### Security section for ci(release): attest SLSA provenance over the release manifest's artifacts #606's release provenance). Only README.md remains under changes/unreleased/.
  • f3fdf451 sets VERSION = "0.9.1" in client/python/opensysml/_version.py, which the release workflow checks against the tag.

Merge resolutions, all through repository tooling: client/rust/conformance/sysml.descriptor.binpb regenerated with make proto-rust; internal/workspace/libs/stdlib.snapshot regenerated with make stdlib-snapshot after #632/#623/#621 (disjoint additions to MigrationMetadata.sysml both kept); docs/project/pilot-differential-baseline.json regenerated by the pilot differential harness after #634; annotations.go keeps both #621's and develop's via/recorded annotation handling through a shared indexAbout helper. 87e1a313d and 50b6c754c update expectations that changed because of how the merged PRs interact (e.g. #629 writes an owner-context activity as an action usage action issue, so #632's REPL step drives Console::issue rather than Console::Issue).

Versioning note: per-file-documents (a root-level import in one command-line file no longer serves the others; two files declaring the same root package are no longer diagnosed), #617 (three forms the grammar forbids are now refused) and the migrate fixes (output that was not valid SysML v2 now is) change what 0.9.0 produced or accepted. The maintainer classified all of these as corrections of wrong results toward what the spec and the pinned pilot derive and kept 0.9.1. No flag, command, RPC or wire field is removed or renamed; proto-breaking against main passes.

After merge: tag main as v0.9.1, then merge main back into develop (which also lands the included open PRs, so they can be closed).

How it was verified

On the branch head: gofmt -l . empty, go build ./..., go vet ./..., python3 scripts/changelog.py check, python3 scripts/check-doc-links.py, make docs-check, make proto-breaking BUF_BREAKING_REF=origin/main (no breaking changes), go test -count=1 ./..., make conformance (137 passed, 0 failed, 1 skipped), and OPENSYSML_REQUIRE_TRAINING_CORPUS=1 OPENSYSML_REQUIRE_PILOT_CORPORA=1 go test -count=1 ./tests/corpus.

Checklist

  • make test and make lint pass locally
  • Tests added or updated for the change (none: release bookkeeping)
  • Documentation extended where it already covers the surface (see CONTRIBUTING.md)
  • Changelog entry added as changes/unreleased/<slug>.<section>.md, not as an edit to CHANGELOG.md (a release folds the fragments into CHANGELOG.md by design)
  • baselines regenerated and make docs-counts run if a gate count moved (compliance rows need nothing: the census is counted at docs build)
  • No internal work-item labels (waves, slices, F4, K5) in the body, docs, or changelog

Link to Devin session: https://nasa-jpl-demo.devinenterprise.com/sessions/e0c5a204e0984415814ed38767578b41
Open in Devin Desktop: https://nasa-jpl-demo.devinenterprise.com/desktop/session/e0c5a204e0984415814ed38767578b41?variant=devin
Requested by: @HuiJun

devin-ai-integration Bot and others added 30 commits September 25, 2026 20:03
Co-Authored-By: jason.han <hanhuijun@gmail.com>
…ion-calc

Co-Authored-By: jason.han <hanhuijun@gmail.com>
… feature/tool-sequence-outputs

Co-Authored-By: jason.han <hanhuijun@gmail.com>

# Conflicts:
#	internal/exec/analysis/reply.go
#	internal/exec/analysis/testdata/toolreply/main.go
Co-Authored-By: jason.han <hanhuijun@gmail.com>
Co-Authored-By: jason.han <hanhuijun@gmail.com>
…o feature/tool-dry-run-and-demo

Co-Authored-By: jason.han <hanhuijun@gmail.com>
…unused output filter

Co-Authored-By: jason.han <hanhuijun@gmail.com>
Co-Authored-By: jason.han <hanhuijun@gmail.com>
Co-Authored-By: jason.han <hanhuijun@gmail.com>
Co-Authored-By: jason.han <hanhuijun@gmail.com>
Co-Authored-By: jason.han <hanhuijun@gmail.com>
…d rows however flagged

A picture drawn after one that lies over the element symbols, and covered by no later element symbol, now lies over them too, so the later picture stays over the earlier one it overlaps; one a later element symbol covers is drawn under and the note counts the pictures it lay over beside the element symbols. A symbol whose bounds have no area is not written, with the reason in the report. A compartment row marked not visible before its elementID is hidden as one marked after it is.

Co-Authored-By: jason.han <hanhuijun@gmail.com>
Co-Authored-By: jason.han <hanhuijun@gmail.com>
… does

Co-Authored-By: jason.han <hanhuijun@gmail.com>
…d features

The descendant walk ran over every exposed element, so an exposed package
or other non-node element suppressed an exposed feature its subtree holds,
and the feature vanished from the rendering. Only the elements that enter
featureNode now feed the suppression walk.

Co-Authored-By: jason.han <hanhuijun@gmail.com>
Co-Authored-By: jason.han <hanhuijun@gmail.com>
…-stress-model

Co-Authored-By: jason.han <hanhuijun@gmail.com>

# Conflicts:
#	mkdocs.yml
#	tests/stressmodel/satnet.go
#	tests/stressmodel/satnet_test.go
…raph is malformed

A malformed collaborator application over the view's documentation comment
is refused and reported as before, but no longer suppresses the paragraph
the section opens with; only a well-formed collaborator paragraph showing
that comment does.

Co-Authored-By: jason.han <hanhuijun@gmail.com>
… note unread images per symbol

A compartment row the stream hides stays off the migrated view even when the
diagram's element list names it and its owner is drawn. A DiagramLayout::Picture
whose location is a URL is a diagram-layout-value error rather than a file name
handed to Graphviz. An unreadable pasted image is noted on its own symbol, so two
unnamed symbols no longer share one note.

Co-Authored-By: jason.han <hanhuijun@gmail.com>
…rse-runtime

Co-Authored-By: jason.han <hanhuijun@gmail.com>
…an exploring schedule

Co-Authored-By: jason.han <hanhuijun@gmail.com>
… properties

Co-Authored-By: jason.han <hanhuijun@gmail.com>
Co-Authored-By: jason.han <hanhuijun@gmail.com>
…nt's own id

The paragraph a section opens with stands for the view's documentation
comment itself, so its report row keeps the comment's id rather than the
id of a DocGen collaborator application over that comment; a malformed
application is now reported only as refused.

Co-Authored-By: jason.han <hanhuijun@gmail.com>
* feat(client): add thin Julia and MATLAB/Octave clients for sysml-grpc

Both are JSON-over-HTTP clients of the Connect-JSON surface — no protobuf,
no generated code, no binary download — at parity with each other:

- client/julia/OpenSysML: a Pkg package (Julia >= 1.10, HTTP.jl + JSON.jl)
  with connect/external/private, parse*/symbol/evaluate/instantiate/
  execute_action/execute_state/query over a model hash, decode_value for
  all 19 arms, and ConnectError/TransportError/DiagnosticError.
- client/matlab: +opensysml for MATLAB R2019b+ and GNU Octave 7+, with the
  same surface; MATLAB uses matlab.net.http, Octave a curl subprocess, and
  private() needs Java (Octave without it uses external()).
- Each ships a conformance runner that drives every scenario through the
  public call/callRaw (callRaw sends the scenario's request text verbatim)
  and writes the shared report format. Both runners port the Rust
  comparison rules, including an is_default_expectation step the wire
  needs because proto3-JSON omits default-valued fields the Rust runner's
  reserialized answer carries.
- make conformance-julia / conformance-matlab, julia-client and
  matlab-client jobs in pr.yml (mirrored in .circleci), area filters in
  ci-changed-areas, julia-api.md/matlab-api.md reference pages, and
  clients/wire-contract/roadmap/guide/README updates.

Co-Authored-By: jason.han <hanhuijun@gmail.com>

* docs(client): correct Julia/Octave wording and trim comment blocks

Co-Authored-By: jason.han <hanhuijun@gmail.com>

* fix(client): harden Julia and MATLAB clients from review

Co-Authored-By: jason.han <hanhuijun@gmail.com>

* fix(client): bound private-service startup and quote curl paths

Co-Authored-By: jason.han <hanhuijun@gmail.com>

* fix(client): bound child cleanup and accept spaced temp paths

Co-Authored-By: jason.han <hanhuijun@gmail.com>

* fix(client): bound the MATLAB address read by deadline and length

Co-Authored-By: jason.han <hanhuijun@gmail.com>

---------

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: jason.han <hanhuijun@gmail.com>
Co-Authored-By: jason.han <hanhuijun@gmail.com>
A Clock's currentTime answered by clockMember never reached the sharing trace, so a
default or check reading it could be recorded against the shape and taken by another
occurrence after the clock advanced. The instant is the run's: reading it makes every
open derivation the occurrence's own.

Co-Authored-By: jason.han <hanhuijun@gmail.com>
…n the current tree

Co-Authored-By: jason.han <hanhuijun@gmail.com>
An overlay picture written after every node is painted over the connections
too, since Graphviz emits each edge right after its tail node; the test renders
a view whose overlay crosses a connection through dot and checks the SVG order
in both drawing styles.

Co-Authored-By: jason.han <hanhuijun@gmail.com>
…rse-runtime

Co-Authored-By: jason.han <hanhuijun@gmail.com>

# Conflicts:
#	docs/internals/performance.md
#	docs/project/satellite-network-stress-test.md
devin-ai-integration Bot and others added 30 commits September 27, 2026 03:37
Co-Authored-By: jason.han <hanhuijun@gmail.com>
…records

Co-Authored-By: jason.han <hanhuijun@gmail.com>

# Conflicts:
#	internal/workspace/libs/stdlib.snapshot
…tate's transition

Only a transition out of the deferring state itself, under no guard, takes the
signal from the deferral outright; one out of a substate wins only while that
substate is active, so the state keeps the signal the rest of the time. A
deferral dropped for a completion transition is kept as a comment in the
state's body.

Co-Authored-By: jason.han <hanhuijun@gmail.com>
Regenerate the bundled library snapshot over the merged stdlib sources.

Co-Authored-By: jason.han <hanhuijun@gmail.com>
…ty table

Co-Authored-By: jason.han <hanhuijun@gmail.com>
…definition change

The self-model edit moved the examples/ input digest, and the new
nonstandard-semantics warnings account for every added openSysMLOnly
finding; no other movement.

Co-Authored-By: jason.han <hanhuijun@gmail.com>
… time

With several deferred signals in one state the flush keeps arrival order within
each signal but not between signals; UML leaves the event pool's order open, so
the report note and the reference say this is a permitted approximation.

Co-Authored-By: jason.han <hanhuijun@gmail.com>
…tion

Re-recording the baseline moved the headline counts (344 fully
agreeing, 46 only ours); regenerate the gated doc-count lines and
update the quoted figures and the adjudication record to match.

Co-Authored-By: jason.han <hanhuijun@gmail.com>
…s action usages

A v1 activity a block owns whose body reads the block's features (an
attribute, a port a signal arrives at, an operation of a part, a
«Probability» property) is written as an action usage of the part def
carrying the body, since a definition nested in a type reaches none of
its features; every site naming it (calls, receptions, interactions,
simulation configurations, Monte Carlo analyses, reports) names the
usage. An «Allocate» whose ends no allocate can relate — a definition and
a usage, or a node of an action def or of a call-run action usage — is a
plain dependency with the reason.

Co-Authored-By: jason.han <hanhuijun@gmail.com>
…he package

The corpora differential ran as a sequential top-level test with its four
roots one after another, adding its whole duration to the package's wall
time under -race; the roots are independent, so they now run alongside the
package's other parallel tests.

Co-Authored-By: jason.han <hanhuijun@gmail.com>
An activity written as its block's action usage is no definition: an
«Allocate» ending on it is a plain dependency rather than an allocation def
typed by it, a nested member of it is reached as a member of the usage, and a
stereotype tag naming it casts it to SysML::ActionUsage — a form the checker
now admits, since `x meta T` reads the element x names, not its value. A call
of such a behavior whose target pin no flow feeds is an empty step, no longer
performed on the caller's sole part of the behavior's block.

Co-Authored-By: jason.han <hanhuijun@gmail.com>
…e by its definition generals

An operation whose method a caller names directly is called by that caller:
one that reaches no object of the block keeps the operation an action def.
An action usage's generals written as definitions type it (`: Base`) and
those written as usages are subsetted (`:> active`), each with its own
relationship rather than one separator for the whole list.

Co-Authored-By: jason.han <hanhuijun@gmail.com>
Order the chains reaching one feature most-specific first — the tails
carried down, then each type before its member sources — and let the
first win rather than the last. Carry an object's pending tails through
a held image so a member materialized after the restore is redefined
all the same. When a classifier is added to an object, apply its nested
redefinitions to the children already materialized, refining their
feature values as the classifier's direct features do.

Co-Authored-By: jason.han <hanhuijun@gmail.com>
Co-Authored-By: jason.han <hanhuijun@gmail.com>
…d's own redefinition

A redefined member shares one feature value under every name it reads
as, so a chain's first segment matches any name of the value being
materialized, not only the name read. And a child's own redefinition
wins over a chain a classifier applies to it, the same precedence the
materialize path gives it.

Co-Authored-By: jason.han <hanhuijun@gmail.com>
The job already reaches 46 minutes on develop on a slow runner, and the
interface-record corpus differential adds a few more.

Co-Authored-By: jason.han <hanhuijun@gmail.com>
Co-Authored-By: jason.han <hanhuijun@gmail.com>

# Conflicts:
#	changes/unreleased/authoring-transitions.added.md
…into release/0.9.1

Co-Authored-By: jason.han <hanhuijun@gmail.com>

# Conflicts:
#	internal/workspace/libs/stdlib.snapshot
#	internal/workspace/libs/stdlib/OpenSysML Libraries/MigrationMetadata.sysml
… into release/0.9.1

Co-Authored-By: jason.han <hanhuijun@gmail.com>
…release/0.9.1

Co-Authored-By: jason.han <hanhuijun@gmail.com>

# Conflicts:
#	internal/semantic/semantics/annotations.go
#	internal/workspace/libs/stdlib.snapshot
…o release/0.9.1

Co-Authored-By: jason.han <hanhuijun@gmail.com>

# Conflicts:
#	docs/project/pilot-differential-baseline.json
Co-Authored-By: jason.han <hanhuijun@gmail.com>
Co-Authored-By: jason.han <hanhuijun@gmail.com>
…ge name

#629 writes an owner-context activity as an action usage (action issue)
rather than a definition (action def Issue); #632's REPL step still named
the definition, so the Cmd was never sent.

Co-Authored-By: jason.han <hanhuijun@gmail.com>
Co-Authored-By: jason.han <hanhuijun@gmail.com>

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant