From c79961c72a71189d80fcae12b7dbc5faa0b01b9d Mon Sep 17 00:00:00 2001 From: leecampbell-codeagent Date: Sun, 1 Mar 2026 10:39:57 +0000 Subject: [PATCH 1/7] plan(#105): initial brief from issue --- plan/planning/brief.md | 72 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 plan/planning/brief.md diff --git a/plan/planning/brief.md b/plan/planning/brief.md new file mode 100644 index 0000000..696593f --- /dev/null +++ b/plan/planning/brief.md @@ -0,0 +1,72 @@ +# Brief: Issue #105 — Remove EOL Target Frameworks from Benchmarking Project + +## Summary + +The `HdrHistogram.Benchmarking` project currently targets seven frameworks, five of which are end-of-life. +This causes repeated `NETSDK1138` warnings during CI builds. +Since the benchmarking project is a developer tool for measuring current performance — not a shipped library — it has no reason to target EOL runtimes. +The fix is to reduce `TargetFrameworks` to only currently supported frameworks and update the build-system spec to match. + +## Affected Files + +| File | Change | +|------|--------| +| `HdrHistogram.Benchmarking/HdrHistogram.Benchmarking.csproj` | Replace `TargetFrameworks` with supported frameworks only | +| `spec/tech-standards/build-system.md` | Update Benchmarking Project section to reflect new targets | + +No other projects are affected: `HdrHistogram.csproj` already targets `net8.0;netstandard2.0`, and both `HdrHistogram.UnitTests` and `HdrHistogram.Examples` already target `net8.0` only. + +## Current State + +```xml + +net8.0;net7.0;net6.0;net5.0;net47;netcoreapp3.1;netcoreapp2.1.29 +``` + +EOL frameworks in the list (all EOL as of 2026-03-01): + +- `net7.0` — EOL May 2024 +- `net6.0` — EOL November 2024 +- `net5.0` — EOL May 2022 +- `net47` — No mainstream SDK support under modern .NET SDK (framework-era) +- `netcoreapp3.1` — EOL December 2022 +- `netcoreapp2.1.29` — EOL August 2021 (pinned patch version, non-standard) + +## Target State + +```xml +net8.0;net9.0 +``` + +Rationale: + +- `net8.0` is LTS, supported until November 2026; it is already the SDK version used by CI. +- `net9.0` is the current STS release (supported until May 2026), giving a two-version comparison which is the primary value of multi-targeting in a benchmarking project. +- If `net9.0` is judged too close to its own EOL date at the time of merge, `net8.0` alone is an acceptable minimum. + +## Acceptance Criteria + +- [ ] `HdrHistogram.Benchmarking.csproj` contains no EOL target frameworks. +- [ ] `dotnet build -c Release` completes with zero `NETSDK1138` warnings. +- [ ] `dotnet build -c Release` completes successfully for the whole solution. +- [ ] `spec/tech-standards/build-system.md` Benchmarking Project section reflects the new `TargetFrameworks` value. + +## Test Strategy + +The benchmarking project contains no unit tests. +Verification is build-only: + +1. Run `dotnet build -c Release` from the repo root and confirm no `NETSDK1138` warnings appear. +2. Confirm the build succeeds with exit code 0. +3. Run `dotnet build -c Release` for the full solution to confirm no regressions in other projects. + +No new tests need to be added or modified. + +## Risks and Open Questions + +| Item | Detail | +|------|--------| +| `net9.0` SDK availability in CI | The CI workflow (`ci.yml`) pins `dotnet-version: 8.0.x`. If `net9.0` is added as a target, CI must be able to build it. The .NET 8 SDK cannot build `net9.0` targets; CI would need to be updated to use .NET 9 SDK (or a multi-SDK setup). If this is out of scope, use `net8.0` only. | +| `BenchmarkDotNet.Diagnostics.Windows` on Linux CI | This package targets Windows; the CI runner is `ubuntu-latest`. Building for `net8.0` on Linux should still succeed as the package conditionally applies. Verify no new build errors arise after removing the TFM list. | +| Spec doc accuracy | `spec/tech-standards/build-system.md` explicitly documents the old multi-target list and the rationale "Multiple .NET versions for comparison". This rationale still applies but the list must be updated. | +| `net47` removal | `net47` is .NET Framework 4.7, not .NET Core. Removing it means the benchmarking project no longer builds a .NET Framework binary. This is intentional and consistent with the issue goal. | From ab5a1e22c207d2553cf1acbf21fcab96fdc3825c Mon Sep 17 00:00:00 2001 From: leecampbell-codeagent Date: Sun, 1 Mar 2026 10:42:25 +0000 Subject: [PATCH 2/7] plan(#105): review brief --- plan/planning/brief-review.md | 89 +++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 plan/planning/brief-review.md diff --git a/plan/planning/brief-review.md b/plan/planning/brief-review.md new file mode 100644 index 0000000..546fe6e --- /dev/null +++ b/plan/planning/brief-review.md @@ -0,0 +1,89 @@ +# Brief Review: Issue #105 — Remove EOL Target Frameworks from Benchmarking Project + +## Overall Assessment + +The brief is well-structured and accurate. +All file paths, current `TargetFrameworks` values, and affected sections were verified against the actual codebase. +Three issues require resolution before the brief is ready for implementation. + +--- + +## Issues + +### 1. Ambiguous target state — decision must be made in the brief + +**Section:** Target State / Risks and Open Questions + +The brief proposes `net8.0;net9.0` as the primary target state, then hedges: + +> If `net9.0` is judged too close to its own EOL date at the time of merge, `net8.0` alone is an acceptable minimum. + +As of 2026-03-01, `net9.0` reaches end-of-life in May 2026 — approximately two months away. +The brief's own fallback condition is already satisfied. +Leaving this choice to the implementer introduces unnecessary ambiguity. + +**Action required:** Commit to a single target state in the brief. +Given `net9.0`'s imminent EOL and the CI constraint described in issue 2 below, the recommended resolution is `net8.0` only. +Update the Target State section accordingly and remove the hedge. + +--- + +### 2. Missing affected file: `.github/workflows/ci.yml` + +**Section:** Affected Files + +The CI workflow at `.github/workflows/ci.yml` pins the .NET SDK to `'8.0.x'`: + +```yaml +- uses: actions/setup-dotnet@v4 + with: + dotnet-version: '8.0.x' +``` + +The .NET 8 SDK cannot build `net9.0` targets. +If `net9.0` is kept in the target state, CI will fail and `.github/workflows/ci.yml` must be updated to install the .NET 9 SDK (or use a multi-SDK setup). +This file is absent from the affected files table. + +**Action required (two options — pick one consistently with issue 1):** + +- **Option A (recommended):** Resolve issue 1 as `net8.0` only. + No CI change is needed; remove this item. +- **Option B:** Keep `net9.0` in the target state. + Add `.github/workflows/ci.yml` to the affected files table with the change description "Update `dotnet-version` to `'9.0.x'` (or add a second SDK install step)". + Also add an acceptance criterion: "CI build completes without SDK-version errors for all listed target frameworks." + +--- + +### 3. Incomplete spec update: `build-system.md` narrative section + +**Section:** Affected Files / Acceptance Criteria + +The brief specifies updating the "Benchmarking Project" TFM block in `spec/tech-standards/build-system.md` (lines 39–45). +However, the same file contains a separate narrative section at lines 226–229: + +```markdown +### Benchmark Configuration + +BenchmarkDotNet is used with these targets: +- Multiple .NET versions for comparison +- Windows diagnostics support +- Memory allocation tracking +``` + +If the final target is `net8.0` only, "Multiple .NET versions for comparison" becomes inaccurate. +If the target is `net8.0;net9.0`, the statement remains true but the list of versions should be explicit. + +**Action required:** Add an explicit note to the affected files entry for `build-system.md` to also update the "Benchmark Configuration" narrative bullet to reflect the chosen target(s). +Add a corresponding acceptance criterion, for example: +"The `build-system.md` Benchmark Configuration section accurately describes the final `TargetFrameworks` value." + +--- + +## Minor Observations (no action required) + +- The claim that `HdrHistogram.csproj` targets `net8.0;netstandard2.0` and that both `HdrHistogram.UnitTests` and `HdrHistogram.Examples` target `net8.0` only is confirmed correct. +- `BenchmarkDotNet.Diagnostics.Windows` is confirmed present in the benchmarking `.csproj`. + The risk note about Linux CI is valid and no action beyond the existing note is needed. +- No other projects reference the benchmarking project; no downstream side effects exist. +- The test strategy (build-only verification) is appropriate given the absence of unit tests in the benchmarking project. +- Acceptance criteria are otherwise measurable and verifiable. From a802aa2184dba678011b4fc10c01cf09b61bdf81 Mon Sep 17 00:00:00 2001 From: leecampbell-codeagent Date: Sun, 1 Mar 2026 10:44:06 +0000 Subject: [PATCH 3/7] plan(#105): apply brief review feedback --- plan/planning/brief-review.md | 89 ----------------------------------- plan/planning/brief.md | 18 +++---- 2 files changed, 9 insertions(+), 98 deletions(-) delete mode 100644 plan/planning/brief-review.md diff --git a/plan/planning/brief-review.md b/plan/planning/brief-review.md deleted file mode 100644 index 546fe6e..0000000 --- a/plan/planning/brief-review.md +++ /dev/null @@ -1,89 +0,0 @@ -# Brief Review: Issue #105 — Remove EOL Target Frameworks from Benchmarking Project - -## Overall Assessment - -The brief is well-structured and accurate. -All file paths, current `TargetFrameworks` values, and affected sections were verified against the actual codebase. -Three issues require resolution before the brief is ready for implementation. - ---- - -## Issues - -### 1. Ambiguous target state — decision must be made in the brief - -**Section:** Target State / Risks and Open Questions - -The brief proposes `net8.0;net9.0` as the primary target state, then hedges: - -> If `net9.0` is judged too close to its own EOL date at the time of merge, `net8.0` alone is an acceptable minimum. - -As of 2026-03-01, `net9.0` reaches end-of-life in May 2026 — approximately two months away. -The brief's own fallback condition is already satisfied. -Leaving this choice to the implementer introduces unnecessary ambiguity. - -**Action required:** Commit to a single target state in the brief. -Given `net9.0`'s imminent EOL and the CI constraint described in issue 2 below, the recommended resolution is `net8.0` only. -Update the Target State section accordingly and remove the hedge. - ---- - -### 2. Missing affected file: `.github/workflows/ci.yml` - -**Section:** Affected Files - -The CI workflow at `.github/workflows/ci.yml` pins the .NET SDK to `'8.0.x'`: - -```yaml -- uses: actions/setup-dotnet@v4 - with: - dotnet-version: '8.0.x' -``` - -The .NET 8 SDK cannot build `net9.0` targets. -If `net9.0` is kept in the target state, CI will fail and `.github/workflows/ci.yml` must be updated to install the .NET 9 SDK (or use a multi-SDK setup). -This file is absent from the affected files table. - -**Action required (two options — pick one consistently with issue 1):** - -- **Option A (recommended):** Resolve issue 1 as `net8.0` only. - No CI change is needed; remove this item. -- **Option B:** Keep `net9.0` in the target state. - Add `.github/workflows/ci.yml` to the affected files table with the change description "Update `dotnet-version` to `'9.0.x'` (or add a second SDK install step)". - Also add an acceptance criterion: "CI build completes without SDK-version errors for all listed target frameworks." - ---- - -### 3. Incomplete spec update: `build-system.md` narrative section - -**Section:** Affected Files / Acceptance Criteria - -The brief specifies updating the "Benchmarking Project" TFM block in `spec/tech-standards/build-system.md` (lines 39–45). -However, the same file contains a separate narrative section at lines 226–229: - -```markdown -### Benchmark Configuration - -BenchmarkDotNet is used with these targets: -- Multiple .NET versions for comparison -- Windows diagnostics support -- Memory allocation tracking -``` - -If the final target is `net8.0` only, "Multiple .NET versions for comparison" becomes inaccurate. -If the target is `net8.0;net9.0`, the statement remains true but the list of versions should be explicit. - -**Action required:** Add an explicit note to the affected files entry for `build-system.md` to also update the "Benchmark Configuration" narrative bullet to reflect the chosen target(s). -Add a corresponding acceptance criterion, for example: -"The `build-system.md` Benchmark Configuration section accurately describes the final `TargetFrameworks` value." - ---- - -## Minor Observations (no action required) - -- The claim that `HdrHistogram.csproj` targets `net8.0;netstandard2.0` and that both `HdrHistogram.UnitTests` and `HdrHistogram.Examples` target `net8.0` only is confirmed correct. -- `BenchmarkDotNet.Diagnostics.Windows` is confirmed present in the benchmarking `.csproj`. - The risk note about Linux CI is valid and no action beyond the existing note is needed. -- No other projects reference the benchmarking project; no downstream side effects exist. -- The test strategy (build-only verification) is appropriate given the absence of unit tests in the benchmarking project. -- Acceptance criteria are otherwise measurable and verifiable. diff --git a/plan/planning/brief.md b/plan/planning/brief.md index 696593f..cb17c5d 100644 --- a/plan/planning/brief.md +++ b/plan/planning/brief.md @@ -5,16 +5,17 @@ The `HdrHistogram.Benchmarking` project currently targets seven frameworks, five of which are end-of-life. This causes repeated `NETSDK1138` warnings during CI builds. Since the benchmarking project is a developer tool for measuring current performance — not a shipped library — it has no reason to target EOL runtimes. -The fix is to reduce `TargetFrameworks` to only currently supported frameworks and update the build-system spec to match. +The fix is to reduce `TargetFrameworks` to `net8.0` only and update the build-system spec to match. ## Affected Files | File | Change | |------|--------| -| `HdrHistogram.Benchmarking/HdrHistogram.Benchmarking.csproj` | Replace `TargetFrameworks` with supported frameworks only | -| `spec/tech-standards/build-system.md` | Update Benchmarking Project section to reflect new targets | +| `HdrHistogram.Benchmarking/HdrHistogram.Benchmarking.csproj` | Replace `TargetFrameworks` with `net8.0` only | +| `spec/tech-standards/build-system.md` | Update the Benchmarking Project TFM block (lines 39–45) and the Benchmark Configuration narrative bullet (lines 226–229) to reflect the new target | No other projects are affected: `HdrHistogram.csproj` already targets `net8.0;netstandard2.0`, and both `HdrHistogram.UnitTests` and `HdrHistogram.Examples` already target `net8.0` only. +No CI workflow changes are required because the existing `dotnet-version: '8.0.x'` pin already covers `net8.0`. ## Current State @@ -35,21 +36,22 @@ EOL frameworks in the list (all EOL as of 2026-03-01): ## Target State ```xml -net8.0;net9.0 +net8.0 ``` Rationale: - `net8.0` is LTS, supported until November 2026; it is already the SDK version used by CI. -- `net9.0` is the current STS release (supported until May 2026), giving a two-version comparison which is the primary value of multi-targeting in a benchmarking project. -- If `net9.0` is judged too close to its own EOL date at the time of merge, `net8.0` alone is an acceptable minimum. +- `net9.0` reaches end-of-life in May 2026 — approximately two months from the date of this brief — so it does not meet the bar for inclusion. +- A single supported LTS framework is the correct minimum for a developer-only benchmarking tool. ## Acceptance Criteria - [ ] `HdrHistogram.Benchmarking.csproj` contains no EOL target frameworks. - [ ] `dotnet build -c Release` completes with zero `NETSDK1138` warnings. - [ ] `dotnet build -c Release` completes successfully for the whole solution. -- [ ] `spec/tech-standards/build-system.md` Benchmarking Project section reflects the new `TargetFrameworks` value. +- [ ] The `spec/tech-standards/build-system.md` Benchmarking Project TFM block reflects `net8.0` only. +- [ ] The `spec/tech-standards/build-system.md` Benchmark Configuration section accurately describes the final `TargetFrameworks` value (the "Multiple .NET versions for comparison" bullet is updated or removed to reflect a single target). ## Test Strategy @@ -66,7 +68,5 @@ No new tests need to be added or modified. | Item | Detail | |------|--------| -| `net9.0` SDK availability in CI | The CI workflow (`ci.yml`) pins `dotnet-version: 8.0.x`. If `net9.0` is added as a target, CI must be able to build it. The .NET 8 SDK cannot build `net9.0` targets; CI would need to be updated to use .NET 9 SDK (or a multi-SDK setup). If this is out of scope, use `net8.0` only. | | `BenchmarkDotNet.Diagnostics.Windows` on Linux CI | This package targets Windows; the CI runner is `ubuntu-latest`. Building for `net8.0` on Linux should still succeed as the package conditionally applies. Verify no new build errors arise after removing the TFM list. | -| Spec doc accuracy | `spec/tech-standards/build-system.md` explicitly documents the old multi-target list and the rationale "Multiple .NET versions for comparison". This rationale still applies but the list must be updated. | | `net47` removal | `net47` is .NET Framework 4.7, not .NET Core. Removing it means the benchmarking project no longer builds a .NET Framework binary. This is intentional and consistent with the issue goal. | From 23d88b0ae347c75b4c1e9ab817c3397c692168ad Mon Sep 17 00:00:00 2001 From: leecampbell-codeagent Date: Sun, 1 Mar 2026 10:45:58 +0000 Subject: [PATCH 4/7] plan(#105): review brief --- plan/{planning => ready}/brief.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename plan/{planning => ready}/brief.md (100%) diff --git a/plan/planning/brief.md b/plan/ready/brief.md similarity index 100% rename from plan/planning/brief.md rename to plan/ready/brief.md From 5912187f136a08ac80931e2ca3c1db4b0877f1ae Mon Sep 17 00:00:00 2001 From: leecampbell-codeagent Date: Sun, 1 Mar 2026 10:47:59 +0000 Subject: [PATCH 5/7] plan(#105): create task breakdown --- plan/ready/task.md | 136 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 136 insertions(+) create mode 100644 plan/ready/task.md diff --git a/plan/ready/task.md b/plan/ready/task.md new file mode 100644 index 0000000..9064b2a --- /dev/null +++ b/plan/ready/task.md @@ -0,0 +1,136 @@ +# Task List: Issue #105 — Remove EOL Target Frameworks from Benchmarking Project + +## Implementation Changes + +### Task 1 — Update TargetFrameworks in HdrHistogram.Benchmarking.csproj + +**File:** `HdrHistogram.Benchmarking/HdrHistogram.Benchmarking.csproj` + +**Change:** Replace the multi-value `` element on line 5 with a single `net8.0` target. + +**From:** +```xml +net8.0;net7.0;net6.0;net5.0;net47;netcoreapp3.1;netcoreapp2.1.29 +``` + +**To:** +```xml +net8.0 +``` + +**Why:** Eliminates all five EOL frameworks from the benchmarking project, resolving `NETSDK1138` warnings. + +**Verification:** Open the file and confirm the `` element contains exactly `net8.0` and no semicolons. + +- [ ] Replace the `` value in `HdrHistogram.Benchmarking/HdrHistogram.Benchmarking.csproj` with `net8.0` + +--- + +### Task 2 — Update the Benchmarking Project TFM block in build-system.md + +**File:** `spec/tech-standards/build-system.md` + +**Change:** Lines 39–45 — replace the "Multi-targeted for performance comparison" description and the multi-framework XML snippet with the single-target equivalent. + +**From (lines 39–45):** +```markdown +### Benchmarking Project + +Multi-targeted for performance comparison: + +```xml +net8.0;net7.0;net6.0;net5.0;net47;netcoreapp3.1;netcoreapp2.1.29 +``` +``` + +**To:** +```markdown +### Benchmarking Project + +Targets the current LTS runtime only (developer tool, not a shipped library): + +```xml +net8.0 +``` +``` + +**Why:** The spec must match the actual project file so future readers are not misled. + +**Verification:** Lines 39–45 of `build-system.md` show `net8.0` only, with no EOL framework identifiers and no "Multi-targeted for performance comparison" text. + +- [ ] Update the Benchmarking Project TFM block (lines 39–45) in `spec/tech-standards/build-system.md` + +--- + +### Task 3 — Update the Benchmark Configuration bullet in build-system.md + +**File:** `spec/tech-standards/build-system.md` + +**Change:** Line 227 — replace the "Multiple .NET versions for comparison" bullet with a description that reflects the single `net8.0` target. + +**From (lines 226–229):** +```markdown +BenchmarkDotNet is used with these targets: +- Multiple .NET versions for comparison +- Windows diagnostics support +- Memory allocation tracking +``` + +**To:** +```markdown +BenchmarkDotNet is used with these targets: +- `net8.0` (current LTS runtime) +- Windows diagnostics support +- Memory allocation tracking +``` + +**Why:** The "Multiple .NET versions for comparison" bullet no longer holds after reducing to a single target; leaving it in place would contradict the updated TFM block above it. + +**Verification:** Line 227 (or equivalent) contains `` `net8.0` (current LTS runtime) `` and no reference to "Multiple .NET versions". + +- [ ] Update the Benchmark Configuration bullet (line 227) in `spec/tech-standards/build-system.md` + +--- + +## Tests + +No unit tests exist in the benchmarking project and the brief explicitly states that no new tests need to be added or modified. +Verification is build-only (see Build Verification tasks below). + +--- + +## Build Verification + +### Task 4 — Verify the benchmarking project builds without NETSDK1138 warnings + +**Command:** `dotnet build HdrHistogram.Benchmarking/HdrHistogram.Benchmarking.csproj -c Release` + +**Why:** Confirms that the EOL framework removal eliminates the `NETSDK1138` warnings and that the project still compiles cleanly under `net8.0`. + +**Verification:** Command exits with code 0 and the output contains zero occurrences of `NETSDK1138`. + +- [ ] Run `dotnet build HdrHistogram.Benchmarking/HdrHistogram.Benchmarking.csproj -c Release` and confirm zero `NETSDK1138` warnings and exit code 0 + +--- + +### Task 5 — Verify the full solution builds successfully + +**Command:** `dotnet build -c Release` (from repo root) + +**Why:** Ensures that removing the EOL target frameworks from the benchmarking project does not introduce regressions in any other project in the solution. + +**Verification:** Command exits with code 0 and output shows all projects (main library, unit tests, examples, benchmarking) built successfully. + +- [ ] Run `dotnet build -c Release` from the repo root and confirm the full solution builds with exit code 0 and no regressions + +--- + +## Acceptance Criteria Cross-Reference + +| Acceptance Criterion (from brief) | Covered by | +|-----------------------------------|------------| +| `HdrHistogram.Benchmarking.csproj` contains no EOL target frameworks | Task 1 | +| `dotnet build -c Release` completes with zero `NETSDK1138` warnings | Task 4 | +| `dotnet build -c Release` completes successfully for the whole solution | Task 5 | +| `build-system.md` Benchmarking Project TFM block reflects `net8.0` only | Task 2 | +| `build-system.md` Benchmark Configuration section accurately describes the final `TargetFrameworks` value | Task 3 | From dd23e4ee6eb0309b099abcd43d4f0e254b8af235 Mon Sep 17 00:00:00 2001 From: leecampbell-codeagent Date: Sun, 1 Mar 2026 10:51:48 +0000 Subject: [PATCH 6/7] feat(#105): implement tasks --- .../HdrHistogram.Benchmarking.csproj | 2 +- plan/{ready => done}/brief.md | 0 plan/{ready => done}/task.md | 10 +++++----- spec/tech-standards/build-system.md | 6 +++--- 4 files changed, 9 insertions(+), 9 deletions(-) rename plan/{ready => done}/brief.md (100%) rename plan/{ready => done}/task.md (93%) diff --git a/HdrHistogram.Benchmarking/HdrHistogram.Benchmarking.csproj b/HdrHistogram.Benchmarking/HdrHistogram.Benchmarking.csproj index 3b55a34..3a9c04e 100644 --- a/HdrHistogram.Benchmarking/HdrHistogram.Benchmarking.csproj +++ b/HdrHistogram.Benchmarking/HdrHistogram.Benchmarking.csproj @@ -2,7 +2,7 @@ Exe - net8.0;net7.0;net6.0;net5.0;net47;netcoreapp3.1;netcoreapp2.1.29 + net8.0 diff --git a/plan/ready/brief.md b/plan/done/brief.md similarity index 100% rename from plan/ready/brief.md rename to plan/done/brief.md diff --git a/plan/ready/task.md b/plan/done/task.md similarity index 93% rename from plan/ready/task.md rename to plan/done/task.md index 9064b2a..b869b63 100644 --- a/plan/ready/task.md +++ b/plan/done/task.md @@ -22,7 +22,7 @@ **Verification:** Open the file and confirm the `` element contains exactly `net8.0` and no semicolons. -- [ ] Replace the `` value in `HdrHistogram.Benchmarking/HdrHistogram.Benchmarking.csproj` with `net8.0` +- [x] Replace the `` value in `HdrHistogram.Benchmarking/HdrHistogram.Benchmarking.csproj` with `net8.0` --- @@ -58,7 +58,7 @@ Targets the current LTS runtime only (developer tool, not a shipped library): **Verification:** Lines 39–45 of `build-system.md` show `net8.0` only, with no EOL framework identifiers and no "Multi-targeted for performance comparison" text. -- [ ] Update the Benchmarking Project TFM block (lines 39–45) in `spec/tech-standards/build-system.md` +- [x] Update the Benchmarking Project TFM block (lines 39–45) in `spec/tech-standards/build-system.md` --- @@ -88,7 +88,7 @@ BenchmarkDotNet is used with these targets: **Verification:** Line 227 (or equivalent) contains `` `net8.0` (current LTS runtime) `` and no reference to "Multiple .NET versions". -- [ ] Update the Benchmark Configuration bullet (line 227) in `spec/tech-standards/build-system.md` +- [x] Update the Benchmark Configuration bullet (line 227) in `spec/tech-standards/build-system.md` --- @@ -109,7 +109,7 @@ Verification is build-only (see Build Verification tasks below). **Verification:** Command exits with code 0 and the output contains zero occurrences of `NETSDK1138`. -- [ ] Run `dotnet build HdrHistogram.Benchmarking/HdrHistogram.Benchmarking.csproj -c Release` and confirm zero `NETSDK1138` warnings and exit code 0 +- [x] Run `dotnet build HdrHistogram.Benchmarking/HdrHistogram.Benchmarking.csproj -c Release` and confirm zero `NETSDK1138` warnings and exit code 0 --- @@ -121,7 +121,7 @@ Verification is build-only (see Build Verification tasks below). **Verification:** Command exits with code 0 and output shows all projects (main library, unit tests, examples, benchmarking) built successfully. -- [ ] Run `dotnet build -c Release` from the repo root and confirm the full solution builds with exit code 0 and no regressions +- [x] Run `dotnet build -c Release` from the repo root and confirm the full solution builds with exit code 0 and no regressions --- diff --git a/spec/tech-standards/build-system.md b/spec/tech-standards/build-system.md index 51b86d6..a8bb09a 100644 --- a/spec/tech-standards/build-system.md +++ b/spec/tech-standards/build-system.md @@ -38,10 +38,10 @@ HdrHistogram.sln ### Benchmarking Project -Multi-targeted for performance comparison: +Targets the current LTS runtime only (developer tool, not a shipped library): ```xml -net8.0;net7.0;net6.0;net5.0;net47;netcoreapp3.1;netcoreapp2.1.29 +net8.0 ``` ## Dependencies @@ -224,7 +224,7 @@ dotnet run -c Release -- -f *Recording* ### Benchmark Configuration BenchmarkDotNet is used with these targets: -- Multiple .NET versions for comparison +- `net8.0` (current LTS runtime) - Windows diagnostics support - Memory allocation tracking From 65975da68f445486159647d6a416f21f18221867 Mon Sep 17 00:00:00 2001 From: leecampbell-codeagent Date: Sun, 1 Mar 2026 10:52:20 +0000 Subject: [PATCH 7/7] feat(#105): complete implementation --- plan/done/brief.md | 72 ------------------------ plan/done/task.md | 136 --------------------------------------------- 2 files changed, 208 deletions(-) delete mode 100644 plan/done/brief.md delete mode 100644 plan/done/task.md diff --git a/plan/done/brief.md b/plan/done/brief.md deleted file mode 100644 index cb17c5d..0000000 --- a/plan/done/brief.md +++ /dev/null @@ -1,72 +0,0 @@ -# Brief: Issue #105 — Remove EOL Target Frameworks from Benchmarking Project - -## Summary - -The `HdrHistogram.Benchmarking` project currently targets seven frameworks, five of which are end-of-life. -This causes repeated `NETSDK1138` warnings during CI builds. -Since the benchmarking project is a developer tool for measuring current performance — not a shipped library — it has no reason to target EOL runtimes. -The fix is to reduce `TargetFrameworks` to `net8.0` only and update the build-system spec to match. - -## Affected Files - -| File | Change | -|------|--------| -| `HdrHistogram.Benchmarking/HdrHistogram.Benchmarking.csproj` | Replace `TargetFrameworks` with `net8.0` only | -| `spec/tech-standards/build-system.md` | Update the Benchmarking Project TFM block (lines 39–45) and the Benchmark Configuration narrative bullet (lines 226–229) to reflect the new target | - -No other projects are affected: `HdrHistogram.csproj` already targets `net8.0;netstandard2.0`, and both `HdrHistogram.UnitTests` and `HdrHistogram.Examples` already target `net8.0` only. -No CI workflow changes are required because the existing `dotnet-version: '8.0.x'` pin already covers `net8.0`. - -## Current State - -```xml - -net8.0;net7.0;net6.0;net5.0;net47;netcoreapp3.1;netcoreapp2.1.29 -``` - -EOL frameworks in the list (all EOL as of 2026-03-01): - -- `net7.0` — EOL May 2024 -- `net6.0` — EOL November 2024 -- `net5.0` — EOL May 2022 -- `net47` — No mainstream SDK support under modern .NET SDK (framework-era) -- `netcoreapp3.1` — EOL December 2022 -- `netcoreapp2.1.29` — EOL August 2021 (pinned patch version, non-standard) - -## Target State - -```xml -net8.0 -``` - -Rationale: - -- `net8.0` is LTS, supported until November 2026; it is already the SDK version used by CI. -- `net9.0` reaches end-of-life in May 2026 — approximately two months from the date of this brief — so it does not meet the bar for inclusion. -- A single supported LTS framework is the correct minimum for a developer-only benchmarking tool. - -## Acceptance Criteria - -- [ ] `HdrHistogram.Benchmarking.csproj` contains no EOL target frameworks. -- [ ] `dotnet build -c Release` completes with zero `NETSDK1138` warnings. -- [ ] `dotnet build -c Release` completes successfully for the whole solution. -- [ ] The `spec/tech-standards/build-system.md` Benchmarking Project TFM block reflects `net8.0` only. -- [ ] The `spec/tech-standards/build-system.md` Benchmark Configuration section accurately describes the final `TargetFrameworks` value (the "Multiple .NET versions for comparison" bullet is updated or removed to reflect a single target). - -## Test Strategy - -The benchmarking project contains no unit tests. -Verification is build-only: - -1. Run `dotnet build -c Release` from the repo root and confirm no `NETSDK1138` warnings appear. -2. Confirm the build succeeds with exit code 0. -3. Run `dotnet build -c Release` for the full solution to confirm no regressions in other projects. - -No new tests need to be added or modified. - -## Risks and Open Questions - -| Item | Detail | -|------|--------| -| `BenchmarkDotNet.Diagnostics.Windows` on Linux CI | This package targets Windows; the CI runner is `ubuntu-latest`. Building for `net8.0` on Linux should still succeed as the package conditionally applies. Verify no new build errors arise after removing the TFM list. | -| `net47` removal | `net47` is .NET Framework 4.7, not .NET Core. Removing it means the benchmarking project no longer builds a .NET Framework binary. This is intentional and consistent with the issue goal. | diff --git a/plan/done/task.md b/plan/done/task.md deleted file mode 100644 index b869b63..0000000 --- a/plan/done/task.md +++ /dev/null @@ -1,136 +0,0 @@ -# Task List: Issue #105 — Remove EOL Target Frameworks from Benchmarking Project - -## Implementation Changes - -### Task 1 — Update TargetFrameworks in HdrHistogram.Benchmarking.csproj - -**File:** `HdrHistogram.Benchmarking/HdrHistogram.Benchmarking.csproj` - -**Change:** Replace the multi-value `` element on line 5 with a single `net8.0` target. - -**From:** -```xml -net8.0;net7.0;net6.0;net5.0;net47;netcoreapp3.1;netcoreapp2.1.29 -``` - -**To:** -```xml -net8.0 -``` - -**Why:** Eliminates all five EOL frameworks from the benchmarking project, resolving `NETSDK1138` warnings. - -**Verification:** Open the file and confirm the `` element contains exactly `net8.0` and no semicolons. - -- [x] Replace the `` value in `HdrHistogram.Benchmarking/HdrHistogram.Benchmarking.csproj` with `net8.0` - ---- - -### Task 2 — Update the Benchmarking Project TFM block in build-system.md - -**File:** `spec/tech-standards/build-system.md` - -**Change:** Lines 39–45 — replace the "Multi-targeted for performance comparison" description and the multi-framework XML snippet with the single-target equivalent. - -**From (lines 39–45):** -```markdown -### Benchmarking Project - -Multi-targeted for performance comparison: - -```xml -net8.0;net7.0;net6.0;net5.0;net47;netcoreapp3.1;netcoreapp2.1.29 -``` -``` - -**To:** -```markdown -### Benchmarking Project - -Targets the current LTS runtime only (developer tool, not a shipped library): - -```xml -net8.0 -``` -``` - -**Why:** The spec must match the actual project file so future readers are not misled. - -**Verification:** Lines 39–45 of `build-system.md` show `net8.0` only, with no EOL framework identifiers and no "Multi-targeted for performance comparison" text. - -- [x] Update the Benchmarking Project TFM block (lines 39–45) in `spec/tech-standards/build-system.md` - ---- - -### Task 3 — Update the Benchmark Configuration bullet in build-system.md - -**File:** `spec/tech-standards/build-system.md` - -**Change:** Line 227 — replace the "Multiple .NET versions for comparison" bullet with a description that reflects the single `net8.0` target. - -**From (lines 226–229):** -```markdown -BenchmarkDotNet is used with these targets: -- Multiple .NET versions for comparison -- Windows diagnostics support -- Memory allocation tracking -``` - -**To:** -```markdown -BenchmarkDotNet is used with these targets: -- `net8.0` (current LTS runtime) -- Windows diagnostics support -- Memory allocation tracking -``` - -**Why:** The "Multiple .NET versions for comparison" bullet no longer holds after reducing to a single target; leaving it in place would contradict the updated TFM block above it. - -**Verification:** Line 227 (or equivalent) contains `` `net8.0` (current LTS runtime) `` and no reference to "Multiple .NET versions". - -- [x] Update the Benchmark Configuration bullet (line 227) in `spec/tech-standards/build-system.md` - ---- - -## Tests - -No unit tests exist in the benchmarking project and the brief explicitly states that no new tests need to be added or modified. -Verification is build-only (see Build Verification tasks below). - ---- - -## Build Verification - -### Task 4 — Verify the benchmarking project builds without NETSDK1138 warnings - -**Command:** `dotnet build HdrHistogram.Benchmarking/HdrHistogram.Benchmarking.csproj -c Release` - -**Why:** Confirms that the EOL framework removal eliminates the `NETSDK1138` warnings and that the project still compiles cleanly under `net8.0`. - -**Verification:** Command exits with code 0 and the output contains zero occurrences of `NETSDK1138`. - -- [x] Run `dotnet build HdrHistogram.Benchmarking/HdrHistogram.Benchmarking.csproj -c Release` and confirm zero `NETSDK1138` warnings and exit code 0 - ---- - -### Task 5 — Verify the full solution builds successfully - -**Command:** `dotnet build -c Release` (from repo root) - -**Why:** Ensures that removing the EOL target frameworks from the benchmarking project does not introduce regressions in any other project in the solution. - -**Verification:** Command exits with code 0 and output shows all projects (main library, unit tests, examples, benchmarking) built successfully. - -- [x] Run `dotnet build -c Release` from the repo root and confirm the full solution builds with exit code 0 and no regressions - ---- - -## Acceptance Criteria Cross-Reference - -| Acceptance Criterion (from brief) | Covered by | -|-----------------------------------|------------| -| `HdrHistogram.Benchmarking.csproj` contains no EOL target frameworks | Task 1 | -| `dotnet build -c Release` completes with zero `NETSDK1138` warnings | Task 4 | -| `dotnet build -c Release` completes successfully for the whole solution | Task 5 | -| `build-system.md` Benchmarking Project TFM block reflects `net8.0` only | Task 2 | -| `build-system.md` Benchmark Configuration section accurately describes the final `TargetFrameworks` value | Task 3 |