From 87212cfcc127312bee8d9b749954c813130e6e86 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Fri, 6 Mar 2026 16:08:46 +0000
Subject: [PATCH 1/5] Initial plan
From 1448686571307c2ad327991c53100237052fd43a Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Fri, 6 Mar 2026 16:26:59 +0000
Subject: [PATCH 2/5] Bring in recent updates from TemplateDotNetTool template
Co-authored-by: Malcolmnixon <1863707+Malcolmnixon@users.noreply.github.com>
---
.github/ISSUE_TEMPLATE/question.yml | 82 +++++++++++++++++++
.github/workflows/build.yaml | 34 +++++---
AGENTS.md | 17 +++-
requirements.yaml | 15 ++++
.../DemaConsulting.ReqStream.Tests.csproj | 11 ++-
5 files changed, 144 insertions(+), 15 deletions(-)
create mode 100644 .github/ISSUE_TEMPLATE/question.yml
diff --git a/.github/ISSUE_TEMPLATE/question.yml b/.github/ISSUE_TEMPLATE/question.yml
new file mode 100644
index 0000000..d9b0202
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/question.yml
@@ -0,0 +1,82 @@
+---
+name: ❓ Question / Help
+description: Ask a usage question or get help with ReqStream
+title: "[Question]: "
+labels: ["question"]
+assignees: []
+body:
+ - type: markdown
+ attributes:
+ value: |
+ Thanks for reaching out! Please fill out the sections below so we can help you as quickly as possible.
+ For general discussion, you can also use
+ [GitHub Discussions](https://github.com/demaconsulting/ReqStream/discussions).
+
+ - type: textarea
+ id: question
+ attributes:
+ label: Question
+ description: A clear and concise description of what you need help with.
+ placeholder: What would you like to know or understand?
+ validations:
+ required: true
+
+ - type: textarea
+ id: what-tried
+ attributes:
+ label: What Have You Tried?
+ description: Describe what you have already attempted, including any code or configuration you have used.
+ placeholder: |
+ ```yaml
+ # Your configuration here
+ ```
+ render: yaml
+
+ - type: textarea
+ id: expected
+ attributes:
+ label: Expected Outcome
+ description: A clear and concise description of what you expected to happen or what you are trying to achieve.
+ placeholder: Describe the outcome you are looking for...
+ validations:
+ required: true
+
+ - type: input
+ id: version
+ attributes:
+ label: Tool Version
+ description: What version of ReqStream are you using?
+ placeholder: e.g., 1.0.0
+ validations:
+ required: true
+
+ - type: dropdown
+ id: dotnet-version
+ attributes:
+ label: .NET Version
+ description: What version of .NET are you using?
+ options:
+ - ".NET 8"
+ - ".NET 9"
+ - ".NET 10"
+ - Other (please specify in additional context)
+ validations:
+ required: true
+
+ - type: textarea
+ id: additional-context
+ attributes:
+ label: Additional Context
+ description: Add any other context, screenshots, or links that may help answer your question.
+ placeholder: Any additional information...
+
+ - type: checkboxes
+ id: checklist
+ attributes:
+ label: Checklist
+ description: Please confirm the following
+ options:
+ - label: I have searched existing issues and discussions to ensure this has not been answered before
+ required: true
+ - label: I have provided a clear description of my question
+ required: true
diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml
index 709eaa4..2b51ed0 100644
--- a/.github/workflows/build.yaml
+++ b/.github/workflows/build.yaml
@@ -90,7 +90,7 @@ jobs:
strategy:
matrix:
- os: [windows-latest, ubuntu-latest]
+ os: [windows-latest, ubuntu-latest, macos-latest]
runs-on: ${{ matrix.os }}
@@ -102,6 +102,8 @@ jobs:
- name: Checkout
uses: actions/checkout@v6
+ with:
+ fetch-depth: 0
- name: Setup dotnet
uses: actions/setup-dotnet@v5
@@ -124,8 +126,8 @@ jobs:
run: |
mkdir -p artifacts
echo "Capturing tool versions..."
- # Create short job ID: build-win, build-ubuntu
- OS_SHORT=$(echo "${{ matrix.os }}" | sed 's/windows-latest/win/;s/ubuntu-latest/ubuntu/')
+ # Create short job ID: build-windows, build-ubuntu, build-macos
+ OS_SHORT=$(echo "${{ matrix.os }}" | sed 's/-latest//')
JOB_ID="build-${OS_SHORT}"
dotnet versionmark --capture --job-id "${JOB_ID}" \
--output "artifacts/versionmark-${JOB_ID}.json" -- \
@@ -148,8 +150,11 @@ jobs:
dotnet restore
- name: Start Sonar Scanner
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: >
- dotnet sonarscanner begin
+ dotnet dotnet-sonarscanner
+ begin
/k:"demaconsulting_ReqStream"
/o:"demaconsulting"
/d:sonar.token="${{ secrets.SONAR_TOKEN }}"
@@ -174,16 +179,19 @@ jobs:
--results-directory artifacts
- name: End Sonar Scanner
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: >
- dotnet sonarscanner end
+ dotnet dotnet-sonarscanner
+ end
/d:sonar.token="${{ secrets.SONAR_TOKEN }}"
- name: Create Dotnet Tool
run: >
dotnet pack
--no-build
- --configuration Release
- --property:Version=${{ inputs.version }}
+ --no-restore
+ --property:PackageVersion=${{ inputs.version }}
# === UPLOAD ARTIFACTS ===
# This section uploads all build artifacts.
@@ -230,7 +238,6 @@ jobs:
languages: csharp
queries: security-and-quality
config-file: ./.github/codeql-config.yml
- build-mode: manual
- name: Setup dotnet
uses: actions/setup-dotnet@v5
@@ -288,7 +295,7 @@ jobs:
strategy:
matrix:
- os: [windows-latest, ubuntu-latest]
+ os: [windows-latest, ubuntu-latest, macos-latest]
dotnet-version: ['8.x', '9.x', '10.x']
steps:
@@ -336,8 +343,8 @@ jobs:
run: |
mkdir -p artifacts
echo "Capturing tool versions..."
- # Create short job ID: int-win-8, int-win-9, int-ubuntu-8, etc.
- OS_SHORT=$(echo "${{ matrix.os }}" | sed 's/windows-latest/win/;s/ubuntu-latest/ubuntu/')
+ # Create short job ID: int-windows-8, int-ubuntu-9, int-macos-10, etc.
+ OS_SHORT=$(echo "${{ matrix.os }}" | sed 's/-latest//')
DOTNET_SHORT=$(echo "${{ matrix.dotnet-version }}" | sed 's/\.x$//')
JOB_ID="int-${OS_SHORT}-${DOTNET_SHORT}"
dotnet versionmark --capture --job-id "${JOB_ID}" \
@@ -491,7 +498,6 @@ jobs:
--enforce
- name: Generate CodeQL Quality Report with SarifMark
- shell: bash
run: >
dotnet sarifmark
--sarif artifacts/csharp.sarif
@@ -583,6 +589,7 @@ jobs:
run: >
dotnet pandoc
--defaults docs/quality/definition.yaml
+ --filter node_modules/.bin/mermaid-filter.cmd
--metadata version="${{ inputs.version }}"
--metadata date="$(date +'%Y-%m-%d')"
--output docs/quality/quality.html
@@ -592,6 +599,7 @@ jobs:
run: >
dotnet pandoc
--defaults docs/requirements/definition.yaml
+ --filter node_modules/.bin/mermaid-filter.cmd
--metadata version="${{ inputs.version }}"
--metadata date="$(date +'%Y-%m-%d')"
--output docs/requirements/requirements.html
@@ -601,6 +609,7 @@ jobs:
run: >
dotnet pandoc
--defaults docs/justifications/definition.yaml
+ --filter node_modules/.bin/mermaid-filter.cmd
--metadata version="${{ inputs.version }}"
--metadata date="$(date +'%Y-%m-%d')"
--output docs/justifications/justifications.html
@@ -610,6 +619,7 @@ jobs:
run: >
dotnet pandoc
--defaults docs/tracematrix/definition.yaml
+ --filter node_modules/.bin/mermaid-filter.cmd
--metadata version="${{ inputs.version }}"
--metadata date="$(date +'%Y-%m-%d')"
--output docs/tracematrix/tracematrix.html
diff --git a/AGENTS.md b/AGENTS.md
index 9676c4d..07447b4 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -12,6 +12,18 @@ written in YAML files.
- **Code Quality Agent** - Enforces linting, static analysis, and security standards
- **Repo Consistency Agent** - Ensures downstream repositories remain consistent with template patterns
+## Agent Selection Guide
+
+- Fix a bug → **Software Developer**
+- Add a new feature → **Requirements Agent** → **Software Developer** → **Test Developer**
+- Write a test → **Test Developer**
+- Fix linting or static analysis issues → **Code Quality Agent**
+- Update documentation → **Technical Writer**
+- Add or update requirements → **Requirements Agent**
+- Ensure test coverage linkage in `requirements.yaml` → **Requirements Agent**
+- Run security scanning or address CodeQL alerts → **Code Quality Agent**
+- Propagate template changes → **Repo Consistency Agent**
+
## Tech Stack
- C# latest, .NET 8.0/9.0/10.0, dotnet CLI, NuGet
@@ -36,6 +48,7 @@ evidence. This is critical for platform and framework requirements - **do not re
- `windows@TestName` - proves the test passed on a Windows platform
- `ubuntu@TestName` - proves the test passed on a Linux (Ubuntu) platform
+- `macos@TestName` - proves the test passed on a macOS platform
- `net8.0@TestName` - proves the test passed under the .NET 8 target framework
- `net9.0@TestName` - proves the test passed under the .NET 9 target framework
- `net10.0@TestName` - proves the test passed under the .NET 10 target framework
@@ -102,9 +115,9 @@ build.bat # Windows
## CI/CD
- **Quality Checks**: Markdown lint, spell check, YAML lint
-- **Build**: Multi-platform (Windows/Linux)
+- **Build**: Multi-platform (Windows/Linux/macOS)
- **CodeQL**: Security scanning
-- **Integration Tests**: .NET 8/9/10 on Windows/Linux
+- **Integration Tests**: .NET 8/9/10 on Windows/Linux/macOS
- **Documentation**: Auto-generated via Pandoc + Weasyprint
## Common Tasks
diff --git a/requirements.yaml b/requirements.yaml
index c16dffb..a05d146 100644
--- a/requirements.yaml
+++ b/requirements.yaml
@@ -19,6 +19,7 @@
# Source filter prefixes:
# windows@TestName - proves the test passed on a Windows platform
# ubuntu@TestName - proves the test passed on a Linux (Ubuntu) platform
+# macos@TestName - proves the test passed on a macOS platform
# net8.0@TestName - proves the test passed under the .NET 8 target framework
# net9.0@TestName - proves the test passed under the .NET 9 target framework
# net10.0@TestName - proves the test passed under the .NET 10 target framework
@@ -500,6 +501,20 @@ sections:
- "ubuntu@ReqStream_TagsFiltering"
- "ubuntu@ReqStream_EnforcementMode"
+ - id: ReqStream-Plt-MacOS
+ title: The tool shall run on macOS operating systems.
+ justification: |
+ macOS support is essential for developers using Apple platforms who need to run
+ ReqStream locally and in CI/CD pipelines on macOS agents.
+ tags:
+ - platform
+ tests:
+ - "macos@ReqStream_RequirementsProcessing"
+ - "macos@ReqStream_TraceMatrix"
+ - "macos@ReqStream_ReportExport"
+ - "macos@ReqStream_TagsFiltering"
+ - "macos@ReqStream_EnforcementMode"
+
- id: ReqStream-Plt-Net8
title: The tool shall support .NET 8.0 runtime.
justification: |
diff --git a/test/DemaConsulting.ReqStream.Tests/DemaConsulting.ReqStream.Tests.csproj b/test/DemaConsulting.ReqStream.Tests/DemaConsulting.ReqStream.Tests.csproj
index ca0eef7..43307da 100644
--- a/test/DemaConsulting.ReqStream.Tests/DemaConsulting.ReqStream.Tests.csproj
+++ b/test/DemaConsulting.ReqStream.Tests/DemaConsulting.ReqStream.Tests.csproj
@@ -9,10 +9,10 @@
false
true
+ true
true
- true
true
true
latest
@@ -20,6 +20,10 @@
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
@@ -31,6 +35,11 @@
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
From e3f6d6429159e9218cecf34943bfb86b35854d24 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Fri, 6 Mar 2026 16:48:24 +0000
Subject: [PATCH 3/5] Restore build-mode: manual to CodeQL init step (template
PR #55)
Co-authored-by: Malcolmnixon <1863707+Malcolmnixon@users.noreply.github.com>
---
.github/workflows/build.yaml | 1 +
1 file changed, 1 insertion(+)
diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml
index 2b51ed0..34a02ef 100644
--- a/.github/workflows/build.yaml
+++ b/.github/workflows/build.yaml
@@ -236,6 +236,7 @@ jobs:
uses: github/codeql-action/init@v4
with:
languages: csharp
+ build-mode: manual
queries: security-and-quality
config-file: ./.github/codeql-config.yml
From fe0d1104b4ca3adccf8793535a89936d0fabdfde Mon Sep 17 00:00:00 2001
From: Malcolm Nixon
Date: Fri, 6 Mar 2026 12:17:46 -0500
Subject: [PATCH 4/5] Update .github/workflows/build.yaml
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
---
.github/workflows/build.yaml | 1 +
1 file changed, 1 insertion(+)
diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml
index 34a02ef..ddebc0f 100644
--- a/.github/workflows/build.yaml
+++ b/.github/workflows/build.yaml
@@ -191,6 +191,7 @@ jobs:
dotnet pack
--no-build
--no-restore
+ --configuration Release
--property:PackageVersion=${{ inputs.version }}
# === UPLOAD ARTIFACTS ===
From af9c2a53960bb3ef50197e6de10e1ff357397301 Mon Sep 17 00:00:00 2001
From: Malcolm Nixon
Date: Fri, 6 Mar 2026 12:18:24 -0500
Subject: [PATCH 5/5] Update .github/ISSUE_TEMPLATE/question.yml
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
---
.github/ISSUE_TEMPLATE/question.yml | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/.github/ISSUE_TEMPLATE/question.yml b/.github/ISSUE_TEMPLATE/question.yml
index d9b0202..1ae9c1d 100644
--- a/.github/ISSUE_TEMPLATE/question.yml
+++ b/.github/ISSUE_TEMPLATE/question.yml
@@ -27,9 +27,10 @@ body:
label: What Have You Tried?
description: Describe what you have already attempted, including any code or configuration you have used.
placeholder: |
- ```yaml
# Your configuration here
- ```
+ # e.g.:
+ # setting1: value
+ # setting2: value
render: yaml
- type: textarea