chore(tickets): sync store local — #307 QA verte finale backend+frontend, merge develop e1dbe56 (branche fix/307-startup-ghost-states-reconciliation commit 57cf825), carnet v7 section Git; AppImage rebuild 14:21 déjà formalisée v0.46.0 (commit dédié 99b400a + tag annoté, artefact sha256 vérifié identique au contenu develop post-merge — pas de nouveau tag); tickets 299-307 + index/counter + #296 carnet/issue; attachments/ et scripts/ hors périmètre; aucun push
This commit is contained in:
108
.ideai/tickets/304/carnet.md
Normal file
108
.ideai/tickets/304/carnet.md
Normal file
@ -0,0 +1,108 @@
|
||||
---
|
||||
issueRef: "#304"
|
||||
version: 5
|
||||
updatedBy: {"kind":"agent","agent_id":"a6c6ea12-bfc6-4bdc-8031-324102dfa34d"}
|
||||
updatedAt: 1789024612607
|
||||
---
|
||||
# Carnet #304 - Navigation historique ArrowUp dans chat multiligne
|
||||
|
||||
## Demande
|
||||
- Date: 2026-09-10.
|
||||
- Problème: quand il y a plus de 2 lignes dans le champ chat, `ArrowUp` remonte le curseur dans le textarea au lieu de rappeler le message précédent.
|
||||
- Comportement souhaité: à la manière d'un terminal Linux, pouvoir remonter dans l'historique des messages quelle que soit la taille du message, tant que le curseur est à la fin de la dernière ligne.
|
||||
- Si le curseur n'est pas à la fin de la dernière ligne, conserver le comportement texte normal.
|
||||
|
||||
## Cadrage UX
|
||||
Règle de déclenchement `ArrowUp` historique uniquement si:
|
||||
- aucun modificateur (`Shift`, `Ctrl`, `Alt`, `Meta`);
|
||||
- aucune composition IME en cours (`isComposing`, et cas navigateur `keyCode 229`);
|
||||
- aucune sélection active;
|
||||
- curseur simple exactement à la fin du texte: `selectionStart === selectionEnd === value.length`;
|
||||
- historique contient une entrée précédente.
|
||||
|
||||
Navigation:
|
||||
- Le premier `ArrowUp` mémorise intégralement le brouillon courant, puis affiche le dernier message envoyé.
|
||||
- Les `ArrowUp` suivants remontent l'historique.
|
||||
- Sur l'entrée la plus ancienne, conserver sans boucle.
|
||||
- `ArrowDown`, depuis une entrée rappelée et avec le curseur en fin de texte, avance vers l'entrée plus récente.
|
||||
- Après l'entrée la plus récente, `ArrowDown` restaure exactement le brouillon mémorisé, curseur en fin de texte.
|
||||
- Hors navigation historique, ou si le curseur n'est pas à la fin, `ArrowDown` reste natif.
|
||||
- Les messages déjà envoyés ne sont jamais modifiés.
|
||||
- L'envoi termine la navigation, efface le brouillon mémorisé et replace le champ dans son état normal.
|
||||
- Après injection/restauration, placer le curseur à la fin et rendre la dernière ligne visible.
|
||||
|
||||
## Cadrage Architect
|
||||
- Frontend pur, aucun contrat backend/DTO.
|
||||
- Cause technique probable: le handler actuel refuse `ArrowUp` dès qu'il y a un `\n` avant le curseur (`target.value.slice(0, target.selectionStart).includes("\n")`).
|
||||
- Remplacer par une règle fondée sur la position exacte du curseur à `value.length`, sans sélection ni modificateur/IME.
|
||||
- Slash menu ouvert reste prioritaire: navigation suggestions, pas historique.
|
||||
- `Enter`/`Shift+Enter`, tickets assistant, textareas génériques hors chat: inchangés.
|
||||
|
||||
Fichiers probables:
|
||||
- `frontend/src/features/agents/CustomAgentChatView.tsx`
|
||||
- `frontend/src/features/agents/CustomAgentChatView.test.tsx`
|
||||
|
||||
## Critères QA
|
||||
- `ArrowUp` rappelle l'historique depuis la fin d'un brouillon vide, mono-, bi- et multiligne.
|
||||
- À toute autre position, déplacement natif du curseur.
|
||||
- Sélection, modificateur ou composition IME empêchent le rappel.
|
||||
- Plusieurs `ArrowUp` parcourent récent -> ancien sans boucle.
|
||||
- `ArrowDown` revient vers les messages récents puis restaure fidèlement le brouillon initial.
|
||||
- Sauts de ligne, espaces finaux et caractères Unicode du brouillon restaurés sans altération.
|
||||
- Modifier une entrée rappelée ne modifie jamais le message déjà envoyé.
|
||||
- Envoyer une entrée rappelée fonctionne et réinitialise la navigation.
|
||||
- Historique vide: pas de changement ni erreur.
|
||||
- Slash menu ouvert + `ArrowUp` continue de déplacer l'index des suggestions.
|
||||
|
||||
## Implémentation DevFrontend — 2026-09-10
|
||||
|
||||
### Livré
|
||||
- Suppression de la règle fondée sur la présence d'un saut de ligne avant/après le curseur.
|
||||
- `ArrowUp` n'est intercepté que sans modificateur, hors composition IME (`isComposing` et `keyCode 229`), avec un caret simple exactement à `value.length` et un historique non vide.
|
||||
- `ArrowDown` n'est intercepté qu'avec les mêmes gardes de caret et lorsqu'une navigation d'historique est réellement active; sinon le textarea conserve son comportement natif.
|
||||
- La priorité du menu slash reste inchangée et son scénario `ArrowUp` est maintenant couvert explicitement.
|
||||
- Après rappel ou restauration du brouillon, un effet replace sélection et caret à la fin puis fixe `scrollTop` à `scrollHeight` pour rendre la dernière ligne visible.
|
||||
- Le brouillon mémorisé reste intégral: sauts de ligne, caractères Unicode et espaces finaux ne sont pas normalisés.
|
||||
- `Enter`, `Shift+Enter`, l'envoi, le stockage de l'historique et les textareas hors chat ne sont pas modifiés.
|
||||
|
||||
### Fichiers modifiés
|
||||
- `frontend/src/features/agents/CustomAgentChatView.tsx`
|
||||
- `frontend/src/features/agents/CustomAgentChatView.test.tsx`
|
||||
|
||||
### Commandes exécutées DevFrontend
|
||||
- `cd frontend && npm run typecheck` — vert.
|
||||
- `cd frontend && npm test -- src/features/agents/CustomAgentChatView.test.tsx` — vert, 1 fichier / 71 tests.
|
||||
- `cd frontend && npm run build` — vert, 515 modules transformés; seul l'avertissement Vite existant sur la taille du chunk principal subsiste.
|
||||
- `git diff --check` — vert.
|
||||
|
||||
## Validation QA — 2026-09-10
|
||||
|
||||
Verdict: VERT.
|
||||
|
||||
Commandes exécutées:
|
||||
- `npm test -- src/features/agents/CustomAgentChatView.test.tsx` — OK, 71 tests.
|
||||
- `npm run typecheck` — OK.
|
||||
- `npm run build` — OK, avertissement Vite existant chunk > 500 kB.
|
||||
- `git diff --check` — OK.
|
||||
|
||||
Conclusion QA:
|
||||
- `ArrowUp` rappelle l'historique depuis la fin exacte d'un brouillon multiligne et restaure le brouillon fidèlement via `ArrowDown`.
|
||||
- Les cas sélection, modificateurs, IME, curseur hors fin, historique vide et slash menu ouvert restent natifs/prioritaires.
|
||||
- Aucun finding bloquant.
|
||||
|
||||
## Blocage Topologie Git — 2026-09-10
|
||||
- Branche courante: `fix/304-arrowup-chat-multiline-history`.
|
||||
- `git status` montre les deux fichiers #304 modifiés mais non committés:
|
||||
- `frontend/src/features/agents/CustomAgentChatView.tsx`
|
||||
- `frontend/src/features/agents/CustomAgentChatView.test.tsx`
|
||||
- Main a demandé à Git de committer/merger #304 après QA verte. Trois tentatives `idea_ask_agent` vers Git ont expiré au rendez-vous (600s), malgré un `idea_launch_agent` de rattachement.
|
||||
- Main ne réalise pas la topologie git à la place de l'agent Git selon la règle projet. #304 reste donc QA vert mais non committé/mergé.
|
||||
- #305 ne doit pas démarrer sur le même worktree tant que #304 n'est pas finalisé, pour éviter de mélanger les changements.
|
||||
|
||||
## Topologie Git — 2026-09-10 (reprise après expiration des délégations)
|
||||
|
||||
- QA reconfirmée par Git: `npm test -- src/features/agents/CustomAgentChatView.test.tsx` 71/71, `npm run typecheck` OK, `git diff --check` OK.
|
||||
- Commit du correctif (2 fichiers uniquement): `db312bf` sur `fix/304-arrowup-chat-multiline-history` — `fix(frontend): ArrowUp rappelle l'historique chat même en multiligne — #304`.
|
||||
- Merge local: `develop` ← `--no-ff` → `ee5373e`. Branche `fix/304-arrowup-chat-multiline-history` conservée.
|
||||
- Exclus (worktree, non committés): `.ideai/*` (tickets/counter/index/attachments/chat-drafts), `scripts/`.
|
||||
- Aucun push. #305 peut démarrer: `feature/305-scheduled-project-tasks-mcp` sera resynchronisée sur `develop` par Git avant le début du travail.
|
||||
17
.ideai/tickets/304/issue.md
Normal file
17
.ideai/tickets/304/issue.md
Normal file
@ -0,0 +1,17 @@
|
||||
---
|
||||
id: "82a3dd5e-6628-45b5-8767-1fb769cc9f88"
|
||||
number: 304
|
||||
title: "Navigation historique ArrowUp dans chat multiligne"
|
||||
status: "qa"
|
||||
priority: "high"
|
||||
sprint: null
|
||||
links: []
|
||||
agentRefs: []
|
||||
attachments: []
|
||||
createdBy: {"kind":"agent","agent_id":"a6c6ea12-bfc6-4bdc-8031-324102dfa34d"}
|
||||
updatedBy: {"kind":"agent","agent_id":"a6c6ea12-bfc6-4bdc-8031-324102dfa34d"}
|
||||
createdAt: 1789021772350
|
||||
updatedAt: 1789024612607
|
||||
version: 5
|
||||
---
|
||||
Demande utilisateur du 2026-09-10 : quand le message dans le champ chat fait plus de 2 lignes, la flèche haut remonte le curseur dans le texte au lieu de rappeler le message précédent. Comportement attendu : à la manière d'un terminal Linux, ArrowUp doit remonter dans l'historique des messages du chat quelle que soit la taille du message, tant que le curseur est à la fin de la dernière ligne. Sinon, conserver la navigation normale dans le textarea.
|
||||
Reference in New Issue
Block a user