Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@ jobs:
shell: pwsh
run: ./scripts/Verify-SolutionStructure.ps1
- name: Restore
run: dotnet restore ChessRealms.ChessEngine.slnx --locked-mode
run: dotnet restore ChessRealms.Engine.slnx --locked-mode
- name: Release build
run: dotnet build ChessRealms.ChessEngine.slnx --configuration Release --no-restore
run: dotnet build ChessRealms.Engine.slnx --configuration Release --no-restore
- name: Fast tests
run: dotnet test ChessRealms.ChessEngine.slnx --configuration Release --no-build --filter "TestCategory!=Deep"
run: dotnet test ChessRealms.Engine.slnx --configuration Release --no-build --filter "TestCategory!=Deep"
12 changes: 6 additions & 6 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,10 @@ Run these commands from the repository root:

```sh
pwsh -NoProfile -File scripts/Verify-SolutionStructure.ps1
dotnet sln ChessRealms.ChessEngine.slnx list
dotnet restore ChessRealms.ChessEngine.slnx --locked-mode
dotnet build ChessRealms.ChessEngine.slnx -c Release --no-restore
dotnet test ChessRealms.ChessEngine.slnx -c Release --no-build --filter "TestCategory!=Deep"
dotnet sln ChessRealms.Engine.slnx list
dotnet restore ChessRealms.Engine.slnx --locked-mode
dotnet build ChessRealms.Engine.slnx -c Release --no-restore
dotnet test ChessRealms.Engine.slnx -c Release --no-build --filter "TestCategory!=Deep"
git diff --check
```

Expand All @@ -30,7 +30,7 @@ local results; do not infer a CI, Linux, or Visual Studio pass from them.

## Repository and solution structure

- `ChessRealms.ChessEngine.slnx`: the root solution in XML `.slnx` format.
- `ChessRealms.Engine.slnx`: the root solution in XML `.slnx` format.
- `src/`: six projects (engine, tests, console, perft runner, benchmarks, and
magic-number search). Each project stays in its own physical directory.
- `docs/`: API documentation, support boundaries, and historical validation records.
Expand Down Expand Up @@ -76,7 +76,7 @@ the root and do not need entries in `docs`.
## Namespaces and project names

`ChessRealms` is the organization prefix, matching the configured GitHub origin
`ChessRealms/ChessEngine`. `ChessRealms.ChessEngine` identifies the library;
`ChessRealms/Engine`. `ChessRealms.Engine` identifies the library;
suffixes such as `.Tests`, `.Console`, `.Perft`, and `.Benchmark` identify related
projects by purpose. `ChessRealms.MagicBruteforce` is a supporting tool under the
same organization. This follows the
Expand Down
19 changes: 0 additions & 19 deletions ChessRealms.ChessEngine.slnx

This file was deleted.

34 changes: 34 additions & 0 deletions ChessRealms.Engine.slnx
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
<Solution>
<Folder Name="/docs/" Id="a576d511-a7dd-48da-89d2-a534742656e6">
<File Path="docs/dotnet-10-migration.md" />
<File Path="docs/game-rules-api.md" />
<File Path="docs/game-rules-validation.md" />
<File Path="docs/known-issues.md" />
</Folder>
<Folder Name="/scripts/" Id="9f3eeaa3-c0d2-4d93-af81-f93234779361">
<File Path="scripts/Verify-SolutionStructure.ps1" />
</Folder>
<Folder Name="/Solution Items/">
<File Path=".editorconfig" />
<File Path=".gitattributes" />
<File Path=".gitignore" />
<File Path="AGENTS.md" />
<File Path="CONTRIBUTING.md" />
<File Path="Directory.Build.props" />
<File Path="global.json" />
<File Path="LICENSE.txt" />
<File Path="README.md" />
</Folder>
<Folder Name="/Solution Items/.github/" />
<Folder Name="/Solution Items/.github/workflows/">
<File Path=".github/workflows/ci.yml" />
</Folder>
<Folder Name="/src/" Id="7cc56138-8080-42ef-beb6-c075dac09fd8">
<Project Path="src/ChessRealms.Engine.Benchmark/ChessRealms.Engine.Benchmark.csproj" />
<Project Path="src/ChessRealms.Engine.Console/ChessRealms.Engine.Console.csproj" />
<Project Path="src/ChessRealms.Engine.Perft/ChessRealms.Engine.Perft.csproj" />
<Project Path="src/ChessRealms.Engine.Tests/ChessRealms.Engine.Tests.csproj" />
<Project Path="src/ChessRealms.Engine/ChessRealms.Engine.csproj" />
<Project Path="src/ChessRealms.MagicBruteforce/ChessRealms.MagicBruteforce.csproj" Id="5c55e3ca-2541-4ea4-b4b6-3c5aae87fb9d" />
</Folder>
</Solution>
22 changes: 11 additions & 11 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# ChessEngine
# Engine

