Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .config/dotnet-tools.json
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
"rollForward": false
},
"demaconsulting.reqstream": {
"version": "1.10.0",
"version": "1.11.0",
"commands": [
"reqstream"
],
Expand Down
58 changes: 58 additions & 0 deletions docs/reqstream/quality.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
---
# Quality/process requirements grouping SysML2Workbench's use of off-the-shelf (OTS)
# UI frameworks, testing tools, and in-house library dependencies. These requirements
# exist so that OTS-derived requirements (which describe capabilities the desktop
# application relies on from third-party or sibling-repository components, not
# user-visible SysML2Workbench functionality) are not reported as orphans by
# `dotnet reqstream --requirements requirements.yaml --enforce`.
sections:
- title: 'Quality Requirements'
requirements:
- id: 'SysML2Workbench-Quality-TestInfrastructure'
title: 'The repository shall rely on xUnit and Appium to execute and verify automated test evidence.'
tags: [quality]
justification: |
Automated testing depends on xUnit's execution/reporting capabilities and
Appium's end-to-end desktop UI automation. This grouping requirement links
those OTS requirements to the quality root so they participate in orphan
detection without being falsely reported as disconnected from
SysML2Workbench functionality.
children:
- 'XUnit-ExecuteAutomatedVerification'
- 'XUnit-ProvideTraceableTestEvidence'
- 'Appium-DriveDesktopApplicationEndToEnd'
- 'Appium-LocateControlsByAutomationId'

- id: 'SysML2Workbench-Quality-DesktopShell'
title: 'The application shall rely on Avalonia and AvaloniaEdit to host the cross-platform desktop UI shell and syntax-highlighted text views.'
tags: [quality]
justification: |
The desktop shell, diagram surface, and context-menu interactions depend on
Avalonia's cross-platform UI hosting, and read-only syntax-highlighted
SysML text views depend on AvaloniaEdit. This grouping requirement links
those OTS requirements to the quality root so they participate in orphan
detection without being falsely reported as disconnected from
SysML2Workbench functionality.
children:
- 'Avalonia-HostDesktopShell'
- 'Avalonia-HostInteractiveDiagramSurface'
- 'Avalonia-CopyDiagramAsSysmlViaContextMenu'
- 'AvaloniaEdit-RenderReadOnlySyntaxHighlightedText'
- 'AvaloniaEdit-LoadEmbeddedSysmlHighlighting'

- id: 'SysML2Workbench-Quality-ModelingEngine'
title: 'The application shall rely on the DemaConsulting.SysML2Tools and DemaConsulting.Rendering libraries to load workspaces, resolve impact, and render diagrams.'
tags: [quality]
justification: |
Workspace loading, view-layout generation, and connection-aware impact
analysis depend on the SysML2Tools library, and SVG diagram output depends
on the Rendering library preserving diagram primitives. This grouping
requirement links those OTS requirements to the quality root so they
participate in orphan detection without being falsely reported as
disconnected from SysML2Workbench functionality.
children:
- 'SysML2Tools-LoadWorkspaceModels'
- 'SysML2Tools-GenerateViewLayouts'
- 'SysML2Tools-ConnectionAwareImpactAnalysis'
- 'Rendering-ProduceSvgOutput'
- 'Rendering-PreserveDiagramPrimitives'
22 changes: 22 additions & 0 deletions docs/reqstream/sysml2-workbench.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -4,27 +4,32 @@ sections:
requirements:
- id: 'SysML2Workbench-ManageWorkspace'
title: 'The SysML2Workbench shall open a folder as a live workspace, discover SysML model files, resolve imports, and refresh loaded content when workspace files change.'
tags: [system]
justification: |
Phase 0 is centered on local multi-file model viewing rather than single-file inspection, so users need the desktop application to mirror the SysML2Tools CLI workspace model and stay current with external edits.
children:
- 'SysML2Workbench-WorkspaceSubsystem-ManageWorkspace'
- 'SysML2Workbench-WorkspaceSubsystem-RefreshWorkspaceState'
- 'SysML2Workbench-AppShellSubsystem-PresentWorkspaceSources'
tests:
- 'OpenWorkspace_LoadsAndRefreshesWorkspace'

- id: 'SysML2Workbench-BrowsePredefinedViews'
title: 'The SysML2Workbench shall let users browse supported predefined SysML views from the loaded model and render the selected view in the desktop shell.'
tags: [system]
justification: |
A core value of the application is turning existing model-defined views into an interactive desktop experience without requiring the command-line renderer.
children:
- 'SysML2Workbench-ViewCatalogSubsystem-EnumeratePredefinedViews'
- 'SysML2Workbench-ViewCatalogSubsystem-SignalActiveViewSelection'
- 'SysML2Workbench-LayoutRenderingSubsystem-RenderSelectedView'
- 'SysML2Workbench-AppShellSubsystem-PresentSelectedView'
tests:
- 'SelectPredefinedView_RendersDiagram'

- id: 'SysML2Workbench-AuthorCustomViews'
title: 'The SysML2Workbench shall let users build ad hoc custom views, preview them, and export equivalent SysML view text for promotion into model files.'
tags: [system]
justification: |
The architecture explicitly adds GUI-driven custom view authoring while avoiding a tool-specific persistence format by exporting standard SysML text.
children:
Expand All @@ -37,22 +42,39 @@ sections:

- id: 'SysML2Workbench-PresentWorkspaceDiagnostics'
title: 'The SysML2Workbench shall collect parser and reference-resolution diagnostics for the whole workspace and present them in a dedicated diagnostics panel.'
tags: [system]
justification: |
Users need a consolidated view of workspace problems so they can understand model load failures and broken references without manually inspecting every file.
children:
- 'SysML2Workbench-WorkspaceSubsystem-AggregateWorkspaceDiagnostics'
- 'SysML2Workbench-DiagnosticsPanelSubsystem-DisplayWorkspaceDiagnostics'
- 'SysML2Workbench-DiagnosticsPanelSubsystem-RefreshDisplayedDiagnostics'
tests:
- 'OpenWorkspace_ShowsWorkspaceDiagnostics'

- id: 'SysML2Workbench-OperateAsDesktopShell'
title: 'The SysML2Workbench shall provide a cross-platform desktop shell with local rolling logs for navigating workspaces, rendered diagrams, and diagnostics during a user session.'
tags: [system]
justification: |
The product is a desktop application, so it must provide the shell and operational logging needed for day-to-day use and user-attachable bug reports.
children:
- 'SysML2Workbench-LoggingSubsystem-PersistOperationalEvents'
- 'SysML2Workbench-LoggingSubsystem-RetainRecentLogHistory'
- 'SysML2Workbench-AppShellSubsystem-CoordinateSessionWorkspace'
- 'SysML2Workbench-AppShellSubsystem-DefaultSidebarPanel'
- 'SysML2Workbench-AppShellSubsystem-ShowActiveDocumentStatus'
- 'SysML2Workbench-AppShellSubsystem-PresentAboutDialog'
tests:
- 'StartSession_OpensShellAndWritesOperationalLogs'

- id: 'SysML2Workbench-QueryWorkspaceModel'
title: 'The SysML2Workbench shall let users interactively query the loaded workspace model - listing declarations or running any element-scoped SysML2Tools query verb - from the desktop shell, and copy the rendered result to the clipboard.'
tags: [system]
justification: |
Beyond browsing predefined views, users need to interrogate the model's structure and relationships (uses, used-by, dependencies, impact, hierarchy, and similar queries already offered by the SysML2Tools CLI) without leaving the desktop application.
children:
- 'SysML2Workbench-AppShellSubsystem-HostQueryWorkflow'
- 'SysML2Workbench-ElementPickerSubsystem-ProvideReusablePicker'
- 'SysML2Workbench-ElementPickerSubsystem-DecoupleFromWorkspace'
tests:
- 'QueryDialog_SelectDescribeAndCopyAsMarkdown_PlacesRenderedMarkdownOnClipboard'
50 changes: 50 additions & 0 deletions docs/reqstream/sysml2-workbench/app-shell-subsystem.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -31,12 +31,62 @@ sections:
- 'SysML2Workbench-AppShellSubsystem-MainWindowShell-ArrangePrimaryRegions'
- 'SysML2Workbench-AppShellSubsystem-MainWindowShell-SynchronizeSessionState'
- 'SysML2Workbench-AppShellSubsystem-MainWindowShell-RenderCustomViewPreviewWithoutMutatingTabs'
- 'SysML2Workbench-AppShellSubsystem-MainWindowShell-ExportTabAsSysml'
- 'SysML2Workbench-AppShellSubsystem-ViewBuilderDialog-LiveUpdatePreviewOnEveryEdit'
- 'SysML2Workbench-AppShellSubsystem-ViewBuilderDialog-CommitCreatesNewDiagramTab'
- 'SysML2Workbench-AppShellSubsystem-ViewBuilderDialog-CancelDiscardsWithoutSideEffects'
- 'SysML2Workbench-AppShellSubsystem-ViewBuilderDialog-RefreshExposeTargetsFromWorkspace'
- 'SysML2Workbench-AppShellSubsystem-ViewBuilderDialog-ManageExposeTargets'
- 'SysML2Workbench-AppShellSubsystem-ViewBuilderDialog-FreshInstancePerOpen'
- 'SysML2Workbench-AppShellSubsystem-ViewBuilderDialog-FilterExposeTargetsByTypeAndText'
tests:
- 'CustomViewWorkflow_PreviewsAndExportsFromShell'

- id: 'SysML2Workbench-AppShellSubsystem-PresentWorkspaceSources'
title: 'The AppShellSubsystem shall let users add, remove, and browse individual file and folder workspace sources - including opening a source''s underlying files - from a dedicated workspace panel, and shall support closing every source at once.'
justification: |
A workspace is built up incrementally from an arbitrary combination of files and folders rather than a single root, so the shell must expose source-management commands and a visual inventory of the resulting tree, plus a one-action way to reset back to empty.
children:
- 'SysML2Workbench-AppShellSubsystem-MainWindowShell-ManageMultipleSources'
- 'SysML2Workbench-AppShellSubsystem-MainWindowShell-SupportEmptyWorkspace'
- 'SysML2Workbench-AppShellSubsystem-MainWindowShell-CloseAllSources'
- 'SysML2Workbench-AppShellSubsystem-MainWindowShell-OpenSourceTextTab'
- 'SysML2Workbench-AppShellSubsystem-WorkspacePanel-BuildSourceTree'
- 'SysML2Workbench-AppShellSubsystem-WorkspacePanel-ReflectDedupeInTreeShape'
- 'SysML2Workbench-AppShellSubsystem-WorkspacePanel-RefreshOnSourcesChanged'
- 'SysML2Workbench-AppShellSubsystem-WorkspacePanel-WireAddRemoveCommands'
- 'SysML2Workbench-AppShellSubsystem-WorkspacePanel-ResolveOpenableFile'
tests:
- 'AddFolderSourceAsync_SecondDistinctFolder_IsAdditiveAndWatchesBothSources'
- 'RebuildTree_FolderSource_ProducesSourceNodeWithFileChildren'

- id: 'SysML2Workbench-AppShellSubsystem-HostQueryWorkflow'
title: 'The AppShellSubsystem shall provide a Query menu dialog that lets users list workspace declarations or run any element-scoped SysML2Tools query against a selected element, see results update live with no explicit "Run" gesture, and copy the rendered result to the clipboard.'
justification: |
Interactively querying the loaded model (list, describe, uses, used-by, dependencies, impact, hierarchy, requirements, interface, connections, states) without leaving the desktop shell is a distinct, user-visible capability that reuses the shared ElementPickerSubsystem control and the DemaConsulting.SysML2Tools query engine.
children:
- 'SysML2Workbench-AppShellSubsystem-QueryDialog-RefreshPickersFromWorkspace'
- 'SysML2Workbench-AppShellSubsystem-QueryDialog-BrowseTabIsClientSideList'
- 'SysML2Workbench-AppShellSubsystem-QueryDialog-ElementQueryDispatchesThroughEngine'
- 'SysML2Workbench-AppShellSubsystem-QueryDialog-ConnectionAwareImpact'
- 'SysML2Workbench-AppShellSubsystem-QueryDialog-SurfaceTraversalMetadata'
- 'SysML2Workbench-AppShellSubsystem-QueryDialog-HandleFailuresGracefully'
- 'SysML2Workbench-AppShellSubsystem-QueryDialog-CopyResultToClipboard'
- 'SysML2Workbench-AppShellSubsystem-QueryDialog-EndToEndFromMenu'
tests:
- 'QueryDialog_SelectDescribeAndCopyAsMarkdown_PlacesRenderedMarkdownOnClipboard'

- id: 'SysML2Workbench-AppShellSubsystem-PresentAboutDialog'
title: 'The AppShellSubsystem shall present an About dialog, opened from the main window, that shows application identity information and lists the key third-party dependencies the desktop application relies on.'
justification: |
Users and support staff need a discoverable, in-app way to confirm which application version and key dependencies are running without inspecting build artifacts.
children:
- 'SysML2Workbench-AppShellSubsystem-AboutDialog-ExposeApplicationInfo'
- 'SysML2Workbench-AppShellSubsystem-AboutDialog-ListKeyDependencies'
tests:
- 'Construction_ExposesApplicationNameAndTagline'
- 'Construction_ExposesDependencyList_ContainsExpectedEntries'

- id: 'SysML2Workbench-AppShellSubsystem-DefaultSidebarPanel'
title: 'The AppShellSubsystem shall present the workspace panel as the sidebar panel shown by default when the application starts, ahead of the predefined-views panel in the same sidebar.'
justification: |
Expand Down
7 changes: 7 additions & 0 deletions docs/reqstream/sysml2-workbench/element-picker-subsystem.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,13 @@ sections:
children:
- 'SysML2Workbench-ElementPickerSubsystem-ElementPicker-AcceptCallerBuiltCandidates'
- 'SysML2Workbench-ElementPickerSubsystem-ElementPicker-FilterByTypeAndText'
- 'SysML2Workbench-ElementPickerSubsystem-ElementPicker-ManageChipsWithoutDuplicates'
- 'SysML2Workbench-ElementPickerSubsystem-ElementPicker-TrackSelection'
- 'SysML2Workbench-ElementPickerSubsystem-ElementPicker-LabelKnownNodeKinds'
- 'SysML2Workbench-ElementPickerSubsystem-ElementFilter-AcceptCallerBuiltCandidates'
- 'SysML2Workbench-ElementPickerSubsystem-ElementFilter-FilterByTypeAndText'
- 'SysML2Workbench-ElementPickerSubsystem-ElementFilter-ManageChipsWithoutDuplicates'
- 'SysML2Workbench-ElementPickerSubsystem-ElementFilter-SearchAndCommitAddableTypeFilter'
tests:
- 'ElementPickerViewModel_SetCandidates_AvailableTypeLabels_IsDistinctAndSorted'

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ sections:
children:
- 'SysML2Workbench-LayoutRenderingSubsystem-LayoutInvoker-BuildPredefinedViewLayout'
- 'SysML2Workbench-LayoutRenderingSubsystem-SvgCanvasHost-DisplayRenderedSvg'
- 'SysML2Workbench-LayoutRenderingSubsystem-SvgCanvasHost-ClearStaleDiagram'
tests:
- 'RenderPredefinedView_DisplaysSvgDiagram'

Expand Down
4 changes: 4 additions & 0 deletions docs/reqstream/sysml2-workbench/platform-requirements.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,27 +6,31 @@ sections:
requirements:
- id: 'SysML2Workbench-Platform-Windows'
title: 'The SysML2Workbench shall run as a desktop application on Windows operating systems.'
tags: [system]
justification: |
Windows is an explicitly supported desktop target for the shared Avalonia shell and must be verifiable independently from other operating systems.
tests:
- 'windows@StartSession_OpensShellAndWritesOperationalLogs'

- id: 'SysML2Workbench-Platform-Ubuntu'
title: 'The SysML2Workbench shall run as a desktop application on Ubuntu Linux operating systems.'
tags: [system]
justification: |
Linux desktop support is part of the project scope, and Ubuntu-based validation provides explicit evidence for that platform family.
tests:
- 'ubuntu@StartSession_OpensShellAndWritesOperationalLogs'

- id: 'SysML2Workbench-Platform-MacOS'
title: 'The SysML2Workbench shall run as a desktop application on macOS operating systems.'
tags: [system]
justification: |
macOS is one of the intended desktop targets for the Avalonia-based application and requires platform-specific verification evidence.
tests:
- 'macos@StartSession_OpensShellAndWritesOperationalLogs'

- id: 'SysML2Workbench-Platform-DotNet9'
title: 'The SysML2Workbench shall support the .NET 9.0 runtime.'
tags: [system]
justification: |
The project is expected to run on modern .NET desktop runtimes, and explicit runtime requirements keep compatibility evidence separate from operating-system support evidence.
tests:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ sections:
- 'SysML2Workbench-ViewBuilderSubsystem-ViewDefinitionModel-StoreExposeTargets'
- 'SysML2Workbench-ViewBuilderSubsystem-ViewDefinitionModel-StoreExposeRecursionAndFilter'
- 'SysML2Workbench-ViewBuilderSubsystem-ViewDefinitionModel-ReportDefinitionReadiness'
- 'SysML2Workbench-ViewBuilderSubsystem-ViewDefinitionModel-AddExposeTargetSelectionDirectly'
tests:
- 'EditDefinition_TracksCustomViewInputs'

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,5 +20,6 @@ sections:
Selecting a predefined view is the handoff point between view discovery and actual diagram rendering.
children:
- 'SysML2Workbench-ViewCatalogSubsystem-ViewCatalogPresenter-TrackSelectedView'
- 'SysML2Workbench-ViewCatalogSubsystem-ViewCatalogPresenter-BuildViewDefinitionFromWorkspaceView'
tests:
- 'SelectView_PublishesActiveSelection'
10 changes: 10 additions & 0 deletions docs/reqstream/sysml2-workbench/workspace-subsystem.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,13 @@ sections:
children:
- 'SysML2Workbench-WorkspaceSubsystem-WorkspaceModel-MaintainWorkspaceTree'
- 'SysML2Workbench-WorkspaceSubsystem-WorkspaceModel-ResolveWorkspaceInputs'
- 'SysML2Workbench-WorkspaceSubsystem-WorkspaceModel-SupportEmptyResolution'
- 'SysML2Workbench-WorkspaceSubsystem-WorkspaceSourceSet-MaintainOrderedSources'
- 'SysML2Workbench-WorkspaceSubsystem-WorkspaceSourceSet-RemoveSource'
- 'SysML2Workbench-WorkspaceSubsystem-WorkspaceSourceSet-ClearSources'
- 'SysML2Workbench-WorkspaceSubsystem-WorkspaceSourceSet-ResolveEmptySet'
- 'SysML2Workbench-WorkspaceSubsystem-WorkspaceSourceSet-DiscoverFolderFiles'
- 'SysML2Workbench-WorkspaceSubsystem-WorkspaceSourceSet-DedupeOverlap'
tests:
- 'OpenWorkspace_BuildsWorkspaceState'

Expand All @@ -24,6 +31,9 @@ sections:
- 'SysML2Workbench-WorkspaceSubsystem-WorkspaceModel-TrackPerFileLoadState'
- 'SysML2Workbench-WorkspaceSubsystem-DiagnosticsAggregator-CollectWorkspaceDiagnostics'
- 'SysML2Workbench-WorkspaceSubsystem-DiagnosticsAggregator-PublishDeterministicDiagnostics'
- 'SysML2Workbench-WorkspaceSubsystem-FileWatcher-WatchPerSourceScope'
- 'SysML2Workbench-WorkspaceSubsystem-FileWatcher-UnwatchSource'
- 'SysML2Workbench-WorkspaceSubsystem-FileWatcher-RequireWatchBeforeQueue'
tests:
- 'ExternalChange_RefreshesWorkspaceState'

Expand Down
Loading
Loading