Repository navigation
chore(release): 0.10.0 - #1007
Merged
Merged
Conversation
…re reading its path as an object Co-Authored-By: jason.han <hanhuijun@gmail.com>
* feat(view): add case and mixed rendering kinds Co-Authored-By: jason.han <hanhuijun@gmail.com> * fix(view): preserve legacy rendering behavior Co-Authored-By: jason.han <hanhuijun@gmail.com> * test(view): make case fixture validate Co-Authored-By: jason.han <hanhuijun@gmail.com> * fix(view): nest mixed containers in PlantUML Co-Authored-By: jason.han <hanhuijun@gmail.com> * fix(view): keep inherited roles and containment in case and mixed views Co-Authored-By: jason.han <hanhuijun@gmail.com> * fix(view): skip library-inherited case roles Co-Authored-By: jason.han <hanhuijun@gmail.com> * fix(view): keep nested mixed content Co-Authored-By: jason.han <hanhuijun@gmail.com> * fix(view): build mixed structures in one pass Co-Authored-By: jason.han <hanhuijun@gmail.com> * docs: note OpenSysMLRenderings dependency for other tools Co-Authored-By: jason.han <hanhuijun@gmail.com> * fix(view): skip structure inside behavior when discovering mixed members Co-Authored-By: jason.han <hanhuijun@gmail.com> * feat(view): link case and mixed diagram elements to source Co-Authored-By: jason.han <hanhuijun@gmail.com> * fix(view): make mixed circles and objective notes clickable in PlantUML Co-Authored-By: jason.han <hanhuijun@gmail.com> * fix(view): keep paragraph breaks in linked PlantUML objective notes Co-Authored-By: jason.han <hanhuijun@gmail.com> * fix(view): keep linked PlantUML objective titles bold Co-Authored-By: jason.han <hanhuijun@gmail.com> * fix(view): expose ports in mixed diagrams Co-Authored-By: jason.han <hanhuijun@gmail.com> * docs(view): describe mixed port text rendering Co-Authored-By: jason.han <hanhuijun@gmail.com> * fix(view): keep action parameter pins in minimal mixed views Co-Authored-By: jason.han <hanhuijun@gmail.com> * fix(view): end mixed PlantUML connectors at their ports Co-Authored-By: jason.han <hanhuijun@gmail.com> * fix(view): link every inherited role occurrence in mixed views Co-Authored-By: jason.han <hanhuijun@gmail.com> * fix(view): keep inherited role edges within their case in mixed views Co-Authored-By: jason.han <hanhuijun@gmail.com> * test(wasm): check sysml-engine dependencies and bound its size growth Co-Authored-By: jason.han <hanhuijun@gmail.com> * test(wasm): allow the engine's queryexec trace dependency Co-Authored-By: jason.han <hanhuijun@gmail.com> * docs: restore the grammar reference link in the README Co-Authored-By: jason.han <hanhuijun@gmail.com> * docs: count OpenSysMLRenderings among the supplied pilot libraries Co-Authored-By: jason.han <hanhuijun@gmail.com> * test(grpc): cover case and mixed views in RenderView 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> # Conflicts: # internal/workspace/libs/stdlib.snapshot
* feat(migrate): run operation calls on their target pin's object and migrate send object actions A CallOperationAction whose target pin a flow feeds with an object not read from this declares the pin as a parameter typed by the class owning the operation and binds the operation's context to it, so the call runs on the object the pin holds; a target created by an unmigrated CreateObjectAction leaves the pin empty and the ledger says so. SendObjectAction is written as send request to target. StartObjectBehaviorAction and StartClassifierBehaviorAction stay placeholders keeping their pins. The census records the call operation and send object mappings as faithful and the two start mappings as deliberate. Co-Authored-By: jason.han <hanhuijun@gmail.com> * fix(migrate): gate guarded object flows into call targets and send object pins Co-Authored-By: jason.han <hanhuijun@gmail.com> * chore(census): regenerate the census and the PSSM expectation over the signal actions Co-Authored-By: jason.han <hanhuijun@gmail.com> * test(migrate): bind a send object action's self-fed target pin to the sender 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>
…orts * perf(symbols): a name registered again as it was is no change Replacing a document drops every re-export its wildcard imports surfaced and the next expansion makes them again, each reported by TakeChanges as a changed name. They name the same symbols, surfaced the same way, yet the resolver dropped every frame that looked such a name up by its last segment, the standard library's included, and every document depending on one. The index now notes a name's registration (symbols by identity, re-export and hidden marks, claims and routes) before its first write in a period, and TakeChanges leaves out a name whose registration is the same again. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(symbols): keep the symbols a noted registration names A registration was noted as text holding each symbol's address, which kept no symbol alive: one deregistered and collected could have its address reused by a new symbol, which then compared equal and hid a changed name. The note now holds the symbols themselves, with copies of their claims and routes, and is compared field by field. It also no longer formats text, which keeps the WebAssembly engine inside its size budget. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…etting The IncludeUseCaseUsage of `include pay;` stated the use case it includes through sysml:includes, a property the metamodel does not have, and owned no ReferenceSubsetting, which IncludeUseCaseUsage and its derived useCaseIncluded require (SysML.xtext IncludeUseCaseUsage). It is now written as the other reference forms are, through `references`, which materializes the ReferenceSubsetting. `include use case u : T` includes itself, which its metaclass states, so the inclusion the parser records beside its typing is no longer written. sysml:includes still reads. Fixes #943. Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…reotype-metadata Co-Authored-By: jason.han <hanhuijun@gmail.com>
…derings Co-Authored-By: jason.han <hanhuijun@gmail.com> # Conflicts: # docs/project/pilot-differential-baseline.json # docs/reference/repl-commands.md # internal/ir/view/form.go # internal/ir/view/plantuml.go
Co-Authored-By: jason.han <hanhuijun@gmail.com>
* feat(view): add case and mixed rendering kinds Co-Authored-By: jason.han <hanhuijun@gmail.com> * fix(view): preserve legacy rendering behavior Co-Authored-By: jason.han <hanhuijun@gmail.com> * test(view): make case fixture validate Co-Authored-By: jason.han <hanhuijun@gmail.com> * fix(view): nest mixed containers in PlantUML Co-Authored-By: jason.han <hanhuijun@gmail.com> * fix(view): keep inherited roles and containment in case and mixed views Co-Authored-By: jason.han <hanhuijun@gmail.com> * fix(view): skip library-inherited case roles Co-Authored-By: jason.han <hanhuijun@gmail.com> * fix(view): keep nested mixed content Co-Authored-By: jason.han <hanhuijun@gmail.com> * fix(view): build mixed structures in one pass Co-Authored-By: jason.han <hanhuijun@gmail.com> * docs: note OpenSysMLRenderings dependency for other tools Co-Authored-By: jason.han <hanhuijun@gmail.com> * fix(view): skip structure inside behavior when discovering mixed members Co-Authored-By: jason.han <hanhuijun@gmail.com> * feat(view): render GeneralView requirement, definition and package graphs Co-Authored-By: jason.han <hanhuijun@gmail.com> * fix(view): mark Mermaid composition and reference edges and quote excerpts typographically Co-Authored-By: jason.han <hanhuijun@gmail.com> * feat(view): link case and mixed diagram elements to source Co-Authored-By: jason.han <hanhuijun@gmail.com> * fix(view): make mixed circles and objective notes clickable in PlantUML Co-Authored-By: jason.han <hanhuijun@gmail.com> * fix(view): keep paragraph breaks in linked PlantUML objective notes Co-Authored-By: jason.han <hanhuijun@gmail.com> * fix(view): keep linked PlantUML objective titles bold Co-Authored-By: jason.han <hanhuijun@gmail.com> * fix(view): draw inherited objectives, subsettings and imports; recolour styled verdicts Co-Authored-By: jason.han <hanhuijun@gmail.com> * fix(view): expose ports in mixed diagrams Co-Authored-By: jason.han <hanhuijun@gmail.com> * docs(view): describe mixed port text rendering Co-Authored-By: jason.han <hanhuijun@gmail.com> * fix(view): keep action parameter pins in minimal mixed views Co-Authored-By: jason.han <hanhuijun@gmail.com> * fix(view): end mixed PlantUML connectors at their ports Co-Authored-By: jason.han <hanhuijun@gmail.com> * refactor(view): keep caseFamily's doc comment on its function Co-Authored-By: jason.han <hanhuijun@gmail.com> * fix(view): link every inherited role occurrence in mixed views Co-Authored-By: jason.han <hanhuijun@gmail.com> * fix(view): keep inherited role edges within their case in mixed views Co-Authored-By: jason.han <hanhuijun@gmail.com> * fix(view): draw D2 ownership edges with the owner's head only Co-Authored-By: jason.han <hanhuijun@gmail.com> * refactor(semantics): read satisfy ends in semantics so views need not import query Co-Authored-By: jason.han <hanhuijun@gmail.com> * test(wasm): check sysml-engine dependencies and bound its size growth Co-Authored-By: jason.han <hanhuijun@gmail.com> * test(wasm): allow the engine's queryexec trace dependency Co-Authored-By: jason.han <hanhuijun@gmail.com> * docs: restore the grammar reference link in the README Co-Authored-By: jason.han <hanhuijun@gmail.com> * docs: count OpenSysMLRenderings among the supplied pilot libraries Co-Authored-By: jason.han <hanhuijun@gmail.com> * test(grpc): cover case and mixed views in RenderView Co-Authored-By: jason.han <hanhuijun@gmail.com> * docs: restore the bundled library count in the conformance gate notes Co-Authored-By: jason.han <hanhuijun@gmail.com> * test(corpus): regenerate the round-trip expectations for the merged examples 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>
* perf(grpc): ParseSources re-analyzes only what an edit reaches A client that re-parses one model after each edit sent the same documents and paid for the whole model every time: a fresh index, every document parsed, every document analyzed. From the second parse of a document set, the service now answers from an incremental model.Workspace held for that set (lineage.go): it updates the documents whose content changed, analyzes in the workspace's shared context so an edit drops only the documents whose reads it changed, and caches a detached copy, so a model never changes once its hash is handed out. A first parse, a model that does not parse clean, and ParseFile take the fresh path as before. The request, the answer and the model hash are unchanged; the answer equals a fresh parse's. Part of #878 (the ParseSources half). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(grpc): answer a document set holding a library version freshly The lineage's workspace indexes a document that versions a bundled library file under the library's tier (standInLocked), which a fresh parse does not, so the passes that branch on that mark reported differently: a user document declaring `standard library package ScalarValues` lost its warning from the second parse on. Such a set is now answered by the fresh path, always. model.Workspace.StandsIn reports the case. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * feat(grpc): name the documents an edit reached (ParseSources affected) ParseSourcesRequest.base_model_hash names the model a client was answered last; ParseSourcesResponse.affected then names, in document order, every document whose results may differ from it, under the new parse_sources_affected capability. The lineage's workspace stamps each document's analysis (model.Workspace.AnalysisStamp), changed exactly when the document is analyzed afresh; a document left out has one analysis in both models, so it converts with ConvertRequest.documents exactly as before. Every document is named when the base is unknown, was answered fresh, or is another set's. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(grpc): affected only when asked, every document where scopes may change ParseSources answered `affected` on every request, so the combined WebAssembly service, which has no such field, no longer answered as the gRPC service does (TestCombinedWireParity). It is now answered only for a request naming base_model_hash. Whether a model's ids are qualified depends on how many identity scopes its documents declare together, so an edit adding or dropping a ProjectRef in one document changes every document's conversion without changing its analysis. A model whose documents name ProjectRef now has every document affected. A set answered fresh because it held a version of a bundled library file stayed on the fresh path for good. It now records those documents and is noted afresh once one of them changes, so a later parse builds a workspace again. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * chore(proto): regenerate the Go stubs with the toolchain CI runs protoc-gen-go formats the doc comments it copies with the Go toolchain that runs it; regenerated under Go 1.27 they differed from the Go 1.25.11 output the stub check compares against. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…derings Co-Authored-By: jason.han <hanhuijun@gmail.com>
…wpoints-concerns Co-Authored-By: jason.han <hanhuijun@gmail.com> # Conflicts: # docs/project/sysml-v1-transformation-census.md
Co-Authored-By: jason.han <hanhuijun@gmail.com>
Co-Authored-By: jason.han <hanhuijun@gmail.com> # Conflicts: # client/java/opensysml-client/src/main/java/org/openmbee/opensysml/proto/Sysml.java # client/julia/OpenSysML/src/OpenSysML.jl # client/node/src/generated/sysml_pb.ts # client/python/opensysml/__init__.py # client/python/opensysml/proto/sysml_pb2.py # client/rust/conformance/sysml.descriptor.binpb # docs/reference/service-transports.md # internal/workspace/libs/stdlib.snapshot
…ark themes The README's fallback logo was translucent grey on a transparent ground, so wherever GitHub shows the fallback over a dark background (GitHub set to a dark theme while the OS is light, the mobile app, renderers without <picture> support) it all but vanished. It now sits on a white disc inside its outer ring; on a light page it looks the same as before. Co-Authored-By: jason.han <hanhuijun@gmail.com>
…ctor-ends Co-Authored-By: jason.han <hanhuijun@gmail.com> # Conflicts: # README.md # docs/internals/architecture.md
* fix(export): write an accept node as an AcceptActionUsage `action a accept p : T;` and `accept T;` were written as an ActionUsage owning a ReferenceUsage flagged isAccept, so a reader of the standard structure saw an ordinary action. They are now the AcceptActionUsage the grammar builds (SysML.xtext AcceptNode, AcceptNodeDeclaration), owning the payload as its payloadParameter through a ParameterMembership, as a transition's trigger already was. Reading accepts AcceptActionUsage as an action usage, so the notation written back is unchanged; graphs with the ActionUsage form still read. Fixes #941. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(export): read an accept's payload from its payloadParameter A graph stating the metamodel alone marks an accept node's payload by the AcceptActionUsage's sysml:payloadParameter, not by the sysml:isAccept flag this mapping writes beside it, and reading found the payload by the flag only, so such a node came back as an ordinary action owning an `out ref`. The payload is now the flagged parameter, else the one payloadParameter names. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(export): keep a payload with members of its own out of the accept head The accept head writes the payload's declaration alone, so taking a payload named only by sysml:payloadParameter that owns members of its own into the head dropped those members. Such a payload now stays a member, which writes them. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(export): refuse an accept whose payload owns members A payload parameter has no body in the notation (SysML.xtext PayloadParameter), so an accept whose payload owns members of its own cannot be written: folded into the head it lost the members, and kept as a member the node lost its accept. It is now refused, flagged or not, as the mapping refuses what it cannot write back. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…ark-theme The README's fallback logo was translucent grey on a transparent ground, so wherever GitHub shows the fallback over a dark background (GitHub set to a dark theme while the OS is light, the mobile app, renderers without <picture> support) it all but vanished. It now sits on a white disc inside its outer ring; on a light page it looks the same as before. Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Co-authored-by: jason.han <hanhuijun@gmail.com>
- Go coverage profile overran CircleCI's 60-minute job limit: the -coverpkg suite run serially takes 53-59 minutes on the large class. It now runs as four parallel Go coverage shards, one per scripts/race-shard.sh package shard (tests/wasm and the tools ride with runtime), and a go-coverage-merge job joins their profiles into the coverage.txt the scan reads. make coverage-shard and make coverage-merge reproduce that locally; make coverage is unchanged. - The solver-absent gate runs the whole of internal/frontend/repl, which needs more than go test's default ten minutes on the medium class; it now passes -timeout 30m, in the PR workflow too. - Python client tests installs docs-requirements.txt: make scripts-coverage tests the MkDocs hooks, which import mkdocs and build a site. Co-Authored-By: jason.han <hanhuijun@gmail.com>
…tionship-matrix Co-Authored-By: jason.han <hanhuijun@gmail.com> # Conflicts: # .agents/skills/testing-pilot-corpora-gate/SKILL.md # .agents/skills/testing-pilot-differential/SKILL.md # .agents/skills/testing-pilot-execution-referee/SKILL.md # .agents/skills/testing-pilot-xpect/SKILL.md # README.md # docs/internals/architecture.md # docs/project/pilot-differential-baseline.json # docs/project/pilot-differential.md # docs/project/spec-compliance.md # docs/project/view-rendering-forms.md # docs/reference/cli.md # docs/reference/lsp.md # docs/reference/repl-commands.md # examples/self-model/surfaces.sysml # internal/ir/view/d2_test.go # internal/ir/view/view.go # tests/corpus/testdata/api_json_roundtrip_expected.txt # tests/corpus/testdata/corpus_roundtrip_expected.txt
Co-Authored-By: jason.han <hanhuijun@gmail.com>
…ect-writes Co-Authored-By: jason.han <hanhuijun@gmail.com>
…eter Co-Authored-By: jason.han <hanhuijun@gmail.com>
…ucture Co-Authored-By: jason.han <hanhuijun@gmail.com> # Conflicts: # docs/project/sysml-v1-transformation-census.md # internal/translate/migrate/activity.go # tests/corpus/testdata/pssm_migration_expected.txt
…derings Co-Authored-By: jason.han <hanhuijun@gmail.com> # Conflicts: # .agents/skills/testing-pilot-corpora-gate/SKILL.md # .agents/skills/testing-pilot-differential/SKILL.md # .agents/skills/testing-pilot-execution-referee/SKILL.md # .agents/skills/testing-pilot-xpect/SKILL.md # README.md # client/rust/conformance/sysml.descriptor.binpb # cmd/sysml/main.go # docs/internals/architecture.md # docs/project/pilot-differential-baseline.json # docs/project/pilot-differential.md # docs/project/view-rendering-forms.md # docs/reference/repl-commands.md # internal/frontend/repl/meta.go # internal/ir/view/form.go # tests/corpus/testdata/api_json_roundtrip_expected.txt # tests/corpus/testdata/corpus_roundtrip_expected.txt
…nsition * fix(parser): read `first a if g then b;` in an action body as a transition SysML.xtext GuardedSuccession makes `first a if g then b;` a TransitionUsage with an optional `succession` keyword, as a state body already read it, yet an action body read it as a guarded SuccessionAsUsage. It is now parsed as `succession first a if g then b;` is, so lowering, checks and export see the one transition. Reading a TransitionUsage in an action body writes the keyword-less spelling unless sysx:declaredKeyword says `succession` or the transition is named, never `transition`, which an action body does not admit under strict conformance. Fixes #944. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(export): keep `transition` on an unguarded transition in an action body Reading wrote every TransitionUsage in an action body without a keyword, but only a guarded one is a GuardedSuccession: an unguarded one written as `first a then b;` reads back as a succession. The keyword-less spelling is now written only for a transition with a guard; one without keeps `transition`, as it did before. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * test(parser): the keyword-less guarded `first` golden is a transition now succession_to_succession_flow's `first a if go then f;` parses as the GuardedSuccession it is, a TransitionMember, rather than an initial node carrying the guard; the runtime's object-flow-guard conformance cases, which execute this shape, pass unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…n a slow runner 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>
Under -race the runtime package takes 31-47 minutes on the CI runners, so the 45m go test limit killed roughly every other run with 'panic: test timed out after 45m0s' and no failed test. The shards' job keeps its 60-minute ceiling. Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Co-authored-by: jason.han <hanhuijun@gmail.com>
The release builds the five platform wheels from one source tree and setuptools keeps build/lib between builds, so the win_amd64 wheel carried the macOS arm64 kernel staged for the wheel before it beside its .exe. setup.py drops a stale kernel from the build tree before every wheel, and the distribution script refuses a wheel whose bin/ holds anything but the one kernel for its platform. Co-authored-by: HuiJun <jason.han@jpl.nasa.gov> Co-authored-by: jason.han <hanhuijun@gmail.com>
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>
…rries Co-Authored-By: jason.han <hanhuijun@gmail.com>
Co-Authored-By: jason.han <hanhuijun@gmail.com>
Co-Authored-By: jason.han <hanhuijun@gmail.com>
Contributor
Author
|
I'll fix CI failures and address comments from users with write access. I'll skip comments containing "(aside)".
|
* fix(runtime): track body feature bindings Co-Authored-By: jason.han <hanhuijun@gmail.com> * fix(runtime): reuse materialized body binding values Co-Authored-By: jason.han <hanhuijun@gmail.com> * fix(runtime): address body binding review findings Co-Authored-By: jason.han <hanhuijun@gmail.com> * fix(runtime): preserve body binding frame state Co-Authored-By: jason.han <hanhuijun@gmail.com> * test(runtime): make qualified member fixture schedule-independent Co-Authored-By: jason.han <hanhuijun@gmail.com> * fix(runtime): keep an unvalued mark on a frame whose map is not yet allocated markUnvalued allocated the map on a copy of the frame, so the mark was lost whenever the frame held no unvalued name yet; calcRun.bindingsFrame then read a case-local the run left unvalued through to the enclosing binding of the same name. Mark through a pointer, and drop the pre-allocation the constraint result no longer needs. Co-Authored-By: jason.han <hanhuijun@gmail.com> * ci: re-run the race suite after the runtime shard hit its 45m limit on a slow runner 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>
* fix(export): write a decision's branches as TransitionUsages `if g then b;` and `else b;` after a decide in an action body were written as SuccessionAsUsages whose guard was only sysx:guard text. They are the TransitionUsages SysML.xtext GuardedTargetSuccession and DefaultTargetSuccession build: the guard is owned through a TransitionFeatureMembership of kind guard, the `then` succession is owned as a transition's is, and the decision ahead is the source. Reading writes `if g then b;` / `else b;` back (sysx:transitionSyntax "target"). A branch whose target is bound by position keeps the succession form. Fixes #945. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(export): refuse a decision branch the notation cannot state `if g then b;` and `else b;` state no source, which they read from the member before them, and no effect or body, so a branch the graph gives another source, an effect or a body, or neither a guard nor `else` was written as a different branch: rebound to the member before it, its behavior dropped, or read back as a succession. Each is now refused, as the mapping refuses what it cannot write back. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * test(export): decision_branches golden with the connector ends develop now owns Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Contributor
Author
The documentation REPL's listings and the editor landing page's attribute rows sort with a comparator, the layout's nearest-side reduce starts from a side, the last debugger step's promise is acknowledged, install-test.sh tests with [[, the roles rewriter's label regex no longer backtracks over whitespace twice, and the nightly workflow pins the Python build tooling and npm it installs. The remaining findings are the documented behaviour of the code they name: the kernel's modes and arguments, the landing page's seed, Rational.isBinary64's exact expansion, the build-info reader's toolchain and the kernel package's version ranges. Co-Authored-By: jason.han <hanhuijun@gmail.com>
The three tests that name one night's snapshot pass declared and node versions of 0.9.2 but left the kernel version to be read from the checkout, so they held only while the tree itself declared 0.9.2 and failed on the release branch that declares 0.10.0. Co-Authored-By: jason.han <hanhuijun@gmail.com>
localeCompare would order mixed-case or accented names by the browser's locale; byCodeUnit keeps the listing, the attribute rows and the layout's grouping key in the order they had. Co-Authored-By: jason.han <hanhuijun@gmail.com>
Co-Authored-By: jason.han <hanhuijun@gmail.com>
…nel tests Co-Authored-By: jason.han <hanhuijun@gmail.com>
* feat(resolve): warn when imports make a namespace's memberships indistinguishable KerML validateNamespaceDistinguishibility ranges over all memberships of a namespace, the imported ones included; the check covered only an owned name repeating another owned or an inherited one. Two imports surfacing members of one name or short name whose metaclasses conform now warn once per name on the import that brings the later membership, naming both members and their imports: "Duplicate of imported member name 'Engine': A::Engine (import A::*), B::Engine (import B::*)". Resolution is unchanged: the reference still takes the first matching import. One membership reached through two imports, an alias or membership import beside the membership that owns the element, an imported name hidden by an owned member, a repeat among the imported namespace's own members, and the standard library's members are not reported. Enumerating an import's members now visits each import edge once per enumeration, so a cycle of packages publicly re-importing one another no longer walks every path through it. The pilot validator compares owned and inherited memberships only; the 238 new rows in the differential are recorded as a known pilot omission and the six moved pilot-corpus files are ratcheted with their adjudication. Co-Authored-By: jason.han <hanhuijun@gmail.com> * fix(resolve): compare imported members with inherited ones and keep distinct same-named namespaces apart An imported member repeating one a type inherits is reported on the import, as both are the type's memberships. An alias under another name no longer stands in for its target, so the target still collides under its own name. Only package declarations are one namespace across documents; two types of one qualified name keep their nested members apart under a recursive import. Co-Authored-By: jason.han <hanhuijun@gmail.com> * chore(ci): rerun the race shards Co-Authored-By: jason.han <hanhuijun@gmail.com> * chore(ci): rerun the runtime race shard Co-Authored-By: jason.han <hanhuijun@gmail.com> * test(resolve): an imported name colliding with an inherited one warns Co-Authored-By: jason.han <hanhuijun@gmail.com> --------- Co-authored-by: HuiJun <jason.han@jpl.nasa.gov> Co-authored-by: jason.han <hanhuijun@gmail.com> Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
* ci(sonar): resolve the findings against develop since 0.9.2 The documentation REPL's listings and the editor landing page's attribute rows sort with a comparator, the layout's nearest-side reduce starts from a side, the last debugger step's promise is acknowledged, install-test.sh tests with [[, the roles rewriter's label regex no longer backtracks over whitespace twice, and the nightly workflow pins the Python build tooling and npm it installs. The remaining findings are the documented behaviour of the code they name: the kernel's modes and arguments, the landing page's seed, Rational.isBinary64's exact expansion, the build-info reader's toolchain and the kernel package's version ranges. Co-Authored-By: jason.han <hanhuijun@gmail.com> * ci(sonar): sort names by code unit, as the comparator-less sort did localeCompare would order mixed-case or accented names by the browser's locale; byCodeUnit keeps the listing, the attribute rows and the layout's grouping key in the order they had. Co-Authored-By: jason.han <hanhuijun@gmail.com> * chore(ci): rerun the checks after a runner's apt mirror stalled Co-Authored-By: jason.han <hanhuijun@gmail.com> * chore(ci): rerun the checks after a port collision in the jupyter kernel tests 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>
…s cut The decision-branch, import-distinguishability, `=` binding and SonarCloud changes landed on develop after release/0.10.0 was cut; their fragments now sit under 0.10.0 with the rest. Co-Authored-By: jason.han <hanhuijun@gmail.com>
Contributor
|
The 0.10.0 release branch is merged. Could a maintainer cut the |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What and why
Release branch for 0.10.0, cut from
developasdocs/project/releasing.md§ The release branch describes, withdevelopmerged back in after the last fixes for the release (#842, #960, #997) and the SonarCloud gate fix (#1009) landed.CHANGELOG.md: thechanges/unreleased/fragments are folded into## 0.10.0 — 2026-10-08and deleted, the six thatdevelopgained after the cut included. The minor segment moves because the release refuses a construct 0.9.x accepted (deferis removed) and changes derived results (exact Rationals, unbounded Integers, the-engine checkhorizon); see CONTRIBUTING.md § Versioning.client/python/opensysml/_version.py, the Jupyter kernel's_version.py,client/node/package.json(package, the five platform packages,@openmbee/opensysml-wasm),client/java/pom.xmland both module poms,client/rust/opensysml/Cargo.toml, the MDK, SysON and VS Code manifests with their child poms, and the four lockfiles (npm install --package-lock-only,cargo update -p opensysml). The two READMEs that quote the version follow.scripts/changelog.py: 24 fragments ondevelopwere already carried by the 0.9.2 section (they outlived their release). The fold now skips a fragment whose entry an earlier version's section already lists under the same heading, instead of repeating it in the version being prepared, and still deletes the fragment. Without this the 0.10.0 section repeated 23 entries of 0.9.2. The fix is listed under 0.10.0's Fixed.client/python/tests/test_snapshot_version.py: the three tests that name one night's snapshot passeddeclaredandnodeas 0.9.2 but let the kernel version be read from the checkout, so they held only while the tree declared 0.9.2. They now pin the kernel version too.How it was verified
On the branch head, after the
developmerge:python3 client/python/scripts/check_version.py --tag v0.10.0with--node,--java,--rust,--editorsand--jupyter-kernel: each prints0.10.0.python3 scripts/changelog-test.py(17 tests, one added for the carried-by-a-release case) andpython3 scripts/changelog.py check; the 0.10.0 section shares no entry with 0.9.2, 0.9.1 or 0.9.0.gofmt -l .(empty),go build ./...,go vet ./...,make lint,make proto-breaking BUF_BREAKING_REF=origin/main,python3 scripts/check-doc-links.py,make docs-check.go test -race -count=1 ./...withOPENSYSML_REQUIRE_TRAINING_CORPUS,OPENSYSML_REQUIRE_PILOT_CORPORA,OPENSYSML_REQUIRE_PILOT_LIBRARY_XMIandOPENSYSML_REQUIRE_PSSM_SUITEset: all 101 packages pass (stdlib conformance and the corpus, identity and PSSM gates included).make build-grpc && pytest client/python/tests/: 1454 passed, 127 skipped.developis OK after ci(sonar): resolve the findings against develop since 0.9.2 #1009 (new reliability and security ratings A).release_rehearsal=truerun on this branch remains to be triggered by a maintainer with the publish contexts.Checklist
make testandmake lintpass locallymake docs-countsrun if a gate count moved (none moved)F4,K5) in the body, docs, or changelogLink to Devin session: https://nasa-jpl-demo.devinenterprise.com/sessions/3db6a090aa214667b2a66d372c6e36b1
Open in Devin Desktop: https://nasa-jpl-demo.devinenterprise.com/desktop/session/3db6a090aa214667b2a66d372c6e36b1?variant=devin
Requested by: @HuiJun