Skip to content

chore: Dependency version bumps, editorconfig fixes, and repo config updates#7

Open
kploch wants to merge 2 commits into
mainfrom
chore/version-bumps-and-fixes
Open

chore: Dependency version bumps, editorconfig fixes, and repo config updates#7
kploch wants to merge 2 commits into
mainfrom
chore/version-bumps-and-fixes

Conversation

@kploch
Copy link
Copy Markdown
Contributor

@kploch kploch commented Mar 28, 2026

User description

Summary

Batch maintenance update for the mrploch-development shared configuration repository.

  • Dependency version bumps: All centralised package version definitions updated to latest stable releases
  • Ploch.Packages.props: Centralised version via PlochPackagesVersion property (3.0.0); added all commonly used Ploch packages
  • EditorConfig fixes: Removed SA1502 enforcement, added ReSharper XML indent settings, added XML/props file indent rules
  • Repository config: Added AI tool config files to .gitignore template, updated sample solution README
  • New files: .syncignore, ReSharper file layout XML, Windows context menu registry script for Claude Code
  • Cleanup: Removed obsolete .junie/guidelines.md
  • EditorConfig hierarchy: Added sample project and editorconfig files for testing hierarchy behaviour
  • Development notes: Added coding guidelines notes

Dependency Version Changes

Package Group From To
Microsoft.Extensions / EF Core / BCL 10.0.1 10.0.5
Microsoft.CodeAnalysis.NetAnalyzers 10.0.100 10.0.201
Roslynator.Analyzers 4.14.1 4.15.0
SonarAnalyzer.CSharp 10.16.0.128591 10.21.0.135717
coverlet.msbuild / coverlet.collector 6.0.4 8.0.0
Microsoft.NET.Test.Sdk 18.0.1 18.3.0
xunit.v3 3.2.0 3.2.2
xunit.analyzers 1.25.0 1.27.0
Moq.Analyzers 0.4.0 0.4.2
NSwag.CodeGeneration.CSharp 14.2.0 14.6.3
Testably.Abstractions.FileSystem.Interface 10.0.0 10.1.0
Xunit.SkippableFact 1.5.23 1.5.61
Microsoft.AspNetCore.Mvc.ViewFeatures 2.3.0 2.3.9

Ploch.Packages.props Expansion

Introduced PlochPackagesVersion MSBuild property (set to 3.0.0) and added:

  • Ploch.Common, Ploch.Common.DependencyInjection, Ploch.Common.Net9, Ploch.Common.DataAnnotations, Ploch.Common.AppServices
  • Ploch.Data.EFCore, Ploch.Data.EFCore.IntegrationTesting, Ploch.Data.EFCore.SqLite, Ploch.Data.EFCore.SqlServer
  • Ploch.Data.GenericRepository.EFCore.IntegrationTesting
  • Ploch.TestingSupport, Ploch.TestingSupport.Xunit, Ploch.TestingSupport.FluentAssertions

Partially addresses #5.

Test plan

  • Verify dependent repos (ploch-common, ploch-data, ploch-lists) restore and build successfully with updated package versions
  • Confirm .editorconfig changes do not introduce new warnings in existing repos
  • Verify .gitignore template correctly excludes AI tool config files

Closes #6

🤖 Generated with Claude Code


CodeAnt-AI Description

Update shared development settings and package versions across the repo

What Changed

  • Central package versions were bumped across the shared configuration so projects use the newer Microsoft, xUnit, Coverlet, Roslyn, and NSwag releases.
  • Ploch package references were consolidated under one shared version and expanded to cover more Ploch libraries.
  • Repository formatting rules were updated for XML and C# layout, and one StyleCop rule for single-line elements was removed.
  • Common AI, sync, and local tool files are now ignored, and new repo guidance files, a sample project, and a ReSharper file layout were added.
  • The sample solution README was rewritten to describe the repository’s purpose and structure, and an obsolete Junie guideline file was removed.

Impact

✅ Fewer dependency update conflicts
✅ More consistent code formatting in new projects
✅ Fewer accidental commits of local tool files

💡 Usage Guide

Checking Your Pull Request

Every time you make a pull request, our system automatically looks through it. We check for security issues, mistakes in how you're setting up your infrastructure, and common code problems. We do this to make sure your changes are solid and won't cause any trouble later.

Talking to CodeAnt AI

Got a question or need a hand with something in your pull request? You can easily get in touch with CodeAnt AI right here. Just type the following in a comment on your pull request, and replace "Your question here" with whatever you want to ask:

@codeant-ai ask: Your question here

This lets you have a chat with CodeAnt AI about your pull request, making it easier to understand and improve your code.

Example

@codeant-ai ask: Can you suggest a safer alternative to storing this secret?

Preserve Org Learnings with CodeAnt

You can record team preferences so CodeAnt AI applies them in future reviews. Reply directly to the specific CodeAnt AI suggestion (in the same thread) and replace "Your feedback here" with your input:

@codeant-ai: Your feedback here

This helps CodeAnt AI learn and adapt to your team's coding style and standards.

Example

@codeant-ai: Do not flag unused imports.

Retrigger review

Ask CodeAnt AI to review the PR again, by typing:

@codeant-ai: review

Check Your Repository Health

To analyze the health of your code repository, visit our dashboard at https://app.codeant.ai. This tool helps you identify potential issues and areas for improvement in your codebase, ensuring your repository maintains high standards of code health.

Summary by CodeRabbit

  • Chores

    • Updated many NuGet package versions (analyzers, testing/coverage tools, Microsoft.Extensions, and Ploch packages)
  • Configuration

    • Added sync-ignore and additional VCS ignore rules for tooling artifacts
    • Expanded EditorConfig and ReSharper formatting/member-ordering settings; added new project/configuration scaffolding
  • Documentation

    • Added coding-guidelines, findings, and analyzer reference notes; updated repository README
    • Removed a prior test-guidance document
  • Tools

    • Added a Windows context-menu registry script for quick tool launch

Summary by Bito

This maintenance update performs batch updates to the shared configuration repository, modernizing dependency versions and enhancing development tooling. The changes centralize package versioning, update code formatting standards, and add configuration for modern development workflows including AI tool integration. Key updates include bumping Microsoft Extensions and testing framework versions, expanding Ploch package management, removing obsolete StyleCop rules, and adding comprehensive formatting configurations.

Detailed Changes
  • Updates all Microsoft Extensions packages from version 10.0.1 to 10.0.5 in MicrosoftExtensions.Net9.Packages.props
  • Introduces centralized PlochPackagesVersion property (3.0.0) and expands package ecosystem in Ploch.Packages.props
  • Upgrades testing frameworks including xUnit v3 (3.2.0→3.2.2), coverlet (6.0.4→8.0.0), and Microsoft.NET.Test.Sdk (18.0.1→18.3.0)
  • Removes SA1502 StyleCop rule enforcement and adds comprehensive ReSharper XML formatting settings
  • Adds AI tool configuration files to .gitignore and creates new .syncignore for CodeSync operations
  • Adds sample C# project files and development guidelines to demonstrate EditorConfig hierarchy and coding standards

…ops, and fix editorconfig

Bump all centralised package versions to latest stable releases:
- Microsoft.Extensions/EF Core 10.0.1 → 10.0.5
- xUnit v3 3.2.0 → 3.2.2, Test.Sdk 18.0.1 → 18.3.0
- Coverlet 6.0.4 → 8.0.0, Roslynator 4.14.1 → 4.15.0
- SonarAnalyzer 10.16.0 → 10.21.0, and others

Expand Ploch.Packages.props with a centralised PlochPackagesVersion
property (3.0.0) and add all commonly referenced Ploch packages.

Additional fixes:
- Remove SA1502 enforcement from StyleCop editorconfig
- Add ReSharper XML indent settings and XML/props indent rules
- Add AI tool config files (.cursorrules, AGENTS.md, etc.) to gitignore
- Add .syncignore, ReSharper file layout, Claude Code context menu script
- Add editorconfig hierarchy sample project and editorconfig files
- Add development notes and guidelines
- Update sample solution README
- Remove obsolete .junie/guidelines.md

Refs: #6

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@codeant-ai
Copy link
Copy Markdown

codeant-ai Bot commented Mar 28, 2026

CodeAnt AI is reviewing your PR.


Thanks for using CodeAnt! 🎉

We're free for open-source projects. if you're enjoying it, help us grow by sharing.

Share on X ·
Reddit ·
LinkedIn

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Mar 28, 2026

📝 Walkthrough

Walkthrough

Batch maintenance: added ignore/config files, removed an obsolete guideline, introduced EditorConfig samples and ReSharper layout, and bumped many centralized NuGet analyzer/test/framework and Ploch package versions; also added small docs and a Windows context-menu registry script.

Changes

Cohort / File(s) Summary
Ignore & Sync
repository-config/root-folder/.gitignore, .gitignore, .syncignore
Added AI-tool entries to .gitignore and a new .syncignore with extensive IDE/build/tool ignore patterns.
Analyzer & Test Package bumps
dependencies/Analyzers.Global.Packages.props, dependencies/Testing.Packages.props, dependencies/Common.Packages.props
Updated analyzer and test-related package versions (NetAnalyzers, Roslynator, SonarAnalyzer; coverlet.* → 8.0.0; xUnit v3 & related; Microsoft.NET.Test.Sdk; others).
Microsoft Extensions & System packages
dependencies/MicrosoftExtensions.Net9.Packages.props
Updated many Microsoft.AspNetCore/Microsoft.Extensions/Microsoft.EntityFrameworkCore/System package version pins from 10.0.1 → 10.0.5.
Ploch packages centralization
dependencies/Ploch.Packages.props
Introduced PlochPackagesVersion (3.0.0), converted existing Ploch package versions to reference it, and added additional Ploch.* package entries.
EditorConfig / formatting samples
editor-config/.../using-shared-root-file.editorconfig, editor-config/.../.editorconfig, editor-config/StyleCopAnalyzersDefault.editorconfig
Added a comprehensive EditorConfig for hierarchy testing, appended ReSharper XML indent settings, and removed explicit SA1502 severity.
Sample project & code
editor-config/editorconfig-hierarchy/app-repository/ClassLibrary1.csproj, editor-config/.../src/NewClass.cs, editor-config/.../src/NewInterface.cs
Added sample .NET project and simple public NewClass/NewInterface to exercise formatting rules.
ReSharper layout & repository docs
repository-config/resharper/file-layout-current-visual-studio-resharper.xml, repository-config/sample-solutions/libs-and-console-app/README.md
Added ReSharper member-ordering XML and updated sample-solution README content to reference MrPloch org.
Scripts
scripts/add_context_menu.reg
Added Windows registry script to add an "Open with Claude Code" context-menu entry.
Development notes
development-notes-guidelines/coding-guidelines-notes.md, development-notes-guidelines/findings.md, development-notes-guidelines/net-analyzers.md
Added small guidance and findings documents and a curated analyzers list.
Removed obsolete
.junie/guidelines.md
Deleted deprecated testing-guidelines document.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related issues

"A rabbit hops through code and trees,
Bumping versions with a twitchy sneeze,
Ignoring bots and tidying rules,
Laying docs and tiny tools,
Hooray — maintenance done with ease! 🐇"

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately summarizes the main changes: dependency version bumps, editorconfig fixes, and repository configuration updates. It is specific, concise, and directly reflects the primary objectives of the PR.
Linked Issues check ✅ Passed The PR satisfies all coding requirements from issue #6: dependency version bumps across all centralized packages, PlochPackagesVersion property introduction, EditorConfig fixes including SA1502 removal and ReSharper XML settings, .gitignore and .syncignore updates, new ReSharper file layout XML, sample project files, and removal of obsolete .junie/guidelines.md.
Out of Scope Changes check ✅ Passed The PR includes development documentation files (coding-guidelines-notes.md, findings.md, net-analyzers.md) and a Windows Registry script (add_context_menu.reg) which, while mentioned in PR objectives, extend slightly beyond the core maintenance scope but are justified as repository tooling and guidance enhancements closely tied to the update.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch chore/version-bumps-and-fixes

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@qodo-code-review
Copy link
Copy Markdown

ⓘ You are approaching your monthly quota for Qodo. Upgrade your plan

