Skip to content

Upgrade SysML2Tools to 0.2.0-beta.2 and enhance impact analysis - #27

Merged
Malcolmnixon merged 6 commits into
mainfrom
feature/sysml2tools-0.2.0-connection-aware-impact
Jul 30, 2026
Merged

Upgrade SysML2Tools to 0.2.0-beta.2 and enhance impact analysis#27
Malcolmnixon merged 6 commits into
mainfrom
feature/sysml2tools-0.2.0-connection-aware-impact

Conversation

@Malcolmnixon

Copy link
Copy Markdown
Member

This pull request updates documentation and configuration to reflect recent enhancements to the SysML2Workbench's query dialog and workspace panel, as well as dependency and review path updates. The most significant changes document new features like connection-aware impact analysis, improved UI behavior, and clarify the handling of openable files in the workspace panel. There are also updates to requirement and review tracking to match these changes.

Query Dialog Enhancements:

  • Added support and documentation for connection-aware impact analysis in the query dialog, including a new "Include connections" checkbox, updated result row projection to show traversal metadata (depth, relation kind, via endpoint), and clarified UI behavior for recomputation triggers. [1] [2] [3] [4] [5] [6] [7] [8] [9]

Workspace Panel Improvements:

  • Clarified the logic for determining which workspace tree nodes are openable, introducing the ResolveOpenableFilePath function to consistently handle both file and folder sources, and documenting its pure, testable behavior. [1] [2] [3]

Requirements and Review Tracking Updates:

  • Added a new requirement for connection-aware impact analysis and clarified the layout/rendering requirement in sysml2-tools.yaml.
  • Updated review paths in .reviewmark.yaml to match renamed or relocated documentation files and added UI test file coverage. [1] [2]

Dependency Version Update:

  • Upgraded the demaconsulting.sysml2tools.tool .NET tool dependency to version 0.2.0-beta.2 in .config/dotnet-tools.json.

Malcolm Nixon and others added 6 commits July 29, 2026 21:21
… impact

