Commit Graph
7 Commits
Author SHA1 Message Date
mathieuandClaude Opus 5 b619de29c7 Acter le statut de lecture par utilisateur et la table Auteur
Le statut de lecture sort de `Livre` vers une table par utilisateur : le
livre reste commun au foyer, sa lecture devient personnelle. La decision
« collection commune » n'est pas remise en cause.

L'auteur passe d'un champ texte libre a une table dediee avec forme
normalisee, prerequis du regroupement par auteur et de la recherche
insensible aux accents. Le regroupement automatique est limite aux
variantes sures ; les rapprochements ambigus doivent etre proposes, pas
appliques silencieusement — une fusion erronee se defait mal.

IDEES.md : la liste d'envies sera personnelle elle aussi, et exportable.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-17 23:21:37 +02:00
mathieuandClaude Opus 5 a314dcfc79 Recueillir les idees d'interface dans IDEES.md
Retours d'usage a traiter plus tard : agrandissement de la couverture au
clic, statut de lecture en lecture seule dans la liste et remonte au
niveau du type, affichage du format limite aux ebooks (physique par
defaut), fiche en lecture seule avec bouton d'edition, regroupement des
livres par auteur.

Documente aussi un cas de donnee sale mesure sur l'ISBN 9782749942636 :
la notice BnF colle le nom de l'auteur en fin de titre sans separateur
ISBD, donc la regle de nettoyage existante ne peut pas s'appliquer. Ce
n'est ni un doublon ni un defaut du parsing.

Garde en fin de fichier l'idee des livres souhaites (bibliographie par
auteur avec ouvrages possedes grises), hors perimetre v1, avec ses
implications sur le modele de donnees.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-17 23:16:16 +02:00
mathieuandClaude Opus 5 aed03e6b6f Documenter deux constats operationnels issus de la phase 2
- Couvertures OpenLibrary : 502 intermittents mesures sur un meme ISBN.
  Ne pas valider l'URL par un HEAD ; c'est a l'interface de gerer l'image
  cassee.
- OpenLibrary : certaines editions n'ont aucun champ `authors`, le double
  appel documente ne suffit donc pas. Le repli via `/works/` est desormais
  implemente et documente.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-17 22:26:48 +02:00
mathieuandClaude Opus 5 4467456b8b Cloturer le cadrage : deploiement, build, cache et notices BnF
- Architecture serveur : x86_64, publish `linux-x64`.
- Production des binaires : compilation locale + release manuelle, via un
  script ecrit pour etre reutilisable en CI plus tard. Compiler sur le
  serveur est explicitement exclu.
- Cache hors-ligne : IndexedDB, retenu pour permettre recherche et tri
  hors-ligne sur toute la bibliotheque.
- Notices BnF multiples : demander systematiquement, l'exactitude de
  l'edition primant sur la vitesse de saisie.
- AOT WASM : desactive par defaut, a reevaluer apres mesure sur telephone.

Ajoute une section sur l'architecture de deploiement : les 3 projets .NET
ne produisent qu'un seul service (le client WASM est servi par l'API), et
le packaging vit dans un depot `mabibli_ynh` separe du code.

Le cadrage est desormais clos.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-17 21:45:20 +02:00
mathieuandClaude Opus 5 a30197000f Valider l'API SRU de la BnF et documenter ses pieges
API testee : HTTP 200, ~240 ms, sans cle. Le schema `dublincore` evite
completement l'UNIMARC — mapping bien plus simple que prevu, contrairement
a ce que supposait la note precedente.

Piege bloquant identifie : la BnF indexe l'ISBN tel qu'imprime, donc les
livres d'avant 2007 ne sont trouvables que par leur ISBN-10, alors que le
scanner lit toujours un EAN-13. Mesure sur echantillon verifie via
OpenLibrary : 2 titres sur 3 introuvables en ISBN-13 mais trouves en
ISBN-10. Interroger systematiquement les deux formes.

Autres pieges confirmes et documentes :
- aucune couverture cote BnF -> passer par OpenLibrary, avec
  `?default=false` sans lequel un placeholder masque les absences
- plusieurs notices possibles pour un meme ISBN (3 pour Germinal)
- ponctuation ISBD a nettoyer sur titre / auteur / editeur, regles validees
- livres etrangers absents, ce qui confirme la necessite de la cascade

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-17 21:27:40 +02:00
mathieuandClaude Opus 5 a5392cedac Acter les cinq decisions structurantes (offline, portee, ISBN, SSO, ebooks)
- Hors-ligne : consultation seule via cache des reponses GET. SQLite WASM
  cote client ecarte. L'UI devra desactiver explicitement les ecritures
  hors-ligne plutot que de les laisser echouer.
- Portee des donnees : collection commune au foyer. `UtilisateurId`
  (proprietaire) devient `AjoutePar` (tracabilite) — ne jamais filtrer les
  lectures dessus.
- Sources ISBN : BnF (SRU) en principale, OpenLibrary en secours. Motif :
  OpenLibrary est lacunaire sur le fonds francais. API BnF pas encore
  testee, a valider avant implementation.
- SSO : en-tetes SSOwat `YNH_USER` / `YNH_USER_EMAIL` / `YNH_USER_FULLNAME`.
  OIDC ecarte, non documente par YunoHost (verifie ce jour). Corrige au
  passage le nom d'en-tete, qui n'est pas `Remote-User`.
- Ebooks : fiches uniquement, pas de stockage de fichiers. Les prets ne
  concernent donc que les livres physiques.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-17 21:21:38 +02:00
mathieuandClaude Opus 5 d56061db6b Sortir les sources du tarball et acter ZXing.Net pour le scan ISBN
Le dépôt ne versionnait qu'une archive `mabibli-init.tar.gz`, ce qui
empêchait git de suivre le contenu des fichiers. Les trois fichiers sont
désormais à plat et l'archive est supprimée.

Scan ISBN : remplacement de `html5-qrcode` par ZXing.Net (C#, Apache 2.0).
Validé concrètement en .NET 10 — round-trip EAN-13 OK, publish Blazor WASM
OK, 0,53 ms/frame dans le pire cas (échec sur frame 640x480 bruitée),
+192 Ko brotli sur le payload. Motif principal : le décodage reste
réutilisable hors navigateur si le projet évolue en scanner de
bibliothèque.

Clarification du besoin hors-ligne : consultation de la bibliothèque
existante uniquement. Signale au passage que SQLite vit côté serveur et
qu'un cache client sera nécessaire — point d'architecture non résolu.

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