Review Summary by Qodo

Update dependencies, expand Ploch packages, fix editorconfig, and add development documentation

✨ Enhancement 📝 Documentation

Grey Divider

Walkthroughs

Description
• Bump all centralised package versions to latest stable releases
  - Microsoft.Extensions/EF Core 10.0.1 → 10.0.5
  - xUnit v3 3.2.0 → 3.2.2, Test.Sdk 18.0.1 → 18.3.0
  - Coverlet 6.0.4 → 8.0.0, Roslynator 4.14.1 → 4.15.0
  - SonarAnalyzer 10.16.0 → 10.21.0, and others
• Expand Ploch.Packages.props with centralised PlochPackagesVersion property (3.0.0) and add all
  commonly referenced Ploch packages
• Fix editorconfig: remove SA1502 enforcement, add ReSharper XML indent settings, add XML/props file
  indent rules
• Add development documentation, repository configuration files, and editorconfig hierarchy samples
Diagram
flowchart LR
  A["Dependency Versions"] -->|Update to latest| B["Package Props Files"]
  C["Ploch.Packages.props"] -->|Add PlochPackagesVersion| D["Centralised Version Management"]
  E["EditorConfig"] -->|Remove SA1502, Add XML rules| F["Enhanced Code Style"]
  G["New Files"] -->|Add development docs & configs| H["Repository Configuration"]
  B --> I["Updated Solution"]
  D --> I
  F --> I
  H --> I
Loading

Grey Divider

File Changes

1. dependencies/Analyzers.Global.Packages.props Dependencies +3/-3

Bump analyzer package versions

dependencies/Analyzers.Global.Packages.props


2. dependencies/Common.Packages.props Dependencies +3/-3

Update common package versions

dependencies/Common.Packages.props


3. dependencies/MicrosoftExtensions.Net9.Packages.props Dependencies +37/-37

Bump Microsoft Extensions from 10.0.1 to 10.0.5

dependencies/MicrosoftExtensions.Net9.Packages.props


View more (16)
4. dependencies/Ploch.Packages.props ✨ Enhancement +20/-3

Add PlochPackagesVersion property and expand packages

dependencies/Ploch.Packages.props


5. dependencies/Testing.Packages.props Dependencies +10/-10

Update testing framework and tool versions

dependencies/Testing.Packages.props


6. editor-config/StyleCopAnalyzersDefault.editorconfig ⚙️ Configuration changes +1/-1

Remove SA1502 enforcement from StyleCop rules

editor-config/StyleCopAnalyzersDefault.editorconfig


7. editor-config/editorconfig-hierarchy/app-repository/.editorconfig ⚙️ Configuration changes +9/-0

Add ReSharper XML indent and XML/props file rules

editor-config/editorconfig-hierarchy/app-repository/.editorconfig


8. editor-config/editorconfig-hierarchy/app-repository/ClassLibrary1.csproj Miscellaneous +9/-0

Add sample project file for hierarchy testing

editor-config/editorconfig-hierarchy/app-repository/ClassLibrary1.csproj


9. editor-config/editorconfig-hierarchy/app-repository/src/NewClass.cs Miscellaneous +24/-0

Add sample C# class for editorconfig hierarchy

editor-config/editorconfig-hierarchy/app-repository/src/NewClass.cs


10. editor-config/editorconfig-hierarchy/app-repository/src/NewInterface.cs Miscellaneous +4/-0

Add sample C# interface for editorconfig hierarchy

editor-config/editorconfig-hierarchy/app-repository/src/NewInterface.cs


11. editor-config/editorconfig-hierarchy/library-repository/using-shared-root-file.editorconfig ⚙️ Configuration changes +628/-0

Add comprehensive editorconfig with all formatting rules

editor-config/editorconfig-hierarchy/library-repository/using-shared-root-file.editorconfig


12. .junie/guidelines.md 📝 Documentation +0/-231

Remove obsolete testing guidelines documentation

.junie/guidelines.md


13. .syncignore ⚙️ Configuration changes +396/-0

Add CodeSync ignore file with standard patterns

.syncignore


14. development-notes-guidelines/coding-guidelines-notes.md 📝 Documentation +7/-0

Add C# coding guidelines reference notes

development-notes-guidelines/coding-guidelines-notes.md


15. development-notes-guidelines/findings.md 📝 Documentation +9/-0

Add findings and research notes document

development-notes-guidelines/findings.md


16. development-notes-guidelines/net-analyzers.md 📝 Documentation +20/-0

Add .NET analyzers investigation and recommendations

development-notes-guidelines/net-analyzers.md


17. repository-config/resharper/file-layout-current-visual-studio-resharper.xml ⚙️ Configuration changes +216/-0

Add ReSharper file layout configuration for member reordering

repository-config/resharper/file-layout-current-visual-studio-resharper.xml


18. repository-config/sample-solutions/libs-and-console-app/README.md 📝 Documentation +13/-2

Update sample solution README with repository overview

repository-config/sample-solutions/libs-and-console-app/README.md


19. scripts/add_context_menu.reg Miscellaneous +19/-0

Add Windows registry script for Claude Code context menu

scripts/add_context_menu.reg


Grey Divider

Qodo Logo

@qodo-code-review
Copy link
Copy Markdown

qodo-code-review Bot commented Mar 28, 2026

Code Review by Qodo

🐞 Bugs (1) 📘 Rule violations (0) 📎 Requirement gaps (1) 📐 Spec deviations (0)

Grey Divider


Action required

1. Single PlochPackagesVersion used 📎 Requirement gap ⛯ Reliability
Description
dependencies/Ploch.Packages.props still uses a single PlochPackagesVersion property for both
Ploch.Common*/Ploch.TestingSupport* and Ploch.Data* packages. This violates the required split
into separate Common/Data version properties and can reintroduce restore/build failures when the
repos release independently.
Code

dependencies/Ploch.Packages.props[R2-21]

+    <PropertyGroup>
+        <PlochPackagesVersion>3.0.0</PlochPackagesVersion>
+    </PropertyGroup>
   <ItemGroup>
-        <PackageVersion Include="Ploch.Data.GenericRepository" Version="2.1.0" />
-        <PackageVersion Include="Ploch.Data.GenericRepository.EFCore" Version="2.1.0" />
-        <PackageVersion Include="Ploch.Data.Model" Version="2.1.0" />
+        <PackageVersion Include="Ploch.Common.AppServices" Version="$(PlochPackagesVersion)" />
+        <PackageVersion Include="Ploch.Data.GenericRepository" Version="$(PlochPackagesVersion)" />
+        <PackageVersion Include="Ploch.Data.GenericRepository.EFCore" Version="$(PlochPackagesVersion)" />
+        <PackageVersion Include="Ploch.Data.Model" Version="$(PlochPackagesVersion)" />
+        <PackageVersion Include="Ploch.Data.EFCore" Version="$(PlochPackagesVersion)" />
+        <PackageVersion Include="Ploch.Data.EFCore.IntegrationTesting" Version="$(PlochPackagesVersion)" />
+        <PackageVersion Include="Ploch.Data.EFCore.SqLite" Version="$(PlochPackagesVersion)" />
+        <PackageVersion Include="Ploch.Data.EFCore.SqlServer" Version="$(PlochPackagesVersion)" />
+        <PackageVersion Include="Ploch.Data.GenericRepository.EFCore.IntegrationTesting" Version="$(PlochPackagesVersion)" />
+        <PackageVersion Include="Ploch.Common" Version="$(PlochPackagesVersion)" />
+        <PackageVersion Include="Ploch.Common.DependencyInjection" Version="$(PlochPackagesVersion)" />
+        <PackageVersion Include="Ploch.Common.Net9" Version="$(PlochPackagesVersion)" />
+        <PackageVersion Include="Ploch.Common.DataAnnotations" Version="$(PlochPackagesVersion)" />
+        <PackageVersion Include="Ploch.TestingSupport" Version="$(PlochPackagesVersion)" />
+        <PackageVersion Include="Ploch.TestingSupport.Xunit" Version="$(PlochPackagesVersion)" />
+        <PackageVersion Include="Ploch.TestingSupport.FluentAssertions" Version="$(PlochPackagesVersion)" />
Evidence
PR Compliance ID 1 requires replacing the single version property with PlochCommonPackagesVersion
and PlochDataPackagesVersion, and mapping Ploch.Common*/Ploch.TestingSupport* to the Common
property and Ploch.Data* to the Data property. The diff shows a single PlochPackagesVersion
property and all Ploch.* packages referencing it.

Split Ploch package versions into separate Common and Data version properties
dependencies/Ploch.Packages.props[2-21]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
`dependencies/Ploch.Packages.props` uses a single `PlochPackagesVersion` for all Ploch packages, but compliance requires separate version properties for Common and Data packages.
## Issue Context
Ploch Common and Data packages release independently; using one pinned version can cause missing-version restores (NU1603) and build failures in consuming repos when warnings are treated as errors.
## Fix Focus Areas
- dependencies/Ploch.Packages.props[2-21]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


2. Context menu path quoting broken🐞 Bug ✓ Correctness
Description
The registry script builds a cmd.exe /c "..." command but does not escape the inner quotes around
%1/%v for cmd parsing, so folder paths containing spaces will break the cd /d command and
prevent Claude Code from launching in the intended directory. This makes the script unreliable for
common Windows paths (e.g., under C:\Users\...).
Code

scripts/add_context_menu.reg[R9-19]

+[HKEY_CLASSES_ROOT\Directory\shell\OpenWithClaudeCode\command]
+@="cmd.exe /c \"cd /d \"%1\" && claude\""
+
+; Add "Open with Claude Code" to folder background context menu
+[HKEY_CLASSES_ROOT\Directory\Background\shell\OpenWithClaudeCode]
+@="Open with Claude Code"
+"Icon"="C:\\DevNet\\github\\open-with-claude-code\\claude.ico,0"
+"Position"="Top"
+
+[HKEY_CLASSES_ROOT\Directory\Background\shell\OpenWithClaudeCode\command]
+@="cmd.exe /c \"cd /d \"%v\" && claude\""
Evidence
The stored command string contains cmd.exe /c "cd /d "%1" && claude" (and similarly for %v),
which results in nested quotes inside the /c "..." payload without escaping for cmd’s parsing;
this is the classic failure mode for paths with spaces.

scripts/add_context_menu.reg[1-19]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
`scripts/add_context_menu.reg` writes a command string that nests quotes around `%1`/`%v` inside a `cmd.exe /c "..."` payload without escaping those inner quotes for cmd parsing. This breaks when the selected folder path contains spaces.
### Issue Context
To make `cd /d` robust, the folder argument should be quoted *inside* the `/c` command string as `\"%1\"` (so cmd receives `"%1"`).
### Fix Focus Areas
- scripts/add_context_menu.reg[9-19]
### Expected change
Update both command values to store a cmd payload like:
- `cmd.exe /c "cd /d \"%1\" && claude"`
- `cmd.exe /c "cd /d \"%v\" && claude"`
(Adjust `%v` to `%V` if your intended shell placeholder is case-sensitive in your environment.)

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools



Remediation recommended

3. xUnit layout never matches🐞 Bug ✓ Correctness
Description
The new ReSharper file layout pattern requires a method to have both Xunit.FactAttribute and
Xunit.TheoryAttribute, so normal xUnit test classes won’t match and the xUnit-specific reordering
rules will never apply. This breaks the intended member ordering for xUnit test projects using this
layout file.
Code

repository-config/resharper/file-layout-current-visual-studio-resharper.xml[R18-69]

