Skip to content

CmdPal: Fix stale fallback scores by re-scoring global fallbacks at read time#49211

Open
jiripolasek wants to merge 1 commit into
microsoft:mainfrom
jiripolasek:feature/46547-cmdpal-fix-stale-fallback-scores
Open

CmdPal: Fix stale fallback scores by re-scoring global fallbacks at read time#49211
jiripolasek wants to merge 1 commit into
microsoft:mainfrom
jiripolasek:feature/46547-cmdpal-fix-stale-fallback-scores

Conversation

@jiripolasek

@jiripolasek jiripolasek commented Jul 8, 2026

Copy link
Copy Markdown
Collaborator

Summary of the Pull Request

This PR fixes issue with search scores of fallback items being stale and calculated from the old value.

  • Replaces eager scoring of global fallback items with re-scoring on every GetItems call, so asynchronously updated titles get fresh scores and items with momentarily empty titles are no longer dropped for the rest of the query
  • Captures the fuzzy query together with the matcher that precomputed it, so read-time scoring always uses a schema-consistent query/target pair even if settings hot-swap the matcher
  • Reuses the already prefiltered global fallback list instead of recomputing it with a second LINQ pass
  • Trims the result array in MainListPageResultFactory when a concurrently cleared title reduces the written item count, so callers never see null slots
  • Removes the dead GetNonEmptyFallbackItemsCount helper and corrects the misleading deferred-execution comments on the fallback fields
  • Adds a factory test covering a fallback title cleared between visibility filtering and the merge
  • Changes the type of _fallbackItems from IEnumerable to an array to emphasize that it is not lazily evaluated. There is no change in semantics; the list was already materialized. This only changes the type to make that explicit to developers.

PR Checklist

  • Communication: I've discussed this with core contributors already. If the work hasn't been agreed, this work might be rejected
  • Tests: Added/updated and all pass
  • Localization: All end-user-facing strings can be localized
  • Dev docs: Added/updated
  • New binaries: Added on the required places
  • Documentation updated: If checked, please file a pull request on our docs repo and link it here: #xxx

Detailed Description of the Pull Request / Additional comments

Validation Steps Performed

- Replaces eager scoring of global fallback items with re-scoring on every GetItems call, so asynchronously updated titles get fresh scores and items with momentarily empty titles are no longer dropped for the rest of the query
- Captures the fuzzy query together with the matcher that precomputed it, so read-time scoring always uses a schema-consistent query/target pair even if settings hot-swap the matcher
- Reuses the already prefiltered global fallback list instead of recomputing it with a second LINQ pass
- Trims the result array in MainListPageResultFactory when a concurrently cleared title reduces the written item count, so callers never see null slots
- Removes the dead GetNonEmptyFallbackItemsCount helper and corrects the misleading deferred-execution comments on the fallback fields
- Adds a factory test covering a fallback title cleared between visibility filtering and the merge
@github-actions github-actions Bot added the Product-Command Palette Refers to the Command Palette utility label Jul 8, 2026
@jiripolasek jiripolasek self-assigned this Jul 8, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Product-Command Palette Refers to the Command Palette utility

Projects

None yet

Development

Successfully merging this pull request may close these issues.

CmdPal: Stale fallback score CmdPal: missing fallback result

1 participant