Skip to content

Commit 6e523f7

Browse files
committed
docs(handoff): bring NEXT.md and plan.md up to the current state
Both were a week stale and, worse, actively misleading for a new context: NEXT.md's top block was the 2026-08-12 floor of 17,057/38 with six failures, and plan.md's was "Last verified 2026-08-10" at 16,801/38 -- both asserting that /rv and ccache are ABSENT and that the downstream consumers may not be inspected. All three are now false, and correcting them is what unblocked most of the 192 tickets closed since. Each file gains a top block; everything below is retained and explicitly labelled as historically stale. What the new blocks record: * the floor is 17,597/38 and THE GATE IS GREEN -- 0 failed, 0 skipped -- reproduced independently on the committed state with zero warnings; * BOTH queues are empty: 0 todo tickets, 0 unclassified tasks; * the four environment corrections, called out first, because every older block in both files contradicts them; * that cna builds against the SIBLING checkout on develop, which is why a repair here reaches it at the merge and why #2381 could not be carried out even though it was granted; * that cna holds TEN UNCOMMITTED FILES from #2366 and #2377, why they are uncommitted, and the unresolved CnaTests timeout -- recorded as unproven rather than dismissed, since proving it means stashing in the user's tree; * the nine blocked tickets with their measured blockers, and #1940 as the one decision that unblocks five; * a resume procedure, including that the gate must run every executable separately and be recounted from the per-executable logs. No production code touched; gate unchanged at 17,597/38.
1 parent 8b08571 commit 6e523f7

2 files changed

Lines changed: 160 additions & 0 deletions

File tree

NEXT.md

Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,125 @@
33

44
# NEXT.md
55

