diff --git a/.gitignore b/.gitignore index afbcbdb..4753953 100644 --- a/.gitignore +++ b/.gitignore @@ -28,7 +28,6 @@ uninstall.bat # Local worktrees and planning docs .worktrees/ -docs/superpowers/plans/ /FINAL_RELEASE_PLAN*.md /RELEASE_PLAN*.md /LOCAL_VALIDATION*.md diff --git a/Installer/Installer.iss b/Installer/Installer.iss deleted file mode 100644 index 098a884..0000000 --- a/Installer/Installer.iss +++ /dev/null @@ -1,75 +0,0 @@ -; ThreadPilot installer script (Inno Setup) -; Requires Inno Setup to build the installer. Adjust MyAppVersion/MyAppBuildDir as needed. - -#define MyAppName "ThreadPilot" -#define MyAppPublisher "ThreadPilot" -#define MyAppURL "https://github.com/" -#define MyAppExeName "ThreadPilot.exe" -#define MyAppVersion "1.7.8" - -#ifndef MyWizardStyle - #define MyWizardStyle "modern dynamic windows11" -#endif - -; Point this to the folder containing the published binaries (e.g. dotnet publish -c Release -r win-x64) -#ifndef MyAppBuildDir - #define MyAppBuildDir "..\\publish" -#endif - -[Setup] -AppId={{A2A4C8B5-4A9A-4B1B-93F4-5F8B1C7E8C2A} -AppName={#MyAppName} -AppVersion={#MyAppVersion} -AppVerName={#MyAppName} -AppPublisher={#MyAppPublisher} -AppPublisherURL={#MyAppURL} -AppSupportURL={#MyAppURL} -AppUpdatesURL={#MyAppURL} -DefaultDirName={autopf}\{#MyAppName} -UninstallDisplayIcon={app}\{#MyAppExeName} -ArchitecturesAllowed=x64compatible -ArchitecturesInstallIn64BitMode=x64compatible -DefaultGroupName={#MyAppName} -AllowNoIcons=yes -PrivilegesRequiredOverridesAllowed=dialog -OutputBaseFilename=ThreadPilot_Setup -SetupIconFile=..\assets\icons\ico.ico -SolidCompression=yes -WizardStyle={#MyWizardStyle} - -[Languages] -Name: "english"; MessagesFile: "compiler:Default.isl" - -[Tasks] -Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked - -[Files] -Source: "{#MyAppBuildDir}\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; BeforeInstall: KillRunningInstance() - -[Icons] -Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}" -Name: "{autodesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon - -[Run] -Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent - -[UninstallRun] -Filename: "taskkill.exe"; Parameters: "/IM ""{#MyAppExeName}"" /F"; Flags: runhidden waituntilterminated; RunOnceId: "UninstallKill" -Filename: "schtasks.exe"; Parameters: "/Delete /TN ""ThreadPilot_Launch"" /F"; Flags: runhidden waituntilterminated; RunOnceId: "UninstallRemoveThreadPilotLaunchTask" -Filename: "schtasks.exe"; Parameters: "/Delete /TN ""ThreadPilot_Startup"" /F"; Flags: runhidden waituntilterminated; RunOnceId: "UninstallRemoveThreadPilotStartupTask" -Filename: "reg.exe"; Parameters: "delete ""HKCU\Software\Microsoft\Windows\CurrentVersion\Run"" /v ""ThreadPilot"" /f"; Flags: runhidden waituntilterminated; RunOnceId: "UninstallRemoveThreadPilotRunEntry" - -; ThreadPilot user data is preserved during install/update and removed only when -; the generated uninstaller runs. Per-user AppData cleanup is limited to the -; account context used by uninstall. -[UninstallDelete] -Type: filesandordirs; Name: "{userappdata}\ThreadPilot" - -[Code] - -procedure KillRunningInstance(); -var - ResultCode: Integer; -begin - Exec('taskkill.exe', '/IM "{#MyAppExeName}" /F', '', SW_HIDE, ewWaitUntilTerminated, ResultCode); -end; diff --git a/Installer/ThreadPilot.wxs b/Installer/ThreadPilot.wxs deleted file mode 100644 index 656cb30..0000000 --- a/Installer/ThreadPilot.wxs +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/README.md b/README.md index a2595c2..91c6e20 100644 --- a/README.md +++ b/README.md @@ -205,7 +205,6 @@ Build release artifacts with the project script: - [`docs/PRIVACY.md`](docs/PRIVACY.md) - [`docs/release/PACKAGING.md`](docs/release/PACKAGING.md) - [`docs/TROUBLESHOOTING.md`](docs/TROUBLESHOOTING.md) -- [`docs/QUALITY_GATES.md`](docs/QUALITY_GATES.md) - [`docs/adr/`](docs/adr/) - [`docs/releases/`](docs/releases/) diff --git a/SECURITY.md b/SECURITY.md deleted file mode 100644 index 9e3de0d..0000000 --- a/SECURITY.md +++ /dev/null @@ -1,3 +0,0 @@ -# Security Policy - -See [docs/SECURITY.md](docs/SECURITY.md) for the full security policy, supported versions, and vulnerability disclosure process. \ No newline at end of file diff --git a/TRADEMARK.md b/TRADEMARK.md deleted file mode 100644 index 3cca89d..0000000 --- a/TRADEMARK.md +++ /dev/null @@ -1,34 +0,0 @@ -# Trademark Policy - -The trademark policy has moved to [docs/legal/TRADEMARK.md](docs/legal/TRADEMARK.md). -# Trademark Policy - -The name "ThreadPilot", the logo, and all branding elements associated with this project -are NOT licensed under the GNU Affero General Public License v3.0. - -## Usage Restrictions - -1. **Project Name**: The name "ThreadPilot" may not be used to endorse or promote - derivative works without explicit written permission from Prime Build. - -2. **Logo and Branding**: The ThreadPilot logo and visual branding elements may not - be used in derivative works or forks without explicit written permission. - -3. **Permitted Uses**: - - Attribution in documentation (e.g., "Based on ThreadPilot") - - Factual references to the original project - - Use in news articles, reviews, and educational content - -4. **Forks and Derivatives**: If you fork or create derivative works, you must: - - Choose a different name for your project - - Create your own branding and logo - - Clearly indicate that your project is a fork/derivative - -## Contact - -For trademark inquiries or permission requests, please contact the project maintainers -through the official GitHub repository. - ---- - -Copyright (C) 2025 Prime Build. All rights reserved. diff --git a/Tests/ThreadPilot.Core.Tests/PackagingMetadataTests.cs b/Tests/ThreadPilot.Core.Tests/PackagingMetadataTests.cs index 734b5d6..680f89b 100644 --- a/Tests/ThreadPilot.Core.Tests/PackagingMetadataTests.cs +++ b/Tests/ThreadPilot.Core.Tests/PackagingMetadataTests.cs @@ -8,25 +8,16 @@ public sealed partial class PackagingMetadataTests private const string ReleaseAssemblyVersion = "1.7.8.0"; [Fact] - public void InnoInstallers_UseStableDisplayNameAndSeparateVersionMetadata() + public void InnoInstaller_UsesStableDisplayNameAndSeparateVersionMetadata() { var root = FindRepositoryRoot(); - var installerScripts = new[] - { - Path.Combine(root, "Installer", "setup.iss"), - Path.Combine(root, "Installer", "Installer.iss"), - }; - - foreach (var scriptPath in installerScripts) - { - var script = File.ReadAllText(scriptPath); + var script = File.ReadAllText(Path.Combine(root, "Installer", "setup.iss")); - Assert.Contains("AppName={#MyAppName}", script, StringComparison.Ordinal); - Assert.Contains("AppVersion={#MyAppVersion}", script, StringComparison.Ordinal); - Assert.Contains("AppVerName={#MyAppName}", script, StringComparison.Ordinal); - Assert.DoesNotContain("AppVerName={#MyAppName} {#MyAppVersion}", script, StringComparison.Ordinal); - Assert.Matches(MyAppVersionRegex(), script); - } + Assert.Contains("AppName={#MyAppName}", script, StringComparison.Ordinal); + Assert.Contains("AppVersion={#MyAppVersion}", script, StringComparison.Ordinal); + Assert.Contains("AppVerName={#MyAppName}", script, StringComparison.Ordinal); + Assert.DoesNotContain("AppVerName={#MyAppName} {#MyAppVersion}", script, StringComparison.Ordinal); + Assert.Matches(MyAppVersionRegex(), script); } [Fact] @@ -114,10 +105,8 @@ public void VersionMetadata_IsBumpedToReleaseVersion() AssertFileContains(Path.Combine(root, "ThreadPilot.csproj"), $"{ReleaseAssemblyVersion}"); AssertFileContains(Path.Combine(root, "ThreadPilot.csproj"), $"{ReleaseVersion}"); AssertFileContains(Path.Combine(root, "app.manifest"), $"version=\"{ReleaseAssemblyVersion}\""); - AssertFileContains(Path.Combine(root, "Installer", "ThreadPilot.wxs"), $"Version=\"{ReleaseAssemblyVersion}\""); AssertFileContains(Path.Combine(root, "chocolatey", "threadpilot.nuspec"), $"{ReleaseVersion}"); AssertFileContains(Path.Combine(root, "chocolatey", "threadpilot.nuspec"), $"releases/tag/v{ReleaseVersion}"); - AssertFileContains(Path.Combine(root, "sonar-project.properties"), $"sonar.projectVersion={ReleaseVersion}"); AssertFileContains(Path.Combine(root, "build", "build-release.ps1"), $"[string]$Version = \"{ReleaseVersion}\""); AssertFileContains(Path.Combine(root, "build", "build-installer.ps1"), $"[string]$Version = \"{ReleaseVersion}\""); AssertFileContains(Path.Combine(root, "build", "package-release-zips.ps1"), $"[string]$Version = \"{ReleaseVersion}\""); diff --git a/assets/README.md b/assets/README.md deleted file mode 100644 index c958809..0000000 --- a/assets/README.md +++ /dev/null @@ -1,8 +0,0 @@ -# Assets - -This folder is reserved for project assets used in documentation, branding, and release packaging. - -Suggested subfolders: -- screenshots/ -- icons/ -- branding/ diff --git a/build/close-secret-scanning-alerts.ps1 b/build/close-secret-scanning-alerts.ps1 deleted file mode 100644 index 874c99a..0000000 --- a/build/close-secret-scanning-alerts.ps1 +++ /dev/null @@ -1,119 +0,0 @@ -param( - [Parameter(Mandatory = $true)] - [string]$Repository, - - [ValidateSet('false_positive', 'used_in_tests', 'wont_fix', 'revoked', 'pattern_deleted')] - [string]$Resolution = 'used_in_tests', - - [string]$ResolutionComment = 'Scanner vendor artifacts were removed from repository; resolving historical false positives in fix-forward mode.', - - [switch]$Apply -) - -Set-StrictMode -Version Latest -$ErrorActionPreference = 'Stop' - -function Invoke-GhApiJson { - param( - [Parameter(Mandatory = $true)] - [string]$Endpoint, - - [string]$Method = 'GET', - - [hashtable]$Fields - ) - - $args = @('api', '-X', $Method, '-H', 'Accept: application/vnd.github+json', $Endpoint) - if ($Fields) { - foreach ($entry in $Fields.GetEnumerator()) { - $args += '-f' - $args += ('{0}={1}' -f $entry.Key, $entry.Value) - } - } - - $raw = (& gh @args 2>&1 | Out-String).Trim() - if ($LASTEXITCODE -ne 0) { - throw "gh api call failed for '$Endpoint'. Output: $raw" - } - - if ([string]::IsNullOrWhiteSpace($raw)) { - return $null - } - - try { - return $raw | ConvertFrom-Json - } - catch { - throw "Unable to parse gh api JSON response for '$Endpoint'. Raw output: $raw" - } -} - -if (-not (Get-Command gh -ErrorAction SilentlyContinue)) { - throw 'GitHub CLI (gh) is required. Install gh and authenticate with a token that has repo + security_events scope.' -} - -$repoPattern = '^[^/]+/[^/]+$' -if ($Repository -notmatch $repoPattern) { - throw "Repository must be in 'owner/name' format. Received: $Repository" -} - -Write-Host "Repository: $Repository" -Write-Host "Resolution: $Resolution" -Write-Host "Mode: $([bool]$Apply ? 'APPLY' : 'DRY-RUN')" - -$openAlerts = @() -$page = 1 -$perPage = 100 - -while ($true) { - $endpoint = "/repos/$Repository/secret-scanning/alerts?state=open&per_page=$perPage&page=$page" - $batch = Invoke-GhApiJson -Endpoint $endpoint - - if (-not $batch -or $batch.Count -eq 0) { - break - } - - $openAlerts += $batch - if ($batch.Count -lt $perPage) { - break - } - - $page += 1 -} - -if ($openAlerts.Count -eq 0) { - Write-Host 'No open secret scanning alerts found.' - exit 0 -} - -Write-Host "Open alerts found: $($openAlerts.Count)" - -$summary = $openAlerts | - Select-Object number, secret_type, state, created_at, html_url | - Sort-Object number - -$summary | Format-Table -AutoSize - -if (-not $Apply) { - Write-Host '' - Write-Host 'Dry-run only. Re-run with -Apply to resolve all open alerts listed above.' - exit 0 -} - -$resolved = 0 -foreach ($alert in $openAlerts) { - $alertNumber = $alert.number - $patchEndpoint = "/repos/$Repository/secret-scanning/alerts/$alertNumber" - - Invoke-GhApiJson -Endpoint $patchEndpoint -Method 'PATCH' -Fields @{ - state = 'resolved' - resolution = $Resolution - resolution_comment = $ResolutionComment - } | Out-Null - - $resolved += 1 - Write-Host "Resolved alert #$alertNumber" -} - -Write-Host '' -Write-Host "Completed. Resolved alerts: $resolved" diff --git a/build/create-github-release.ps1 b/build/create-github-release.ps1 deleted file mode 100644 index 0ac655f..0000000 --- a/build/create-github-release.ps1 +++ /dev/null @@ -1,68 +0,0 @@ -param( - [Parameter(Mandatory = $true)] - [string]$Version, - [string]$NotesFile = "docs/release/RELEASE_NOTES.md", - [switch]$Draft, - [switch]$Prerelease -) - -$ErrorActionPreference = "Stop" - -function Assert-CommandAvailable { - param([string]$CommandName) - - if (-not (Get-Command $CommandName -ErrorAction SilentlyContinue)) { - throw "Required command '$CommandName' was not found in PATH." - } -} - -$scriptRoot = Split-Path -Parent $PSCommandPath -$projectRoot = Split-Path -Parent $scriptRoot -Set-Location -LiteralPath $projectRoot - -Assert-CommandAvailable -CommandName "gh" - -$tag = if ($Version.StartsWith("v", [StringComparison]::OrdinalIgnoreCase)) { $Version } else { "v$Version" } - -$notesPath = Join-Path $projectRoot $NotesFile -if (-not (Test-Path -LiteralPath $notesPath)) { - throw "Release notes file not found: $notesPath" -} - -$artifacts = @() -$artifacts += Get-ChildItem "artifacts/release/packages" -File -ErrorAction SilentlyContinue -$artifacts += Get-ChildItem "artifacts/release/installer" -File -Include *.exe -ErrorAction SilentlyContinue - -$checksums = Join-Path $projectRoot "artifacts/release/SHA256SUMS.txt" -if (Test-Path -LiteralPath $checksums) { - $artifacts += Get-Item -LiteralPath $checksums -} - -if (-not $artifacts -or $artifacts.Count -eq 0) { - throw "No release artifacts found under artifacts/release." -} - -$artifactArgs = @() -foreach ($artifact in $artifacts) { - $artifactArgs += $artifact.FullName -} - -$releaseArgs = @("release", "create", $tag) -$releaseArgs += $artifactArgs -$releaseArgs += @("--notes-file", $notesPath) - -if ($Draft) { - $releaseArgs += "--draft" -} - -if ($Prerelease) { - $releaseArgs += "--prerelease" -} - -Write-Host "Creating GitHub release $tag with $($artifacts.Count) artifact(s)..." -& gh @releaseArgs -if ($LASTEXITCODE -ne 0) { - throw "gh release create failed with exit code $LASTEXITCODE" -} - -Write-Host "Release created successfully: $tag" -ForegroundColor Green diff --git a/build/repo-cleanup.ps1 b/build/repo-cleanup.ps1 deleted file mode 100644 index 9a441e3..0000000 --- a/build/repo-cleanup.ps1 +++ /dev/null @@ -1,33 +0,0 @@ -param( - [switch]$DryRun -) - -$ErrorActionPreference = "Stop" - -$targets = @( - ".kilo", - ".roo", - ".cursor", - "__pycache__" -) - -$checkpointTargets = Get-ChildItem -Path . -Directory -Force -ErrorAction SilentlyContinue | Where-Object { $_.Name -like "checkpoint*" } -$pathsToRemove = @() -$pathsToRemove += $targets -$pathsToRemove += ($checkpointTargets | ForEach-Object { $_.FullName }) - -foreach ($target in $pathsToRemove) { - if (-not (Test-Path -LiteralPath $target)) { - continue - } - - if ($DryRun) { - Write-Host "[DryRun] Would remove: $target" - continue - } - - Remove-Item -LiteralPath $target -Recurse -Force - Write-Host "Removed: $target" -} - -Write-Host "Repository cleanup completed." -ForegroundColor Green diff --git a/build/submit-winget-pr.ps1 b/build/submit-winget-pr.ps1 index 1a0394c..2881bf4 100644 --- a/build/submit-winget-pr.ps1 +++ b/build/submit-winget-pr.ps1 @@ -102,7 +102,7 @@ try { & git commit -m "Add $PackageIdentifier version $Version" & git push -u origin $branch --force - $existingPr = (& gh pr list --repo microsoft/winget-pkgs --state open --head "$ForkOwner`:$branch" --json number | Out-String).Trim() + $existingPr = (& gh pr list --repo microsoft/winget-pkgs --state open --head $branch --author $ForkOwner --json number | Out-String).Trim() if (-not [string]::IsNullOrWhiteSpace($existingPr) -and $existingPr -ne '[]') { Write-Host "Winget PR already exists for branch $branch." exit 0 diff --git a/chocolatey/cd b/chocolatey/cd deleted file mode 100644 index e69de29..0000000 diff --git a/chocolatey/choco b/chocolatey/choco deleted file mode 100644 index e69de29..0000000 diff --git a/docs/HANDOFF.md b/docs/HANDOFF.md deleted file mode 100644 index a8c026a..0000000 --- a/docs/HANDOFF.md +++ /dev/null @@ -1,30 +0,0 @@ -# Handoff ThreadPilot — 2026-10-16 - -## Due canali richiesti - -- **v1.7.7 stable:** EcoQoS, affidabilità regole/backup e redesign UI. Nessun Game Boost né correzioni aggiuntive della topologia introdotte con quel lavoro. Note: `docs/releases/v1.7.7.md`. -- **v1.7.8-beta.1:** tutto il codice locale Game Boost, comprese le modifiche Attività del 15 ottobre, più le correzioni Intel P/E e gruppi L3/CCD AMD. Deve restare pre-release, senza sostituire la stable/latest o pubblicare su winget/Chocolatey. - -La versione combinata preparata prima della separazione è conservata nel commit `ef2ec24`. Non era stata pubblicata come v1.7.7-beta.2. La #67 consegna la stable senza Game Boost; la beta ripristina esattamente il codice runtime Game Boost di `6c36ea6` sopra la stable, con metadati separati. Note pubbliche e istruzioni tester: `docs/releases/v1.7.8-beta.1.md`. Il proprietario ha autorizzato il merge amministratore come PrimeBuild-pc dopo CI/CodeQL verdi. - -## CI e validazione - -Server 2022 build 20348 rifiuta GetProcessInformation(ProcessPowerThrottling) con errore 87 sia con query limitata sia completa. I job con test nativi e smoke usano Server 2025, coerente con il target Windows 11. Il round-trip EcoQoS reale resta attivo e passa. La conferma hardware EcoQoS di SA-Mousavichashmi nella #66 non equivale alla validazione Game Boost. - -Il codice combinato Game Boost ha superato 851 test Release, CI DevSecOps, CodeQL, audit dipendenze/Gitleaks; installer/portable locali e smoke test single-file riusciti. Eseguire i controlli anche sui due commit finali separati. - -## Game Boost: cosa manca - -- Hardware reale Ryzen dual-CCD X3D, AMD a CCD uguali e Intel ibride supportate. -- Interazioni con parcheggio core/driver AMD; giochi protetti e anti-cheat reali. -- Benchmark comparabili ripetuti: FPS medi, 1% low, P95/P99 frame time e varianza, con/senza background e Above Normal. - -QA precedente: Ryzen 7 5800X3D single-CCD e VM Windows 11 pulita per impostazioni/sessioni/priorità/ripristino. Il test nativo CPU Sets usa chiamate Windows vere ma topologia dual-L3 simulata. Il comportamento sul vero hardware multi-CCD resta da verificare. Ripiego conservativo se il lato gioco ha meno di sei core fisici. - -## Verifica pubblicazione - -Consultare GitHub per lo stato effettivo: `gh pr list`, `gh run list`, `gh release view v1.7.7`, `gh release view v1.7.8-beta.1`. - -I tag devono puntare ai rispettivi commit integrati e testati. Verificare installer/portable/SHA256 e smoke test di ogni canale. La latest deve restare v1.7.7 dopo la pubblicazione della beta. I binari sono ancora unsigned. Pulire solo i branch della pila e Game Boost a integrazione conclusa, senza toccare altri worktree/lavori. - -Fine riga misti: confrontare `git diff --numstat` con `git diff --ignore-cr-at-eol --numstat`. Sette lingue in `Locales/*.xaml`, stesse chiavi e contratti XAML nei test. Altri riferimenti: `docs/IMPLEMENTATION_PLAN.md`, `docs/UX_REDESIGN_PLAN.md`, `docs/release/RELEASE_RUNBOOK.md`. diff --git a/docs/IMPLEMENTATION_PLAN.md b/docs/IMPLEMENTATION_PLAN.md deleted file mode 100644 index e24e768..0000000 --- a/docs/IMPLEMENTATION_PLAN.md +++ /dev/null @@ -1,29 +0,0 @@ -# Miglioramenti ThreadPilot — 12 ottobre 2026 - -Base: main `70b7f6d` (PR #65). Piano approvato da Lorenzo; implementazione locale sul branch `codex/ux-rules-reliability`. - -## Ordine di esecuzione - -- [x] 1. Backup completo: esportare anche le regole persistenti, mantenere compatibilità con i backup precedenti, validare prima di applicare, mostrare il riepilogo delle sostituzioni e ripristinare in caso di errore. -- [x] 2. Regole coerenti: precedenza deterministica, elenco delle corrispondenze e avviso dei conflitti; usare la stessa selezione nel motore e nel riepilogo. -- [x] 3. Processi: elenco con colonne opzionali, pannello dettagli adattivo, priorità CPU/memoria/I/O visibili, comandi applica/salva chiari, sezione avanzata chiusa inizialmente, contatore comprensibile. -- [x] 4. Editor: distinguere automazioni energetiche e impostazioni dei processi; preparare tutte le modifiche e salvarle insieme; segnalare modifiche pendenti. -- [x] 5. Pausa automazioni: mantenere disponibile il controllo manuale e mostrare un avviso persistente. -- [ ] 6. Accessibilità e lingua: testi operativi leggibili, descrizioni dinamiche localizzate, focus/tastiera, etichette e layout ridimensionabile. -- [ ] 7. Ripristino: annullare le modifiche manuali di priorità sullo stesso processo; per i tweak indicare ambito, riavvio e comportamento di ripristino, usando i backup esistenti. -- [ ] 8. Reattività: misurare startup/consumi, eliminare le attese sincrone evitabili nell'avvio conservando elevazione, istanza unica e gestione errori; mantenere la sospensione degli aggiornamenti nascosti. -- [ ] 9. Verifica finale: test mirati, suite completa, build Debug/Release, formattazione, controllo XAML/localizzazioni e misure ripetibili; documentare limiti del collaudo grafico. - -## Ambito e cautele - -Servizi di persistenza/regole, view model e viste Processi/Regole/Impostazioni/Tweak, startup, dizionari delle sette lingue e relativi test. Nessuna nuova dipendenza o migrazione del framework. Importazioni e rollback devono preservare i dati; i comandi di ripristino non devono agire su PID riutilizzati. Le precedenze nuove devono essere visibili e testate. - -## Pulizia e verifica - -Sostituito `IMPROVE_APP_PERFORMANCE_PLAN.md`, relativo alle release 1.4.3 e PR #35/#36 ormai superate. Le ottimizzazioni già presenti (cache regole, caricamento pagine differito, aggiornamenti sospesi in tray) vengono conservate. Vecchia misura storica: tray 0,0000% CPU nel campione, 140,24 MB working set, zero processi figli; non è una baseline dell'attuale macchina/versione. Documenti di release e licenze restano documentazione storica, non piani da cancellare. - -## Risultati - -- 1–2: PR backup + precedenza regole (schema 3.0, test `ConfigurationBackupTests`, `PersistentRuleResolutionTests`). -- 3–5: PR interfaccia Processi/Regole: editor priorità con "Applica", annulla ultima priorità (protetto contro PID riutilizzati), modifiche pendenti nell'editor regole, controllo manuale disponibile con automazione in pausa. Il selettore core resta aperto: è la funzione principale. -- 6–9: rimandati al redesign UX (vedi `docs/UX_REDESIGN_PLAN.md`) e alla verifica finale. diff --git a/docs/QUALITY_GATES.md b/docs/QUALITY_GATES.md deleted file mode 100644 index 872b143..0000000 --- a/docs/QUALITY_GATES.md +++ /dev/null @@ -1,53 +0,0 @@ -# Release Quality Gates - -This document defines Go/No-Go gates for ThreadPilot releases. - -## Gate Checklist - -| Gate | Criteria | Owner | Status | -|---|---|---|---| -| Build integrity | Release build succeeds with no blocking errors | CI/CD | Complete | -| Core automated tests | `Tests/ThreadPilot.Core.Tests` passes on Release config | QA | Complete | -| Coverage gate | CI parses Cobertura and fails below the active threshold | QA | Complete | -| Dependency security | No Critical/High vulnerabilities from dotnet audit | Security | Complete | -| Secret hygiene | Gitleaks scan has no active findings | Security | Complete | -| Performance baseline | Idle tray footprint collected and archived | Performance | Complete | -| Packaging | Installer + release zips + checksums + packaging evidence generated | Release Eng | Complete | -| Documentation | Release notes, runbook, changelog updated | Tech Writer | Complete | -| Compatibility | Smoke test on Windows 11 and Windows 10 best-effort | QA | Deferred (release candidate pass) | - -## Mandatory Commands - -```powershell -dotnet restore ThreadPilot_1.sln -dotnet build ThreadPilot_1.sln --configuration Release --no-restore -dotnet test Tests/ThreadPilot.Core.Tests/ThreadPilot.Core.Tests.csproj --configuration Release --no-restore --collect:"XPlat Code Coverage" --settings "Tests/ThreadPilot.Core.Tests/coverlet.runsettings" --results-directory TestResults -dotnet list ThreadPilot.csproj package --vulnerable --include-transitive -``` - -## Coverage Scope - -- The coverage badge tracks business/application code. -- Generated build artifacts are excluded via `coverlet.runsettings`. -- Legacy runtime harness files under `Tests/*.cs` are not part of the CI coverage contract. - -## Active Coverage Threshold - -The repository now uses a real Cobertura-parsed gate in CI. - -- Transitional threshold: `1.5%` line coverage -- Reason: this matches the current honest baseline while service coverage is still being expanded -- Planned ratchet: raise progressively as additional deterministic service tests land - -## Go/No-Go Rule - -Release can proceed only when all gates are marked complete or explicitly waived with a written risk note. - -## Evidence Snapshot (2026-04-21) - -- Build: `dotnet build ThreadPilot_1.sln --configuration Release --no-restore` (success in CI release path). -- Tests: `dotnet test Tests/ThreadPilot.Core.Tests/ThreadPilot.Core.Tests.csproj --configuration Release --collect:"XPlat Code Coverage" --settings "Tests/ThreadPilot.Core.Tests/coverlet.runsettings"` (`45` passed, `0` failed in the current hardening branch). -- Coverage: Cobertura from the current hardening branch is `7.52%` line / `5.50%` branch and is enforced by CI against the transitional `1.5%` line gate. -- Dependency security: `dotnet list ThreadPilot.csproj package --vulnerable --include-transitive` (no vulnerable packages). -- Secret hygiene: local gitleaks run, report `docs/audits/GITLEAKS_REPORT_2026-04-15.json` (no leaks). -- Packaging: installer/packages/checksums plus winget/chocolatey evidence artifacts generated in `artifacts/release/` / workflow artifacts. diff --git a/docs/README.md b/docs/README.md index 094ae98..1a86a4a 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,33 +1,22 @@ -# Documentation - -This folder contains release and engineering documentation for ThreadPilot. - -## Core Documents -- Architecture: reference/ARCHITECTURE_GUIDE.md -- API reference: reference/API_REFERENCE.md -- Developer guide: reference/DEVELOPER_GUIDE.md -- Project structure: reference/PROJECT_STRUCTURE.md -- UI style guide: reference/UI_STYLE_GUIDE.md -- Advanced CPU features: reference/ADVANCED_CPU_FEATURES.md -- Game boost validation: reference/GAME_BOOST_VALIDATION.md -- Exception handling policy: reference/EXCEPTION_HANDLING_POLICY.md -- Safe Win32 interop examples: reference/SAFE_WIN32_INTEROP_EXAMPLES.md -- Performance guide: reference/PERFORMANCE.md -- Development operations guide: reference/DEVELOPMENT.md -- Runtime GC template: reference/runtimeconfig.template.json -- Packaging guide: release/PACKAGING.md -- Release runbook: release/RELEASE_RUNBOOK.md -- Release notes template: release/RELEASE_NOTES_TEMPLATE.md -- Go/No-Go matrix: release/GO_NO_GO_MATRIX.md -- Release signing guide: RELEASE_SIGNING.md -- Code-signing policy: CODE_SIGNING_POLICY.md -- Bundled power-plan licensing audit: POWER_PLAN_LICENSING.md -- Privacy policy: PRIVACY.md - -## Release and Governance -- Gitleaks scan report: audits/GITLEAKS_REPORT_2026-04-15.json -- README audit report: audits/README_AUDIT_REPORT_2026-04-15.md - -- Release execution log (2026-04-15): release/RELEASE_EXECUTION_LOG_2026-04-15.md -## Migration Note -Repository documentation is maintained under docs/ and updated with each release. +# Documentation + +## Contributing +- [Contributing guide](CONTRIBUTING.md) +- [Code of conduct](CODE_OF_CONDUCT.md) +- [Architecture decisions](adr/) + +## Users +- [Troubleshooting](TROUBLESHOOTING.md) +- [In-app updates](UPDATES.md) +- [Privacy](PRIVACY.md) +- [Security policy](SECURITY.md) + +## Releases +- [Changelog](CHANGELOG.md) +- [Release notes per version](releases/) +- [Packaging and distribution](release/PACKAGING.md) +- [Release signing](RELEASE_SIGNING.md) and [code-signing policy](CODE_SIGNING_POLICY.md) + +## Legal +- [Trademark policy](legal/TRADEMARK.md) +- [Bundled power-plan licensing](POWER_PLAN_LICENSING.md) diff --git a/docs/SECURITY.md b/docs/SECURITY.md index b492ce9..475adb8 100644 --- a/docs/SECURITY.md +++ b/docs/SECURITY.md @@ -3,9 +3,8 @@ ## Supported Versions | Version | Supported | | --- | --- | -| 1.1.x | Yes | -| 1.0.x | Best effort | -| < 1.0 | No | +| Latest stable (1.7.x) | Yes | +| Older versions | No, please update | ## Reporting a Vulnerability If you discover a security issue, do not disclose it publicly before a fix is available. diff --git a/docs/UX_REDESIGN_PLAN.md b/docs/UX_REDESIGN_PLAN.md deleted file mode 100644 index 5c75e93..0000000 --- a/docs/UX_REDESIGN_PLAN.md +++ /dev/null @@ -1,33 +0,0 @@ -# Redesign UX — chiarezza (ottobre 2026) - -Branch `feat/ux-clarity`, impilato su #69 (EcoQoS). Nessuna modifica al formato dei dati: regole, impostazioni e backup restano compatibili. - -## Problemi osservati (screenshot dell'app 1.7.6) - -- Menu laterale solo a icone: sette icone senza etichetta. -- Processi: casella di ricerca senza testo guida, nove controlli sparsi nella barra, pannello dettagli come un'unica colonna di etichette e paragrafi, selettori che non mostrano il valore attuale del processo. -- Regole: tre schede e la prima aperta è la meno usata (associazioni dei piani energetici); nell'editor le scelte compaiono come nomi interni (`BelowNormal`, `SystemManaged`). -- Sottotitoli lunghi su quasi tutte le pagine. - -## Regole di stile - -1. Titolo della pagina e al massimo una riga breve; le spiegazioni vanno nei tooltip. -2. Una sezione = un riquadro con un titolo breve. -3. Un solo pulsante principale (accent) per riquadro. -4. I selettori mostrano lo stato attuale; "Applica" agisce solo sul valore cambiato. -5. Etichette leggibili per le persone, mai nomi interni di enum. - -## Interventi - -- [x] Menu laterale aperto con etichette brevi (Processi, Maschere CPU, Piani energetici, Regole, Attività, Ottimizzazioni). -- [x] Processi: ricerca con testo guida; filtri e colonne in due menu a tendina; dettagli in tre riquadri (Processo, Priorità, Core CPU) più la riga della regola; selettori allineati allo stato attuale; testi di aiuto nei tooltip. -- [x] Regole: scheda "Regole dei processi" per prima, nomi delle schede più chiari, etichette localizzate nell'editor. -- [x] Sottotitoli accorciati in tutte le lingue. -- [x] Impostazioni e Ottimizzazioni in una colonna di righe in stile Impostazioni di Windows 11 (titolo e descrizione a sinistra, interruttore a destra); sezioni più usate in alto. -- [x] Avvisi della finestra principale: già mostrati uno alla volta (coda elevazione → avvio ridotto → modalità CPU in `MainWindow.Behaviors.partial.cs`); nessuna modifica necessaria. -- [x] Elenco regole: colonne "Applica" e "Modalità" localizzate. -- [x] Rimosse 76 stringhe non più usate da tutte le lingue. - -## Verifica - -Test XAML esistenti aggiornati dove cambiano i contratti, suite completa, build Debug/Release, screenshot prima/dopo di ogni pagina. diff --git a/docs/release/GO_NO_GO_MATRIX.md b/docs/release/GO_NO_GO_MATRIX.md deleted file mode 100644 index b2d1fa2..0000000 --- a/docs/release/GO_NO_GO_MATRIX.md +++ /dev/null @@ -1,27 +0,0 @@ -# Go/No-Go Decision Matrix - -## Decision Inputs - -| Area | Status | Blocking? | Notes | -|---|---|---|---| -| Build | Complete | Yes | Release build currently passing | -| Tests | Complete | Yes | Core test suite currently green | -| Security scan | Complete | Yes | No vulnerable packages and no secret leaks | -| Packaging | Complete | Yes | Installer, portable zip artifacts and checksums generated | -| winget publication evidence | Complete | Yes | Tagged releases must either submit winget or fail with explicit missing-secret policy | -| Chocolatey validation artifacts | Manual | No | Run the `Publish Chocolatey` workflow with `publish=false` after the GitHub release exists | -| Chocolatey publication evidence | Manual | No | Run `Publish Chocolatey` with `publish=true` only after prior versions clear Chocolatey moderation | -| Documentation | Complete | Yes | Release docs and governance artifacts updated | -| Compatibility smoke tests | Deferred | Yes | Execute on final release candidate | - -## Decision Rule - -- GO: all blocking rows are complete. -- GO for manual dry-run only if publication evidence rows explicitly record `dry-run` and the release is not being treated as public. -- GO for GitHub/winget release does not require Chocolatey evidence because Chocolatey is manually gated by moderation state. -- NO-GO: any blocking row incomplete, unless explicit waiver approved. - -## Waiver Log - -| Date | Area | Approved By | Rationale | Expiry | -|---|---|---|---|---| diff --git a/docs/release/PACKAGING.md b/docs/release/PACKAGING.md index a61fe1e..77c9e2d 100644 --- a/docs/release/PACKAGING.md +++ b/docs/release/PACKAGING.md @@ -263,12 +263,6 @@ Moderation note: - Moderation delay is an external queue, not automatically evidence of a repo or workflow failure. - Do not run the manual publish workflow for a new version while prior ThreadPilot versions are still blocked or pending in Chocolatey moderation. -Optional automation for publishing the GitHub release after artifacts are ready: - -```powershell -./build/create-github-release.ps1 -Version "" -NotesFile "docs/release/RELEASE_NOTES.md" -``` - ## CI/CD The release workflow (`.github/workflows/release.yml`) now builds: diff --git a/docs/release/RELEASE_EXECUTION_LOG_2026-04-15.md b/docs/release/RELEASE_EXECUTION_LOG_2026-04-15.md deleted file mode 100644 index 1a34c56..0000000 --- a/docs/release/RELEASE_EXECUTION_LOG_2026-04-15.md +++ /dev/null @@ -1,30 +0,0 @@ -# Release Execution Log - -Date: 2026-04-15 -Scope: Final one-shot packaging execution after completion of non-packaging phases. - -## Commands Executed - -1. build/build-installer.ps1 -Version 1.1.1 -2. build/package-release-zips.ps1 -Version 1.1.1 -3. SHA256 manifest generation to artifacts/release/SHA256SUMS.txt - -## Result - -- Installer build: success -- Release ZIP packaging: success -- Checksum generation: success - -## Produced Artifacts - -- artifacts/release/installer/ThreadPilot_v1.1.1_Setup.exe -- artifacts/release/packages/ThreadPilot_v1.1.1_Portable.zip -- artifacts/release/packages/ThreadPilot_v1.1.1_Installer.zip -- artifacts/release/SHA256SUMS.txt - -## ZIP Hashes (from packaging output) - -- ThreadPilot_v1.1.1_Portable.zip - - SHA256: F53B0203AFF269C092143B297F1C16D2AAD638B5EB0FB127BC4CA9416591BD5C -- ThreadPilot_v1.1.1_Installer.zip - - SHA256: EBF10BFE4C39317A9CDC41DEE9BA9E80BC10961D887797EC5D824B83DD9440A5 diff --git a/docs/release/RELEASE_NOTES_TEMPLATE.md b/docs/release/RELEASE_NOTES_TEMPLATE.md deleted file mode 100644 index eb3f850..0000000 --- a/docs/release/RELEASE_NOTES_TEMPLATE.md +++ /dev/null @@ -1,52 +0,0 @@ -# ThreadPilot vX.Y.Z Release Notes - -## Highlights - -- Summary bullet 1 -- Summary bullet 2 - -## Added - -- Item - -## Changed - -- Item - -## Fixed - -- Item - -## Security - -- Item - -## Performance - -- Item - -## Breaking Changes - -- None / Item list - -## Installation - -### Installer (Recommended) - -1. Download ThreadPilot_vX.Y.Z_Setup.exe -2. Run installer -3. Launch ThreadPilot from Start menu - -### Portable - -1. Download ThreadPilot_vX.Y.Z_singlefile_win-x64.zip -2. Extract archive -3. Run ThreadPilot.exe - -## Checksums - -See SHA256SUMS.txt in the same release. - -## Known Issues - -- Item / None diff --git a/docs/release/RELEASE_RUNBOOK.md b/docs/release/RELEASE_RUNBOOK.md deleted file mode 100644 index 3b35d51..0000000 --- a/docs/release/RELEASE_RUNBOOK.md +++ /dev/null @@ -1,112 +0,0 @@ -# Release Execution Runbook - -Date: 2026-04-15 - -## Pre-Release (T-48h) - -1. Confirm version in project metadata and release notes draft. -2. Run full build/test/security commands. -3. Confirm quality gates in docs/QUALITY_GATES.md. -4. Prepare release notes from docs/release/RELEASE_NOTES_TEMPLATE.md. - -## Release Build (T-0) - -1. Build installer: - -```powershell -./build/build-installer.ps1 -Version "" -``` - -2. Build ZIP packages: - -```powershell -./build/package-release-zips.ps1 -Version "" -``` - -3. Generate checksums: - -```powershell -$hashFile = "artifacts/release/SHA256SUMS.txt" -if (Test-Path $hashFile) { Remove-Item $hashFile -Force } -Get-ChildItem "artifacts/release" -Recurse -File -Include *.zip,*.exe | -ForEach-Object { - $hash = Get-FileHash $_.FullName -Algorithm SHA256 - "$($hash.Hash) $($_.Name)" | Out-File -FilePath $hashFile -Append -Encoding utf8 -} -``` - -## Publish - -Source-of-truth policy: - -- GitHub release tag and assets are the canonical release source. -- Winget and Chocolatey metadata must reference an existing GitHub release tag and reachable asset URLs. -- Changelog generation in CI must run with runner-native `git-cliff` binary (pinned version + checksum verification), not Docker-based changelog actions. -- Stable tagged releases are public-release mode: missing winget publication secrets are a release blocker, not a silent skip. -- Pre-release tags use matching project metadata, are marked prerelease, leave latest unchanged and skip winget manifests/publication. Do not manually publish the Game Boost beta to Chocolatey. -- Version-specific notes in `docs/releases/.md` take precedence over generated notes for both channels. v1.7.7 is stable without Game Boost; v1.7.8-beta.1 contains the experimental Game Boost implementation. -- `workflow_dispatch` may be run with `dry_run_publish=true` to validate build, assets, summaries, and winget flow without external publication. -- Chocolatey publish is manual only through the `Publish Chocolatey` workflow, after prior ThreadPilot versions clear Chocolatey moderation. -- Every publish channel that runs must leave evidence behind via `GITHUB_STEP_SUMMARY` plus uploaded log artifacts. - -Use script automation (requires authenticated gh CLI): - -```powershell -./build/create-github-release.ps1 -Version "" -NotesFile "docs/release/RELEASE_NOTES.md" -``` - -Manual fallback: - -1. Create tag: `git tag -a v -m "Release v"` -2. Push tag: `git push origin v` -3. Create GitHub release and upload artifacts. - -Package publication prechecks: - -1. Confirm `v` exists in GitHub releases. -2. Confirm installer URL resolves for the exact version. -3. Confirm SHA256 in package metadata matches the published installer. -4. Confirm winget package version matches the GitHub release version. -5. Confirm release workflow changelog step executed successfully with the pinned `git-cliff` version. -6. Confirm release mode is intentional: - - tagged release: winget publish secrets present and winget submission expected - - manual dry run: `dry_run_publish=true` and no external publication expected -7. Confirm the generated winget manifest artifact contains exactly: - - `PrimeBuild.ThreadPilot.yaml` - - `PrimeBuild.ThreadPilot.locale.en-US.yaml` - - `PrimeBuild.ThreadPilot.installer.yaml` -8. Confirm README/download docs still point users to the latest release page or current asset naming contract. - -Publication evidence checklist: - -1. Review the release workflow summary for a channel result line: - - `submitted` for winget - - `dry-run` only for manual dry-run executions -2. Download and inspect the uploaded winget channel logs: - - `winget-submit-log.txt` -3. Treat a tagged release with missing winget evidence as a failed release, even if GitHub release assets were created. - -Chocolatey manual publish checklist: - -1. Confirm previous ThreadPilot package versions have cleared Chocolatey moderation. -2. Run GitHub Actions workflow `Publish Chocolatey` with `tag=v` and `publish=false`. -3. Download and inspect Chocolatey packaging artifacts: - - generated `.nupkg` - - `chocolatey-package-metadata.json` - - `choco-pack-log.txt` -4. If validation is correct and moderation state is clear, rerun `Publish Chocolatey` with `publish=true`. -5. Download and inspect publish artifacts: - - `choco-push-log.txt` - - `chocolatey-publish-metadata.json` - -## Post-Release (T+24h) - -1. Verify downloadable artifacts are accessible. -2. Execute smoke installation on clean environment. -3. Monitor issue tracker for regressions. -4. Document hotfix decisions if needed. -5. Verify package channel discoverability: - Run `winget source update`, then `winget search --id PrimeBuild.ThreadPilot -s winget`. - Run `choco search threadpilot --exact` and confirm moderation state on the package page. - If Chocolatey search is still negative after publish, inspect moderation state before treating it as a release regression. - Archive workflow summaries and publish log artifacts with the release notes if the run required manual follow-up. diff --git a/docs/releases/v1.2.0-checklist.md b/docs/releases/v1.2.0-checklist.md deleted file mode 100644 index cdaf394..0000000 --- a/docs/releases/v1.2.0-checklist.md +++ /dev/null @@ -1,15 +0,0 @@ -# ThreadPilot v1.2.0 Manual Validation Checklist - -- [ ] App starts without binding or startup errors. -- [ ] Process tab loads. -- [ ] Selected-process summary renders. -- [ ] Process tab context menu works. -- [ ] Affinity apply works on a normal single-group machine. -- [ ] CPU Sets clear works or fails safely with user-safe messaging. -- [ ] Memory priority set/read works or fails safely. -- [ ] Save as rule creates or updates a persistent process rule. -- [ ] Process-start auto-apply works while ThreadPilot is running. -- [ ] Protected or anti-cheat process operations fail safely without bypass language. -- [ ] Diagnostics is hidden by default. -- [ ] Startup does not enable performance monitoring or create performance-monitoring cost by default. -- [ ] Release artifacts are still pending manual validation. diff --git a/sonar-project.properties b/sonar-project.properties deleted file mode 100644 index 5283068..0000000 --- a/sonar-project.properties +++ /dev/null @@ -1,14 +0,0 @@ -sonar.projectKey=threadpilot -sonar.projectName=ThreadPilot -sonar.projectVersion=1.7.8 - -sonar.sourceEncoding=UTF-8 -sonar.sources=. -sonar.tests=Tests - -sonar.exclusions=**/bin/**,**/obj/**,**/artifacts/**,**/*.Designer.cs,**/*.g.cs,**/*.g.i.cs -sonar.test.inclusions=Tests/**/*.cs - -# Coverage paths can be generated by dotnet test --collect:"XPlat Code Coverage" -sonar.cs.vscoveragexml.reportsPaths=**/TestResults/**/coverage.cobertura.xml -sonar.cs.opencover.reportsPaths=**/TestResults/**/coverage.opencover.xml diff --git a/winget/manifests/p/PrimeBuild/ThreadPilot/1.1.1/PrimeBuild.ThreadPilot.installer.yaml b/winget/manifests/p/PrimeBuild/ThreadPilot/1.1.1/PrimeBuild.ThreadPilot.installer.yaml deleted file mode 100644 index ab7f3c1..0000000 --- a/winget/manifests/p/PrimeBuild/ThreadPilot/1.1.1/PrimeBuild.ThreadPilot.installer.yaml +++ /dev/null @@ -1,9 +0,0 @@ -PackageIdentifier: PrimeBuild.ThreadPilot -PackageVersion: 1.1.1 -InstallerType: inno -Installers: - - Architecture: x64 - InstallerUrl: {{INSTALLER_URL}} - InstallerSha256: {{INSTALLER_SHA256}} -ManifestType: installer -ManifestVersion: 1.4.0 diff --git a/winget/manifests/p/PrimeBuild/ThreadPilot/1.1.1/PrimeBuild.ThreadPilot.locale.en-US.yaml b/winget/manifests/p/PrimeBuild/ThreadPilot/1.1.1/PrimeBuild.ThreadPilot.locale.en-US.yaml deleted file mode 100644 index 6f6fbcf..0000000 --- a/winget/manifests/p/PrimeBuild/ThreadPilot/1.1.1/PrimeBuild.ThreadPilot.locale.en-US.yaml +++ /dev/null @@ -1,19 +0,0 @@ -PackageIdentifier: PrimeBuild.ThreadPilot -PackageVersion: 1.1.1 -PackageLocale: en-US -Publisher: Prime Build -PublisherUrl: https://github.com/PrimeBuild-pc -PublisherSupportUrl: https://github.com/PrimeBuild-pc/ThreadPilot/issues -PackageName: ThreadPilot -PackageUrl: https://github.com/PrimeBuild-pc/ThreadPilot -License: AGPL-3.0-only -LicenseUrl: https://github.com/PrimeBuild-pc/ThreadPilot/blob/main/LICENSE -ShortDescription: Advanced Windows process and power plan manager. -Description: ThreadPilot is a Process Lasso style utility for process affinity, priority, and power plan automation on Windows. -Tags: - - windows - - process - - power-plan - - performance -ManifestType: defaultLocale -ManifestVersion: 1.4.0 diff --git a/winget/manifests/p/PrimeBuild/ThreadPilot/1.1.1/PrimeBuild.ThreadPilot.yaml b/winget/manifests/p/PrimeBuild/ThreadPilot/1.1.1/PrimeBuild.ThreadPilot.yaml deleted file mode 100644 index 9f33c60..0000000 --- a/winget/manifests/p/PrimeBuild/ThreadPilot/1.1.1/PrimeBuild.ThreadPilot.yaml +++ /dev/null @@ -1,5 +0,0 @@ -PackageIdentifier: PrimeBuild.ThreadPilot -PackageVersion: 1.1.1 -DefaultLocale: en-US -ManifestType: version -ManifestVersion: 1.4.0 diff --git a/winget/manifests/p/PrimeBuild/ThreadPilot/1.1.2/PrimeBuild.ThreadPilot.installer.yaml b/winget/manifests/p/PrimeBuild/ThreadPilot/1.1.2/PrimeBuild.ThreadPilot.installer.yaml deleted file mode 100644 index 9690461..0000000 --- a/winget/manifests/p/PrimeBuild/ThreadPilot/1.1.2/PrimeBuild.ThreadPilot.installer.yaml +++ /dev/null @@ -1,10 +0,0 @@ -PackageIdentifier: PrimeBuild.ThreadPilot -PackageVersion: 1.1.2 -InstallerType: inno -Installers: - - Architecture: x64 - InstallerUrl: https://github.com/PrimeBuild-pc/ThreadPilot/releases/download/v1.1.2/ThreadPilot_v1.1.2_Setup.exe - InstallerSha256: 326864EAD100EDD134F3A41F5D4631FCB1FDF6A689101BB0C2D4B7330B9CF032 -ManifestType: installer -ManifestVersion: 1.5.0 - diff --git a/winget/manifests/p/PrimeBuild/ThreadPilot/1.1.2/PrimeBuild.ThreadPilot.locale.en-US.yaml b/winget/manifests/p/PrimeBuild/ThreadPilot/1.1.2/PrimeBuild.ThreadPilot.locale.en-US.yaml deleted file mode 100644 index de23b3a..0000000 --- a/winget/manifests/p/PrimeBuild/ThreadPilot/1.1.2/PrimeBuild.ThreadPilot.locale.en-US.yaml +++ /dev/null @@ -1,20 +0,0 @@ -PackageIdentifier: PrimeBuild.ThreadPilot -PackageVersion: 1.1.2 -PackageLocale: en-US -Publisher: Prime Build -PublisherUrl: https://github.com/PrimeBuild-pc -PublisherSupportUrl: https://github.com/PrimeBuild-pc/ThreadPilot/issues -PackageName: ThreadPilot -PackageUrl: https://github.com/PrimeBuild-pc/ThreadPilot -License: AGPL-3.0-only -LicenseUrl: https://github.com/PrimeBuild-pc/ThreadPilot/blob/main/LICENSE -ShortDescription: Advanced Windows process and power plan manager. -Description: ThreadPilot is a Process Lasso style utility for process affinity, priority, and power plan automation on Windows. -Tags: - - windows - - process - - power-plan - - performance -ManifestType: defaultLocale -ManifestVersion: 1.5.0 - diff --git a/winget/manifests/p/PrimeBuild/ThreadPilot/1.1.2/PrimeBuild.ThreadPilot.yaml b/winget/manifests/p/PrimeBuild/ThreadPilot/1.1.2/PrimeBuild.ThreadPilot.yaml deleted file mode 100644 index 3414a50..0000000 --- a/winget/manifests/p/PrimeBuild/ThreadPilot/1.1.2/PrimeBuild.ThreadPilot.yaml +++ /dev/null @@ -1,6 +0,0 @@ -PackageIdentifier: PrimeBuild.ThreadPilot -PackageVersion: 1.1.2 -DefaultLocale: en-US -ManifestType: version -ManifestVersion: 1.5.0 -