Files
multica/packages
Eve 823de02627 MUL-5824 fix(mention): pin cancelled direct hits above the truncation
Second review round on #6515. The mention picker only exempted the curated
Current / Recent groups, so a cancelled issue or project the user had typed out
in full was still demoted — contradicting the direct-hit rule the backend and
the other two search surfaces already share.

The picker now applies that same query-aware rule via isIssueDirectHit /
isProjectDirectHit: exact identifier, bare number, or full title for issues, and
full title for projects. Both the partition and groupItems() take the query so
they cannot disagree about which rows are exempt.

Exemption alone was not enough. slice(0, MAX_ITEMS) runs on the merged list, so a
direct hit behind a full window of cached candidates was still cut — a stale
"row is still listed" claim in the old comment. The partition is now three
tiers, pinned → live → cancelled, where pinned holds curated context plus direct
hits. This mirrors the server, which already ranks direct hits first, and makes
"Current survives the truncation" structural rather than incidental.

isIssueDirectHit now takes all fields optional and derives the number from the
identifier when `number` is absent, which is what lets the picker share the rule:
its rows carry the identifier in `label` and the title in `description`, with no
number field. An explicit `number` still wins if both are present.

Tests: 5 mention regressions (exact identifier, bare number, project full title,
direct hit visible behind 20 live candidates, and a partial match that must still
be demoted) plus 3 helper cases for the identifier-derived number. Verified the
four ordering tests fail with the exemption reverted, and that three of them
still fail with exemption but no pinning — so the pinning tier is load-bearing,
not belt-and-braces.

Co-authored-by: multica-agent <github@multica.ai>
2026-08-07 11:56:59 +08:00
..