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
4 changes: 2 additions & 2 deletions .config/dotnet-tools.json
Original file line number Diff line number Diff line change
Expand Up @@ -63,10 +63,10 @@
]
},
"demaconsulting.sysml2tools.tool": {
"version": "0.1.0-beta.7",
"version": "0.1.0-beta.13",
"commands": [
"sysml2tools"
]
}
}
}
}
17 changes: 9 additions & 8 deletions .github/standards/sysml2-modeling.md
Original file line number Diff line number Diff line change
Expand Up @@ -161,15 +161,16 @@ whichever produces a single coherent overview diagram.

## Diagram Embedding

Render with a single quoted recursive glob for the model tree, plus the views file
Render with a single quoted recursive glob covering the entire `docs/sysml2/` tree
(`sysml2tools` 0.1.0-beta.5+ expands and recurses `**` internally, so no shell-side globbing
or explicit per-file listing is needed):
or explicit per-file listing is needed). Use one glob rooted at `docs/sysml2/`, not just
`docs/sysml2/model/**`, so shared definitions under `docs/sysml2/common/` (e.g. metadata
defs) are always included:

```pwsh
dotnet sysml2tools render `
--output docs/design/generated --format svg `
'docs/sysml2/model/**/*.sysml' `
'docs/sysml2/views/design-views.sysml'
'docs/sysml2/**/*.sysml'
```

With multiple views declared and no `--view` flag, `sysml2tools` renders every declared view
Expand Down Expand Up @@ -198,10 +199,10 @@ subsection, e.g. `![{Name} Structure]({ViewName}.svg)`.
`Get-ChildItem`/shell-side globbing is needed.
- The CI design-document job renders the views (see the render command above) before running
Pandoc, so generated SVGs exist before HTML generation. Rename/stable-filename workarounds
are unnecessary since view names are stable by definition. Pass the model and views globs as
separate quoted arguments (e.g. `'docs/sysml2/model/**/*.sysml' 'docs/sysml2/views/design-views.sysml'`)
— plain PowerShell (the default shell) is sufficient; no `shell: bash`/`shopt -s globstar`
workaround is needed.
are unnecessary since view names are stable by definition. Pass a single recursive glob
rooted at `docs/sysml2/` (e.g. `'docs/sysml2/**/*.sysml'`) so shared definitions outside
`model/` (such as `docs/sysml2/common/`) are always included — plain PowerShell (the default
shell) is sufficient; no `shell: bash`/`shopt -s globstar` workaround is needed.
- Add `sysml2tools` to `.config/dotnet-tools.json` (`demaconsulting.sysml2tools.tool`) and to
`.versionmark.yaml`'s captured tool list.

Expand Down
3 changes: 1 addition & 2 deletions .github/workflows/build.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -749,8 +749,7 @@ jobs:
run: >
dotnet sysml2tools render
--output docs/design/generated --format svg
'docs/sysml2/model/**/*.sysml'
'docs/sysml2/views/design-views.sysml'
'docs/sysml2/**/*.sysml'

- name: Generate Design HTML with Pandoc
shell: bash
Expand Down
18 changes: 18 additions & 0 deletions docs/sysml2/common/software-items.sysml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
// Shared metadata definitions for annotating software-item model elements with traceability
// links to their supporting project artifacts (source, test, design, verification, requirements).
// Intended to be reused as-is across multiple DEMA Consulting repositories - keep this package
// self-contained (no repo-specific imports) so it can be copied/synced without modification.
package SoftwareItemMetadata {
private import ScalarValues::String;

metadata def SoftwareInfo {
doc /* Traceability links from a model element to its supporting project artifacts. */

attribute description : String [0..1];
attribute sourceFiles : String [0..*];
attribute testFiles : String [0..*];
attribute designFiles : String [0..*];
attribute verificationFiles : String [0..*];
attribute requirementFiles : String [0..*];
}
}
35 changes: 20 additions & 15 deletions docs/sysml2/model/ots.sysml
Original file line number Diff line number Diff line change
@@ -1,27 +1,32 @@
package OtsDependencies {
private import SoftwareItemMetadata::*;

doc /* Off-the-shelf (OTS) runtime dependencies used by VersionMark. */

part def YamlDotNet {
doc /* OTS: YamlDotNet. */

comment designRef /* Design: docs/design/ots/yaml-dot-net.md */
comment verificationRef /* Verification: docs/verification/ots/yaml-dot-net.md */
comment reqRef /* Requirements: docs/reqstream/ots/yaml-dot-net.yaml */
metadata info : SoftwareInfo {
description = "OTS: YamlDotNet.";
designFiles = ("docs/design/ots/yaml-dot-net.md");
verificationFiles = ("docs/verification/ots/yaml-dot-net.md");
requirementFiles = ("docs/reqstream/ots/yaml-dot-net.yaml");
}
}

part def FileSystemGlobbing {
doc /* OTS: Microsoft.Extensions.FileSystemGlobbing. */

comment designRef /* Design: docs/design/ots/microsoft-extensions-file-system-globbing.md */
comment verificationRef /* Verification: docs/verification/ots/microsoft-extensions-file-system-globbing.md */
comment reqRef /* Requirements: docs/reqstream/ots/microsoft-extensions-file-system-globbing.yaml */
metadata info : SoftwareInfo {
description = "OTS: Microsoft.Extensions.FileSystemGlobbing.";
designFiles = ("docs/design/ots/microsoft-extensions-file-system-globbing.md");
verificationFiles = ("docs/verification/ots/microsoft-extensions-file-system-globbing.md");
requirementFiles = ("docs/reqstream/ots/microsoft-extensions-file-system-globbing.yaml");
}
}

part def TestResults {
doc /* OTS: DemaConsulting.TestResults. */

comment designRef /* Design: docs/design/ots/dema-consulting-test-results.md */
comment verificationRef /* Verification: docs/verification/ots/dema-consulting-test-results.md */
comment reqRef /* Requirements: docs/reqstream/ots/dema-consulting-test-results.yaml */
metadata info : SoftwareInfo {
description = "OTS: DemaConsulting.TestResults.";
designFiles = ("docs/design/ots/dema-consulting-test-results.md");
verificationFiles = ("docs/verification/ots/dema-consulting-test-results.md");
requirementFiles = ("docs/reqstream/ots/dema-consulting-test-results.yaml");
}
}
}
14 changes: 8 additions & 6 deletions docs/sysml2/model/version-mark.sysml
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package VersionMark {
import OtsDependencies::*;
private import SoftwareItemMetadata::*;

doc
/*
Expand All @@ -8,12 +9,13 @@ package VersionMark {
*/

part def VersionMarkSystem {
doc /* The VersionMark system as a whole. */

comment testRef /* Test: test/DemaConsulting.VersionMark.Tests/IntegrationTests.cs */
comment designRef /* Design: docs/design/version-mark.md */
comment verificationRef /* Verification: docs/verification/version-mark.md */
comment reqRef /* Requirements: docs/reqstream/version-mark.yaml */
metadata info : SoftwareInfo {
description = "The VersionMark system as a whole.";
testFiles = ("test/DemaConsulting.VersionMark.Tests/IntegrationTests.cs");
designFiles = ("docs/design/version-mark.md");
verificationFiles = ("docs/verification/version-mark.md");
requirementFiles = ("docs/reqstream/version-mark.yaml");
}

part cli : CliSubsystem;
part configuration : ConfigurationSubsystem;
Expand Down
15 changes: 9 additions & 6 deletions docs/sysml2/model/version-mark/capture.sysml
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
package VersionMark {
part def CaptureSubsystem {
doc /* JSON serialization of captured version data. */
private import SoftwareItemMetadata::*;

comment testRef /* Test: test/DemaConsulting.VersionMark.Tests/Capture/CaptureTests.cs */
comment designRef /* Design: docs/design/version-mark/capture.md */
comment verificationRef /* Verification: docs/verification/version-mark/capture.md */
comment reqRef /* Requirements: docs/reqstream/version-mark/capture.yaml */
part def CaptureSubsystem {
metadata info : SoftwareInfo {
description = "JSON serialization of captured version data.";
testFiles = ("test/DemaConsulting.VersionMark.Tests/Capture/CaptureTests.cs");
designFiles = ("docs/design/version-mark/capture.md");
verificationFiles = ("docs/verification/version-mark/capture.md");
requirementFiles = ("docs/reqstream/version-mark/capture.yaml");
}

part versionInfo : VersionInfo;
}
Expand Down
23 changes: 17 additions & 6 deletions docs/sysml2/model/version-mark/capture/version-info.sysml
Original file line number Diff line number Diff line change
@@ -1,11 +1,22 @@
package VersionMark {
private import SoftwareItemMetadata::*;
private import ScalarValues::String;

part def VersionInfo {
doc /* Captured version record; JSON serialization for capture/publish handoff. */
metadata info : SoftwareInfo {
description = "Captured version record; JSON serialization for capture/publish handoff.";
sourceFiles = ("src/DemaConsulting.VersionMark/Capture/VersionInfo.cs");
testFiles = ("test/DemaConsulting.VersionMark.Tests/Capture/VersionInfoTests.cs");
designFiles = ("docs/design/version-mark/capture/version-info.md");
verificationFiles = ("docs/verification/version-mark/capture/version-info.md");
requirementFiles = ("docs/reqstream/version-mark/capture/version-info.yaml");
}

attribute jobId : String;

comment sourceRef /* Source: src/DemaConsulting.VersionMark/Capture/VersionInfo.cs */
comment testRef /* Test: test/DemaConsulting.VersionMark.Tests/Capture/VersionInfoTests.cs */
comment designRef /* Design: docs/design/version-mark/capture/version-info.md */
comment verificationRef /* Verification: docs/verification/version-mark/capture/version-info.md */
comment reqRef /* Requirements: docs/reqstream/version-mark/capture/version-info.yaml */
// Captured tool versions dictionary (Dictionary<string, string> in code), split into
// parallel key/value lists since a native map attribute is not representable here.
attribute versions_key : String [0..*];
attribute versions_value : String [0..*];
}
}
15 changes: 9 additions & 6 deletions docs/sysml2/model/version-mark/cli.sysml
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
package VersionMark {
part def CliSubsystem {
doc /* Command-line argument parsing, mode dispatch, and output routing. */
private import SoftwareItemMetadata::*;

comment testRef /* Test: test/DemaConsulting.VersionMark.Tests/Cli/CliTests.cs */
comment designRef /* Design: docs/design/version-mark/cli.md */
comment verificationRef /* Verification: docs/verification/version-mark/cli.md */
comment reqRef /* Requirements: docs/reqstream/version-mark/cli.yaml */
part def CliSubsystem {
metadata info : SoftwareInfo {
description = "Command-line argument parsing, mode dispatch, and output routing.";
testFiles = ("test/DemaConsulting.VersionMark.Tests/Cli/CliTests.cs");
designFiles = ("docs/design/version-mark/cli.md");
verificationFiles = ("docs/verification/version-mark/cli.md");
requirementFiles = ("docs/reqstream/version-mark/cli.yaml");
}

part program : Program;
part context : Context;
Expand Down
17 changes: 10 additions & 7 deletions docs/sysml2/model/version-mark/cli/context.sysml
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
package VersionMark {
part def Context {
doc /* Command-line argument and output container (console, error, log file). */
private import SoftwareItemMetadata::*;

comment sourceRef /* Source: src/DemaConsulting.VersionMark/Cli/Context.cs */
comment testRef /* Test: test/DemaConsulting.VersionMark.Tests/Cli/ContextTests.cs */
comment designRef /* Design: docs/design/version-mark/cli/context.md */
comment verificationRef /* Verification: docs/verification/version-mark/cli/context.md */
comment reqRef /* Requirements: docs/reqstream/version-mark/cli/context.yaml */
part def Context {
metadata info : SoftwareInfo {
description = "Command-line argument and output container (console, error, log file).";
sourceFiles = ("src/DemaConsulting.VersionMark/Cli/Context.cs");
testFiles = ("test/DemaConsulting.VersionMark.Tests/Cli/ContextTests.cs");
designFiles = ("docs/design/version-mark/cli/context.md");
verificationFiles = ("docs/verification/version-mark/cli/context.md");
requirementFiles = ("docs/reqstream/version-mark/cli/context.yaml");
}
}
}
25 changes: 18 additions & 7 deletions docs/sysml2/model/version-mark/cli/program.sysml
Original file line number Diff line number Diff line change
@@ -1,11 +1,22 @@
package VersionMark {
part def Program {
doc /* Entry point and mode dispatcher (capture, publish, lint, validate). */
private import SoftwareItemMetadata::*;

comment sourceRef /* Source: src/DemaConsulting.VersionMark/Program.cs */
comment testRef /* Test: test/DemaConsulting.VersionMark.Tests/ProgramTests.cs */
comment designRef /* Design: docs/design/version-mark/cli/program.md */
comment verificationRef /* Verification: docs/verification/version-mark/cli/program.md */
comment reqRef /* Requirements: docs/reqstream/version-mark/cli/program.yaml */
part def Program {
metadata info : SoftwareInfo {
description = "Entry point and mode dispatcher (capture, publish, lint, validate).";
sourceFiles = ("src/DemaConsulting.VersionMark/Program.cs");
testFiles = ("test/DemaConsulting.VersionMark.Tests/ProgramTests.cs");
designFiles = ("docs/design/version-mark/cli/program.md");
verificationFiles = ("docs/verification/version-mark/cli/program.md");
requirementFiles = ("docs/reqstream/version-mark/cli/program.yaml");
}
}

// Program dispatches each operational mode to the unit that implements it.
dependency Program to Context;
dependency Program to VersionMarkConfig;
dependency Program to VersionInfo;
dependency Program to MarkdownFormatter;
dependency Program to GlobMatcher;
dependency Program to Validation;
}
15 changes: 9 additions & 6 deletions docs/sysml2/model/version-mark/configuration.sysml
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
package VersionMark {
part def ConfigurationSubsystem {
doc /* YAML configuration loading, validation, and version capture execution. */
private import SoftwareItemMetadata::*;

comment testRef /* Test: test/DemaConsulting.VersionMark.Tests/Configuration/ConfigurationTests.cs */
comment designRef /* Design: docs/design/version-mark/configuration.md */
comment verificationRef /* Verification: docs/verification/version-mark/configuration.md */
comment reqRef /* Requirements: docs/reqstream/version-mark/configuration.yaml */
part def ConfigurationSubsystem {
metadata info : SoftwareInfo {
description = "YAML configuration loading, validation, and version capture execution.";
testFiles = ("test/DemaConsulting.VersionMark.Tests/Configuration/ConfigurationTests.cs");
designFiles = ("docs/design/version-mark/configuration.md");
verificationFiles = ("docs/verification/version-mark/configuration.md");
requirementFiles = ("docs/reqstream/version-mark/configuration.yaml");
}

part versionMarkConfig : VersionMarkConfig;
part toolConfig : ToolConfig;
Expand Down
31 changes: 25 additions & 6 deletions docs/sysml2/model/version-mark/configuration/lint-issue.sysml
Original file line number Diff line number Diff line change
@@ -1,11 +1,30 @@
package VersionMark {
private import SoftwareItemMetadata::*;
private import ScalarValues::Integer;
private import ScalarValues::String;

enum def LintSeverity {
enum warning;
enum error;
}
Comment thread
Malcolmnixon marked this conversation as resolved.

part def LintIssue {
doc /* Represents a single configuration validation issue with source location. */
metadata info : SoftwareInfo {
description = "Represents a single configuration validation issue with source location.";
sourceFiles = ("src/DemaConsulting.VersionMark/Configuration/LintIssue.cs");
testFiles = ("test/DemaConsulting.VersionMark.Tests/Configuration/LintIssueTests.cs");
designFiles = ("docs/design/version-mark/configuration/lint-issue.md");
verificationFiles = ("docs/verification/version-mark/configuration/lint-issue.md");
requirementFiles = ("docs/reqstream/version-mark/configuration/lint-issue.yaml");
}

comment sourceRef /* Source: src/DemaConsulting.VersionMark/Configuration/LintIssue.cs */
comment testRef /* Test: test/DemaConsulting.VersionMark.Tests/Configuration/LintIssueTests.cs */
comment designRef /* Design: docs/design/version-mark/configuration/lint-issue.md */
comment verificationRef /* Verification: docs/verification/version-mark/configuration/lint-issue.md */
comment reqRef /* Requirements: docs/reqstream/version-mark/configuration/lint-issue.yaml */
attribute filePath : String;
attribute line : Integer;
attribute column : Integer;
attribute severity : LintSeverity;
attribute description : String;
}

// ReportIssues writes discovered issues to the Cli Context.
dependency LintIssue to Context;
}
28 changes: 22 additions & 6 deletions docs/sysml2/model/version-mark/configuration/tool-config.sysml
Original file line number Diff line number Diff line change
@@ -1,11 +1,27 @@
package VersionMark {
private import SoftwareItemMetadata::*;
private import ScalarValues::String;

part def ToolConfig {
doc /* Per-tool capture configuration (command, regex, OS-specific overrides). */
metadata info : SoftwareInfo {
description = "Per-tool capture configuration (command, regex, OS-specific overrides).";
sourceFiles = ("src/DemaConsulting.VersionMark/Configuration/VersionMarkConfig.cs");
testFiles = ("test/DemaConsulting.VersionMark.Tests/Configuration/VersionMarkConfigTests.cs");
designFiles = ("docs/design/version-mark/configuration/tool-config.md");
verificationFiles = ("docs/verification/version-mark/configuration/tool-config.md");
requirementFiles = ("docs/reqstream/version-mark/configuration/tool-config.yaml");
}

// Command dictionary, keyed by OS name ("" for default, "win", "linux", "macos"),
// split into parallel key/value lists since a native map attribute is not
// representable here.
attribute command_key : String [0..*];
attribute command_value : String [0..*];

comment sourceRef /* Source: src/DemaConsulting.VersionMark/Configuration/VersionMarkConfig.cs (ToolConfig record; no dedicated file) */
comment testRef /* Test: test/DemaConsulting.VersionMark.Tests/Configuration/VersionMarkConfigTests.cs */
comment designRef /* Design: docs/design/version-mark/configuration/tool-config.md */
comment verificationRef /* Verification: docs/verification/version-mark/configuration/tool-config.md */
comment reqRef /* Requirements: docs/reqstream/version-mark/configuration/tool-config.yaml */
// Regex dictionary, keyed by OS name ("" for default, "win", "linux", "macos"),
// split into parallel key/value lists since a native map attribute is not
// representable here.
attribute regex_key : String [0..*];
attribute regex_value : String [0..*];
}
}
Loading
Loading