# 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.** Traité pour la recherche « nouveautés d'un auteur » du lot E :
  elle charge jusqu'à 1000 notices avec un bornage explicite. La bibliographie générale reste
  plafonnée à 200 et continue d'annoncer honnêtement qu'elle est tronquée.
- **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 — traité le 2026-08-20

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.

✅ Traité : voir `CLAUDE.md` (C1 à C5). Les revues restent explicitement hors périmètre de C5.

---

## Lot D — La bibliographie devient un écran de travail

✅ Traité le 2026-08-20 : voir `CLAUDE.md`, section « Lot D — bibliographie é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

✅ Traité le 2026-08-20 : voir `CLAUDE.md`, section « 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.
