Pendant du commit du paquet. Les passages qui PARLAIENT du placeholder
annoncaient desormais la vraie URL comme etant un placeholder : ils sont
reecrits pour dire ce qui est.
docs/publier-une-version.md porte maintenant la marche a suivre pour produire
une copie publique — depot neuf sans historique, URL neutralisees, identite a
revoir — avec le rm -rf .git AVANT le git init : un git clone ne conviendrait
pas, l'historique portant les URL reelles dans chaque ancien commit.
CLAUDE.md consigne l'erreur et la regle qui en sort : on anonymise une copie,
jamais l'original.
--- L'installation YunoHost ne demande plus qui a acces
CLAUDE.md consigne aussi la decision prise dans mabibli_ynh :
init_main_permission quitte [install] au profit de
resources.permissions.main.allowed = "all_users". Verifie dans le coeur
YunoHost (src/utils/resources.py), ou allowed l'emporte sur la question.
⚠ visitors casserait deux invariants du code, et c'est pourquoi la valeur est
fixee : l'application n'a aucune authentification propre — elle fait confiance
a YNH_USER parce que SSOwat l'ecrase a chaque requete — et toute personne
autorisee peut supprimer n'importe quel livre du catalogue commun.
626 tests au vert.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Le README faisait 691 lignes, dont 295 de procedure de mise en production —
que personne ne lit avant d'avoir decide d'installer le projet. Or c'est le
premier document lu. Il tombe a 86 lignes et devient un aiguillage.
Un document, un lecteur, une question :
README.md c'est quoi ? un visiteur
docs/installer.md comment je l'heberge ? qui installe
docs/publier-une-version.md comment je sors une v. ? qui maintient
docs/architecture.md pourquoi le code ainsi ? qui contribue
Trois defauts sortis de la comparaison entre le README et le tour du projet,
dont deux introduits ce matin :
⚠ Le README se contredisait sur example.org. Son « Journal du paquet »
documentait comme une panne reglee (« l'installation s'arretait net ») le
placeholder que le nettoyage vient de retablir. Ce n'est pas une regression —
publier.sh refuse desormais de publier avec, ce qui etait precisement le
garde-fou manquant en aout — mais qui lisait le journal concluait l'inverse.
Le journal est supprime : c'est de l'historique, il vit dans les commits et
dans CLAUDE.md.
⚠ La fusion des migrations n'etait nulle part. La section « Monter de version »
decrivait pas a pas une procedure qui echouerait depuis toute version anterieure
a la 0.5.0, et son « Si la mise a jour echoue » ne mentionnait pas cette cause.
L'avertissement est desormais en tete du README, d'installer.md et de la section
concernee.
⚠ Les trois portees — commune, personnelle, trace — decident de tout dans ce
projet et etaient absentes de son point d'entree. Elles ouvrent architecture.md.
Verifie : aucune ancre morte, aucun lien mort, et les 41 lignes non reprises
sont soit condensees dans le nouveau README, soit du journal supprime a dessein.
Trois d'entre elles sont revenues (build/dist ignore, l'inspiration radarr_ynh,
le renvoi aux commentaires de systemd.service).
626 tests au vert.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Sortie du projet. Le README ouvre desormais sur une section « A faire avant de
publier ce projet quelque part » : ce que commande la ligne unique de
publier.sh, ce qui reste a changer a la main, et ce qu'il ne faut surtout PAS
changer a la main (amd64.url, reecrite a chaque publication).
⚠ Le remplacement de fichiers ne regle pas l'historique git, qui porte ces URL
dans chaque ancien commit. Seul un depot neuf sans historique en vient a bout.
Restent volontairement : maintainers, l'adresse de contact et le site de
l'auteur dans /a-propos — l'AGPL attend qu'on puisse joindre la source, donc
l'auteur.
626 tests au vert.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Trois items ouverts d'IDEES.md instruits sur pieces, et deux conclusions
renversees en chemin — c'est ce que ces notes servent a ne pas refaire.
Le paquet n'avait presque rien a simplifier : neuf fichiers, 209 lignes de
code, de 9 a 49 lignes chacun. Ce qui donnait l'impression de volume, ce sont
les 306 lignes de commentaires, qui documentent chacune une panne reellement
constatee. Tout le poids etait dans publier.sh, 1,4 fois le paquet reuni.
Le menu interactif de choix de version paraissait le meilleur candidat a la
coupe, jusqu'a ce que les neuf montees de version montrent six correctifs ET
trois sauts mineurs. Il sert une fois sur trois : mesurer avant de tailler vaut
aussi pour l'outillage.
L'icone du paquet : logo.png n'est lu par personne. Les logos du catalogue
vivent dans le depot YunoHost/apps, ou MaBibli n'est pas ; la tuile du portail
accepte un logo televerse depuis la 12.1, et le manifeste exige deja 12.1.38.
Il n'y a donc rien a corriger dans le depot.
La RAM est mesuree et ram.runtime porte a 256M. Le pic n'est pas le lookup
ISBN, contrairement a l'intuition, mais « Nouveautes » sur un auteur tres
reedite — cas qui n'a pas encore ete mesure et qui croit avec le fonds.
Le README cesse de decrire --archive-seule comme une brique de CI et retire le
« --version est obligatoire ici », piege qui n'existe plus.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Un tiers veut installer le projet sur un Synology, où rien du paquet
`_ynh` n'existe. L'application n'étant qu'un processus et un fichier
SQLite, un `Dockerfile` suffit — mais l'essentiel n'est pas là.
Sans portail SSO, il n'y a pas d'identité, et l'application ne s'en
invente pas : les données personnelles se ferment, les communes non.
Mesuré plutôt que supposé, et écrit comme tel : les deux replis
(utilisateur simulé, en-tête injecté) n'authentifient personne, et le
port ne doit être publié que sur la boucle locale.
Le déploiement de référence reste `mabibli_ynh`.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
La chaîne de publication n'a plus qu'un point d'entrée. README.md décrit
`publier.sh` seul, ses deux refus (tag déjà pris, dépôt du code sale) et
le mode `--archive-seule` pour la marche à pied ; CLAUDE.md acte la fusion
et ce qu'elle empêche de refaire.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Page « À propos » (/a-propos) : manuel annoncé à venir, contact, site de
l'auteur, version publiée avec sa date de build, et licence AGPL v3 avec le
lien vers le dépôt — l'AGPL attend que les utilisateurs d'un service en réseau
puissent en obtenir la source, ce lien n'est donc pas un ornement.
L'application ne connaissait pas sa version : elle vivait dans le manifeste du
paquet et dans les tags git, jamais dans le binaire. `build/publier-release.sh`
pose désormais `-p:Version` et `-p:MaBibliDateBuild` ; l'API rend les deux par
`GET /api/version`.
⚠️ L'horodatage est le TÉMOIN de l'injection, et rien ne le calcule côté
MSBuild. Sans lui, la version lue serait le « 1.0.0 » que le SDK pose par
défaut : il se lirait comme une vraie version alors qu'il ne désigne rien, et
c'est exactement la valeur qu'on ira chercher pour diagnostiquer un appareil au
cache dépareillé. Mieux vaut ne rien annoncer — un binaire compilé à la main se
déclare « version de développement », ce qui est vrai.
Autres décisions :
- l'entrée du menu est DÉTACHÉE des six destinations, par un filet au-dessus
sur téléphone et à gauche en rangée sur PC : « À propos » est une annexe, pas
une septième destination. Ses règles vivent en feuille GLOBALE, comme tout le
menu — une règle scopée n'atteint pas ce que rend un NavLink ;
- le « mailto: » reste un lien même hors-ligne : il ne charge aucune page et
passe la main au client de messagerie, qui sait mettre un message en attente.
Le site et le dépôt, eux, basculent en boutons désactivés portant leur motif,
comme les liens d'export des envies ;
- la version est un sixième instantané hors-ligne : on la lit justement quand
quelque chose ne va pas, et un appareil qu'on soupçonne est souvent celui qui
n'a plus de réseau. L'écran dit alors que c'est la dernière version vue du
serveur.
Le point de rupture de 40 rem reste identique dans les deux feuilles, et
/a-propos est inscrite dans la table de remontée des routes.
Vérifié en exécution, l'API lancée : sans injection
`{"numero":null,"publiee":false}`, avec `-p:Version=0.4.1
-p:MaBibliDateBuild=…` `{"numero":"0.4.1","publiee":true}`. Le rendu des écrans
n'a PAS été vérifié en navigateur. 618 tests au vert (605 avant).
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
PUBLICATION.md et A_FAIRE.md du dépôt du paquet sont fondus ici, avec le contenu
et les points de conception de mabibli_ynh/README.md. Une seule chaîne de
publication et un seul projet : deux jeux de documentation finissaient par
diverger, sans qu'on sache lequel faisait autorité.
Restent à part doc/DESCRIPTION.md et doc/ADMIN.md, que YunoHost lit lui-même
pour les afficher dans son catalogue et son interface d'administration.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Ajoute les sections Compilation (dotnet build/test, publish
self-contained linux-x64) et Publication (script publier-release.sh
de mabibli_ynh, renvoi vers PUBLICATION.md pour la marche complète).
Corrige au passage la mention du scanner (ZXing.Net -> zbar), devenue
inexacte depuis la bascule documentée dans CLAUDE.md.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- 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>
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>