docs: close R2 reproducibility checkpoint

This commit is contained in:
Erik 2026-08-18 10:32:37 +02:00
parent c38f6b8852
commit 8e884679e0
2 changed files with 111 additions and 8 deletions

View file

@ -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-002T-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-002T-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 R2R3 |
| 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:

View file

@ -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.<graph>.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