Chess engine with bitboard representation. The core library has no external package
dependencies. All six projects target .NET 10.
Expand All @@ -15,9 +15,9 @@ Run from the repository root:
```sh
dotnet --version
pwsh -NoProfile -File scripts/Verify-SolutionStructure.ps1
dotnet restore ChessRealms.ChessEngine.slnx --locked-mode
dotnet build ChessRealms.ChessEngine.slnx --configuration Release --no-restore
dotnet test ChessRealms.ChessEngine.slnx --configuration Release --no-build --filter "TestCategory!=Deep"
dotnet restore ChessRealms.Engine.slnx --locked-mode
dotnet build ChessRealms.Engine.slnx --configuration Release --no-restore
dotnet test ChessRealms.Engine.slnx --configuration Release --no-build --filter "TestCategory!=Deep"
```

For the ordinary developer loop, run `dotnet test` from the repository root.
Expand All @@ -29,7 +29,7 @@ The existing filters and NUnit `Explicit` behavior are unchanged.
Committed `packages.lock.json` files pin direct and transitive package versions
and content hashes. CI uses `--locked-mode` to reject dependency drift. When
intentionally updating packages, run
`dotnet restore ChessRealms.ChessEngine.slnx --force-evaluate`, review the
`dotnet restore ChessRealms.Engine.slnx --force-evaluate`, review the
lock-file changes, and repeat the checks above. When updating the SDK, update
`global.json` and this README together, then regenerate/review the lock files with
that SDK. Restore requires access to NuGet.org or a cache containing the locked packages.
Expand All @@ -46,7 +46,7 @@ that SDK. Restore requires access to NuGet.org or a cache containing the locked
opt-in for cost, not failing tests being suppressed. Select them explicitly:

```sh
dotnet test ChessRealms.ChessEngine.slnx --configuration Release --no-build --filter "TestCategory=Deep"
dotnet test ChessRealms.Engine.slnx --configuration Release --no-build --filter "TestCategory=Deep"
```

Run both test commands after the Release build, which compiles all tests. Tests,
Expand All @@ -61,18 +61,18 @@ that either GitHub Actions job has passed.
Optional coverage check using the existing VSTest collector:

```sh
dotnet test ChessRealms.ChessEngine.slnx -c Release --no-build --filter "TestCategory!=Deep" --collect:"XPlat Code Coverage"
dotnet test ChessRealms.Engine.slnx -c Release --no-build --filter "TestCategory!=Deep" --collect:"XPlat Code Coverage"
```

### Tool smoke checks

After the Release build, run from the repository root:

```sh
dotnet run --project src/ChessRealms.ChessEngine.Perft -c Release --no-build
dotnet run --project src/ChessRealms.Engine.Perft -c Release --no-build
dotnet run --project src/ChessRealms.MagicBruteforce -c Release --no-build --no-launch-profile -- 42 1
dotnet run --project src/ChessRealms.ChessEngine.Benchmark -c Release --no-build -- --job Dry --inProcess --filter "*StartPos_Depth_6*" --wakeLock None
dotnet run --project src/ChessRealms.ChessEngine.Console -c Release --no-build
dotnet run --project src/ChessRealms.Engine.Benchmark -c Release --no-build -- --job Dry --inProcess --filter "*StartPos_Depth_6*" --wakeLock None
dotnet run --project src/ChessRealms.Engine.Console -c Release --no-build
```

