Skip to content

Bump OMG Pilot - #71

Merged
HuiJun merged 63 commits into
Open-MBEE:mainfrom
JPL-Devin:main
Aug 28, 2026
Merged

Bump OMG Pilot#71
HuiJun merged 63 commits into
Open-MBEE:mainfrom
JPL-Devin:main

Conversation

@HuiJun

@HuiJun HuiJun commented Aug 28, 2026

Copy link
Copy Markdown
Collaborator

What and why

Promotes the development repository to the public repository so v0.4.0 can be tagged here. 104
commits (40 merges) since v0.3.0; 344 files changed, +13,689 / −1,248. No public API of the CLI,
REPL, LSP or gRPC service is removed; the semantic change below is what makes the release a minor.

A write is now checked. assign answered to nothing: a Real attribute accepted a String, a
duration accepted a length, both statically and at run time. A write now conforms to the target
feature's declared type, multiplicity and — where the target is a quantity — its dimension, on every
path that stores a value, including an output a declaration binds and a decimal written to a
Rational. A model that relied on an unchecked write no longer validates.

Alongside it, the runtime stopped flattening structure it was given: a typed state usage materializes
the content of the definition typing it, a nested action node runs the flow it owns, an assignment
target may be a feature chain, and a performed action's features live on the performance occurrence
holding them. A behavior body resolves a name where the name is written rather than reaching into the
performer.

The pinned OMG pilot implementation moves to release 2026-07 (jupyter-sysml-kernel 0.61.0), with
the reference validators, vendored standard library, corpora, grammars, Xpect suites and every oracle
baseline re-recorded at that pin. Reviewers diffing baselines should expect churn there for that
reason alone.

Full user-facing detail: the 0.4.0 section of CHANGELOG.md in this diff.

