Skip to content

Commit 1c623bb

Browse files
committed
docs: close Clang warning-clean ticket
1 parent 16b5a92 commit 1c623bb

6 files changed

Lines changed: 79 additions & 37 deletions

File tree

AGENTS.md

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,9 @@
1818
Net +6, Net.Http.Headers +2, TimeZone +18, and Xml +5; all other executables are unchanged.
1919
Graph 41 / 96, test-only seams 5 / 22, negative fixtures 55 / 284. The Doxygen 1.9.8
2020
no-regression baseline is 2,675 and is enforced both locally and in
21-
CI.
21+
CI. Ticket #2419 additionally makes the complete production graph a permanent Clang gate:
22+
Clang 19.1.7 builds all 219 first-party translation units with `-Werror`, 0 warnings and
23+
0 errors, from both `local_ci_check.sh` and the GitHub full job.
2224

2325
<details><summary>Historical test-count ledger retained verbatim</summary>
2426

@@ -226,7 +228,8 @@ reconfigure/rebuild is the exception that must be justified, never the default.
226228

227229
### Compile support is not runtime support
228230

229-
The current full build/test baseline is Linux/GCC. Post-modular MinGW-w64 GCC
231+
The current full build/test baseline is Linux/GCC; the complete production-only `All` graph is
232+
also warning-clean under Clang 19.1.7 and is enforced locally and in CI. Post-modular MinGW-w64 GCC
230233
14-win32/CMake 3.31.6 and Emscripten 5.0.7/CMake 3.31.6 library builds both
231234
compile the `All` graph and a selective `Text.Json` graph without
232235
GoogleTest/runtime execution. Real downstream Apple Clang/Xcode 15.4 builds

CLAUDE.md

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,9 @@
1818
Net +6, Net.Http.Headers +2, TimeZone +18, and Xml +5; all other executables are unchanged.
1919
Graph 41 / 96, test-only seams 5 / 22, negative fixtures 55 / 284. The Doxygen 1.9.8
2020
no-regression baseline is 2,675 and is enforced both locally and in
21-
CI.
21+
CI. Ticket #2419 additionally makes the complete production graph a permanent Clang gate:
22+
Clang 19.1.7 builds all 219 first-party translation units with `-Werror`, 0 warnings and
23+
0 errors, from both `local_ci_check.sh` and the GitHub full job.
2224

2325
<details><summary>Historical test-count ledger retained verbatim</summary>
2426

@@ -226,7 +228,8 @@ reconfigure/rebuild is the exception that must be justified, never the default.
226228

227229
### Compile support is not runtime support
228230

229-
The current full build/test baseline is Linux/GCC. Post-modular MinGW-w64 GCC
231+
The current full build/test baseline is Linux/GCC; the complete production-only `All` graph is
232+
also warning-clean under Clang 19.1.7 and is enforced locally and in CI. Post-modular MinGW-w64 GCC
230233
14-win32/CMake 3.31.6 and Emscripten 5.0.7/CMake 3.31.6 library builds both
231234
compile the `All` graph and a selective `Text.Json` graph without
232235
GoogleTest/runtime execution. Real downstream Apple Clang/Xcode 15.4 builds

NEXT.md

Lines changed: 36 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,19 @@
33

44
# NEXT.md
55

