Skip to content

Commit 42b6b18

Browse files
leecampbell-codeagentLeeCampbell
authored andcommitted
plan(HdrHistogram#119): create task breakdown
1 parent abb5112 commit 42b6b18

1 file changed

Lines changed: 283 additions & 0 deletions

File tree

plan/ready/task.md

Lines changed: 283 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,283 @@
1+
# Task List: Issue #119 — Add support for net9.0 and net10.0
2+
3+
Cross-referenced against every acceptance criterion in `plan/ready/brief.md`.
4+
5+
---
6+
7+
## 1 — Main library: target frameworks
8+
9+
**File:** `HdrHistogram/HdrHistogram.csproj`
10+
11+
- [ ] **1.1** Change `<TargetFrameworks>` on line 4 from `net8.0;netstandard2.0` to
12+
`net10.0;net9.0;net8.0;netstandard2.0`.
13+
Verify: the element reads exactly `<TargetFrameworks>net10.0;net9.0;net8.0;netstandard2.0</TargetFrameworks>`.
14+
15+
- [ ] **1.2** Add two `<PropertyGroup>` conditions for the Release `DocumentationFile`,
16+
mirroring the existing block at lines 24–26.
17+
Add one block for `net9.0` (`bin\Release\net9.0\HdrHistogram.xml`) and one for
18+
`net10.0` (`bin\Release\net10.0\HdrHistogram.xml`), immediately after the
19+
existing `net8.0` block.
20+
Verify: both new blocks are present and follow the same pattern as the `net8.0` block.
21+
22+
> Covers acceptance criteria: **AC-1** (`HdrHistogram.csproj` targets all four TFMs),
23+
> **AC-8** (`dotnet pack` produces assemblies for all four targets).
24+
25+
---
26+
27+
## 2 — Unit tests: target frameworks
28+
29+
**File:** `HdrHistogram.UnitTests/HdrHistogram.UnitTests.csproj`
30+
31+
- [ ] **2.1** Change `<TargetFrameworks>` on line 4 from `net8.0` to
32+
`net10.0;net9.0;net8.0`.
33+
Verify: the element reads exactly `<TargetFrameworks>net10.0;net9.0;net8.0</TargetFrameworks>`.
34+
35+
> Covers acceptance criteria: **AC-2**, **AC-7** (`dotnet test` on all three runtimes),
36+
> **AC-9** (no regressions).
37+
38+
---
39+
40+
## 3 — Examples project: target framework
41+
42+
**File:** `HdrHistogram.Examples/HdrHistogram.Examples.csproj`
43+
44+
- [ ] **3.1** Change `<TargetFrameworks>` on line 5 from `net8.0` to `net10.0`.
45+
Verify: the element reads exactly `<TargetFrameworks>net10.0</TargetFrameworks>`.
46+
47+
> Covers acceptance criterion: **AC-3**.
48+
49+
---
50+
51+
## 4 — Benchmarking project: target frameworks and BenchmarkDotNet compatibility
52+
53+
**File:** `HdrHistogram.Benchmarking/HdrHistogram.Benchmarking.csproj`
54+
55+
- [ ] **4.1** Change `<TargetFrameworks>` on line 5 from `net8.0` to
56+
`net10.0;net9.0;net8.0`.
57+
Verify: the element reads exactly `<TargetFrameworks>net10.0;net9.0;net8.0</TargetFrameworks>`.
58+
59+
- [ ] **4.2** Attempt a Release build of the benchmarking project:
60+
```bash
61+
dotnet build HdrHistogram.Benchmarking/HdrHistogram.Benchmarking.csproj -c Release
62+
```
63+
If the build succeeds, this task is done — BenchmarkDotNet 0.13.12 is compatible.
64+
If the build fails due to BenchmarkDotNet incompatibility with net10.0, proceed to task 4.3.
65+
66+
- [ ] **4.3** *(Conditional — only if task 4.2 fails)* Upgrade both
67+
`BenchmarkDotNet` and `BenchmarkDotNet.Diagnostics.Windows` to the latest
68+
stable version.
69+
Verify: `dotnet build HdrHistogram.Benchmarking/HdrHistogram.Benchmarking.csproj -c Release`
70+
succeeds after the upgrade.
71+
Note: if this task is executed, also complete task 10.6 in the spec section below.
72+
73+
> Covers acceptance criteria: **AC-4**, **AC-6** (`dotnet build` succeeds for all TFMs).
74+
75+
---
76+
77+
## 5 — CI pipeline: multi-version SDK install
78+
79+
**File:** `.github/workflows/ci.yml`
80+
81+
- [ ] **5.1** Replace the `setup-dotnet` step (lines 15–19) with a single step using
82+
a multi-line `dotnet-version` scalar:
83+
```yaml
84+
- uses: actions/setup-dotnet@v4
85+
with:
86+
dotnet-version: |
87+
8.0.x
88+
9.0.x
89+
10.0.x
90+
cache: true
91+
cache-dependency-path: '**/*.csproj'
92+
```
93+
Do **not** use separate `setup-dotnet` steps — that would break `cache: true`.
94+
Verify: the file contains exactly one `setup-dotnet` step, and `dotnet-version`
95+
is a multi-line block scalar listing all three versions.
96+
97+
> Covers acceptance criterion: **AC-5**.
98+
99+
---
100+
101+
## 6 — Devcontainer: upgrade base image and install additional runtimes
102+
103+
**File:** `.devcontainer/Dockerfile`
104+
105+
- [ ] **6.1** Change the `FROM` line (line 5) from
106+
`mcr.microsoft.com/dotnet/sdk:9.0-bookworm-slim` to
107+
`mcr.microsoft.com/dotnet/sdk:10.0-bookworm-slim`.
108+
Verify: the first `FROM` line references `sdk:10.0-bookworm-slim`.
109+
110+
- [ ] **6.2** Replace the single 8.0 runtime install (lines 6–8) with explicit
111+
installs of both the 8.0 and 9.0 runtimes via `dotnet-install.sh`, keeping both
112+
in the same `RUN` layer to avoid creating extra image layers:
113+
```dockerfile
114+
RUN dotnet_version=8.0 \
115+
&& curl -sSL https://dot.net/v1/dotnet-install.sh | bash /dev/stdin \
116+
--runtime dotnet --channel $dotnet_version --install-dir /usr/share/dotnet \
117+
&& dotnet_version=9.0 \
118+
&& curl -sSL https://dot.net/v1/dotnet-install.sh | bash /dev/stdin \
119+
--runtime dotnet --channel $dotnet_version --install-dir /usr/share/dotnet
120+
```
121+
Verify: the file installs both 8.0 and 9.0 runtimes, and the base image is 10.0.
122+
123+
> Covers acceptance criterion: **AC-6** (devcontainer uses `sdk:10.0-bookworm-slim`
124+
> with 8.0 and 9.0 runtimes installed).
125+
126+
---
127+
128+
## 7 — Spec: main library TargetFrameworks
129+
130+
**File:** `spec/tech-standards/build-system.md`, approx. lines 24–26
131+
132+
- [ ] **7.1** In the "Main Library (HdrHistogram.csproj)" section, update the XML
133+
code block from:
134+
```xml
135+
<TargetFrameworks>net8.0;netstandard2.0</TargetFrameworks>
136+
```
137+
to:
138+
```xml
139+
<TargetFrameworks>net10.0;net9.0;net8.0;netstandard2.0</TargetFrameworks>
140+
```
141+
Verify: the code block in that section reflects all four targets in the correct order.
142+
143+
> Covers acceptance criterion: **AC-10** (spec updated at specified locations).
144+
145+
---
146+
147+
## 8 — Spec: test project TargetFramework
148+
149+
**File:** `spec/tech-standards/build-system.md`, approx. lines 35–37
150+
151+
- [ ] **8.1** In the "Test Project" section, update the XML code block from:
152+
```xml
153+
<TargetFramework>net8.0</TargetFramework>
154+
```
155+
to:
156+
```xml
157+
<TargetFrameworks>net10.0;net9.0;net8.0</TargetFrameworks>
158+
```
159+
Note: the element name changes from the singular `TargetFramework` to the plural
160+
`TargetFrameworks` to match a multi-target declaration.
161+
Verify: the code block in that section shows all three targets.
162+
163+
> Covers acceptance criterion: **AC-10**.
164+
165+
---
166+
167+
## 9 — Spec: benchmarking project TargetFrameworks
168+
169+
**File:** `spec/tech-standards/build-system.md`, approx. lines 42–45
170+
171+
- [ ] **9.1** In the "Benchmarking Project" section, update the description text
172+
"Targets the current LTS runtime only (developer tool, not a shipped library):" to
173+
reflect multi-targeting, and update the XML code block from:
174+
```xml
175+
<TargetFrameworks>net8.0</TargetFrameworks>
176+
```
177+
to:
178+
```xml
179+
<TargetFrameworks>net10.0;net9.0;net8.0</TargetFrameworks>
180+
```
181+
Verify: both the description and the code block are updated.
182+
183+
> Covers acceptance criterion: **AC-10**.
184+
185+
---
186+
187+
## 10 — Spec: benchmark configuration runtime list
188+
189+
**File:** `spec/tech-standards/build-system.md`, approx. lines 226–228
190+
191+
- [ ] **10.1** In the "Benchmark Configuration" section, replace the single target entry:
192+
```
193+
- `net8.0` (current LTS runtime)
194+
```
195+
with a list of all three supported runtimes:
196+
```
197+
- `net10.0` (current LTS runtime)
198+
- `net9.0` (STS runtime)
199+
- `net8.0` (LTS runtime)
200+
```
201+
Verify: the bullet list covers all three TFMs.
202+
203+
- [ ] **10.2** *(Conditional — only if task 4.3 was executed)* Update the BenchmarkDotNet
204+
version numbers in the "Benchmarking Project" dependencies code block
205+
(approx. lines 66–67) to match the upgraded version.
206+
Verify: the version string in the spec matches the version in
207+
`HdrHistogram.Benchmarking/HdrHistogram.Benchmarking.csproj`.
208+
209+
> Covers acceptance criterion: **AC-10**.
210+
211+
---
212+
213+
## 11 — Spec: prerequisites
214+
215+
**File:** `spec/tech-standards/build-system.md`, approx. line 254
216+
217+
- [ ] **11.1** In the "Prerequisites" section, change:
218+
```
219+
- .NET 8.0 SDK (or later)
220+
```
221+
to:
222+
```
223+
- .NET 10.0 SDK (or later)
224+
```
225+
Verify: the prerequisites list references .NET 10.0 SDK.
226+
227+
> Covers acceptance criterion: **AC-10**.
228+
229+
---
230+
231+
## 12 — Verification: build, test, and pack
232+
233+
These tasks confirm all acceptance criteria related to running the toolchain.
234+
They must be performed **after** all implementation tasks above are complete.
235+
236+
- [ ] **12.1** Run a Release build of the main library and confirm it succeeds for
237+
all four target frameworks:
238+
```bash
239+
dotnet build HdrHistogram/HdrHistogram.csproj -c Release
240+
```
241+
Verify: build output shows `net10.0`, `net9.0`, `net8.0`, and `netstandard2.0`
242+
all built without errors.
243+
244+
- [ ] **12.2** Run the full test suite and confirm all tests pass on all three
245+
modern runtimes:
246+
```bash
247+
dotnet test HdrHistogram.UnitTests/HdrHistogram.UnitTests.csproj -c Release
248+
```
249+
Verify: test results show three separate `net10.0`, `net9.0`, and `net8.0` runs,
250+
all green with zero failures.
251+
252+
- [ ] **12.3** Pack the library and confirm all four TFM folders are present in
253+
the produced `.nupkg`:
254+
```bash
255+
dotnet pack HdrHistogram/HdrHistogram.csproj -c Release --no-build
256+
```
257+
Then inspect the package:
258+
```bash
259+
unzip -l HdrHistogram/bin/Release/HdrHistogram.*.nupkg | grep "^.*lib/"
260+
```
261+
Verify: the archive contains `lib/net8.0/`, `lib/net9.0/`, `lib/net10.0/`,
262+
and `lib/netstandard2.0/` folders.
263+
264+
> Covers acceptance criteria: **AC-6** (build succeeds), **AC-7** (tests pass on
265+
> all runtimes), **AC-8** (pack contains all four targets), **AC-9** (no regressions).
266+
267+
---
268+
269+
## Acceptance Criterion Cross-Reference
270+
271+
| Criterion | Tasks |
272+
|-----------|-------|
273+
| AC-1: `HdrHistogram.csproj` targets `net10.0;net9.0;net8.0;netstandard2.0` | 1.1 |
274+
| AC-2: `HdrHistogram.UnitTests.csproj` targets `net10.0;net9.0;net8.0` | 2.1 |
275+
| AC-3: `HdrHistogram.Examples.csproj` targets `net10.0` | 3.1 |
276+
| AC-4: `HdrHistogram.Benchmarking.csproj` targets `net10.0;net9.0;net8.0` | 4.1 |
277+
| AC-5: CI installs SDKs 8.0.x, 9.0.x, 10.0.x via single `setup-dotnet` step | 5.1 |
278+
| AC-6: `.devcontainer/Dockerfile` uses `sdk:10.0-bookworm-slim` + 8.0 and 9.0 runtimes | 6.1, 6.2 |
279+
| AC-6b: `dotnet build -c Release` succeeds for all TFMs | 4.2, 12.1 |
280+
| AC-7: `dotnet test` passes on net8.0, net9.0, net10.0 | 12.2 |
281+
| AC-8: `dotnet pack` produces `.nupkg` with all four target folders | 1.2, 12.3 |
282+
| AC-9: No regressions — all existing tests pass on all targets | 12.2 |
283+
| AC-10: `spec/tech-standards/build-system.md` updated at all five locations | 7.1, 8.1, 9.1, 10.1, 11.1 |

0 commit comments

Comments
 (0)