Michael Jolley
90d · built 2026-09-08
Performance
What Michael Jolley shipped in the selected window, measured in ETV, and how it compares with the 90 days before it.
Effective capacity
+0.4engineers
delivers like 1.4 (1.4x pre-AI)
Output (ETV)
8.9ETV
+7.6% vs 8.3 prior
Features share
33.3%
−0.4 pp vs prior window
Fixes share
16.0%
+6.3 pp vs prior window
Work mix
33.3% Features9.5% Maintenance38.8% Tests2.3% Docs16% Fixes
27 commits over 90 days, ending 2026-09-08.
Daily performance
Daily ETV, stacked by Features, Maintenance, Tests, Docs and Fixes.
Repository spread
Where this developer's commits land. Concentrated work (top1 > 80%) vs polymath spread (top1 < 30%).
Most impactful commits
Top 10 by ETV in the last 90 days.
- 3.2ETV[CmdPal] Consolidate search ranking changes (#49832) ## What's going on The stacked pull requests are blocked by GitHub's stack merge flow. This gives the full remaining search ranking change set one PR against `main`. ## The plan - Consolidates the open work from #49190, #49191, #49194, #49195, #49197, #49246, #49247, and #49249. - Keeps the existing stack unchanged while this PR provides an alternate merge path. --------- Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 5459b847-afeb-4163-a803-977759dd92df Copilot-Session: 49185697-186e-406f-b081-8c985c134274 Copilot-Session: 92905c83-2de6-449c-b4a1-a08003fe2576 Copilot-Session: efe987e5-9297-47fc-af99-2f49b057285a Copilot-Session: f42917e2-d298-4bde-9056-79a9e6e17dfagithub.com-microsoft-PowerToys · 888a1427 · 2026-08-12
- 1.0ETVCmdPal: Dock Auto-hide (#48565) This pull request introduces a new "Auto-hide" feature for the dock, allowing users to collapse the dock until they hover over its screen edge. The changes include updates to the settings model, UI, localization resources, and automated tests to support and verify this new functionality. **Show me:** https://github.com/user-attachments/assets/689625e8-9050-4a54-9c4b-9e303a3da63a **Conflicted?** "What if I have Taskbar and Dock on the same side and both with auto-hide turned on?" <img width="1437" height="264" alt="Screenshot 2026-06-14 144814" src="https://github.com/user-attachments/assets/bd037a11-0653-4b9a-bd21-625aca03b901" /> Closes #46239 --------- Co-authored-by: root <root@io.bbq> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>github.com-microsoft-PowerToys · 9ee0c725 · 2026-06-24
- 1.0ETVCmdPal: Refactor TopLevelCommandManager to use IExtensionService implementations (#48417) ## Summary The `TopLevelCommandManager` handles **alot.** And by "alot" I mean too much. In preparation for future types of extensions, this PR attempts to pull out the methods for loading/managing extensions to individual `IExtensionService`s. These `ExtensionService`s will be injected the `TopLevelCommandManager` via dependency injection. It will iterate through them asking them to load their extensions. During that process, they will surface `ICommandProvider`s back to the `TopLevelCommandManager` for display in Command Palette. Currently, there are two types of `IExtensionService`s: `BuiltInExtensionService` and `WinRTExtensionService`. - The `BuiltInExtensionService` receives all `ICommandProvider`s registered with DI. - The `WinRTExtensionService` manages out-of-process WinRT AppExtension providers. ## Additional Changes - **Circular DI dependency resolved**: `BuiltInsCommandProvider` no longer depends on `IRootPageService`. Previously, it required the `IRootPageService` solely for the dock command to open Command Palette (using the RootPage as its command.) Now, it uses a new `GoHomeDockCommand` which returns `CommandResult.GoHome()` with the existing `onBeforeShowConfirmation` callback to show the palette at the dock button position. Also, fixes #48643 --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>github.com-microsoft-PowerToys · cd7465e2 · 2026-06-22
- 0.8ETVFix dock clock: show seconds, fix stale display, a11y (#48253) Fixes the Command Palette Dock clock/date extension which showed time ~1 minute late and did not display seconds (unlike the taskbar clock). The problem was that `timeExtended` was hardcoded `false` in `NowDockBand.UpdateText()`. Fixed that by passing `true` to `TimeAndDateHelper.GetStringFormat()`, selecting the `"T"` (long time) format which includes seconds. Also, changed from using `PropertyChanged` on `Title` to using `RaiseItemsChanged` to mimic the behavior used for updating in the Performance Monitor extension. Fixes #46192 --------- Co-authored-by: root <root@io.bbq> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: Hawk <hawk@example.com>github.com-microsoft-PowerToys · 9449ae36 · 2026-07-07
- 0.5ETVFix memory leaks in Command Palette: unsubscribe event handlers and dispose resources (#48884) ## Summary Fixes 6 memory leaks in Command Palette caused by event handlers not being unsubscribed and disposable resources not being released. ## Changes | File | Fix | |------|-----| | `MainListPage.cs` | Replace lambda on static `AllAppsCommandProvider.Page.PropChanged` with named method; unsubscribe in `Dispose()` | | `WinRTExtensionService.cs` | Unsubscribe static `PackageCatalog` events (`PackageInstalling`/`Uninstalling`/`Updating`) in `Dispose()` | | `MainWindow.xaml.cs` | Unsubscribe all event handlers in `Dispose()` (`SizeChanged`, `SettingsChanged`, `ActualThemeChanged`, `XamlRoot.Changed`, `CardElement.SizeChanged`, timer `Tick`, `ThemeChanged`, `KeyPressed`); replace lambda with named method | | `ContentFormControl.xaml.cs` | Unsubscribe previous `RenderedAdaptiveCard.Action` before subscribing to new card | | `BlurImageControl.cs` | Track `LoadedImageSurface` and unsubscribe `LoadCompleted` before loading a new image | | `ShowFileInFolderCommand.cs` | Dispose `Process` object returned by `Process.Start()` (handle leak) | ## Validation - [x] Build clean (`tools\build\build.ps1 -Path src\modules\cmdpal -Platform x64 -Configuration Debug`) — exit code 0 - [x] All 1809 CmdPal unit tests pass (2 pre-existing skips) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>github.com-microsoft-PowerToys · 0afe525f · 2026-07-01
- 0.4ETVCmdPal: Subscribe DetailsViewModel to PropChanged for live pane updates (#48070) ## Summary Fixes #47745 — the details pane now updates live when an extension modifies its `IDetails` properties (Title, Body, HeroImage, Metadata) after initial display. ## Changes ### `DetailsViewModel.cs` - Subscribe to `INotifyPropChanged` at construction (runtime check, since `IDetails` doesn't require it) - `Model_PropChanged` → `FetchProperty` with switch on Title, Body, HeroImage, Metadata - `RebuildMetadata` rebuilds the metadata list from the model - `UnsafeCleanup` unsubscribes from PropChanged ### `ListItemViewModel.cs` - Call `Details?.SafeCleanup()` before replacing the DetailsViewModel in `FetchProperty("Details")`, ensuring the old subscription is cleaned up. ### `DetailsViewModelTests.cs` (new) - 6 unit tests covering PropChanged subscription, property updates, metadata rebuild, cleanup/unsubscribe, and non-observable IDetails handling. --------- Co-authored-by: root <root@io.bbq> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>github.com-microsoft-PowerToys · 0790674d · 2026-07-06
- 0.4ETVCmdPal: Hide uninstall option for system apps (#48804) Command Palette currently shows the "Uninstall" context menu option for system apps like Windows Settings, Registry Editor, and Task Manager. Users can accidentally trigger uninstall on packages that should not be removable. This PR hides the uninstall option for system apps. It's probably not a perfect solution, but seemed to catch all I tried to test. Fixes #46826 --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>github.com-microsoft-PowerToys · ada75d04 · 2026-06-24
- 0.4ETVCmdPal: Fix Command Palette Dock breaking on monitor topology changes (#49814) Docking or undocking a laptop, or flipping display modes with Win+P, can leave the Dock empty, missing, or misconfigured. Fixes #48516. The root of it: the Dock's per-monitor config leans on a stable hardware ID for each monitor. Right after a `WM_DISPLAYCHANGE`, before Windows has settled the new topology, that lookup can come back empty or fall back to a volatile GDI name. The reconciler then reads that as "hey, a new monitor showed up" and creates a fresh, disabled, empty config for a monitor that never actually left. On top of that, a burst of `WM_DISPLAYCHANGE` messages during a mode switch each triggered an immediate write to settings, so one bad intermediate snapshot could get baked in permanently. And since only the Dock window itself was listening for `WM_DISPLAYCHANGE`, the Settings page's monitor list could go stale whenever no Dock window happened to be alive. ## The plan - Retry the stable-ID lookup a few times before giving up and falling back to the volatile name. - Debounce monitor-change handling so a flurry of `WM_DISPLAYCHANGE` events settles down before we reconcile and persist, instead of writing every half-finished intermediate state. - Have the main window forward `WM_DISPLAYCHANGE` too, so the monitor cache stays fresh even when the Dock is off or has no windows up. - Teach the reconciler to reassociate a secondary monitor's config with its new ID when there's exactly one unmatched monitor and one unmatched config, the Win+P round trip case, instead of treating it as new hardware. - Added tests covering the transient ID fallback, the ambiguous multi-monitor case, and the Win+P reassociation. Scaling behavior when the Dock lands on a monitor with a different DPI is a separate issue (#48466) and isn't touched here. --------- Copilot-Session: d2bc281b-062c-4e6e-9356-bdb7a2ef9e1egithub.com-microsoft-PowerToys · bcb2ed6d · 2026-08-14
- 0.3ETVCmdPal: Persist dock label visibility for new items (#50363) Fixes #50361. Newly added dock bands now carry pending title and subtitle visibility into the final settings merge while newer persisted settings still win for existing bands. Copilot-Session: 49aafe11-bd34-4e09-bc25-a0140d88afc5github.com-microsoft-PowerToys · a1ba8334 · 2026-09-03
- 0.3ETV[CmdPal] Replace main-page magic-number scoring with a principled tiered ranker (#49189) >[!WARNING] > This PR is one in a series of PRs focused on rearchitecting the search/scoring logic of the `MainListPage`. An explanation of the entire search/scoring logic can be found below. > > **This PR should not be merged until PR #49190 is merged into it.** >[!NOTE] > To test the final result, run the branch associated with PR #49249. This stack rebuilds how Command Palette ranks and displays results on its main page. Strong text matches now consistently appear above weaker ones. Usage history and provider preferences can improve ordering between similarly relevant results, but they cannot push a poor match above an obvious one. The stack also makes search feel faster. Results appear without waiting for slower providers, app scoring runs more efficiently, and weak matches are hidden while the user has typed only one or two characters. Automated tests protect the new behavior, while privacy conscious telemetry measures performance and relevance without recording searches. ## Pull requests 1. [#49189](https://github.com/microsoft/PowerToys/pull/49189) introduces the new ranking foundation. Results are grouped by match strength, ensuring exact names, prefixes, and acronyms rank above loose fuzzy matches. 2. [#49190](https://github.com/microsoft/PowerToys/pull/49190) improves how Command Palette learns from command usage. Recent and frequently used commands receive a sensible boost, and that history now persists across restarts. 3. [#49191](https://github.com/microsoft/PowerToys/pull/49191) lets users give each provider a Lower, Normal, or Higher search preference. This preference helps resolve close matches without overriding result relevance. 4. [#49194](https://github.com/microsoft/PowerToys/pull/49194) makes the first set of results appear sooner. Commands and apps are shown immediately, while slower fallback results are added when they become available. 5. [#49195](https://github.com/microsoft/PowerToys/pull/49195) adds a comprehensive relevance test suite. It verifies that common searches return the expected results and protects ranking quality from future regressions. 6. [#49197](https://github.com/microsoft/PowerToys/pull/49197) adds privacy conscious search telemetry. It measures result counts, response time, and which result position was selected without recording search text, result names, paths, or other user content. 7. [#49246](https://github.com/microsoft/PowerToys/pull/49246) adds a performance measurement suite. It identifies where search time is spent and provides a reliable way to evaluate performance improvements. 8. [#49247](https://github.com/microsoft/PowerToys/pull/49247) delivers the main performance improvement. App results are scored in parallel and expensive work no longer blocks rendering, while the final result order remains unchanged. 9. [#49249](https://github.com/microsoft/PowerToys/pull/49249) prevents misleading results from flashing when a search begins. For one or two character searches, weak fuzzy app matches remain hidden until the query is specific enough to produce useful results. > [!WARNING] > These PRs should be merged in LIFO order starting with #49249 with this PR being the last. --------- Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>github.com-microsoft-PowerToys · f2034838 · 2026-08-06