Ajout des bugs et idées dans la liste des choses à faire.
This commit is contained in:
@@ -98,3 +98,204 @@ inchangées : résoudre un nom vers un identifiant OpenLibrary (`/search/authors
|
||||
équivalent BnF et sensible aux homonymes ; et des œuvres remontées **en langue originale**, donc
|
||||
non rapprochables du catalogue par `CleOeuvre` — l'écran afficherait une liste où presque rien ne
|
||||
serait marqué « possédé ». À ne faire que si le cas se présente réellement.
|
||||
|
||||
---
|
||||
|
||||
# Retours d'usage du 2026-08-19 (4ᵉ série)
|
||||
|
||||
Matière brute remontée après usage sur téléphone. **Rien n'est acté.** Les items sont regroupés
|
||||
en **lots** : chaque lot tient dans un même geste de conception et pourrait faire une phase.
|
||||
L'ordre des lots est un ordre de dépendance et non de priorité — le lot A débloque tout le reste
|
||||
visuellement, le lot B fixe un motif que les lots C à E réutilisent.
|
||||
|
||||
Le classement est un **regroupement**, pas un arbitrage : ce qui suit n'a pas encore été
|
||||
instruit, et plusieurs items voisins pourraient se révéler être le même travail — ou des travaux
|
||||
sans rapport.
|
||||
|
||||
---
|
||||
|
||||
## Lot A — L'habillage : la navigation ne ressemble à rien
|
||||
|
||||
Le lot qui se voit à chaque écran, et le seul dont le défaut ressemble à une régression.
|
||||
|
||||
### A1. Les six onglets s'affichent en liens bruts (anomalie, pas une demande)
|
||||
|
||||
Constaté sur la capture du 2026-08-19 : `CatalogueAuteursSériesRevuesPrêtsEnvies` s'affiche en
|
||||
bas de page, en bleu souligné, collés les uns aux autres — c'est-à-dire **sans aucune des règles
|
||||
de `MainLayout.razor.css`** : ni `position: fixed`, ni `display: flex`, ni les libellés espacés.
|
||||
|
||||
⚠️ **Ce n'est probablement pas un défaut de mise en forme à refaire, mais une feuille de style
|
||||
périmée.** Sur la même capture, le bandeau supérieur **est** bleu foncé — or `.bandeau` et
|
||||
`.onglets` vivent dans le **même fichier** scopé. Une moitié appliquée et l'autre pas ne
|
||||
s'explique pas par le CSS lui-même : elle s'explique par un `MaBibli.Client.styles.css` **d'avant
|
||||
l'ajout des onglets**, servi à côté d'un WASM à jour (le balisage, lui, montre bien les six
|
||||
onglets).
|
||||
|
||||
Hypothèse à vérifier **avant** de toucher au style, sous peine de « corriger » du code sain :
|
||||
|
||||
1. le nom `MaBibli.Client.styles.css` est **stable** (les empreintes sont désactivées, voir
|
||||
`CLAUDE.md`) — rien d'autre que le service worker ne le fait expirer ;
|
||||
2. or le service worker **ne s'enregistre pas** dans certains contextes, et un onglet resté
|
||||
ouvert diffère l'activation d'un nouveau worker.
|
||||
|
||||
Contrôles qui trancheraient : ouvrir `/MaBibli.Client.styles.css` sur le serveur et y chercher
|
||||
`.onglets` ; comparer avec le fichier du dernier publish ; recharger en vidant le cache.
|
||||
Si la règle **est** présente et pourtant sans effet, alors seulement chercher du côté de
|
||||
l'attribut de portée (`b-xxxxx`) que `NavLink` doit relayer via ses attributs additionnels.
|
||||
|
||||
### A2. Les filtres reprennent le vocabulaire visuel des cartes
|
||||
|
||||
Les états *À lire / En cours / Lu* et les types *Roman / BD* s'affichent en pastilles colorées
|
||||
sur les cartes du catalogue, mais en segments neutres dans le panneau « Filtrer ». Demander la
|
||||
**même pastille** dans le filtre, pour qu'on reconnaisse ce qu'on filtre.
|
||||
|
||||
### A3. Une identité visuelle : trois images, trois emplacements distincts
|
||||
|
||||
À ne pas confondre, les trois ne vivent pas au même endroit :
|
||||
|
||||
| Où | Quoi | Porté par |
|
||||
|---|---|---|
|
||||
| Catalogue d'applications YunoHost | logo de l'app | `mabibli_ynh` (`doc/`, manifeste) |
|
||||
| Bandeau de l'application | petit logo à côté de « MaBibli » | `MaBibli.Client/wwwroot` |
|
||||
| Installation PWA (téléphone, PC) | icône d'accueil et écran de démarrage | `manifest.webmanifest` + icônes 192/512 |
|
||||
|
||||
⚠️ La troisième est la seule qui a des contraintes dures (tailles, `purpose: maskable`), et
|
||||
c'est aussi la seule que le service worker met en cache — donc celle dont un changement se voit
|
||||
le plus tard.
|
||||
|
||||
### A4. Couvertures : ne pas agrandir ce qui n'existe pas
|
||||
|
||||
Cliquer une vignette absente ne doit rien ouvrir. `CLAUDE.md` affirme que le bouton n'est rendu
|
||||
que lorsqu'une `CoverUrl` existe — **le cas remonté est donc probablement l'image *cassée*** :
|
||||
URL présente, mais 502 ou 404 d'OpenLibrary (intermittence documentée). Le `onerror` remplace
|
||||
l'image ; il devrait aussi **retirer le déclencheur d'agrandissement**.
|
||||
|
||||
### A5. Garder les couvertures en cache, et les alléger
|
||||
|
||||
Aujourd'hui chaque affichage retélécharge l'image chez OpenLibrary — donc rien hors-ligne, et
|
||||
des vignettes manquantes au gré des 502. Piste : stocker l'image (IndexedDB, à côté des
|
||||
instantanés) et la réduire à la taille réellement affichée.
|
||||
|
||||
⚠️ À peser : c'est le premier contenu **binaire et volumineux** du cache hors-ligne, dont
|
||||
`CLAUDE.md` note qu'il pèse aujourd'hui ~2,4 Ko pour 10 livres. Une conversion (WebP) n'a de sens
|
||||
que si la mesure montre un gain — même règle que pour l'AOT.
|
||||
|
||||
---
|
||||
|
||||
## Lot B — Consulter d'abord, modifier ensuite
|
||||
|
||||
Un seul motif, déjà acté et éprouvé pour la fiche livre (`/livres/{id}` consulte,
|
||||
`/livres/{id}/edition` modifie, le mode est **dans l'URL**), à étendre aux écrans qui présentent
|
||||
encore un formulaire vivant sous le pouce.
|
||||
|
||||
- **B1. Fiche d'une série** : vue de lecture seule + bouton « Modifier ». La liste des tomes s'y
|
||||
présente **comme le catalogue** (même carte, même pastille de statut), au lieu d'une liste à
|
||||
part.
|
||||
- **B2. Liste d'envies** : idem — on la consulte bien plus souvent qu'on ne la réordonne, et les
|
||||
flèches monter/descendre sont précisément ce qu'on déclenche par erreur en faisant défiler.
|
||||
⚠️ Même raisonnement que le retrait des boutons de statut des cartes du catalogue.
|
||||
- **B3. Bibliographie d'un auteur** : même carte que le catalogue, et un **clic ouvre le détail**
|
||||
de l'œuvre au lieu de s'arrêter à une ligne.
|
||||
|
||||
⚠️ Le point commun des trois n'est pas cosmétique : c'est **une seule carte de livre** réutilisée
|
||||
partout. Si les trois écrans réimplémentent la carte chacun de leur côté, les pastilles
|
||||
divergeront comme le filtre a divergé (voir A2).
|
||||
|
||||
---
|
||||
|
||||
## Lot C — Séries, cycles et arborescence
|
||||
|
||||
Le lot le plus structurant, et le seul qui touche au modèle.
|
||||
|
||||
- **C1. Ordonner les séries d'un cycle** par ordre de lecture — la position existe déjà
|
||||
(`Serie.Position`), il manque le geste dans l'écran.
|
||||
- **C2. Replier / déplier le contenu de chaque série** dans un cycle, chaque série repliée
|
||||
montrant sa vue de consultation (lot B).
|
||||
- **C3. Totaliser les livres d'un cycle**, en sommant ce qui est plus bas dans l'arbre
|
||||
(possédés / manquants).
|
||||
- **C4. Un véritable arbre** descendant sur plusieurs niveaux, plutôt que deux niveaux affichés.
|
||||
⚠️ La profondeur est déjà **non bornée en base** ; c'est l'affichage qui s'arrête. Se souvenir
|
||||
que la remontée de parenté est bornée par le nombre de séries, garde-fou anti-boucle à ne pas
|
||||
perdre en descendant.
|
||||
- **C5. Ajouter un tome depuis la série**, sans repasser par le catalogue : soit comme **livre
|
||||
possédé**, soit comme **envie**, avec les métadonnées pré-remplies.
|
||||
|
||||
Cas donné : `9791028111403`. C'est le seul item du lot qui **relie trois portées** — la place
|
||||
dans la série est commune, l'envie est personnelle, le livre est commun. `MettreEnEnviesAsync`
|
||||
fait déjà la traversée ; ce qui manque est le **pré-remplissage** (lookup ISBN depuis la place),
|
||||
et il lèverait au passage la limite connue « aucun auteur transmis à l'envie créée », donc
|
||||
l'absence de marquage « déjà au catalogue » à l'achat.
|
||||
|
||||
⚠️ Formulation d'origine : « ajouter les livres, magazines et BD depuis série comme un livre
|
||||
possédé ». Les **revues** y sont mentionnées alors qu'`ElementSerie.LivreId` pointe `Livre` :
|
||||
rattacher un numéro de revue à une série demanderait un second lien nullable, ou une parenté
|
||||
commune. À instruire avant de promettre — ce n'est pas le même travail que le reste du lot.
|
||||
|
||||
---
|
||||
|
||||
## Lot D — La bibliographie devient un écran de travail
|
||||
|
||||
Aujourd'hui elle se consulte ; les cinq items la font servir à **constituer** une liste.
|
||||
|
||||
- **D1. Mettre en cache une bibliographie déjà demandée.** Elle coûte ~0,85 s par page, deux
|
||||
pages en parallèle, et on y revient. ⚠️ Elle est déjà le seul écran où une source **muette**
|
||||
est distinguée d'une source **vide** : ne jamais mettre en cache un `SourceMuette`, sous peine
|
||||
de figer « rien trouvé » pour un incident réseau — c'est exactement le défaut corrigé le
|
||||
2026-08-19, sous une autre forme.
|
||||
- **D2. Un bouton « Filtrer »**, avec au minimum **« ceux que j'ai déjà »** (et son inverse).
|
||||
- **D3. Afficher le statut de lecture** sur les œuvres possédées — la pastille du lot B suffirait.
|
||||
- **D4. Masquer des œuvres** pour y voir clair, le filtre permettant de réafficher les masquées.
|
||||
⚠️ C'est la première **exception assumée** à la règle « on grise, on ne masque jamais », qui
|
||||
existe parce qu'un rapprochement par titre rate des choses. Un masquage **explicite** de
|
||||
l'utilisateur n'est pas un rapprochement automatique — mais il faut décider sa portée
|
||||
(personnelle comme les envies ? commune comme le catalogue ?) et le rendre **visible**
|
||||
(« 12 masquées ») plutôt que silencieux.
|
||||
- **D5. Sélection multiple** pour ajouter plusieurs œuvres aux envies en une fois. C'est ce qui
|
||||
transforme l'écran : cocher dix titres de Werber et valider.
|
||||
|
||||
---
|
||||
|
||||
## Lot E — Trouver ce qu'on veut souhaiter
|
||||
|
||||
L'écran `/souhaits/ajout` rend aujourd'hui une liste plate.
|
||||
|
||||
- **E1. ISBN et couverture dans les résultats** de recherche. ⚠️ L'ISBN existe déjà dans la
|
||||
notice (`dc:identifier`, il alimente `CoverUrl`) : c'est de l'affichage, à passer par
|
||||
`FormatageIsbn.Afficher`.
|
||||
- **E2. Trier les résultats** par date, éditeur ou titre.
|
||||
- **E3. Recherche par auteur limitée aux nouveautés** : ce qui est paru **depuis le livre le plus
|
||||
récent que l'on possède** de cet auteur. C'est la question « qu'est-ce qui m'a échappé ? », et
|
||||
elle est aujourd'hui sans réponse.
|
||||
|
||||
⚠️ Deux pièges connus la rendent moins simple qu'elle n'en a l'air : le représentant d'une
|
||||
œuvre est la notice **la plus ancienne** (édition originale), donc « paru depuis » ne se lit pas
|
||||
sur la date affichée ; et le plafond de 200 notices écrête justement les auteurs les plus
|
||||
réédités. À instruire avec la reprise de pagination (voir « Bibliographie : ce qui reste à
|
||||
creuser »).
|
||||
|
||||
---
|
||||
|
||||
## Lot F — Enrichir la fiche d'un livre
|
||||
|
||||
- **F1. Un lien vers la notice source** (BnF, OpenLibrary) sur la fiche. Peu coûteux, et c'est le
|
||||
recours quand une donnée paraît fausse. ⚠️ Suppose de **conserver l'identifiant de la notice**
|
||||
au lookup, ce que le modèle ne fait pas aujourd'hui : ce n'est donc pas un simple lien à
|
||||
afficher, mais une colonne de plus.
|
||||
- **F2. Des thèmes en étiquettes** (dark fantasy, science-fiction, space opera…). Grosse maille :
|
||||
table de tags, saisie, filtre, et la question de la **portée** (commune ? personnelle ?). Une
|
||||
source automatique est douteuse — le Dublin Core BnF porte `dc:subject`, mais avec un vocabulaire
|
||||
Rameau qui ne ressemble pas à ces mots-là. À instruire séparément du reste du lot.
|
||||
- **F3. Renommer un auteur**, la correction se répercutant sur tous ses livres. ⚠️ Le n-n est déjà
|
||||
en place, donc un seul `Auteur.Nom` à changer — mais **`NomNormalise` et `CleRegroupement` se
|
||||
recalculent**, et la clé porte un index **unique**. Renommer « Hamilton » en « Peter F. Hamilton »
|
||||
peut donc **entrer en collision** avec une fiche existante : le geste est alors une **fusion**,
|
||||
pas un renommage, et il faut le dire à l'utilisateur au lieu d'échouer sur une contrainte.
|
||||
|
||||
---
|
||||
|
||||
## Lot G — Prêts
|
||||
|
||||
- **G1. Filtrer les prêts en cours par nom d'emprunteur.** Le plus petit item de la liste.
|
||||
⚠️ `Emprunteur` est un texte libre sans colonne normalisée : soit on cherche en mémoire (la
|
||||
liste est courte, c'est probablement suffisant), soit on ajoute une forme normalisée — et alors
|
||||
`ServiceRenormalisation` doit la reprendre, comme pour les six autres colonnes.
|
||||
|
||||
Reference in New Issue
Block a user