6+
> **Test-count floor, 2026-08-19 — 17,597 / 38, AND THE GATE IS GREEN.** The complete
7+
> 38-executable gate reads **17,597 run: 17,597 passed, 0 failed, 0 skipped**, recounted from the
8+
> per-executable logs and **reproduced independently on the committed state** (`8b08571b`, tree
9+
> clean, `HEAD == origin/next`, zero warnings). Every checkpoint below this one ends with *"the
10+
> gate is not green"*; this one does not. Two of the three historical failure sources were
11+
> environmental and are simply absent in this container; the third was a real repair (#2351).
12+
>
13+
> **BOTH WORK QUEUES ARE EMPTY.** `ticket` has **0 `todo`**; `task` has **0** unclassified
14+
> (14,979 ignored / 1,082 ported / 140 ignore). Ticket totals: **2,379 done, 9 blocked, 1
15+
> needs_user, 5 wontfix**. **192 tickets closed since the 2026-08-12 block below, 43 of them on
16+
> 2026-08-19 alone.** A new session will find nothing to pick up: what remains needs the user or
17+
> an external event, and each is itemised in §2 below.
18+
19+
## Handoff for a new context, 2026-08-19 (queue exhausted)
20+
21+
### 0. READ THIS FIRST — four environment facts every older block in this file gets WRONG
22+
23+
The blocks below were written when the container was different. **Do not trust their environment
24+
claims**; these were re-measured on 2026-08-19:
25+
26+
| Fact | What older blocks say | What is true now |
27+
|---|---|---|
28+
| `/rv/tmp/runtime` | "absent" — dozens of tickets are recorded as blocked on this | **PRESENT.** A .NET **11 preview** snapshot, so a behaviour read from it is .NET 11's, not timeless parity. This is what **SA-5** rests on |
29+
| `ccache` | "absent" | **present** (4.11.2) |
30+
| `cna`, `mobile-eggbert` | "may not be inspected" / "outside this checkout" | **both present** and readable. **SA-2 condition 5 requires measuring against them**; editing needs a per-action instruction |
31+
| `ping_group_range` | `1 0` (closed) — five `PingTests` fail | `0 2147483647` (**open**). The five `PingTests` pass. The gate for **#1962** moved to **`CAP_NET_RAW`, which this uid does NOT have** |
32+
33+
**A ticket whose only recorded gate is "`/rv` absent" or "consumers may not be inspected" is
34+
therefore NOT blocked here.** Re-verify before treating it as such — that single correction is
35+
what unblocked most of the 192 tickets closed since 2026-08-12.
36+
37+
Two more standing facts a new context needs:
38+
39+
- **`cna` builds against the SIBLING checkout `../sharp-runtime`, which is on `develop`.** It does
40+
**not** see `next`. So a repair landed here reaches `cna` **at the merge**, not now — and a
41+
spelling that must work in `cna` has to compile against **both** versions. This is the trap
42+
#2366 hit (`std::nullopt` does not compile against `develop`; `{}` means *remove* under both)
43+
and the reason **#2381 could not be carried out** even though the user granted it.
44+
- **Standing approvals are `docs/StandingApprovals.md`, SA-1 … SA-13** (rule 14). Read it before
45+
recording anything as blocked on an approval.
46+
47+
### 1. `cna` HAS TEN UNCOMMITTED FILES AND THEY ARE THIS PROGRAMME'S WORK
48+
49+
Left deliberately uncommitted: both tickets carried a per-action instruction to **edit**, and
50+
**no commit or push was authorised**.
51+
52+
| Ticket | Files | What |
53+
|---|---|---|
54+
| **#2377** | 7 exception `.cpp` + `GamerServicesExceptionsTests.cpp` | each derived exception names **its own** type in its default message; the inherited one names the **base**, which is a lie (sharp-runtime #2323's rule) |
55+
| **#2366** | `Texture2DTests.cpp`, `headless_coverage_gaps_test.cpp` | `SetEnvironmentVariable(..., "")` stopped meaning *remove* (#2313); `{}` is used because it means *remove* under **both** sharp-runtime versions |
56+
57+
**Measured, and not resolved:** the `CnaTests` binary in `cna/cmake-build-debug` (built *after*
58+
these edits) has **`TwoProcessLoopbackTest.HostMigrationPromotesOneSurvivorAndTheOtherReconnects…`
59+
timing out at 30 s**, and the same binary **segfaults when stdout is redirected**. That test
60+
references none of the edited types and no `what()`, and the edits are message strings plus two
61+
`SetEnvironmentVariable` call sites — but **causation was not proven**, because proving it means
62+
stashing in the user's tree, which needs a per-action instruction. Also honest: the "68/68"
63+
recorded for `CnaTests` at #2366/#2377 was a **smaller configuration** and did **not** cover this
64+
suite.
65+
66+
### 2. Everything that is NOT done, with its measured blocker
67+
68+
**One decision unblocks five tickets.** #1940 is the root: #1942, #1943 and #1945 depend on it
69+
directly and #1944 through #1943.
70+
71+
| # | Status | Why it cannot proceed autonomously |
72+
|---|---|---|
73+
| **1940** | **needs_user** | Three decision-ready questions, all costed by measurement — see §3. **Highest leverage item in the repository.** |
74+
| 1942, 1943, 1944, 1945 | blocked | the #1929 date/time exact-parsing chain, all rooted at #1940. #1941 (a dependency of 1942 and 1945) is **done** |
75+
| 1980 | blocked | **G-3 alone.** G-1/G-2/G-4/G-5 landed 2026-08-19. G-3 reparents `AmbiguousImplementationException` and introduces `OSPlatformAttribute` as a base — a vtable **and** layout change SA-3 excludes, which also breaks `catch (const SystemException&)` |
76+
| 1997 | blocked | **A-2 and A-4 alone.** A-1/A-3 landed 2026-08-19. A-2's cost is **measured, not estimated** — a first cut of `CheckHostName` written against `IPAddress` was rejected by the module-boundary validator. A-4 is a vtable **and** access-level change |
77+
| 1962 | blocked | the gate is now **`CAP_NET_RAW`**, not `ping_group_range`. The raw-socket path this ticket adds **cannot be exercised here at all**, so it would ship unverified — SA-6's position, except that here the environment gates observation of the *only* thing the ticket adds |
78+
| 1773 | blocked | waits on `cna`/`mobile-eggbert` intentionally upgrading to a sharp-runtime revision containing the `ICollection::CopyTo` boundary |
79+
| 2381 | blocked | **granted by the user and still impossible**: `cna` builds against `develop`, which has no `DateTimeKind` at all, and no expression means *preserve the kind* there. Blocked **on the merge**, not on a decision. The exact merge-time diff is recorded on the ticket |
80+
81+
`wontfix` (5, do not reopen without a reason): #1772, #1892, #1893, #1926, #2282.
82+
83+
### 3. #1940 — the one decision worth taking first
84+
85+
Re-measured 2026-08-19; the ticket's own cost premise was **wrong for one viable shape**.
86+
87+
- **The reference cannot settle this.** `DateTime.cs`, `CultureInfo.cs` and `DateTimeFormatInfo.cs`
88+
are all in `System.Private.CoreLib` — .NET has **no component boundary here**, so SA-5 does not
89+
reach the question.
90+
- **The structural blocker is a cycle**, named precisely: `Globalization` declares
91+
`PUBLIC_DEPENDENCIES Core.Base`, so `DateTime` (Core.Base) cannot name `DateTimeFormatInfo`
92+
(Globalization) without an edge the validator rejects.
93+
- **Three shapes, costed by measurement:** (A) an abstraction in `Core.Base` that
94+
`DateTimeFormatInfo` implements — feasible today, because `IFormatProvider::GetFormat` already
95+
returns `void*` keyed by `std::type_info`; (B) move `DateTime` to a new component — **34
96+
including files across eight modules**; (C) move `DateTimeFormatInfo` into `Core.Base` — **two
97+
header files**, it is header-only, does not name `CultureInfo`, its only non-Core.Base include
98+
is an enum, its four includers are all inside Globalization, and ownership is by **logical path
99+
uniqueness**, so **not one include line changes**. Recommendation: **C, then A's overloads**.
100+
- **A live defect sits inside this ticket and is deliberately NOT landed.** .NET's
101+
`s_currentThreadCulture` is `[ThreadStatic]`; this port's `currentCulture_`/`currentUICulture_`
102+
are process-wide `inline static` members written without synchronisation, under a doc-comment
103+
that says *"the current **thread's** culture"*. The naive repair is wrong: .NET falls back
104+
through `DefaultThreadCurrentCulture`, so plain `thread_local` would **silently remove** the
105+
process-wide setting this port has today. The faithful repair is a two-property model, which
106+
adds public surface inside the parked area.
107+
108+
### 4. How to resume
109+
110+
1. `sqlite3 plan.sqlite3 "SELECT ticket_no, priority, title FROM ticket WHERE status='todo' ORDER BY ticket_no;"` — **expect nothing.**
111+
2. If it is still empty, the work is a **rule-14 sweep**: re-read each blocked ticket's recorded
112+
gate against `docs/StandingApprovals.md` and §0 above. That is how #1894 and many others closed.
113+
3. Do not start #1940, #1980 G-3, #1997 A-4 or #1962 without the user. Do not edit `cna` or
114+
`mobile-eggbert` without a per-action instruction, and never commit there.
115+
4. The gate script must run **every executable separately and continue past failures**; both
116+
repository runners stop at the first failure and cannot produce a whole-repository total.
117+
**Recount from the per-executable logs**, never from an accumulator.
118+
5. Build in `build/` with `--parallel 2` only. Never in `/tmp` or the scratchpad.
119+
120+
121+
---
122+
123+
*Everything below is retained historically. Its environment claims are stale — see §0 above.*
124+
6125
> **Test-count floor, 2026-08-12 — 17,057 / 38 (#2104).** The complete 38-executable gate
7126
> reads **17,057 run: 17,049 passed, 2 skipped, 6 failed** (17,049 + 6 + 2 = 17,057), **+8** on
8127
> the 17,049 below — exactly the eight pins #2104 added (`SharpRuntimeTests_IO` 660 → 668; no

plan.md

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,46 @@
11
# Sharp Runtime plan
22

3+
*Last verified: 2026-08-19 — branch **`next`** at `8b08571b`, **pushed and verified on the
4+
remote**, working tree clean. Gate **17,597 across 38 executables: 17,597 passed, 0 failed, 0
5+
skipped — GREEN**, recounted from the per-executable logs and reproduced independently on the
6+
committed state, with zero build warnings. Graph **41 / 93**, seams **3 / 20**, negative fixtures
7+
**48 / 245**. **BOTH WORK QUEUES ARE EMPTY**: `ticket` has 0 `todo` (2,379 done, 9 blocked, 1
8+
needs_user, 5 wontfix) and `task` has 0 unclassified. **192 tickets closed since the 2026-08-10
9+
snapshot below, 43 of them on 2026-08-19.***
10+
11+
***FOUR ENVIRONMENT CLAIMS IN EVERY OLDER SNAPSHOT BELOW ARE NOW FALSE, and correcting them is
12+
what unblocked most of those 192 tickets.*** *`/rv/tmp/runtime` is **PRESENT** — a .NET **11
13+
preview** snapshot, so a behaviour read from it must be reported as .NET 11's rather than as
14+
timeless parity; this is what **SA-5** rests on. `ccache` is **present** (4.11.2). **Both
15+
downstream consumers are present and readable**, and SA-2 condition 5 **requires** measuring
16+
against them — editing either needs a per-action instruction and committing there is never
17+
authorised. `ping_group_range` is **open**, so the five `PingTests` pass and #1962's gate has
18+
moved to **`CAP_NET_RAW`**, which this uid does not have. **A ticket whose only recorded gate is
19+
"`/rv` absent" or "consumers may not be inspected" is therefore not blocked here — re-verify
20+
before treating it as such.** Standing approvals are `docs/StandingApprovals.md`, **SA-1 … SA-13**
21+
(rule 14). Maximum compiler parallelism **2 jobs**, in `build/` only.*
22+
23+
***`cna` builds against the sibling checkout `../sharp-runtime`, which is on `develop`*** *and
24+
does not see `next`, so a repair landed here reaches `cna` at the merge; a spelling that must work
25+
there has to compile against **both** versions. **`cna` currently holds ten uncommitted files that
26+
are this programme's work** — eight from #2377 (each derived exception naming its own type) and
27+
two from #2366 (`{}` rather than `""` for environment-variable removal) — left uncommitted because
28+
no commit was ever authorised. Its `CnaTests` binary has a 30-second timeout in
29+
`TwoProcessLoopbackTest.HostMigration…` and segfaults with stdout redirected; **causation was not
30+
proven**, because proving it means stashing in the user's tree.*
31+
32+
***What remains is not implementation work.*** *#1940 is `needs_user` and is the **root of a
33+
five-ticket chain** (#1942/#1943/#1945 depend on it directly, #1944 through #1943), so one decision
34+
unblocks five; its three questions are costed by measurement, and the cheapest shape — moving
35+
`DateTimeFormatInfo` into `Core.Base`, two header files with **not one include line changed** —
36+
was measured against the ticket's own estimate and found far cheaper. #1980 is down to G-3 alone
37+
and #1997 to A-2/A-4, all of which SA-3 excludes or the module boundary rejects. #1962 cannot be
38+
exercised without `CAP_NET_RAW`. #1773 waits on a downstream upgrade and #2381 on the merge to
39+
`develop`. Full itemisation, including the four environment corrections and the resume procedure,
40+
is the 2026-08-19 handoff at the top of `NEXT.md`.*
41+
42+
*Prior snapshot, retained historically — **its environment claims are stale**:*
43+
344
*Last verified: 2026-08-10 — branch `claude/remediation-batch-1804-namespace-b1yjh5`, the
445
harness-designated branch, at `a53efe1`, **pushed and verified on the remote**. This batch closed
546
the **Core `ArgumentOutOfRangeException` guard-domain slice** (#2253 review, #2254), completed the

0 commit comments

Comments
 (0)