diff --git a/.config/dotnet-tools.json b/.config/dotnet-tools.json index b687954..e320391 100644 --- a/.config/dotnet-tools.json +++ b/.config/dotnet-tools.json @@ -33,7 +33,7 @@ ] }, "demaconsulting.reqstream": { - "version": "1.10.0", + "version": "1.11.0", "commands": [ "reqstream" ] diff --git a/docs/reqstream/quality.yaml b/docs/reqstream/quality.yaml new file mode 100644 index 0000000..52b1658 --- /dev/null +++ b/docs/reqstream/quality.yaml @@ -0,0 +1,108 @@ +--- +# Quality/process requirements grouping TemplateDotNetLibrary's use of off-the-shelf +# (OTS) process tooling. These requirements exist so that OTS-derived requirements +# (which describe capabilities the repository's build/quality pipeline relies on +# from third-party tools, not user-visible library functionality) are not reported +# as orphans by `dotnet reqstream --requirements requirements.yaml --enforce`. +sections: + - title: Quality Requirements + requirements: + - id: Quality-TestInfrastructure + title: The repository shall rely on xUnit to execute and report automated test results. + tags: [quality] + justification: | + Automated testing depends on xUnit's test execution and reporting + capabilities. This grouping requirement links the xUnit OTS requirements + to the quality root so they participate in orphan detection without being + falsely reported as disconnected from library functionality. + children: + - Template-OTS-xUnit-Execute + - Template-OTS-xUnit-Report + + - id: Quality-BuildIntegrity + title: >- + The repository's build pipeline shall rely on BuildMark and VersionMark + to validate tool versions and enforce build integrity. + tags: [quality] + justification: | + CI/CD reliability depends on BuildMark's build-integrity checks and + VersionMark's version-tracking capabilities. This grouping requirement + links those OTS requirements to the quality root so they participate in + orphan detection without being falsely reported as disconnected from + library functionality. + children: + - Template-OTS-BuildMark + - Template-OTS-VersionMark + - Template-OTS-VersionMark-Lint + + - id: Quality-StaticAnalysis + title: The repository shall rely on SarifMark and SonarMark to enforce static-analysis quality gates. + tags: [quality] + justification: | + Code quality assurance depends on SarifMark's SARIF-based enforcement and + SonarMark's SonarCloud integration. This grouping requirement links those + OTS requirements to the quality root so they participate in orphan + detection without being falsely reported as disconnected from library + functionality. + children: + - Template-OTS-SarifMark + - Template-OTS-SarifMark-Enforcement + - Template-OTS-SonarMark + + - id: Quality-PeerReview + title: The repository shall rely on ReviewMark to enforce peer-review tracking and reporting. + tags: [quality] + justification: | + Peer-review compliance depends on ReviewMark's indexing, enforcement, + elaboration, linting, and directory-override capabilities. This grouping + requirement links those OTS requirements to the quality root so they + participate in orphan detection without being falsely reported as + disconnected from library functionality. + children: + - Template-OTS-ReviewMark + - Template-OTS-ReviewMark-IndexScan + - Template-OTS-ReviewMark-Enforce + - Template-OTS-ReviewMark-Elaborate + - Template-OTS-ReviewMark-Lint + - Template-OTS-ReviewMark-DirectoryOverride + + - id: Quality-DocumentationGeneration + title: The repository shall rely on Pandoc and WeasyPrint to generate HTML and PDF documentation. + tags: [quality] + justification: | + Documentation generation depends on Pandoc's format conversion and + WeasyPrint's PDF rendering. This grouping requirement links those OTS + requirements to the quality root so they participate in orphan detection + without being falsely reported as disconnected from library functionality. + children: + - Template-OTS-Pandoc + - Template-OTS-WeasyPrint + + - id: Quality-RequirementsTraceability + title: >- + The repository shall rely on ReqStream and FileAssert to validate + requirements traceability and generated documentation. + tags: [quality] + justification: | + Requirements traceability depends on ReqStream's linting and reporting + capabilities, and generated-document verification depends on FileAssert. + This grouping requirement links those OTS requirements to the quality + root so they participate in orphan detection without being falsely + reported as disconnected from library functionality. + children: + - Template-OTS-ReqStream + - Template-OTS-ReqStream-Lint + - Template-OTS-FileAssert + + - id: Quality-SoftwareStructureModeling + title: The repository shall rely on SysML2Tools to lint and render software-structure models. + tags: [quality] + justification: | + Software-structure documentation depends on SysML2Tools' model-linting + and diagram-rendering capabilities. This grouping requirement links those + OTS requirements to the quality root so they participate in orphan + detection without being falsely reported as disconnected from library + functionality. + children: + - Template-OTS-SysML2Tools-Lint + - Template-OTS-SysML2Tools-Render diff --git a/docs/reqstream/template-dot-net-library.yaml b/docs/reqstream/template-dot-net-library.yaml index b0c38f0..47cb2ee 100644 --- a/docs/reqstream/template-dot-net-library.yaml +++ b/docs/reqstream/template-dot-net-library.yaml @@ -9,6 +9,7 @@ sections: requirements: - id: Template-Lib-Greeting title: The library shall generate a greeting string when given a name. + tags: [system] justification: | Provides a simple demonstration of library functionality following .NET library best practices for DEMA Consulting libraries. @@ -20,6 +21,7 @@ sections: - id: Template-Lib-GreetingFormat title: The library shall return a greeting string in the format "{prefix}, {name}!". + tags: [system] justification: | The format is the core observable contract of the library: callers depend on this specific structure in documentation examples and integration code. @@ -31,6 +33,7 @@ sections: - id: Template-Lib-DefaultPrefix title: The library shall use "Hello" as the default greeting prefix. + tags: [system] justification: | Callers constructing the library without a prefix argument need a predictable default greeting to rely on in documentation and examples. @@ -41,6 +44,7 @@ sections: - id: Template-Lib-CustomPrefix title: The library shall support a customizable greeting prefix. + tags: [system] justification: | Consumers may need to produce greetings with a prefix other than the default, so the library must allow the prefix to be specified at @@ -53,6 +57,7 @@ sections: - id: Template-Lib-Prefix title: The library shall expose the configured greeting prefix via a read-only property. + tags: [system] justification: | Callers may need to inspect the prefix configured at construction time without re-specifying it or relying on the greeting output format to infer it. @@ -63,6 +68,7 @@ sections: - id: Template-Lib-ValidationNull-DemoMethod title: The library shall reject a null name argument to DemoMethod with ArgumentNullException. + tags: [system] justification: | Passing null to DemoMethod is a programming error. Throwing ArgumentNullException immediately surfaces the mistake to callers and prevents obscure failures deeper in @@ -74,6 +80,7 @@ sections: - id: Template-Lib-ValidationNull-Constructor title: The library shall reject a null prefix argument to the constructor with ArgumentNullException. + tags: [system] justification: | Passing null to the constructor is a programming error. Throwing ArgumentNullException immediately surfaces the mistake and prevents invalid instances from being created. @@ -84,6 +91,7 @@ sections: - id: Template-Lib-ValidationEmpty-DemoMethod title: The library shall reject an empty-string name argument to DemoMethod with ArgumentException. + tags: [system] justification: | Passing an empty string to DemoMethod is a programming error. Throwing ArgumentException immediately surfaces the mistake and prevents malformed output such as "Hello, !". @@ -94,6 +102,7 @@ sections: - id: Template-Lib-ValidationEmpty-Constructor title: The library shall reject an empty-string prefix argument to the constructor with ArgumentException. + tags: [system] justification: | Passing an empty string to the constructor is a programming error. Throwing ArgumentException immediately surfaces the mistake and prevents malformed output such as ", World!". diff --git a/docs/reqstream/template-dot-net-library/platform-requirements.yaml b/docs/reqstream/template-dot-net-library/platform-requirements.yaml index 1dcae49..606de29 100644 --- a/docs/reqstream/template-dot-net-library/platform-requirements.yaml +++ b/docs/reqstream/template-dot-net-library/platform-requirements.yaml @@ -22,6 +22,7 @@ sections: requirements: - id: Template-Platform-Windows title: The library shall build and run on Windows platforms. + tags: [system] justification: | DEMA Consulting libraries must support Windows as a major development platform. tests: @@ -30,6 +31,7 @@ sections: - id: Template-Platform-Linux title: The library shall build and run on Linux platforms. + tags: [system] justification: | DEMA Consulting libraries must support Linux for CI/CD and containerized environments. tests: @@ -38,6 +40,7 @@ sections: - id: Template-Platform-MacOS title: The library shall build and run on macOS platforms. + tags: [system] justification: | DEMA Consulting libraries must support macOS for developers using Apple platforms. tests: @@ -46,6 +49,7 @@ sections: - id: Template-Platform-Net8 title: The library shall support .NET 8 runtime. + tags: [system] justification: | .NET 8 is an LTS release providing long-term stability for enterprise users. tests: @@ -53,6 +57,7 @@ sections: - id: Template-Platform-Net9 title: The library shall support .NET 9 runtime. + tags: [system] justification: | .NET 9 support enables users to leverage the latest .NET features. tests: @@ -60,6 +65,7 @@ sections: - id: Template-Platform-Net10 title: The library shall support .NET 10 runtime. + tags: [system] justification: | .NET 10 support ensures the library remains compatible with the latest .NET ecosystem. tests: @@ -67,6 +73,7 @@ sections: - id: Template-Platform-NetStd20 title: The library shall support the .NET Standard 2.0 target framework. + tags: [system] justification: | .NET Standard 2.0 is a widely-supported target framework that enables the library to be used in MSBuild extensions and other tooling that requires .NET Standard compatibility. diff --git a/requirements.yaml b/requirements.yaml index 8567932..aa6cd47 100644 --- a/requirements.yaml +++ b/requirements.yaml @@ -1,6 +1,13 @@ --- # Root requirements file - includes all system, unit, platform, and OTS requirements +# root-tags: any requirement not (transitively) linked as a child of a requirement +# tagged with one of these tags is reported as an orphan by +# `dotnet reqstream --requirements requirements.yaml --enforce`. This catches +# low-level implementation requirements (and tests/code) that were added without +# ever being connected to user-visible functionality. +root-tags: [system, quality] includes: + - docs/reqstream/quality.yaml - docs/reqstream/template-dot-net-library.yaml - docs/reqstream/template-dot-net-library/demo.yaml - docs/reqstream/template-dot-net-library/platform-requirements.yaml