+    <TypePattern DisplayName="xUnit.net Test Classes" RemoveRegions="All">
+        <TypePattern.Match>
+            <And>
+                <Kind Is="Class" />
+                <HasMember>
+                    <And>
+                        <Kind Is="Method" />
+                        <HasAttribute Inherited="True" Name="Xunit.FactAttribute" />
+                        <HasAttribute Inherited="True" Name="Xunit.TheoryAttribute" />
+                    </And>
+                </HasMember>
+            </And>
+        </TypePattern.Match>
+        <Entry DisplayName="Fields">
+            <Entry.Match>
+                <And>
+                    <Kind Is="Field" />
+                    <Not>
+                        <Static />
+                    </Not>
+                </And>
+            </Entry.Match>
+            <Entry.SortBy>
+                <Readonly />
+                <Name />
+            </Entry.SortBy>
+        </Entry>
+        <Entry DisplayName="Constructors">
+            <Entry.Match>
+                <Kind Is="Constructor" />
+            </Entry.Match>
+            <Entry.SortBy>
+                <Static />
+            </Entry.SortBy>
+        </Entry>
+        <Entry DisplayName="Teardown Methods">
+            <Entry.Match>
+                <And>
+                    <Kind Is="Method" />
+                    <ImplementsInterface Name="System.IDisposable" />
+                </And>
+            </Entry.Match>
+        </Entry>
+        <Entry DisplayName="All other members" />
+        <Entry DisplayName="Test Methods" Priority="100">
+            <Entry.Match>
+                <And>
+                    <Kind Is="Method" />
+                    <HasAttribute Name="Xunit.FactAttribute" />
+                    <HasAttribute Name="Xunit.TheoryAttribute" />
+                </And>
+            </Entry.Match>
Evidence
The xUnit TypePattern.Match and the “Test Methods” Entry.Match both require Fact AND Theory
attributes on the same method, but the repo’s sample xUnit test uses only [Fact], so it cannot match
this rule.

repository-config/resharper/file-layout-current-visual-studio-resharper.xml[18-73]
repository-config/sample-solutions/libs-and-console-app/tests/ConsoleApp1.Tests/UnitTest1.cs[1-8]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
`repository-config/resharper/file-layout-current-visual-studio-resharper.xml` defines xUnit matching rules that require a test method to have both `Xunit.FactAttribute` and `Xunit.TheoryAttribute` at the same time, which prevents the xUnit test-class pattern and test-method grouping from ever matching typical xUnit tests.
### Issue Context
The repo includes sample xUnit tests using `[Fact]` only, which demonstrates the pattern will not match as written.
### Fix Focus Areas
- repository-config/resharper/file-layout-current-visual-studio-resharper.xml[18-73]
### Expected change
In both locations, keep `<Kind Is="Method" />` but change the attribute requirement from an `<And>` of two `<HasAttribute>` nodes to an `<Or>` (i.e., match methods with either Fact or Theory).

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


4. Broken README relative links🐞 Bug ✓ Correctness
Description
The updated sample-solution README links to ./LICENSE and ./repository-config/, but from
repository-config/sample-solutions/libs-and-console-app/README.md those paths do not exist.
Readers will hit 404s / broken navigation when browsing the sample solution folder.
Code

repository-config/sample-solutions/libs-and-console-app/README.md[R5-13]

