0.1.0 shakedown: fold the pending changes into the entry, demo the solver and views, and expose an element once - #314
Merged
Conversation
…and edit features it was missing The release notes carried two sections for one unreleased version, and the 0.1.0 one described intermediate states the merged release supersedes: the pre-rename Python name, the pre-behavior RDF model counts, SYSTEMICA_* and a known limitation the mapping's behavior coverage closes. The SMT solving path (%check, %explain, %solve, %configure, %optimize, the capability model and the portability and differential gates) and the source-preserving edit path (ApplyEdits, model.edit()) had landed with no changelog entry at all, and no row in the README capability table. Co-Authored-By: jason.han <jason.han@jpl.nasa.gov>
Author
Original prompt from jason.han
|
Author
🤖 Devin AI EngineerI'll be helping with this pull request! Here's what you should know: ✅ I will automatically:
Note: I can only respond to comments from users who have write access to this repository. ⚙️ Control Options:
|
…d through
A document's own scope tree and the global index build a symbol each for one
declaration, so pointer identity made a wildcard or filtered expose show an
element as many times as it was reached. symbols.KeyOf keys an element by the
declaration it was built from; resolve, semantics, edit and the LSP share it.
Also adds the solver and views demo models with walkthroughs, and names a
rendering kind with the article it reads with ("an action rendering").
Co-Authored-By: jason.han <jason.han@jpl.nasa.gov>
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.
Summary
The release notes carried two sections for one unreleased version —
## Unreleasedand## 0.1.0 — 2026-08-17— and nothing has been tagged, so both are the same release. This folds them into one dated## 0.1.0 — 2026-08-18entry, leading with the rename (it decides how every other entry spells things), and reconciles the statements the merge made false.Then, shaking the release down against that entry, two of its claims wanted demos and one turned out to be a bug, so this PR also carries the fix and the two examples:
fix(view): a wildcard or filteredexposeshowed an element once per scope tree it was reached through. A document's own scope tree and the global index build a*symbols.Symboleach for one declaration, so deduping by pointer deduped nothing across them:expose Fleet::**[@Fleet::Safety]renderedpart def Fleet::Airbagtwice. Identity is now the declaration a symbol was built from, in one place the four callers share:internal/lsp/rename.goandinternal/core/edit/locate.goeach had their ownsameSymboldoing theDocName+DeclSpancomparison locally; both now callsymbols.SameElement, andview.dedupeis deleted sinceModel.ExposedElementsno longer returns a duplicate. Regression:internal/repl/view_wildcard_test.goasserts one occurrence per element in%viewand%renderforexpose P::*andexpose P::**[@T]— it fails onmain's behavior (verified by stashing the resolve/semantics change).examples/solver-demo.sysml+ walkthrough — a rover budget written so each solver command has something to answer: asserted constraints, a requirement whose conditions conflict (%explainnames all three), a satisfaction assertion, two interacting variation points (%configure … allpermits 3 of 4), and three analyses (one objective, a quantity-valued one, two improved lexicographically). Every command and every output in the walkthrough is transcribed from the built binary under z3, including cvc5's typed refusal of%optimize.examples/views-demo.sysml+ walkthrough — a lander with one view per rendering kind (tree, interconnection, state, action, table), a nested view, a framed concern whose viewpoint conformance is violated by one exposed part, and a filtered recursiveexpose. This is the model the duplicate above showed up on.an action rendering, nota action rendering—Kind.article(), used by the empty-rendering message and the wrong-form error.Two features that landed this cycle had no changelog entry at all, and no row in the README capability table. The code and the reference docs are complete, only the release-facing text was missing:
%check,%explain,%solve,%configure,%optimize, the backend capability model and SMT-LIB 2.6 logic selection, the differential and portability gates, and theOPENSYSML_SMT*variables (OPENSYSML_SMT_MAX_CONFIGURATIONSwas missing from the rename's variable list too);ApplyEditsRPC,internal/core/edit, andopensysml'smodel.edit()/set_value/rename/apply()behind theapply_editscapability.Reconciled, because within one release a reader never saw the intermediate state:
pysysmlraisesExperimentalFeatureWarning,pysysml.is_experimentalopensysml, as the rename entry above it statesSYSTEMICA_REQUIRE_TRAINING_CORPUS=1in the tag pipelineOPENSYSML_REQUIRE_TRAINING_CORPUS=1The known-limitations list also gained the ones the new entries imply: package-owned bindings,
%invokeon acalc/constraint, tool-defined rendering,%optimizeneeding z3 (optimization is a z3 extension cvc5 does not implement), and the two edit operations offered.docs/project/releasing.mdhad stale pre-rename versions in the PyPI runbook: the rehearsal declaresVERSION = "0.1.0rc1"and installsopensysml==0.1.0rc1while taggingopensysml-v0.3.0rc1, and the verification step assertsopensysml.__version__prints0.1.0. The client's declared version is0.3.0(python/opensysml/_version.py), so following the runbook as written would fail its own check — the examples are now0.3.0.Verification
The whole release gate, on this branch with the fix:
gofmt -l .(empty),go build ./...,go vet ./...,make lint,go test ./..., both SMT suites (OPENSYSML_REQUIRE_SMT=1against z3 and cvc5 over./internal/core/solve ./internal/repl), the corpus gate (OPENSYSML_REQUIRE_TRAINING_CORPUS=1 ./internal/core/model -run TestTrainingExamples),TestExamplesAnalyseCleanlyandsysml -validateover both new models, andscripts/check-doc-links.py(0 broken links).Beyond the gates, the release was shaken down through the REPL and the gRPC service against the changelog's claims — every rendering kind and form, nested and empty views,
%print/%features/%slots/%invoke, action and state debugging across declarations, binding propagation with its conflict and cycle errors, named control nodes, math-import gating,%check/%explainunder both solvers,feature_valuesover gRPC with theopensysmlclient and its deprecated aliases, and theSYSTEMICA_*→OPENSYSML_*migration. The duplicate exposure above was the only defect found; not exercised:%stepon a state machine, collection- and enum-valued features.Open question for the release, not addressed here
docs/project/roadmap.md§ T1 says the deprecated spellings (%slots,Instance.slots/SlotValue,raw_slots/get_slot) must be removed before 0.1.0 ships, on the pre-release clean-break rule — while the changelog entry documents keeping them as deprecated aliases. One of the two has to give before the tag; this PR changes neither.Link to Devin session: https://nasa-jpl-demo.devinenterprise.com/sessions/c3c88c095dc9480c813ccf30359ed271
Requested by: @HuiJun