Files
mabibli/IDEES.md
T
mathieuandClaude Opus 5 718df2c986 Consigner les retours d'usage du 2026-08-19 (3ᵉ série)
Trois points remontés, tous avec leur arbitrage identifié mais non tranché :

- doublon à l'ajout : vérifié, CreerAsync ne contrôle rien et l'index sur
  Isbn n'est pas unique. Reste à décider refus ou avertissement, un second
  exemplaire étant légitime ;
- retirer l'envie correspondante à l'ajout : la difficulté est la portée
  (catalogue commun, envies personnelles), pas le rapprochement ;
- BD et magazines : les BD demandent surtout un type de document, les
  magazines rouvrent la décision actée de ne pas cataloguer les périodiques.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-19 00:35:17 +02:00

14 KiB

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.


Recherche : la ligature « œ » n'est pas réduite à « oe »

Repéré le 2026-08-18 en implémentant la liste d'envies. NormalisationTexte.Normaliser décompose en NFD, qui sépare les accents mais laisse les ligatures intactes — seul NFKD les défait. Conséquence : L'Œuvre et L'oeuvre ne se rencontrent jamais.

Ce n'est pas propre à la liste d'envies : la même fonction alimente la recherche du catalogue et la clé unique des auteurs. Zola a écrit L'Œuvre, que la BnF orthographie avec la ligature ; un utilisateur qui tape « oeuvre » ne le trouvera pas, et ne verra pas non plus le livre grisé dans la bibliographie.

Correction envisagée : passer en NFKD, ou traiter explicitement œ/Œ et æ/Æ. Non fait volontairement — changer cette fonction déplace deux invariants en base (les colonnes normalisées et l'index unique CleRegroupement). ServiceRenormalisation sait recalculer les colonnes au démarrage, mais la fusion d'auteurs que la nouvelle règle provoquerait mérite d'être regardée avant. Documenté par un test (CleOeuvreTests.Ne_reduit_pas_la_ligature_oe) pour que la limite reste visible.


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

La douchette USB est faite (voir CLAUDE.md, « La douchette USB est le vrai remède ») : champ focalisé à l'ouverture, validation sur Entrée. Reste à confirmer en usage réel qu'elle suffit.

Si elle ne suffit pas, pistes non traitées : choisir la caméra quand il y en a plusieurs, demander une résolution plus haute, exposer un curseur de zoom/torche là où l'API le permet, et laisser déposer une photo du code-barres à décoder (ZXing lit un fichier aussi bien qu'une frame).

ISBN 9782846391009 : le scan n'aboutit pas

La donnée existe pourtant côté BnF — vérifié le 2026-08-18 :

bib.isbn all "9782846391009"  → 1 notice
  dc:title   = La thérapie émotivo-rationnelle / Albert Ellis et Robert A. Harper
  dc:creator = Ellis, Albert (1913-2007). Auteur du texte
  dc:creator = Harper, Robert A. (1915-2004). Auteur du texte
(la forme ISBN-10 « 2846391009 » ne renvoie rien : ici c'est bien l'ISBN-13 qui indexe)

L'échec est donc au décodage de l'image, pas au lookup. Rejoint le point ci-dessus. ⚠️ À reproduire en saisissant l'ISBN à la main avant de conclure : si la saisie manuelle échoue aussi, le défaut est ailleurs et ce diagnostic tombe.

Choix de la bibliothèque de lecture de code-barres — à trancher

Constat qui rouvre le sujet, 2026-08-19. L'ISBN 9782846391009 n'est pas décodé par l'application, alors qu'il l'est par une application d'essai (~/Code/TestBarcode) sur le même appareil et le même livre, avec ZBar.

⚠️ Le raisonnement qui écartait ce sujet était faux. CLAUDE.md conclut que « le décodeur n'y est pour rien » à partir de mesures de vitesse (4-6 ms/frame en WASM interprété). Or la vitesse ne dit rien du taux de réussite : un décodeur peut être rapide et rater. Les mesures existantes ne pouvaient donc pas soutenir cette conclusion, et l'essai la contredit.