+Repository [mrploch-development](https://github.com/mrploch/mrploch-development) contains documentation, code style settings, and the configurations
+for development in the [MrPloch](https://github.com/mrploch) organization.
+
+Those can be used freely under the [Apache 2.0 License](./LICENSE).
+
+## Repository Configuration
+
+All of the configuration docs and files are located under [`repository-config`](./repository-config/) folder.
+
Evidence
The README uses paths relative to its own directory, but the actual LICENSE file is located at the
repository root, not alongside the README, so ./LICENSE is incorrect; similarly,
./repository-config/ is not under the sample-solution folder.

repository-config/sample-solutions/libs-and-console-app/README.md[1-13]
LICENSE[1-10]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
`repository-config/sample-solutions/libs-and-console-app/README.md` contains relative links that point to non-existent paths from that folder.
### Issue Context
- The repo `LICENSE` is at the repository root.
- The `repository-config` folder is also at the repository root.
### Fix Focus Areas
- repository-config/sample-solutions/libs-and-console-app/README.md[5-13]
### Expected change
Update the links to point to the correct relative locations, e.g.:
- License: `../../../LICENSE`
- Repository config folder: `../../../repository-config/`
(or switch to absolute GitHub URLs if preferred).

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools



Advisory comments

5. Duplicate diagnostic entries 🐞 Bug ⚙ Maintainability
Description
The added editorconfig sample defines dotnet_diagnostic.cs8763.severity and
dotnet_diagnostic.cs8770.severity twice, making the effective configuration order-dependent and
confusing to maintain. This duplication increases the chance of future edits changing the wrong
instance.
Code

editor-config/editorconfig-hierarchy/library-repository/using-shared-root-file.editorconfig[R206-226]

+dotnet_diagnostic.cs8763.severity = error # A method marked [DoesNotReturn] should not return.
+dotnet_diagnostic.cs8764.severity = error # Nullability of return type doesn't match overridden member (possibly because of nullability attributes).
+dotnet_diagnostic.cs8765.severity = error # Nullability of type of parameter doesn't match overridden member (possibly because of nullability attributes).
+dotnet_diagnostic.cs8766.severity = error # Nullability of reference types in return type of doesn't match implicitly implemented member (possibly because of nullability attributes).
+dotnet_diagnostic.cs8767.severity = error # Nullability of reference types in type of parameter of doesn't match implicitly implemented member (possibly because of nullability attributes).
+dotnet_diagnostic.cs8768.severity = error # Nullability of reference types in return type doesn't match implemented member (possibly because of nullability attributes).
+dotnet_diagnostic.cs8769.severity = error # Nullability of reference types in type of parameter doesn't match implemented member (possibly because of nullability attributes).
+dotnet_diagnostic.cs8770.severity = error # Method lacks [DoesNotReturn] annotation to match implemented or overridden member.
+dotnet_diagnostic.cs8774.severity = error # Member must have a non-null value when exiting.
+dotnet_diagnostic.cs8775.severity = error # Member must have a non-null value when exiting.
+dotnet_diagnostic.cs8776.severity = error # Member cannot be used in this attribute.
+dotnet_diagnostic.cs8777.severity = error # Parameter must have a non-null value when exiting.
+dotnet_diagnostic.cs8819.severity = error # Nullability of reference types in return type doesn't match partial method declaration.
+dotnet_diagnostic.cs8824.severity = error # Parameter must have a non-null value when exiting because parameter is non-null.
+dotnet_diagnostic.cs8825.severity = error # Return value must be non-null because parameter is non-null.
+dotnet_diagnostic.cs8847.severity = error # The switch expression does not handle some null inputs (it is not exhaustive). However, a pattern with a 'when' clause might successfully match this value.
+dotnet_diagnostic.cs9264.severity = warning # Non-nullable property must contain a non-null value when exiting constructor. Consider adding the 'required' modifier, or declaring the property as nullable, or adding '[field: MaybeNull, AllowNull]' attributes.*
+
+dotnet_diagnostic.cs8763.severity = error # A method marked [DoesNotReturn] should not return.
+dotnet_diagnostic.cs8770.severity = error # Method lacks [DoesNotReturn] annotation to match implemented or overridden member.
+
Evidence
The same diagnostic keys appear twice in the same file; even when values match today, duplicates are
ambiguous and can diverge later.

editor-config/editorconfig-hierarchy/library-repository/using-shared-root-file.editorconfig[205-226]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The editorconfig sample repeats the same `dotnet_diagnostic` keys multiple times.
### Issue Context
EditorConfig applies the last occurrence, so duplicates are confusing and easy to accidentally diverge.
### Fix Focus Areas
- editor-config/editorconfig-hierarchy/library-repository/using-shared-root-file.editorconfig[205-226]
### Expected change
Delete the later duplicate definitions of `dotnet_diagnostic.cs8763.severity` and `dotnet_diagnostic.cs8770.severity` (or consolidate them into a single occurrence).

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

ⓘ The new review experience is currently in Beta. Learn more

Grey Divider

Qodo Logo

@@ -0,0 +1,4 @@
namespace Ploch.EditorConfig.FormattingCheck
{
public interface NewInterface { }
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The interface NewInterface is currently empty. If this is intended as a marker interface, ensure that its usage is justified by the design. Otherwise, consider removing or implementing members to provide meaningful functionality.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

False positive. This is a sample file in editor-config/editorconfig-hierarchy/ used to test EditorConfig hierarchy behaviour. It is not production code — it exists solely to verify that editorconfig rules are applied correctly at different directory levels.

@codeant-ai codeant-ai Bot added the size:XXL This PR changes 1000+ lines, ignoring generated files label Mar 28, 2026
@bito-code-review
Copy link
Copy Markdown

The interface NewInterface is newly added and currently empty. Without evidence of usage or implementation in the PR diff, it doesn't appear justified as a marker interface. Consider removing it or adding meaningful members to provide functionality.

Copy link
Copy Markdown

@gemini-code-assist gemini-code-assist Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request updates package dependencies to newer versions, adds documentation for coding guidelines and analyzers, and introduces ReSharper file layout configurations. It also includes a Windows registry script for Claude Code integration and sample projects for testing editor configurations. Key feedback includes addressing hardcoded local paths in the registry script, generalizing specific ignore patterns in the sync configuration, removing UTF-8 BOMs for better cross-platform support, and cleaning up obsolete TODO comments.

; Add "Open with Claude Code" to folder context menu
[HKEY_CLASSES_ROOT\Directory\shell\OpenWithClaudeCode]
@="Open with Claude Code"
"Icon"="C:\\DevNet\\github\\open-with-claude-code\\claude.ico,0"
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

critical

The icon path is hardcoded to a local directory: C:\\DevNet\\github\\open-with-claude-code\\claude.ico,0. This path is specific to your machine and will not work for other users. The same issue exists on line 15.

For a script in a shared repository, it's crucial to avoid local, absolute paths. Consider using a placeholder that a setup script can replace, or referencing a path via a system-wide environment variable.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Addressed in commit dcd3e77. Fixed cmd.exe quoting (removed extra outer quotes) and added a comment about the hardcoded icon path.

Comment thread .syncignore Outdated
Comment on lines +391 to +393
/.idea/**/.idea/dataSources.xml
/.idea/**/.idea/inspectionProfiles/Project_Default.xml
/.idea/.idea.Ploch.Common.Data/.idea/vcs.xml
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

These lines contain paths that are either incorrect or too specific for a general-purpose ignore file.

  • Lines 391 and 392 reference a nested .idea directory (.idea/**/.idea), which is an unlikely structure.
  • Line 393 contains a hardcoded project name (Ploch.Common.Data), which makes the rule not portable across different projects.

It's recommended to remove these lines. Broader, more generic patterns (like **/.idea/) are preferred.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Addressed in commit dcd3e77. Replaced project-specific .idea paths with generic glob patterns.

@@ -0,0 +1,9 @@
<Project Sdk="Microsoft.NET.Sdk">
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

This file starts with a UTF-8 Byte Order Mark (BOM), which can cause issues with some tools and platforms, especially outside of Windows. It's generally recommended to use UTF-8 without a BOM for text files in a cross-platform project. You can enforce this by adding charset = utf-8 to your .editorconfig file.

<Project Sdk="Microsoft.NET.Sdk">

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

False positive. UTF-8 BOM is standard for .NET SDK project files generated by Visual Studio and dotnet new. This is a sample project file for testing editorconfig hierarchy, not a cross-platform script.

resharper_built_in_type_reference_style_for_member_access_highlighting = warning
resharper_built_in_type_reference_style_highlighting = hint

resharper_c_sharp_warnings_cs8618_cs9264_highlighting = error # TODO: Check this: 'c_sharp' vs 'csharp' (it's correct: https://www.jetbrains.com/help/resharper/Reference__Code_Inspections_CSHARP.html#BestPractice)
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

This line contains a TODO comment. It appears the check has been completed and the comment confirms the setting is correct. The TODO and the explanatory comment should be removed to keep the configuration file clean.

resharper_c_sharp_warnings_cs8618_cs9264_highlighting = error

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Addressed in commit dcd3e77. Removed the TODO prefix — the investigation confirmed it is correct.

<PackageVersion Include="IDisposableAnalyzers" Version="4.0.8" />
<PackageVersion Include="JetBrains.Annotations" Version="2025.2.4" />
<PackageVersion Include="Microsoft.AspNetCore.Mvc.ViewFeatures" Version="2.3.0" />
<PackageVersion Include="Microsoft.AspNetCore.Mvc.ViewFeatures" Version="2.3.9" />
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggestion: The package version 2.3.9 for Microsoft.AspNetCore.Mvc.ViewFeatures does not correspond to a valid ASP.NET Core package version (the 2.x line ended at 2.2.x), so using it in central package management will cause NuGet restore to fail for any project that references this package version. [possible bug]

Severity Level: Major ⚠️
- ❌ Consuming projects cannot restore when using ViewFeatures package.
- ⚠️ Shared central package config causes unexpected build failures.
Suggested change
<PackageVersion Include="Microsoft.AspNetCore.Mvc.ViewFeatures" Version="2.3.9" />
<PackageVersion Include="Microsoft.AspNetCore.Mvc.ViewFeatures" Version="2.2.0" />
Steps of Reproduction ✅
1. Use this repository as intended (per PR description: shared centralised package version
definitions) and include `dependencies/Common.Packages.props` in a consuming .NET solution
for central package management.

2. In that consuming solution, add a project with a `<PackageReference
Include="Microsoft.AspNetCore.Mvc.ViewFeatures" />` that omits the `Version` attribute so
it uses the central version from `dependencies/Common.Packages.props:23`.

3. Run `dotnet restore` for the consuming solution; NuGet resolves
`Microsoft.AspNetCore.Mvc.ViewFeatures` using the centrally defined version `2.3.9` from
`dependencies/Common.Packages.props` line 23.

4. Observe NuGet restore failing because package `Microsoft.AspNetCore.Mvc.ViewFeatures`
has no published `2.3.9` version in the 2.x line (which ended at 2.2.x), so the consuming
project cannot restore or build.
Prompt for AI Agent 🤖
This is a comment left during a code review.

**Path:** dependencies/Common.Packages.props
**Line:** 23:23
**Comment:**
	*Possible Bug: The package version `2.3.9` for `Microsoft.AspNetCore.Mvc.ViewFeatures` does not correspond to a valid ASP.NET Core package version (the 2.x line ended at 2.2.x), so using it in central package management will cause NuGet restore to fail for any project that references this package version.

Validate the correctness of the flagged issue. If correct, How can I resolve this? If you propose a fix, implement it and please make it concise.
👍 | 👎

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

False positive. Version 2.3.9 does exist on NuGet.org — verified via the NuGet API (https://api.nuget.org/v3-flatcontainer/microsoft.aspnetcore.mvc.viewfeatures/index.json lists it). The 2.x ASP.NET Core packages continued receiving security patches beyond 2.2.x.

resharper_arrange_type_member_modifiers_highlighting = hint
resharper_arrange_type_modifiers_highlighting = hint

resharper_async_apostle_configure_await_highlighting_highlighting = hint
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggestion: The ReSharper setting key for the async apostle configure-await inspection has a duplicated "_highlighting" suffix, so ReSharper will not recognize this option and the intended severity will not be applied, leading to unexpected default behavior for this inspection. [logic error]

Severity Level: Major ⚠️
- ⚠️ Async apostle inspection ignores configured hint severity.
- ⚠️ ReSharper users see unexpected defaults for configure-await rule.
Suggested change
resharper_async_apostle_configure_await_highlighting_highlighting = hint
resharper_async_apostle_configure_await_highlighting = hint
Steps of Reproduction ✅
1. Open the shared configuration file
`editor-config/editorconfig-hierarchy/library-repository/using-shared-root-file.editorconfig`
and locate the ReSharper settings block around line 519, where
`resharper_async_apostle_configure_await_highlighting_highlighting = hint` is defined
(verified via Read tool).

2. In the same file, compare this key with other ReSharper severity keys such as
`resharper_built_in_type_reference_style_for_member_access_highlighting` at lines 135–136
and many other `resharper_*_highlighting` entries, all of which end with a single
`_highlighting` suffix (verified via Read on the same file).

3. Note that the async apostle entry is the only one using the duplicated
`_highlighting_highlighting` suffix; a global Grep search for
`resharper_async_apostle_configure_await_highlighting =` in the repository returns no
matches, while several files (including this one) contain the double-suffix variant,
indicating a consistent typo rather than a different supported key (verified via Grep on
`/workspace/mrploch-development`).

4. When a C# project uses this editorconfig file as part of its configuration (e.g., by
copying it to the repository root as `.editorconfig` for a library project), ReSharper
will read severity settings from keys that match known inspection IDs such as
`resharper_async_apostle_configure_await_highlighting`; because the key at line 519 is
mis-typed, ReSharper will ignore this line and the async apostle "configure await"
inspection will fall back to its default severity instead of the intended `hint`, making
severity configuration for this rule ineffective.
Prompt for AI Agent 🤖
This is a comment left during a code review.

**Path:** editor-config/editorconfig-hierarchy/library-repository/using-shared-root-file.editorconfig
**Line:** 519:519
**Comment:**
	*Logic Error: The ReSharper setting key for the async apostle configure-await inspection has a duplicated `"_highlighting"` suffix, so ReSharper will not recognize this option and the intended severity will not be applied, leading to unexpected default behavior for this inspection.

Validate the correctness of the flagged issue. If correct, How can I resolve this? If you propose a fix, implement it and please make it concise.
👍 | 👎

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Addressed in commit dcd3e77. Removed the duplicated _highlighting suffix.

Comment on lines +18 to +26
<TypePattern DisplayName="xUnit.net Test Classes" RemoveRegions="All">
<TypePattern.Match>
<And>
<Kind Is="Class" />
<HasMember>
<And>
<Kind Is="Method" />
<HasAttribute Inherited="True" Name="Xunit.FactAttribute" />
<HasAttribute Inherited="True" Name="Xunit.TheoryAttribute" />
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggestion: The xUnit test class detection currently requires a method that has both Xunit.FactAttribute and Xunit.TheoryAttribute simultaneously, which effectively never happens in real code, so the "xUnit.net Test Classes" pattern will almost never match and the custom layout will not be applied to xUnit test classes; wrapping these attributes in an <Or> condition fixes the logic. [logic error]

Severity Level: Major ⚠️
- ⚠️ xUnit test classes not recognized by ReSharper layout.
- ⚠️ xUnit cleanup uses generic default member ordering.
Suggested change
<TypePattern DisplayName="xUnit.net Test Classes" RemoveRegions="All">
<TypePattern.Match>
<And>
<Kind Is="Class" />
<HasMember>
<And>
<Kind Is="Method" />
<HasAttribute Inherited="True" Name="Xunit.FactAttribute" />
<HasAttribute Inherited="True" Name="Xunit.TheoryAttribute" />
<TypePattern DisplayName="xUnit.net Test Classes" RemoveRegions="All">
<TypePattern.Match>
<And>
<Kind Is="Class" />
<HasMember>
<And>
<Kind Is="Method" />
<Or>
<HasAttribute Inherited="True" Name="Xunit.FactAttribute" />
<HasAttribute Inherited="True" Name="Xunit.TheoryAttribute" />
</Or>
Steps of Reproduction ✅
1. Configure ReSharper in Visual Studio to use the file layout defined in
`repository-config/resharper/file-layout-current-visual-studio-resharper.xml` by importing
it as the current file layout (pattern "xUnit.net Test Classes" is defined at lines 18–74
in this file).

2. In any C# project using that configuration, add a typical xUnit test class (for example
`SampleTests`) where methods are annotated with either `[Fact]` or `[Theory]`, but not
both, which is normal xUnit usage.

3. Run ReSharper's "Reorder Type Members" or a Code Cleanup profile that applies the
imported file layout to the test class, causing ReSharper to evaluate the
`<TypePattern.Match>` for xUnit classes at lines 18–30.

4. Observe that the test class is not matched by the "xUnit.net Test Classes" pattern and
instead falls back to the "Default Pattern" at lines 126–215, because the current match
condition requires a single method to have both `Xunit.FactAttribute` and
`Xunit.TheoryAttribute` simultaneously, which never occurs in real xUnit code.
Prompt for AI Agent 🤖
This is a comment left during a code review.

**Path:** repository-config/resharper/file-layout-current-visual-studio-resharper.xml
**Line:** 18:26
**Comment:**
	*Logic Error: The xUnit test class detection currently requires a method that has both `Xunit.FactAttribute` and `Xunit.TheoryAttribute` simultaneously, which effectively never happens in real code, so the "xUnit.net Test Classes" pattern will almost never match and the custom layout will not be applied to xUnit test classes; wrapping these attributes in an `<Or>` condition fixes the logic.

Validate the correctness of the flagged issue. If correct, How can I resolve this? If you propose a fix, implement it and please make it concise.
👍 | 👎

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Addressed in commit dcd3e77. Changed <And> to <Or> for Fact/Theory attribute matching.

Comment on lines +66 to +67
<HasAttribute Name="Xunit.FactAttribute" />
<HasAttribute Name="Xunit.TheoryAttribute" />
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggestion: The xUnit test method entry similarly requires each method to have both Xunit.FactAttribute and Xunit.TheoryAttribute at the same time, so no normal test methods are matched and the intended ordering for xUnit tests is never applied; using an <Or> between the attributes corrects this. [logic error]

Severity Level: Major ⚠️
- ⚠️ xUnit test methods not grouped under test methods entry.
- ⚠️ xUnit file layout inconsistent across code cleanup runs.
Suggested change
<HasAttribute Name="Xunit.FactAttribute" />
<HasAttribute Name="Xunit.TheoryAttribute" />
<Or>
<HasAttribute Name="Xunit.FactAttribute" />
<HasAttribute Name="Xunit.TheoryAttribute" />
</Or>
Steps of Reproduction ✅
1. Import `repository-config/resharper/file-layout-current-visual-studio-resharper.xml`
into ReSharper as the current file layout, so the xUnit-specific "Test Methods" entry at
lines 62–73 is active for xUnit test classes.

2. In a project using xUnit, create a class that satisfies the surrounding "xUnit.net Test
Classes" type pattern (lines 18–30) by containing at least one method with `[Fact]` or
`[Theory]` (as normal), but where no method has both attributes.

3. Run ReSharper's "Reorder Type Members" or Code Cleanup using this layout so that
ReSharper evaluates the `<Entry.DisplayName="Test Methods">` block at lines 62–73 when
ordering members inside the test class.

4. Observe that none of the xUnit test methods are placed into the "Test Methods" group
and are instead ordered as generic members, because the current `<Entry.Match>` requires
each method to have both `Xunit.FactAttribute` and `Xunit.TheoryAttribute`, which real
xUnit methods never do.
Prompt for AI Agent 🤖
This is a comment left during a code review.

**Path:** repository-config/resharper/file-layout-current-visual-studio-resharper.xml
**Line:** 66:67
**Comment:**
	*Logic Error: The xUnit test method entry similarly requires each method to have both `Xunit.FactAttribute` and `Xunit.TheoryAttribute` at the same time, so no normal test methods are matched and the intended ordering for xUnit tests is never applied; using an `<Or>` between the attributes corrects this.

Validate the correctness of the flagged issue. If correct, How can I resolve this? If you propose a fix, implement it and please make it concise.
👍 | 👎

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Addressed in commit dcd3e77.

Comment on lines +85 to +87
<HasAttribute Name="NUnit.Framework.TestAttribute" />
<HasAttribute Name="NUnit.Framework.TestCaseAttribute" />
<HasAttribute Name="NUnit.Framework.TestCaseSourceAttribute" />
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggestion: The NUnit test fixture detection via HasMember requires a single method decorated with all of Test, TestCase, and TestCaseSource attributes simultaneously, which is unrealistic and prevents fixtures that rely only on test method attributes from being recognized; using an <Or> condition across these attributes matches the intended range of NUnit test methods. [logic error]

Severity Level: Major ⚠️
- ⚠️ NUnit fixtures detected only when class attributes used.
- ⚠️ NUnit fixtures without class attributes use default order.
Suggested change
<HasAttribute Name="NUnit.Framework.TestAttribute" />
<HasAttribute Name="NUnit.Framework.TestCaseAttribute" />
<HasAttribute Name="NUnit.Framework.TestCaseSourceAttribute" />
<Or>
<HasAttribute Name="NUnit.Framework.TestAttribute" />
<HasAttribute Name="NUnit.Framework.TestCaseAttribute" />
<HasAttribute Name="NUnit.Framework.TestCaseSourceAttribute" />
</Or>
Steps of Reproduction ✅
1. Import `repository-config/resharper/file-layout-current-visual-studio-resharper.xml`
into ReSharper as the active file layout so the "NUnit Test Fixtures" pattern at lines
75–125 controls ordering of NUnit fixtures.

2. In a C# project using NUnit, create a test class without `[TestFixture]` or
`[TestFixtureSource]` attributes but containing methods marked with `[Test]`,
`[TestCase]`, or `[TestCaseSource]`, which is a supported NUnit style relying on method
attributes only.

3. Run ReSharper's "Reorder Type Members" or Code Cleanup using the imported layout so
that the `<HasMember>` condition at lines 82–89 is evaluated to detect NUnit fixtures
based on their test methods.

4. Observe that the class is not detected as an "NUnit Test Fixture" and is ordered using
the generic "Default Pattern" at lines 126–215, because the current `<HasMember>`
definition requires a single method to have all three NUnit attributes (`Test`,
`TestCase`, and `TestCaseSource`) simultaneously, which does not occur in normal NUnit
usage.
Prompt for AI Agent 🤖
This is a comment left during a code review.

**Path:** repository-config/resharper/file-layout-current-visual-studio-resharper.xml
**Line:** 85:87
**Comment:**
	*Logic Error: The NUnit test fixture detection via `HasMember` requires a single method decorated with all of `Test`, `TestCase`, and `TestCaseSource` attributes simultaneously, which is unrealistic and prevents fixtures that rely only on test method attributes from being recognized; using an `<Or>` condition across these attributes matches the intended range of NUnit test methods.

Validate the correctness of the flagged issue. If correct, How can I resolve this? If you propose a fix, implement it and please make it concise.
👍 | 👎

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Addressed in commit dcd3e77. Changed <And> to <Or> for NUnit Test/TestCase/TestCaseSource matching.

Comment on lines +116 to +118
<HasAttribute Name="NUnit.Framework.TestAttribute" />
<HasAttribute Name="NUnit.Framework.TestCaseAttribute" />
<HasAttribute Name="NUnit.Framework.TestCaseSourceAttribute" />
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggestion: The NUnit test methods entry requires each method to have all three NUnit attributes (Test, TestCase, and TestCaseSource) at once, which typical NUnit tests do not, so no methods are matched for the "Test Methods" group and the intended ordering is skipped; changing this to an <Or> condition aligns with real NUnit usage. [logic error]

Severity Level: Major ⚠️
- ⚠️ NUnit test methods never matched by test methods group.
- ⚠️ NUnit test ordering falls back to default layout.
Suggested change
<HasAttribute Name="NUnit.Framework.TestAttribute" />
<HasAttribute Name="NUnit.Framework.TestCaseAttribute" />
<HasAttribute Name="NUnit.Framework.TestCaseSourceAttribute" />
<Or>
<HasAttribute Name="NUnit.Framework.TestAttribute" />
<HasAttribute Name="NUnit.Framework.TestCaseAttribute" />
<HasAttribute Name="NUnit.Framework.TestCaseSourceAttribute" />
</Or>
Steps of Reproduction ✅
1. Import `repository-config/resharper/file-layout-current-visual-studio-resharper.xml`
into ReSharper so that the "NUnit Test Fixtures" block, including the "Test Methods" entry
at lines 112–124, is used for ordering NUnit classes.

2. In a project with NUnit tests, create or open a fixture class that is recognized by the
outer type pattern (for example via `[TestFixture]` at lines 80–81) and contains methods
with typical NUnit attributes such as `[Test]`, `[TestCase]`, or `[TestCaseSource]`, but
not all three on the same method.

3. Run ReSharper's "Reorder Type Members" or apply a Code Cleanup profile using this
layout so that the `<Entry.DisplayName="Test Methods">` block at lines 112–124 is
evaluated for each method in the fixture.

4. Observe that none of the NUnit test methods are placed into the "Test Methods" group
and are instead ordered as generic members, because the match currently requires a single
method to have `Test`, `TestCase`, and `TestCaseSource` attributes simultaneously, which
standard NUnit methods do not.
Prompt for AI Agent 🤖
This is a comment left during a code review.

**Path:** repository-config/resharper/file-layout-current-visual-studio-resharper.xml
**Line:** 116:118
**Comment:**
	*Logic Error: The NUnit test methods entry requires each method to have all three NUnit attributes (`Test`, `TestCase`, and `TestCaseSource`) at once, which typical NUnit tests do not, so no methods are matched for the "Test Methods" group and the intended ordering is skipped; changing this to an `<Or>` condition aligns with real NUnit usage.

Validate the correctness of the flagged issue. If correct, How can I resolve this? If you propose a fix, implement it and please make it concise.
👍 | 👎

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Addressed in commit dcd3e77.

Comment thread scripts/add_context_menu.reg Outdated
"Position"="Top"

[HKEY_CLASSES_ROOT\Directory\shell\OpenWithClaudeCode\command]
@="cmd.exe /c \"cd /d \"%1\" && claude\""
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggestion: The command for the folder context menu wraps the entire cd /d "%1" && claude sequence in an extra pair of quotes, so cmd.exe /c will misparse the nested quotes and the cd will fail for directories (especially those with spaces) instead of changing into the selected folder and launching Claude. [logic error]

Severity Level: Major ⚠️
- ❌ Folder context menu opens Claude in wrong directory.
- ⚠️ Developers cannot reliably open Claude in target folder.
Suggested change
@="cmd.exe /c \"cd /d \"%1\" && claude\""
@="cmd.exe /c cd /d \"%1\" && claude"
Steps of Reproduction ✅
1. On a Windows machine, import the registry script
`/workspace/mrploch-development/scripts/add_context_menu.reg` so that the key
`[HKEY_CLASSES_ROOT\Directory\shell\OpenWithClaudeCode\command]` with value on line 10 is
registered.

2. In File Explorer, right‑click any folder whose path contains a space (e.g., `C:\DevNet
Projects`) and choose the "Open with Claude Code" entry added by lines 3–7 of
`/workspace/mrploch-development/scripts/add_context_menu.reg`.

3. Explorer launches `cmd.exe` with the command string from line 10: `cmd.exe /c "cd /d
"<folder-path>" && claude"`, where the outer quotes wrap the entire `cd /d "%1" && claude`
sequence.

4. Because of the nested quotes, `cmd.exe` ends the quoted command at the second quote
(after `cd /d `), so `cd` executes without the folder path and does not change into the
selected directory; Claude (if launched) starts in the default working directory instead
of the folder the user clicked.
Prompt for AI Agent 🤖
This is a comment left during a code review.

**Path:** scripts/add_context_menu.reg
**Line:** 10:10
**Comment:**
	*Logic Error: The command for the folder context menu wraps the entire `cd /d "%1" && claude` sequence in an extra pair of quotes, so `cmd.exe /c` will misparse the nested quotes and the `cd` will fail for directories (especially those with spaces) instead of changing into the selected folder and launching Claude.

Validate the correctness of the flagged issue. If correct, How can I resolve this? If you propose a fix, implement it and please make it concise.
👍 | 👎

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Addressed in commit dcd3e77. Fixed quoting and changed %v to %V.

Comment thread scripts/add_context_menu.reg Outdated
"Position"="Top"

[HKEY_CLASSES_ROOT\Directory\Background\shell\OpenWithClaudeCode\command]
@="cmd.exe /c \"cd /d \"%v\" && claude\""
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggestion: The background context menu command both uses the wrong placeholder (%v instead of the standard %V) and adds an extra outer pair of quotes around the cd /d "%V" && claude sequence, so cmd.exe will not receive the correct folder path and the cd will fail instead of opening Claude in the clicked directory. [logic error]

Severity Level: Major ⚠️
- ❌ Background context menu opens Claude in incorrect directory.
- ⚠️ Background entry may not receive correct folder path.
Suggested change
@="cmd.exe /c \"cd /d \"%v\" && claude\""
@="cmd.exe /c cd /d \"%V\" && claude"
Steps of Reproduction ✅
1. On a Windows machine, import
`/workspace/mrploch-development/scripts/add_context_menu.reg` so that
`[HKEY_CLASSES_ROOT\Directory\Background\shell\OpenWithClaudeCode\command]` with the value
from line 19 is registered.

2. In File Explorer, open any folder whose path contains a space, right‑click on the empty
background area (not on a file/folder), and choose "Open with Claude Code" added by lines
12–16 of `scripts/add_context_menu.reg`.

3. Explorer invokes `cmd.exe` with the command from line 19: `cmd.exe /c "cd /d
"<folder-path-or-%v-expansion>" && claude"`, where the entire `cd /d "%v" && claude`
sequence is wrapped in outer quotes.

4. The nested quotes cause `cmd.exe` to terminate the quoted command after `cd /d `, so
`cd` executes without the intended directory argument; as a result, Claude starts in the
default working directory instead of the folder whose background was right‑clicked, and
using `%v` instead of the standard `%V` placeholder further risks incorrect or empty
folder path expansion in this background context.
Prompt for AI Agent 🤖
This is a comment left during a code review.

**Path:** scripts/add_context_menu.reg
**Line:** 19:19
**Comment:**
	*Logic Error: The background context menu command both uses the wrong placeholder (`%v` instead of the standard `%V`) and adds an extra outer pair of quotes around the `cd /d "%V" && claude` sequence, so `cmd.exe` will not receive the correct folder path and the `cd` will fail instead of opening Claude in the clicked directory.

Validate the correctness of the flagged issue. If correct, How can I resolve this? If you propose a fix, implement it and please make it concise.
👍 | 👎

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Addressed in commit dcd3e77.

@codeant-ai
Copy link
Copy Markdown

codeant-ai Bot commented Mar 28, 2026

CodeAnt AI finished reviewing your PR.

Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: c9e35108a3

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +25 to +26
<HasAttribute Inherited="True" Name="Xunit.FactAttribute" />
<HasAttribute Inherited="True" Name="Xunit.TheoryAttribute" />
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Match xUnit tests when either Fact or Theory is present

The xUnit pattern currently requires a single method to have both Xunit.FactAttribute and Xunit.TheoryAttribute because both checks are inside the same <And>. In normal xUnit code, methods are annotated with one or the other, so this pattern will fail to classify most test classes/methods and the dedicated test-member ordering rules will not run.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Addressed in commit dcd3e77.

Comment on lines +116 to +118
<HasAttribute Name="NUnit.Framework.TestAttribute" />
<HasAttribute Name="NUnit.Framework.TestCaseAttribute" />
<HasAttribute Name="NUnit.Framework.TestCaseSourceAttribute" />
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Treat NUnit test attributes as alternatives

The NUnit test-method matcher also uses <And> across TestAttribute, TestCaseAttribute, and TestCaseSourceAttribute, which means a method must carry all three attributes to be recognized as a test. Typical NUnit methods use only one of these attributes, so they will be misclassified as regular members and won’t receive the intended test-method ordering (the same issue appears in the class HasMember branch).

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Addressed in commit dcd3e77.

Comment on lines +2 to +21
<PropertyGroup>
<PlochPackagesVersion>3.0.0</PlochPackagesVersion>
</PropertyGroup>
<ItemGroup>
<PackageVersion Include="Ploch.Data.GenericRepository" Version="2.1.0" />
<PackageVersion Include="Ploch.Data.GenericRepository.EFCore" Version="2.1.0" />
<PackageVersion Include="Ploch.Data.Model" Version="2.1.0" />
<PackageVersion Include="Ploch.Common.AppServices" Version="$(PlochPackagesVersion)" />
<PackageVersion Include="Ploch.Data.GenericRepository" Version="$(PlochPackagesVersion)" />
<PackageVersion Include="Ploch.Data.GenericRepository.EFCore" Version="$(PlochPackagesVersion)" />
<PackageVersion Include="Ploch.Data.Model" Version="$(PlochPackagesVersion)" />
<PackageVersion Include="Ploch.Data.EFCore" Version="$(PlochPackagesVersion)" />
<PackageVersion Include="Ploch.Data.EFCore.IntegrationTesting" Version="$(PlochPackagesVersion)" />
<PackageVersion Include="Ploch.Data.EFCore.SqLite" Version="$(PlochPackagesVersion)" />
<PackageVersion Include="Ploch.Data.EFCore.SqlServer" Version="$(PlochPackagesVersion)" />
<PackageVersion Include="Ploch.Data.GenericRepository.EFCore.IntegrationTesting" Version="$(PlochPackagesVersion)" />
<PackageVersion Include="Ploch.Common" Version="$(PlochPackagesVersion)" />
<PackageVersion Include="Ploch.Common.DependencyInjection" Version="$(PlochPackagesVersion)" />
<PackageVersion Include="Ploch.Common.Net9" Version="$(PlochPackagesVersion)" />
<PackageVersion Include="Ploch.Common.DataAnnotations" Version="$(PlochPackagesVersion)" />
<PackageVersion Include="Ploch.TestingSupport" Version="$(PlochPackagesVersion)" />
<PackageVersion Include="Ploch.TestingSupport.Xunit" Version="$(PlochPackagesVersion)" />
<PackageVersion Include="Ploch.TestingSupport.FluentAssertions" Version="$(PlochPackagesVersion)" />
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Action required

1. Single plochpackagesversion used 📎 Requirement gap ⛯ Reliability

dependencies/Ploch.Packages.props still uses a single PlochPackagesVersion property for both
Ploch.Common*/Ploch.TestingSupport* and Ploch.Data* packages. This violates the required split
into separate Common/Data version properties and can reintroduce restore/build failures when the
repos release independently.
Agent Prompt
## Issue description
`dependencies/Ploch.Packages.props` uses a single `PlochPackagesVersion` for all Ploch packages, but compliance requires separate version properties for Common and Data packages.

## Issue Context
Ploch Common and Data packages release independently; using one pinned version can cause missing-version restores (NU1603) and build failures in consuming repos when warnings are treated as errors.

## Fix Focus Areas
- dependencies/Ploch.Packages.props[2-21]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Acknowledged. This is tracked by issue #5 and will be addressed in a follow-up PR that splits into per-repo version variables.

Comment thread scripts/add_context_menu.reg Outdated
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 8

🧹 Nitpick comments (4)
development-notes-guidelines/findings.md (1)

5-5: Tighten wording for clarity/professional tone.

Consider replacing “stuff I found” with more precise language to keep this notes set consistent and searchable.

Suggested wording
-This document contains stuff I found and might want to review later.
+This document captures items I discovered that may require follow-up review.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@development-notes-guidelines/findings.md` at line 5, Replace the casual
phrase "stuff I found" in the document title/sentence with a clearer,
professional phrase such as "findings and observations", "notes and findings",
or "identified findings" to improve searchability and tone; update the sentence
"This document contains stuff I found and might want to review later." to a more
precise variant like "This document contains findings and observations to review
later." and ensure similar phrasing is used consistently throughout the file.
development-notes-guidelines/coding-guidelines-notes.md (1)

3-3: Use conventional “C#” naming in the section header.

This improves readability and aligns with common .NET documentation terminology.

Suggested heading update
-## CSharpCodingGuidelines Site
+## C# Coding Guidelines Site
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@development-notes-guidelines/coding-guidelines-notes.md` at line 3, Replace
the nonstandard header "CSharpCodingGuidelines Site" with the conventional C#
naming by updating that section heading to "C# Coding Guidelines" (or "C# Coding
Guidelines Site" if the word "Site" must be preserved) so the header uses the
"C#" token; locate the header text "CSharpCodingGuidelines Site" and change it
accordingly.
development-notes-guidelines/net-analyzers.md (1)

9-20: Consider using labeled Markdown links instead of raw URLs.

The list is useful, but link labels (package/repo names) will make scanning and future maintenance easier.

Suggested doc refactor
-- https://www.nuget.org/packages/Philips.CodeAnalysis.MoqAnalyzers
+- [Philips.CodeAnalysis.MoqAnalyzers](https://www.nuget.org/packages/Philips.CodeAnalysis.MoqAnalyzers)
...
-- https://github.com/GuOrg/Gu.Analyzers
+- [Gu.Analyzers (GitHub)](https://github.com/GuOrg/Gu.Analyzers)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@development-notes-guidelines/net-analyzers.md` around lines 9 - 20, Replace
the raw URLs in the list with labeled Markdown links using the package or repo
names as the link text (e.g., "Philips.CodeAnalysis.MoqAnalyzers",
"ErrorProne.NET.CoreAnalyzers", "IDisposableAnalyzers", "Agoda.Analyzers",
"SmartAnalyzers.CSharpExtensions.Annotations",
"Philips.CodeAnalysis.MaintainabilityAnalyzers", "ReflectionAnalyzers",
"StructuredLogging.Analyzers", "Spectre.Console.Analyzer", "SerilogAnalyzer",
"TestableIO.System.IO.Abstractions.Analyzers", and "Gu.Analyzers") so each list
item reads like "PackageName — [PackageName](URL)"; keep the same URLs but use
the package/repo name as the label for readability and easier maintenance.
scripts/add_context_menu.reg (1)

6-7: Avoid machine-specific icon paths in shared registry script.

The Icon value at Line 6 and Line 15 hardcodes a local path (C:\DevNet\...) that won’t exist for most contributors.

🔧 Proposed fix
-"Icon"="C:\\DevNet\\github\\open-with-claude-code\\claude.ico,0"
+; Optional: omit icon to avoid machine-specific paths
+; "Icon"="C:\\Path\\To\\claude.ico,0"

Also applies to: 15-16

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@scripts/add_context_menu.reg` around lines 6 - 7, The registry script
hardcodes a machine-specific Icon path
("Icon"="C:\\DevNet\\github\\open-with-claude-code\\claude.ico,0"); update the
"Icon" entries referencing claude.ico to use a relocatable approach: remove the
absolute C:\\DevNet path and either (a) use an environment-variable-based path
such as "%ProgramFiles%\\open-with-claude-code\\claude.ico,0" and store the
value as an expanded string (REG_EXPAND_SZ / hex(2)) in the .reg, or (b) omit
the Icon entries and document that installers must place claude.ico into a known
install folder and set the Icon at install time; change both "Icon" occurrences
accordingly so the .reg no longer contains a local-dev absolute path.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@dependencies/Ploch.Packages.props`:
- Around line 3-16: The sample-solution local packages file is overriding the
centralized PlochPackagesVersion by pinning Ploch.Common to 2.0.1; update the
sample-solution's directory.packages.props so it no longer pins a conflicting
version—either remove the explicit Ploch.Common entry or change it to reference
the centralized variable/3.0.0 (i.e., align it with PlochPackagesVersion used in
Ploch.Packages.props) to ensure the central version (PlochPackagesVersion /
Ploch.Common) is honored across the repo.

In `@dependencies/Testing.Packages.props`:
- Around line 42-45: This central package list includes both xUnit v2 packages
(xunit, xunit.extensibility.core) and xUnit v3 packages (xunit.v3,
xunit.v3.core, xunit.v3.extensibility.core, xunit.v3.runner.msbuild), which can
allow a consuming project to accidentally mix versions; audit all consuming test
.csproj files and ensure each explicitly references only one stack (either the
v2 package IDs or the v3 package IDs) by removing or overriding the other set
from their PackageReference entries (or add an MSBuild condition/props that
prevents simultaneous inclusion), and update team guidance or CI validation to
fail if a project contains both xunit and xunit.v3* references.

In `@editor-config/editorconfig-hierarchy/app-repository/src/NewInterface.cs`:
- Line 3: Rename the interface NewInterface to follow the configured naming rule
by prefixing it with 'I' (e.g., INewInterface); update the declaration of the
interface (NewInterface) and any references/usages throughout the codebase so
all references point to the new name to avoid compilation errors and satisfy the
naming convention.

In
`@editor-config/editorconfig-hierarchy/library-repository/using-shared-root-file.editorconfig`:
- Line 80: The EditorConfig entry for csharp_style_expression_bodied_operators
uses an invalid value "true:when_on_single_line"; update it to a valid
"value:severity" form (e.g., change to "true:suggestion" or another allowed
severity from silent|suggestion|warning|error) so tooling will recognize it, and
apply the same fix to the other five .editorconfig files that contain the same
invalid token.

In `@editor-config/StyleCopAnalyzersDefault.editorconfig`:
- Around line 127-130: Add the missing SA1502 rule by inserting the editorconfig
key dotnet_diagnostic.sa1502.severity = none between the existing SA1501 and
SA1503 entries so this file matches the other editorconfig files; specifically,
add a line setting dotnet_diagnostic.sa1502.severity = none immediately after
dotnet_diagnostic.SA1501.severity and before dotnet_diagnostic.SA1503.severity
to restore consistency.

In `@repository-config/resharper/file-layout-current-visual-studio-resharper.xml`:
- Around line 22-27: The XML rule under the <HasMember> block incorrectly uses
<And> to require both <HasAttribute Name="Xunit.FactAttribute" /> and
<HasAttribute Name="Xunit.TheoryAttribute" /> for methods (inside the <Kind
Is="Method" /> node); change the <And> to <Or> so the rule matches methods that
have either attribute. Also apply the same replacement for the similar
occurrence referenced at the other location (the block around the <HasAttribute
... Name="Xunit.FactAttribute" /> and <HasAttribute ...
Name="Xunit.TheoryAttribute" /> pair near lines 66-67) so both rule sets use
<Or> instead of <And>.
- Around line 83-88: The XML rule blocks that require a method to have all three
NUnit attributes are too strict; replace the surrounding <And> element with <Or>
for the blocks that contain <Kind Is="Method" /> together with <HasAttribute
Name="NUnit.Framework.TestAttribute" />, <HasAttribute
Name="NUnit.Framework.TestCaseAttribute" />, and <HasAttribute
Name="NUnit.Framework.TestCaseSourceAttribute" /> so the matcher accepts any one
of those attributes; make this change in both occurrences (the block containing
Kind Is="Method" and the three HasAttribute entries, and the second identical
block further down).

In `@repository-config/sample-solutions/libs-and-console-app/README.md`:
- Around line 8-12: The README in
repository-config/sample-solutions/libs-and-console-app uses incorrect relative
links; update the two links that currently point to ./LICENSE and
./repository-config/ so they resolve from this nested folder (replace them with
repository-root relative paths such as /LICENSE and /repository-config/ or
correct relative paths like ../../../LICENSE and ../../ to match your
preference), editing the README.md entries that reference LICENSE and the
repository-config folder so the links point to the actual targets.

---

Nitpick comments:
In `@development-notes-guidelines/coding-guidelines-notes.md`:
- Line 3: Replace the nonstandard header "CSharpCodingGuidelines Site" with the
conventional C# naming by updating that section heading to "C# Coding
Guidelines" (or "C# Coding Guidelines Site" if the word "Site" must be
preserved) so the header uses the "C#" token; locate the header text
"CSharpCodingGuidelines Site" and change it accordingly.

In `@development-notes-guidelines/findings.md`:
- Line 5: Replace the casual phrase "stuff I found" in the document
title/sentence with a clearer, professional phrase such as "findings and
observations", "notes and findings", or "identified findings" to improve
searchability and tone; update the sentence "This document contains stuff I
found and might want to review later." to a more precise variant like "This
document contains findings and observations to review later." and ensure similar
phrasing is used consistently throughout the file.

In `@development-notes-guidelines/net-analyzers.md`:
- Around line 9-20: Replace the raw URLs in the list with labeled Markdown links
using the package or repo names as the link text (e.g.,
"Philips.CodeAnalysis.MoqAnalyzers", "ErrorProne.NET.CoreAnalyzers",
"IDisposableAnalyzers", "Agoda.Analyzers",
"SmartAnalyzers.CSharpExtensions.Annotations",
"Philips.CodeAnalysis.MaintainabilityAnalyzers", "ReflectionAnalyzers",
"StructuredLogging.Analyzers", "Spectre.Console.Analyzer", "SerilogAnalyzer",
"TestableIO.System.IO.Abstractions.Analyzers", and "Gu.Analyzers") so each list
item reads like "PackageName — [PackageName](URL)"; keep the same URLs but use
the package/repo name as the label for readability and easier maintenance.

In `@scripts/add_context_menu.reg`:
- Around line 6-7: The registry script hardcodes a machine-specific Icon path
("Icon"="C:\\DevNet\\github\\open-with-claude-code\\claude.ico,0"); update the
"Icon" entries referencing claude.ico to use a relocatable approach: remove the
absolute C:\\DevNet path and either (a) use an environment-variable-based path
such as "%ProgramFiles%\\open-with-claude-code\\claude.ico,0" and store the
value as an expanded string (REG_EXPAND_SZ / hex(2)) in the .reg, or (b) omit
the Icon entries and document that installers must place claude.ico into a known
install folder and set the Icon at install time; change both "Icon" occurrences
accordingly so the .reg no longer contains a local-dev absolute path.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: b1e16828-79f6-4409-a6c9-b0280c9c5a3d

📥 Commits

Reviewing files that changed from the base of the PR and between 6517cd5 and c9e3510.

📒 Files selected for processing (21)
  • .gitignore
  • .junie/guidelines.md
  • .syncignore
  • dependencies/Analyzers.Global.Packages.props
  • dependencies/Common.Packages.props
  • dependencies/MicrosoftExtensions.Net9.Packages.props
  • dependencies/Ploch.Packages.props
  • dependencies/Testing.Packages.props
  • development-notes-guidelines/coding-guidelines-notes.md
  • development-notes-guidelines/findings.md
  • development-notes-guidelines/net-analyzers.md
  • editor-config/StyleCopAnalyzersDefault.editorconfig
  • editor-config/editorconfig-hierarchy/app-repository/.editorconfig
  • editor-config/editorconfig-hierarchy/app-repository/ClassLibrary1.csproj
  • editor-config/editorconfig-hierarchy/app-repository/src/NewClass.cs
  • editor-config/editorconfig-hierarchy/app-repository/src/NewInterface.cs
  • editor-config/editorconfig-hierarchy/library-repository/using-shared-root-file.editorconfig
  • repository-config/resharper/file-layout-current-visual-studio-resharper.xml
  • repository-config/root-folder/.gitignore
  • repository-config/sample-solutions/libs-and-console-app/README.md
  • scripts/add_context_menu.reg
💤 Files with no reviewable changes (1)
  • .junie/guidelines.md

Comment on lines +3 to +16
<PlochPackagesVersion>3.0.0</PlochPackagesVersion>
</PropertyGroup>
<ItemGroup>
<PackageVersion Include="Ploch.Data.GenericRepository" Version="2.1.0" />
<PackageVersion Include="Ploch.Data.GenericRepository.EFCore" Version="2.1.0" />
<PackageVersion Include="Ploch.Data.Model" Version="2.1.0" />
<PackageVersion Include="Ploch.Common.AppServices" Version="$(PlochPackagesVersion)" />
<PackageVersion Include="Ploch.Data.GenericRepository" Version="$(PlochPackagesVersion)" />
<PackageVersion Include="Ploch.Data.GenericRepository.EFCore" Version="$(PlochPackagesVersion)" />
<PackageVersion Include="Ploch.Data.Model" Version="$(PlochPackagesVersion)" />
<PackageVersion Include="Ploch.Data.EFCore" Version="$(PlochPackagesVersion)" />
<PackageVersion Include="Ploch.Data.EFCore.IntegrationTesting" Version="$(PlochPackagesVersion)" />
<PackageVersion Include="Ploch.Data.EFCore.SqLite" Version="$(PlochPackagesVersion)" />
<PackageVersion Include="Ploch.Data.EFCore.SqlServer" Version="$(PlochPackagesVersion)" />
<PackageVersion Include="Ploch.Data.GenericRepository.EFCore.IntegrationTesting" Version="$(PlochPackagesVersion)" />
<PackageVersion Include="Ploch.Common" Version="$(PlochPackagesVersion)" />
<PackageVersion Include="Ploch.Common.DependencyInjection" Version="$(PlochPackagesVersion)" />
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot Mar 28, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Find all explicit Ploch package version declarations to detect local shadowing.
rg -nP --iglob '*.props' '<PackageVersion\s+Include="Ploch\.[^"]+"\s+Version="[^"]+"'

Repository: mrploch/mrploch-development

Length of output: 2389


🏁 Script executed:

cat -n dependencies/Ploch.Packages.props | head -25

Repository: mrploch/mrploch-development

Length of output: 1978


🏁 Script executed:

cat -n repository-config/sample-solutions/libs-and-console-app/directory.packages.props

Repository: mrploch/mrploch-development

Length of output: 2277


🏁 Script executed:

# Check if there are other explicit Ploch version overrides in the sample solution
rg -nP 'Version=' repository-config/sample-solutions/libs-and-console-app/directory.packages.props

Repository: mrploch/mrploch-development

Length of output: 1436


Centralized Ploch versioning is currently shadowed by a local override.

dependencies/Ploch.Packages.props (line 15) centralizes Ploch.Common to $(PlochPackagesVersion) (3.0.0), but repository-config/sample-solutions/libs-and-console-app/directory.packages.props (line 14) explicitly pins Ploch.Common to 2.0.1. This local override will shadow the centralized version when the props files are imported, creating version drift and weakening the centralization objective.

If 2.0.1 is not intentionally required for the sample solution, align it to 3.0.0:

Suggested fix
-    <PackageVersion Include="Ploch.Common" Version="2.0.1" />
+    <PackageVersion Include="Ploch.Common" Version="3.0.0" />
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@dependencies/Ploch.Packages.props` around lines 3 - 16, The sample-solution
local packages file is overriding the centralized PlochPackagesVersion by
pinning Ploch.Common to 2.0.1; update the sample-solution's
directory.packages.props so it no longer pins a conflicting version—either
remove the explicit Ploch.Common entry or change it to reference the centralized
variable/3.0.0 (i.e., align it with PlochPackagesVersion used in
Ploch.Packages.props) to ensure the central version (PlochPackagesVersion /
Ploch.Common) is honored across the repo.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Acknowledged — tracked by #5. Will be split into separate PlochCommonPackagesVersion and PlochDataPackagesVersion in a follow-up PR.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@kploch, understood! Deferring to a follow-up PR tracked by #5 makes sense. Looking forward to seeing PlochCommonPackagesVersion and PlochDataPackagesVersion introduced there to properly separate the versioning concerns.


✏️ Learnings added
Learnt from: kploch
Repo: mrploch/mrploch-development PR: 7
File: dependencies/Ploch.Packages.props:3-16
Timestamp: 2026-03-29T03:19:45.270Z
Learning: In `dependencies/Ploch.Packages.props` (mrploch/mrploch-development repo), the single `PlochPackagesVersion` property (currently `3.0.0`) is planned to be split into separate `PlochCommonPackagesVersion` and `PlochDataPackagesVersion` properties in a follow-up PR tracked by issue `#5`. Do not flag the unified `PlochPackagesVersion` as a long-term design decision; the split is intentionally deferred.

Note: Learnings are effective only in the context of similar code segments. To apply general coding guidelines, please configure review instructions. You can manage existing learnings in the app.

Comment thread dependencies/Testing.Packages.props
@@ -0,0 +1,4 @@
namespace Ploch.EditorConfig.FormattingCheck
{
public interface NewInterface { }
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot Mar 28, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Interface naming conflicts with configured naming rule.

Line 3 uses NewInterface instead of INewInterface, which will violate the configured interface naming convention.

🔧 Proposed fix
-    public interface NewInterface { }
+    public interface INewInterface { }
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
public interface NewInterface { }
public interface INewInterface { }
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@editor-config/editorconfig-hierarchy/app-repository/src/NewInterface.cs` at
line 3, Rename the interface NewInterface to follow the configured naming rule
by prefixing it with 'I' (e.g., INewInterface); update the declaration of the
interface (NewInterface) and any references/usages throughout the codebase so
all references point to the new name to avoid compilation errors and satisfy the
naming convention.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

False positive — sample file for editorconfig hierarchy testing, not production code.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@kploch, understood — thanks for the clarification! Since these are intentional sample/placeholder files used to exercise the editorconfig hierarchy behavior, naming convention rules don't apply here.

( ˘▿˘ )~ ✏️


✏️ Learnings added
Learnt from: kploch
Repo: mrploch/mrploch-development PR: 7
File: editor-config/editorconfig-hierarchy/app-repository/src/NewInterface.cs:3-3
Timestamp: 2026-03-29T03:19:45.035Z
Learning: Files under `editor-config/editorconfig-hierarchy/` in the `mrploch/mrploch-development` repository are sample/placeholder files used for testing EditorConfig hierarchy behavior, not production code. Do not flag naming convention violations or other code style issues in these files.

Note: Learnings are effective only in the context of similar code segments. To apply general coding guidelines, please configure review instructions. You can manage existing learnings in the app.

Comment on lines 127 to 130
dotnet_diagnostic.SA1500.severity = warning # Braces for multi-line statements should not share line
dotnet_diagnostic.SA1501.severity = warning # Statement should not be on a single line
dotnet_diagnostic.SA1502.severity = warning # Element should not be on a single line

dotnet_diagnostic.SA1503.severity = warning # Braces should not be omitted
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot Mar 28, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Verify SA1502 severity declarations across editorconfig files.
rg -nP --iglob '*.editorconfig' 'dotnet_diagnostic\.(SA1502|sa1502)\.severity\s*='

Repository: mrploch/mrploch-development

Length of output: 3583


🏁 Script executed:

# Check if the file exists and read the relevant section
if [ -f "editor-config/StyleCopAnalyzersDefault.editorconfig" ]; then
  echo "=== Lines around 127-130 ==="
  sed -n '125,135p' "editor-config/StyleCopAnalyzersDefault.editorconfig" | cat -n
  echo ""
  echo "=== Checking for SA1502 anywhere in file ==="
  grep -in 'sa1502' "editor-config/StyleCopAnalyzersDefault.editorconfig" | head -20
else
  echo "File not found: editor-config/StyleCopAnalyzersDefault.editorconfig"
fi

Repository: mrploch/mrploch-development

Length of output: 1116


Add missing SA1502 rule to match other editorconfig files.

SA1502 is absent from this file, while every other editorconfig file in the repository explicitly sets dotnet_diagnostic.sa1502.severity = none. Add it between SA1501 and SA1503 for consistency.

Proposed fix
 dotnet_diagnostic.SA1500.severity = warning # Braces for multi-line statements should not share line
 dotnet_diagnostic.SA1501.severity = warning # Statement should not be on a single line
+dotnet_diagnostic.SA1502.severity = none # Element should not be on a single line
 
 dotnet_diagnostic.SA1503.severity = warning # Braces should not be omitted
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
dotnet_diagnostic.SA1500.severity = warning # Braces for multi-line statements should not share line
dotnet_diagnostic.SA1501.severity = warning # Statement should not be on a single line
dotnet_diagnostic.SA1502.severity = warning # Element should not be on a single line
dotnet_diagnostic.SA1503.severity = warning # Braces should not be omitted
dotnet_diagnostic.SA1500.severity = warning # Braces for multi-line statements should not share line
dotnet_diagnostic.SA1501.severity = warning # Statement should not be on a single line
dotnet_diagnostic.SA1502.severity = none # Element should not be on a single line
dotnet_diagnostic.SA1503.severity = warning # Braces should not be omitted
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@editor-config/StyleCopAnalyzersDefault.editorconfig` around lines 127 - 130,
Add the missing SA1502 rule by inserting the editorconfig key
dotnet_diagnostic.sa1502.severity = none between the existing SA1501 and SA1503
entries so this file matches the other editorconfig files; specifically, add a
line setting dotnet_diagnostic.sa1502.severity = none immediately after
dotnet_diagnostic.SA1501.severity and before dotnet_diagnostic.SA1503.severity
to restore consistency.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a reference file documenting default StyleCop severity levels. The SA1502 setting here reflects the StyleCop default configuration, not our project-specific overrides. No action needed.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@kploch, understood — the file documents StyleCop's own default severity levels, so omitting SA1502 is intentional (reflecting that StyleCop does not enforce it by default). I'll keep this in mind for future reviews.


✏️ Learnings added
Learnt from: kploch
Repo: mrploch/mrploch-development PR: 7
File: editor-config/StyleCopAnalyzersDefault.editorconfig:127-130
Timestamp: 2026-03-29T03:20:24.200Z
Learning: In the `mrploch/mrploch-development` repository, `editor-config/StyleCopAnalyzersDefault.editorconfig` is a reference file documenting StyleCop's default severity levels, not a project-specific override. Missing rules (e.g., SA1502) reflect StyleCop's own defaults, not an omission. Do not flag missing rules in this file for consistency with other editorconfig files.

Note: Learnings are effective only in the context of similar code segments. To apply general coding guidelines, please configure review instructions. You can manage existing learnings in the app.


🧠 Learnings used
Learnt from: kploch
Repo: mrploch/mrploch-development PR: 7
File: editor-config/editorconfig-hierarchy/app-repository/src/NewInterface.cs:3-3
Timestamp: 2026-03-29T03:19:45.035Z
Learning: Files under `editor-config/editorconfig-hierarchy/` in the `mrploch/mrploch-development` repository are sample/placeholder files used for testing EditorConfig hierarchy behavior, not production code. Do not flag naming convention violations or other code style issues in these files.

Comment thread repository-config/sample-solutions/libs-and-console-app/README.md Outdated
@bito-code-review
Copy link
Copy Markdown

bito-code-review Bot commented Mar 28, 2026

Changelist by Bito

This pull request implements the following key changes.

Key Change Files Impacted Summary
Other Improvements - Dependency Version Management Updates
Updated package versions across all dependency management files, including Microsoft Extensions (10.0.1→10.0.5), testing frameworks, and analyzers, plus added centralized Ploch packages versioning
Other Improvements - Code Formatting and Style Configuration
Modified StyleCop rules to remove SA1502 enforcement and added comprehensive ReSharper formatting settings with XML indent rules
Other Improvements - Repository and Development Configuration
Added CodeSync ignore patterns, updated gitignore for AI tool configs, created Windows registry script for Claude Code integration, and added ReSharper file layout configuration
Documentation - EditorConfig Hierarchy Testing Samples
Added sample C# project files and code samples to test and demonstrate editorconfig hierarchy behavior
Documentation - Development Guidelines and Documentation
Added development notes and guidelines including coding guidelines, findings, and .NET analyzers documentation, plus updated sample solution README
Other Improvements - Repository Maintenance
Removed obsolete Junie testing guidelines file to clean up repository

Copy link
Copy Markdown

@bito-code-review bito-code-review Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review Agent Run #fb5138

Actionable Suggestions - 4
  • scripts/add_context_menu.reg - 2
  • dependencies/Common.Packages.props - 1
  • editor-config/editorconfig-hierarchy/library-repository/using-shared-root-file.editorconfig - 1
Additional Suggestions - 3
  • scripts/add_context_menu.reg - 2
    • PATH assumption for claude command · Line 10-10
      The command assumes 'claude' is available in the system PATH, but if Claude Code CLI isn't installed globally or PATH isn't configured, this will fail with 'claude is not recognized'. Consider using the full executable path.
    • PATH assumption for background claude command · Line 19-19
      Similar to the directory command, this assumes 'claude' is in PATH for the background context menu. If not, the command will fail.
  • editor-config/editorconfig-hierarchy/library-repository/using-shared-root-file.editorconfig - 1
    • Redundant config duplicates · Line 224-225
      The file has duplicate settings for dotnet_diagnostic.cs8763.severity and cs8770.severity. EditorConfig uses the last value, making these redundant; remove them for cleaner config.
      Code suggestion
       @@ -210,6 +210,4 @@
      - 
      - dotnet_diagnostic.cs8763.severity = error # A method marked [DoesNotReturn] should not return.
      - dotnet_diagnostic.cs8770.severity = error # Method lacks [DoesNotReturn] annotation to match implemented or overridden member.
      - 
      - ## Properties: 'dotnet_diagnostic.faa'
      - dotnet_diagnostic.faa0002.severity = warning
      + 
      + ## Properties: 'dotnet_diagnostic.faa'
      + dotnet_diagnostic.faa0002.severity = warning
Review Details
  • Files reviewed - 14 · Commit Range: c9e3510..c9e3510
    • .syncignore
    • dependencies/Analyzers.Global.Packages.props
    • dependencies/Common.Packages.props
    • dependencies/MicrosoftExtensions.Net9.Packages.props
    • dependencies/Ploch.Packages.props
    • dependencies/Testing.Packages.props
    • editor-config/StyleCopAnalyzersDefault.editorconfig
    • editor-config/editorconfig-hierarchy/app-repository/.editorconfig
    • editor-config/editorconfig-hierarchy/app-repository/ClassLibrary1.csproj
    • editor-config/editorconfig-hierarchy/app-repository/src/NewClass.cs
    • editor-config/editorconfig-hierarchy/app-repository/src/NewInterface.cs
    • editor-config/editorconfig-hierarchy/library-repository/using-shared-root-file.editorconfig
    • repository-config/root-folder/.gitignore
    • scripts/add_context_menu.reg
  • Files skipped - 7
    • .gitignore - Reason: Filter setting
    • .junie/guidelines.md - Reason: Filter setting
    • development-notes-guidelines/coding-guidelines-notes.md - Reason: Filter setting
    • development-notes-guidelines/findings.md - Reason: Filter setting
    • development-notes-guidelines/net-analyzers.md - Reason: Filter setting
    • repository-config/resharper/file-layout-current-visual-studio-resharper.xml - Reason: Filter setting
    • repository-config/sample-solutions/libs-and-console-app/README.md - Reason: Filter setting
  • Tools
    • Whispers (Secret Scanner) - ✔︎ Successful
    • Detect-secrets (Secret Scanner) - ✔︎ Successful
    • Csharp (Linter) - ✔︎ Successful

Bito Usage Guide

Commands

Type the following command in the pull request comment and save the comment.

  • /review - Manually triggers a full AI review.

  • /pause - Pauses automatic reviews on this pull request.

  • /resume - Resumes automatic reviews.

  • /resolve - Marks all Bito-posted review comments as resolved.

  • /abort - Cancels all in-progress reviews.

Refer to the documentation for additional commands.

Configuration

This repository uses Default Agent You can customize the agent settings here or contact your Bito workspace admin at kris@ploch.dev.

Documentation & Help

AI Code Review powered by Bito Logo

; Add "Open with Claude Code" to folder context menu
[HKEY_CLASSES_ROOT\Directory\shell\OpenWithClaudeCode]
@="Open with Claude Code"
"Icon"="C:\\DevNet\\github\\open-with-claude-code\\claude.ico,0"
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hard-coded icon path

The icon path is hard-coded to a specific absolute location that may not exist on all systems, potentially resulting in no icon displaying in the context menu.

Code Review Run #fb5138


Should Bito avoid suggestions like this for future reviews? (Manage Rules)

  • Yes, avoid them

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Addressed in commit dcd3e77. Added a comment noting the icon path needs local adjustment.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The review comment highlights a hardcoded local icon path in the new file scripts/add_context_menu.reg. Adding a comment notes the need for adjustment, but the path remains machine-specific and may not fully resolve the portability issue.

; Add "Open with Claude Code" to folder background context menu
[HKEY_CLASSES_ROOT\Directory\Background\shell\OpenWithClaudeCode]
@="Open with Claude Code"
"Icon"="C:\\DevNet\\github\\open-with-claude-code\\claude.ico,0"
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hard-coded icon path for background menu

Same hard-coded icon path issue for the background context menu.

Code Review Run #fb5138


Should Bito avoid suggestions like this for future reviews? (Manage Rules)

  • Yes, avoid them

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Addressed in commit dcd3e77.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This question isn’t related to the pull request. I can only help with questions about the PR’s code or comments.

<PackageVersion Include="CaseExtensions" Version="1.1.0" />
<PackageVersion Include="CommunityToolkit.Mvvm" Version="8.4.0" />
<PackageVersion Include="coverlet.msbuild" Version="6.0.4" />
<PackageVersion Include="coverlet.msbuild" Version="8.0.0" />
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Coverage instrumentation change

Updating coverlet.msbuild from 6.0.4 to 8.0.0 changes the default instrumentation heuristics. In prior versions, assemblies with any missing source files were excluded from coverage; now only assemblies with zero source files are excluded. This may result in different coverage reports. If the old behavior is needed, configure ExcludeAssembliesWithoutSources=MissingAny.

Code Review Run #fb5138


Should Bito avoid suggestions like this for future reviews? (Manage Rules)

  • Yes, avoid them

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Acknowledged. The instrumentation heuristic change in coverlet 8.0.0 is acceptable — we want assemblies with partial source coverage included. If issues arise, ExcludeAssembliesWithoutSources=MissingAny can be configured per-repo.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This question isn’t related to the pull request. I can only help with questions about the PR’s code or comments.

Comment on lines +507 to +508
resharper_align_multline_type_parameter_constrains = true
resharper_align_multline_type_parameter_list = true
Copy link
Copy Markdown

@bito-code-review bito-code-review Bot Mar 28, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ReSharper property typos

The ReSharper property names on these lines appear to have typos that could prevent the settings from being recognized. It looks like 'multline' should be 'multiline' and 'constrains' should be 'constraints' based on standard ReSharper EditorConfig documentation.

Review Rule
Bito created the rule Verify Vendor-Specific Configuration Property Names Before Correction for repo: mrploch/mrploch-development, language: Other. Bito will avoid suggestions that match this rule. You can manage review rules here.
Code Review Run #fb5138

Should Bito avoid suggestions like this for future reviews? (Manage Rules)

  • Yes, avoid them

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

False positive. resharper_align_multline_type_parameter_constrains and resharper_align_multline_type_parameter_list are the actual ReSharper EditorConfig property names — verified across ploch-common and ploch-data .editorconfig files, both generated by ReSharper/Rider. ReSharper uses multline (not multiline) for some properties and constrains (not constraints) for this specific one.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You're right—ReSharper uses 'multline' and 'constrains' in these property names, as shown in the file. The suggestion to change them to 'multiline' and 'constraints' is a false positive based on standard ReSharper EditorConfig conventions.

@kploch kploch mentioned this pull request Mar 29, 2026
- ReSharper file layout: Change <And> to <Or> for xUnit Fact/Theory and
  NUnit Test/TestCase/TestCaseSource attribute matching so test classes
  and methods are detected when using either attribute (not requiring all)
- EditorConfig: Fix duplicated _highlighting suffix in
  async_apostle_configure_await setting
- EditorConfig: Fix invalid format for expression_bodied_operators
  (was true:when_on_single_line, now when_on_single_line:silent)
- EditorConfig: Remove stale TODO comment (investigation was completed)
- .syncignore: Replace hardcoded project-specific .idea paths with
  generic glob patterns
- add_context_menu.reg: Fix cmd.exe quoting (remove extra outer quotes),
  fix %v to %V for background context menu, add note about icon paths
- README: Fix broken relative links in sample-solutions subdirectory

Refs: #5

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@bito-code-review
Copy link
Copy Markdown

bito-code-review Bot commented Mar 29, 2026

Code Review Agent Run #fee752

Actionable Suggestions - 0
Review Details
  • Files reviewed - 3 · Commit Range: c9e3510..dcd3e77
    • .syncignore
    • editor-config/editorconfig-hierarchy/library-repository/using-shared-root-file.editorconfig
    • scripts/add_context_menu.reg
  • Files skipped - 2
    • repository-config/resharper/file-layout-current-visual-studio-resharper.xml - Reason: Filter setting
    • repository-config/sample-solutions/libs-and-console-app/README.md - Reason: Filter setting
  • Tools
    • Whispers (Secret Scanner) - ✔︎ Successful
    • Detect-secrets (Secret Scanner) - ✔︎ Successful

Bito Usage Guide

Commands

Type the following command in the pull request comment and save the comment.

  • /review - Manually triggers a full AI review.

  • /pause - Pauses automatic reviews on this pull request.

  • /resume - Resumes automatic reviews.

  • /resolve - Marks all Bito-posted review comments as resolved.

  • /abort - Cancels all in-progress reviews.

Refer to the documentation for additional commands.

Configuration

This repository uses Default Agent You can customize the agent settings here or contact your Bito workspace admin at kris@ploch.dev.

Documentation & Help

AI Code Review powered by Bito Logo

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL This PR changes 1000+ lines, ignoring generated files

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Dependency version bumps, editorconfig fixes, and repository config updates

1 participant