Nombre d'enregistrements RÉELLEMENT retirés.
OptionalfreedOctets récupérés — connu du seul côté IndexedDB.
OptionaltotalTaille du magasin avant éviction (octets côté IndexedDB, entrées côté Cache API).
OptionaltotalTaille du magasin après éviction, même unité que totalBefore.
OptionalstoreQuel magasin a évincé. Absent = IndexedDB, la forme historique.
OptionalreasonPourquoi. pressure = le quota d'ORIGINE est proche de la saturation ; quota = une
écriture a été refusée. Le trim de routine du worker n'émet pas — il tourne à chaque
panoramique, et un toast par déplacement de carte apprend à ne plus les lire.
Detail payload for
geoleaf:cache:evicted— a cache made room for itself.🛑 IL Y A DEUX PRODUCTEURS, ET C'EST DÉLIBÉRÉ. Le patron que B-155 recommande — un point d'émission unique gardé par un test, précédent
editor-events.ts— n'est pas atteignable ici : les deux magasins évincent depuis des contextes différents, et aucun code ne peut être partagé entre eux.capabilities/offline/cache/cache-manager.ts(_enforceCacheQuota)maxCacheBytesdépassékernel/storage/sw-core.js→kernel/storage/sw-register.tsLe second passe par un
postMessage: un Service Worker n'a pas dedocument, et il est copié tel quel dans les variantes de déploiement — il ne peut importer ni ce contrat ni le bus.sw-register.tsest le seul endroit qui rétablit le signal surdocument.⚠️
freedBytesest absent côté Cache API, et ce n'est pas un oubli : la Cache API n'expose la taille d'aucune entrée.offline-uiomet déjà la taille quand elle manque — fabriquer un nombre serait pire que se taire.