Ce que l'essai établit, et ce qu'il n'établit pas

Établi : ZBar lit ce code-barres, ZXing.Net (portage C#) ne le lit pas, dans les mêmes conditions physiques.

Non établi : que le moteur soit seul en cause. Notre implémentation ne fait pas que décoder, elle prétraite — réduction à 640 px de large, puis recadrage sur la bande centrale (PartHauteur = 0,45). ZBar, lui, analyse l'image entière. Deux causes candidates cohabitent donc, et l'essai ne les sépare pas :

  1. le moteur (ZXing.Net est un portage d'une version ancienne de ZXing, réputé moins robuste que zbar ou que zxing-js) ;
  2. notre prétraitement (bande trop étroite, ou résolution insuffisante pour la largeur de module à la distance de prise de vue).

Adopter ZBar rendrait la seconde question sans objet : le composant gère lui-même la caméra et l'image.

Le poids : mesuré, et à l'inverse de ce qu'on croyait

Somme brotli réelle du publish Release de l'application d'essai :

Fichier brotli
zbar.wasm (moteur C compilé) 138 938 o
ZBar.Blazor.<empreinte>.wasm (assembly .NET) 21 232 o
zbar.js 5 247 o
camera.js + image.js + scanner.js 2 457 o
CSS isolé 199 o
Total ZBar ≈ 168 Ko

À comparer au coût de ZXing.Net déjà documenté dans CLAUDE.md : ≈ 346 Ko brotli, dont seulement 192 Ko d'assembly — le reste étant les assemblies BCL que le trimmer ne peut plus retirer (System.Text.RegularExpressions passant de 7 à 98 Ko parce que ZXing utilise Regex, plus System.Runtime.Numerics).

Vérifié dans le publish d'essai : System.Text.RegularExpressions y pèse 7 137 o, et System.Runtime.Numerics est absent. ZBar ne traîne pas cette queue.

Le remplacement allégerait donc l'application d'environ 180 Ko brotli, au lieu de l'alourdir. ⚠️ Chiffre à confirmer par une comparaison de deux publish de notre application, comme l'a été celui de ZXing.Net : le coût d'une bibliothèque n'est pas le poids de son assembly.

Ce qu'on perdrait

  • Le décodage quitte le C#. C'est l'argument qui avait fait retenir ZXing.Net : « réutilisable hors navigateur si le projet évolue en scanner de bibliothèque ». Cet usage est hypothétique et n'a jamais été exercé ; il se paie aujourd'hui en codes-barres non lus.
  • IsbnScanner, BancEssaiScan, ScannerCodeBarres et wwwroot/js/scanner-camera.js disparaîtraient au profit du composant ZBarCamera.
  • Une dépendance jeune : ZBar.Blazor 1.1.0. À regarder avant de s'engager (maintenance, licence, taille de la communauté).

Ce qu'on gagnerait, au-delà du code lu

  • Le format est remonté (ISBN_13 vs EAN_13), là où nous le déduisons du préfixe.
  • Les add-ons EAN-5 (prix) et EAN-2 (numéro) sont décodés et rattachables au code principal — l'EAN-2 est précisément ce qui accompagne les périodiques en 977.
  • Plus de pipeline image maison à entretenir (capture, réduction, recadrage, RGBLuminanceSource).

Retours d'usage du 2026-08-19 (3ᵉ série)

Bug — un livre déjà catalogué peut être réencodé

Vérifié dans le code : ServiceCatalogue.CreerAsync ne fait aucun contrôle de doublon, et HasIndex(l => l.Isbn) n'est pas unique. Scanner deux fois le même livre crée deux fiches.

⚠️ À trancher avant de coder : refuser, ou avertir ? Refuser tout net serait un piège, car posséder deux exemplaires est légitime — on garde le sien et on prête l'autre. Et l'ISBN est facultatif, donc il ne peut pas être le seul critère.

Trois critères candidats, de plus en plus large :

Critère Attrape Rate / gêne
ISBN identique le rescan du même livre, cas visé rien si l'ISBN manque ; refuse un second exemplaire
Clé d'œuvre + auteur (CleOeuvre, comme la liste d'envies) la saisie manuelle sans ISBN confond le poche et le grand format, qui sont deux éditions possédées
les deux, en avertissement tout ce qui précède demande une confirmation de plus

Piste privilégiée : avertir et laisser confirmer (« Vous avez déjà Germinal — ajouter quand même ? »), plutôt que l'index unique qui interdirait le second exemplaire. La liste d'envies, elle, refuse — mais elle décrit une envie, pas un objet, et deux exemplaires d'une envie n'ont pas de sens.

À l'ajout d'un livre, retirer l'envie correspondante

Demandé : si le livre ajouté figure dans la liste d'envies, l'en retirer.

⚠️ La difficulté est la portée, pas le rapprochement. Le catalogue est commun, la liste d'envies est personnelle — ce sont les deux portées que CLAUDE.md oppose explicitement. « Retirer l'envie » n'a donc pas une seule réponse :

  • la sienne uniquement : simple, sûr, ne franchit aucune frontière. Mais si Camille souhaitait le livre et que Mathieu l'ajoute, Camille garde une envie pour un livre que le foyer possède.
  • celle de tout le monde : cohérent avec « le livre est commun », mais modifie silencieusement la liste d'un autre, et lui fait perdre sa note (« demandé à Noël »). L'API ne sait pas — délibérément — écrire dans la liste d'autrui : ce serait une brèche à ouvrir dans un invariant tenu jusqu'ici.
  • ne rien supprimer, mais signaler : la liste d'envies marque l'entrée « déjà au catalogue ». Non destructif, respecte la frontière, et l'écran de bibliographie sait déjà distinguer Possede de Souhaite.

⚠️ Le rapprochement se ferait par CleOeuvre + auteur, avec les mêmes limites que la bibliographie (titre retraduit, tome, intégrale — voir CLAUDE.md). Une suppression sur un rapprochement faillible est irréversible ; un signalement ne l'est pas. C'est un argument de poids pour la troisième voie.

Bandes dessinées et magazines

Deux demandes distinctes, de coût très différent.

Les BD : surtout une question de type de document

Une BD est déjà catalogable telle quelle — elle a un ISBN, la BnF la connaît (vérifié au lot 6 : la BD de Dobbs tirée de La bête humaine remonte bien). Ce qui manque est de pouvoir la distinguer : Format dit physique ou numérique, pas roman ou BD.

Piste : un TypeDocument (roman / BD / magazine…) à côté de Format, avec migration, filtre au catalogue et étiquette. ⚠️ Suivre la règle déjà actée pour le format : n'afficher que ce qui n'est pas le cas par défaut, sinon chaque ligne du catalogue porte une étiquette qui n'apprend rien.

Champs propres à la BD (série, tome, scénariste/dessinateur) : à ne faire que si le besoin se confirme. Le modèle actuel met tous les auteurs dans LivreAuteur sans distinguer les rôles.

Les magazines : cela rouvre une décision actée

⚠️ CLAUDE.md (lot 1) écarte délibérément le catalogage des périodiques : « le modèle de données n'a ni numéro ni date de parution, et les deux chiffres de parution du code ne sont pas exploitables comme numéro fiable — douze numéros d'un même magazine partagent leur ISSN et créeraient douze fiches identiques ». Le scan d'un code 977 nomme donc la revue et bascule sur la saisie manuelle, sans l'ISBN.

Les supporter vraiment demande de lever exactement ce qui avait motivé le refus :

  • un ISSN distinct de l'ISBN (le ranger dans Livre.Isbn casserait tout lookup ultérieur) ;
  • un numéro et une date de parution, seuls capables de distinguer deux exemplaires ;
  • de décider si un magazine est une fiche par numéro ou une fiche par revue avec des numéros rattachés — c'est le vrai choix de modélisation, et il change la migration ;
  • de reprendre le flux 977 pour qu'il crée au lieu d'expliquer.

À trancher avant tout code. Le reste (filtres, prêts, hors-ligne) suit mécaniquement une fois le modèle arrêté.

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.