From 0acd6990b1d15a871d294443b5d26edaadb94596 Mon Sep 17 00:00:00 2001 From: Views2k <292889387+Views2k@users.noreply.github.com> Date: Wed, 21 Oct 2026 07:08:28 -0500 Subject: [PATCH 1/2] Target .NET 10 and bundle the 10.0.13 runtime Move every project to net10.0 or net10.0-windows, select SDK 10.0.402 in global.json, and pin the self-contained app and update helper to runtime 10.0.13. Regenerate the lockfiles with an audited restore: the trimmer package follows the runtime, and the framework now supplies System.Security.Principal.Windows to the test projects. Replace the bundled runtime notices with the 10.0.13 package files and update their hashes, packaging references, build paths and build guides. Rename a lambda parameter that C# 14 reads as the field keyword, and apply the .NET 10 formatter's whitespace changes so the full format check keeps passing. --- .gitattributes | 6 +- .github/workflows/ci.yml | 2 +- CONTRIBUTING.md | 2 +- ...txt => dotnet-runtime-10.0.13-LICENSE.txt} | 0 ...t-runtime-10.0.13-THIRD-PARTY-NOTICES.txt} | 258 ++++++++++++++---- ...indowsdesktop-runtime-10.0.13-LICENSE.txt} | 0 README.md | 2 +- THIRD-PARTY-NOTICES.md | 12 +- docs/DOTNET-10-MIGRATION.md | 5 +- docs/VALIDATION.md | 8 +- global.json | 2 +- installer/Build-Installer.ps1 | 2 +- .../Build-PrivateDiagnosticInstaller.ps1 | 28 +- src/Wisp.App/Clips/ClipBufferStore.cs | 10 +- .../Clips/RecorderThumbnailProvider.cs | 10 +- src/Wisp.App/FeatureTourBanner.xaml.cs | 1 + .../Supplementary/SupplementaryIncident.cs | 10 +- src/Wisp.App/Wisp.App.csproj | 10 +- src/Wisp.App/packages.lock.json | 4 +- src/Wisp.Core/Tunes/TuneModels.cs | 2 +- src/Wisp.Core/Wisp.Core.csproj | 2 +- src/Wisp.Core/packages.lock.json | 4 +- src/Wisp.Telemetry/Wisp.Telemetry.csproj | 2 +- src/Wisp.Telemetry/packages.lock.json | 4 +- src/Wisp.Update/Wisp.Update.csproj | 2 +- src/Wisp.Update/packages.lock.json | 4 +- src/Wisp.Updater/Wisp.Updater.csproj | 4 +- src/Wisp.Updater/packages.lock.json | 10 +- .../InstallerPackagingContractTests.cs | 4 +- .../PrivateLosslessPackagingTests.cs | 2 +- .../RunAlternativePlotsTests.cs | 2 +- tests/Wisp.App.Tests/Wisp.App.Tests.csproj | 2 +- tests/Wisp.App.Tests/packages.lock.json | 26 +- tests/Wisp.Core.Tests/Wisp.Core.Tests.csproj | 2 +- tests/Wisp.Core.Tests/packages.lock.json | 26 +- .../Wisp.Telemetry.Tests.csproj | 2 +- tests/Wisp.Telemetry.Tests/packages.lock.json | 26 +- .../Wisp.Update.Tests.csproj | 2 +- tests/Wisp.Update.Tests/packages.lock.json | 26 +- .../Wisp.Updater.Tests.csproj | 2 +- tests/Wisp.Updater.Tests/packages.lock.json | 26 +- .../Wisp.LosslessOfflineDecodeProbe.csproj | 2 +- .../packages.lock.json | 4 +- tools/Wisp.LosslessPlaybackProbe/README.md | 2 +- .../Wisp.LosslessPlaybackProbe.csproj | 2 +- .../packages.lock.json | 4 +- tools/Wisp.MpvOfflineDecodeProbe/README.md | 2 +- .../Wisp.MpvOfflineDecodeProbe.csproj | 2 +- .../packages.lock.json | 4 +- .../Wisp.SupplementaryContractProbe.csproj | 2 +- .../Wisp.SymbolCatalog.csproj | 2 +- tools/Wisp.SymbolCatalog/packages.lock.json | 4 +- tools/Wisp.UiReview/README.md | 2 +- tools/Wisp.UiReview/Wisp.UiReview.csproj | 2 +- tools/Wisp.UiReview/packages.lock.json | 4 +- 55 files changed, 325 insertions(+), 267 deletions(-) rename LICENSES/{dotnet-runtime-8.0.31-LICENSE.txt => dotnet-runtime-10.0.13-LICENSE.txt} (100%) rename LICENSES/{dotnet-runtime-8.0.31-THIRD-PARTY-NOTICES.txt => dotnet-runtime-10.0.13-THIRD-PARTY-NOTICES.txt} (83%) rename LICENSES/{windowsdesktop-runtime-8.0.31-LICENSE.txt => windowsdesktop-runtime-10.0.13-LICENSE.txt} (100%) diff --git a/.gitattributes b/.gitattributes index 55b29811..7deeb301 100644 --- a/.gitattributes +++ b/.gitattributes @@ -19,9 +19,9 @@ *.ps binary # Preserve authoritative runtime notice bytes exactly as published. -/LICENSES/dotnet-runtime-8.0.31-LICENSE.txt -text whitespace=cr-at-eol -/LICENSES/dotnet-runtime-8.0.31-THIRD-PARTY-NOTICES.txt -text whitespace=cr-at-eol -/LICENSES/windowsdesktop-runtime-8.0.31-LICENSE.txt -text whitespace=cr-at-eol +/LICENSES/dotnet-runtime-10.0.13-LICENSE.txt -text whitespace=cr-at-eol +/LICENSES/dotnet-runtime-10.0.13-THIRD-PARTY-NOTICES.txt -text whitespace=cr-at-eol +/LICENSES/windowsdesktop-runtime-10.0.13-LICENSE.txt -text whitespace=cr-at-eol # These upstream files are hash-verified and must retain original bytes/spacing. /LICENSES/LibVLCThirdParty/** -text -whitespace diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 33785b34..e97f7b51 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -234,7 +234,7 @@ jobs: $revision = (& git rev-parse HEAD).Trim() if ($LASTEXITCODE -ne 0 -or $revision -notmatch '^[0-9a-f]{40}$') { throw 'Exact source revision unavailable.' } dotnet run --project tools/Wisp.SymbolCatalog/Wisp.SymbolCatalog.csproj --configuration Release -- ` - src/Wisp.App/bin/Release/net8.0-windows/win-x64 outputs/Wisp-diagnostic-symbols.json $revision + src/Wisp.App/bin/Release/net10.0-windows/win-x64 outputs/Wisp-diagnostic-symbols.json $revision if ($LASTEXITCODE -ne 0) { throw 'Diagnostic symbol catalog export failed.' } $catalog = Get-Content -LiteralPath outputs/Wisp-diagnostic-symbols.json -Raw | ConvertFrom-Json if ($catalog.sourceRevision -cne $revision -or $catalog.sourceState -ne 'clean') { throw 'Diagnostic symbols do not identify the clean CI source.' } diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 98773200..8f870aaf 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -47,7 +47,7 @@ remain subject to the same review, validation, and merge-approval rules. ## Validation -Wisp requires Windows, the .NET 8 SDK selected by `global.json`, and Python +Wisp requires Windows, the .NET 10 SDK selected by `global.json`, and Python 3.12 or later. CI pins Python 3.14.7. Inno Setup 6 is required only for installer packaging. diff --git a/LICENSES/dotnet-runtime-8.0.31-LICENSE.txt b/LICENSES/dotnet-runtime-10.0.13-LICENSE.txt similarity index 100% rename from LICENSES/dotnet-runtime-8.0.31-LICENSE.txt rename to LICENSES/dotnet-runtime-10.0.13-LICENSE.txt diff --git a/LICENSES/dotnet-runtime-8.0.31-THIRD-PARTY-NOTICES.txt b/LICENSES/dotnet-runtime-10.0.13-THIRD-PARTY-NOTICES.txt similarity index 83% rename from LICENSES/dotnet-runtime-8.0.31-THIRD-PARTY-NOTICES.txt rename to LICENSES/dotnet-runtime-10.0.13-THIRD-PARTY-NOTICES.txt index 97f7f17e..0822dfb4 100644 --- a/LICENSES/dotnet-runtime-8.0.31-THIRD-PARTY-NOTICES.txt +++ b/LICENSES/dotnet-runtime-10.0.13-THIRD-PARTY-NOTICES.txt @@ -34,69 +34,100 @@ License notice for Unicode data https://www.unicode.org/license.html -Copyright © 1991-2022 Unicode, Inc. All rights reserved. +Copyright © 1991-2024 Unicode, Inc. All rights reserved. Distributed under the Terms of Use in https://www.unicode.org/copyright.html. -Permission is hereby granted, free of charge, to any person obtaining -a copy of the Unicode data files and any associated documentation -(the "Data Files") or Unicode software and any associated documentation -(the "Software") to deal in the Data Files or Software -without restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, and/or sell copies of -the Data Files or Software, and to permit persons to whom the Data Files -or Software are furnished to do so, provided that either -(a) this copyright and permission notice appear with all copies -of the Data Files or Software, or -(b) this copyright and permission notice appear in associated -Documentation. - -THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF -ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT OF THIRD PARTY RIGHTS. -IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS -NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL -DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THE DATA FILES OR SOFTWARE. - -Except as contained in this notice, the name of a copyright holder -shall not be used in advertising or otherwise to promote the sale, -use or other dealings in these Data Files or Software without prior -written authorization of the copyright holder. - -License notice for Zlib +Permission is hereby granted, free of charge, to any person obtaining a +copy of data files and any associated documentation (the "Data Files") or +software and any associated documentation (the "Software") to deal in the +Data Files or Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, and/or sell +copies of the Data Files or Software, and to permit persons to whom the +Data Files or Software are furnished to do so, provided that either (a) +this copyright and permission notice appear with all copies of the Data +Files or Software, or (b) this copyright and permission notice appear in +associated Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY +KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF +THIRD PARTY RIGHTS. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE +BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, +OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA +FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder shall +not be used in advertising or otherwise to promote the sale, use or other +dealings in these Data Files or Software without prior written +authorization of the copyright holder. + +License notice for zlib-ng ----------------------- -https://github.com/madler/zlib -https://zlib.net/zlib_license.html +https://github.com/zlib-ng/zlib-ng/blob/d54e3769be0c522015b784eca2af258b1c026107/LICENSE.md -/* zlib.h -- interface of the 'zlib' general purpose compression library - version 1.3.1, January 22nd, 2024 +(C) 1995-2024 Jean-loup Gailly and Mark Adler - Copyright (C) 1995-2022 Jean-loup Gailly and Mark Adler +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. +2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. - Jean-loup Gailly Mark Adler - jloup@gzip.org madler@alumni.caltech.edu +3. This notice may not be removed or altered from any source distribution. + +License notice for opentelemetry-dotnet +--------------------------------------- -*/ +https://github.com/open-telemetry/opentelemetry-dotnet/blob/805dd6b4abfa18ef2706d04c30d0ed28dbc2955e/LICENSE.TXT#L1 + +Apache License +Version 2.0, January 2004 +http://www.apache.org/licenses/ + +Copyright The OpenTelemetry Authors + + +License notice for LinuxTracepoints +----------------------------------- + +https://github.com/microsoft/LinuxTracepoints/blob/main/LICENSE + +Copyright (c) Microsoft Corporation. + +MIT License + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE License notice for Mono ------------------------------- @@ -480,8 +511,8 @@ Foundation, Inc., Hewlett-Packard Company, Microsoft, nor Digital Equipment Corporation makes any representations about the suitability of this software for any purpose." -License notice for The LLVM Compiler Infrastructure (Legacy License) --------------------------------------------------------------------- +License notice for The LLVM Compiler Infrastructure +--------------------------------------------------- Developed by: @@ -986,8 +1017,8 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -License notice for The LLVM Project ------------------------------------ +License for remote stack unwind (https://github.com/llvm/llvm-project/blob/main/lldb/source/Symbol/CompactUnwindInfo.cpp) +-------------------------------------- Copyright 2019 LLVM Project @@ -1270,3 +1301,118 @@ Licensed under the Apache License, Version 2.0. Available at https://github.com/SixLabors/ImageSharp/blob/f4f689ce67ecbcc35cebddba5aacb603e6d1068a/LICENSE + +License for the Teddy multi-substring searching implementation +-------------------------------------- + +https://github.com/BurntSushi/aho-corasick + +The MIT License (MIT) + +Copyright (c) 2015 Andrew Gallant + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +License notice for Avx512Vbmi base64 encoding / decoding +-------------------------------------------------------- + +Copyright (c) 2015-2018, Wojciech Muła +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +-------------------------------------------------------- + +Aspects of base64 encoding / decoding are based on algorithm described in "Base64 encoding and decoding at almost the speed of a memory +copy", Wojciech Muła and Daniel Lemire. https://arxiv.org/pdf/1910.05109.pdf + +License for FormatJS Intl.Segmenter grapheme segmentation algorithm +-------------------------------------------------------------------------- +Available at https://github.com/formatjs/formatjs/blob/58d6a7b398d776ca3d2726d72ae1573b65cc3bef/packages/intl-segmenter/LICENSE.md + +MIT License + +Copyright (c) 2022 FormatJS + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +License for SharpFuzz and related samples +-------------------------------------- + +https://github.com/Metalnem/sharpfuzz +https://github.com/Metalnem/dotnet-fuzzers +https://github.com/Metalnem/libfuzzer-dotnet + +MIT License + +Copyright (c) 2018 Nemanja Mijailovic + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +License for National Institute of Standards and Technology ACVP Data +-------------------------------------------------------------------- +Available at https://github.com/usnistgov/ACVP-Server/blob/85f8742965b2691862079172982683757d8d91db/README.md#License + +NIST-developed software is provided by NIST as a public service. You may use, copy, and distribute copies of the software in any medium, provided that you keep intact this entire notice. You may improve, modify, and create derivative works of the software or any portion of the software, and you may copy and distribute such modifications or works. Modified works should carry a notice stating that you changed the software and should note the date and nature of any such change. Please explicitly acknowledge the National Institute of Standards and Technology as the source of the software. + +NIST-developed software is expressly provided "AS IS." NIST MAKES NO WARRANTY OF ANY KIND, EXPRESS, IMPLIED, IN FACT, OR ARISING BY OPERATION OF LAW, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, AND DATA ACCURACY. NIST NEITHER REPRESENTS NOR WARRANTS THAT THE OPERATION OF THE SOFTWARE WILL BE UNINTERRUPTED OR ERROR-FREE, OR THAT ANY DEFECTS WILL BE CORRECTED. NIST DOES NOT WARRANT OR MAKE ANY REPRESENTATIONS REGARDING THE USE OF THE SOFTWARE OR THE RESULTS THEREOF, INCLUDING BUT NOT LIMITED TO THE CORRECTNESS, ACCURACY, RELIABILITY, OR USEFULNESS OF THE SOFTWARE. + +You are solely responsible for determining the appropriateness of using and distributing the software and you assume all risks associated with its use, including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and the unavailability or interruption of operation. This software is not intended to be used in any situation where a failure could cause risk of injury or damage to property. The software developed by NIST employees is not subject to copyright protection within the United States. + diff --git a/LICENSES/windowsdesktop-runtime-8.0.31-LICENSE.txt b/LICENSES/windowsdesktop-runtime-10.0.13-LICENSE.txt similarity index 100% rename from LICENSES/windowsdesktop-runtime-8.0.31-LICENSE.txt rename to LICENSES/windowsdesktop-runtime-10.0.13-LICENSE.txt diff --git a/README.md b/README.md index 0e567915..1cd24fea 100644 --- a/README.md +++ b/README.md @@ -462,7 +462,7 @@ builds, validation boundary, and update behavior. ## Build from source -Use a Git checkout and the .NET 8 SDK selected by `global.json`. Building the +Use a Git checkout and the .NET 10 SDK selected by `global.json`. Building the native renderer also requires Visual Studio C++ build tools for x64 and a Windows SDK containing `fxc.exe`; the application build compiles and copies `Wisp.NativeRenderer.dll` automatically. Python 3.12 or later runs the offline diff --git a/THIRD-PARTY-NOTICES.md b/THIRD-PARTY-NOTICES.md index 325b04ab..543fda60 100644 --- a/THIRD-PARTY-NOTICES.md +++ b/THIRD-PARTY-NOTICES.md @@ -3,19 +3,19 @@ Wisp includes components that are not covered by the Wisp Proprietary Source License. -## .NET 8.0.31 +## .NET 10.0.13 The self-contained Windows build includes components from the .NET runtime and Windows Desktop runtime. Their exact package notices are preserved in: -- `LICENSES/dotnet-runtime-8.0.31-LICENSE.txt` -- `LICENSES/dotnet-runtime-8.0.31-THIRD-PARTY-NOTICES.txt` -- `LICENSES/windowsdesktop-runtime-8.0.31-LICENSE.txt` +- `LICENSES/dotnet-runtime-10.0.13-LICENSE.txt` +- `LICENSES/dotnet-runtime-10.0.13-THIRD-PARTY-NOTICES.txt` +- `LICENSES/windowsdesktop-runtime-10.0.13-LICENSE.txt` The runtime license and third-party notices are copied byte-for-byte from -[Microsoft's .NET 8.0.31 runtime package](https://www.nuget.org/packages/Microsoft.NETCore.App.Runtime.win-x64/8.0.31). +[Microsoft's .NET 10.0.13 runtime package](https://www.nuget.org/packages/Microsoft.NETCore.App.Runtime.win-x64/10.0.13). The Windows Desktop license comes from the matching -[Microsoft Windows Desktop runtime package](https://www.nuget.org/packages/Microsoft.WindowsDesktop.App.Runtime.win-x64/8.0.31). +[Microsoft Windows Desktop runtime package](https://www.nuget.org/packages/Microsoft.WindowsDesktop.App.Runtime.win-x64/10.0.13). ## Forza Horizon 6 Game Content diff --git a/docs/DOTNET-10-MIGRATION.md b/docs/DOTNET-10-MIGRATION.md index 7ae52cc0..43efbba8 100644 --- a/docs/DOTNET-10-MIGRATION.md +++ b/docs/DOTNET-10-MIGRATION.md @@ -1,7 +1,8 @@ # .NET 10 migration plan -Status: planned; Wisp currently targets .NET 8 and ships its serviced runtime. -This plan does not change the application's target framework or release version. +Status: the source targets .NET 10 with SDK 10.0.402 and bundles the 10.0.13 +runtime. The first .NET 10 release requires the acceptance gates below; this +plan does not assign the application release version. .NET 8 support ends on **November 10, 2026**. .NET 10 is the next LTS target and is supported through November 14, 2028. Complete the migration and release diff --git a/docs/VALIDATION.md b/docs/VALIDATION.md index fda024fd..c8ae4048 100644 --- a/docs/VALIDATION.md +++ b/docs/VALIDATION.md @@ -1,8 +1,8 @@ # Validation -The current source uses the serviced .NET 8 runtime. The -[.NET 10 migration plan](DOTNET-10-MIGRATION.md) tracks the move to the next LTS -before .NET 8 support ends; it does not change the release gates below. +The current source targets .NET 10 and bundles the serviced 10.0.13 runtime. The +[.NET 10 migration plan](DOTNET-10-MIGRATION.md) lists the additional acceptance +gates for the first .NET 10 release; it does not change the release gates below. ## Release gate @@ -33,7 +33,7 @@ alone does not satisfy this part of the release gate. Packaging must additionally verify the staged executable version, PE identity, update-helper identity, the staged `Wisp.NativeRenderer.dll`, Native asset -manifest, bundled .NET 8.0.31 notices, and the installer/checksum pair before +manifest, bundled .NET 10.0.13 notices, and the installer/checksum pair before promotion. ### Steam and Xbox verification diff --git a/global.json b/global.json index 5e279ee8..81732150 100644 --- a/global.json +++ b/global.json @@ -1,6 +1,6 @@ { "sdk": { - "version": "8.0.426", + "version": "10.0.402", "rollForward": "latestPatch" } } diff --git a/installer/Build-Installer.ps1 b/installer/Build-Installer.ps1 index a4f4c767..46bdf1c5 100644 --- a/installer/Build-Installer.ps1 +++ b/installer/Build-Installer.ps1 @@ -1115,7 +1115,7 @@ try { $dotnetExecutable = Resolve-Executable $DotNet $dotnetCandidates @('dotnet.exe', 'dotnet') if ($null -eq $dotnetExecutable) { - throw 'The .NET 8 SDK was not found. Install it from https://dotnet.microsoft.com/download/dotnet/8.0 or pass -DotNet .' + throw 'The .NET 10 SDK was not found. Install it from https://dotnet.microsoft.com/download/dotnet/10.0 or pass -DotNet .' } $innoExecutable = Resolve-Executable $InnoCompiler $innoCandidates @('ISCC.exe', 'ISCC') diff --git a/installer/Build-PrivateDiagnosticInstaller.ps1 b/installer/Build-PrivateDiagnosticInstaller.ps1 index 87ff9bab..14144cd9 100644 --- a/installer/Build-PrivateDiagnosticInstaller.ps1 +++ b/installer/Build-PrivateDiagnosticInstaller.ps1 @@ -111,9 +111,9 @@ function Assert-PrivateTestOutputDirectory { param([Parameter(Mandatory)][string]$Directory, [Parameter(Mandatory)][string]$RepositoryRoot) $repositoryRootPath = [IO.Path]::GetFullPath($RepositoryRoot).TrimEnd('\', '/') $target = [IO.Path]::GetFullPath($Directory).TrimEnd('\', '/') - $allowed = @('tests/Wisp.Core.Tests/bin/Release/net8.0-windows', 'tests/Wisp.Telemetry.Tests/bin/Release/net8.0', - 'tests/Wisp.App.Tests/bin/Release/net8.0-windows', 'tests/Wisp.Update.Tests/bin/Release/net8.0-windows', - 'tests/Wisp.Updater.Tests/bin/Release/net8.0-windows', 'tools/Wisp.UiReview/bin/Release/net8.0-windows') | + $allowed = @('tests/Wisp.Core.Tests/bin/Release/net10.0-windows', 'tests/Wisp.Telemetry.Tests/bin/Release/net10.0', + 'tests/Wisp.App.Tests/bin/Release/net10.0-windows', 'tests/Wisp.Update.Tests/bin/Release/net10.0-windows', + 'tests/Wisp.Updater.Tests/bin/Release/net10.0-windows', 'tools/Wisp.UiReview/bin/Release/net10.0-windows') | ForEach-Object { [IO.Path]::GetFullPath((Join-Path $repositoryRootPath $_)).TrimEnd('\', '/') } if ($target -notin $allowed) { throw 'Private component copies are limited to the six known generated test outputs.' } for ($ancestor = $target; ; $ancestor = [IO.Path]::GetDirectoryName($ancestor)) { @@ -136,7 +136,7 @@ function Sync-PrivateLosslessTestPayload { [Parameter(Mandatory)][string]$RepositoryRoot, [Parameter(Mandatory)][hashtable]$ExpectedHashes) $repositoryRootPath = [IO.Path]::GetFullPath($RepositoryRoot).TrimEnd('\', '/') $target = [IO.Path]::GetFullPath($TestDirectory).TrimEnd('\', '/') - $allowed = @('tests/Wisp.App.Tests/bin/Release/net8.0-windows', 'tools/Wisp.UiReview/bin/Release/net8.0-windows') | + $allowed = @('tests/Wisp.App.Tests/bin/Release/net10.0-windows', 'tools/Wisp.UiReview/bin/Release/net10.0-windows') | ForEach-Object { [IO.Path]::GetFullPath((Join-Path $repositoryRootPath $_)).TrimEnd('\', '/') } if ($target -notin $allowed) { throw 'Decoder synchronization is limited to the two known generated test outputs.' } # Do not let any existing generated-output ancestor redirect writes or removal. @@ -275,12 +275,12 @@ try { # Wisp product components are replaced before --no-build test execution. $componentNames = @('Wisp.dll', 'Wisp.Core.dll', 'Wisp.Telemetry.dll', 'Wisp.Update.dll', 'Wisp.NativeRenderer.dll', 'Wisp.Recorder.exe') $testHostDirectories = @( - 'tests/Wisp.Core.Tests/bin/Release/net8.0-windows', - 'tests/Wisp.Telemetry.Tests/bin/Release/net8.0', - 'tests/Wisp.App.Tests/bin/Release/net8.0-windows', - 'tests/Wisp.Update.Tests/bin/Release/net8.0-windows', - 'tests/Wisp.Updater.Tests/bin/Release/net8.0-windows', - 'tools/Wisp.UiReview/bin/Release/net8.0-windows') + 'tests/Wisp.Core.Tests/bin/Release/net10.0-windows', + 'tests/Wisp.Telemetry.Tests/bin/Release/net10.0', + 'tests/Wisp.App.Tests/bin/Release/net10.0-windows', + 'tests/Wisp.Update.Tests/bin/Release/net10.0-windows', + 'tests/Wisp.Updater.Tests/bin/Release/net10.0-windows', + 'tools/Wisp.UiReview/bin/Release/net10.0-windows') foreach ($directory in $testHostDirectories) { Assert-PrivateTestOutputDirectory (Join-Path $repository $directory) $repository } @@ -296,7 +296,7 @@ try { } } } - foreach ($directory in @('tests/Wisp.App.Tests/bin/Release/net8.0-windows', 'tools/Wisp.UiReview/bin/Release/net8.0-windows')) { + foreach ($directory in @('tests/Wisp.App.Tests/bin/Release/net10.0-windows', 'tools/Wisp.UiReview/bin/Release/net10.0-windows')) { Sync-PrivateLosslessTestPayload $publishDirectory (Join-Path $repository $directory) $repository $decoderHashes $null = Assert-ClipDecoders (Join-Path $repository $directory) $decoderManifest $mpvManifest $mpvDependency } @@ -326,14 +326,14 @@ try { foreach ($name in @('Wisp.dll', 'Wisp.Core.dll', 'Wisp.Telemetry.dll', 'Wisp.Update.dll', 'Wisp.NativeRenderer.dll', 'Wisp.Recorder.exe')) { $publishedHash = (Get-FileHash -LiteralPath (Join-Path $publishDirectory $name) -Algorithm SHA256).Hash - foreach ($testedDirectory in @('tests/Wisp.App.Tests/bin/Release/net8.0-windows', 'tools/Wisp.UiReview/bin/Release/net8.0-windows')) { + foreach ($testedDirectory in @('tests/Wisp.App.Tests/bin/Release/net10.0-windows', 'tools/Wisp.UiReview/bin/Release/net10.0-windows')) { if ($publishedHash -cne (Get-FileHash -LiteralPath (Join-Path $repository "$testedDirectory/$name") -Algorithm SHA256).Hash) { throw "Published $name differs from the tested and reviewed assembly." } } } - foreach ($directory in @($publishDirectory, (Join-Path $repository 'tests/Wisp.App.Tests/bin/Release/net8.0-windows'), - (Join-Path $repository 'tools/Wisp.UiReview/bin/Release/net8.0-windows'))) { + foreach ($directory in @($publishDirectory, (Join-Path $repository 'tests/Wisp.App.Tests/bin/Release/net10.0-windows'), + (Join-Path $repository 'tools/Wisp.UiReview/bin/Release/net10.0-windows'))) { $verified = Assert-ClipDecoders $directory $decoderManifest $mpvManifest $mpvDependency foreach ($relative in $decoderHashes.Keys) { if ($verified[$relative] -cne $decoderHashes[$relative]) { throw 'The decoder payload changed during private validation.' } diff --git a/src/Wisp.App/Clips/ClipBufferStore.cs b/src/Wisp.App/Clips/ClipBufferStore.cs index cb3e78fe..0f3d7fe4 100644 --- a/src/Wisp.App/Clips/ClipBufferStore.cs +++ b/src/Wisp.App/Clips/ClipBufferStore.cs @@ -311,11 +311,11 @@ private static (ulong Bytes, bool Incomplete, bool Limited) CleanupSpool(SafeFil var remaining = Directory.EnumerateFileSystemEntries(spoolPath).Take(maximumEntries + 1).Select(Path.GetFileName).ToArray(); if (remaining.Length == 0) NativeFile.Delete(directory); else foreach (var name in remaining.Take(maximumEntries)) - { - if (name is null) continue; - try { using var data = NativeFile.Open(directory, name, NativeFile.ReadAccess, 3, 1, false); retainedBytes = checked(retainedBytes + NativeFile.Identity(data).Bytes); } - catch (Exception error) when (StorageError(error)) { incomplete = true; } - } + { + if (name is null) continue; + try { using var data = NativeFile.Open(directory, name, NativeFile.ReadAccess, 3, 1, false); retainedBytes = checked(retainedBytes + NativeFile.Identity(data).Bytes); } + catch (Exception error) when (StorageError(error)) { incomplete = true; } + } } catch (Exception error) when (StorageError(error)) { incomplete = true; } return (retainedBytes, incomplete || limited, limited); diff --git a/src/Wisp.App/Clips/RecorderThumbnailProvider.cs b/src/Wisp.App/Clips/RecorderThumbnailProvider.cs index f54552f4..ab255c4b 100644 --- a/src/Wisp.App/Clips/RecorderThumbnailProvider.cs +++ b/src/Wisp.App/Clips/RecorderThumbnailProvider.cs @@ -127,11 +127,11 @@ internal RecorderThumbnailProvider(string helperPath) : this(new RecorderThumbna image.Freeze(); } if (image is not null) lock (_sync) - { - ObjectDisposedException.ThrowIf(_disposed, this); - _cache.AddFirst((metadata.Key, image)); - if (_cache.Count > CacheCapacity) _cache.RemoveLast(); - } + { + ObjectDisposedException.ThrowIf(_disposed, this); + _cache.AddFirst((metadata.Key, image)); + if (_cache.Count > CacheCapacity) _cache.RemoveLast(); + } return image; } finally { DecoderGate.Release(); } diff --git a/src/Wisp.App/FeatureTourBanner.xaml.cs b/src/Wisp.App/FeatureTourBanner.xaml.cs index 19eacfa0..d2c1cff1 100644 --- a/src/Wisp.App/FeatureTourBanner.xaml.cs +++ b/src/Wisp.App/FeatureTourBanner.xaml.cs @@ -1,5 +1,6 @@ using System.Windows.Controls; namespace Wisp.App; + public partial class FeatureTourBanner : UserControl { public FeatureTourBanner() => InitializeComponent(); diff --git a/src/Wisp.App/Supplementary/SupplementaryIncident.cs b/src/Wisp.App/Supplementary/SupplementaryIncident.cs index 9dc72b08..65f427e1 100644 --- a/src/Wisp.App/Supplementary/SupplementaryIncident.cs +++ b/src/Wisp.App/Supplementary/SupplementaryIncident.cs @@ -172,11 +172,11 @@ internal static string Signature(SupplementaryIncident value) var text = new StringBuilder($"wisp-tools-incident-v{value.SchemaVersion}\n").Append(value.Category).Append('\n').Append(value.Reason).Append('\n') .Append(value.FailureStage ?? "").Append('\n').Append(value.Code?.ToString(CultureInfo.InvariantCulture) ?? "").Append('\n'); if (value.Exceptions is { IsDefault: false } exceptions) foreach (var exception in exceptions) - { - text.Append(exception.Type).Append('\n').Append(exception.Code.ToString(CultureInfo.InvariantCulture)).Append('\n'); - foreach (var method in exception.Methods) text.Append(method).Append('\n'); - text.Append('\n'); - } + { + text.Append(exception.Type).Append('\n').Append(exception.Code.ToString(CultureInfo.InvariantCulture)).Append('\n'); + foreach (var method in exception.Methods) text.Append(method).Append('\n'); + text.Append('\n'); + } if (value.SchemaVersion >= 2 && value.Recorder?.Components is { IsDefault: false } components) foreach (var component in components) text.Append(component.Component).Append('\n').Append(component.Reason).Append('\n') diff --git a/src/Wisp.App/Wisp.App.csproj b/src/Wisp.App/Wisp.App.csproj index 067f95c6..6f0f9407 100644 --- a/src/Wisp.App/Wisp.App.csproj +++ b/src/Wisp.App/Wisp.App.csproj @@ -1,8 +1,8 @@ WinExe - net8.0-windows - 8.0.31 + net10.0-windows + 10.0.13 true app.manifest Assets\Wisp.ico @@ -118,8 +118,8 @@ - - - + + + diff --git a/src/Wisp.App/packages.lock.json b/src/Wisp.App/packages.lock.json index 50fb576a..705543c8 100644 --- a/src/Wisp.App/packages.lock.json +++ b/src/Wisp.App/packages.lock.json @@ -1,7 +1,7 @@ { "version": 2, "dependencies": { - "net8.0-windows7.0": { + "net10.0-windows7.0": { "LibVLCSharp": { "type": "Direct", "requested": "[3.10.1, )", @@ -27,6 +27,6 @@ "type": "Project" } }, - "net8.0-windows7.0/win-x64": {} + "net10.0-windows7.0/win-x64": {} } } \ No newline at end of file diff --git a/src/Wisp.Core/Tunes/TuneModels.cs b/src/Wisp.Core/Tunes/TuneModels.cs index 8f563052..57c88854 100644 --- a/src/Wisp.Core/Tunes/TuneModels.cs +++ b/src/Wisp.Core/Tunes/TuneModels.cs @@ -54,7 +54,7 @@ public sealed record TuneSnapshot(Guid Id, DateTimeOffset CapturedAtUtc, TuneIde public string? CarName { get; init; } [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] public TunePerformance? Performance { get; init; } - public bool IsComplete => !Fields.IsDefault && Fields.Length == TuneDecoder.FieldCount && Fields.All(field => field is not null && field.Status is + public bool IsComplete => !Fields.IsDefault && Fields.Length == TuneDecoder.FieldCount && Fields.All(f => f is not null && f.Status is TuneFieldStatus.Available or TuneFieldStatus.NotApplicable or TuneFieldStatus.NotAdjustable); } diff --git a/src/Wisp.Core/Wisp.Core.csproj b/src/Wisp.Core/Wisp.Core.csproj index 02159a75..7606f78c 100644 --- a/src/Wisp.Core/Wisp.Core.csproj +++ b/src/Wisp.Core/Wisp.Core.csproj @@ -1,6 +1,6 @@ - net8.0 + net10.0 diff --git a/src/Wisp.Core/packages.lock.json b/src/Wisp.Core/packages.lock.json index 6c13474f..0f43b377 100644 --- a/src/Wisp.Core/packages.lock.json +++ b/src/Wisp.Core/packages.lock.json @@ -1,7 +1,7 @@ { "version": 2, "dependencies": { - "net8.0": {}, - "net8.0/win-x64": {} + "net10.0": {}, + "net10.0/win-x64": {} } } \ No newline at end of file diff --git a/src/Wisp.Telemetry/Wisp.Telemetry.csproj b/src/Wisp.Telemetry/Wisp.Telemetry.csproj index 84d8fe33..baa01230 100644 --- a/src/Wisp.Telemetry/Wisp.Telemetry.csproj +++ b/src/Wisp.Telemetry/Wisp.Telemetry.csproj @@ -1,6 +1,6 @@ - net8.0 + net10.0 diff --git a/src/Wisp.Telemetry/packages.lock.json b/src/Wisp.Telemetry/packages.lock.json index 07f8940a..de506fb3 100644 --- a/src/Wisp.Telemetry/packages.lock.json +++ b/src/Wisp.Telemetry/packages.lock.json @@ -1,11 +1,11 @@ { "version": 2, "dependencies": { - "net8.0": { + "net10.0": { "wisp.core": { "type": "Project" } }, - "net8.0/win-x64": {} + "net10.0/win-x64": {} } } \ No newline at end of file diff --git a/src/Wisp.Update/Wisp.Update.csproj b/src/Wisp.Update/Wisp.Update.csproj index e97c68e1..c1a7a560 100644 --- a/src/Wisp.Update/Wisp.Update.csproj +++ b/src/Wisp.Update/Wisp.Update.csproj @@ -1,5 +1,5 @@ - net8.0-windows + net10.0-windows diff --git a/src/Wisp.Update/packages.lock.json b/src/Wisp.Update/packages.lock.json index 2d14cd18..fe5cb8c9 100644 --- a/src/Wisp.Update/packages.lock.json +++ b/src/Wisp.Update/packages.lock.json @@ -1,7 +1,7 @@ { "version": 2, "dependencies": { - "net8.0-windows7.0": {}, - "net8.0-windows7.0/win-x64": {} + "net10.0-windows7.0": {}, + "net10.0-windows7.0/win-x64": {} } } \ No newline at end of file diff --git a/src/Wisp.Updater/Wisp.Updater.csproj b/src/Wisp.Updater/Wisp.Updater.csproj index 22602bf2..e7136eb2 100644 --- a/src/Wisp.Updater/Wisp.Updater.csproj +++ b/src/Wisp.Updater/Wisp.Updater.csproj @@ -1,8 +1,8 @@ WinExe - net8.0-windows - 8.0.31 + net10.0-windows + 10.0.13 true true full diff --git a/src/Wisp.Updater/packages.lock.json b/src/Wisp.Updater/packages.lock.json index 6f0c81b3..c031384d 100644 --- a/src/Wisp.Updater/packages.lock.json +++ b/src/Wisp.Updater/packages.lock.json @@ -1,17 +1,17 @@ { "version": 2, "dependencies": { - "net8.0-windows7.0": { + "net10.0-windows7.0": { "Microsoft.NET.ILLink.Tasks": { "type": "Direct", - "requested": "[8.0.31, )", - "resolved": "8.0.31", - "contentHash": "OJdAGATV2QoVWL11zlDLEluA06q8rK+cgZR47ohrO8V+Qj5z9dlvN7bG9/0e5t0IOe+yD8tREC0bpsEgDGrzIQ==" + "requested": "[10.0.13, )", + "resolved": "10.0.13", + "contentHash": "40yrBMsLEcjixBR4G+FiUaBPvxXIPSKJ2OgSrbOZcmSDBda4Sb0k7BWrfDpIvn3IvvDzwOL/tEPa6gDQfh6aRw==" }, "wisp.update": { "type": "Project" } }, - "net8.0-windows7.0/win-x64": {} + "net10.0-windows7.0/win-x64": {} } } \ No newline at end of file diff --git a/tests/Wisp.App.Tests/InstallerPackagingContractTests.cs b/tests/Wisp.App.Tests/InstallerPackagingContractTests.cs index 9b713261..6dc5dd34 100644 --- a/tests/Wisp.App.Tests/InstallerPackagingContractTests.cs +++ b/tests/Wisp.App.Tests/InstallerPackagingContractTests.cs @@ -233,7 +233,7 @@ public void PackagingPublishesAndBundlesValidatedUpdateHelperBeforeCompilation() [Fact] public void SelfContainedDistributionCarriesPinnedRuntimeNotices() { - const string runtimeVersion = "8.0.31"; + const string runtimeVersion = "10.0.13"; var root = RepositoryRoot(); var project = File.ReadAllText(Path.Combine(root, "src", "Wisp.App", "Wisp.App.csproj")); Assert.Contains($"{runtimeVersion}", project, @@ -246,7 +246,7 @@ public void SelfContainedDistributionCarriesPinnedRuntimeNotices() [$"dotnet-runtime-{runtimeVersion}-LICENSE.txt"] = "D7A68596AB69B06F51CA278A6545148E4269A9381C26D597C13DF5D88E08CF5B", [$"dotnet-runtime-{runtimeVersion}-THIRD-PARTY-NOTICES.txt"] = - "B60B2912DA28EAA6518593C9E2EFB5334EE062D3C42E80D8FDFA806B3DC52977", + "6D15E10A101C6BFFF2AB4429ED061BF76C456FC4B23AD6B03E0D0F8377148A21", [$"windowsdesktop-runtime-{runtimeVersion}-LICENSE.txt"] = "A89886665765362EB77E0F8E26602C924520041D1711B2EEDC136434FE4D01AB" }; diff --git a/tests/Wisp.App.Tests/PrivateLosslessPackagingTests.cs b/tests/Wisp.App.Tests/PrivateLosslessPackagingTests.cs index 6899639b..4cbee634 100644 --- a/tests/Wisp.App.Tests/PrivateLosslessPackagingTests.cs +++ b/tests/Wisp.App.Tests/PrivateLosslessPackagingTests.cs @@ -164,7 +164,7 @@ private static string RepositoryRoot() Assert-RecorderExecutable $recorder $hashes = Assert-ClipDecoders $publish $manifestPath $mpvManifestPath $mpvDependencyPath if ($env:WISP_PRIVATE_CASE -in @('sync', 'wrong-output')) { - $target = Join-Path $fixture 'tools/Wisp.UiReview/bin/Release/net8.0-windows' + $target = Join-Path $fixture 'tools/Wisp.UiReview/bin/Release/net10.0-windows' if ($env:WISP_PRIVATE_CASE -eq 'wrong-output') { $target = Join-Path $fixture 'unrelated' } Write-FixtureFile (Join-Path $target 'unrelated.keep') 'preserve' Write-FixtureFile (Join-Path $target 'libvlc/win-x64/plugins/unselected.dll') diff --git a/tests/Wisp.App.Tests/RunAlternativePlotsTests.cs b/tests/Wisp.App.Tests/RunAlternativePlotsTests.cs index a8cbc44c..436a14f8 100644 --- a/tests/Wisp.App.Tests/RunAlternativePlotsTests.cs +++ b/tests/Wisp.App.Tests/RunAlternativePlotsTests.cs @@ -191,7 +191,7 @@ private static bool RenderContainsRed(FrameworkElement view) var bitmap = new RenderTargetBitmap(700, 360, 96, 96, PixelFormats.Pbgra32); bitmap.Render(view); var pixels = new byte[700 * 360 * 4]; bitmap.CopyPixels(pixels, 700 * 4, 0); for (var y = 90; y < 290; y++) for (var x = 65; x < 680; x++) - { var i = (y * 700 + x) * 4; if (pixels[i + 2] > 100 && pixels[i + 1] < 50 && pixels[i] < 50) return true; } + { var i = (y * 700 + x) * 4; if (pixels[i + 2] > 100 && pixels[i + 1] < 50 && pixels[i] < 50) return true; } return false; } diff --git a/tests/Wisp.App.Tests/Wisp.App.Tests.csproj b/tests/Wisp.App.Tests/Wisp.App.Tests.csproj index b95ea8f2..a675b31d 100644 --- a/tests/Wisp.App.Tests/Wisp.App.Tests.csproj +++ b/tests/Wisp.App.Tests/Wisp.App.Tests.csproj @@ -1,6 +1,6 @@ - net8.0-windows + net10.0-windows false true Exe diff --git a/tests/Wisp.App.Tests/packages.lock.json b/tests/Wisp.App.Tests/packages.lock.json index 40348db0..5918f8e5 100644 --- a/tests/Wisp.App.Tests/packages.lock.json +++ b/tests/Wisp.App.Tests/packages.lock.json @@ -1,7 +1,7 @@ { "version": 2, "dependencies": { - "net8.0-windows7.0": { + "net10.0-windows7.0": { "Microsoft.NET.Test.Sdk": { "type": "Direct", "requested": "[18.10.1, )", @@ -50,22 +50,13 @@ "Microsoft.Win32.Registry": { "type": "Transitive", "resolved": "5.0.0", - "contentHash": "dDoKi0PnDz31yAyETfRntsLArTlVAVzUzCIvvEDsDsucrl33Dl8pIJG06ePTJTI3tGpeyHS9Cq7Foc/s4EeKcg==", - "dependencies": { - "System.Security.AccessControl": "5.0.0", - "System.Security.Principal.Windows": "5.0.0" - } + "contentHash": "dDoKi0PnDz31yAyETfRntsLArTlVAVzUzCIvvEDsDsucrl33Dl8pIJG06ePTJTI3tGpeyHS9Cq7Foc/s4EeKcg==" }, "System.Security.AccessControl": { "type": "Transitive", "resolved": "6.0.1", "contentHash": "IQ4NXP/B3Ayzvw0rDQzVTYsCKyy0Jp9KI6aYcK7UnGVlR9+Awz++TIPCQtPYfLJfOpm8ajowMR09V7quD3sEHw==" }, - "System.Security.Principal.Windows": { - "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "t0MGLukB5WAVU9bO3MGzvlGnyJPgUlcwerXn1kzBRjwLKixT96XV0Uza41W49gVd8zEMFu9vQEFlv0IOrytICA==" - }, "xunit.analyzers": { "type": "Transitive", "resolved": "2.0.0", @@ -161,25 +152,16 @@ "contentHash": "U8SHuJr8eAC3x4+gEtOJD2heReo0tTWP3v21NunYNTzjmHpVp7qELs8phohqazxHMkaSIN8LufdIpAhldiLL/A==" } }, - "net8.0-windows7.0/win-x64": { + "net10.0-windows7.0/win-x64": { "Microsoft.Win32.Registry": { "type": "Transitive", "resolved": "5.0.0", - "contentHash": "dDoKi0PnDz31yAyETfRntsLArTlVAVzUzCIvvEDsDsucrl33Dl8pIJG06ePTJTI3tGpeyHS9Cq7Foc/s4EeKcg==", - "dependencies": { - "System.Security.AccessControl": "5.0.0", - "System.Security.Principal.Windows": "5.0.0" - } + "contentHash": "dDoKi0PnDz31yAyETfRntsLArTlVAVzUzCIvvEDsDsucrl33Dl8pIJG06ePTJTI3tGpeyHS9Cq7Foc/s4EeKcg==" }, "System.Security.AccessControl": { "type": "Transitive", "resolved": "6.0.1", "contentHash": "IQ4NXP/B3Ayzvw0rDQzVTYsCKyy0Jp9KI6aYcK7UnGVlR9+Awz++TIPCQtPYfLJfOpm8ajowMR09V7quD3sEHw==" - }, - "System.Security.Principal.Windows": { - "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "t0MGLukB5WAVU9bO3MGzvlGnyJPgUlcwerXn1kzBRjwLKixT96XV0Uza41W49gVd8zEMFu9vQEFlv0IOrytICA==" } } } diff --git a/tests/Wisp.Core.Tests/Wisp.Core.Tests.csproj b/tests/Wisp.Core.Tests/Wisp.Core.Tests.csproj index 11209577..293af152 100644 --- a/tests/Wisp.Core.Tests/Wisp.Core.Tests.csproj +++ b/tests/Wisp.Core.Tests/Wisp.Core.Tests.csproj @@ -1,6 +1,6 @@ - net8.0-windows + net10.0-windows true false true diff --git a/tests/Wisp.Core.Tests/packages.lock.json b/tests/Wisp.Core.Tests/packages.lock.json index 58d0071b..739f1554 100644 --- a/tests/Wisp.Core.Tests/packages.lock.json +++ b/tests/Wisp.Core.Tests/packages.lock.json @@ -1,7 +1,7 @@ { "version": 2, "dependencies": { - "net8.0-windows7.0": { + "net10.0-windows7.0": { "Microsoft.NET.Test.Sdk": { "type": "Direct", "requested": "[18.10.1, )", @@ -50,22 +50,13 @@ "Microsoft.Win32.Registry": { "type": "Transitive", "resolved": "5.0.0", - "contentHash": "dDoKi0PnDz31yAyETfRntsLArTlVAVzUzCIvvEDsDsucrl33Dl8pIJG06ePTJTI3tGpeyHS9Cq7Foc/s4EeKcg==", - "dependencies": { - "System.Security.AccessControl": "5.0.0", - "System.Security.Principal.Windows": "5.0.0" - } + "contentHash": "dDoKi0PnDz31yAyETfRntsLArTlVAVzUzCIvvEDsDsucrl33Dl8pIJG06ePTJTI3tGpeyHS9Cq7Foc/s4EeKcg==" }, "System.Security.AccessControl": { "type": "Transitive", "resolved": "6.0.1", "contentHash": "IQ4NXP/B3Ayzvw0rDQzVTYsCKyy0Jp9KI6aYcK7UnGVlR9+Awz++TIPCQtPYfLJfOpm8ajowMR09V7quD3sEHw==" }, - "System.Security.Principal.Windows": { - "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "t0MGLukB5WAVU9bO3MGzvlGnyJPgUlcwerXn1kzBRjwLKixT96XV0Uza41W49gVd8zEMFu9vQEFlv0IOrytICA==" - }, "xunit.analyzers": { "type": "Transitive", "resolved": "2.0.0", @@ -130,25 +121,16 @@ "contentHash": "pUkYI1f99hY9giu/MRaEVN53RO7skXwR7FGtVvFJCK5ezdg5i0W+z1yj/91X5aKv07xGuSB5n1g/Zt2P4Ooq6g==" } }, - "net8.0-windows7.0/win-x64": { + "net10.0-windows7.0/win-x64": { "Microsoft.Win32.Registry": { "type": "Transitive", "resolved": "5.0.0", - "contentHash": "dDoKi0PnDz31yAyETfRntsLArTlVAVzUzCIvvEDsDsucrl33Dl8pIJG06ePTJTI3tGpeyHS9Cq7Foc/s4EeKcg==", - "dependencies": { - "System.Security.AccessControl": "5.0.0", - "System.Security.Principal.Windows": "5.0.0" - } + "contentHash": "dDoKi0PnDz31yAyETfRntsLArTlVAVzUzCIvvEDsDsucrl33Dl8pIJG06ePTJTI3tGpeyHS9Cq7Foc/s4EeKcg==" }, "System.Security.AccessControl": { "type": "Transitive", "resolved": "6.0.1", "contentHash": "IQ4NXP/B3Ayzvw0rDQzVTYsCKyy0Jp9KI6aYcK7UnGVlR9+Awz++TIPCQtPYfLJfOpm8ajowMR09V7quD3sEHw==" - }, - "System.Security.Principal.Windows": { - "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "t0MGLukB5WAVU9bO3MGzvlGnyJPgUlcwerXn1kzBRjwLKixT96XV0Uza41W49gVd8zEMFu9vQEFlv0IOrytICA==" } } } diff --git a/tests/Wisp.Telemetry.Tests/Wisp.Telemetry.Tests.csproj b/tests/Wisp.Telemetry.Tests/Wisp.Telemetry.Tests.csproj index 57ca2a04..446b55d3 100644 --- a/tests/Wisp.Telemetry.Tests/Wisp.Telemetry.Tests.csproj +++ b/tests/Wisp.Telemetry.Tests/Wisp.Telemetry.Tests.csproj @@ -1,6 +1,6 @@ - net8.0 + net10.0 false true Exe diff --git a/tests/Wisp.Telemetry.Tests/packages.lock.json b/tests/Wisp.Telemetry.Tests/packages.lock.json index ff64d18b..69aa9d15 100644 --- a/tests/Wisp.Telemetry.Tests/packages.lock.json +++ b/tests/Wisp.Telemetry.Tests/packages.lock.json @@ -1,7 +1,7 @@ { "version": 2, "dependencies": { - "net8.0": { + "net10.0": { "Microsoft.NET.Test.Sdk": { "type": "Direct", "requested": "[18.10.1, )", @@ -50,22 +50,13 @@ "Microsoft.Win32.Registry": { "type": "Transitive", "resolved": "5.0.0", - "contentHash": "dDoKi0PnDz31yAyETfRntsLArTlVAVzUzCIvvEDsDsucrl33Dl8pIJG06ePTJTI3tGpeyHS9Cq7Foc/s4EeKcg==", - "dependencies": { - "System.Security.AccessControl": "5.0.0", - "System.Security.Principal.Windows": "5.0.0" - } + "contentHash": "dDoKi0PnDz31yAyETfRntsLArTlVAVzUzCIvvEDsDsucrl33Dl8pIJG06ePTJTI3tGpeyHS9Cq7Foc/s4EeKcg==" }, "System.Security.AccessControl": { "type": "Transitive", "resolved": "6.0.1", "contentHash": "IQ4NXP/B3Ayzvw0rDQzVTYsCKyy0Jp9KI6aYcK7UnGVlR9+Awz++TIPCQtPYfLJfOpm8ajowMR09V7quD3sEHw==" }, - "System.Security.Principal.Windows": { - "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "t0MGLukB5WAVU9bO3MGzvlGnyJPgUlcwerXn1kzBRjwLKixT96XV0Uza41W49gVd8zEMFu9vQEFlv0IOrytICA==" - }, "xunit.analyzers": { "type": "Transitive", "resolved": "2.0.0", @@ -136,25 +127,16 @@ "contentHash": "pUkYI1f99hY9giu/MRaEVN53RO7skXwR7FGtVvFJCK5ezdg5i0W+z1yj/91X5aKv07xGuSB5n1g/Zt2P4Ooq6g==" } }, - "net8.0/win-x64": { + "net10.0/win-x64": { "Microsoft.Win32.Registry": { "type": "Transitive", "resolved": "5.0.0", - "contentHash": "dDoKi0PnDz31yAyETfRntsLArTlVAVzUzCIvvEDsDsucrl33Dl8pIJG06ePTJTI3tGpeyHS9Cq7Foc/s4EeKcg==", - "dependencies": { - "System.Security.AccessControl": "5.0.0", - "System.Security.Principal.Windows": "5.0.0" - } + "contentHash": "dDoKi0PnDz31yAyETfRntsLArTlVAVzUzCIvvEDsDsucrl33Dl8pIJG06ePTJTI3tGpeyHS9Cq7Foc/s4EeKcg==" }, "System.Security.AccessControl": { "type": "Transitive", "resolved": "6.0.1", "contentHash": "IQ4NXP/B3Ayzvw0rDQzVTYsCKyy0Jp9KI6aYcK7UnGVlR9+Awz++TIPCQtPYfLJfOpm8ajowMR09V7quD3sEHw==" - }, - "System.Security.Principal.Windows": { - "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "t0MGLukB5WAVU9bO3MGzvlGnyJPgUlcwerXn1kzBRjwLKixT96XV0Uza41W49gVd8zEMFu9vQEFlv0IOrytICA==" } } } diff --git a/tests/Wisp.Update.Tests/Wisp.Update.Tests.csproj b/tests/Wisp.Update.Tests/Wisp.Update.Tests.csproj index 31186a68..d68e802b 100644 --- a/tests/Wisp.Update.Tests/Wisp.Update.Tests.csproj +++ b/tests/Wisp.Update.Tests/Wisp.Update.Tests.csproj @@ -1,6 +1,6 @@ - net8.0-windows + net10.0-windows false true Exe diff --git a/tests/Wisp.Update.Tests/packages.lock.json b/tests/Wisp.Update.Tests/packages.lock.json index 788d8539..7244ba44 100644 --- a/tests/Wisp.Update.Tests/packages.lock.json +++ b/tests/Wisp.Update.Tests/packages.lock.json @@ -1,7 +1,7 @@ { "version": 2, "dependencies": { - "net8.0-windows7.0": { + "net10.0-windows7.0": { "Microsoft.NET.Test.Sdk": { "type": "Direct", "requested": "[18.10.1, )", @@ -50,22 +50,13 @@ "Microsoft.Win32.Registry": { "type": "Transitive", "resolved": "5.0.0", - "contentHash": "dDoKi0PnDz31yAyETfRntsLArTlVAVzUzCIvvEDsDsucrl33Dl8pIJG06ePTJTI3tGpeyHS9Cq7Foc/s4EeKcg==", - "dependencies": { - "System.Security.AccessControl": "5.0.0", - "System.Security.Principal.Windows": "5.0.0" - } + "contentHash": "dDoKi0PnDz31yAyETfRntsLArTlVAVzUzCIvvEDsDsucrl33Dl8pIJG06ePTJTI3tGpeyHS9Cq7Foc/s4EeKcg==" }, "System.Security.AccessControl": { "type": "Transitive", "resolved": "6.0.1", "contentHash": "IQ4NXP/B3Ayzvw0rDQzVTYsCKyy0Jp9KI6aYcK7UnGVlR9+Awz++TIPCQtPYfLJfOpm8ajowMR09V7quD3sEHw==" }, - "System.Security.Principal.Windows": { - "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "t0MGLukB5WAVU9bO3MGzvlGnyJPgUlcwerXn1kzBRjwLKixT96XV0Uza41W49gVd8zEMFu9vQEFlv0IOrytICA==" - }, "xunit.analyzers": { "type": "Transitive", "resolved": "2.0.0", @@ -130,25 +121,16 @@ "contentHash": "pUkYI1f99hY9giu/MRaEVN53RO7skXwR7FGtVvFJCK5ezdg5i0W+z1yj/91X5aKv07xGuSB5n1g/Zt2P4Ooq6g==" } }, - "net8.0-windows7.0/win-x64": { + "net10.0-windows7.0/win-x64": { "Microsoft.Win32.Registry": { "type": "Transitive", "resolved": "5.0.0", - "contentHash": "dDoKi0PnDz31yAyETfRntsLArTlVAVzUzCIvvEDsDsucrl33Dl8pIJG06ePTJTI3tGpeyHS9Cq7Foc/s4EeKcg==", - "dependencies": { - "System.Security.AccessControl": "5.0.0", - "System.Security.Principal.Windows": "5.0.0" - } + "contentHash": "dDoKi0PnDz31yAyETfRntsLArTlVAVzUzCIvvEDsDsucrl33Dl8pIJG06ePTJTI3tGpeyHS9Cq7Foc/s4EeKcg==" }, "System.Security.AccessControl": { "type": "Transitive", "resolved": "6.0.1", "contentHash": "IQ4NXP/B3Ayzvw0rDQzVTYsCKyy0Jp9KI6aYcK7UnGVlR9+Awz++TIPCQtPYfLJfOpm8ajowMR09V7quD3sEHw==" - }, - "System.Security.Principal.Windows": { - "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "t0MGLukB5WAVU9bO3MGzvlGnyJPgUlcwerXn1kzBRjwLKixT96XV0Uza41W49gVd8zEMFu9vQEFlv0IOrytICA==" } } } diff --git a/tests/Wisp.Updater.Tests/Wisp.Updater.Tests.csproj b/tests/Wisp.Updater.Tests/Wisp.Updater.Tests.csproj index 1ed80b5a..ed3fe565 100644 --- a/tests/Wisp.Updater.Tests/Wisp.Updater.Tests.csproj +++ b/tests/Wisp.Updater.Tests/Wisp.Updater.Tests.csproj @@ -1,6 +1,6 @@ - net8.0-windows + net10.0-windows false true Exe diff --git a/tests/Wisp.Updater.Tests/packages.lock.json b/tests/Wisp.Updater.Tests/packages.lock.json index bdd88778..a61bad61 100644 --- a/tests/Wisp.Updater.Tests/packages.lock.json +++ b/tests/Wisp.Updater.Tests/packages.lock.json @@ -1,7 +1,7 @@ { "version": 2, "dependencies": { - "net8.0-windows7.0": { + "net10.0-windows7.0": { "Microsoft.NET.Test.Sdk": { "type": "Direct", "requested": "[18.10.1, )", @@ -50,22 +50,13 @@ "Microsoft.Win32.Registry": { "type": "Transitive", "resolved": "5.0.0", - "contentHash": "dDoKi0PnDz31yAyETfRntsLArTlVAVzUzCIvvEDsDsucrl33Dl8pIJG06ePTJTI3tGpeyHS9Cq7Foc/s4EeKcg==", - "dependencies": { - "System.Security.AccessControl": "5.0.0", - "System.Security.Principal.Windows": "5.0.0" - } + "contentHash": "dDoKi0PnDz31yAyETfRntsLArTlVAVzUzCIvvEDsDsucrl33Dl8pIJG06ePTJTI3tGpeyHS9Cq7Foc/s4EeKcg==" }, "System.Security.AccessControl": { "type": "Transitive", "resolved": "6.0.1", "contentHash": "IQ4NXP/B3Ayzvw0rDQzVTYsCKyy0Jp9KI6aYcK7UnGVlR9+Awz++TIPCQtPYfLJfOpm8ajowMR09V7quD3sEHw==" }, - "System.Security.Principal.Windows": { - "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "t0MGLukB5WAVU9bO3MGzvlGnyJPgUlcwerXn1kzBRjwLKixT96XV0Uza41W49gVd8zEMFu9vQEFlv0IOrytICA==" - }, "xunit.analyzers": { "type": "Transitive", "resolved": "2.0.0", @@ -136,25 +127,16 @@ "contentHash": "pUkYI1f99hY9giu/MRaEVN53RO7skXwR7FGtVvFJCK5ezdg5i0W+z1yj/91X5aKv07xGuSB5n1g/Zt2P4Ooq6g==" } }, - "net8.0-windows7.0/win-x64": { + "net10.0-windows7.0/win-x64": { "Microsoft.Win32.Registry": { "type": "Transitive", "resolved": "5.0.0", - "contentHash": "dDoKi0PnDz31yAyETfRntsLArTlVAVzUzCIvvEDsDsucrl33Dl8pIJG06ePTJTI3tGpeyHS9Cq7Foc/s4EeKcg==", - "dependencies": { - "System.Security.AccessControl": "5.0.0", - "System.Security.Principal.Windows": "5.0.0" - } + "contentHash": "dDoKi0PnDz31yAyETfRntsLArTlVAVzUzCIvvEDsDsucrl33Dl8pIJG06ePTJTI3tGpeyHS9Cq7Foc/s4EeKcg==" }, "System.Security.AccessControl": { "type": "Transitive", "resolved": "6.0.1", "contentHash": "IQ4NXP/B3Ayzvw0rDQzVTYsCKyy0Jp9KI6aYcK7UnGVlR9+Awz++TIPCQtPYfLJfOpm8ajowMR09V7quD3sEHw==" - }, - "System.Security.Principal.Windows": { - "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "t0MGLukB5WAVU9bO3MGzvlGnyJPgUlcwerXn1kzBRjwLKixT96XV0Uza41W49gVd8zEMFu9vQEFlv0IOrytICA==" } } } diff --git a/tools/Wisp.LosslessOfflineDecodeProbe/Wisp.LosslessOfflineDecodeProbe.csproj b/tools/Wisp.LosslessOfflineDecodeProbe/Wisp.LosslessOfflineDecodeProbe.csproj index f11189d3..c862ce77 100644 --- a/tools/Wisp.LosslessOfflineDecodeProbe/Wisp.LosslessOfflineDecodeProbe.csproj +++ b/tools/Wisp.LosslessOfflineDecodeProbe/Wisp.LosslessOfflineDecodeProbe.csproj @@ -1,7 +1,7 @@ Exe - net8.0-windows + net10.0-windows x64 true Wisp.LosslessOfflineDecodeProbe diff --git a/tools/Wisp.LosslessOfflineDecodeProbe/packages.lock.json b/tools/Wisp.LosslessOfflineDecodeProbe/packages.lock.json index 2d14cd18..fe5cb8c9 100644 --- a/tools/Wisp.LosslessOfflineDecodeProbe/packages.lock.json +++ b/tools/Wisp.LosslessOfflineDecodeProbe/packages.lock.json @@ -1,7 +1,7 @@ { "version": 2, "dependencies": { - "net8.0-windows7.0": {}, - "net8.0-windows7.0/win-x64": {} + "net10.0-windows7.0": {}, + "net10.0-windows7.0/win-x64": {} } } \ No newline at end of file diff --git a/tools/Wisp.LosslessPlaybackProbe/README.md b/tools/Wisp.LosslessPlaybackProbe/README.md index df4c9528..6e619f13 100644 --- a/tools/Wisp.LosslessPlaybackProbe/README.md +++ b/tools/Wisp.LosslessPlaybackProbe/README.md @@ -39,7 +39,7 @@ Once both apps are closed, keep the current app focused during this synthetic-on ```[WINDOWS POWERSHELL] $probeProject = Join-Path $PWD 'tools\Wisp.LosslessPlaybackProbe' -$probeExe = Join-Path $probeProject 'bin\x64\Release\net8.0-windows\win-x64\Wisp.LosslessPlaybackProbe.exe' +$probeExe = Join-Path $probeProject 'bin\x64\Release\net10.0-windows\win-x64\Wisp.LosslessPlaybackProbe.exe' $probeSource = Join-Path $PWD 'work\lossless-rgb-03\fixture.mp4' $probeOutput = Join-Path $PWD 'work\libvlc-lossless-01' & $probeExe --source $probeSource --output $probeOutput diff --git a/tools/Wisp.LosslessPlaybackProbe/Wisp.LosslessPlaybackProbe.csproj b/tools/Wisp.LosslessPlaybackProbe/Wisp.LosslessPlaybackProbe.csproj index da714bbd..80247817 100644 --- a/tools/Wisp.LosslessPlaybackProbe/Wisp.LosslessPlaybackProbe.csproj +++ b/tools/Wisp.LosslessPlaybackProbe/Wisp.LosslessPlaybackProbe.csproj @@ -1,7 +1,7 @@ Exe - net8.0-windows + net10.0-windows true x64 x64 diff --git a/tools/Wisp.LosslessPlaybackProbe/packages.lock.json b/tools/Wisp.LosslessPlaybackProbe/packages.lock.json index acb1c9cf..46e46a36 100644 --- a/tools/Wisp.LosslessPlaybackProbe/packages.lock.json +++ b/tools/Wisp.LosslessPlaybackProbe/packages.lock.json @@ -1,7 +1,7 @@ { "version": 1, "dependencies": { - "net8.0-windows7.0": { + "net10.0-windows7.0": { "LibVLCSharp": { "type": "Direct", "requested": "[3.10.1, 3.10.1]", @@ -15,6 +15,6 @@ "contentHash": "U8SHuJr8eAC3x4+gEtOJD2heReo0tTWP3v21NunYNTzjmHpVp7qELs8phohqazxHMkaSIN8LufdIpAhldiLL/A==" } }, - "net8.0-windows7.0/win-x64": {} + "net10.0-windows7.0/win-x64": {} } } \ No newline at end of file diff --git a/tools/Wisp.MpvOfflineDecodeProbe/README.md b/tools/Wisp.MpvOfflineDecodeProbe/README.md index 94fff955..1f9f01de 100644 --- a/tools/Wisp.MpvOfflineDecodeProbe/README.md +++ b/tools/Wisp.MpvOfflineDecodeProbe/README.md @@ -67,7 +67,7 @@ dotnet build tools/Wisp.MpvOfflineDecodeProbe/Wisp.MpvOfflineDecodeProbe.csproj $probeSource = Join-Path $env:LOCALAPPDATA 'Wisp/Clips/29e58a5054f547e7b7fc7535c16252da.mp4' $probeDependency = Join-Path $PWD 'work/clips-short-save-20261001/mpv-dependency/verified' $probeOutput = Join-Path $PWD 'work/clips-short-save-20261001/mpv-headless-01' -& tools/Wisp.MpvOfflineDecodeProbe/bin/Release/net8.0-windows/Wisp.MpvOfflineDecodeProbe.exe --source $probeSource --dependency $probeDependency --output $probeOutput +& tools/Wisp.MpvOfflineDecodeProbe/bin/Release/net10.0-windows/Wisp.MpvOfflineDecodeProbe.exe --source $probeSource --dependency $probeDependency --output $probeOutput ``` ## Source-backed rationale and remaining distribution work diff --git a/tools/Wisp.MpvOfflineDecodeProbe/Wisp.MpvOfflineDecodeProbe.csproj b/tools/Wisp.MpvOfflineDecodeProbe/Wisp.MpvOfflineDecodeProbe.csproj index f4055045..98d49def 100644 --- a/tools/Wisp.MpvOfflineDecodeProbe/Wisp.MpvOfflineDecodeProbe.csproj +++ b/tools/Wisp.MpvOfflineDecodeProbe/Wisp.MpvOfflineDecodeProbe.csproj @@ -1,7 +1,7 @@ Exe - net8.0-windows + net10.0-windows x64 true Wisp.MpvOfflineDecodeProbe diff --git a/tools/Wisp.MpvOfflineDecodeProbe/packages.lock.json b/tools/Wisp.MpvOfflineDecodeProbe/packages.lock.json index 2d14cd18..fe5cb8c9 100644 --- a/tools/Wisp.MpvOfflineDecodeProbe/packages.lock.json +++ b/tools/Wisp.MpvOfflineDecodeProbe/packages.lock.json @@ -1,7 +1,7 @@ { "version": 2, "dependencies": { - "net8.0-windows7.0": {}, - "net8.0-windows7.0/win-x64": {} + "net10.0-windows7.0": {}, + "net10.0-windows7.0/win-x64": {} } } \ No newline at end of file diff --git a/tools/Wisp.SupplementaryContractProbe/Wisp.SupplementaryContractProbe.csproj b/tools/Wisp.SupplementaryContractProbe/Wisp.SupplementaryContractProbe.csproj index 970df641..93522dc1 100644 --- a/tools/Wisp.SupplementaryContractProbe/Wisp.SupplementaryContractProbe.csproj +++ b/tools/Wisp.SupplementaryContractProbe/Wisp.SupplementaryContractProbe.csproj @@ -1,7 +1,7 @@ Exe - net8.0-windows + net10.0-windows false diff --git a/tools/Wisp.SymbolCatalog/Wisp.SymbolCatalog.csproj b/tools/Wisp.SymbolCatalog/Wisp.SymbolCatalog.csproj index b89d9f36..d022bf5a 100644 --- a/tools/Wisp.SymbolCatalog/Wisp.SymbolCatalog.csproj +++ b/tools/Wisp.SymbolCatalog/Wisp.SymbolCatalog.csproj @@ -1,6 +1,6 @@ - net8.0 + net10.0 Exe diff --git a/tools/Wisp.SymbolCatalog/packages.lock.json b/tools/Wisp.SymbolCatalog/packages.lock.json index 6c13474f..0f43b377 100644 --- a/tools/Wisp.SymbolCatalog/packages.lock.json +++ b/tools/Wisp.SymbolCatalog/packages.lock.json @@ -1,7 +1,7 @@ { "version": 2, "dependencies": { - "net8.0": {}, - "net8.0/win-x64": {} + "net10.0": {}, + "net10.0/win-x64": {} } } \ No newline at end of file diff --git a/tools/Wisp.UiReview/README.md b/tools/Wisp.UiReview/README.md index f8ca75fd..20ecd64d 100644 --- a/tools/Wisp.UiReview/README.md +++ b/tools/Wisp.UiReview/README.md @@ -1,6 +1,6 @@ # Wisp UI review -Windows/.NET 8 WPF console harness; no extra NuGet dependencies. Rebuild after UI changes. This project references the real `Wisp.App` project but is not part of the application or installer. +Windows/.NET 10 WPF console harness; no extra NuGet dependencies. Rebuild after UI changes. This project references the real `Wisp.App` project but is not part of the application or installer. `--lap-review-check` reviews the actual expanded Lap review on the Runs page using two synthetic completed laps. It captures controls, speed and brake maps, the speed graph, and a selected section at 980x750 and 720x440, plus the empty disabled state. `lap-review.json` records binding and text-overflow findings. Fixtures stay in memory; this path creates no controller, opens no window or UDP listener, and reads no real settings or saved runs. The shared checks also run in the existing `WpfStyleRuntimeTests` STA stage. Run the visual checks only when the live game session has ended. diff --git a/tools/Wisp.UiReview/Wisp.UiReview.csproj b/tools/Wisp.UiReview/Wisp.UiReview.csproj index 4271d1f8..8e24744c 100644 --- a/tools/Wisp.UiReview/Wisp.UiReview.csproj +++ b/tools/Wisp.UiReview/Wisp.UiReview.csproj @@ -1,7 +1,7 @@ Exe - net8.0-windows + net10.0-windows true Wisp.UiReview Wisp.UiReview diff --git a/tools/Wisp.UiReview/packages.lock.json b/tools/Wisp.UiReview/packages.lock.json index 414543e0..52b2c5e5 100644 --- a/tools/Wisp.UiReview/packages.lock.json +++ b/tools/Wisp.UiReview/packages.lock.json @@ -1,7 +1,7 @@ { "version": 2, "dependencies": { - "net8.0-windows7.0": { + "net10.0-windows7.0": { "Wisp": { "type": "Project", "dependencies": { @@ -37,6 +37,6 @@ "contentHash": "U8SHuJr8eAC3x4+gEtOJD2heReo0tTWP3v21NunYNTzjmHpVp7qELs8phohqazxHMkaSIN8LufdIpAhldiLL/A==" } }, - "net8.0-windows7.0/win-x64": {} + "net10.0-windows7.0/win-x64": {} } } \ No newline at end of file From fd7260b75d814eaed857032dbed61c16b909c2e9 Mon Sep 17 00:00:00 2001 From: Views2k <292889387+Views2k@users.noreply.github.com> Date: Wed, 21 Oct 2026 07:09:21 -0500 Subject: [PATCH 2/2] Keep the 10.0.13 runtime notices out of whitespace checks The published notices file ends with a blank line and is hash-verified, so treat it like the other upstream license files. --- .gitattributes | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitattributes b/.gitattributes index 7deeb301..aec970b8 100644 --- a/.gitattributes +++ b/.gitattributes @@ -20,7 +20,7 @@ # Preserve authoritative runtime notice bytes exactly as published. /LICENSES/dotnet-runtime-10.0.13-LICENSE.txt -text whitespace=cr-at-eol -/LICENSES/dotnet-runtime-10.0.13-THIRD-PARTY-NOTICES.txt -text whitespace=cr-at-eol +/LICENSES/dotnet-runtime-10.0.13-THIRD-PARTY-NOTICES.txt -text -whitespace /LICENSES/windowsdesktop-runtime-10.0.13-LICENSE.txt -text whitespace=cr-at-eol # These upstream files are hash-verified and must retain original bytes/spacing.