Skip to content

Commit 5b04cef

Browse files
leecampbell-codeagentLeeCampbell
authored andcommitted
plan(HdrHistogram#119): apply brief review feedback
1 parent 49c19f4 commit 5b04cef

2 files changed

Lines changed: 49 additions & 118 deletions

File tree

plan/planning/brief-review.md

Lines changed: 0 additions & 106 deletions
This file was deleted.

plan/planning/brief.md

Lines changed: 49 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,9 @@ The spec file `spec/tech-standards/build-system.md` must also be updated to refl
1616
| `HdrHistogram.UnitTests/HdrHistogram.UnitTests.csproj` | `net8.0` | `net10.0;net9.0;net8.0` |
1717
| `HdrHistogram.Examples/HdrHistogram.Examples.csproj` | `net8.0` | `net10.0` |
1818
| `HdrHistogram.Benchmarking/HdrHistogram.Benchmarking.csproj` | `net8.0` | `net10.0;net9.0;net8.0` |
19-
| `.github/workflows/ci.yml` | `dotnet-version: 8.0.x` | `8.0.x`, `9.0.x`, `10.0.x` (multi-line) |
20-
| `spec/tech-standards/build-system.md` | Documents `net8.0;netstandard2.0` | Update to reflect new targets |
19+
| `.github/workflows/ci.yml` | `dotnet-version: 8.0.x` | `8.0.x`, `9.0.x`, `10.0.x` (multi-line — see CI section below) |
20+
| `.devcontainer/Dockerfile` | `sdk:9.0-bookworm-slim` + 8.0 runtime | `sdk:10.0-bookworm-slim` + explicit 8.0 and 9.0 runtimes |
21+
| `spec/tech-standards/build-system.md` | Documents `net8.0;netstandard2.0` | Update five specific sections (see Spec Update section below) |
2122

2223
## Conditional Compilation
2324

@@ -29,18 +30,58 @@ This guard already applies correctly to net8.0, net9.0, and net10.0.
2930
No new `#if` directives are required.
3031
No `#if NET9_0_OR_GREATER` or `#if NET10_0_OR_GREATER` optimisations have been identified as necessary for this changeset.
3132

33+
## CI YAML Change
34+
35+
The `actions/setup-dotnet@v4` action supports a multi-line scalar for `dotnet-version`.
36+
Use the following exact syntax in `.github/workflows/ci.yml`:
37+
38+
```yaml
39+
- uses: actions/setup-dotnet@v4
40+
with:
41+
dotnet-version: |
42+
8.0.x
43+
9.0.x
44+
10.0.x
45+
cache: true
46+
cache-dependency-path: '**/*.csproj'
47+
```
48+
49+
Do not use separate `setup-dotnet` steps for each version — this would break `cache: true` behaviour.
50+
51+
## Devcontainer Change
52+
53+
The current `.devcontainer/Dockerfile` is based on `mcr.microsoft.com/dotnet/sdk:9.0-bookworm-slim` and installs only the .NET 8.0 *runtime*.
54+
The Examples project is a developer-facing runnable tool; after changing its target to `net10.0`, it must remain buildable inside the devcontainer.
55+
56+
**Resolution (Option A):** Change the base image to `mcr.microsoft.com/dotnet/sdk:10.0-bookworm-slim` and add explicit installation of the 8.0 and 9.0 runtimes using the `dotnet-install.sh` script, so all three runtime versions remain available locally.
57+
58+
## Spec Update: Sections to Change in `spec/tech-standards/build-system.md`
59+
60+
The following five locations must be updated; all other sections (including the AppVeyor section, lines 137–177, which is already acknowledged as outdated) are out of scope:
61+
62+
| Approx. Line | Section | Change |
63+
|---|---|---|
64+
| 24–26 | Main Library TargetFrameworks | `net8.0;netstandard2.0` → `net10.0;net9.0;net8.0;netstandard2.0` |
65+
| 35–37 | Test Project TargetFramework | `net8.0` → `net10.0;net9.0;net8.0` |
66+
| 42–45 | Benchmarking Project TargetFrameworks | `net8.0` → `net10.0;net9.0;net8.0` |
67+
| 226–228 | Benchmark Configuration list | "net8.0 (current LTS runtime)" → list all three runtimes |
68+
| 254 | Prerequisites | ".NET 8.0 SDK (or later)" → ".NET 10.0 SDK (or later)" |
69+
70+
The Examples project section is absent from the spec, so no spec change is needed for that project.
71+
3272
## Acceptance Criteria
3373

3474
- [ ] `HdrHistogram.csproj` targets `net10.0;net9.0;net8.0;netstandard2.0`
3575
- [ ] `HdrHistogram.UnitTests.csproj` targets `net10.0;net9.0;net8.0`
3676
- [ ] `HdrHistogram.Examples.csproj` targets `net10.0`
3777
- [ ] `HdrHistogram.Benchmarking.csproj` targets `net10.0;net9.0;net8.0`
38-
- [ ] CI installs .NET SDK 8.0.x, 9.0.x, and 10.0.x
78+
- [ ] CI installs .NET SDK 8.0.x, 9.0.x, and 10.0.x using a single `setup-dotnet` step with a multi-line `dotnet-version` scalar
79+
- [ ] `.devcontainer/Dockerfile` uses `sdk:10.0-bookworm-slim` base image with 8.0 and 9.0 runtimes installed
3980
- [ ] `dotnet build -c Release` succeeds for all target frameworks
4081
- [ ] `dotnet test` passes on all three modern runtimes (net8.0, net9.0, net10.0)
4182
- [ ] `dotnet pack` produces a NuGet package containing assemblies for all four targets
4283
- [ ] No regressions — all existing tests pass on all targets
43-
- [ ] `spec/tech-standards/build-system.md` updated to reflect the new target frameworks
84+
- [ ] `spec/tech-standards/build-system.md` updated at the five specific locations listed above
4485

4586
## Test Strategy
4687

@@ -61,18 +102,14 @@ After `dotnet pack`, confirm the `.nupkg` contains `lib/net8.0/`, `lib/net9.0/`,
61102

62103
## Risks and Open Questions
63104

64-
- **net10.0 SDK availability**: The devcontainer currently uses a .NET 9.0 base image with an additional 8.0 runtime.
65-
A .NET 10.0 SDK must be available in CI (GitHub Actions `setup-dotnet@v4` supports `10.0.x`) and locally.
66-
If the devcontainer does not have .NET 10 installed, local builds targeting `net10.0` will fail.
67-
The CI step is the authoritative build environment; local failure is acceptable during transition.
68-
69105
- **BenchmarkDotNet compatibility**: `BenchmarkDotNet` version `0.13.12` (currently referenced) must support net10.0.
70-
If it does not, the version pin may need updating.
71-
This should be verified during implementation by attempting a Release build of the benchmarking project.
106+
Verify during implementation by attempting a Release build of the benchmarking project.
107+
If `BenchmarkDotNet 0.13.12` fails to build against `net10.0`, upgrade both `BenchmarkDotNet` and `BenchmarkDotNet.Diagnostics.Windows` to the latest stable version as part of this PR and update the version recorded in `spec/tech-standards/build-system.md` accordingly.
72108

73109
- **Examples project**: The issue specifies updating to `net10.0` only (single target, not multi-target).
74110
This is intentional — examples are a developer-facing runnable tool, not a shipped library.
111+
The devcontainer change (see above) ensures local buildability is preserved.
75112

76113
- **Spec update**: `spec/tech-standards/build-system.md` still documents AppVeyor CI.
77114
That section was already outdated before this issue.
78-
Only the target framework tables and CI setup sections need updating here; AppVeyor cleanup is out of scope.
115+
Only the five target framework and prerequisite locations listed above need updating here; AppVeyor cleanup is out of scope.

0 commit comments

Comments
 (0)