Operations
Build
dotnet build .\AptDiskwright.slnx -c Release
cmake -S .\engine -B .\engine\build
cmake --build .\engine\build --config Release
Test
Tests are non-destructive by contract — they run against disposable VHD/VHDX fixtures and must never select a physical disk:
$env:APTDISKWRIGHT_TEST_ENGINE = "$PWD\engine\build\Release\AptDiskwrightEngine.exe"
dotnet run --project .\AptDiskwright.Tests\AptDiskwright.Tests.csproj -c Release
Per the analyzer's evidence, the current build passes 7/7 non-destructive tests.
Run the client
dotnet run --project .\AptDiskwright.vbproj
The client runs unelevated. Privileged operations only happen through the named-pipe connection to the engine service.
Safety boundaries (from AGENTS.md, verbatim rules)
- Never identify a destructive target by drive letter alone.
- Never bypass preview, refreshed inventory, validation, and explicit confirmation.
- Keep the WPF client unelevated; privileged operations stay behind the authenticated named-pipe service.
- Automated tests must use disposable VHD/VHDX fixtures and must never select a physical disk.
- Physical-disk mutation and live migration remain disabled until disposable-VHD and bootable-VM qualification is complete.
- Plans and evidence live under
%ProgramData%\Aptlantis\AptDiskwright.
Installer / release bundling
.\installer\build-release.ps1
Assembles a release bundle and produces SHA256SUMS.txt. If a certificate thumbprint is supplied, build-release.ps1 can sign artifacts; otherwise an unsigned-artifact warning is emitted. install-engine.ps1 and uninstall-engine.ps1 handle installing/removing the privileged Windows service — this requires elevation.
Data locations
All plans, inventory snapshots, and execution session/checkpoint records are written as atomic, durable JSON under:
%ProgramData%\Aptlantis\AptDiskwright\
plans/ <-- schema-versioned plan JSON manifests
inventory/ <-- inventory snapshot JSON
sessions/ <-- execution session + checkpoint JSON