Skip to content

Commit 49c19f4

Browse files
leecampbell-codeagentLeeCampbell
authored andcommitted
plan(HdrHistogram#119): review brief
1 parent 522b5f2 commit 49c19f4

1 file changed

Lines changed: 106 additions & 0 deletions

File tree

plan/planning/brief-review.md

Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
# Brief Review: Issue #119 — Add support for net9.0 and net10.0
2+
3+
## Verdict: Revisions required before moving to ready/
4+
5+
The brief is largely solid — all stated file paths exist, all "current values" match the actual codebase, and the scope fits comfortably in one PR.
6+
However, four issues must be addressed before implementation begins.
7+
8+
---
9+
10+
## Issue 1 — SIGNIFICANT: Examples project will not build in the devcontainer after the change
11+
12+
**Location in brief:** Affected Files table (Examples row), Risks section
13+
14+
**Problem:**
15+
The devcontainer (`/.devcontainer/Dockerfile`) is built on `mcr.microsoft.com/dotnet/sdk:9.0-bookworm-slim` and additionally installs the .NET 8.0 *runtime* only.
16+
Targets buildable in the devcontainer today: `net8.0`, `net9.0`, `netstandard2.0`.
17+
18+
The brief changes `HdrHistogram.Examples.csproj` from `net8.0` to `net10.0` (single target).
19+
After this change, the Examples project cannot be built or run inside the devcontainer — the .NET 10 SDK is simply not present.
20+
21+
The brief's "local failure is acceptable during transition" applies to the main library and test project; those are CI-authoritative artefacts.
22+
The Examples project is described in the brief itself as "a developer-facing runnable tool", so breaking its local buildability is a direct regression.
23+
24+
**Required resolution (choose one and state it explicitly in the brief):**
25+
26+
- **Option A (preferred):** Update `.devcontainer/Dockerfile` to use `mcr.microsoft.com/dotnet/sdk:10.0-bookworm-slim` as the base image and add an explicit install of the 8.0 and 9.0 runtimes.
27+
Add `.devcontainer/Dockerfile` to the Affected Files table.
28+
- **Option B:** Target Examples at `net9.0` (matching the current devcontainer SDK) and note this as an interim state pending a devcontainer upgrade in a follow-up issue.
29+
- **Option C:** Make Examples multi-target (`net10.0;net9.0`) so it is runnable wherever any of those SDKs is present.
30+
31+
---
32+
33+
## Issue 2 — MINOR: CI YAML format for multiple SDK versions is ambiguous
34+
35+
**Location in brief:** Affected Files table (ci.yml row)
36+
37+
**Problem:**
38+
The brief states the required value is `8.0.x`, `9.0.x`, `10.0.x` (multi-line) but does not show the exact YAML syntax.
39+
The `actions/setup-dotnet@v4` action supports a multi-line scalar for `dotnet-version`, but an implementer unfamiliar with the action could also try multiple separate steps, which would not work with `cache: true` correctly.
40+
41+
The current `ci.yml` also uses `cache: true` with `cache-dependency-path: '**/*.csproj'`.
42+
With multiple SDK versions, NuGet restore and caching behaviour should be confirmed.
43+
44+
**Required fix:**
45+
Add an exact YAML snippet to the brief, for example:
46+
47+
```yaml
48+
- uses: actions/setup-dotnet@v4
49+
with:
50+
dotnet-version: |
51+
8.0.x
52+
9.0.x
53+
10.0.x
54+
cache: true
55+
cache-dependency-path: '**/*.csproj'
56+
```
57+
58+
---
59+
60+
## Issue 3 — MINOR: BenchmarkDotNet risk has no resolution path
61+
62+
**Location in brief:** Risks and Open Questions section
63+
64+
**Problem:**
65+
The brief correctly flags that `BenchmarkDotNet 0.13.12` may not support `net10.0` and says "verify during implementation."
66+
That leaves the implementer without any guidance on what to do if verification fails.
67+
68+
**Required fix:**
69+
Add a concrete fallback action, for example:
70+
71+
> 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 in `spec/tech-standards/build-system.md` accordingly.
72+
73+
---
74+
75+
## Issue 4 — MINOR: Spec update not itemised
76+
77+
**Location in brief:** Affected Files table (build-system.md row), Acceptance Criteria
78+
79+
**Problem:**
80+
The brief says to update `spec/tech-standards/build-system.md` to "reflect the new targets" but does not enumerate which sections require changes.
81+
The file currently has at least five distinct locations that reference the old framework targets:
82+
83+
| Line | Section | Content to update |
84+
|------|---------|-------------------|
85+
| 24–26 | Main Library TargetFrameworks | `net8.0;netstandard2.0` → `net10.0;net9.0;net8.0;netstandard2.0` |
86+
| 35–37 | Test Project TargetFramework | `net8.0` → `net10.0;net9.0;net8.0` |
87+
| 42–45 | Benchmarking Project TargetFrameworks | `net8.0` → `net10.0;net9.0;net8.0` |
88+
| 226–228 | Benchmark Configuration list | "net8.0 (current LTS runtime)" → list all three runtimes |
89+
| 254 | Prerequisites | ".NET 8.0 SDK (or later)" → ".NET 10.0 SDK (or later)" |
90+
91+
The AppVeyor section (lines 137–177) is already acknowledged as out of scope, which is correct.
92+
93+
**Required fix:**
94+
Replace the single "update to reflect new targets" note with the table above.
95+
The Examples project section is absent from the spec (the spec does not currently document the Examples target framework), so no change is needed for Examples.
96+
97+
---
98+
99+
## Summary of required actions
100+
101+
| # | Severity | Action |
102+
|---|----------|--------|
103+
| 1 | Significant | Choose and document an explicit resolution for the devcontainer/Examples incompatibility |
104+
| 2 | Minor | Add exact YAML snippet for the multi-version `setup-dotnet` step |
105+
| 3 | Minor | Specify the fallback action if BenchmarkDotNet 0.13.12 is incompatible with net10.0 |
106+
| 4 | Minor | Replace vague spec-update note with the itemised list of sections to change |

0 commit comments

Comments
 (0)