PASS Virtual manifest-derived location 0
PASS Virtual Steam build version 1
PASS App list is not required to contain Valheim 2
PASS Virtual manifest-derived location 3
PASS Virtual Steam build version 4
PASS App list is not required to contain Valheim 5
PASS Virtual manifest-derived location 6
PASS Virtual Steam build version 7
PASS App list is not required to contain Valheim 8
PASS Virtual manifest-derived location 9
PASS Virtual Steam build version 10
PASS App list is not required to contain Valheim 11
PASS All configured libraries discovered
PASS Multiple valid installations are retained for selection
PASS Valheim missing
PASS No Steam roots yields empty discovery
PASS Wrong manifest AppID rejected
PASS Manifest path traversal rejected
PASS Invalid game structure rejected after manifest lookup
PASS Legacy numeric-string libraries supported
PASS Libraries deduplicated without case sensitivity
PASS Network share roots rejected before I/O
PASS Relative and drive-relative roots rejected
PASS VDF escaped Windows backslashes
PASS VDF escaped quotes
PASS VDF Unicode and nested objects
PASS VDF unterminated quote rejected
PASS VDF missing closing brace rejected
PASS VDF unexpected brace rejected
PASS VDF nesting limit
PASS Unsafe manifest directory rejected: ..
PASS Unsafe manifest directory rejected: .
PASS Unsafe manifest directory rejected: ../elsewhere
PASS Unsafe manifest directory rejected: C:\Other
PASS Unsafe manifest directory rejected: folder/child
PASS Unsafe manifest directory rejected: folder:stream
PASS Unsafe manifest directory rejected: 
PASS Fresh engine plan has correct plugin path
PASS Dry plan performs no plugin write
PASS Plugin bytes installed correctly
PASS Manifest records ownership, component, version and hash
PASS Manifest paths are relative
PASS Other file preserved during install: BepInEx/plugins/AnotherMod/Other.dll
PASS Other file preserved during install: BepInEx/config/another.cfg
PASS Other file preserved during install: worlds/world.db
PASS Other file preserved during install: BepInEx/core/shared.dll
PASS Reinstall keeps identical owned files
PASS Repair identifies missing plugin
PASS Repair restores missing plugin
PASS Upgrade plans backup before replacement
PASS Upgrade preserves previous ownership for omitted files
PASS Upgrade creates local backup
PASS Uninstall dry run performs no deletion
PASS Uninstall removes owned plugin
PASS Uninstall removes owned documentation
PASS Other file preserved during uninstall: BepInEx/plugins/AnotherMod/Other.dll
PASS Other file preserved during uninstall: BepInEx/config/another.cfg
PASS Other file preserved during uninstall: worlds/world.db
PASS Other file preserved during uninstall: BepInEx/core/shared.dll
PASS Backups are retained
PASS Unowned destination conflict blocks replacement
PASS Identical preexisting unowned file reused
PASS Uninstall preserves preexisting reused plugin
PASS Modified project file preserved on uninstall
PASS Repair backup restores user-modified project file on uninstall
PASS Injected failure interrupts install
PASS Failed install rolls back all created payload files
PASS Failed install does not commit a manifest
PASS Failed upgrade rolls back replaced files
PASS Rollback restores previous plugin bytes
PASS Rollback preserves previous manifest
PASS File changes after review invalidate approved plan
PASS Unexpected shared dependency replacement rejected
PASS Duplicate payload destinations rejected
PASS Unsafe payload path rejected: ../escape
PASS Unsafe payload path rejected: ..\escape
PASS Unsafe payload path rejected: C:\outside
PASS Unsafe payload path rejected: file:stream
PASS Unsafe payload path rejected: dir//file
PASS Unsafe payload path rejected: ./file
PASS Unsafe payload path rejected: dir/../file
PASS Unsafe payload path rejected: trailing./file
PASS Unsafe payload path rejected: dir /file
PASS Unsafe payload path rejected: CON
PASS Unsafe payload path rejected: dir/NUL.txt
PASS Unsafe payload path rejected: LPT1.cfg
PASS Safe path stays within root
PASS Forged ownership of unrelated file rejected
PASS Shared dependency cannot be manifest-owned
PASS Forged backup path rejected
PASS Invalid manually selected folder rejected
PASS Single executable is insufficient for game validation
PASS Manual network path rejected without access
PASS Missing runtime is detected for bundled installation
PASS Expert quality 25 allowed
PASS Expert quality 100 allowed
PASS Default expert maximum is 10000
PASS Normal mode rejects excessive quality
PASS Expert maximum is enforced
PASS Unsafe number rejected: NaN
PASS Unsafe number rejected: Infinity
PASS Unsafe number rejected: -Infinity
PASS Unsafe number rejected: 1e100
PASS Unsafe number rejected: -1
PASS Integer overflow rejected
PASS Unsafe linear item stat rejected
PASS Normal linear item stat preserved
PASS Saturating product avoids integer overflow
PASS Long-path test exceeds legacy Windows limit
PASS Install and upgrade work beyond 260 characters
PASS Uninstall works beyond 260 characters
RESULT: 111 passed; 0 failed.
All install/uninstall writes used temporary test directories. No live game files were changed.
