Captures the compiler-matrix model, the test kinds and their pipelines,
how to add tests per kind, the #if/preprocessor-symbol comparison rules,
and the probe-a-construct-across-all-compilers workflow, so this no
longer has to be reverse-engineered from the runners.
Assisted-by: Claude:claude-fable-5:Claude Code
Make the repo-root pwsh scripts the mandated path for restore/build/update-deps/
format/clean/publish, and explain why: the bare dotnet commands prune the
packages.lock.json files (the recurring spurious lock-file diff). Add two code
conventions -- comments must read without any knowledge of the session that
wrote them, and edits made outside the session must not be reverted without
confirmation. Drop the "Framework-specific gotchas" section, which only covered
a few narrow UI control quirks.
Assisted-by: Claude:claude-opus-4-8:Claude Code
Replace the Windows-only .bat helpers (clean / debugbuild / releasebuild /
restore / updatedeps and BuildTools/format) with cross-platform pwsh
scripts at the repo root: restore.ps1, build.ps1 (-Configuration), clean.ps1,
updatedeps.ps1 and BuildTools/format.ps1, alongside the existing publish.ps1.
Enable a packages.lock.json for every project by hoisting
RestorePackagesWithLockFile into the root Directory.Build.props (the four
core libraries set it individually before) and commit the generated locks,
so restores are repeatable and CI can cache packages off them.
Cache the NuGet packages folder in the three setup-dotnet workflows
(build-ilspy, build-frontends, codeql-analysis), keyed on the lock files
per the setup-dotnet caching guidance.
Scope the Debug "Verify package contents" check to the *.filelist outputs
it actually generates. A project's packages.lock.json is keyed only by
(framework, RID), with no host-OS axis, so a lock produced on Linux
legitimately differs from one produced on Windows whenever an OS-conditional
PackageReference applies (Debug+Windows pulls Microsoft.DiaSymReader*). The
Windows restore then rewrites those locks; that churn must not fail a step
whose job is to police the VSIX/MSI file lists.
Also drop the dead ILSpy.BamlDecompiler publish line from
publishlocaldev.ps1, mirroring the earlier publish.ps1 fix.
Assisted-by: Claude:claude-opus-4-8:Claude Code
Make explicit what was only implied: the pre-commit hook IS the formatter, so
always let it run and never commit .cs with --no-verify (bypassing it is what
lets unformatted code accumulate). Scope the "new files must be CRLF" rule to
Windows -- on Linux/macOS that fights the repo's text=auto LF storage and makes
the whole tree look phantom-modified. Update the test example to the
Microsoft.Testing.Platform syntax the repo now pins. The parity-tracker line is
dropped (that tracker is on its way out).
Assisted-by: Claude:claude-opus-4-8:Claude Code
Previous rule mandated "Avalonia: <lowercase phrase>" subjects, which
encouraged restating the area at the cost of subject-line budget. The
prefix has been stripped from all 336 branch commits; update the rule
so future commits match.
Assisted-by: Claude:claude-opus-4-7:Claude Code