From 5ddd1b8ec8d7d2cb1e01ce59f979baed4d2b694b Mon Sep 17 00:00:00 2001 From: Frank Tovar Date: Mon, 11 May 2026 21:51:18 +0200 Subject: [PATCH] Cleanup --- .editorconfig | 1 + TASKS.md | 63 ------------------- .../LevelEditor.cs | 2 +- .../Systems/SurfaceInteractionSystem.cs | 36 +++++------ src/ReactorMaintenance.Win2D/MainWindow.xaml | 11 ++-- .../MainWindow.xaml.cs | 6 +- 6 files changed, 30 insertions(+), 89 deletions(-) diff --git a/.editorconfig b/.editorconfig index db68279..00f01cd 100644 --- a/.editorconfig +++ b/.editorconfig @@ -23,6 +23,7 @@ dotnet_sort_system_directives_first = false file_header_template = # this. and Me. preferences + dotnet_style_qualification_for_event = false:suggestion dotnet_style_qualification_for_field = false:suggestion dotnet_style_qualification_for_method = false:suggestion diff --git a/TASKS.md b/TASKS.md index 3a6e186..f21233e 100644 --- a/TASKS.md +++ b/TASKS.md @@ -2,71 +2,8 @@ ## Current State -- Branch: `design-rewrite` -- Scope approved: implement `docs/design.md` end-to-end with deterministic defaults and no backward compatibility. -- Simulation core has been replaced with the first design-native model and deterministic engine slice. -- Simulation and test projects now target `net10.0` because this Linux environment only has the .NET 10 runtime. -- Win2D editor has been rewritten against the new design model. -- Win2D project now targets `net10.0-windows10.0.19041.0` to match the simulation project. -- Linux can restore and compile the referenced simulation project, but full WinUI/XAML compilation still requires a Windows-capable XAML compiler environment. - ## Completed Work -- Read project instructions, Linux instructions, code style, and `docs/design.md`. -- Confirmed deterministic balance defaults should be chosen during implementation. -- Confirmed a full Win2D editor is required. -- Created branch `design-rewrite`. -- Added `TASKS.md` as the required per-commit work tracker. -- Removed the legacy integer hazard/effect/hazard plug-in simulation surface. -- Added design-native terrain, underground carrier layers, surface hazards, props, leaks, doors, reactor bindings, robot inventory, rule events, validation, serialization, and forecasts. -- Added deterministic default balancing values. -- Added a first deterministic simulation pipeline for network propagation, consumers, leaks, surface interactions, robot safety, reactor readiness, rule events, and forecasts. -- Replaced old tests with design-based simulation tests. -- Verified `dotnet test tests/ReactorMaintenance.Simulation.Tests/ReactorMaintenance.Simulation.Tests.csproj` passes: 11 passed. -- Attempted `dotnet jb cleanupcode --build=False ...`; unavailable in this environment because `dotnet-jb` is not installed. -- Reviewed the first slice and fixed an action-resolution maintainability issue before commit. -- Verified `git diff --check` reports no whitespace errors. -- Ran `dotnet jb cleanupcode --build=False ...` successfully after ReSharper install and normalized line endings back to LF. -- Reworked the Win2D editor for the new model: full tool list, layer-aware painting, terrain, underground carriers, surface hazards, props, doors, leaks, robot, forecasts, save validation, starter level, and simple play actions. -- Removed old editor dependencies on legacy props, pressure pipes, smoke, fire, and global power/cooling/core-stability fields. -- Verified `dotnet test tests/ReactorMaintenance.Simulation.Tests/ReactorMaintenance.Simulation.Tests.csproj` passes after the editor rewrite: 11 passed. -- Attempted Win2D build on Linux with `dotnet build src/ReactorMaintenance.Win2D/ReactorMaintenance.Win2D.csproj -p:EnableWindowsTargeting=true -p:Platform=x64`; it fails at Windows `XamlCompiler.exe` with exec format error. -- Attempted managed XAML compiler path with `-p:UseXamlCompilerExecutable=false`; it fails loading the WinUI XAML compiler task dependency under this Linux/.NET 10 setup. -- Updated `README.md` for the new design-model editor, .NET 10 target, and Linux/Windows build expectations. -- Committed the Win2D editor rewrite slice. -- Added branch-aware junction flow analysis shared by validation and simulation propagation. -- Junction validation now rejects malformed branch counts and ambiguous source-side branches. -- Junction propagation now applies deterministic T-junction and cross-junction ratio weights only to inferred outgoing branches. -- Added tests for T-junction ratio splits, zero-weight branches, ambiguous junction validation, and best-path flow into non-junction cells. -- Verified `dotnet test tests/ReactorMaintenance.Simulation.Tests/ReactorMaintenance.Simulation.Tests.csproj` passes: 15 passed. -- Ran `jb cleanupcode --build=False ...` and `python D:\Code\crlf.py ...` for touched C# files after the junction slice. -- Expanded rule predicates with reactor readiness/loss/win, network value bands, and robot inventory checks. -- Expanded rule effects with removal of surface hazards, heat, and inventory, plus authored access positions for leak-start effects. -- Hardened rule event validation for predicate targets, effect targets, leak access, and non-negative amount effects. -- Added tests for network-band rules, reactor-ready rules, inventory rules, removal effects, electricity leak access, and invalid rule targets. -- Verified `dotnet test tests/ReactorMaintenance.Simulation.Tests/ReactorMaintenance.Simulation.Tests.csproj` passes after the rule slice: 21 passed. -- Ran `jb cleanupcode --build=False ...` and `python D:\Code\crlf.py ...` for touched C# files after the rule slice. -- Split serializable simulation records and enums from the monolithic `Models.cs` file into individual files under `Models`. -- Moved level creation, grid mutation helpers, surface clamping, grid geometry, and inventory operations out of serializable model records. -- Replaced separate T-junction and cross-junction props/tools with one topology-inferred `Junction` prop and one editor tool. -- Moved junction ratio presets into balancing data. -- Replaced hardcoded `EPairEffect` variants with parameterized surface interaction verbs and balance-owned magnitudes. -- Temporarily introduced and then removed a public `SimulationEngine` facade after review showed it was pure delegation. -- Updated design documentation for generic junctions and parameterized surface interactions. -- Removed the temporary `SimulationCoreSystem` catch-all and made `SimulationEngine` the real orchestration point. -- Split simulation behavior into purposeful systems for player actions, network propagation, consumers, leaks, surface interactions, robot safety, reactors, rule events, and forecasts. -- Kept `Systems` limited to behavior-owning systems; shared traversal, band, and carrier math helpers live at the simulation root. -- Replaced carrier-specific editor enum entries with parameterized editor commands. -- Added explicit editor workflows for door edge selection, electricity wall leak access-face selection, reactor consumer binding, and basic rule event authoring. -- Added editor operation tests plus broader junction validation and serialization round-trip coverage. -- Verified `dotnet test tests\ReactorMaintenance.Simulation.Tests\ReactorMaintenance.Simulation.Tests.csproj` passes: 27 passed. -- Verified `dotnet build src\ReactorMaintenance.Win2D\ReactorMaintenance.Win2D.csproj -p:Platform=x64 -p:EnableWindowsTargeting=true` succeeds on Windows. -- Ran `jb cleanupcode --build=False ...` and `python D:\Code\crlf.py ...` for touched files in the final rewrite slice. - ## Current Work -- Rewrite task list completed on `design-rewrite`. - ## Future Work - -No known rewrite tasks remain. diff --git a/src/ReactorMaintenance.Simulation/LevelEditor.cs b/src/ReactorMaintenance.Simulation/LevelEditor.cs index c156749..18f747c 100644 --- a/src/ReactorMaintenance.Simulation/LevelEditor.cs +++ b/src/ReactorMaintenance.Simulation/LevelEditor.cs @@ -144,7 +144,7 @@ public static class LevelEditor private static bool SameDoorEdge(DoorState door, GridPosition a, GridPosition b) { - return door.A == a && door.B == b || door.A == b && door.B == a; + return (door.A == a && door.B == b) || (door.A == b && door.B == a); } private static ReactorBinding BindConsumer(ReactorBinding reactor, ECarrierType carrier, GridPosition consumerPosition) diff --git a/src/ReactorMaintenance.Simulation/Systems/SurfaceInteractionSystem.cs b/src/ReactorMaintenance.Simulation/Systems/SurfaceInteractionSystem.cs index 4ee5d58..9a71967 100644 --- a/src/ReactorMaintenance.Simulation/Systems/SurfaceInteractionSystem.cs +++ b/src/ReactorMaintenance.Simulation/Systems/SurfaceInteractionSystem.cs @@ -2,6 +2,24 @@ internal static class SurfaceInteractionSystem { + private sealed class SurfaceDelta + { + public SurfaceState Apply(SurfaceState surface) + { + return surface with { + Fuel = surface.Fuel + Fuel, + Coolant = surface.Coolant + Coolant, + Electricity = surface.Electricity + Electricity, + Heat = surface.Heat + Heat + }; + } + + public float Fuel { get; set; } + public float Coolant { get; set; } + public float Electricity { get; set; } + public float Heat { get; set; } + } + public static LevelState Resolve(LevelState level) { var deltas = Enumerable.Range(0, level.Width * level.Height).Select(_ => new SurfaceDelta()).ToArray(); @@ -114,22 +132,4 @@ internal static class SurfaceInteractionSystem break; } } - - private sealed class SurfaceDelta - { - public SurfaceState Apply(SurfaceState surface) - { - return surface with { - Fuel = surface.Fuel + Fuel, - Coolant = surface.Coolant + Coolant, - Electricity = surface.Electricity + Electricity, - Heat = surface.Heat + Heat - }; - } - - public float Fuel { get; set; } - public float Coolant { get; set; } - public float Electricity { get; set; } - public float Heat { get; set; } - } } \ No newline at end of file diff --git a/src/ReactorMaintenance.Win2D/MainWindow.xaml b/src/ReactorMaintenance.Win2D/MainWindow.xaml index 07ceeae..a9c5a0a 100644 --- a/src/ReactorMaintenance.Win2D/MainWindow.xaml +++ b/src/ReactorMaintenance.Win2D/MainWindow.xaml @@ -108,8 +108,10 @@