build: standardize repository tooling and documentation - #15
Merged
rent-a-developer merged 6 commits intoSep 8, 2026
Merged
Conversation
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>
4 tasks
Codecov Report❌ Patch coverage is 📢 Thoughts on this report? Let us know! |
rent-a-developer
deleted the
chore/issue-14-harmonize-repository-tooling
branch
September 8, 2026 15:46
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #14
Standardize the build configuration, formatting, scripts, CI, AI guidance, and documentation, while preserving the public API and the localization behavior.
docs/, and separate the DocFX configuration and output from the authored documentation.The test runner is unchanged. A verification spike proved that Microsoft.Testing.Platform does not work here:
Avalonia.Headless.XUnitfails 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-revsrecords 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.
buildTransitivewiring, symbols, and SourceLink.git-blame-ignore-revsand verified withgit blameNo release version change and no publication are included. Record any approved exception here.