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>
This commit is contained in:
mathieu
2026-08-19 00:35:17 +02:00
co-authored by Claude Opus 5
parent 281d74a29d
commit 718df2c986
+86
View File
@@ -155,6 +155,92 @@ celui de ZXing.Net : le coût d'une bibliothèque n'est pas le poids de son asse
l'EAN-2 est précisément ce qui accompagne les périodiques en `977`. 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`). - **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 ## Auteurs et bibliographie
### Homonymes : « Between two worlds », un autre Robert Harper ### Homonymes : « Between two worlds », un autre Robert Harper