6-
> **ACTIVE — #2419, 2026-08-22: restore the warning-clean Clang production build.** An
7-
> independent Clang 17 build found four bounded `-Werror` regressions after the GCC-only final
8-
> gate: one potentially evaluated `typeid`, two unused compression constants and one unused
9-
> WebSocket private field. The local reproducer is Clang 19.1.7. #2419 repairs those sites and
10-
> adds a production-only Clang CI gate so ticket #37's GCC/Clang warning-policy invariant is
11-
> measured continuously. The 364-row correctness audit remains fully dispositioned; maintenance
12-
> mode is withheld only until this portability gate is green and the full supported gate is
13-
> reverified.
6+
> **#2419 CLOSED — CLANG GATE GREEN, 2026-08-22.** An independent Clang 17 build found four
7+
> bounded `-Werror` regressions after the GCC-only final gate: one potentially evaluated `typeid`,
8+
> two unused compression constants and one unused WebSocket private field. They are repaired
9+
> without behavior changes. The permanent production-only gate builds **219/219** first-party
10+
> translation units with Clang 19.1.7 and `-Werror`: **0 warnings, 0 errors**. Six contract tests
11+
> pin compiler selection, all-components/no-tests scope, `-Werror`, warning detection, the
12+
> two-job ceiling, missing-compiler failure and local/CI wiring.
1413
>
1514
> **Test-count floor, 2026-08-22 — 17,840 / 38, AND THE GATE IS GREEN.** The complete
1615
> 38-executable gate reads **17,840 run: 17,840 passed, 0 failed, 0 skipped**, zero build warnings
17-
> at `--parallel 2` over a cache-disabled full repository build. Graph **41 / 96**, seams **5 / 22**,
18-
> negative fixtures **55 / 284**.
16+
> at `--parallel 2` over the GCC repository build. The same end-to-end local/CI gate now also
17+
> includes the fresh Clang production build above. Graph **41 / 96**, seams **5 / 22**, negative
18+
> fixtures **55 / 284**.
1919
>
2020
> **+59** on the 17,781 final-audit closure, all from #2418's post-`DateTimeKind` consumer audit:
2121
> `Core_Base` 6,156 → 6,178, `Globalization` 704 → 705, `IO` 700 → 705, `Net` 340 → 346,
@@ -53,13 +53,14 @@
5353
>
5454
> ---
5555
>
56-
> ## MAINTENANCE-READY FOR THE DECLARED SCOPE — #2418 CLOSED
56+
> ## MAINTENANCE-READY FOR THE DECLARED SCOPE — #2419 CLOSED
5757
>
58-
> Measured 2026-08-22: `ticket` is **2,408 done, 0 doing, 0 todo, 3 blocked, 5 wontfix**, and
58+
> Measured 2026-08-22: `ticket` is **2,409 done, 0 doing, 0 todo, 3 blocked, 5 wontfix**, and
5959
> `task` is fully classified (**1,087 ported, 140 ignore, 14,980 ignored**). Ticket #2417 remains a
6060
> truthful closure of the 364 historical audit findings; #2418 separately closes the later
61-
> post-#1941 `DateTimeKind` ripple discovered outside that audit. A bounded final scan found no
62-
> remaining actionable correctness work inside the declared practical subset.
61+
> post-#1941 `DateTimeKind` ripple discovered outside that audit; #2419 restores ticket #37's
62+
> cross-compiler warning invariant and makes it a permanent gate. A bounded final scan found no
63+
> remaining actionable internal work inside the declared practical subset.
6364
>
6465
> The other three incomplete tickets depend on external prerequisites this container lacks, as
6566
> measured rather than assumed:
@@ -71,6 +72,22 @@
7172
>
7273
> The five `wontfix` entries are recorded decisions with their reasons, not oversights.
7374
>
75+
> ## 2026-08-22 — #2419: warning-clean Clang production build
76+
>
77+
> Clang-specific warnings are repaired at their source: Delegate RTTI still observes the dynamic
78+
> invocation-list entry type without hiding a call in `typeid`'s polymorphic operand; two dead
79+
> compression constants are removed; and `CancellationScope` no longer stores a redundant raw
80+
> owner pointer that its callback never read. No public API, behavior, test count, layout exposed
81+
> to consumers, or module edge changed.
82+
>
83+
> `scripts/check_clang_production_build.sh` creates a fresh tree only under `build-tmp`, selects
84+
> Clang for C and C++, disables tests and benchmarks, builds `All` at most two jobs, and verifies
85+
> every first-party production command carries `-Werror`. It runs from `local_ci_check.sh` and
86+
> therefore the GitHub full job. Final evidence: Clang 19.1.7 **219/219 translation units, 0
87+
> warnings, 0 errors**; GCC **17,840/17,840**; selective matrix **10/10**; Doxygen **2,675/2,675**;
88+
> Python validator tests **124/124**; ASan+UBSan **6,399** targeted tests and TSan **108/108**
89+
> Net.WebSockets tests.
90+
>
7491
> ## 2026-08-22 — #2418: post-#1941 `DateTimeKind` consumer audit
7592
>
7693
> The ripple audit repaired local `DateTime::Now`/`Today`, UTC `UnixEpoch`, Kind-preserving
@@ -108,8 +125,8 @@
108125
> ## HOW THE LAST STRETCH WENT, AND WHAT IS WORTH CARRYING FORWARD
109126
>
110127
> The queue was emptied by the date/time chain rooted at **#1940**, the #2417 audit close-out and
111-
> #2418's post-feature ripple audit, plus three findings made **while working on something else**.
112-
> That last category is worth naming, because none of the three was on any list:
128+
> #2418's post-feature ripple audit, plus four findings made **while working on something else**.
129+
> That last category is worth naming, because none of the four was on any list:
113130
>
114131
> * **#2415 — a gate had been RED for a day behind a green test count.**
115132
> `scripts/check_selective_components.sh` failed on a fixture #1889 had legitimately invalidated,
@@ -125,6 +142,9 @@
125142
> * **A limitation found by a test of mine FAILING** (#1945): `RoundtripKind` could not carry a kind
126143
> across a string, because nothing wrote a marker and nothing read one. It was declared and
127144
> pinned, and SA-16.3 later closed it — with the pin **inverted rather than deleted**.
145+
> * **#2419 — “warning-clean” meant GCC-only.** An independent Clang 17 build found four warnings
146+
> promoted to errors even though ticket #37 explicitly named GCC and Clang. The fixes are small,
147+
> but the durable repair is the fresh 219-translation-unit Clang gate now run locally and in CI.
128148
>
129149
> **Three recurring process lessons, each of which cost real time this stretch:**
130150
>

README.md

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,9 @@ The component graph is enforced rather than documented only:
190190
- `scripts/generate_component_catalog.py --check` rejects catalogue drift.
191191
- `scripts/check_selective_components.sh` defines ten isolated positive
192192
consumers and negative leakage fixtures.
193+
- `scripts/check_clang_production_build.sh` builds all 219 first-party
194+
production translation units with Clang, tests disabled, and verifies from
195+
the compile database that every one still carries `-Werror`.
193196
- `scripts/check_negative_consumer_fixtures.py` compiles every negative consumer
194197
fixture in `test/consumer/` **once per marked site** and requires each site to
195198
be rejected for its own declared reason. A fixture marks each site with
@@ -200,7 +203,8 @@ The component graph is enforced rather than documented only:
200203
fixtures. Compilation jobs resolve as explicit `--jobs`, then
201204
`SHARP_RUNTIME_BUILD_JOBS`, then the safe default 2; only 1 or 2 is accepted.
202205
- `.github/workflows/components.yml` runs the selective matrix and the full
203-
compatibility build on Ubuntu for pushes and pull requests.
206+
compatibility build on Ubuntu for pushes and pull requests. The full job
207+
includes both the GCC build/test gate and the Clang production warning gate.
204208

205209
At the current baseline the graph has **41 physical modules and 96 direct
206210
production dependency edges**, with no allow-listed exception. The boundary
@@ -211,11 +215,13 @@ configure `Threading` or `TimeZone`.
211215
## Platform status
212216

213217
The complete build and test baseline is currently verified on Linux with GCC.
214-
Other platform evidence is narrower:
218+
The complete production graph is additionally warning-clean on Linux with
219+
Clang; other platform evidence is narrower:
215220

216221
| Platform/toolchain | Verified scope |
217222
|---|---|
218223
| Linux/GCC | Current warning-free full component build and all 17,840 tests, with no failures or skips. |
224+
| Linux/Clang | Clang 19.1.7 builds all 219 first-party production translation units with `-Wall -Wextra -Werror`, 0 warnings and 0 errors. Tests remain covered by the Linux/GCC row. The production-only gate runs locally and in GitHub CI. |
219225
| Windows/MinGW | MinGW-w64 GCC 14-win32/CMake 3.31.6 compiled the post-component `All` and selective `Text.Json` library graphs under ticket #1741. GoogleTest was not cross-built and repository CI remains Ubuntu-only. |
220226
| Emscripten | Emscripten 5.0.7/CMake 3.31.6 compiled the post-component `All` and selective `Text.Json` library graphs under ticket #1741. Tests were not cross-built or run, and some runtime APIs deliberately throw `PlatformNotSupportedException`. |
221227
| macOS/Apple Clang | Real downstream Xcode 15.4 builds drove portability fixes on 2026-07-20; this repository has no macOS job or recorded full standalone test baseline. |

plan.md

Lines changed: 25 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,21 @@
11
# Sharp Runtime plan
22

3-
*Last verified GCC gate: 2026-08-22 — branch **`next`**. Gate **17,840 across 38 executables: 17,840
3+
*Last verified cross-compiler gate: 2026-08-22 — branch **`next`**. GCC gate **17,840 across 38 executables: 17,840
44
passed, 0 failed, 0 skipped — GREEN**, recounted from the per-executable logs with every executable
5-
run separately and continuing past failures, zero build warnings over a cache-disabled full build
6-
at `--parallel 2`. Graph **41 / 96**, seams **5 / 22**, negative fixtures **55 / 284**. Ticket
7-
#2418 closed the bounded post-#1941 `DateTimeKind` propagation gap. Ticket **#2419 is now doing**:
8-
an independent Clang 17 production build found four small `-Werror` regressions, so the repository
9-
is not called maintenance-ready again until Clang is warning-clean and a regression gate exists.*
5+
run separately and continuing past failures, with zero build warnings at `--parallel 2`. The fresh
6+
Clang 19.1.7 production-only gate built **219/219** first-party
7+
translation units with `-Werror`, 0 warnings and 0 errors. Graph **41 / 96**, seams **5 / 22**,
8+
negative fixtures **55 / 284**. Ticket #2418 closed the bounded post-#1941 `DateTimeKind`
9+
propagation gap; #2419 restored and permanently gates ticket #37's GCC/Clang warning invariant.*
1010

11-
## Status: #2419 in progress — maintenance mode pending the Clang gate
11+
## Status: maintenance-ready for the declared scope
1212

1313
Measured 2026-08-22, not estimated:
1414

1515
| | |
1616
|---|---|
17-
| `ticket` done | **2,408** |
18-
| `ticket` doing | **1** |
17+
| `ticket` done | **2,409** |
18+
| `ticket` doing | **0** |
1919
| `ticket` **todo** | **0** |
2020
| `ticket` blocked | 3 |
2121
| `ticket` wontfix | 5 |
@@ -26,9 +26,11 @@ propagation/validation defects in `DateTime`, `DateTimeOffset`, `TimeZoneInfo`,
2626
their bounded consumers. The 364-row audit index remains fully dispositioned as historical audit
2727
truth; #2418 is a later correctness ticket and does not alter its distribution.
2828

29-
Ticket **#2419** restores ticket #37's explicit GCC/Clang warning-policy invariant. Its bounded
30-
scope is the four independently reproduced Clang diagnostics plus a production-only Clang CI gate;
31-
it does not reopen the correctness audit or broaden the supported API subset.
29+
Ticket **#2419** restored ticket #37's explicit GCC/Clang warning-policy invariant. Four
30+
independently reproduced Clang diagnostics were repaired without behavior changes. A fresh
31+
production-only `All` build now runs from the local gate and GitHub full job, and its six contract
32+
tests prevent loss of compiler selection, scope, `-Werror`, warning detection or the two-job limit.
33+
It does not reopen the correctness audit or broaden the supported API subset.
3234

3335
The other three incomplete tickets are externally blocked. Each was measured rather than assumed:
3436

@@ -39,6 +41,13 @@ The other three incomplete tickets are externally blocked. Each was measured rat
3941

4042
The five `wontfix` entries are recorded decisions with their reasons.
4143

44+
Ticket #2419's final evidence is Clang 19.1.7 over **219/219** first-party production translation
45+
units with **0 warnings and 0 errors**; the unchanged GCC gate at **17,840/17,840** across 38
46+
executables; all ten selective configurations; Doxygen **2,675/2,675**; graph **41/96**; seams
47+
**5/22**; negative fixtures **55/284** over 339 compiler invocations; and Python validator tests
48+
**124/124**. Targeted ASan+UBSan passed **6,399** tests (Core.Base, IO.Compression and
49+
Net.WebSockets), and TSan passed **108/108** Net.WebSockets tests.
50+
4251
Ticket #2418's final evidence is a warning-free cache-disabled full build; **17,840/17,840** tests
4352
across 38 executables; graph **41/96**; all ten selective component configurations; Doxygen
4453
**2,675/2,675**; and every repository consistency validator. ASan+UBSan+LSan and strict UBSan each
@@ -69,11 +78,12 @@ closed residual `Socket`, `Timer` and `Process::WaitForExit()` lifetime/order de
6978

7079
The date/time chain rooted at **#1940** — #1940, #1941, #1942, #1943, #1944, #1945, #2409, #2410,
7180
#2412, #2414 and the final #2418 consumer ripple — together with **#1997** (all four groups),
72-
#2417's audit close-out and three findings made *while working on something else*: **#2415** (a
81+
#2417's audit close-out and four findings made *while working on something else*: **#2415** (a
7382
gate red for a day behind a green test count, and building into
7483
`/tmp`), **#2416** (`DateTime::ToString` had no standard-format table, so the two halves of one type
75-
disagreed about what `o` means), and #1945's `RoundtripKind` limitation, found by one of my own
76-
tests failing.
84+
disagreed about what `o` means), #1945's `RoundtripKind` limitation, found by one of my own tests
85+
failing, and **#2419** (an independent Clang build disproved a GCC-only warning-clean claim and led
86+
to a permanent second-compiler gate).
7787

7888
Standing approvals **SA-14**, **SA-15** and **SA-16** were granted over 2026-08-20 and are recorded
7989
in `docs/StandingApprovals.md`; SA-16 is the one that unblocked the last four tickets.

plan.sqlite3

0 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)