Skip to content

build: standardize repository tooling and documentation - #15

Merged
rent-a-developer merged 6 commits into
mainfrom
chore/issue-14-harmonize-repository-tooling
Sep 8, 2026
Merged

rent-a-developer merged 6 commits into
mainfrom
chore/issue-14-harmonize-repository-tooling

Conversation

@rent-a-developer

Copy link
Copy Markdown
Owner

Closes #14

Standardize the build configuration, formatting, scripts, CI, AI guidance, and documentation, while preserving the public API and the localization behavior.

  • Separate the build roles and validate the package contracts, keeping the central versions, the generator compatibility, and the explicit WPF requirements. Validate packages against the last published version and enable dependency auditing.
  • Align the style and analyzers, triaging the new findings before the error gate goes back on. Use two spaces for all XML configuration.
  • Make script checks preserve the source and the Git index, keep fixes explicit, and scope the formatting hooks to the triggering edit.
  • Publish and execute AvaloniaConsumer with Native AOT on .NET 8 and .NET 10, with zero IL2xxx and IL3xxx diagnostics, replacing a check that only confirmed that files exist.
  • Use quarterly dependency updates and consistent contribution conventions.
  • Keep the README short, publish the longer material from docs/, and separate the DocFX configuration and output from the authored documentation.
  • Apply the repository-wide formatting and ordering pass in its own commits, last.

The test runner is unchanged. A verification spike proved that Microsoft.Testing.Platform does not work here: Avalonia.Headless.XUnit fails with the newer xUnit, and the older xUnit cannot load any current Microsoft.Testing.Platform coverage extension.

Merge instruction

Merge with a merge commit. Do not squash. .git-blame-ignore-revs records the mechanical commit IDs, and a squash merge replaces those commits.

Validation

Implementation draft: every check below is pending. Complete this description from the actual diff before opening the pull request, and tick a box only after that check has actually passed.

  • Release build and all four test suites, including the UI tests and coverage
  • Package metadata, compiled API, package validation against the baseline version, generator and buildTransitive wiring, symbols, and SourceLink
  • Minimum-SDK consumers and all three native AOT executions
  • Full formatting check, plus the manual source and index, XAML behavior, and hook-scope checks
  • DocFX build with warnings as errors, and a review of the rendered documentation
  • Mechanical commits recorded in .git-blame-ignore-revs and verified with git blame

No release version change and no publication are included. Record any approved exception here.

rent-a-developer and others added 6 commits September 7, 2026 19:12
Tool-produced and nothing else: dotnet format style for the Roslyn code-style
rules, ReSharper cleanupcode for member ordering, and CSharpier for formatting,
in that order.

The visible change is the type names: this repository writes the C# keywords
now, so String becomes string, Object? becomes object? and so on, everywhere.

Run it yourself with: pwsh -File scripts/tidy-code.ps1 -Scope all

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Tool-produced and nothing else. The three reordering transformations are off in
Settings.XamlStyler, because each of them changes what the user sees rather than
how the markup is laid out, so no element, setter or attached property moved.

XamlStyler writes the host operating system's newline and cannot be told
otherwise, so scripts/tidy-code.ps1 normalizes the files it processed back to LF
afterwards. It also writes a UTF-8 byte order mark, which is why these two files
now carry one like the four the repository already had.

Run it yourself with: pwsh -File scripts/tidy-code.ps1 -Scope all

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Tool-produced and nothing else, by docs/../tools/Reindent-Xml.py in the
harmonization evidence: it replaces the leading whitespace of a line and cannot
change a non-whitespace byte. `git diff -w` against the parent commit is empty.

Nothing in the tidy pipeline does this. CSharpier is kept away from XML by
.csharpierignore, dotnet format does not touch XML whitespace, and the ReSharper
profile only reorders C# members - so the .editorconfig rule is applied here,
once, and reviewed as its own change.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Split the build settings into repository-root, src/ and tests/ layers; move the
files every package carries into the root targets; give each shipping project
its own Description and PackageTags; add dependency auditing and a package
validation baseline; and state the two shipping compatibility floors centrally,
per project, instead of as a VersionOverride in each project file.

Pin the tool versions, replace StyleCop.Analyzers with NewStyleCop.Analyzers,
add CSharpier in check mode and SonarAnalyzer, and rewrite .editorconfig so each
tool owns exactly one concern. The analyzer findings were triaged one by one
before the error gate went back on; nothing is blanket-suppressed.

Give the repository predictable script entry points: pre-commit-gate.ps1 per
commit and pre-release-gate.ps1 before a push, with tidy-code.ps1, the public
API scripts, the line-ending check and the Native AOT gate underneath them.
Every check reports by default and writes only when asked; -Check never touches
the working tree or the git index.

Turn the packed-package Native AOT check into a real gate. AvaloniaConsumer now
targets both of the packages' frameworks and asserts typed, scoped and search-all
lookups, enum localization, dynamic format arguments and culture fallback -
before and after a culture change, and after an argument change. The gate
publishes it natively, requires zero IL2xxx/IL3xxx diagnostics, and runs the
binary; a file that exists is no longer treated as a pass.

Align CI with the local scripts, give the test reports per-project and
per-framework directories, add three native legs, and correct the minimum-SDK
consumer job. Move Dependabot to quarterly grouped updates with conventional
commit prefixes.

Shorten the README and move the long material into docs/guides and
docs/reference; move the DocFX configuration to build/docfx and its output under
artifacts, keeping the published API URLs.

State one commit and branch policy, and add the AI integration: a canonical
.agents/ tree with two read-only reviewers and an explicit-invocation commit
skill, plus thin Claude and Codex wrappers and scoped PostToolUse hooks.

The public API, the resource values, the package contracts and the shipping
dependency floors are unchanged. No functionality changed, so there is no
changelog entry.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The three style commits rewrote lines across the whole repository without
changing what the code does, so blame should point at whoever wrote the logic
rather than at the tool that reformatted it.

Each SHA was verified with git cat-file and each is an ancestor of HEAD. They
only stay valid if this branch is merged with a MERGE COMMIT: a rebase or a
squash merge rewrites every one of them, and git skips an entry it cannot
resolve without saying so. CI's lint job is what catches that.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
AGENTS.md opened straight into the project map, so an agent reading it
first had the layout and the constraints but never learned what the
library does. Add a "What this is" section that names the two packages,
the shared engine, the compile-checked keys and the live culture switch,
and point at README.md for the user-facing version.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@rent-a-developer rent-a-developer self-assigned this Sep 8, 2026
@rent-a-developer rent-a-developer linked an issue Sep 8, 2026 that may be closed by this pull request
4 tasks
@rent-a-developer
rent-a-developer merged commit aee31e3 into main Sep 8, 2026
17 checks passed
@rent-a-developer
rent-a-developer deleted the chore/issue-14-harmonize-repository-tooling branch September 8, 2026 15:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Standardize repository tooling, build configuration, and documentation

1 participant