Specification basis

  • KerML FeatureWritePerformance — the replacement values are values of the written feature, so the
    initial-value conformance rule applies to every write.
  • SysML v2 state usage typing (definition content is inherited per usage) and action node
    decomposition (a nested node's members are its subperformances).
  • StandardViewDefinitions::SequenceView rendering.
  • No row of docs/project/spec-compliance.md moved down; make docs-counts regenerated the counts
    that moved.

How it was verified

The pre-tag gate in docs/project/releasing.md, on the promoted commit:

  • gofmt -l . empty; go build ./...; go vet ./...; make lint
  • go test -race -count=1 ./...
  • go test -run TestStdlibConformance ./internal/core/libs
  • training corpus and pilot corpora gates with OPENSYSML_REQUIRE_TRAINING_CORPUS=1 and
    OPENSYSML_REQUIRE_PILOT_CORPORA=1
  • make docs-check, make docs-counts (no measured number moved)
  • python -m pytest python/tests/ — 619 passed, 39 skipped

Note for whoever re-runs the gate: cmd/pilot-diff and cmd/pilot-xpect fail their provenance and
census tests against pre-2026-07 local corpora, and both download scripts leave an existing
destination alone. Remove examples/pilot-corpora/ and build/pilot-xpect-corpus/ and re-run
scripts/download-pilot-corpora.sh and scripts/download-pilot-xpect.sh before judging a failure
there.

devin-ai-integration Bot and others added 30 commits August 28, 2026 01:09
…ython client

One model whose structure, calculations, action, state machine, solver cases
and views are the same rover, with a walkthrough of the commands that drive it.

Nested action nodes no longer report the token-flow limitation when a view
renders them: only that sentinel is suppressed, and only below the root.

Co-Authored-By: jason.han <jason.han@jpl.nasa.gov>
… the demo's output

Co-Authored-By: jason.han <jason.han@jpl.nasa.gov>
* docs(examples): add a rover demo covering the CLI, the REPL and the Python client

One model whose structure, calculations, action, state machine, solver cases
and views are the same rover, with a walkthrough of the commands that drive it.

Nested action nodes no longer report the token-flow limitation when a view
renders them: only that sentinel is suppressed, and only below the root.

Co-Authored-By: jason.han <jason.han@jpl.nasa.gov>

* docs(examples): state where the rover's odometer is readable and sort the demo's output

Co-Authored-By: jason.han <jason.han@jpl.nasa.gov>

---------

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: jason.han <jason.han@jpl.nasa.gov>
…us traps

Co-authored-by: jason.han <jason.han@jpl.nasa.gov>
Co-authored-by: devin-ai-integration[bot] <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: jason.han <jason.han@jpl.nasa.gov>
Co-Authored-By: jason.han <jason.han@jpl.nasa.gov>
Co-Authored-By: jason.han <jason.han@jpl.nasa.gov>
Co-Authored-By: jason.han <jason.han@jpl.nasa.gov>
Co-Authored-By: jason.han <jason.han@jpl.nasa.gov>
Co-Authored-By: jason.han <jason.han@jpl.nasa.gov>
Co-Authored-By: jason.han <jason.han@jpl.nasa.gov>
Co-Authored-By: jason.han <jason.han@jpl.nasa.gov>
Co-Authored-By: jason.han <jason.han@jpl.nasa.gov>
…ee-numfocus

* docs(site): note the Open-MBEE and NumFOCUS affiliation in the footer

Co-Authored-By: jason.han <jason.han@jpl.nasa.gov>

* docs(site): underline the footer affiliation links

Co-Authored-By: jason.han <jason.han@jpl.nasa.gov>

* docs(site): move the footer affiliation to the right of the licence

Co-Authored-By: jason.han <jason.han@jpl.nasa.gov>

* fix(site): point the OpenMBEE links at the www host that serves HTTPS

Co-Authored-By: jason.han <jason.han@jpl.nasa.gov>

* docs(site): align the footer affiliation with the "Made with" line

Co-Authored-By: jason.han <jason.han@jpl.nasa.gov>

---------

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: jason.han <jason.han@jpl.nasa.gov>
…eature-values

* fix(runtime): propagate state attributes to exhibited occurrences

Co-Authored-By: jason.han <jason.han@jpl.nasa.gov>

* fix(runtime): remove unused occurrence lookup value

Co-Authored-By: jason.han <jason.han@jpl.nasa.gov>

* fix(runtime): normalize occurrence-backed state data

Co-Authored-By: jason.han <jason.han@jpl.nasa.gov>

---------

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: jason.han <jason.han@jpl.nasa.gov>
Co-authored-by: jason.han <jason.han@jpl.nasa.gov>
Co-Authored-By: jason.han <jason.han@jpl.nasa.gov>
* docs(skills): harden recorded REPL contrast testing

Co-authored-by: jason.han <jason.han@jpl.nasa.gov>

* docs(skills): preserve contrast binary after cleanup

Co-Authored-By: jason.han <jason.han@jpl.nasa.gov>

---------

Co-authored-by: devin-ai-integration[bot] <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: jason.han <jason.han@jpl.nasa.gov>
A performed action's declared attributes and out parameters are features of
the action performance the perform usage holds, so they are initialized from
that occurrence's slots and written through it.

Co-Authored-By: jason.han <jason.han@jpl.nasa.gov>
Co-Authored-By: jason.han <jason.han@jpl.nasa.gov>
…mance-occurrence

* fix(runtime): write performed action features to their occurrence

A performed action's declared attributes and out parameters are features of
the action performance the perform usage holds, so they are initialized from
that occurrence's slots and written through it.

Co-Authored-By: jason.han <jason.han@jpl.nasa.gov>

* docs: name the shared performanceOccurrence helper in the state row

Co-Authored-By: jason.han <jason.han@jpl.nasa.gov>

---------

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: jason.han <jason.han@jpl.nasa.gov>
An assignment target may be a feature chain: lowering carries the whole walk in Assign.Chain and the runtime writes the feature on the object the chain reaches, resolved in the statement's own scope.

Co-Authored-By: jason.han <jason.han@jpl.nasa.gov>
collectAssignedOutputs counted a chained target's last segment as the calc computing its own output of that name.

Co-Authored-By: jason.han <jason.han@jpl.nasa.gov>
…e-chain

* feat(runtime): write through a chained assignment target

An assignment target may be a feature chain: lowering carries the whole walk in Assign.Chain and the runtime writes the feature on the object the chain reaches, resolved in the statement's own scope.

Co-Authored-By: jason.han <jason.han@jpl.nasa.gov>

* fix(runtime): a chained assignment binds no output of a calc

collectAssignedOutputs counted a chained target's last segment as the calc computing its own output of that name.

Co-Authored-By: jason.han <jason.han@jpl.nasa.gov>

---------

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: jason.han <jason.han@jpl.nasa.gov>
…ing it

A typed state usage materializes its definition's substates, initial
transition, entry/do/exit behaviors, transitions, deferred events and
attributes, per usage rather than shared, including in parallel bodies.
Recursive typing and content lowering cannot represent are typed errors.

Co-Authored-By: jason.han <jason.han@jpl.nasa.gov>
Co-Authored-By: jason.han <jason.han@jpl.nasa.gov>
Co-Authored-By: jason.han <jason.han@jpl.nasa.gov>
Co-Authored-By: jason.han <jason.han@jpl.nasa.gov>
Co-Authored-By: jason.han <jason.han@jpl.nasa.gov>
…iplicity

An `assign` wrote any value into any feature: a Real attribute accepted a
String, statically and at run time. KerML's FeatureWritePerformance "assigns
the values of a feature on an occurrence to the given replacementValues", so
those values are values of that feature and answer to its declared type and
multiplicity — the rule already applied to an initial value.

The type pass now walks every body an `assign` may stand in and checks the
written value with the initial-value rule, resolved against the target's
declaration. The run time checks the same, before storing, in every write
path: Instance.SetFeatureValue, the statement hosts' assignData/assignOuter,
body-locals, calc outputs, performer features and performance occurrences.
A rejected write leaves the feature as it was.

Co-Authored-By: jason.han <jason.han@jpl.nasa.gov>
devin-ai-integration Bot and others added 28 commits August 28, 2026 13:16
…ectors

A send in a deeply nested flow saw only the action's own connectors and those of the flow it sits in, so a connector declared by an intermediate flow could not route it. Each activation now carries the connectors of every flow around it.

Co-Authored-By: jason.han <jason.han@jpl.nasa.gov>
…e change

Co-Authored-By: jason.han <jason.han@jpl.nasa.gov>
Co-Authored-By: jason.han <jason.han@jpl.nasa.gov>
…-flow

* feat(runtime): run the flow a nested action node owns

A nested action node's own members are its subperformances, so lowering now
carries them as a subgraph and the executor performs that flow before the
node completes. An action usage stating no body of its own resolves to the
action definition typing it, so %action on a perform usage runs.

Co-Authored-By: jason.han <jason.han@jpl.nasa.gov>

* fix(runtime): route a nested send through every enclosing flow's connectors

A send in a deeply nested flow saw only the action's own connectors and those of the flow it sits in, so a connector declared by an intermediate flow could not route it. Each activation now carries the connectors of every flow around it.

Co-Authored-By: jason.han <jason.han@jpl.nasa.gov>

* docs: refresh derived counts after rebasing onto the state-inheritance change

Co-Authored-By: jason.han <jason.han@jpl.nasa.gov>

---------

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: jason.han <jason.han@jpl.nasa.gov>
Co-authored-by: jason.han <jason.han@jpl.nasa.gov>
Co-Authored-By: jason.han <jason.han@jpl.nasa.gov>
…conformance

* feat(runtime): a write conforms to its target feature's type and multiplicity

An `assign` wrote any value into any feature: a Real attribute accepted a
String, statically and at run time. KerML's FeatureWritePerformance "assigns
the values of a feature on an occurrence to the given replacementValues", so
those values are values of that feature and answer to its declared type and
multiplicity — the rule already applied to an initial value.

The type pass now walks every body an `assign` may stand in and checks the
written value with the initial-value rule, resolved against the target's
declaration. The run time checks the same, before storing, in every write
path: Instance.SetFeatureValue, the statement hosts' assignData/assignOuter,
body-locals, calc outputs, performer features and performance occurrences.
A rejected write leaves the feature as it was.

Co-Authored-By: jason.han <jason.han@jpl.nasa.gov>

* fix(runtime): a written decimal conforms to Rational, as the type tier reads one

Devin Review caught the two tiers disagreeing: the type tier reads a decimal
literal as Rational, the run time classified a real value as Real, so a
decimal written to a Rational feature validated clean and then failed at run
time. The run time now reads a real value the same way.

The two multiplicity fixtures routed their value through an untyped attribute,
whose implicit [1] made the read fail before the write was checked; they now
declare the bound they need and expect the write-side message word for word.

Co-Authored-By: jason.han <jason.han@jpl.nasa.gov>

* feat(runtime): an output a declaration binds conforms to its type too

A calc output given its value by its declaration reached no write check: the
value is bound rather than assigned, so a body-less `out a : Integer = n`
answered with whatever an untyped input carried. The binding now answers to the
output's declared type and multiplicity through the same helper an assignment
uses, so the rule holds however an output is given its value.

Co-Authored-By: jason.han <jason.han@jpl.nasa.gov>

---------

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: jason.han <jason.han@jpl.nasa.gov>
* Update testing-sysml-repl skill with the stale gRPC service trap

Co-authored-by: jason.han <jason.han@jpl.nasa.gov>

* docs: correct the pgrep -af rationale in the sysml-repl skill

Co-Authored-By: jason.han <jason.han@jpl.nasa.gov>

---------

Co-authored-by: devin-ai-integration[bot] <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: jason.han <jason.han@jpl.nasa.gov>
…s log

The sampling branch is now one node with a flow of its own, and recordPass writes the log part through a feature chain, so the demo exercises both behaviors and the walkthrough matches what the tools print.

Co-Authored-By: jason.han <jason.han@jpl.nasa.gov>
Co-Authored-By: jason.han <jason.han@jpl.nasa.gov>
Co-Authored-By: jason.han <jason.han@jpl.nasa.gov>
… in the performer

A behavior body reached any like-named feature of the object performing it, which name resolution does not admit: the runtime now writes and reads a performer feature only where the name resolves to it, and 'this' inside an owned performance denotes the owning object.

Co-Authored-By: jason.han <jason.han@jpl.nasa.gov>
…nsolidation

* docs(examples): show the rover's nested sampling flow and chained pass log

The sampling branch is now one node with a flow of its own, and recordPass writes the log part through a feature chain, so the demo exercises both behaviors and the walkthrough matches what the tools print.

Co-Authored-By: jason.han <jason.han@jpl.nasa.gov>

* docs(examples): note the controller's pass log in the package tour

Co-Authored-By: jason.han <jason.han@jpl.nasa.gov>

* docs(examples): quote the whole token listing at the sampling breakpoint

Co-Authored-By: jason.han <jason.han@jpl.nasa.gov>

---------

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: jason.han <jason.han@jpl.nasa.gov>
…-name-scope

A behavior body reached any like-named feature of the object performing it, which name resolution does not admit: the runtime now writes and reads a performer feature only where the name resolves to it, and 'this' inside an owned performance denotes the owning object.

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: jason.han <jason.han@jpl.nasa.gov>
… runs

Co-Authored-By: jason.han <jason.han@jpl.nasa.gov>
…ts target declares

A feature declared with a quantity value type now refuses a quantity measured in another dimension, statically where the value's dimension is determined and at run time on every write path.

Co-Authored-By: jason.han <jason.han@jpl.nasa.gov>
…reams-output

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: jason.han <jason.han@jpl.nasa.gov>
…-write-conformance

A feature declared with a quantity value type now refuses a quantity measured in another dimension, statically where the value's dimension is determined and at run time on every write path.

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: jason.han <jason.han@jpl.nasa.gov>
…ratum

Co-Authored-By: jason.han <jason.han@jpl.nasa.gov>
Co-Authored-By: jason.han <jason.han@jpl.nasa.gov>
Co-Authored-By: jason.han <jason.han@jpl.nasa.gov>
* docs(site): label the header's wiki link Wiki rather than Forum

Co-Authored-By: jason.han <jason.han@jpl.nasa.gov>

* docs(site): call the header's wiki link Community Wiki

Co-Authored-By: jason.han <jason.han@jpl.nasa.gov>

---------

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: jason.han <jason.han@jpl.nasa.gov>
…erratum

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: jason.han <jason.han@jpl.nasa.gov>
The end-to-end example is now a fictional ground robot: same coverage of structure, calculations, fork/join, nested flows, a hierarchical state machine, the solver commands, the views and the Python client, without space framing.

Co-Authored-By: jason.han <jason.han@jpl.nasa.gov>
…t-demo

The end-to-end example is now a fictional ground robot: same coverage of structure, calculations, fork/join, nested flows, a hierarchical state machine, the solver commands, the views and the Python client, without space framing.

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: jason.han <jason.han@jpl.nasa.gov>
Everything merged since v0.3.0 that a reader of the changelog would look for: the write-conformance rules, the state-usage and nested-flow execution work, the fixes, and the note that the Python client publishes nothing with this release.

Co-Authored-By: jason.han <jason.han@jpl.nasa.gov>
Everything merged since v0.3.0 that a reader of the changelog would look for: the write-conformance rules, the state-usage and nested-flow execution work, the fixes, and the note that the Python client publishes nothing with this release.

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: jason.han <jason.han@jpl.nasa.gov>
@HuiJun HuiJun changed the title Action work Bump OMG Pilot Aug 28, 2026
@HuiJun
HuiJun merged commit d049f70 into Open-MBEE:main Aug 28, 2026
12 checks passed
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