Ctrl K
ComunidadGuías…

BACKLOG.md

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
# Backlog

Ce qui est ouvert, rien d'autre : ce qui est fait est dans BACKLOG-FAIT.md, mot pour mot.
Une piste notée ailleurs (rapport de mutualisation de nico579-commons, issues, mémoire de
session) est aussi listée ici, avec un renvoi : le BACKLOG est l'endroit où l'on regarde pour
savoir ce qui reste. Dernier nettoyage : 2026-10-07 (décisions du jour : Electron écarté, audit laissé en l'état).

## À décider ou à faire

- **Test hebdomadaire des fournisseurs de lidar2map : il reste la clé de fi-maanmittauslaitos.**
  Le workflow « Smoke providers » (lundi) était rouge chaque semaine depuis le 2026-08-17, sans alerte.
  Réparé le 2026-10-07 (lidar2map 1.60.2) : de-sh (le serveur n'envoie pas son certificat intermédiaire,
  embarqué désormais), es-euskadi (le service veut le nom de la couverture, plus l'index) et ca-quebec
  (c'était le test, qui prenait une feuille voisine hors zone). Reste fi : la clé du secret
  `FI_NLS_API_KEY` est refusée (HTTP 403, « invalid authorization »). Clé gratuite à renouveler
  (maanmittauslaitos.fi/rajapinnat/api-avaimen-ohje), à mettre dans le secret du dépôt lidar2map, puis
  retirer fi de `--skip` dans `.github/workflows/smoke.yml`. Aucune alerte n'est envoyée quand ce
  workflow échoue (issue automatique ou message : non décidé).

- **Signature de code des exécutables.** Candidature SignPath Foundation soumise le 2026-08-29, en
  attente de réponse.

- **Recherche de ville commune, avec autocomplétion (lidar2map, hike2gpx).** Demandé par Nico le
  2026-10-22 : aligner hike2gpx sur lidar2map, avec autocomplétion, dans le commun, et favoriser les
  villes proches de la zone affichée. Aujourd'hui, les deux applications font chacune la leur.
  lidar2map complète au fil de la saisie : en France par la Géoplateforme
  (`data.geopf.fr/geocodage`, `autocomplete=1`), ailleurs par Nominatim, restreint au pays choisi.
  hike2gpx (0.2.3, PR hike2gpx#28) cherche à la validation seulement : les communes françaises par
  `geo.api.gouv.fr`, puis Nominatim pour le reste du monde. gpxsolar ne fait que du géocodage
  inverse et n'est pas concerné.
  Point à corriger au passage : la politique de Nominatim interdit l'autocomplétion sur son service
  public (« you must not implement such a service on the client side using the API »). lidar2map
  l'enfreint hors de France. L'outil courant pour ça est Photon (`photon.komoot.io`), le géocodeur
  OSM de Komoot conçu pour la saisie au fil de l'eau.
  Proposition :
  - un module du commun, côté serveur, qui relaie (User-Agent identifiable, pas de dépendance au
    CORS) : la Géoplateforme en France, Photon ailleurs ;
  - un composant de page commun (`/nico579-ville.js`, comme le bandeau de mise à jour), avec
    délai de frappe, réponses périmées ignorées et petit cache ;
  - la proximité comme priorité, pas comme filtre : la page envoie le centre de la carte, et les deux
    services savent faire remonter les lieux proches (`lat`/`lon`). Depuis le Var, « Mad » propose
    alors Madriat avant Madrid, mais « Madrid » reste trouvable. Restreindre aux pays voisins aurait
    caché Madrid à quelqu'un qui prépare un voyage depuis chez lui ; lidar2map garde en plus son
    sélecteur de pays, qui reste un vrai filtre ;
  - Nominatim reste possible pour une recherche validée, une requête à la fois, jamais à la frappe.
  Ordre : le commun d'abord, puis hike2gpx, puis lidar2map, lors de la passe finale sur les projets.

- **Enfants qui meurent avec leur application : brancher `nico579_commons.enfants` dans tous les projets.**
  Demandé par Nico le 2026-10-20, après trois moteurs BRouter de hike2gpx restés orphelins (console
  fermée, processus tué), jusqu'à 768 Mo chacun. Le module du commun (0.6.0, PR nico579-commons #24)
  fait mourir un enfant avec son application, de quelque façon qu'elle meure : job Windows, ligne de vie
  et groupe de processus sous Linux et macOS, éprouvé en CI sur les quatre systèmes.
  `enfants.demarrer()` remplace `subprocess.Popen`, `enfants.lancer()` remplace `subprocess.run`.
  Les bornes du commun vont jusqu'à `<1` depuis le 2026-10-20 (décision 7 du 2026-09-29) : adopter
  le module, c'est monter son verrou à 0.6.0 (`uv pip compile ... --upgrade-package nico579-commons`).
  Seul gpx2elev 0.6.4, déjà sur PyPI, dit encore `<0.7` : sa borne `<1` y arrivera avec sa prochaine
  release.
  hike2gpx est le premier branché (BRouter, créateur de tuiles, import Geofabrik), fait le
  2026-10-20 (hike2gpx #15 ; gpx2elev 0.6.4 a dû relever sa borne du commun, `<0.7`, pour que les
  deux s'installent ensemble). Relevé du même jour pour les autres : blink2video, les ffmpeg de `merge_daily.py`
  (`runtime.demarrer` et les `runtime.lancer` des fusions ; même vocabulaire, seul le module change), et
  les verbes que lance le superviseur « start » (`blink_cli.py`), à décider ; gpxsolar, le calcul lancé
  par `subprocess.Popen` (`self._proc`, déjà dans son propre groupe pour le bouton Arrêter) ; lidar2map
  et gpx2elev ne lancent aucun processus ; watch2notif seulement des commandes brèves (pare-feu,
  appairage). Ne jamais y passer ce qui doit survivre à l'application : Redémarrer (`relance`), le
  démarrage automatique, la mise à jour, le navigateur.

- **Issue #40 (MCas86) : lire de lui-même le clip qui vient d'être filmé.** Proposé le 2026-10-20
  pour un écran mural (Raspberry Pi, Chromium en kiosque) : système armé, mouvement, enregistrement,
  puis lecture une seule fois. Principe accepté le même jour, codage reporté par Nico. Comportement
  convenu avec MCas86 le même jour : une fenêtre surgissante par-dessus la vue en cours, qui reste
  intacte dessous ; les clips arrivés ensemble lus l'un après l'autre, du plus ancien au plus
  récent ; la fenêtre se ferme d'elle-même après le dernier, avec un bouton Fermer pour arrêter
  avant. Son « instant » voulait dire « dès que le clip est reçu » : le délai d'une à deux minutes
  lui convient.
  Ce qui existe : « armé » va de soi, puisque seuls comptent les clips de détection (`kind` « clip »,
  jamais les enregistrements du direct) ; la page voit déjà arriver les nouveaux clips
  (`/api/passages` toutes les 60 s, comparé à `total_known.clip`). À faire, côté page seulement : une
  case « Lire les nouveaux clips à leur arrivée », retenue par navigateur ; la fenêtre et son
  lecteur, logés dans l'élément en plein écran s'il y en a un (`#ronde` pendant la ronde, la case
  d'un direct agrandi), sans quoi ils resteraient invisibles ; une lecture muette, car le son exige
  un clic (sauf Chromium lancé avec `--autoplay-policy=no-user-gesture-required`) ; un sondage
  resserré, vers 10 s, quand la case est cochée. Aucun appel de plus vers Blink, donc rien pour les
  batteries. Délai réel : une à deux minutes après la fin du clip pour le cloud (relève à la minute),
  dix minutes par défaut pour l'USB, qui attend en plus la fin de la ronde.

## En attente d'un retour ou d'un cas réel

- **Audit du 2026-10-02 (0.15.7) : 13 constats restants, aucun correctif prévu.**
  Décision de Nico du 2026-10-07 : on en reste là ; à traiter seulement si l'un se présente.
  Le dossier est `Documents\blink\audit\2026-10-02` (ignoré par git, jamais `git add -A` ;
  son `changements.patch` de 246 Ko est une donnée, à ne jamais appliquer sans ordre). Analysé le
  2026-10-06 sur la 0.18.1 : les scripts de l'audit rejoués en mesure seule, rapport, aucune
  correction. Déjà corrigés : B02 (PR #72), O04 (FFmpeg figé), O05 (clip USB réel), B03 et B13
  (0.18.2), B10 (0.18.3). Restent, tous reproduits et
  sans cas reel connu, a traiter si l'un se presente :
  B01 reconstruction echouee qui reduit semaine/mois (se repare seul au passage
  suivant reussi, verifie) ; B04 verrou vide ou `.purge` abandonne jamais repris ;
  B05 reponse 416 sans Content-Length (client en attente) ; B06 sauvegarde
  obsolete qui efface `source_deleted` ; B07 sessions HTTP non fermees apres une
  reconnexion echouee ; B08 file WebRTC pleine qui perd le signal de fin ; B09
  launchctl refuse annonce comme installe (macOS) ; B11 marqueurs de passage
  concurrents qui se remplacent ; B12 deux preparations de mise a jour dont la
  seconde efface la premiere ; B14 identite de processus illisible = verrou
  repris (CHOIX ASSUME du 2026-09-29 pour les pannes apres redemarrage : ne pas
  inverser sans accord) ; O01 types RTP > 127 au 9e profil H.264 ; O02 retour a
  zero des PTS MPEG a 33 bits.
  Si l'un se présente, B05 et B07 sont les plus plausibles en usage réel. Rien ne se corrige sans
  demande de Nico (audit veut dire rapport).

- **Issue #55 (Björn) : « USB storage only detects clips from one camera ».** Cause trouvée et
  corrigée en 0.15.7 : le Sync Module écrit les noms de caméra en ASCII (le ü est supprimé) et
  blinkpy les cherchait avec ü. La règle réelle pour les autres accents n'est pas confirmée ;
  attendre le retour de Björn avant de fermer.

- **Issue #40 (Markus) : le nombre d'images par ligne change d'une vue à l'autre à taille de
  fenêtre égale.** Markus pense que cela dépend de la largeur de la ligne d'informations du haut. À
  vérifier : si cela se confirme, c'est un défaut de mise en page, pas un choix. Tri, taille et
  masquage sont en 0.16.0.

- **Vignettes : une borne sur la file d'attente de serve.** Le reste de l'entrée, faite en 0.18.0 :
  `send_thumb()` laisse chaque requête en attente occuper un fil du serveur. Le test à froid de Joël
  sur ses vrais clips dira si elle est encore utile.

- **Icône sous GNOME Wayland : la voir dans une vraie session.** Livrée en 0.18.0 et essayée dans la
  VM Ubuntu 26.04 avec un gnome-shell sans écran (enregistrement auprès du watcher, GetLayout,
  Event) ; le rendu dans une vraie session graphique n'a pas été vu.

- **Tester-XR.exe affiche une "blink2video version" perimee dans son
  rapport.** Source : reddit/cutthin, auteur de la demande initiale de prise
  en charge du Sync Module XR et des tests sur materiel reel, 2026-08-31. Le
  rapport du testeur XR (r2, tag xr-local-storage-test-r2) annoncait "blink2video
  version: 0.10.6" alors que l'utilisateur confirmait tourner sous 0.10.08.
  Confirme via `gh release list` : le tag r2 a ete publie le
  2026-08-31T10:01Z, alors que v0.10.7 et v0.10.8 sont sortis apres (12:23Z
  et 12:39Z le meme jour) sans rebuild du testeur. Ce n'est pas une erreur
  de l'utilisateur : diagnostic_xr.py:88 lit `runtime.VERSION` au moment du
  build PyInstaller de Tester-XR.exe (`build_xr_tester.py`/`xr_tester.spec`),
  qui ne sont references ni dans `deploy.py` ni dans
  `.github/workflows/*.yml` (verifie, zero occurrence) - ca redivergera a
  chaque bump tant que ce n'est pas rattache. Deux corrections possibles,
  pas exclusives : rebuild+republish Tester-XR a chaque version (mecanique
  a ajouter au pipeline), ou faire lire au testeur la version reelle du
  blink2video.exe voisin plutot que sa propre runtime.VERSION figee au
  build.
  Toujours ouvert au 2026-10-07 : `diagnostic_xr.py` lit encore `runtime.VERSION` figée au build, et
  ni `deploy.py` ni les workflows ne reconstruisent le testeur.

## À ne faire que si la demande revient

- **Integration Home Assistant native.**
  Source : reddit/MoneySquare6212, r/blinkcameras, 2026-08-19. Ecarte pour
  l'instant (repondu sur Reddit) : un vrai chantier a part (config flow,
  modele d'entites, HACS), pas une extension de ce qui existe. Note ici
  pour ne pas l'oublier si la demande revient.

- **Optimisations identifiees (pas des bugs, pas urgentes).**
  Registre reecrit en entier a chaque clip (quadratique sur un lot) ;
  known_identities() reparcourt tout a chaque vignette (cache par mtime
  utile) ; telechargements cloud charges entierement en memoire
  (response.read(), a chunker) ; cache _DURATIONS qui ne purge jamais ses
  anciennes cles ; dependances non epinglees alors que le code touche des
  attributs prives de blinkpy ; bootstrap qui reutilise l'environnement
  global au lieu de rester isole ; plusieurs helpers JSON divergents,
  a centraliser (meme esprit que safe_name, deja fait en 28.64).

- **Flux par camera pour Frigate / Home Assistant (RTSP via go2rtc).**
  Source : reddit/wperez3825, 2026-09-28, en reponse au "Direct continu" de
  la 0.14.6 ("great news for Blink Minis since they're plugged in").
  Demande : exposer chaque camera en flux, par exemple via go2rtc, pour que
  Frigate et Home Assistant l'enregistrent et l'affichent. Analyse du
  2026-09-28 : faisable, mais un Sync Module ne traite qu'une commande a la
  fois (voir MODULE_SLOT, serve.py), donc au mieux un direct par systeme
  Blink en meme temps ; deux directs simultanes sur un meme compte jamais
  essayes. Travail : adresse stable par camera protegee par une cle fixe
  (comme le jeton de webhook), relance continue cote serveur (elle vit
  aujourd'hui dans la page), flux en MPEG-TS plutot qu'en MP4 fragmente pour
  recoller les sessions de ~6 min, page de doc go2rtc. A essayer d'abord :
  deux directs en meme temps sur deux systemes, et go2rtc branche sur
  /live-mse. Mis de cote par Nico pour plus tard.

- **Armement par camera et par horaire (issue #40), pas retenu pour
  l'instant.**
  Source : MarkusKress, 2026-09-29, lui-meme "tres specifique, sans
  importance". Armer et desarmer des cameras choisies a des heures fixes,
  avec verification de l'etat au demarrage de blink2video. L'armement manuel
  existe deja (/api/arm, serve.py) ; ce qui manque est le planning, une
  tache de fond qui ne doit jamais laisser une camera dans le mauvais etat,
  et qui entre en conflit avec les horaires de l'application Blink. Question
  posee a Markus : que fait sa solution quand une camera ne repond pas a
  l'heure d'armement. A ne construire que si la demande se repete.

## Différences voulues entre les applications (à ne pas « corriger »)

- **Deux contextes TLS.** `blink_tls.py` donne à blinkpy un contexte strict avec le bundle certifi ;
  `_bootstrap_tls.py` de lidar2map remplace la fabrique HTTPS de tout le processus avant l'amorçage :
  deux mécanismes. `AGENTS.md` demande la prudence sur le TLS de blink2video (le relais du direct
  présente un certificat auto-signé, exception à ne jamais étendre).
- **`end_headers` de blink2video** : CSP à nonce, absente des autres applications.
- **`web_bridge.js`** : un helper de 12 lignes et sept méthodes communes, le reste est l'API de chaque
  application.
- **Mise à jour de blink2video** : depuis la 0.23, l'installateur commun (phase 2 du plan
  `PLAN-INSTALLATEUR-COMMUN-2026-10-08.md`). Restent propres à blink2video : le second temps
  détaché (`update --commun`), les processus à attendre lus des fiches, les compositions à
  relancer. L'ancienne permutation et `update --finaliser` restent pour la transition (une
  0.22 qui installe la 0.23, une permutation interrompue, un dossier parent protégé) ; à retirer
  en phase 3, vers janvier 2027.
- **B14 de l'audit** : identité de processus illisible = verrou repris, choix assumé du 2026-09-29 pour
  les pannes après redémarrage, à ne pas inverser sans accord.
- **Sélecteur FR / EN et panneau Réglages de blink2video** (décision du 2026-10-07). Les trois autres
  applications ont le sélecteur commun (`/nico579-langue.js`, route `/api/langue`, choix gardé côté
  serveur) et le bouton ⚙ commun. blink2video garde les siens : sa langue est gardée par navigateur
  (`localStorage`, un téléphone et un PC peuvent différer) et recopiée au serveur pour le menu de
  l'icône ; sa page porte une CSP à nonce et son serveur ne sert aucun fichier commun ; il a deux
  groupes FR / EN (en-tête et fenêtre de connexion) et son propre panneau, déjà riche, avec la
  vérification des mises à jour et le démarrage automatique. Les unifier changerait son comportement
  pour un gain nul.