Documente les lots I à P, et ce qui reste volontairement de côté

Les décisions, les pièges, et ce qui n'a pas été vérifié : les écrans reposent
sur la compilation et la relecture, pas sur une exécution en navigateur.

Restent écartés, avec leur motif : l'allègement des couvertures (à mesurer
d'abord, même règle que l'AOT), la photo de couverture (le projet ne stocke pas
de fichiers), l'URL finale après redirections, les homonymes d'auteur, et la
confirmation de l'EAN-2, qui demande un magazine devant la caméra.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
mathieu
2026-08-21 11:25:58 +02:00
co-authored by Claude Opus 5
parent 7c050cb410
commit 41e5c7a3fb
2 changed files with 229 additions and 5 deletions
+38 -5
View File
@@ -268,6 +268,11 @@ Non actés : ce fichier ne fait pas autorité, `CLAUDE.md` reste la référence.
## Lot I — La bibliographie d'un auteur
**Traité le 2026-08-21** : voir `CLAUDE.md`, section « Lots I à P ». « Tout cocher » vit à
côté du filtre (la barre de sélection n'apparaît qu'une fois une case cochée, trop tard pour
rendre service) et ne coche que ce qui est **visible** ; la couverture d'une œuvre non possédée
n'est chargée qu'au dépliage.
- **I1. « Tout cocher », à côté de « Tout décocher »**. Dès qu'une case est cochée, la barre de
sélection n'offre que le geste inverse : pour ajouter aux envies l'essentiel d'une
bibliographie, il faut cocher ligne à ligne. ⚠️ « Tout » doit signifier **ce qui est
@@ -283,6 +288,10 @@ Non actés : ce fichier ne fait pas autorité, `CLAUDE.md` reste la référence.
## Lot J — Le scan là où il manque
**Traité le 2026-08-21.** Les deux items étaient du raccordement, `ScannerCodeBarres` étant
déjà autonome. Pour J1, le scanner s'ouvre **dans la place visée** : il n'y a donc pas de retour
à organiser, on n'a jamais quitté la série.
- **J1. Scanner depuis une série**, sur une place vide. Le flux existe déjà en pièces détachées
(`/ajout` décode, la place sait accueillir un livre créé par ISBN), mais il faut passer par
l'écran d'ajout puis revenir rattacher à la main. ⚠️ Le retour doit ramener **sur la série et
@@ -294,6 +303,13 @@ Non actés : ce fichier ne fait pas autorité, `CLAUDE.md` reste la référence.
## Lot K — Couvertures et saisie
**K2 traité le 2026-08-21** ; **K1 écarté avec l'utilisateur** au profit d'une URL collée (voir
le lot O1) — le stockage de fichiers reste hors du projet.
⚠️ K2 est allé un cran plus loin que ce qui est écrit ci-dessous : la forme à tiret est aussi
celle **rangée en base**, faute de quoi un ISSN saisi à la main ne se rapprochait ni du
code-barres ni de `bib.issn`. Les champs de saisie, eux, gardent bien la valeur tapée.
- **K1. Photographier la couverture** quand aucune source n'en fournit. ⚠️ C'est le premier
point du projet qui **stocke un fichier**, ce que « Ebooks : fiches uniquement » écartait
jusqu'ici : espace disque YunoHost, sauvegarde plus lourde, et cache hors-ligne à alimenter
@@ -310,6 +326,10 @@ Non actés : ce fichier ne fait pas autorité, `CLAUDE.md` reste la référence.
## Lot L — Rendre l'attente visible
**Traité le 2026-08-21** : composant `Patience`, posé sur le lookup ISBN, les recherches BnF,
la bibliographie et les nouveautés. ⚠️ Il ne remplace aucun message d'échec — une source muette
garde ses `EtatSourceBibliographie`.
- **L1. Un indicateur pendant les appels lents**, faute de quoi une recherche BnF (≈1 s par
page, jusqu'à dix pages pour les nouveautés) se lit comme une application plantée. ⚠️ Le
besoin n'est pas décoratif : le lot H a montré qu'un écran qui ne dit rien pousse à recliquer,
@@ -320,6 +340,10 @@ Non actés : ce fichier ne fait pas autorité, `CLAUDE.md` reste la référence.
## Lot M — Détails d'écran
**Traité le 2026-08-21.** ⚠️ Le point qui fait tenir la ligne à 320 px n'est pas le `flex`
mais `min-width: 0` sur le champ : sans lui, un élément de formulaire refuse de rétrécir sous sa
largeur intrinsèque et pousse le bouton hors de l'écran.
- **M1. Séries : « Nom d'une série » et le bouton « Créer » sur la même ligne.** Le champ et son
bouton s'empilent aujourd'hui. ⚠️ À 320 px, la ligne doit rester lisible : le champ prend la
place restante, le bouton garde sa largeur propre — et le libellé ne se tronque pas.
@@ -361,6 +385,11 @@ Pistes, dans l'ordre où elles se testent :
## Lot O — Les numéros de revue s'enrichissent
**O1 et O2 traités le 2026-08-21** : URL collée (pas de photo), table `ArticleUne` à part,
séparateur point-virgule — et les thèmes de livres s'y alignent, la virgule restant acceptée.
⚠️ Le garde du relais `GET /api/couvertures` a bien été étendu à `NumerosRevue.CoverUrl` :
l'oublier n'aurait produit aucune erreur visible, seulement une image absente hors-ligne.
- **O1. Une image par numéro de revue.** `NumeroRevue` n'a aujourd'hui aucune couverture, et
aucune source ne peut en fournir : l'ISSN désigne la revue, pas la parution. L'image viendra
donc d'une photo ou d'une URL collée. ⚠️ **Même question ouverte que K1** — si c'est une
@@ -387,15 +416,19 @@ Pistes, dans l'ordre où elles se testent :
semble la bonne**, mais c'est une décision à acter, pas un détail d'implémentation.
**Séparateur tranché le 2026-08-20 : le point-virgule.** Un titre d'article contient souvent
une virgule (« Ukraine, deux ans après »), qui couperait le titre en deux. ⚠️ **Reste une
question ouverte** : les thèmes de livres se saisissent à la virgule — faut-il les aligner sur
`;` pour que deux champs voisins ne se saisissent pas différemment, ou assumer la divergence
parce qu'un thème (« dark fantasy ») ne contient jamais de virgule ? À poser à l'utilisateur
avant de coder. Le reste suit les règles déjà tenues : dédoublonnage avant résolution, `NormalisationTexte`,
une virgule (« Ukraine, deux ans après »), qui couperait le titre en deux. **Question tranchée avec
l'utilisateur le 2026-08-21 : les thèmes s'alignent sur `;`**, la virgule restant acceptée en
repli — un thème n'en contient jamais, et c'était l'habitude. Le champ des auteurs se saisit
déjà au point-virgule : trois champs voisins du même formulaire ne doivent pas se saisir de
trois façons. Le reste suit les règles déjà tenues : dédoublonnage avant résolution, `NormalisationTexte`,
premier libellé saisi = forme affichée.
## Lot P — Ranger une envie dans une série
**Traité le 2026-08-21**, par la seconde voie du tableau ci-dessous et **depuis la série**
(tranché avec l'utilisateur : c'est là qu'on voit l'ordre de lecture, donc là qu'on sait quelle
position donner). L'envie survit au rattachement, et rien ne relie les deux en base.
Demande : depuis la liste d'envies, placer un livre souhaité dans une série, comme on y place un
livre du catalogue. C'est le **chemin inverse** de `MettreEnEnviesAsync`, qui fait déjà « place
vide → envie ».