SysML2Tools 0.2.0-beta.1 adds connection-aware impact analysis (PR #54). The
upgrade itself is source-compatible - the new API is purely additive - but it
changes default impact semantics: 0.1.0 walked every incoming edge, and
connector edges are in that set, so connectors were traversed unbounded and
misattributed. 0.2.0 restricts the default to resolved reference edges and
makes connector traversal opt-in and bounded.

That would silently narrow Impact results in the Query dialog for user models
containing connect/bind, so expose the opt-in rather than just bumping the
version:

- Add an Impact-only "Include connections (connect/bind)" checkbox, wired
  through BuildOptions to QueryOptions.IncludeConnections and gated to the
  Impact verb so no other verb's option payload changes. Toggling recomputes
  immediately, matching the dialog's no-explicit-Run contract.
- Correct the walk-depth label: blank means unlimited, but only one connector
  hop once connections are included.
- Surface the new per-entry traversal metadata (Depth, Relation,
  ViaQualifiedName) as results-panel columns shown only when a result actually
  carries them, so non-traversing verbs render exactly as before. Depth is read
  from the engine property, never parsed out of the human-readable Detail text,
  per the upstream API contract.

DemaConsulting.Rendering stays at 0.1.0; no transitive churn.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
A file added through "Add File..." is represented in the workspace tree as a
WorkspaceSourceNode of kind File - a leaf with no WorkspaceFileNode beneath it,
since WorkspaceFileNode is only produced for files discovered under a folder
source. The DoubleTapped handler matched WorkspaceFileNode alone, so
double-clicking a directly-added file fell through as a no-op while the same
file opened correctly when reached through an added folder.

Resolve both representations. The "which node opens what" decision moves out of
the Avalonia code-behind into a pure static
WorkspacePanelToolViewModel.ResolveOpenableFilePath, so it is unit testable
without a view; the handler now just forwards a resolved path. The .sysml filter
is applied once, after mapping, so it gates both openable node kinds uniformly.

Folder groupings and folder-kind sources still resolve to null, keeping a
double-tap on them a safe no-op. Covered by six regression tests.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
0.2.0-beta.1 bounded connector traversal separately from reference
traversal: a blank walk depth meant unlimited for reference edges but
exactly one hop for connectors, so the full connector closure was
unreachable from the Query dialog at any setting - the user had to guess
progressively larger depths to widen the blast radius, and "all of it" was
not expressible. 0.2.0-beta.2 (upstream PR #55) unifies the bound: one
relationship is one unit of depth regardless of kind, and blank is truly
unlimited everywhere.

The API surface is unchanged, so this is a version bump plus the removal of
the caveat the old semantics forced us to document. The walk-depth label
returns to the plain "Walk depth (blank = unlimited)", and the design,
requirements, and user-guide text describing the connector-hop exception is
retired.

Pin the new behavior with an OTS regression test that walks a three-hop
connector chain: unbounded reaches the whole chain reporting depths 1, 2, 3,
while explicit depths truncate it at exactly that many hops. Verified
adversarial - it fails against 0.2.0-beta.1. The dialog's label is only
truthful while the dependency behaves this way, so the guard belongs with
the other OTS evidence.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Formal review of the WorkspacePanel set found the new open-on-double-click
behavior had no requirement: six regression tests existed with nothing in
the reqstream YAML referencing them, and the verification document's lead-in
claim that its scenarios follow the authoritative reqstream mappings was
therefore untrue. Add the missing ResolveOpenableFile requirement covering
both openable node kinds and all four non-openable cases, which restores
that claim rather than weakening it.

Change review of the QueryDialog set raised the same gap from two
directions: ApplyResultVisibility toggles results-grid columns by index
because DataGridColumn gets no compiled-binding field, yet no test asserted
the mapping, and the SurfaceTraversalMetadata requirement's "show a column
only when an entry carries that value" clause had no verifying test.

Cover both with headless UI tests, since neither is reachable from a
view-model-only test. One pins the column header order the code-behind
assumes - confirmed adversarial by swapping two columns in the AXAML, which
fails it - so a future reorder becomes a test failure instead of a panel
that silently toggles the wrong column. The other drives the dialog with
rows carrying partial metadata, proving each column tracks its own value
rather than switching as a group.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Two OTS review sets referenced filenames that have never existed: the
DemaConsulting.SysML2Tools and DemaConsulting.Rendering sets used
demaconsulting-sysml2tools.* and demaconsulting-rendering.*, while the real
documents are named sysml2-tools.* and rendering.*. Six OTS documents were
therefore in no review set at all - including the SysML2Tools design,
requirements, and verification artifacts this branch modifies for the
0.2.0-beta.2 upgrade, whose evidence was consequently unreviewable.

This was silent: reviewmark --lint exits 0 because a path pattern matching
no file is not itself an error, so CI could not detect the gap.

Also add the new QueryDialogUiTests.cs to the QueryDialog set, matching the
existing convention where WorkspacePanelUiTests.cs sits in the WorkspacePanel
set - without it, the tests covering the results grid's column behavior would
have landed outside any review set too.

Only path corrections; no review set is added, removed, or re-scoped, and the
file's documented structure is unchanged.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
SysML2Tools-GenerateViewLayouts required the dependency to "generate layout
data" from its "layout strategies", but the workbench never receives either:
DiagramRenderer.RenderWorkspace turns a named view usage directly into
finished output, and the library exposes no intermediate layout graph or
public layout-strategy registry. The requirement therefore contradicted the
design document in its own review set and could not be verified as written -
its one test asserts render output, not layout data.

Restate it as the contract actually relied upon: a named view usage in,
finished diagram output out, in a single call. The requirement id is left
unchanged so existing traceability anchors still resolve.

Found by the first formal review of the OTS-DemaConsultingSysML2Tools set,
which only became possible once that set's file paths were corrected; the
defect is pre-existing and unrelated to the 0.2.0-beta.2 upgrade.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@Malcolmnixon
Malcolmnixon merged commit 50d8e35 into main Jul 30, 2026
7 checks passed
@Malcolmnixon
Malcolmnixon deleted the feature/sysml2tools-0.2.0-connection-aware-impact branch July 30, 2026 19:00
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