Responds to the review on #7020:
- IParity Create/Verify/Repair are now async (CancellationToken); the par2
runner uses WaitForExitAsync and awaits the output reads directly.
- Removed ParityBase; Par2Parity implements IParity directly.
- parity-redundancy-level is parsed via Utility.ParseIntOption and validated as
positive, and moved into the par2 module's own options. no-parity removed;
parity-module now defaults to empty (opt-in) and is the sole toggle.
- The availability probe and "not found" warning are per-instance; BackendManager
holds one shared parity instance per operation (SharedParityProvider), disposed
with the manager, instead of constructing one per volume.
- The download repair path guards on Blocks/Files volume type; a successful parity
repair now logs a warning; the test/verification flow disables repair
(allowParityRepair=false) so damage is reported rather than masked.
- Added a full backup -> corrupt -> detect -> restore/recover integration test.
- Fix: par2cmdline 0.8.1 aborts on single-character protected filenames, so the
working-copy base name is now "data" instead of "d". Verified end-to-end against
real par2 in a Linux container (all parity tests pass).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>