# Rapport — v3.13.6 (HOTFIX : PDF de facture illisible en production)

**Hotfix du socle, un commit : se livre aux DEUX installations, à l'identique.
Aucune migration, aucune dépendance, pas de montée de version vendor.**

Depuis v3.13.5, le PDF de facture sortait en prod avec la bonne mise en page mais un texte
illisible (glyphes corrompus) — parfait en dev. Cause : `DensitePdf::resoudre()` rendait une
instance dompdf pour compter les pages puis retournait **cette même instance** au contrôleur ;
sur le vendor plus ancien du serveur, `stream()`/`download()` la **re-rendaient** (double
rendu → bouillie de signes), là où le vendor récent du Mac s'en protégeait par son garde
`rendered`. Le vendor de prod n'étant jamais livré par nos paquets, le code doit être
indifférent à sa version.

Correctif (règle d'or : **ne jamais livrer une instance déjà rendue**) : les rendus de mesure
sont des instances **jetables** (rendues, comptées, jetées) ; `resoudre()` retourne la densité
choisie et une instance **neuve** (`Pdf::loadView` avec la densité retenue) sur laquelle ni
`output()` ni `render()` n'ont été appelés — le `stream()`/`download()` du contrôleur ou
l'`output()` de la pièce jointe e-mail (les deux points branchés en v3.13.5, inchangés car
déjà conformes à ce contrat) fait l'**unique** rendu. Coût : au pire trois rendus par PDF.

Recette : test de garde par réflexion (`rendered === false` sur l'instance retournée + son
unique `output()` produit un `%PDF-` valide) ; les trois tests de mise en page v3.13.5
(3 lignes → confort 1 page, profil 16-2026 → compact 1 page, 40 lignes → confort ≥ 2 pages)
restent verts. Suite complète verte + `pint` + `npm run build`.

Fichiers : `app/Support/DensitePdf.php`, `tests/Feature/Invoices/InvoicePdfLayoutTest.php`.
