All notable changes to this project are documented in this file.
- Stable release with everything from v1.7.8-beta.1 and v1.7.8-beta.2.
- Game Boost (off by default): game/background CPU Sets, high QoS for the game, EcoQoS for listed background apps in Isolation, dynamic release under heavy load, a minimal-rights game handle and restoration on exit.
- Security and performance audit: window-open CPU ~25β30% β ~2.3% of a core, near-zero in the tray; elevated tasks only for Program Files installs, no native DLLs extracted to %TEMP%, updates require a trusted SHA256SUMS.txt.
- Installer always installs in Program Files and moves old installs without deleting settings; portable copies can install themselves for autostart.
- Game Boost is not yet validated on real dual-CCD Ryzen/X3D and Intel hybrid CPUs. No FPS improvement is claimed.
- Full release notes.
- Includes stable v1.7.7 plus all local Game Boost work: game/background CPU Sets, optional priority, rule precedence, restoration, crash journal and Activity diagnostics.
- Correct Intel P/E classification and use real AMD L3/CCD groups, including 6+6 layouts; full-path background entries now match.
- Real dual-CCD Ryzen/X3D and supported Intel hybrid validation, gaming benchmarks and protected-game/anti-cheat tests remain pending. No FPS improvement is claimed.
- Pre-release only: v1.7.7 remains stable/latest; no beta publication to winget/Chocolatey.
- Test procedure, limits and issue-reporting checklist.
- Three-state EcoQoS for running processes and saved rules, independent of CPU priority; hardware-verified in issue #66.
- Persistent-rule backups, validated imports with rollback, deterministic rule precedence and conflict reporting.
- Clearer process/rule editors, priority undo, non-blocking automation pause, Windows 11 settings rows and remembered layout.
- Updated localization and narrow-window/scaling fixes.
- CI/release native tests run on Server 2025; Server 2022 build 20348 rejects EcoQoS read-back with error 87.
- No experimental Game Boost or its additional topology changes in this stable release. Those are reserved for v1.7.8-beta.1.
- Full release notes.
- Power plan discovery and active-plan detection no longer depend on the English
Power Scheme GUIDlabel, so localized Windows installations now populate the Power Plans page correctly. - Localized parsing preserves active markers and display names containing parentheses.
- Executable-path rules now support case-insensitive
*and?wildcards for versioned application directories such as WindowsApps packages. - Wildcard matching applies to persistent process rules and power plan associations, normalizes path separators, and preserves exact-path behavior for existing rules.
- 758 automated tests pass in Release configuration.
- CI DevSecOps and CodeQL pass for both included contributions.
- System tweak switches refresh their displayed state after every write attempt, so a failed or unconfirmed write no longer leaves the switch visually changed.
- The Core Parking control is now named Prevent Core Parking, with a description that explains its active power-plan and plugged-in scope.
- The renamed control and description are localized across all supported languages.
- Issue #60 was verified on Windows 11 with the switch off at AC
CPMINCORES0% and on at 100% (0x64). - 751 automated tests pass in Release configuration.
- Custom CPU masks are resized when the logical-processor count changes instead of being left describing a machine that no longer exists. Growing a mask leaves the new CPUs unselected; shrinking one keeps the selected CPUs that still exist.
- A mask is deliberately not resized when the result would select no CPU at all, or when a power plan association is using it - a silent resize there would change what that automation does. Those masks are named in the Masks tab for manual review.
- Custom masks built on a different CPU with the same thread count are now detected by comparing the topology signature stored with the mask's selection, a case the logical-processor count alone cannot see.
- Saved rules are checked against the CPU they are running on. A rule whose cores came from a different chip is named in the Saved process rules tab instead of failing at apply time with a message about the process having exited.
ReviewRequired, a flag persisted in mask and preset metadata, written in three places and read in none. A stored "needs review" bit answers at save time a question that can only be answered at load time, against whatever CPU is present then; the check is now made live where it is shown.CpuPresetGenerator,ICpuPresetGenerator,CpuPresetGenerationOptionsandCpuPreset- around 700 lines, including tests, that were registered in dependency injection and never resolved by anything.
- The cores a saved rule pins to can be set from the Saved process rules editor, using any saved CPU mask. Previously they could only be changed from the Process tab, which requires the process to be running - so a rule for an application that was not currently open could not be fully edited.
- The saved-rules editor shows the rule's current cores as readable ranges.
- 758 automated tests pass.
- Windows 11 UI verification covered the saved-rules editor populating from a real rule, the mask picker listing the available masks, and the core ranges shown for an existing rule.
- Saved rules created before v1.7.3 now receive the same one-time CPU assignment migration as profiles: rules that still use
ThreadPilot automaticwith a topology-aware CPU selection move toAffinity Mask. Deliberate assignment modes, legacy affinity masks, and rules without a CPU selection are left unchanged. - Updating a rule through Apply CPU Assignment and Save as Rule preserves its memory priority, I/O priority, identity, creation time, and other settings instead of silently replacing the full rule with affinity-only data.
- CPU Sets and Ideal Processor assignments are read back from Windows and shown in the Advanced Affinity Picker. Explicit process CPU Sets are detected even when the global default or saved rule says
Affinity Mask, so changing process selection or restarting ThreadPilot no longer makes a successful soft assignment appear to have disappeared. - Successful CPU assignment messages remain visible in the process status instead of being cleared immediately after the operation.
- The Process Management polling interval now controls the actual process-list refresh timer and updates it when settings are saved.
- Changing Start minimized now refreshes the existing Windows autostart task, preventing a stale
--start-minimizedargument from overriding the new setting. - Built-in CPU masks are regenerated when the detected logical-processor count changes. User-created masks are preserved.
- Reset process changes on exit is now exposed in Settings and localized in all seven supported languages. The existing safe default remains enabled, but users can now choose whether closing ThreadPilot restores applied CPU masks and priorities.
- A saved rule can now be removed from the selected process's Rules context submenu, with immediate status and summary feedback.
- 739 automated tests pass in Release configuration.
- Elevated Windows 11 UI smoke testing covered startup, navigation, settings save and restore, polling persistence, process refresh, CPU Sets, Ideal Processor, rule creation and deletion, status feedback, and CPU Sets read-back after a full ThreadPilot restart.
- Test-created processes, rules, settings, and UI automation files were removed after verification.
- Upgrading now actually moves you off
ThreadPilot automatic. v1.7.1 changed the shipped default toAffinity Mask, but a persisted setting always wins over a new default, so everyone upgrading kept the mode that made the affinity feature look like it did nothing. A one-time migration moves a storedAutomatictoAffinity Mask.
- A one-time notice, in the app's own style and in the selected language, tells you that your CPU assignment mode was changed and why, with a shortcut to Settings if you want it back. It is shown only to profiles the migration actually moved, and only until you acknowledge it.
- The migration runs once per profile and is recorded, so choosing
ThreadPilot automaticagain afterwards is respected and never overridden. - Fresh installations are unaffected: they already ship with
Affinity Maskand see no notice.
- Applying a saved rule or a Rules-tab core mask now changes the CPU affinity Windows actually enforces.
SetProcessorAffinitysubstituted a CPU Sets hint for the hard affinity write, so the caller's read-back never matched and every apply reported a verification failure while the affinity was left untouched. - The default CPU assignment mode is now
Affinity Mask. The previousThreadPilot automaticdefault applied only CPU Sets, a soft scheduling preference that leaves the affinity mask in Task Manager unchanged, and reported it as "Affinity applied successfully". - A CPU Sets result no longer claims an affinity was applied. It states that the assignment is a soft preference and that the Task Manager affinity mask is unchanged.
- "Save Current Settings as Rule" no longer saves a rule pinned to every CPU. It captured the core selection only while edits were staged, otherwise falling back to a process affinity that the soft modes never changed.
Automaticmode no longer installs CPU Sets that a pre-existing hard affinity prevents Windows from honouring. It applies the hard affinity instead, which can actually replace the restriction.- Saved rules resolve CPU Sets from the current topology instead of trusting the CPU Set IDs stored when the rule was created. A stale rule now reports an invalid topology rather than silently pinning the wrong CPUs.
- Affinity masks that include CPU 63 are no longer discarded. They are negative as signed 64-bit values and were rejected by magnitude comparisons.
- The CPU assignment mode picker and the Apply CPU Assignment button are now on screen. They were added to a side panel that has been collapsed since v1.2.0, so neither had ever been reachable; the only way to apply affinity was the process context menu. Both now live in the Advanced Affinity Picker, which starts expanded.
- The per-CPU cells in the Advanced Affinity Picker are read-only chips rather than checkboxes, with a hint explaining that a selection is staged through the pending core mask. They were never clickable; they only looked it.
- System tweak toggles are larger and state ON or OFF inside the track, replacing the unlabelled 40x20 switch.
- Saving a rule from the process context menu explains that the rule is re-applied automatically on process start and is separate from the Rules tab.
- Removed the collapsed legacy side panel, an unreachable Process tab command, and an unused XML namespace.
- Fixed "core mask" mistranslations in the Italian, Spanish, French and Russian locales, and German phrasing for the Rules tab and power plans.
- Added Game Mode, USB selective suspend, pointer precision, Ethernet power saving, interrupt moderation, and supported GPU MSI Mode controls.
- Added guided links for Memory Integrity, hardware-accelerated GPU scheduling, and windowed-game optimizations so Windows retains control over security-sensitive settings.
- Added per-process I/O priority and persistent-rule support for memory priority, I/O priority, and preventing system sleep while a process is running.
- Added device-driver registry backups before supported Ethernet or GPU properties are changed.
- Replaced the previous process idle-server action with a real Windows power request that is released automatically when the process exits or ThreadPilot closes.
- Game Mode is now an explicit system tweak and is no longer changed implicitly when affinity is applied.
- Removed unverified third-party
.powfiles from the repository and release packages while preserving local imports and previously installed Windows plans. - Added user-initiated Discord links for community power plans and support, plus a direct GitHub Issues link.
- ThreadPilot changes only driver properties already exposed by the installed Ethernet or display driver; it does not create unsupported properties.
- Device-level tweaks require administrator privileges. Driver and firmware behavior varies, and some changes require a restart.
- Disabling Memory Integrity is intentionally left to the user in Windows Security because it reduces system protection.
- Added four explicit CPU assignment modes: ThreadPilot automatic, Affinity Mask, Ideal Processor, and CPU Sets.
- Added a persistent global default and per-rule overrides. ThreadPilot automatic is the default and preserves the established CPU Sets with safe affinity fallback behavior.
- Added topology-aware, per-thread affinity for multi-group selections and processors above CPU 63.
- Added deterministic round-robin Ideal Processor assignment with per-thread verification.
- Added read-only visibility for reserved CPU Sets and availability checks scoped to the target process.
- Added localized mode descriptions and guidance in English, Italian, French, German, Spanish, Russian, and Simplified Chinese.
- Process actions, notifications, and audit entries now report the requested and effective CPU assignment strategy.
- Explicit CPU Sets and Ideal Processor modes never use a hidden affinity fallback.
- Existing rules remain in ThreadPilot automatic mode and retain their historical behavior without rewriting stored data.
- Corrected the native
GetProcessDefaultCpuSetscall contract, preventing invalid memory access while verifying process CPU Sets. - Thread enumeration now handles threads that exit during assignment without reporting a false success.
- ThreadPilot does not write the global Windows
ReservedCpuSetsregistry configuration. - Existing restrictive affinity is not broadened automatically when selecting a soft strategy; restarting the target process may be required.
- Ideal Processor and multi-group Affinity cover newly created threads through the existing automation monitor. With monitoring disabled, only threads present at apply time are affected.
- 689 automated tests passed in both Debug and Release configurations.
- All four strategies passed hardware smoke tests on a Windows 11 Hyper-V guest with four logical processors.
- Multi-group and processor indexes above 63 are covered by synthetic topology tests pending access to suitable hardware.
- Saved process rules are no longer lost when the rules file cannot be read. A transient lock from antivirus, backup or a sync client used to pin an empty rule set for the rest of the session, so the next save overwrote every saved rule. A file that cannot be parsed is now preserved alongside the original for recovery.
- Pending edits in Settings are no longer discarded when something writes settings in the background, such as the startup update check recording its last-check time.
- Do Not Disturb now suppresses notifications during the configured quiet hours. The overnight comparison was inverted, so the default 22:00-08:00 window never suppressed anything while a daytime window suppressed everything. Turning Do Not Disturb on explicitly now takes effect regardless of the schedule, and the timed window raises its change notification when it expires.
- Default keyboard shortcuts are applied on a fresh installation. The fallback only ran when the stored shortcut list was null, which never happens, so no global hotkeys were registered.
- Closing the main window can no longer leave the window permanently unclosable when saving settings fails during shutdown.
- The last few seconds of diagnostics before exit are no longer lost. Application shutdown now releases the service container, which is what flushes buffered log entries and stops the WMI watchers and native performance counters.
- Stopping process monitoring during shutdown now actually stops it; disposal previously short-circuited itself and left the WMI watchers and the polling timer running.
- The tray Power Plans submenu now shows the active plan after a plan change instead of keeping the checkmark on whichever plan was active at startup.
- Per-core CPU readings work on systems with more than 64 logical processors by using the group-aware performance counter category, and a single unavailable core instance no longer clears the whole per-core view.
- Autostart no longer removes the existing startup entry before confirming the replacement was created, and updating autostart settings no longer disables it first.
- Notification delivery failures now retry as intended instead of being dropped.
- Tray menu, tray tooltip and monitoring-status updates are marshalled to the UI thread. These are Windows Forms controls that were previously mutated from WMI and timer threads.
- Throttling, notification history, performance history and CPU counter state are guarded against concurrent access.
- View models owned by the main window are released on close, including the power plan refresh timer and subscriptions to long-lived services.
- Debug-logging state is cached instead of deep-cloning the settings model on every structured log call.
- A failed CPU Set topology probe is retried after a short delay instead of disabling CPU Sets for the rest of the session.
- No change to the elevation model, the administrator-required manifest, the protected-process denylist, the Realtime priority block or the High priority warning.
- No change to how affinity, priority or memory priority are applied; the affinity apply pipeline and its fallback order are untouched.
- Power plan behaviour is unchanged. The tray now listens to the existing power-plan-changed notification rather than polling, so no additional
powercfgcalls are introduced.
- Windows Management Instrumentation recovery still depends on fallback polling being enabled, which remains the default.
- Consolidated process-monitoring configuration so application settings are the single runtime source for WMI, fallback polling, and fallback interval behavior.
- Removed ineffective duplicate WMI, fallback polling, and polling interval settings from Rules & Automation.
- Existing configuration JSON files remain compatible when they contain the removed legacy fields.
- Stopping Automation Monitoring now remains in effect after restarting ThreadPilot.
- Added a clear in-app confirmation explaining which automatic process rules pause while monitoring is disabled.
- Process Management now shows that monitoring is disabled instead of refreshing the process list.
- Added complete Italian, French, German, Spanish, and Russian localization.
- Added Windows language detection with safe English fallback.
- Added one-click in-app updates: ThreadPilot checks on every enabled startup, asks for consent, verifies and installs the update, then relaunches automatically.
- System tweak state is detected at every startup and verified again after changes.
- Core Parking and C-State detection now use native Windows power APIs instead of localized command output.
- Updated tweak controls, dialogs, and selected states with more neutral Windows 11 styling.
- Removed the unsupported HPET performance toggle and corrected the MMCSS Games scheduling tweak.
- Saving from the unsaved-settings dialog now persists language and other pending settings correctly.
- In-app upgrades preserve the user's
%AppData%settings and no longer require a manual installer download or app restart.
- Reduced background idle CPU by approximately 80-100% in measured tray scenarios.
- Reduced CPU overhead during short-lived process churn by approximately 8%.
- Reduced hidden working-set memory by approximately 4-5% and peak handle usage by approximately 12-13%.
- Reduced external command launches during visible startup by approximately 85% (27 to 4 in the measured scenario).
- Deferred inactive views, reused process snapshots and static metadata, and removed redundant
powercfgcalls. - Suspended hidden Log Viewer updates, made log flushing event-driven, and added bounded WMI recovery backoff.
- Persistent rules are cached without weakening process-start matching or CPU-priority verification and retry behavior.
- Process handles and PID-scoped runtime state are consistently cleaned up.
- Added 30 new bundled Windows power plans.
- Added structural, discovery, duplicate, packaging, and invalid-file tests for bundled power plans.
- Updated four existing bundled power plans and removed one redundant duplicate asset.
- Fixed parsing of power-plan display names containing parentheses.
- Confirmed automatic inclusion in build, publish, installer, and portable ZIP output.
- Persistent CPU-priority rules now verify the applied priority.
- ThreadPilot detects when a process resets its CPU priority shortly after startup.
- A single bounded retry is performed when a verified priority is reverted.
- Retry state is cleared when the process exits.
- Improved activity logging distinguishes initial apply, reversion, retry, verification, and final failure.
- Added attribution for internal CPU-priority writes.
- Fixed misleading success reporting when the requested priority did not remain applied.
- Fixes #32.
- Added safe in-app updater support.
- Added manual update checks from Settings.
- Added optional background update checks with a default 7-day interval.
- Added latest/current version display in Settings.
- Added update download and install flow with explicit user confirmation.
- Added updater documentation.
- Update metadata is fetched only from the official PrimeBuild-pc/ThreadPilot GitHub repository.
- Prereleases are excluded by default.
- Installer assets are selected from GitHub HTTPS release assets.
- SHA256 checksums are verified when SHA256SUMS.txt is available.
- Checksum mismatches are rejected.
- Authenticode signature verification is performed on a best-effort basis, rejecting explicitly invalid signatures.
- Installer launch uses ProcessStartInfo without shell command construction.
- Concurrent update attempts are prevented.
- Updates preserve AppData, settings, profiles, CPU masks, rules, custom/imported power plans, and logs.
- Only updater temporary files are cleaned by the update flow.
- Full uninstall behavior remains separate.
- Project version updated to 1.4.0.
- Installer, packaging, Chocolatey, and release metadata updated to v1.4.0.
- Build passed.
- Automated tests passed.
- Completed Simplified Chinese localization coverage for primary WPF views, dialogs, context menus, tooltips, tray menu text, status text, and user-facing service messages.
- Changed Inno Setup display metadata so installed apps list ThreadPilot as
ThreadPilotwhile keeping1.3.1in version metadata. - Added guarded cleanup for obsolete
ThreadPilot 0.1.0-betauninstall registry metadata only when it clearly matches the old ThreadPilot display name and Program Files install path.
- Project, package, installer, Chocolatey, Sonar, and app manifest metadata updated to 1.3.1.
- Full uninstall removes ThreadPilot-owned AppData/settings for the uninstalling user account and removes ThreadPilot startup entries; normal install/update preserves user data.
- No automatic in-app updating was added.
- No elevation, affinity, process control, power plan, or system tweak behavior was changed.
- Added localization infrastructure.
- Added English and Simplified Chinese resource dictionaries.
- Added language selector in Settings.
- Added localized notification support for selected user-facing messages.
- Added tests for localization fallback, language persistence, Settings language selection, and localized notifications.
- English remains the default application language.
- Simplified Chinese is available as an optional display language.
- Project version updated to 1.3.0.
- Unsupported or invalid language settings now fall back to English.
- Missing translation keys fall back safely to English or the key.
- No changes to elevation, system tweaks, affinity, or privileged operation behavior.
- CPU topology v2 support with
CpuSelectionfor topology-aware affinity. - Group-aware CPU Sets support and safer handling for processor groups and systems with more than 64 logical processors.
- Memory priority controls and persistent process rules.
- Apply at process start for saved rules while ThreadPilot is running.
- Process tab context menu actions, explicit Apply now, and Save as rule flows.
- Selected process summary panel for current affinity, priority, memory priority, and last operation status.
- Optional Diagnostics experience hidden by default.
- README and release documentation now describe ThreadPilot as a process control center rather than a performance overlay.
- Default presets are gaming-oriented and topology-aware.
- Intel hybrid handling uses topology and
EfficiencyClassinstead of hardcoded SKU lists. - AMD preset generation is CCD/L3-aware and avoids hardcoded SKU lists.
- Project version updated to 1.2.0.
- Startup binding crash caused by a display-only selected-process summary message binding to a read-only property with a TwoWay-capable target.
- CPU64 no longer aliases CPU0 in the new safe affinity paths.
- Persistent rule auto-apply cancellation is handled as shutdown/cancellation instead of logged as a warning.
- CPU priority guardrails warn for High priority and block Realtime priority.
- Anti-cheat/protected-process failures use safe user messaging and ThreadPilot does not bypass protected processes.
- Persistent rules reuse the existing affinity, priority, memory-priority, and Realtime guardrail backend instead of duplicating apply logic.
- Apply at process start is runtime-based and works only while ThreadPilot is running.
- No Windows Service, registry autorun, IFEO persistence, installer privilege workaround, tag, GitHub release, or generated release artifact is included in this update.
- Administrator rights can help normal access-denied cases but do not bypass protected-process or anti-cheat restrictions.
- Windows 11 native visual refresh: neutral Fluent surfaces, refined card styles, and reduced visual weight across Rules, Logs, Performance, Settings, Tweaks, Process, Power Plans, and CPU Masks views.
- Sidebar navigation separator polish: horizontal separator lines softened for a cleaner Windows 11 Settings-like sidebar appearance.
- Start minimized default clarification:
StartMinimizednow explicitly defaults tofalsefor predictable manual-launch visibility.
- Project version updated to 1.1.6.
- Older settings JSON without
startMinimizedfield no longer risks unexpected minimized startup.
- Expanded core service test coverage to 104 tests.
- Hardened background refresh behavior while ThreadPilot is minimized or hidden to tray.
- Improved process enumeration resilience for access-denied, protected, and rapidly terminating processes.
- Added a verified affinity apply flow so UI state reflects the OS-confirmed affinity after explicit apply.
- Added duplicate and debounce protection for process-driven power plan switching.
- Redesigned Process Management into a clearer two-pane layout with selected-process actions on the right.
- Clarified terminology between Automation Monitoring and Live Metrics.
- Prevented passive process read failures from emptying the process table.
- Preserved explicit-only affinity changes so process selection and mask selection do not apply affinity automatically.
- Global unobserved task exception handler with structured diagnostics.
- Domain exception hierarchy and ErrorCode registry (
ThreadPilotExceptionand derived types). - Retry policy unit tests covering transient and non-retriable behaviors.
- Release readiness documentation set:
- Exception handling policy
- Quality gates
- Release runbook
- Release notes template
- Test plan v1.1.1
- GitHub release automation script (
build/create-github-release.ps1).
- System tray periodic status updates now use adaptive backoff after failures.
- Tray update path reduces UI-thread load by collecting metrics off-dispatcher and applying UI updates on dispatcher only.
.gitignoreexpanded for AI/workspace temporary artifact cleanup.
- Improved persistence of unhandled exception metadata for post-mortem diagnostics.