From cbb597ff27144baca5d9111c7e3094b5b70e81c5 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 1 Apr 2026 14:03:59 +0000 Subject: [PATCH 1/7] Initial plan From cc70339d9c5c3f848b4057eca5cd5dd535526407 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 1 Apr 2026 14:23:29 +0000 Subject: [PATCH 2/7] feat: update repository structure to comply with updated standards - Restructure docs/reqstream/ with io/ subsystem, ots/ subfolder, and renamed unit files (drop unit- prefix) - Restructure docs/design/ with io/ subsystem folder - Create system.md, io/io.md, io/io.yaml new documents - Update introduction.md with Software Structure and Folder Layout sections - Update requirements.yaml includes to new paths - Update .reviewmark.yaml with new paths and standard review-sets Agent-Logs-Url: https://github.com/demaconsulting/TestResults/sessions/111713c6-7af0-44d7-aa43-064c63054c88 Co-authored-by: Malcolmnixon <1863707+Malcolmnixon@users.noreply.github.com> --- .reviewmark.yaml | 126 +++++++++++++----- docs/design/introduction.md | 31 +++++ docs/design/io/io.md | 39 ++++++ docs/design/{ => io}/junit-serializer.md | 0 docs/design/{ => io}/serializer.md | 0 docs/design/{ => io}/trx-serializer.md | 0 docs/design/system.md | 68 ++++++++++ docs/reqstream/io/io.yaml | 14 ++ .../junit-serializer.yaml} | 0 .../serializer.yaml} | 0 .../trx-serializer.yaml} | 0 .../buildmark.yaml} | 0 .../{ots-mstest.yaml => ots/mstest.yaml} | 0 .../pandoctool.yaml} | 0 .../reqstream.yaml} | 0 .../reviewmark.yaml} | 0 .../sarifmark.yaml} | 0 .../sonarmark.yaml} | 0 .../sonarscanner.yaml} | 0 .../versionmark.yaml} | 0 .../weasyprinttool.yaml} | 0 docs/reqstream/{runtime.yaml => system.yaml} | 0 ...it-test-outcome.yaml => test-outcome.yaml} | 0 ...unit-test-result.yaml => test-result.yaml} | 0 ...it-test-results.yaml => test-results.yaml} | 0 requirements.yaml | 37 ++--- 26 files changed, 267 insertions(+), 48 deletions(-) create mode 100644 docs/design/io/io.md rename docs/design/{ => io}/junit-serializer.md (100%) rename docs/design/{ => io}/serializer.md (100%) rename docs/design/{ => io}/trx-serializer.md (100%) create mode 100644 docs/design/system.md create mode 100644 docs/reqstream/io/io.yaml rename docs/reqstream/{unit-junit-serializer.yaml => io/junit-serializer.yaml} (100%) rename docs/reqstream/{unit-serializer.yaml => io/serializer.yaml} (100%) rename docs/reqstream/{unit-trx-serializer.yaml => io/trx-serializer.yaml} (100%) rename docs/reqstream/{ots-buildmark.yaml => ots/buildmark.yaml} (100%) rename docs/reqstream/{ots-mstest.yaml => ots/mstest.yaml} (100%) rename docs/reqstream/{ots-pandoctool.yaml => ots/pandoctool.yaml} (100%) rename docs/reqstream/{ots-reqstream.yaml => ots/reqstream.yaml} (100%) rename docs/reqstream/{ots-reviewmark.yaml => ots/reviewmark.yaml} (100%) rename docs/reqstream/{ots-sarifmark.yaml => ots/sarifmark.yaml} (100%) rename docs/reqstream/{ots-sonarmark.yaml => ots/sonarmark.yaml} (100%) rename docs/reqstream/{ots-sonarscanner.yaml => ots/sonarscanner.yaml} (100%) rename docs/reqstream/{ots-versionmark.yaml => ots/versionmark.yaml} (100%) rename docs/reqstream/{ots-weasyprinttool.yaml => ots/weasyprinttool.yaml} (100%) rename docs/reqstream/{runtime.yaml => system.yaml} (100%) rename docs/reqstream/{unit-test-outcome.yaml => test-outcome.yaml} (100%) rename docs/reqstream/{unit-test-result.yaml => test-result.yaml} (100%) rename docs/reqstream/{unit-test-results.yaml => test-results.yaml} (100%) diff --git a/.reviewmark.yaml b/.reviewmark.yaml index e8d901c..3e1dcf6 100644 --- a/.reviewmark.yaml +++ b/.reviewmark.yaml @@ -3,15 +3,15 @@ # This file defines which files require review, where the evidence store is located, # and how files are grouped into named review-sets following software unit boundaries. -# Patterns identifying all files that require review. -# Processed in order; prefix a pattern with '!' to exclude. needs-review: - - "**/*.cs" # All C# source and test files - - "docs/reqstream/**/*.yaml" # Requirements files - - "!**/obj/**" # Exclude build output - - "!**/bin/**" # Exclude build output - - "!node_modules/**" # Exclude npm dependencies - - "!**/.venv/**" # Exclude Python virtual environment + - "requirements.yaml" + - "**/*.cs" + - "docs/design/**/*.md" + - "docs/reqstream/**/*.yaml" + - "!**/obj/**" + - "!**/bin/**" + - "!node_modules/**" + - "!**/.venv/**" # Evidence source: review data and index.json are located in the root of the 'reviews' # branch of this repository, accessed through the GitHub public HTTPS raw content endpoint. @@ -23,11 +23,76 @@ evidence-source: # Review sets grouping files by logical unit of review. reviews: - # Software unit reviews - one per class + - id: TestResults-System + title: Review of TestResults System + paths: + - "requirements.yaml" + - "docs/reqstream/system.yaml" + - "docs/reqstream/platform-requirements.yaml" + - "docs/design/introduction.md" + - "docs/design/system.md" + + - id: TestResults-Design + title: Review of TestResults Design Documentation + paths: + - "docs/design/introduction.md" + - "docs/design/system.md" + - "docs/design/test-outcome.md" + - "docs/design/test-result.md" + - "docs/design/test-results.md" + - "docs/design/io/io.md" + - "docs/design/io/serializer.md" + - "docs/design/io/trx-serializer.md" + - "docs/design/io/junit-serializer.md" + + - id: TestResults-AllRequirements + title: Review of All TestResults Requirements + paths: + - "requirements.yaml" + - "docs/reqstream/system.yaml" + - "docs/reqstream/platform-requirements.yaml" + - "docs/reqstream/test-outcome.yaml" + - "docs/reqstream/test-result.yaml" + - "docs/reqstream/test-results.yaml" + - "docs/reqstream/io/io.yaml" + - "docs/reqstream/io/serializer.yaml" + - "docs/reqstream/io/trx-serializer.yaml" + - "docs/reqstream/io/junit-serializer.yaml" + - "docs/reqstream/ots/mstest.yaml" + - "docs/reqstream/ots/reqstream.yaml" + - "docs/reqstream/ots/buildmark.yaml" + - "docs/reqstream/ots/versionmark.yaml" + - "docs/reqstream/ots/sarifmark.yaml" + - "docs/reqstream/ots/sonarmark.yaml" + - "docs/reqstream/ots/reviewmark.yaml" + - "docs/reqstream/ots/sonarscanner.yaml" + - "docs/reqstream/ots/pandoctool.yaml" + - "docs/reqstream/ots/weasyprinttool.yaml" + + - id: TestResults-IO + title: Review of TestResults IO Subsystem + paths: + - "docs/reqstream/io/io.yaml" + - "docs/reqstream/io/serializer.yaml" + - "docs/reqstream/io/trx-serializer.yaml" + - "docs/reqstream/io/junit-serializer.yaml" + - "docs/design/io/io.md" + - "docs/design/io/serializer.md" + - "docs/design/io/trx-serializer.md" + - "docs/design/io/junit-serializer.md" + - "src/DemaConsulting.TestResults/IO/Serializer.cs" + - "src/DemaConsulting.TestResults/IO/SerializerHelpers.cs" + - "src/DemaConsulting.TestResults/IO/TrxSerializer.cs" + - "src/DemaConsulting.TestResults/IO/JUnitSerializer.cs" + - "test/DemaConsulting.TestResults.Tests/IO/SerializerTests.cs" + - "test/DemaConsulting.TestResults.Tests/IO/TrxSerializerTests.cs" + - "test/DemaConsulting.TestResults.Tests/IO/TrxExampleTests.cs" + - "test/DemaConsulting.TestResults.Tests/IO/JUnitSerializerTests.cs" + - id: TestResults-TestOutcome title: Review of TestResults TestOutcome Unit paths: - - "docs/reqstream/unit-test-outcome.yaml" + - "docs/reqstream/test-outcome.yaml" - "docs/design/test-outcome.md" - "src/DemaConsulting.TestResults/TestOutcome.cs" - "test/DemaConsulting.TestResults.Tests/TestOutcomeTests.cs" @@ -35,7 +100,7 @@ reviews: - id: TestResults-TestResult title: Review of TestResults TestResult Unit paths: - - "docs/reqstream/unit-test-result.yaml" + - "docs/reqstream/test-result.yaml" - "docs/design/test-result.md" - "src/DemaConsulting.TestResults/TestResult.cs" - "test/DemaConsulting.TestResults.Tests/TestResultTests.cs" @@ -43,7 +108,7 @@ reviews: - id: TestResults-TestResults title: Review of TestResults TestResults Unit paths: - - "docs/reqstream/unit-test-results.yaml" + - "docs/reqstream/test-results.yaml" - "docs/design/test-results.md" - "src/DemaConsulting.TestResults/TestResults.cs" - "test/DemaConsulting.TestResults.Tests/TestResultsTests.cs" @@ -51,8 +116,8 @@ reviews: - id: TestResults-Serializer title: Review of TestResults Serializer Unit paths: - - "docs/reqstream/unit-serializer.yaml" - - "docs/design/serializer.md" + - "docs/reqstream/io/serializer.yaml" + - "docs/design/io/serializer.md" - "src/DemaConsulting.TestResults/IO/Serializer.cs" - "src/DemaConsulting.TestResults/IO/SerializerHelpers.cs" - "test/DemaConsulting.TestResults.Tests/IO/SerializerTests.cs" @@ -60,35 +125,36 @@ reviews: - id: TestResults-TrxSerializer title: Review of TestResults TrxSerializer Unit paths: - - "docs/reqstream/unit-trx-serializer.yaml" - - "docs/design/trx-serializer.md" + - "docs/reqstream/io/trx-serializer.yaml" + - "docs/design/io/trx-serializer.md" - "src/DemaConsulting.TestResults/IO/TrxSerializer.cs" - "test/DemaConsulting.TestResults.Tests/IO/TrxSerializerTests.cs" - "test/DemaConsulting.TestResults.Tests/IO/TrxExampleTests.cs" - - "test/DemaConsulting.TestResults.Tests/TestHelpers.cs" - id: TestResults-JUnitSerializer title: Review of TestResults JUnitSerializer Unit paths: - - "docs/reqstream/unit-junit-serializer.yaml" - - "docs/design/junit-serializer.md" + - "docs/reqstream/io/junit-serializer.yaml" + - "docs/design/io/junit-serializer.md" - "src/DemaConsulting.TestResults/IO/JUnitSerializer.cs" - "test/DemaConsulting.TestResults.Tests/IO/JUnitSerializerTests.cs" - # Platform and OTS dependency reviews - id: Platform-Runtime - title: Review of Platform and Runtime Support Requirements + title: Review of Platform and Runtime Requirements paths: - - "docs/reqstream/runtime.yaml" + - "docs/reqstream/system.yaml" - "docs/reqstream/platform-requirements.yaml" - id: OTS-Dependencies - title: Review of Off-The-Shelf Software Dependencies + title: Review of OTS Software Dependencies paths: - - "docs/reqstream/ots-mstest.yaml" - - "docs/reqstream/ots-reqstream.yaml" - - "docs/reqstream/ots-buildmark.yaml" - - "docs/reqstream/ots-versionmark.yaml" - - "docs/reqstream/ots-sarifmark.yaml" - - "docs/reqstream/ots-sonarmark.yaml" - - "docs/reqstream/ots-reviewmark.yaml" + - "docs/reqstream/ots/mstest.yaml" + - "docs/reqstream/ots/reqstream.yaml" + - "docs/reqstream/ots/buildmark.yaml" + - "docs/reqstream/ots/versionmark.yaml" + - "docs/reqstream/ots/sarifmark.yaml" + - "docs/reqstream/ots/sonarmark.yaml" + - "docs/reqstream/ots/reviewmark.yaml" + - "docs/reqstream/ots/sonarscanner.yaml" + - "docs/reqstream/ots/pandoctool.yaml" + - "docs/reqstream/ots/weasyprinttool.yaml" diff --git a/docs/design/introduction.md b/docs/design/introduction.md index ec67216..f16163b 100644 --- a/docs/design/introduction.md +++ b/docs/design/introduction.md @@ -52,3 +52,34 @@ actual implementation, or by raising a defect against the code. [user-guide]: https://github.com/demaconsulting/TestResults [requirements-doc]: https://github.com/demaconsulting/TestResults + +## Software Structure + +The TestResults library is organized as follows: + +| Item | Type | Description | +| ---- | ---- | ----------- | +| TestResults Library | System | Complete test result I/O library | +| IO | Subsystem | Serialization and format detection | +| Serializer | Unit | Format-detection facade | +| TrxSerializer | Unit | TRX format read/write | +| JUnitSerializer | Unit | JUnit XML format read/write | +| TestOutcome | Unit | Test outcome enumeration | +| TestResult | Unit | Single test result data | +| TestResults | Unit | Collection of test results | + +## Folder Layout + +The source code is organized to mirror the design documentation structure: + +```text +src/DemaConsulting.TestResults/ +├── IO/ (IO Subsystem) +│ ├── Serializer.cs +│ ├── SerializerHelpers.cs +│ ├── TrxSerializer.cs +│ └── JUnitSerializer.cs +├── TestOutcome.cs +├── TestResult.cs +└── TestResults.cs +``` diff --git a/docs/design/io/io.md b/docs/design/io/io.md new file mode 100644 index 0000000..0d9ce6c --- /dev/null +++ b/docs/design/io/io.md @@ -0,0 +1,39 @@ +# IO Subsystem Design + +## Overview + +The IO subsystem provides serialization and deserialization of test result data +in multiple formats. It acts as the interface between the in-memory +[TestResults](../test-results.md) model and external test result files. + +## Subsystem Structure + +The IO subsystem consists of the following units: + +| Unit | File | Description | +| ---- | ---- | ----------- | +| [Serializer](serializer.md) | `IO/Serializer.cs` | Format-detection facade | +| [TrxSerializer](trx-serializer.md) | `IO/TrxSerializer.cs` | TRX format implementation | +| [JUnitSerializer](junit-serializer.md) | `IO/JUnitSerializer.cs` | JUnit XML format implementation | + +## Responsibilities + +The IO subsystem is responsible for: + +- Detecting the format of test result files automatically +- Deserializing test result files into the in-memory model +- Serializing the in-memory model to test result files +- Converting between different test result formats + +## Dependencies + +The IO subsystem depends on: + +- **Model layer**: [TestResults](../test-results.md), [TestResult](../test-result.md), + [TestOutcome](../test-outcome.md) +- **External**: `System.Xml.Linq` for XML processing + +## Related Requirements + +Requirements for the IO subsystem are in +[docs/reqstream/io/](../../reqstream/io/). diff --git a/docs/design/junit-serializer.md b/docs/design/io/junit-serializer.md similarity index 100% rename from docs/design/junit-serializer.md rename to docs/design/io/junit-serializer.md diff --git a/docs/design/serializer.md b/docs/design/io/serializer.md similarity index 100% rename from docs/design/serializer.md rename to docs/design/io/serializer.md diff --git a/docs/design/trx-serializer.md b/docs/design/io/trx-serializer.md similarity index 100% rename from docs/design/trx-serializer.md rename to docs/design/io/trx-serializer.md diff --git a/docs/design/system.md b/docs/design/system.md new file mode 100644 index 0000000..67f6a26 --- /dev/null +++ b/docs/design/system.md @@ -0,0 +1,68 @@ +# System Design + +## Overview + +The TestResults library is a .NET library for reading and writing test result +files in multiple formats. It provides a format-agnostic in-memory model and +format-specific serialization implementations. + +## System Architecture + +The TestResults library uses a layered architecture: + +```text +┌─────────────────────────────────────────────────┐ +│ Calling Code │ +├─────────────────────────────────────────────────┤ +│ IO Subsystem (Serialization) │ +│ ┌─────────────┐ ┌──────────────┐ ┌────────┐ │ +│ │ Serializer │ │TrxSerializer │ │JUnit │ │ +│ │ (facade) │ │ │ │Ser. │ │ +│ └─────────────┘ └──────────────┘ └────────┘ │ +├─────────────────────────────────────────────────┤ +│ Model Layer │ +│ ┌─────────────┐ ┌──────────────┐ ┌────────┐ │ +│ │ TestResults │ │ TestResult │ │TestOut │ │ +│ │ (collection)│ │ (one test) │ │come │ │ +│ └─────────────┘ └──────────────┘ └────────┘ │ +└─────────────────────────────────────────────────┘ +``` + +## Software Items + +The TestResults system contains the following software items: + +| Item | Type | Description | +| ---- | ---- | ----------- | +| TestResults Library | System | Complete test result I/O library | +| IO | Subsystem | Serialization and format detection | +| Serializer | Unit | Format-detection facade | +| TrxSerializer | Unit | TRX format read/write | +| JUnitSerializer | Unit | JUnit XML format read/write | +| TestOutcome | Unit | Test outcome enumeration | +| TestResult | Unit | Single test result data | +| TestResults | Unit | Collection of test results | + +## External Interfaces + +The TestResults library exposes the following public API entry points: + +- `Serializer.Identify(string)`: Detects format of a test result file +- `Serializer.Deserialize(string)`: Reads a test result file into the model +- `TrxSerializer.Serialize(TestResults)`: Writes TRX format +- `TrxSerializer.Deserialize(string)`: Reads TRX format +- `JUnitSerializer.Serialize(TestResults)`: Writes JUnit XML format +- `JUnitSerializer.Deserialize(string)`: Reads JUnit XML format + +## Supported Formats + +| Format | Description | Standard | +| ------ | ----------- | -------- | +| TRX | Visual Studio Test Results | Microsoft proprietary | +| JUnit XML | JUnit test results | Apache JUnit | + +## Related Requirements + +System-level requirements are in [docs/reqstream/system.yaml](../reqstream/system.yaml). +Platform requirements are in +[docs/reqstream/platform-requirements.yaml](../reqstream/platform-requirements.yaml). diff --git a/docs/reqstream/io/io.yaml b/docs/reqstream/io/io.yaml new file mode 100644 index 0000000..c7826bc --- /dev/null +++ b/docs/reqstream/io/io.yaml @@ -0,0 +1,14 @@ +--- +# IO Subsystem Requirements +# This file covers the IO subsystem of the TestResults library. +# Unit-level requirements are in the individual unit files: +# - serializer.yaml +# - trx-serializer.yaml +# - junit-serializer.yaml + +sections: + - title: IO Subsystem Requirements + text: | + The IO subsystem provides serialization and deserialization of test results + in various formats. It consists of the Serializer facade and format-specific + serializer implementations for TRX and JUnit XML formats. diff --git a/docs/reqstream/unit-junit-serializer.yaml b/docs/reqstream/io/junit-serializer.yaml similarity index 100% rename from docs/reqstream/unit-junit-serializer.yaml rename to docs/reqstream/io/junit-serializer.yaml diff --git a/docs/reqstream/unit-serializer.yaml b/docs/reqstream/io/serializer.yaml similarity index 100% rename from docs/reqstream/unit-serializer.yaml rename to docs/reqstream/io/serializer.yaml diff --git a/docs/reqstream/unit-trx-serializer.yaml b/docs/reqstream/io/trx-serializer.yaml similarity index 100% rename from docs/reqstream/unit-trx-serializer.yaml rename to docs/reqstream/io/trx-serializer.yaml diff --git a/docs/reqstream/ots-buildmark.yaml b/docs/reqstream/ots/buildmark.yaml similarity index 100% rename from docs/reqstream/ots-buildmark.yaml rename to docs/reqstream/ots/buildmark.yaml diff --git a/docs/reqstream/ots-mstest.yaml b/docs/reqstream/ots/mstest.yaml similarity index 100% rename from docs/reqstream/ots-mstest.yaml rename to docs/reqstream/ots/mstest.yaml diff --git a/docs/reqstream/ots-pandoctool.yaml b/docs/reqstream/ots/pandoctool.yaml similarity index 100% rename from docs/reqstream/ots-pandoctool.yaml rename to docs/reqstream/ots/pandoctool.yaml diff --git a/docs/reqstream/ots-reqstream.yaml b/docs/reqstream/ots/reqstream.yaml similarity index 100% rename from docs/reqstream/ots-reqstream.yaml rename to docs/reqstream/ots/reqstream.yaml diff --git a/docs/reqstream/ots-reviewmark.yaml b/docs/reqstream/ots/reviewmark.yaml similarity index 100% rename from docs/reqstream/ots-reviewmark.yaml rename to docs/reqstream/ots/reviewmark.yaml diff --git a/docs/reqstream/ots-sarifmark.yaml b/docs/reqstream/ots/sarifmark.yaml similarity index 100% rename from docs/reqstream/ots-sarifmark.yaml rename to docs/reqstream/ots/sarifmark.yaml diff --git a/docs/reqstream/ots-sonarmark.yaml b/docs/reqstream/ots/sonarmark.yaml similarity index 100% rename from docs/reqstream/ots-sonarmark.yaml rename to docs/reqstream/ots/sonarmark.yaml diff --git a/docs/reqstream/ots-sonarscanner.yaml b/docs/reqstream/ots/sonarscanner.yaml similarity index 100% rename from docs/reqstream/ots-sonarscanner.yaml rename to docs/reqstream/ots/sonarscanner.yaml diff --git a/docs/reqstream/ots-versionmark.yaml b/docs/reqstream/ots/versionmark.yaml similarity index 100% rename from docs/reqstream/ots-versionmark.yaml rename to docs/reqstream/ots/versionmark.yaml diff --git a/docs/reqstream/ots-weasyprinttool.yaml b/docs/reqstream/ots/weasyprinttool.yaml similarity index 100% rename from docs/reqstream/ots-weasyprinttool.yaml rename to docs/reqstream/ots/weasyprinttool.yaml diff --git a/docs/reqstream/runtime.yaml b/docs/reqstream/system.yaml similarity index 100% rename from docs/reqstream/runtime.yaml rename to docs/reqstream/system.yaml diff --git a/docs/reqstream/unit-test-outcome.yaml b/docs/reqstream/test-outcome.yaml similarity index 100% rename from docs/reqstream/unit-test-outcome.yaml rename to docs/reqstream/test-outcome.yaml diff --git a/docs/reqstream/unit-test-result.yaml b/docs/reqstream/test-result.yaml similarity index 100% rename from docs/reqstream/unit-test-result.yaml rename to docs/reqstream/test-result.yaml diff --git a/docs/reqstream/unit-test-results.yaml b/docs/reqstream/test-results.yaml similarity index 100% rename from docs/reqstream/unit-test-results.yaml rename to docs/reqstream/test-results.yaml diff --git a/requirements.yaml b/requirements.yaml index 508e0fa..32a61a4 100644 --- a/requirements.yaml +++ b/requirements.yaml @@ -1,24 +1,25 @@ --- # TestResults Library Requirements # -# Root requirements file - includes all unit, platform, and OTS requirements +# Root requirements file - includes all unit, platform, and OTS requirements. +# Organized by subsystem: model units, IO subsystem, system/platform, and OTS. includes: - - docs/reqstream/unit-test-outcome.yaml - - docs/reqstream/unit-test-result.yaml - - docs/reqstream/unit-test-results.yaml - - docs/reqstream/unit-serializer.yaml - - docs/reqstream/unit-trx-serializer.yaml - - docs/reqstream/unit-junit-serializer.yaml - - docs/reqstream/runtime.yaml + - docs/reqstream/test-outcome.yaml + - docs/reqstream/test-result.yaml + - docs/reqstream/test-results.yaml + - docs/reqstream/io/serializer.yaml + - docs/reqstream/io/trx-serializer.yaml + - docs/reqstream/io/junit-serializer.yaml + - docs/reqstream/system.yaml - docs/reqstream/platform-requirements.yaml - - docs/reqstream/ots-mstest.yaml - - docs/reqstream/ots-reqstream.yaml - - docs/reqstream/ots-buildmark.yaml - - docs/reqstream/ots-versionmark.yaml - - docs/reqstream/ots-sarifmark.yaml - - docs/reqstream/ots-sonarmark.yaml - - docs/reqstream/ots-reviewmark.yaml - - docs/reqstream/ots-sonarscanner.yaml - - docs/reqstream/ots-pandoctool.yaml - - docs/reqstream/ots-weasyprinttool.yaml + - docs/reqstream/ots/mstest.yaml + - docs/reqstream/ots/reqstream.yaml + - docs/reqstream/ots/buildmark.yaml + - docs/reqstream/ots/versionmark.yaml + - docs/reqstream/ots/sarifmark.yaml + - docs/reqstream/ots/sonarmark.yaml + - docs/reqstream/ots/reviewmark.yaml + - docs/reqstream/ots/sonarscanner.yaml + - docs/reqstream/ots/pandoctool.yaml + - docs/reqstream/ots/weasyprinttool.yaml From c8eec914622f06705fb8b01b3e1e2745e86f5128 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 1 Apr 2026 14:38:23 +0000 Subject: [PATCH 3/7] fix: address review feedback on introduction, system design, and reviewmark - Move reference links to end of introduction.md - Change Software Structure from table to text tree diagram in introduction.md - Improve Folder Layout descriptions in introduction.md - Replace ASCII art block diagram with Mermaid diagram in system.md - Replace Software Items table with line-art tree in system.md - Use glob pattern for TestResults-Design review-set and add system/platform requirements - Use glob pattern for TestResults-AllRequirements review-set Agent-Logs-Url: https://github.com/demaconsulting/TestResults/sessions/8419ffd7-6548-4b3f-84dc-c2c7ba6fd995 Co-authored-by: Malcolmnixon <1863707+Malcolmnixon@users.noreply.github.com> --- .reviewmark.yaml | 32 +++----------------- docs/design/introduction.md | 42 +++++++++++++------------- docs/design/system.md | 59 +++++++++++++++++++++---------------- 3 files changed, 58 insertions(+), 75 deletions(-) diff --git a/.reviewmark.yaml b/.reviewmark.yaml index 3e1dcf6..decf552 100644 --- a/.reviewmark.yaml +++ b/.reviewmark.yaml @@ -35,39 +35,15 @@ reviews: - id: TestResults-Design title: Review of TestResults Design Documentation paths: - - "docs/design/introduction.md" - - "docs/design/system.md" - - "docs/design/test-outcome.md" - - "docs/design/test-result.md" - - "docs/design/test-results.md" - - "docs/design/io/io.md" - - "docs/design/io/serializer.md" - - "docs/design/io/trx-serializer.md" - - "docs/design/io/junit-serializer.md" + - "docs/design/**/*.md" + - "docs/reqstream/system.yaml" + - "docs/reqstream/platform-requirements.yaml" - id: TestResults-AllRequirements title: Review of All TestResults Requirements paths: - "requirements.yaml" - - "docs/reqstream/system.yaml" - - "docs/reqstream/platform-requirements.yaml" - - "docs/reqstream/test-outcome.yaml" - - "docs/reqstream/test-result.yaml" - - "docs/reqstream/test-results.yaml" - - "docs/reqstream/io/io.yaml" - - "docs/reqstream/io/serializer.yaml" - - "docs/reqstream/io/trx-serializer.yaml" - - "docs/reqstream/io/junit-serializer.yaml" - - "docs/reqstream/ots/mstest.yaml" - - "docs/reqstream/ots/reqstream.yaml" - - "docs/reqstream/ots/buildmark.yaml" - - "docs/reqstream/ots/versionmark.yaml" - - "docs/reqstream/ots/sarifmark.yaml" - - "docs/reqstream/ots/sonarmark.yaml" - - "docs/reqstream/ots/reviewmark.yaml" - - "docs/reqstream/ots/sonarscanner.yaml" - - "docs/reqstream/ots/pandoctool.yaml" - - "docs/reqstream/ots/weasyprinttool.yaml" + - "docs/reqstream/**/*.yaml" - id: TestResults-IO title: Review of TestResults IO Subsystem diff --git a/docs/design/introduction.md b/docs/design/introduction.md index f16163b..3c845f7 100644 --- a/docs/design/introduction.md +++ b/docs/design/introduction.md @@ -50,23 +50,20 @@ This document describes the intent and structure of that code; any discrepancy b this document and the code should be resolved by updating this document to reflect the actual implementation, or by raising a defect against the code. -[user-guide]: https://github.com/demaconsulting/TestResults -[requirements-doc]: https://github.com/demaconsulting/TestResults - ## Software Structure The TestResults library is organized as follows: -| Item | Type | Description | -| ---- | ---- | ----------- | -| TestResults Library | System | Complete test result I/O library | -| IO | Subsystem | Serialization and format detection | -| Serializer | Unit | Format-detection facade | -| TrxSerializer | Unit | TRX format read/write | -| JUnitSerializer | Unit | JUnit XML format read/write | -| TestOutcome | Unit | Test outcome enumeration | -| TestResult | Unit | Single test result data | -| TestResults | Unit | Collection of test results | +```text +TestResults Library (System) +├── IO (Subsystem) +│ ├── Serializer (Unit) +│ ├── TrxSerializer (Unit) +│ └── JUnitSerializer (Unit) +├── TestOutcome (Unit) +├── TestResult (Unit) +└── TestResults (Unit) +``` ## Folder Layout @@ -74,12 +71,15 @@ The source code is organized to mirror the design documentation structure: ```text src/DemaConsulting.TestResults/ -├── IO/ (IO Subsystem) -│ ├── Serializer.cs -│ ├── SerializerHelpers.cs -│ ├── TrxSerializer.cs -│ └── JUnitSerializer.cs -├── TestOutcome.cs -├── TestResult.cs -└── TestResults.cs +├── IO/ — IO Subsystem +│ ├── Serializer.cs — Format-detection facade +│ ├── SerializerHelpers.cs — Internal UTF-8 writer helper +│ ├── TrxSerializer.cs — TRX format read/write +│ └── JUnitSerializer.cs — JUnit XML format read/write +├── TestOutcome.cs — Test outcome enumeration +├── TestResult.cs — Single test result data +└── TestResults.cs — Collection of test results ``` + +[user-guide]: https://github.com/demaconsulting/TestResults +[requirements-doc]: https://github.com/demaconsulting/TestResults diff --git a/docs/design/system.md b/docs/design/system.md index 67f6a26..340c343 100644 --- a/docs/design/system.md +++ b/docs/design/system.md @@ -10,38 +10,45 @@ format-specific serialization implementations. The TestResults library uses a layered architecture: -```text -┌─────────────────────────────────────────────────┐ -│ Calling Code │ -├─────────────────────────────────────────────────┤ -│ IO Subsystem (Serialization) │ -│ ┌─────────────┐ ┌──────────────┐ ┌────────┐ │ -│ │ Serializer │ │TrxSerializer │ │JUnit │ │ -│ │ (facade) │ │ │ │Ser. │ │ -│ └─────────────┘ └──────────────┘ └────────┘ │ -├─────────────────────────────────────────────────┤ -│ Model Layer │ -│ ┌─────────────┐ ┌──────────────┐ ┌────────┐ │ -│ │ TestResults │ │ TestResult │ │TestOut │ │ -│ │ (collection)│ │ (one test) │ │come │ │ -│ └─────────────┘ └──────────────┘ └────────┘ │ -└─────────────────────────────────────────────────┘ +```mermaid +graph TD + A[Calling Code] + + subgraph IO["IO Subsystem (Serialization)"] + B[Serializer facade] + C[TrxSerializer] + D[JUnitSerializer] + end + + subgraph Model["Model Layer"] + E[TestResults] + F[TestResult] + G[TestOutcome] + end + + A --> B + B --> C + B --> D + C --> E + D --> E + E --> F + F --> G ``` ## Software Items The TestResults system contains the following software items: -| Item | Type | Description | -| ---- | ---- | ----------- | -| TestResults Library | System | Complete test result I/O library | -| IO | Subsystem | Serialization and format detection | -| Serializer | Unit | Format-detection facade | -| TrxSerializer | Unit | TRX format read/write | -| JUnitSerializer | Unit | JUnit XML format read/write | -| TestOutcome | Unit | Test outcome enumeration | -| TestResult | Unit | Single test result data | -| TestResults | Unit | Collection of test results | +```text +TestResults Library (System) +├── IO (Subsystem) +│ ├── Serializer (Unit) +│ ├── TrxSerializer (Unit) +│ └── JUnitSerializer (Unit) +├── TestOutcome (Unit) +├── TestResult (Unit) +└── TestResults (Unit) +``` ## External Interfaces From 346e498390a5dbecfeacd5caa1fc25eecef190e6 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 1 Apr 2026 14:43:47 +0000 Subject: [PATCH 4/7] fix: use meaningful Mermaid node IDs and reference introduction for software items - Replace single-letter Mermaid node IDs (A, B, C...) with descriptive names - Replace duplicate Software Items tree with a reference to introduction.md Agent-Logs-Url: https://github.com/demaconsulting/TestResults/sessions/123323cd-f4a1-463f-b73e-ccc0e901484b Co-authored-by: Malcolmnixon <1863707+Malcolmnixon@users.noreply.github.com> --- docs/design/system.md | 42 ++++++++++++++++-------------------------- 1 file changed, 16 insertions(+), 26 deletions(-) diff --git a/docs/design/system.md b/docs/design/system.md index 340c343..ce50fc4 100644 --- a/docs/design/system.md +++ b/docs/design/system.md @@ -12,43 +12,33 @@ The TestResults library uses a layered architecture: ```mermaid graph TD - A[Calling Code] + CallingCode[Calling Code] subgraph IO["IO Subsystem (Serialization)"] - B[Serializer facade] - C[TrxSerializer] - D[JUnitSerializer] + Serializer[Serializer facade] + TrxSerializer[TrxSerializer] + JUnitSerializer[JUnitSerializer] end subgraph Model["Model Layer"] - E[TestResults] - F[TestResult] - G[TestOutcome] + TestResults[TestResults] + TestResult[TestResult] + TestOutcome[TestOutcome] end - A --> B - B --> C - B --> D - C --> E - D --> E - E --> F - F --> G + CallingCode --> Serializer + Serializer --> TrxSerializer + Serializer --> JUnitSerializer + TrxSerializer --> TestResults + JUnitSerializer --> TestResults + TestResults --> TestResult + TestResult --> TestOutcome ``` ## Software Items -The TestResults system contains the following software items: - -```text -TestResults Library (System) -├── IO (Subsystem) -│ ├── Serializer (Unit) -│ ├── TrxSerializer (Unit) -│ └── JUnitSerializer (Unit) -├── TestOutcome (Unit) -├── TestResult (Unit) -└── TestResults (Unit) -``` +The software items in the TestResults system are described in the +[introduction](introduction.md#software-structure). ## External Interfaces From c02d2d06d0d050f9c4567bbfdfc033bb0770fa86 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 1 Apr 2026 15:08:23 +0000 Subject: [PATCH 5/7] fix: update pandoc definition.yaml with new design file paths - Add system.md and io/io.md - Move serializer.md, trx-serializer.md, junit-serializer.md to io/ subfolder paths Agent-Logs-Url: https://github.com/demaconsulting/TestResults/sessions/a446eacb-6892-4e3d-941d-11db19a86fdd Co-authored-by: Malcolmnixon <1863707+Malcolmnixon@users.noreply.github.com> --- docs/design/definition.yaml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/docs/design/definition.yaml b/docs/design/definition.yaml index 802dc00..d0361f9 100644 --- a/docs/design/definition.yaml +++ b/docs/design/definition.yaml @@ -5,12 +5,14 @@ resource-path: input-files: - docs/design/title.txt - docs/design/introduction.md + - docs/design/system.md - docs/design/test-outcome.md - docs/design/test-result.md - docs/design/test-results.md - - docs/design/serializer.md - - docs/design/trx-serializer.md - - docs/design/junit-serializer.md + - docs/design/io/io.md + - docs/design/io/serializer.md + - docs/design/io/trx-serializer.md + - docs/design/io/junit-serializer.md template: template.html table-of-contents: true number-sections: true From c0d67106229337ad5c22cbb3308d268a25392f5e Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 1 Apr 2026 15:12:08 +0000 Subject: [PATCH 6/7] fix: add io.yaml to requirements.yaml and TestHelpers.cs to review-set - Add docs/reqstream/io/io.yaml to requirements.yaml includes list - Add TestHelpers.cs to TestResults-IO review-set in .reviewmark.yaml Agent-Logs-Url: https://github.com/demaconsulting/TestResults/sessions/01ac4988-c5c4-46b3-9b39-49ebcd3df110 Co-authored-by: Malcolmnixon <1863707+Malcolmnixon@users.noreply.github.com> --- .reviewmark.yaml | 1 + requirements.yaml | 1 + 2 files changed, 2 insertions(+) diff --git a/.reviewmark.yaml b/.reviewmark.yaml index decf552..e320456 100644 --- a/.reviewmark.yaml +++ b/.reviewmark.yaml @@ -64,6 +64,7 @@ reviews: - "test/DemaConsulting.TestResults.Tests/IO/TrxSerializerTests.cs" - "test/DemaConsulting.TestResults.Tests/IO/TrxExampleTests.cs" - "test/DemaConsulting.TestResults.Tests/IO/JUnitSerializerTests.cs" + - "test/DemaConsulting.TestResults.Tests/TestHelpers.cs" - id: TestResults-TestOutcome title: Review of TestResults TestOutcome Unit diff --git a/requirements.yaml b/requirements.yaml index 32a61a4..baa39be 100644 --- a/requirements.yaml +++ b/requirements.yaml @@ -8,6 +8,7 @@ includes: - docs/reqstream/test-outcome.yaml - docs/reqstream/test-result.yaml - docs/reqstream/test-results.yaml + - docs/reqstream/io/io.yaml - docs/reqstream/io/serializer.yaml - docs/reqstream/io/trx-serializer.yaml - docs/reqstream/io/junit-serializer.yaml From 0fe741c7f01279f74d1befde5965fcc068274ba3 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 1 Apr 2026 15:55:26 +0000 Subject: [PATCH 7/7] fix: remove invalid 'text' field from docs/reqstream/io/io.yaml ReqStream's YamlSection type does not support a 'text' property. Move description to YAML comments; leave section with title only. Verified with: dotnet reqstream --lint --requirements requirements.yaml Agent-Logs-Url: https://github.com/demaconsulting/TestResults/sessions/14b5b960-5f9a-4683-b099-e4a24c7967eb Co-authored-by: Malcolmnixon <1863707+Malcolmnixon@users.noreply.github.com> --- docs/reqstream/io/io.yaml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/docs/reqstream/io/io.yaml b/docs/reqstream/io/io.yaml index c7826bc..4543b0c 100644 --- a/docs/reqstream/io/io.yaml +++ b/docs/reqstream/io/io.yaml @@ -8,7 +8,3 @@ sections: - title: IO Subsystem Requirements - text: | - The IO subsystem provides serialization and deserialization of test results - in various formats. It consists of the Serializer facade and format-specific - serializer implementations for TRX and JUnit XML formats.