All notable changes to the SysML v2.0 Language Support extension will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Prepare Release workflow —
prepare-release.ymlautomates version bumping, CHANGELOG stamping, and tag creation via GitHub Actionsworkflow_dispatch - Composite setup action —
.github/actions/setup/action.ymlcentralises Node.js setup, LSP dependency switching, andnpm installacross all workflows
- Refactored
ci.ymlandrelease.ymlto use the composite setup action, eliminating repeated boilerplate - Updated
RELEASE_CHECKLIST.mdto reference the new prepare-release workflow - Removed manual
version:*andrelease:*npm scripts (superseded by prepare-release workflow)
- "Go to References" missing anonymous interface usages (#34) — downstream LSP now indexes anonymous typed interface usages (e.g.
port pwrOut : ~PwrHeaterIface) in the symbol table - False parse errors from stale DFA states — downstream LSP retry logic now correctly detects and clears stale DFA states instead of checking pre-seed status
- DFA snapshot coverage — expanded warmup text with prefix metadata (
#Safety,#Security), nestedaction definsidepart def,then statesuccession shorthand, and nested subviews; regenerated DFA snapshot eliminating false parse errors for these constructs - False
invalid-constraint-bodywarning in viewpoints —require constraint { doc /* ... */ }insideviewpointbodies no longer flagged as invalid view-showcase.sysmlsyntax — correctedentry state idletostate idleinOperatingStatesstate def
- SysML v2 View/Viewpoint support — views with
expose,filter, andrenderdirectives now drive the visualizer dropdown and diagram selection - Boolean filter expressions —
filterdirectives supportor,and,not, and parenthesised grouping (e.g.filter @PartUsage or @PortUsage) - Textual notation renderer —
render asTextualNotationdisplays scoped elements as monospace SysML text with coloured keywords and click-to-navigate - Subview hierarchy — nested view usages shown with
↳indent in the dropdown;parentViewtracked through the element tree - View definition inheritance — view usages inherit
filter,render, andexposefrom their view definition type - Package-level filter extraction —
filterdirectives insidepackagebodies are collected alongside view-body filters - Transitive port type hierarchy — port compatibility checks walk specialisation chains and detect common ancestors before flagging warnings
- Viewpoint satisfaction diagnostic —
view-no-scopeinfo hint when a view usage has noexposeorfilter view-showcase.sysmlsample — 17 view usages demonstrating all supported view/filter/render scenarios- View filter contract tests — 45 new extension tests covering boolean expressions, metaclass resolution, metadata matching, subview tracking, and render mappings
- LSP test coverage — 13 new tests for transitive type hierarchy, viewpoint diagnostics, and symbol table view/filter/expose/rendering extraction
- Multi-filter AND semantics — multiple
filterdirectives now correctly combine with AND; previously the fast path used set union (OR)
- Dead code: unused
_lastUpdateTimefield and unreferencedfindElementInParent()method
- LSP model caching —
LspModelProvidernow caches results by URI, avoiding redundant LSP requests when multiple consumers (model explorer, visualization, feature inspector, dashboard) query the same file - Consolidated file-change notifications — save, edit, and file-system-watcher events are debounced into a single 300ms notification per URI, eliminating up to 3 redundant panel refreshes per save
- Parallel workspace loading — model explorer loads files in chunks of 4 concurrently instead of sequentially, improving workspace load times
- Dependabot configuration — automated dependency updates for npm and GitHub Actions with grouped minor/patch PRs
npm auditin CI — lint job now runsnpm audit --audit-level=highto catch known vulnerabilities- LSP dependency management scripts —
lsp:local,lsp:npm, andlsp:whichscripts for switching between local and npm LSP versions
- Updated
sysml-v2-lspdependency from 0.12.0 to 0.13.0 — batch parsing bug fixes (DFA pre-seed retry, error listener ordering, SLL error collection) - Upgraded
typescriptfrom 5.x to 6.0.2 - Upgraded
eslintfrom 9.x to 10.2.0 and@eslint/jsto 10.0.1 - Upgraded
@types/nodefrom 24.x to 25.6.0 and@types/vscodeto 1.116.0 - Upgraded
cytoscapeto 3.33.2 and@vscode/vsceto 3.9.0 - Unit tests now run compiled
.jsoutput instead of usingts-node, fixing compatibility with Node 22+ ESM resolution - Release workflow restricted to
mainbranch and version tags only
- Unit test failures on Node 22 — replaced CJS
Module._resolveFilenamevscode mock hook with a plain.cjsrequire hook that works with Node 22's ESM module resolution - Release workflow running on non-main branches — added branch guard (
mainandv*tags only) - CI YAML syntax errors — converted inline
node -escripts to YAML block scalars to avoid nested quote issues
- Deprecated
downlevelIterationoption fromtsconfig.json(unnecessary with ES2022 target, deprecated in TypeScript 6)
- Updated
sysml-v2-lspdependency from 0.11.0 to 0.12.0
- DFA snapshot pre-seeding — ANTLR parser DFA tables are pre-built at compile time and loaded at startup, eliminating cold-start ATN simulation. Benchmarks show 35–500x faster per-file parsing and ~120x aggregate throughput improvement across files of all sizes
- DFA self-healing — if the pre-seeded DFA has incomplete coverage for a construct, the parser automatically clears and retries with a full LL pass, then subsequent parses benefit from the corrected states
- Updated
sysml-v2-lspdependency from 0.10.0 to 0.11.0 — DFA pre-seeding, worker DFA retry logic, cross-file requirement diagnostics, narrowed expression-operator suppression, keyword set derived from ANTLR lexer at runtime
- False parse errors from worker thread — worker now mirrors the main-thread DFA retry logic; raw worker diagnostics are re-derived through the diagnostics provider to apply grammar-limitation suppression
- Flaky cancellation test — widened timing margins in
loadWorkspaceModelcancellation test to eliminate race condition - Security: patched
brace-expansionCVE (GHSA-f886-m6hf-6m8v) via npm override
- Parse orchestrator test suite — debounce, cancellation, rapid-edit, and cold/hot-start scenarios (#23)
- Updated
sysml-v2-lspdependency from 0.9.0 to 0.10.0 — off-main-thread worker parsing, enum value recognition, early-open document queue - Release workflow accepts version number parameter; added warnings for failed marketplace/Open VSX publishes
- Worker thread parsing — ANTLR parsing now runs in a dedicated
worker_threadsthread; diagnostics appear immediately while the symbol table builds on the main thread, keeping hover/completion/go-to-def responsive - Parse lifecycle test suites — tests covering
ModelExplorerProviderconcurrency (queuing, cancellation, rapid edits, workspace/file mode transitions) andParseOrchestratordebounce/cooldown/guard logic - Enum value symbol extraction — bare enum values (
red;) and explicit enum values (enum red;) insideenum defbodies now produceEnumUsagesymbols in the symbol table
- Redundant re-parsing on activation —
parseDebounceTimernow clears correctly after firing; 3-second cooldown onnotifyServerParseDoneprevents cascading re-parses during cold start - False-positive "no viable alternative at input 'import'" — DFA snapshot regenerated to cover bare
import(withoutprivate/publicprefix); server defers diagnostics for documents opened before DFA is loaded - False "empty enum" hint —
checkEmptyEnumvalidator no longer flags enums with bare values as empty - Status bar bug fix
- Requirement satisfy/verify diagnostics — warnings for unsatisfied and unverified requirements
- Cross-file go-to-definition — Ctrl+Click navigates to definitions in other workspace files and standard library packages
- Library unit resolution — SI and USCustomary units (
kg,foot,knot, etc.) resolve in constraint expressions
- Updated
sysml-v2-lspdependency from 0.8.0 to 0.9.0 - CI/release workflows updated to Node.js 22 LTS; GitHub Release action bumped to v4
- Sequence diagram spacing adapts to label width; long labels truncated with tooltip
- False-positive syntax errors suppressed — arithmetic operators, collection expressions (
->select,->collect), and unit expressions (W/m^2) no longer flagged inside block bodies - Concatenated type names
- Keyword validator —
collect,xor,null,impliesno longer flagged as misspelled keywords
- Metadata visualization —
metadata defandmetadataelements now render as first-class structural nodes in diagram views - Base type display on nodes — diagram nodes show specialization and typing relationships using SysML notation (
:>for definitions,:for usages) - Attribute values in diagram nodes — definition nodes display attribute values inline
- Updated
sysml-v2-lspdependency from 0.7.0 to 0.8.0- Fixed
extractName()picking up prefix metadata annotation names instead of element names - Metadata annotations extracted and emitted in model DTOs
- Fixed
- Metadata keyword text colour —
metadata defandmetadatakeywords now render in purple (#D4A5FF) instead of falling through to the grey default
- Model Explorer package context menu action: View Model Dashboard
- Model Dashboard now support workspaces
- LSP updated to 0.7.0
- Improved semantic validation
- New quick fix actions
- Model Complexity Index calculation tweaks
- Model Dashboard workspace targeting UI: file/semantic mode toggle with filtered target dropdown
- Updated to OMG 2026-02 - SysML v2 Release
- Visualizer filter reliability across diagram data sources (including non-standard element collections)
- State transition rendering for qualified names and selected-machine transition mapping
- Webview disposal race conditions in visualizer updates/postMessage paths
- Model Dashboard auto-refresh on file changes while open
- Comprehensive test suite — new test files covering CodeLens, diagram buttons, editing features, MCP server, Model Explorer integration, performance and visualization panel (224 tests total, 176 unit + 48 integration)
- CI pipeline restructured — split into 3 parallel jobs:
lint,unit-tests, andintegration-tests(runs after lint + unit pass) - Release pipeline test gate —
testjob must pass before thereleasejob runs
- Updated
sysml-v2-lspdependency from 0.5.1 to 0.6.0 - Makefile:
make testruns unit tests only;make test-integrationruns the full Extension Host suite
end portvalidation false positive (#15) — parser erroneously rejectedend port,end part,end item, and otherend <keyword>syntax in interface/connection definitions; root cause was a stale DFA snapshot in the LSP server that didn't cover the new grammar paths- DFA snapshot robustness — LSP parser now retries with a cleared DFA when pre-seeded states produce parse errors, preventing stale snapshots from causing silent failures
- Updated
sysml-v2-lspdependency from 0.5.0 to 0.5.1 (enhanced code actions with structured diagnostic data, qualified name resolution) - Simplified CI configuration by removing Node.js version matrix
- Updated
sysml-v2-lspdependency from 0.4.1 to 0.5.0
- Removed
minimatchoverride frompackage.json
- Feature Inspector panel (
src/panels/featureInspectorPanel.ts) — cursor-tracking webview showing resolved type information, specialization breadcrumbs, feature tables with direction/multiplicity/modifier badges, clickable type drill-down, and navigation history with back button - Feature Explorer tree view (
src/explorer/featureExplorerProvider.ts) — master-detail sidebar showing resolved type info, specialization chains, and feature groups (parts, ports, attributes, etc.) for the selected definition - Model Complexity Index (MCI) — status bar indicator (0–100 score) with hotspot detection for complex elements, documentation coverage, coupling analysis, and textual rating
- Model Explorer workspace modes — toggle between By File and Semantic Model views; workspace-wide model loaded automatically for
.code-workspaceprojects; active document auto-revealed in tree - Diagnostic-reactive status bar — live error/warning counts with colour-coded icons (
$(error)/$(warning)/$(check)); click to open the Problems panel - LSP server health in status bar tooltip — uptime, heap/RSS memory usage, and cache statistics (documents, symbol tables, semantic tokens)
SysML: Show Type Hierarchycommand — surfaces VS Code's built-in type hierarchy view for SysML definitionsSysML: Show Call Hierarchycommand — surfaces VS Code's built-in call hierarchy view for action/state invocationsSysML: Toggle View: By File / Semantic Modelcommand — switch Model Explorer between file-based and semantic views- Workspace pre-parsing settings —
sysml.workspace.preloadOnOpen(always/workspaceOnly/never) andsysml.workspace.excludePatterns(glob array) - Camera Example multi-file sample (
samples/Camera Example/) —.code-workspacewith 8 SysML files covering General View, Interconnection View, Activity, Sequence, State, and Use Case diagrams - Animated parse progress indicator — status bar animation showing parse stages (assembling model, building blocks, linking elements) with real-time progress feedback
SysML: Clear Parse Cacheenhanced — now flushes server caches (documents, symbol tables, semantic token sets) with reported counts, then re-parses the active file immediately- Model Dashboard updated with Model Complexity Index display and build timing metrics
- ESLint configuration modernised — flat config format with browser globals for webview JS, Node globals for scripts, vendor files ignored, type-checked TypeScript linting
- ESLint errors in browser JS — added proper environment globals for
media/game/,media/webview/, andscripts/files; ignored third-party vendor bundles and.venvdirectory
- LSP model provider (
src/providers/lspModelProvider.ts) — sendssysml/modelrequests to the language server for structured model data - Model type definitions (
src/providers/sysmlModelTypes.ts) — shared TypeScript types for elements, relationships, and model statistics - Model Dashboard panel (
src/panels/modelDashboardPanel.ts) — webview dashboard showing model statistics and build timing - Go-to-Definition for library imports — navigate to standard library definitions from import statements
modelBuildTimeMstiming metric — real ANTLR parse time from the LSP server, reported consistently across status bar, dashboard, and output log
- Architecture: complete migration to LSP-only model — visualization panel and model explorer now use
sysml/modelLSP requests instead of the in-extension ANTLR parser; the extension no longer bundles any parser, resolver, or library code - Visualization panel refactored (
src/visualization/visualizationPanel.ts) — rebuilt to consume LSP model data directly - Model Explorer refactored (
src/explorer/modelExplorerProvider.ts) — uses LSP model provider instead of in-extension parser - Extension activation refactored (
src/extension.ts) — streamlined for LSP-only architecture
- LSP cold-start race condition — model explorer and visualization now wait for the server to be ready
- Filename encoding in logs — spaces in filenames are properly handled
- In-extension ANTLR parser (
src/parser/) —antlrSysMLParser.ts,sysmlParser.ts,parserWorker.ts,parserWorkerHost.ts,libraryIndexer.ts,vscodeMock.ts, andgenerated/directory - Semantic resolver (
src/resolver/) —resolver.ts,diagnostics.ts,types.ts,index.ts - Library service (
src/library/) —service.ts,cacheManager.ts,compiler.ts,types.ts,index.ts - Grammar files (
grammar/) —SysMLv2Lexer.g4,SysMLv2Parser.g4 sysml.library/directory — standard library files now bundled in the LSP serverantlr4runtime dependency
- Comprehensive keyword validator fix: eliminated ~100 false-positive "Unexpected identifier where a SysML keyword was expected" diagnostics by adding missing tokens to
NAME_PRECEDING_KEYWORDS— covers KerML elements, annotations, control nodes, reference-preceding keywords, succession/flow tokens, relationship keywords, modifiers, visibility keywords, and punctuation (e.g.attribute redefines,<'short-name'> identifier,exhibit,perform,include, etc.)
- Updated
sysml-v2-lspdependency from 0.1.6 to 0.1.7
- Semantic validation for enum literals: warns when enumeration members inside
enum defare missing the requiredenumkeyword prefix (e.g. barecondenser;→ should beenum condenser;) - Missing import detection: warns when standard-library types (
String,Integer,Boolean,Real,Natural,Number,Complex) are used without the correspondingimport ScalarValues::*(orNumericalValues::*) statement, with a suggested fix - Semantic diagnostics surface in Problems panel: resolver warnings (enum keyword, missing imports, unresolved types) now appear as VS Code diagnostics alongside LSP diagnostics
- Enumeration literals are now properly extracted into the structural diagram data (previously always empty)
- MCP / Visualizer parser alignment: the extension's semantic resolver now detects issues that the MCP
parse/validatetools miss (permissive ANTLR grammar acceptsENUM?optional), preventing the false-confidence loop where MCP reports 0 errors but the visualizer shows "Parse Error" sysml.validateModelcommand now runs the full semantic resolution pass instead of only showing LSP diagnostic count
- Updated
sysml-v2-lspdependency from 0.1.5 to 0.1.6
- RC car sample model (
samples/rc-car.sysml) — 540-line SysML v2 example with activity, sequence, and state machine diagrams
- MCP server registration: replaced broken
require('sysml-v2-lsp')with direct path resolution — fixes "Tried to use SysML v2 tools but was blocked" in Copilot agent mode - Removed duplicate MCP server definitions from
.vscode/settings.json,.vscode/mcp.json, andsamples/.vscode/that caused two servers to appear in the debug host
- Updated
sysml-v2-lspdependency from 0.1.4 to 0.1.5 - MCP server now registered programmatically by the extension only (single
sysml-v2-mcpprovider)
- Language Server Protocol (LSP) integration via the
sysml-v2-lsppackage — all language intelligence features (diagnostics, completions, hover, go-to-definition, references, rename, formatting, code actions, semantic tokens, CodeLens, inlay hints, type/call hierarchy, document symbols, folding ranges, selection ranges, workspace symbols) now provided by the language server - New LSP client module (
src/lsp/client.ts) managing server lifecycle over IPC transport sysml.restartServercommand to restart the language server on demand- Configuration settings:
sysml.trace.server(off/messages/verbose),sysml.maxNumberOfProblems,sysml.library.path - New test suite
lspClient.test.tscovering LSP diagnostics, hover, document symbols, and completions
- Extension architecture: language features delegated to LSP server instead of in-extension providers
- Local ANTLR parser retained only for visualization panel and model explorer tree view
parseSysMLDocument()simplified — parse gate mechanism and inline validation removedvalidateModelcommand now reportsvscode.languages.getDiagnostics()count from the LSP serverdeactivate()now stops the LSP client- Updated
ARCHITECTURE.mdto reflect LSP client/server architecture
- In-extension provider registrations:
SysMLFormatter,SysMLDefinitionProvider,SysMLDocumentSymbolProvider,SysMLCompletionProvider,SysMLCodeActionProvider,SysMLValidator LibraryServiceinitialization from extension activation (LSP handles library resolution)getLibraryService()export from extension module- Test files for removed providers:
formatter.test.ts,navigation.test.ts,validator.test.ts
- Extracted grammar generation pipeline into standalone sysml-v2-grammar repository
- Grammar files now downloaded from release artifacts via
make grammar/npm run grammar:download - Parser grammar renamed from
SysMLv2.g4toSysMLv2Parser.g4(aligned with upstream repo) - Removed redundant
antlr:copy-tokensbuild step — tokens file now included in grammar release - Removed
make debug-elktarget — usenpm run debug:elkdirectly if needed
- 19 orphaned renderer files and associated view model types
- 6 dead test files for removed renderers
- Python-based grammar generation scripts (
scripts/grammar/)
- Worker thread for ANTLR parsing — heavy lexer/parser/visitor work now runs off the extension host thread, eliminating ~4s UI freezes on large files
parseAsync()method onSysMLParserwith automatic fallback to synchronous parsing if the worker is unavailable- 300ms debounce on document change events to avoid parse-per-keystroke
- Cytoscape SVG plugin registered twice — removed duplicate
cytoscape.use()calls; UMD bundles already self-register on script load - Removed unsupported
<meta http-equiv>cache tags from visualization webview HTML (stripped by VS Code sandbox) - Release workflow now installs Java and downloads the ANTLR jar so
vscode:prepublishsucceeds in CI
- BNF-based grammar generation pipeline from official OMG SysML v2 KEBNF spec
- SLL prediction mode with DFA cache reuse for faster parsing
Clear Parse Cachecommand- Parse-error diagnostics from ANTLR4
- Centralised parse entry point with cancellation and progress notifications
- 12 targeted grammar fixes for spec ambiguities
- Migrated from
antlr4tsto officialantlr4runtime (v4.13.2) - Parser and lexer grammars regenerated from spec
- Validator rewritten with two-phase semantic resolution approach
- State transition source/target extraction
- Subclassification extraction from definition declarations
- Extension activation reliability
- TreeView node size & spacing improvements
- ANTLR-based SysML v2 parser with full grammar support
- Interactive diagram visualizations (BDD, IBD, Activity, Sequence, State, Use Case)
- Model Explorer tree view
- Code formatting and validation
- Go-to-definition and symbol navigation
- Completion provider with context-aware suggestions
- Standard SysML v2 library support
- D3.js and Cytoscape.js based rendering
- Improved syntax highlighting coverage
- Initial release stability improvements
- Configurable export resolution for diagram PNG export
- PNG export scale options (1×, 2×, 4×)
- Tree view export rendering issues
- IntelliSense completion provider for SysML keywords and element references
- Multi-selection support in visualization commands
- Enhanced element navigation from diagrams
- Improved validator with better duplicate detection and reference handling
- Nested action validation and visualization support
- Fork and join node support in activity diagram parsing and rendering
- Model Explorer registered as command palette entry (
SysML: Explorer)
- Keyword validation with typo detection and quick-fix suggestions
- CI workflow for automated testing
- Release workflow for automated VSIX packaging and publishing
- Inline editing for element names in diagram views
- Enhanced element navigation from visualization panels
- Visualization interaction tests
- Replaced
nycwithc8for code coverage
- Spurious re-render on first resize observer callback
- Toggle for category headers in General View
- Reduced debounce times for improved responsiveness
- Optimised update logic in visualization panel
- README screenshots and video assets updated to WebP format
- Compact UI styling for buttons, menus, and toolbar
- Dropdown interaction improvements
- Document loading performance improved with debounced parsing
- Release workflow conditional check for marketplace publishing
- Initial release
- SysML v2.0 syntax highlighting via TextMate grammar
- Regex-based parser with element extraction
- Interactive diagram visualizations (General View)
- Model Explorer tree view
- Basic code formatting
- Extension activation on
.sysmlfiles