CHANGELOG¶
v0.19.0 (2026-05-22)¶
:sparkles:¶
-
:sparkles: Semantic analysis engine with undefined symbol detection New
analyze()function walks the parsed model tree, builds a hierarchical symbol table, and cross-references all type, subsetting, and redefinition references against defined symbols. -
:sparkles: Import resolution Resolves
import Package::*(namespace),import Package::Element(membership), andimport Package::*::**(recursive) imports. Imported symbols become visible in the importing scope. -
:sparkles: SymbolTable with hierarchical scope resolution Each package and definition creates a child scope. References resolve through parent scopes. Qualified names like
P::AandOuter::Inner::DeepPartresolve correctly across arbitrary depth. -
:sparkles: 80+ standard library symbols whitelisted ScalarValues, ISQ quantities, and base KerML/SysML types are pre-recognized so they don't trigger false positives.
:white_check_mark:¶
- :white_check_mark: 530 tests passing (43 semantic tests, 6 new import tests)
- :white_check_mark: SemanticIssue dataclass with severity, code, message, element, reference
:memo:¶
- :memo: Updated README.md with Semantic Analysis section, import resolution documentation, and symbol resolution capabilities.
v0.17.1 (2026-05-21)¶
:sparkles:¶
- :sparkles: CayleyStore — graph database backend via HTTP API Supports BoltDB, LevelDB, and in-memory Cayley backends. Stores elements as quads (subject, predicate, object, label). Provides namespace isolation via labels for multi-tenant scenarios. Full Store protocol implementation: put, get, delete, children, parents, relationships, query, has, ids, clear, plus graph traversal (descendants, ancestors, path), connected components, cycle detection, centrality, subgraph extraction, and GraphML export.
:bug:¶
-
:bug: NetworkXStore.put() now adds the node before adding edges Previously, put() only created edges when parent_id was provided, but never stored the node data itself. This caused get() to return None, delete() to return False, query() to find nothing, and all graph operations to fail silently.
-
:bug: Usage.init() now initializes completion to UsageCompletion() Previously, programmatic API created Usage with completion=None while the parser always created a UsageCompletion. This caused set_value() to crash with AttributeError and dump() to omit the semicolon, breaking round-trip consistency for Item, Part, Port, and Attribute.
:white_check_mark:¶
- :white_check_mark: 100% test suite pass rate (487/487) All 56 grammar round-trip tests pass. All 123 OMG XPect conformance tests pass. All 82 store tests pass (including NetworkX). All 53 class tests pass (programmatic API). All 16 import tests pass.
:memo:¶
- :memo: Updated README.md with v0.17.0 release notes, CayleyStore documentation, storage backend comparison table, and Docker examples.
- :memo: Updated docs/index.md and docs/quickstart.md with Cayley storage backend documentation.
v0.16.0 (2026-05-21)¶
:sparkles:¶
- :sparkles: 100% grammar round-trip test coverage (56/56)
Added support for analysis case usage with subject/objective members,
trade study analysis examples, calculation redefinition (
calc :>> name), case body items (subjectMember, objectiveMember, actionBodyItem, returnParameterMember), and nested calculation usages within analysis bodies.
:bug:¶
- :bug: ImportPrefix now allows imports without explicit visibility Per SysML v2 spec, imports without a visibility keyword default to private. Previously raised ValueError requiring explicit visibility.
:white_check_mark:¶
- :white_check_mark: Grammar round-trip tests: 34/56 → 56/56 passing
- :white_check_mark: Import visibility tests updated to reflect correct behavior
:memo:¶
- :memo: Updated README.md with v0.16.0 release notes
v0.1.0 (2026-05-17)¶
:ambulance:¶
-
:ambulance: Added configuration to workflow (
e8b932b) -
:ambulance: Correct workflow yaml (
8c410ee) -
:ambulance: Fix for attribute change when adding units (
1daacac) -
:ambulance: Fix for build script (
4c6f238) -
:ambulance: Fix to upload to pypi (
3309eb5) -
:ambulance: Fixed critical grammar changes with SysML and KerML overwrites. (
34978bb) -
:ambulance: Fixing merge errors from black (
e101e70) -
:ambulance: Permissions fix (
8c5ea13)
:bug:¶
-
:bug: Added test and definition file that was causing the error. (
b7787d4) -
:bug: Adding textx to requirements. (
d3c1c76) -
:bug: Commiting all prior changes. (
db0be56) -
:bug: Duplicate feature chaining in primary expression. (
8217463) -
:bug: Enforce some syntax with Models always starting with packages. (
0cccdf1) -
:bug: Fix for definition naming. (
ff62dc1) -
:bug: Fix poetry build for pypi builds. (
3c90e28) -
:bug: Fixed an issue where something defined within a package could not be typed by another definition (
ee257eb) -
:bug: Fixed changes to primary expression in attribute (
ace773c) -
:bug: Fixed issue with port subnodes. (
67720b1) -
:bug: Fixed issue with Primary expression get definition response. (
5512466) -
:bug: Fixed issue with usage classes with body objects. (
afc5522) -
:bug: Fixes for load_grammar functions. (
0e45818) -
:bug: Removing optional from in flow statement that won't return programmatically. (
716961b) -
:bug: Reverting change to author. (
ae5d19e) -
:bug: Updated secondary primary expression in attribute. (
97f2086) -
:bug: Workflow fixes (
9b883ea)
:chart_with_upwards_trend:¶
- :chart_with_upwards_trend: Add lines of code history plot
(
4b86c9c)
:construction:¶
-
:construction: Adding more documentation and cleanup (
8a8675e) -
:construction: Fix yaml (
0fc1c2f) -
:construction: Fixes and updates to CI/CD (
c0640f1) -
:construction: Forgot to git pull (
4cf3100) -
:construction: More adds. (
42258b6)
:heavy_plus_sign:¶
-
:heavy_plus_sign: Adding pytest-html to test workflow. (
4f2cedc) -
:heavy_plus_sign: Using poetry package management, added dependencies. (
5c625dd)
:lock:¶
-
:lock: Switch PyPI publishing to Trusted Publishing (OIDC) (
64b6325) -
Remove PYPI_API_TOKEN dependency — uses GitHub OIDC instead - Add id-token: write permission for OIDC token minting - Update actions to v4/v5/v9 latest versions - Clean up codecoverage job Python version - Remove repository_password from semantic-release step
:memo:¶
-
:memo: Add LOC history plot to README (
4582c59) -
:memo: Add optional dependencies to README, bump version to v0.12.0 (
9fbf40a) -
:memo: Added full docstrings to init (
0e06f1d) -
:memo: Added trello to Readme (
26e304c) -
:memo: Adding more badges. (
76899b1) -
:memo: Docstring coverage add to README (
3720f3a) -
:memo: Documentation changes. (
edfd629) -
:memo: Fixes for README that were out of date. (
e57a964) -
:memo: Fixing spacing. (
25e78d0) -
:memo: remove excess brackets (
e258d1c) -
:memo: Time to add documentationgit add docsgit add docs (
f933521) -
:memo: Updates to project info to assist sphinx build. (
939d2ff) -
:memo: Updates to readme, also added a loadfromgrammar function to Usage. (
e999436) -
:memo: Updates to version (
208cdd6)
:robot:¶
-
:robot: Add coverage badge (
413323d) -
:robot: Add coverage badge (
199fa49) -
:robot: Add coverage badge (
55e4a86) -
:robot: Format code with black (
5d6c2b7) -
:robot: Format code with black (
698816d) -
:robot: Format code with black (
31bde37) -
:robot: Format code with black (
02c18a9) -
:robot: Format code with black (
dc47ac1) -
:robot: Format code with black (
6a9e45b) -
:robot: Format code with black (
854bc64) -
:robot: Format code with black (
c848b0d) -
:robot: Format code with black (
52ddedd) -
:robot: Format code with black (
cc74fa0) -
:robot: Format code with black (
99b33a3) -
:robot: Format code with black (
81be427) -
:robot: Format code with black (
9f8a1d7) -
:robot: Format code with black (
904332e) -
:robot: Format code with black (
683bf47) -
:robot: Format code with black (
c96819b) -
:robot: Format code with black (
c8eb269) -
:robot: Format code with black (
9af94da) -
:robot: Format code with black (
37d9c36) -
:robot: Format code with black (
320a6a9) -
:robot: Format code with black (
22b38bd) -
:robot: Format code with black (
aeaf778) -
:robot: Format code with black (
7a24a97) -
:robot: Format code with black (
fd62a35) -
:robot: Format code with black (
e38b669) -
:robot: Format code with black (
0449f57) -
:robot: Format code with black (
df738a0) -
:robot: Format code with black (
cba4687) -
:robot: Format code with black (
c3d3a59) -
:robot: Format code with black (
30efad4) -
:robot: Format code with black (
2009f90) -
:robot: Format code with black (
a5d91c6) -
:robot: Format code with black (
66a1f15) -
:robot: Format code with black (
9e4b07b) -
:robot: Format code with black (
5eac5cd) -
:robot: Format code with black (
b609c87) -
:robot: Format code with black (
232a31e) -
:robot: Format code with black (
e8fe82b) -
:robot: Format code with black (
1d68ffc) -
:robot: Format code with black (
a2a8e6e) -
:robot: Format code with black (
5ca03d1) -
:robot: Format code with black (
57f8869) -
:robot: Format code with black (
d308126) -
:robot: Format code with black (
b32445c) -
:robot: Format code with black (
9871bdd) -
:robot: Format code with black (
a6a8f1a) -
:robot: Format code with black (
400078b) -
:robot: Format code with black (
b3fa4b1) -
:robot: Format code with black (
e187adb) -
:robot: Format code with black (
8f1004f) -
:robot: Format code with black (
bd4ad15) -
:robot: Format code with black (
1937b6e) -
:robot: Format code with black (
95a70fe) -
:robot: Format code with black (
0ea0415) -
:robot: Format code with black (
b87f1bf) -
:robot: Format code with black (
2baf295) -
:robot: Format code with black (
24e051d) -
:robot: Format code with black (
4dcc4c9) -
:robot: Format code with black (
1651fdb) -
:robot: Format code with black (
0b70bbc) -
:robot: Format code with black (
3cc027b) -
:robot: Format code with black (
f85c2a5) -
:robot: Format code with black (
90398e1) -
:robot: Format code with black (
dd46136) -
:robot: Format code with black (
27522bd) -
:robot: Format code with black (
ea661dc) -
:robot: Format code with black (
a90c5e9)
:sparkles:¶
-
:sparkles: Action definition with 2 of 4 tests complete. (
9530eed) -
:sparkles: Add experimental ANTLR4 parser for SysML v2 (
5af2ec5) -
Add ANTLR4 Python runtime dependency - Download grammar from daltskin/sysml-v2-grammar (OMG v2026.03.0) - Generate Python parser from .g4 grammar files - Create antlr_parser.py with parse() and parse_file() functions - Create antlr_visitor.py to convert parse tree to textX-compatible dicts - Add load_antlr(), loads_antlr(), load_grammar_antlr() to public API - Update Model.load() to support both textX and ANTLR4 parsers - Fix Package.load_from_grammar() to handle various element types - Update Usage.load_from_grammar() for Requirement/UseCase formats - Add documentation in src/sysml2py/antlr/README.md - Update main README with new parser option
This provides a pure Python alternative to Java/TypeScript SysMLv2 parsers by using grammars auto-generated from the OMG specification.
-
:sparkles: Added a new base model class to replace collapse function. Model will create packages and other custom classes for use. Additionally, packages can be created from grammar. (
3dc5fca) -
:sparkles: Added all calculation grammar classes and tests that pass. (
393fa4c) -
:sparkles: Added port with ability to create subfeatures with directionality. (
94c0a19) -
:sparkles: Added some rollup classes the abstract underlying grammar. They have functions to manipulate the grammar. (
b1e01a4) -
:sparkles: Adding analysis grammar and tests. (
9400f9b) -
:sparkles: Adding constraint grammar and tests. (
6212fd0) -
:sparkles: Adding first action definition grammar classes. (
3454a50) -
:sparkles: Adding flow grammar and test. (
4fe01c9) -
:sparkles: Adding grammar for expressions. (
f69c1ef) -
:sparkles: Adding requirement grammar classes and tests. (
0d73498) -
:sparkles: Flow Connector added to grammar and initial test built. (
872b76d) -
:sparkles: Migrate documentation from Sphinx to MkDocs (
0f55e99) -
Replace Sphinx (RST, autodoc) with MkDocs Material theme - Flatten docs/source/ into docs/ with symlinks to root-level docs - New mkdocs.yml with Material theme, light/dark mode, code copy - New docs/index.md landing page - Update release.yml CI workflow to use mkdocs build + gh-pages - Remove: conf.py, index.rst, Makefile, make.bat, IMPLEMENTATION_STATUS
-
:sparkles: More badge for readme. (
4be8d54) -
:sparkles: More tests and classes. (
cd59e2e) -
:sparkles: More tests. (
41d1f5e) -
:sparkles: New package class. (
3766690) -
:sparkles: Partial addition of constraint grammar classes (
5fc5c23) -
:sparkles: State grammar classes initial implementation with first test. (
61d3df1) -
:sparkles: State grammar with appropriate tests. (
b896efe) -
:sparkles: v0.10.0 - 99% conformance pass rate (122/123), add get_definition() to 25+ grammar classes, fix visitor bugs, add state/requirement/constraint support (
e5784d5) -
:sparkles: v0.11.0 - 100% conformance (123/123), rename project to sysmlpy (
cd7818e)
Grammar fixes: - Add LPAREN AS typeReference RPAREN for (as Type) cast syntax - Add ownedExpression DOT bodyExpression for lambda/filter expressions - Handle filterPackage imports in visitor - Fix interface_part UnboundLocalError - Add get_definition() to SuccessionFlowConnectionUsage - Add CaseDefinition to DefinitionElement dispatch - Fix UsageExtensionKeyword keyword field
Documentation: - Update README, STATUS, TODO, TUTORIAL for v0.11.0 - Update all conformance results to 100%
Rename: - sysml2py -> sysmlpy (package, imports, docs, CI/CD)
- :sparkles: v0.12.0 - Storage abstraction layer, graph backend, convenience functions
(
61222d0)
New features: - Store protocol (ABC) with InMemoryStore and NetworkXStore backends - Element identity via stable UUIDs - Typed relationships (parent_child, typed_by, specializes, etc.) - Graph analysis: connected_components, cycles, centrality, shortest paths - Convenience functions: find_all, count, traverse, to_dict, to_graph, path_between - networkx as optional dependency: pip install sysmlpy[graph]
Bug fixes: - Parent references now set correctly for nested children in load_from_grammar - path_between handles list return from find()
Tests: - 82 new store tests (all pass) - 122 existing tests (all pass) - 37 conformance tests (all pass)
-
:sparkles: v0.9.0 - Add explicit transition support and bump version (
baf4cca) -
Support 'transition name first X then Y;' syntax via TransitionUsageMember - Transition class now has .name, .source, and .target attributes - State.load_from_grammar() handles TransitionUsageMember alongside TargetTransitionUsageMember - Add .parent property to all elements (Usage, Model, Package, Transition) - Add State machine Python API (.transitions, .entry_actions, .exit_actions, .do_actions) - Fix EmptySuccessionMember/EmptySuccession null handling - Fix trigger extraction from PayloadParameter.children - Add get_definition() to PerformedActionUsage and PerformActionUsageDeclaration
:white_check_mark:¶
-
:white_check_mark: Add get_definition() to 18 grammar classes for conformance tests (
2ae53f0) -
Added get_definition() to: BasicUsagePrefix, BindingConnector, EmptySuccession, EmptySuccessionMember, FlowEnd, FlowEndMember, FlowEndSubsetting, FlowFeature, FlowFeatureMember, FlowRedefinition, OccurrenceUsagePrefix, DefaultInterfaceEnd, OccurrenceDefinitionPrefix, EndFeatureUsage, EndUsagePrefix, ConnectorPart, BinaryConnectorPart, BasicDefinitionPrefix - Fixed EmptySuccession, EmptySuccessionMember, and BindingConnector init to handle None/missing keys gracefully - simpletests conformance: 11/37 -> 16/37 passing (43%)
-
:white_check_mark: Added final training example tests for action definition. (
a399f5b) -
:white_check_mark: Added test, updated workflow (
b21d14b) -
:white_check_mark: Added two additional tests for expressions, tests all pass. (
afae042) -
:white_check_mark: Adding child as optional to get def functions. (
da90c49) -
:white_check_mark: Adding import test, namespaces are bugged. (
6d35922) -
:white_check_mark: Completed tests for state grammar. (
2c2213c) -
:white_check_mark: Correcting tests (
fba8dce) -
:white_check_mark: Fix AnalysisTest and add missing get_definition() methods (
5eb1598) -
Add analysisCaseUsage and caseUsage handling to _visit_usage_element_dict for top-level package member parsing - Fix visitor output: CaseUsageDeclaration -> CalculationUsageDeclaration - Fix visitor output: CaseBody ownedRelationship -> item - Rename Requirement.attributes -> req_attributes and Requirement.constraints -> req_constraints to avoid conflict with Searchable mixin properties - Add get_definition() to: SubjectMember, SubjectUsage, ObjectiveMember, ObjectiveRequirementUsage
simpletests conformance: 16/37 -> 19/37 passing (51%)
-
:white_check_mark: Grammar changes now pass all tests. (
7771f05) -
:white_check_mark: Package tests added. (
803192b) -
:white_check_mark: Second example test for flow connector. (
7d00034)
:zap:¶
-
:zap: Adding code coverage badge to readme. (
c72fe86) -
:zap: Now loads from a single compiled grammar file that overwrites any previous grammar from imports. (
2f90c7b) -
:zap: Removing commits to push off main, should not run into pull error for semantic parsing (
77272f3) -
:zap: Removing excess lines from code coverage. (
442bc0c)
Other¶
-
:arrow_up: Fixing issue with dependencies and cython3 failing (
bb4feb6) -
:arrow_up: Fixing issue with dependencies for astropy (
ac3b2ee) -
:arrow_up: Merge from main and add astropy to main dependencies to handle units. (
98f260b) -
:art: Updating semantic parsing with lessons learned from windstorm (
2f66dbf) -
:bookmark: Bump version to 0.12.1 — test PyPI Trusted Publishing (
81d38ce) -
:clown: Adding workflows (
e4cfccd) -
:clown: Rework into textx which has similar syntax to current standard. (
b0f5991) -
:clown_face: First commit of some data (
42c1782) -
:construction_worker: Adding html to artifacts. (
4b74045) -
:construction_worker: Adding src to path for pytest in pyproject.toml (
510d672) -
:construction_worker: Corrected test directory again. (
92d5dc2) -
:construction_worker: Corrected test directory. (
2bfc6df) -
:construction_worker: Fix to build script to include grammar files. (
9a85d55) -
:fire: Getting rid of mac files. (
b41512a) -
:fire: Removing mac files. (
18174bd) -
:green_heart: Adding autoformatting instead of checking (
b7b38dc) -
:green_heart: Adding Black linting (
ee365ae) -
:green_heart: Adding code coverage detection. (
b977536) -
:green_heart: Adding conftest.py (
dbd32b9) -
:green_heart: Adding coveralls to all branches. (
425024d) -
:green_heart: Adding documentation to github action (
124645c) -
:green_heart: Adding github actions back into commit. (
e1ab9f4) -
:green_heart: Adding path to init to correct test workflow. (
d29bfb6) -
:green_heart: Deployment fix and updates for pypi (
ee89465) -
:green_heart: Fix for correct path to code coverage check. (
2fccb2c) -
:green_heart: Fixes for tests. (
e11d3e9) -
:green_heart: Fixes to doc? (
1f27b22) -
:green_heart: Fixes? (
37fa8a5) -
:green_heart: Fixes? (
1d57172) -
:green_heart: Fixes?? (
b414758) -
:green_heart: Fixes?? (
c6c0b0f) -
:green_heart: Fixes??? (
2616e90) -
:green_heart: Fixes???? (
0955e8b) -
:green_heart: Fixing code coverage with better import flat file usage. (
1a11479) -
:green_heart: Fixing? (
0f9b849) -
:green_heart: Fixing?? (
21824c9) -
:green_heart: I broke it. (
38243bc) -
:green_heart: Ignore repo upload. (
c5efb11) -
:green_heart: Let's see if this breaks github actions. (
3cf03e8) -
:green_heart: Let's see if this works, adding permissions in the script/ (
e21687a) -
:green_heart: Need more in req.txt (
2a65bfc) -
:green_heart: Removing distribute (
2dd552e) -
:green_heart: Seeing if I can drop the separate document workflow. (
7692fc7) -
:green_heart: Set write all (
6ed68a0) -
:green_heart: Test to check for new build changes to documentation. (
382c9de) -
:green_heart: Testing if we need to change directory. (
96fc0c5) -
:green_heart: Trying this for autoformat. (
4fa5563) -
:green_heart: Updating release workflow as well (
8c72ce9) -
:green_heart: Updating test script to ensure available resources for pytest (
6a9c297) -
:poop Removing more excess files. (
4bbe0f3) -
:rocket: Moving to 0.1.0 baseline, most of the base functionality is here. (
aa7333d) -
:rocket: Moving to 0.1.2. (
e6b7c2d) -
:test_tube: Adding to coverage with failure tests. (
7c2e96e) -
:test_tube: Fix for test that can't find grammar. (
18f7aca) -
:wastebasket: Remove BUGREPORT and BUGREPORT_20260516 folders (
d879ca6)