Files
mabibli/IDEES.md
T
LIMONIER MathieuandCopilot 3d5e73838e Sépare consultation et édition pour les lots B1 B2 B3
Réutilise la carte livre du catalogue, sépare les modes des séries et des envies, et déplie les œuvres bibliographiques non possédées.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-08-20 13:11:43 +02:00

252 lines
14 KiB
Markdown

# IDEES.md — améliorations envisagées
Ce fichier recueille les idées et corrections identifiées en cours de route, **pas encore implémentées**. Il n'a pas valeur de décision : rien ici n'est acté tant que ce n'est pas repris dans `CLAUDE.md` ou traité dans une phase.
Le travail visuel de fond (couleurs, typographie, mise en page) est repoussé volontairement : il sera fait quand les fonctionnalités seront en place.
---
## Qualité des données
### Recherche insensible aux accents
« Emile » ne trouve pas « Émile ». Gênant sur un fonds francophone.
**Semble réglé par la refonte du schéma** (colonnes normalisées, voir `CLAUDE.md`) : vérifié le 2026-08-18 sur l'API, `recherche=Emile` remonte bien les livres d'« Émile Zola ». Laissé ici faute d'avoir été traité comme un point à part entière — à confirmer sur un fonds réel avant de le retirer.
---
## Bibliographie : ce qui reste à creuser
La bibliographie par auteur est implémentée (voir `CLAUDE.md`). Deux pistes non traitées :
- **Plafond de 200 notices.** Suffisant pour un auteur contemporain (Werber : 203, Nothomb : 277),
très insuffisant pour un classique (Zola : 2692). L'écran le dit, mais on pourrait charger les
pages suivantes à la demande plutôt que d'annoncer un extrait.
- **OpenLibrary en second rideau.** La BnF ne connaît pas les auteurs étrangers non traduits ;
l'écran affiche alors une liste vide et l'explique. OpenLibrary expose les œuvres d'un auteur
(`/authors/{id}/works.json`) et pourrait prendre le relais — à ne faire que si le cas se
présente réellement en usage.
---
# Retours d'usage du 2026-08-18 (2ᵉ série)
Demandes et anomalies remontées après quelques jours d'usage réel. **Rien n'est acté** :
ce qui suit est la matière brute, classée par sujet, avec ce que le diagnostic a déjà établi.
## Scan et saisie d'ISBN
### Le scan caméra rate souvent sur ordinateur
**Deux remèdes appliqués**, tous deux dans `CLAUDE.md` : la **douchette USB** (champ focalisé,
validation sur `Entrée`) et surtout la **bascule de ZXing.Net vers zbar** — c'était bien le
décodeur, contrairement à ce qu'on avait conclu de mesures de vitesse.
Reste à confirmer en usage réel. Si cela ne suffisait toujours pas : choisir la caméra quand il
y en a plusieurs, exposer un curseur de zoom/torche là où l'API le permet, et laisser **déposer
une photo** du code-barres à décoder.
### ISBN `9782846391009` : résolu — c'était le décodeur
Le livre existe bien à la BnF : l'échec était **au décodage de l'image**. Confirmé le
2026-08-19 — zbar lit ce code-barres, ZXing.Net ne le lisait pas, sur le même appareil et le
même livre. La bascule est faite (voir `CLAUDE.md`).
⚠️ **À confirmer avec le livre en main** : la vérification faite jusqu'ici porte sur un EAN-13
rendu en canvas, pas sur une image de caméra.
---
# Retours d'usage du 2026-08-19 (3ᵉ série)
## Ce qui reste des magazines : confirmer l'EAN-2 sur un vrai kiosque
Le numéro scanné est implémenté (voir `CLAUDE.md`) : zbar lit l'add-on EAN-2 — après l'avoir
**activé**, il est désactivé par défaut — et l'écran de la revue le propose dans un champ à
vérifier.
⚠️ **Ce qui n'est toujours pas vérifié** : que les magazines réels portent bien leur numéro de
parution dans cet add-on, et non autre chose. La chaîne de décodage est prouvée sur un code
généré ; l'usage éditorial demande un exemplaire devant la caméra. À faire sur trois ou quatre
numéros d'un même titre : si l'EAN-2 suit la parution, le message d'avertissement pourra
s'alléger ; s'il ne la suit pas, c'est le pré-remplissage qu'il faudra retirer.
## Auteurs et bibliographie
### Homonymes : « Between two worlds », un autre Robert Harper
Constaté le 2026-08-19 en vérifiant la bibliographie de Robert A. Harper : parmi les 7 œuvres
retenues figure *Between two worlds : a new introduction to geography* (1973, Houghton Mifflin),
qui est d'un **géographe homonyme**, pas du psychothérapeute.
Le post-filtre d'auteur ne peut rien : `RapprochementAuteurs` compare des **noms**, et ces
deux-là portent le même. Départager demanderait les dates de vie (`dc:creator` les porte souvent :
« Harper, Robert A. (1915-2004) »), ce que le parser jette aujourd'hui au nettoyage ISBD.
⚠️ Ne pas en faire une urgence : une œuvre en trop se voit et s'ignore, contrairement à une œuvre
manquante. Piste si le cas se répète : conserver les dates extraites de `dc:creator` et écarter
une notice dont les dates contredisent celles majoritairement observées pour l'auteur.
### OpenLibrary en second rideau — la justification est retombée
Le cas « Robert A. Harper » semblait l'imposer : il s'est révélé être un **délai dépassé**, pas un
trou de couverture (voir `CLAUDE.md`). La BnF connaît bien cet auteur.
La piste reste valable pour les auteurs étrangers **non traduits**, avec ses deux difficultés
inchangées : résoudre un nom vers un identifiant OpenLibrary (`/search/authors.json`), étape sans
é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
**A1 à A4 traités le 2026-08-20** (voir `CLAUDE.md`, section « Habillage — retours d'usage du
2026-08-19 traités »). Reste ouvert :
### A5. Alléger les couvertures (redimensionnement / WebP)
Le cache hors-ligne des couvertures est fait (voir `CLAUDE.md`), mais chaque affichage en ligne
retélécharge toujours l'image OpenLibrary à sa taille d'origine — rien n'est redimensionné à la
taille réellement affichée, ni converti en WebP.
⚠️ À peser avant de s'y engager, même règle que pour l'AOT : une conversion n'a de sens que si la
mesure montre un gain réel. Pas encore mesuré à l'échelle d'un vrai fonds.
---
## Lot B — Consulter d'abord, modifier ensuite — traité le 2026-08-20
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.
✅ Traité : voir la décision et les limites retenues dans `CLAUDE.md`.
⚠️ 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.