From 8e884679e0b6ce3dc1c84004ba9c5c8e3ff91d2a Mon Sep 17 00:00:00 2001 From: Erik Date: Tue, 18 Aug 2026 10:32:37 +0200 Subject: [PATCH] docs: close R2 reproducibility checkpoint --- .../plans/2026-08-18-release-stabilization.md | 84 ++++++++++++++++++- docs/reviews/findings-ledger.md | 35 ++++++-- 2 files changed, 111 insertions(+), 8 deletions(-) diff --git a/docs/plans/2026-08-18-release-stabilization.md b/docs/plans/2026-08-18-release-stabilization.md index 0c00e7a7..3223abc4 100644 --- a/docs/plans/2026-08-18-release-stabilization.md +++ b/docs/plans/2026-08-18-release-stabilization.md @@ -420,8 +420,8 @@ checkpoint. Do not infer status from chat history. |---|---|---|---|---| | R0 | PLAN ACCEPTED; tracking/owner assignment pending | — | Audit complete at `15539a22`; user started R1 | Track plan+audit artifacts; assign R4 owner | | R1 | COMPLETE ON CAMPAIGN BRANCH; not yet merged | `0a934cf5` | 2026-08-18 checkpoint below; F-009/T-001 resolved and committed | Preserve while R2 runs; merge through the normal review path | -| R2 | COMPLETE GATE CHECKPOINT ON CAMPAIGN BRANCH; broader reproducibility work remains | `2ac05486` | Checkpoint below; F-014 resolved, F-010/F-019 partially resolved | Choose locked restore/warning work or R3; merge through normal review | -| R3 | NOT STARTED | — | T-002–T-018; F-015/F-021/F-022/F-030 | Wait for remaining R2 sequencing decision | +| R2 | COMPLETE ON CAMPAIGN BRANCH; not yet merged | `2ac05486`, `c38f6b88` | Checkpoints below; F-014/F-019 resolved, F-010 machine-readable, supported .NET tool portion of F-004 resolved | Begin R3; merge through normal review | +| R3 | NOT STARTED | — | T-002–T-018; F-015/F-021/F-022/F-030 | Begin complete test inventory, naming, skip, and value classification | | R4 | NOT STARTED; may run parallel | — | F-001/F-026/F-031/F-034 | Assign owner/legal provenance decision path | | R5 | NOT STARTED | — | F-002/F-003/F-006/F-007/F-011/F-020/F-027/F-029/F-032 | Wait for R2–R3 | | R6 | NOT STARTED | — | F-004/F-005/F-012/F-016/F-023/F-028 | Wait for R3/R5 | @@ -571,6 +571,86 @@ the broader R2 reproducibility slice or R3 test-quality cleanup is complete. Rollback is `git revert 2ac05486`; do not rewrite branch history. +### R2 reproducibility closeout — 2026-08-18 + +**Working-tree base:** `b459e0cf0cab9241b0771d2ce6838083f2c84162` + +**Implementation commit:** `c38f6b88522750abc2e4acf1898ed566c5576e4a` +on `codex/release-stabilization`; the closeout is durable on that campaign +branch but is not yet merged to `main`. + +Repository policy and dependency graph: + +- `Directory.Build.props` is the common .NET 10, language, nullable, latest + analysis, warnings-as-errors, deterministic-build, and lock-file authority. +- `Directory.Packages.props` centrally pins all 30 direct package versions. + All 89 `PackageReference` sites are versionless; no project-local version can + silently drift. +- `NuGet.Config` clears machine fallback folders and package sources, then + declares only `nuget.org`. +- Every supported project owns `packages.neutral.lock.json` (44 files). Every + shippable source project additionally owns `packages.win-x64.lock.json` and + `packages.linux-x64.lock.json` (14 of each; 72 graphs total). Conventional + `packages.lock.json` files are intentionally absent because NuGet gives that + filename precedence over `NuGetLockFilePath`, preventing adjacent neutral + and RID graphs. +- `tools/update-package-locks.ps1` is the one intentional update path. The + release gate and the launcher's nested Bake publish use forced locked restore, + so stale `obj/` assets cannot hide a disagreement and a normal gate cannot + rewrite dependency resolution. + +Complete maintained build surface: + +- All 13 tracked .NET tools were repaired against package/owned interfaces, + documented in `tools/README.md`, and added to `AcDream.slnx`. +- The gate now verifies that every `.csproj` under `src/`, `tests/`, and + `tools/` is a solution member, requires the expected lock graphs, and records + their hashes in the evidence bundle. The supported graph is 44 projects. +- The older script/probe archive under F-004 is unchanged. Classifying that + historical material remains R6 work; the R2 change only makes the maintained + .NET tools truthful and reproducible. + +Warning cleanup and test-gate stability: + +- A clean complete recompilation originally exposed 26 warnings, all in test + and diagnostic code. Assertion-specific analyzers, nullable test doubles, + and nullable DAT probe boundaries were corrected without changing product + behavior. +- The one known redundant historical Core theory input remains for R3 behind a + site-scoped `xUnit1025` suppression. The central policy still makes any new + duplicate row a build failure. +- The launcher's seven editor-focus variants now execute in one Avalonia test + application session. This prevents the headless framework from attempting + compositor reinitialization on a non-owning thread. The suite passed 11 + consecutive focused runs before the full gate. Aggregating seven theory rows + into one fact reduces the headline passed count by six; all seven variants + are still executed and asserted. +- The launcher package-boundary test now verifies versionless project + references against the central version table rather than incorrectly + requiring inline versions. + +Reproducibility evidence: + +- Forced locked re-evaluation of all 44 neutral and all 28 RID graphs changed + zero lock hashes. +- A locked restore into an empty global package cache, with `--no-cache`, + succeeded from the sole configured source. NuGet assets recorded no fallback + package folder. +- A forced nested launcher-to-Bake publish selected the appropriate RID graph, + emitted the Bake executable, and changed zero lock hashes. +- `pwsh ./tools/run-release-gate.ps1` ran on the clean exact commit + `c38f6b88522750abc2e4acf1898ed566c5576e4a`, SDK `10.0.300`, RID `win-x64`, + in 121.398 seconds. Restore was forced and locked; all 44 projects built with + 0 warnings / 0 errors; all 12 test assemblies completed with 14,742 passed / + 77 skipped / 0 failed. The gate recorded `WorktreeDirty: false`. + +No product source behavior changed in this closeout. The known duplicate theory +row, classification of the 77 environment-dependent skips, test naming/value +review, and stale public headline counts remain explicitly assigned to R3 and +the later documentation-authority slice. R2 is complete on the campaign branch. + +Rollback is `git revert c38f6b88`; do not rewrite branch history. + ## 18. Session start protocol Every implementation session begins by: diff --git a/docs/reviews/findings-ledger.md b/docs/reviews/findings-ledger.md index a9852e5b..9dfb7b6a 100644 --- a/docs/reviews/findings-ledger.md +++ b/docs/reviews/findings-ledger.md @@ -101,6 +101,16 @@ did not find an actionable exception beyond the documented classes. dedicated tool build gate. Move truly historical one-off probes out of the maintained build surface with an explicit archival label. +**Post-baseline maintained-.NET-tool checkpoint (2026-08-18, `c38f6b88`):** +all 13 tracked `.NET` tools now use repository-owned project references or +central package references, build warning-free, and are members of +`AcDream.slnx`. The release gate fails if any future project under `src/`, +`tests/`, or `tools/` is omitted from that graph. `tools/README.md` records each +tool's purpose and runtime prerequisites. This resolves the supported `.NET` +tool portion of F-004. The older PowerShell/Python/CDB scripts and historical +root launchers described above remain open for the later R6 archival decision; +F-004 is therefore not closed wholesale. + ## F-005 — Mandatory reference workflow depends on repositories absent from the repository - **Severity:** P1 high @@ -489,12 +499,25 @@ actual GitHub execution after publication. that proves a clean checkout. Keep tool-only exceptions explicit rather than allowing per-project drift. -**Post-baseline partial checkpoint (2026-08-18, `2ac05486`):** `global.json` -pins SDK feature band `10.0.300` with `latestPatch` roll-forward, and all five -CI setup sites now consume that file. `docs/release-gate.md` documents the one -complete command and its evidence. F-019 remains open: common compiler/package -settings are still duplicated, there are no package lock files or locked -restore, and the unsupported tool-project decisions have not been made. +**Post-baseline resolution (2026-08-18, `2ac05486` and `c38f6b88`):** +`global.json` pins SDK feature band `10.0.300` with `latestPatch` roll-forward. +`Directory.Build.props` now owns the repository-wide compiler, analyzer, +warnings-as-errors, deterministic-build, and lock-file policy; +`Directory.Packages.props` owns all 30 direct package versions; and +`NuGet.Config` clears machine fallback folders and sources in favor of the one +declared `nuget.org` source. Every one of the 44 supported projects commits a +neutral dependency graph, and all 14 source projects also commit `win-x64` and +`linux-x64` graphs. The custom `packages..lock.json` names avoid NuGet's +special precedence for conventional `packages.lock.json` while allowing the +neutral and two RID graphs to coexist. The release gate uses forced locked +restore, hashes all 72 graphs, and builds every supported project. A clean, +exact-commit `c38f6b88` gate on SDK `10.0.300` passed with 0 build warnings, +14,742 passed / 77 skipped / 0 failed across 12 test assemblies. A separate +empty-package-cache locked restore succeeded using only the declared source, +and locked neutral/RID re-evaluation changed zero lock hashes. F-019 is +resolved on the campaign branch. Hosted GitHub Actions remain deliberately +parked; the documented local command is the release authority until runner +policy is restored. ## F-020 — The issue ledger is an unbounded mixed tracker, research log, and archive