Le volume nommé lesstime_logs est monté sur /var/www/html/var/log, mais ce
dossier n'existe pas dans l'image. Au premier montage d'un volume vide, Docker
crée le point de montage en root:root, ce qui empêche www-data d'écrire les
logs et fait crasher l'application. En créant var/log avant le chown -R, tout
volume de logs neuf hérite des droits www-data automatiquement.
NotificationProvider retournait findBy(..., 30) : limite codée en dur,
paramètre page ignoré et tableau brut (pas un Paginator). hydra:totalItems
valait donc 30 → fetchAllHydra s'arrêtait à la 1re page et les notifications
restaient tronquées à 30 malgré le correctif front.
- NotificationProvider : vraie pagination Doctrine (Pagination + DoctrinePaginator
+ TraversablePaginator), totalItems réel et hydra:view.next exposés
- NotificationRepository : createUserNotificationsQueryBuilder (filtre user + tri)
- fetchAllHydra : ne retronque plus silencieusement quand hydra:totalItems est
absent, pagine jusqu'à une page non pleine
API Platform pagine par défaut à 30 éléments/page et le helper front
extractHydraMembers ne lit que la première page (il ignore hydra:view.next),
ce qui tronque silencieusement toute liste de plus de 30 éléments.
- Back : paginationEnabled false sur les GetCollection consommées en entier
et à volume borné/modéré (Client, Project, User, TaskTag, TaskGroup,
TaskStatus, TaskPriority, TaskEffort, Workflow).
- Front : nouveau helper fetchAllHydra() qui parcourt toutes les pages ;
utilisé pour /notifications (volume non borné, reste paginé côté back).
- Doc : règle anti-troncature ajoutée au CLAUDE.md.
Déjà protégés (vérifiés) : Task, TimeEntry, TaskDocument, TaskRecurrence,
AbsenceRequest/Policy/Balance (paginationEnabled false) et /time_entries/range.
Endpoint GET /api/share/search?q= parcourant tout le partage en largeur
(garde-fous 200 résultats / 2000 dossiers). Le champ de l'explorateur
déclenche une recherche globale debouncée dès 2 caractères (filtre local
en deçà), avec affichage du dossier parent de chaque résultat.
Depuis @malio/layer-ui 1.7.5, reserveMessageSpace=true réserve ~16px
sous chaque champ même sans message. On retire cette réserve et on masque
la ligne vide (hook stable [id$=-describedby]) sans toucher la lib ni
chaque usage.
Ajoute deux tools MCP sur le modèle de add-task-document :
- update-task-document : remplace le contenu et/ou renomme un document (MIME ré-inféré, taille rafraîchie, garde-fous vide/5 Mo)
- delete-task-document : supprime le document en base, le fichier disque étant retiré par le PreRemove listener
Met aussi à jour le compteur de tools MCP dans le CLAUDE.md (60).
Remplace flex-1/min-w par une largeur fixe (w-72) avec shrink-0 sur les
colonnes du board projet et de Mes Taches. Les colonnes ne sont plus
ecrasees quand un workflow compte beaucoup de statuts ; le scroll
horizontal n'apparait que si elles depassent la largeur du conteneur.
navigator.clipboard n'est disponible qu'en secure context (HTTPS/localhost),
ce qui cassait la copie en prod HTTP. Ajout d'un utilitaire copyToClipboard
avec fallback textarea + execCommand, appliqué au viewer Markdown, au token
API du profil et au nom de branche Git.