L'ISBN 9782846391009 n'était pas décodé par l'application, alors qu'il l'était par une application d'essai utilisant zbar, sur le même livre et le même appareil. ⚠️ Le raisonnement qui avait écarté cette piste était faux : CLAUDE.md concluait que « le décodeur n'y est pour rien » à partir de mesures de VITESSE (4-6 ms/frame). La vitesse ne dit rien du taux de réussite. Le décodage quitte donc le C# pour zbar compilé en WebAssembly, dont les assets viennent du paquet ZBar.Blazor. Ce que la bascule apporte, au-delà du code lu : - plus aucun pixel ne traverse le pont JS→C# (un byte[] par frame avant), seule la valeur décodée le fait ; - l'image ENTIÈRE est analysée, à 960 px, là où l'ancienne version recadrait sur la bande centrale à 640 px pour alléger ce transfert — c'était la seconde cause possible des codes non lus, elle disparaît ; - zbar.wasm est chargé À LA DEMANDE, à la première ouverture du scanner. ⚠️ Le composant ZBarCamera du paquet n'est PAS utilisé : il ouvre la caméra lui-même et avale les erreurs. On y perdrait les messages qui distinguent permission refusée, absence de caméra, caméra occupée et contexte non sécurisé, ainsi que facingMode environment (caméra arrière) et l'indication de résolution. Seuls zbar.js et zbar.wasm sont empruntés. Poids, comparaison de deux publish Release complets (somme brotli) : _framework 3 281 558 → 2 978 700 o (−296 Kio au démarrage) total 3 281 558 → 3 125 541 o (−152 Kio) L'écart vient de la traîne que ZXing imposait au trimmer : System.Text.RegularExpressions retombe de 98 374 à 7 137 o, et System.Runtime.Numerics disparaît. ⚠️ Coût assumé : six tests de décodage disparaissent avec IsbnScanner, le décodeur n'étant plus en C#. Le décodage a été vérifié dans le navigateur sur un EAN-13 rendu en canvas — 9782846391009 ressort bien en ZBAR_EAN13 — mais cela reste une vérification, pas un garde-fou. À confirmer avec le livre en main. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
219 lines
12 KiB
Markdown
219 lines
12 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.
|
|
|
|
---
|
|
|
|
## 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
|
|
|
|
**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)
|
|
|
|
## 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, signaler l'envie correspondante
|
|
|
|
**Décidé le 2026-08-19 : on ne supprime rien, on signale.** La liste d'envies marque l'entrée
|
|
« déjà au catalogue ».
|
|
|
|
Pourquoi pas la suppression, qui était la demande initiale :
|
|
|
|
- le catalogue est **commun**, la liste d'envies **personnelle**. Supprimer l'envie d'un autre
|
|
modifierait sa liste en silence et lui ferait perdre sa note (« demandé à Noël ») ; l'API ne
|
|
sait pas — délibérément — écrire dans la liste d'autrui, et l'ouvrir serait une brèche dans un
|
|
invariant tenu partout ailleurs ;
|
|
- le rapprochement se fait par `CleOeuvre` + auteur, donc **faillible** (titre retraduit, tome,
|
|
intégrale — voir `CLAUDE.md`). Une suppression fondée sur un rapprochement faux est
|
|
irréversible ; un signalement se corrige d'un coup d'œil.
|
|
|
|
Reste à implémenter : le marquage dans `SouhaitDto`, calculé comme l'est déjà `Possede` dans la
|
|
bibliographie, et son rendu sur l'écran des envies.
|
|
|
|
## 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 : une fiche par revue, les numéros à l'intérieur
|
|
|
|
⚠️ Rouvre la décision du lot 1, qui écartait le catalogage des périodiques faute de modèle.
|
|
Le modèle est maintenant choisi.
|
|
|
|
**Décidé le 2026-08-19 : une fiche par REVUE**, et dans sa page, la sélection d'un numéro
|
|
précis. C'est exactement ce qui évite le défaut redouté — douze numéros d'un même magazine ne
|
|
font plus douze fiches identiques, puisqu'ils partagent la fiche de leur revue.
|
|
|
|
Ce que cela demande :
|
|
|
|
- un **ISSN** sur la fiche de revue, distinct de l'ISBN. ⚠️ Ranger un code `977` dans
|
|
`Livre.Isbn` casserait tout lookup ultérieur sur cette fiche ;
|
|
- une table de **numéros** rattachés à la revue, portant au minimum un numéro et une date de
|
|
parution ;
|
|
- reprendre le flux `977` : il nomme aujourd'hui la revue et bascule sur la saisie manuelle, il
|
|
devra créer ou compléter la fiche puis proposer d'ajouter le numéro scanné. ⚠️ Les deux
|
|
chiffres de parution du code-barres **ne sont pas un numéro fiable** ; l'add-on **EAN-2**, que
|
|
zbar sait maintenant décoder, est le bon candidat — à vérifier sur des magazines réels ;
|
|
- décider ce qu'un **prêt** signifie pour une revue : on prête un numéro, pas un abonnement.
|
|
|
|
## Sagas et cycles : plusieurs livres, un ordre de lecture
|
|
|
|
Demandé le 2026-08-19. Cas donné : [Drizzt Do'Urden](https://fr.wikipedia.org/wiki/Drizzt_Do%27Urden)
|
|
— **plusieurs regroupements de plusieurs livres, à lire dans un ordre précis**. Vaut pour les
|
|
romans comme pour les BD.
|
|
|
|
C'est la première demande du projet qui porte sur une **relation entre livres** plutôt que sur
|
|
un livre. Ce que le cas Drizzt impose, et qu'un simple champ « série » ne couvrirait pas :
|
|
|
|
- **Deux niveaux.** *La Légende de Drizzt* regroupe plusieurs trilogies (*L'Elfe noir*,
|
|
*La Séquence de l'Icewind Dale*…) : un cycle contient des séries, qui contiennent des tomes.
|
|
Un champ texte plat perdrait ce regroupement.
|
|
- **L'ordre de lecture n'est pas l'ordre de publication.** *L'Elfe noir* est une préquelle écrite
|
|
après. C'est précisément l'information qu'on vient chercher : elle doit être **stockée**, pas
|
|
déduite de l'année.
|
|
- **Un livre peut appartenir à plusieurs regroupements** (une intégrale, une série, un cycle).
|
|
- **Ce qu'on possède est partiel.** L'intérêt de l'écran est de montrer les trous — « il vous
|
|
manque le tome 3 » — comme la bibliographie montre déjà ce qui manque d'un auteur.
|
|
|
|
Questions à trancher avant tout modèle :
|
|
|
|
- **D'où viennent les séries ?** La BnF ne les expose pas de façon exploitable en Dublin Core.
|
|
Saisie à la main, déduction depuis le titre (« Tome 3 »), ou source tierce ?
|
|
- **Portée** : commune au foyer, comme le catalogue, ou personnelle ? L'ordre de lecture est une
|
|
propriété de l'œuvre et non du lecteur — donc commune, a priori.
|
|
- **Les tomes non possédés** existent-ils en base, ou sont-ils seulement affichés ? S'ils
|
|
existent, ils ressemblent beaucoup à des envies, et il faudra dire comment les deux cohabitent.
|
|
|
|
⚠️ Ne pas confondre avec le regroupement d'œuvres de la bibliographie (`CleOeuvre`), qui réunit
|
|
les **rééditions d'un même titre**. Ici, ce sont des titres **différents** qui se suivent.
|
|
|
|
## 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.
|