Skip to content

Commit 7e84d97

Browse files
leecampbell-codeagentLeeCampbell
authored andcommitted
plan(#161): review brief
1 parent 91d7f95 commit 7e84d97

1 file changed

Lines changed: 82 additions & 0 deletions

File tree

plan/planning/brief-review.md

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
# Brief Review: Issue #161 — Drop netstandard2.0
2+
3+
## Verdict: Changes required before moving to ready
4+
5+
The file list, acceptance criteria, and test strategy are solid.
6+
Three issues need resolving.
7+
8+
---
9+
10+
## Issue 1 — Category `performance` is inconsistent with the brief's own analysis (blocking)
11+
12+
The brief states:
13+
14+
> "A micro-benchmark improvement in LeadingZeroCount that does not translate to observable improvement in RecordValue throughput is expected (the intrinsic is already used on net8.0+)."
15+
16+
This concedes the point: **no existing net8.0+ consumer will see any performance improvement**.
17+
The hardware intrinsic path is already taken at compile time via `#if NET5_0_OR_GREATER`.
18+
Removing the fallback does not change the compiled output for any net8.0 or net9.0 or net10.0 build.
19+
20+
The performance gain only applied to consumers targeting the `netstandard2.0` package on a modern runtime — consumers who are now being dropped, not improved.
21+
22+
The accurate category is `chore` (or `refactor`).
23+
24+
**Action required — choose one:**
25+
26+
- **Option A**: Change category to `chore`.
27+
Remove the entire "Benchmark Strategy" section (benchmarks are not required for `chore`).
28+
Retain the note that `LeadingZeroCountBenchmarkBase.cs` must be updated to remove the `ImperativeImplementation` method so it still compiles.
29+
30+
- **Option B**: Keep category as `performance` and rewrite the performance rationale.
31+
The argument must be made without contradiction: e.g., "consumers who pinned to the `netstandard2.0` target on .NET 5+ runtimes received the slow fallback path; this change forces them onto the net8.0 target, where they receive the intrinsic." Acknowledge this is a narrow population.
32+
With `performance` retained, the benchmark plan must also be strengthened (see Issue 2).
33+
34+
---
35+
36+
## Issue 2 — End-to-end benchmark is conditional when it should be mandatory (blocking if `performance` is kept)
37+
38+
The brief says:
39+
40+
> "If an end-to-end benchmark for `RecordValue` throughput exists (check `Recording/`), run it too."
41+
42+
`HdrHistogram.Benchmarking/Recording/Recording32BitBenchmark.cs` **was confirmed to exist**.
43+
The spec (`testing-standards.md`) states: "Both levels of benchmark are required."
44+
Conditional language is not acceptable for a `performance` issue.
45+
46+
**Action required (if `performance` category is retained):**
47+
48+
Replace the conditional phrasing with an explicit instruction:
49+
50+
> "Run `Recording32BitBenchmark` as the end-to-end benchmark.
51+
> Include before/after results in the PR description alongside the `LeadingZeroCount` micro-benchmark results."
52+
53+
---
54+
55+
## Issue 3 — PropertyGroup consolidation scope is unresolved (minor, non-blocking)
56+
57+
Risk item 4 notes that the three per-framework `Release` `PropertyGroup` conditions could be collapsed into one unconditional block, but says "should be confirmed with the implementer."
58+
59+
A brief should not leave scope ambiguous.
60+
The implementer cannot resolve this themselves — it must be decided before implementation begins.
61+
62+
**Action required:**
63+
64+
Make an explicit decision and state it clearly, e.g.:
65+
66+
> "Collapsing the three per-framework Release `PropertyGroup` conditions into a single `Condition="'$(Configuration)' == 'Release'"` block is **in scope** for this PR."
67+
68+
or:
69+
70+
> "Collapsing the Release `PropertyGroup` conditions is **out of scope**; a follow-up chore can address it."
71+
72+
---
73+
74+
## What is correct and does not need changing
75+
76+
- All four affected files exist at the stated paths.
77+
- Line-level descriptions of the required changes are accurate.
78+
- The claim that only two source files contain the relevant `#if` blocks is confirmed.
79+
- Unit test and benchmarking projects already target `net10.0;net9.0;net8.0` — no changes needed there.
80+
- Acceptance criteria are measurable and complete.
81+
- The note that `ImperativeImplementation` in `LeadingZeroCountBenchmarkBase.cs` must be removed is correct and necessary.
82+
- The NuGet breaking-change risk is correctly identified.

0 commit comments

Comments
 (0)