fix(tickets): matching exact du #ref et curseur de pagination opaque/stable pour ticket_list (#20)

Épurement de la dette de ticket_list sur deux axes :

Recherche texte — matching exact du numéro/#ref via parse_issue_search_ref,
court-circuité avant load_issue, sans matching par substring numérique
(« 1 » ne remonte plus « 12 », « 123 »…).

Pagination — curseur opaque et stable anchor-based au lieu d'un offset fragile :
token v1.<base64url-no-pad-json> encodant le tri + l'ancre {number, sortKey},
reprise strictement après l'ancre. Curseur legacy / invalide / de version
inconnue / avec sort divergent rejeté par une erreur explicite « Invalid
cursor ». Le DTO cursor reste String → non-breaking côté UI.

Fichiers : infrastructure/src/issues.rs, app-tauri/src/tickets.rs,
app-tauri/Cargo.toml (+ base64 0.22). Tests : issue_store_text_filter,
ticket_list_ 7/7 (anchor-based + rejets).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-14 19:20:40 +02:00
parent 83e4df7626
commit bd5d8d864a
5 changed files with 401 additions and 35 deletions

1
Cargo.lock generated
View File

@ -73,6 +73,7 @@ version = "0.3.0"
dependencies = [
"application",
"async-trait",
"base64 0.22.1",
"domain",
"infrastructure",
"interprocess",