diff --git a/AGENTS.md b/AGENTS.md index 451ea7c..3be9caa 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -7,6 +7,8 @@ This file is the root harness for coding agents working on Radial Actions. Keep - `RadialActions.sln` is the entry point. - `RadialActions/` contains the WPF desktop app targeting `net10.0-windows`. - `RadialActions.Tests/` contains xUnit v3 tests for deterministic behavior. +- Production code is grouped by ownership: `Actions/`, `Hotkeys/`, `Interop/`, `Pie/`, `Services/`, `Settings/`, and `Properties/`. +- Tests mirror the production ownership folders where practical. - `.github/actions/full-build/action.yml` defines the CI build: `dotnet build`, `dotnet test`, publish x64/arm64 binaries, zip them, and build MSI installers. - `Package.wxs` defines the MSI packaging shape. - `Settings.XamlStyler` is the XAML style configuration. @@ -43,7 +45,10 @@ For documentation-only changes, explain why build or test commands were skipped. ## Architecture Boundaries - Keep app code in the `RadialActions` namespace unless there is a strong reason to introduce a narrower namespace. -- `RadialActions/Data/` holds action, hotkey, conversion, and Windows interop helpers. Keep parsing and validation logic pure where possible so it can be tested without global hooks or shell execution. +- `RadialActions/Actions/` holds action models, defaults, and execution helpers. User-configured actions must not run during tests, settings load, preview rendering, or validation. +- `RadialActions/Hotkeys/` holds hotkey parsing, validation, registration, and service glue. Keep parsing and validation logic pure where possible so it can be tested without global hooks. +- `RadialActions/Interop/` holds WPF conversion helpers and narrow Windows/WPF interop utilities. +- `RadialActions/Settings/` holds settings views and view models. Reusable action or hotkey behavior belongs in its owning folder rather than in Settings. - `RadialActions/Services/` holds application services such as tray, hotkey, menu, and updates. Keep OS side effects isolated here or behind small helpers. - `RadialActions/Pie/` owns radial menu layout, rendering state, visual construction, and theme snapshots. Deterministic geometry belongs in `PieLayoutCalculator` or a similarly testable helper. - `RadialActions/Properties/Settings*.cs` owns persisted settings. When adding persisted fields, handle missing, null, or old values in normalization and cover serialization behavior in tests. diff --git a/RadialActions.Tests/ActionDefaultsServiceTests.cs b/RadialActions.Tests/Actions/ActionDefaultsServiceTests.cs similarity index 100% rename from RadialActions.Tests/ActionDefaultsServiceTests.cs rename to RadialActions.Tests/Actions/ActionDefaultsServiceTests.cs diff --git a/RadialActions.Tests/ActionsSettingsViewModelTests.cs b/RadialActions.Tests/Actions/ActionsSettingsViewModelTests.cs similarity index 100% rename from RadialActions.Tests/ActionsSettingsViewModelTests.cs rename to RadialActions.Tests/Actions/ActionsSettingsViewModelTests.cs diff --git a/RadialActions.Tests/PieActionTests.cs b/RadialActions.Tests/Actions/PieActionTests.cs similarity index 100% rename from RadialActions.Tests/PieActionTests.cs rename to RadialActions.Tests/Actions/PieActionTests.cs diff --git a/RadialActions.Tests/ShellActionDefaultsTests.cs b/RadialActions.Tests/Actions/ShellActionDefaultsTests.cs similarity index 100% rename from RadialActions.Tests/ShellActionDefaultsTests.cs rename to RadialActions.Tests/Actions/ShellActionDefaultsTests.cs diff --git a/RadialActions.Tests/HotkeyUtilTests.cs b/RadialActions.Tests/Hotkeys/HotkeyUtilTests.cs similarity index 100% rename from RadialActions.Tests/HotkeyUtilTests.cs rename to RadialActions.Tests/Hotkeys/HotkeyUtilTests.cs diff --git a/RadialActions.Tests/WpfUtilTests.cs b/RadialActions.Tests/Interop/WpfUtilTests.cs similarity index 100% rename from RadialActions.Tests/WpfUtilTests.cs rename to RadialActions.Tests/Interop/WpfUtilTests.cs diff --git a/RadialActions.Tests/PieSelectionControllerTests.cs b/RadialActions.Tests/Pie/PieSelectionControllerTests.cs similarity index 100% rename from RadialActions.Tests/PieSelectionControllerTests.cs rename to RadialActions.Tests/Pie/PieSelectionControllerTests.cs diff --git a/RadialActions.Tests/UpdateServiceTests.cs b/RadialActions.Tests/Services/UpdateServiceTests.cs similarity index 100% rename from RadialActions.Tests/UpdateServiceTests.cs rename to RadialActions.Tests/Services/UpdateServiceTests.cs diff --git a/RadialActions.Tests/SettingsSerializationTests.cs b/RadialActions.Tests/Settings/SettingsSerializationTests.cs similarity index 100% rename from RadialActions.Tests/SettingsSerializationTests.cs rename to RadialActions.Tests/Settings/SettingsSerializationTests.cs diff --git a/RadialActions/Data/Action.cs b/RadialActions/Actions/Action.cs similarity index 100% rename from RadialActions/Data/Action.cs rename to RadialActions/Actions/Action.cs diff --git a/RadialActions/Settings/ActionDefaultsService.cs b/RadialActions/Actions/ActionDefaultsService.cs similarity index 100% rename from RadialActions/Settings/ActionDefaultsService.cs rename to RadialActions/Actions/ActionDefaultsService.cs diff --git a/RadialActions/Data/ActionUtil.cs b/RadialActions/Actions/ActionUtil.cs similarity index 100% rename from RadialActions/Data/ActionUtil.cs rename to RadialActions/Actions/ActionUtil.cs diff --git a/RadialActions/Settings/ShellActionDefaults.cs b/RadialActions/Actions/ShellActionDefaults.cs similarity index 100% rename from RadialActions/Settings/ShellActionDefaults.cs rename to RadialActions/Actions/ShellActionDefaults.cs diff --git a/RadialActions/Data/HotkeyManager.cs b/RadialActions/Hotkeys/HotkeyManager.cs similarity index 100% rename from RadialActions/Data/HotkeyManager.cs rename to RadialActions/Hotkeys/HotkeyManager.cs diff --git a/RadialActions/Data/HotkeyUtil.cs b/RadialActions/Hotkeys/HotkeyUtil.cs similarity index 100% rename from RadialActions/Data/HotkeyUtil.cs rename to RadialActions/Hotkeys/HotkeyUtil.cs diff --git a/RadialActions/Data/Converters.cs b/RadialActions/Interop/Converters.cs similarity index 100% rename from RadialActions/Data/Converters.cs rename to RadialActions/Interop/Converters.cs diff --git a/RadialActions/Data/WpfUtil.cs b/RadialActions/Interop/WpfUtil.cs similarity index 100% rename from RadialActions/Data/WpfUtil.cs rename to RadialActions/Interop/WpfUtil.cs