12 KiB
Journal des versions
Format inspiré de Keep a Changelog.
[1.1.0] — 2026-09-13
Version d'observabilité : rendre lisible ce qui ne l'était qu'en lisant les journaux du conteneur.
Ajouté
- Couverture réelle par recherche : sites interrogés, comptes trouvés, sites sans compte, sites injoignables, et résultats récupérés par la seconde tentative. « 42 résultats » ne veut rien dire seul — on ignorait si la collecte avait porté sur 3 000 sites ou sur 200.
- Liste des sites injoignables avec leur motif, regroupés par famille (protection anti-robot, captcha, résolution DNS, délai dépassé, accès refusé, authentification requise, débit limité, erreur serveur). Filtrable, avec lien vers le site. C'est ce qui permet de chercher une solution ciblée plutôt que de subir un taux global.
- Version de Limier enregistrée et affichée par recherche. Comparer deux recherches séparées par une mise à jour était impossible sans elle.
- Page d'administration réservée à
GL-Limier-Admin: activité, état de la base de sites avec seuil d'alerte, modules optionnels, conformité, et déclenchement de l'auto-contrôle et de la purge. Ces informations existaient côté API depuis la 1.0.0 sans aucune interface. - Retour visuel des boutons Actualiser : état de chargement et horodatage du dernier chargement. Un bouton qui recharge une liste inchangée était indiscernable d'un bouton mort.
Corrigé
progress_donepouvait dépasserprogress_totalen base, la seconde passe et les relances de Maigret dépassant l'estimation initiale.
[1.0.9] — 2026-09-13
Ajouté
-
Imitation d'empreinte TLS sur la seconde tentative. Les protections modernes identifient un client par son empreinte TLS et HTTP/2 avant même de lire ses en-têtes — c'est pourquoi les en-têtes seuls n'avaient récupéré que 3 sites sur 506. Maigret embarque
CurlCffiChecker, qui imite l'empreinte d'un vrai navigateur, mais ne l'active que pour les 108 sites portanttls_fingerprinten amont. Limier l'étend désormais à tous les sites rejoués en seconde passe. Désactivable parLIMIER_TLS_IMPERSONATION_RETRY=false.Plus lent qu'aiohttp, donc réservé aux sites ayant déjà refusé la première requête — le coût ne porte que là où il peut rapporter.
[1.0.8] — 2026-09-12
Modifié
- Les en-têtes de navigateur passent en seconde tentative. La première passe conserve le comportement natif de Maigret ; seuls les sites l'ayant refusée sont rejoués en se présentant comme un navigateur. Le surcoût ne porte donc que sur les échecs, et les sites qui répondent normalement ne sont jamais sollicités deux fois. Le nombre de résultats récupérés par cette seconde passe est annoncé dans l'interface.
Corrigé
- Les en-têtes étaient écrits sur les objets de la base en cache, donc de façon permanente et partagée entre les recherches simultanées. La seconde passe travaille désormais sur des copies.
[1.0.7] — 2026-09-12
Ajouté
-
En-têtes de navigateur sur les requêtes sortantes. Les sites qui ne déclarent pas leurs propres en-têtes dans la base reçoivent désormais un jeu complet —
Sec-Fetch-*,Upgrade-Insecure-Requests,DNT,Priority, User-Agent Firefox. Un client qui n'envoie qu'un User-Agent se distingue immédiatement d'un navigateur. Désactivable parLIMIER_OUTBOUND_BROWSER_HEADERS=false.Trois en-têtes du jeu Firefox complet sont écartés :
Hostest propre à chaque requête,ConnectionetTErelèvent du transport.Accept-Encodingometzstd, qu'aiohttp ne sait pas décoder — l'annoncer reproduirait le défaut Brotli corrigé en 1.0.3.Les sites déclarant déjà leurs en-têtes (LinkedIn et quelques autres) sont laissés intacts : leurs valeurs ont été choisies pour eux.
Corrigé
LIMIER_OUTBOUND_USER_AGENTne s'appliquait qu'aux moteurs e-mail et domaine. Il vaut désormais aussi pour le moteur pseudonyme.
[1.0.6] — 2026-09-12
Corrigé
- L'auto-contrôle nocturne échouait systématiquement. Le délai global des
travaux (600 s) s'appliquait aussi à lui, alors qu'il teste 3 000 sites avec
deux pseudonymes chacun — environ 6 000 requêtes. Il mourait sur
TimeoutErrorsans jamais enregistrer la base corrigée. Délai porté à 4 h pour ce seul travail. - L'auto-contrôle faussait son propre verdict. À 10 requêtes simultanées,
les résolveurs publics saturaient (
Timeout while contacting DNS servers) et des sites parfaitement sains étaient désactivés. Concurrence réduite à 4. - Résolveurs DNS publics sur le worker. Le DNS du homelab renvoyait
linkedin.com, vk.com, pinterest.com et tumblr.com en
0.0.0.0: ces plateformes, parmi les mieux classées, n'étaient jamais interrogées. Le taux de vérifications en échec passe de 40 % à 26 %. - Champs de profil encore affichés en anglais (
favourites_count,image_bg,heart_count…) désormais traduits.
Ajouté
- Avancement par ligne dans l'historique, avec barre de progression et actualisation automatique toutes les trois secondes tant qu'une recherche est en attente ou en cours. L'actualisation s'arrête d'elle-même ensuite.
- Battement journalisé pendant les travaux longs :
recherche_en_courstoutes les 30 s etauto_controle_en_courstoutes les minutes, avec le temps écoulé. Sans eux, un travail d'une heure ne produisait aucune ligne et devenait indiscernable d'un worker figé.
[1.0.5] — 2026-09-12
Corrigé
- Les messages internes de Maigret noyaient les résultats. « Restarting checks for 98 sites », « 0 extra requests performed » et consorts sont destinés à sa sortie terminal ; affichés dans l'interface, ils repoussaient les résultats hors de l'écran. Ils sont désormais filtrés.
- Le bilan des blocages était répété par variante — cinq avertissements quasi identiques pour une même cause. Il est cumulé et émis une seule fois en fin de recherche, avec le taux global et le renvoi vers la documentation.
- La progression affichait « 945 / 833 ». Maigret relance les sites en échec, si bien que le nombre de vérifications dépasse le total estimé. La valeur affichée est bornée.
[1.0.4] — 2026-09-12
Corrigé
- Le contournement Cloudflare n'était jamais appliqué. La configuration
passée à Maigret n'avait pas la forme attendue par
CloudflareWebgateChecker(trigger_protection,modules,session_prefix). Une structure invalide est ignorée sans erreur : FlareSolverr paraissait actif et ne servait jamais. Le suffixe/v1de l'API JSON est désormais ajouté automatiquement. - Seuil d'alerte sur les sites non vérifiables abaissé de 30 % à 15 %. Maigret alerte dès 10 % ; à 30 %, une recherche amputée du quart de sa couverture était présentée comme complète.
[1.0.3] — 2026-09-12
Corrigé
- La base de sites restait figée sur celle livrée dans le paquet — 3 302
sites, là où la base amont en compte plus de 5 400. Maigret ne déclenche sa
mise à jour que depuis son CLI ; en bibliothèque,
load_from_pathne fait rien.database.synchroniser()la déclenche désormais explicitement, au démarrage du worker et avant l'auto-contrôle nocturne, puis recopie la base obtenue dans le volume persistant. L'écriture est atomique et l'échec reste un avertissement : sans accès sortant, on continue avec la base disponible. - Brotli manquait dans l'image. aiohttp annonce accepter le codage
brmais ne sait pas le décoder sans ce paquet : les sites répondant en Brotli étaient perdus avec « Can not decode content-encoding: brotli ».
[1.0.2] — 2026-09-12
Correctifs de déploiement uniquement : le code applicatif et les images sont identiques à la 1.0.1.
Corrigé
- L'interface renvoyait 404 derrière Traefik. Le routeur
limier-webréférençaitlimier-securite@file, déclaré dans un fichier dynamique séparé. Un routeur dont le middleware est introuvable est désactivé en silence par Traefik : la requête retombe en 404 sans qu'aucun journal ne mentionne le middleware manquant. Le middleware est désormais déclaré dans les étiquettes du conteneur etdeploy/traefik/est supprimé — la pile est autonome. - Le worker passait
unhealthyalors qu'il fonctionnait : la sonde héritée de l'image commune interroge/api/santesur un port où il n'écoute pas. Sonde désactivée pour ce service.
Modifié
- Étiquettes alignées sur la convention du homelab : routeurs
httpethttpsdistincts, suffixes-http/-https, services nommés-https-service, priorités explicites (API 59/60, interface 49/50), etobservability(journaux d'accès, métriques, traces) activée pour alimenter Tempo. - Déclaration réseau simplifiée :
traefik_front_networken externe direct,attachable: truesur le réseau interne.
[1.0.1] — 2026-09-12
Corrigé
- L'interface ne démarrait pas. nginx 1.27.5 a déplacé son fichier PID de
/var/run/nginx.pidvers/run/nginx.pid; leseddu Dockerfile visait l'ancien chemin, ne correspondait plus à rien, et nginx échouait sur « open() "/run/nginx.pid" failed (13: Permission denied) ». L'image de base devientnginxinc/nginx-unprivileged, conçue pour l'exécution non privilégiée — plus aucune retouche parsed. - Sonde de santé de l'interface basée sur
wget(présent dans busybox) plutôt quecurl, qui n'est pas dans l'image Alpine. POSTGRES_PASSWORD: consigne de génération corrigée en hexadécimal. Le base64 produit des caractères/et+qui rendent l'URL de connexion invalide et empêchent l'API de démarrer.
[1.0.0] — 2026-09-12
Première version.
Moteurs
- Recherche par pseudonyme sur la base Maigret (3 302 sites, 500 par défaut, 3 000 en approfondie), avec extraction des données de profil.
- Recherche par nom civil : génération de variantes ordonnées par probabilité, traitées comme une identité unique.
- Recherche par e-mail : Gravatar (SHA-256), posture de messagerie, détection des adresses jetables, fuites HIBP (optionnel), holehe (optionnel), pivot vers le moteur pseudonyme.
- Recherche par domaine : RDAP avec bootstrap IANA, DNS complet, sous-domaines par transparence des certificats avec séparation actifs / historiques.
- Notation des résultats sur signaux observables, en trois niveaux, avec restitution des signaux à l'utilisateur.
- Recherche récursive bornée sur les pseudonymes découverts dans les profils.
Plateforme
- API FastAPI, worker arq, progression en direct par SSE avec reprise après coupure.
- Authentification Authentik (OIDC, PKCE), session par cookie signé.
- Quotas mensuels par plan, limitation de débit horaire.
- Espace d'administration : compteurs, état des modules, du pool de proxies et de la base de sites.
- Pool de proxies avec mise en quarantaine des proxies défaillants.
- Auto-contrôle nocturne de la base de sites.
- Métriques Prometheus, journal structuré JSON avec masquage des identifiants.
Conformité
- Minimisation : conservation facultative du terme en clair.
- Purge automatique selon politique de conservation.
- Export des données (art. 20), demande d'effacement avec liste d'exclusion (art. 17, HTTP 451), politique publiée reflétant la configuration réelle.
Livraison
- Images Docker publiées sur Harbor par étiquette, avec contrôle de cohérence des versions.
- CI : lint, types, tests, unicité de la tête de migration, construction des images.
- Entretien hebdomadaire de la base de sites.