Perft runs the initial position at depth 6: expect **119,060,324 nodes**.
Expand Down Expand Up @@ -139,7 +139,7 @@ See [the complete API guide](docs/game-rules-api.md) for contracts, FEN validati
FIDE draw rules, compatibility changes and exact dead-position detection limits.

```csharp
using ChessRealms.ChessEngine;
using ChessRealms.Engine;

var game = new ChessGame();
var moves = game.GetLegalMoves(); // read-only snapshot, initially 20
Expand Down
2 changes: 1 addition & 1 deletion docs/dotnet-10-migration.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# .NET 10 migration

> Repository organization note: the solution now lives at the repository root
> as `ChessRealms.ChessEngine.slnx`.
> as `ChessRealms.Engine.slnx`.
> Commands and results below preserve the paths used at the time of validation.
> See [CONTRIBUTING.md](../CONTRIBUTING.md) for current commands.

Expand Down
4 changes: 2 additions & 2 deletions docs/game-rules-api.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ is rejected when promotion is required. There is no implicit queen. A suffix on
an ordinary move, e.g. `e2e4q`, is also rejected by the game.

```csharp
using ChessRealms.ChessEngine;
using ChessRealms.Engine;

var game = new ChessGame();
var legalMoves = game.GetLegalMoves(); // read-only snapshot, initially 20
Expand Down Expand Up @@ -121,7 +121,7 @@ not a history/outcome serialization format.
## FEN import and export

```csharp
using ChessRealms.ChessEngine.Parsing;
using ChessRealms.Engine.Parsing;

if (ChessGame.TryCreateFromFen("7k/P7/8/8/8/8/8/7K w - - 0 1", out var promotionGame))
{
Expand Down
10 changes: 5 additions & 5 deletions docs/game-rules-validation.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# Game-rules validation — 2026-09-10

> Repository organization note: the solution now lives at the repository root
> as `ChessRealms.ChessEngine.slnx`.
> as `ChessRealms.Engine.slnx`.
> Commands and results below preserve the paths used at the time of validation.
> See [CONTRIBUTING.md](../CONTRIBUTING.md) for current commands.

Expand All @@ -14,10 +14,10 @@ Local environment: Windows, .NET SDK **10.0.401**, Release configuration.

| Check | Result |
| --- | --- |
| `dotnet restore src/ChessRealms.ChessEngine.sln --locked-mode` | Passed; no lock-file changes |
| `dotnet build src/ChessRealms.ChessEngine.sln -c Release --no-restore` | Passed; all six projects, 0 warnings, 0 errors |
| `dotnet test src/ChessRealms.ChessEngine.sln -c Release --no-build --filter "TestCategory!=Deep"` | 1010 passed, 0 failed, 0 skipped |
| `dotnet test src/ChessRealms.ChessEngine.sln -c Release --no-build --filter "TestCategory=Deep"` | 16 passed, 0 failed, 0 skipped; 29 seconds |
| `dotnet restore src/ChessRealms.Engine.sln --locked-mode` | Passed; no lock-file changes |
| `dotnet build src/ChessRealms.Engine.sln -c Release --no-restore` | Passed; all six projects, 0 warnings, 0 errors |
| `dotnet test src/ChessRealms.Engine.sln -c Release --no-build --filter "TestCategory!=Deep"` | 1010 passed, 0 failed, 0 skipped |
| `dotnet test src/ChessRealms.Engine.sln -c Release --no-build --filter "TestCategory=Deep"` | 16 passed, 0 failed, 0 skipped; 29 seconds |
| Console scripted smoke | Passed: legal moves, invalid draw claim, Fool's Mate, explicit Black winner, terminal rejection, undo, exact FEN |
| `git diff --check` | Passed |

Expand Down
Loading
Loading