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