metalfrom.eu/apps/api/migrations
Nicolas FRYDER bcd533ae84 fix(géocodage): les corrections manuelles n'étaient protégées par rien
Corriger à la main les coordonnées d'un groupe écrit un band_locations avec
geocode_provider='admin' et confiance 1.0 : la donnée la plus autoritaire du
système, saisie par un humain, impossible à régénérer. Elle était pourtant la
moins protégée.

Le trigger de la migration 013 supprime toutes les band_locations d'un groupe
dès que son location_text change — override compris. locked_fields ne couvre
que les colonnes de `bands`, jamais les points : une correction disparaissait
donc silencieusement à la première modification du lieu, y compris quand ce
lieu venait d'être verrouillé par l'admin lui-même.

Trois routes de reset l'effaçaient également. Le code raisonnait explicitement
sur la protection des saisies manuelles pour choisir le statut écrit ('done' et
non 'manual', afin que reset-llm ne les emporte pas), mais ni reset-all ni
requeue-all(include_done) n'excluaient le provider : la protection tenait sur
un bouton et manquait sur les deux autres.

Le trigger épargne désormais les points 'admin', et les trois routes les
excluent. Trois tests d'intégration contre un vrai PostGIS couvrent ce trigger
et celui de la migration 016, qui n'en avaient aucun.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-22 14:20:44 +02:00
..
001_initial_schema.sql feat(db): système de migrations SQL + refonte schéma 2026-06-27 15:09:35 +02:00
002_add_missing_columns.sql feat(db): système de migrations SQL + refonte schéma 2026-06-27 15:09:35 +02:00
003_geocode_tables.sql feat(db): système de migrations SQL + refonte schéma 2026-06-27 15:09:35 +02:00
004_crawl_tracking.sql feat(db): système de migrations SQL + refonte schéma 2026-06-27 15:09:35 +02:00
005_fix_checkpoints_and_data.sql fix(crawler): FlareSolverr persistent sessions + DB data field + scraper schema 2026-06-30 20:29:33 +02:00
006_admin_dashboard.sql feat(admin): dashboard admin complet (auth forte, API, monitoring) 2026-06-30 22:15:13 +02:00
007_locked_fields_and_jobs.sql feat: locked_fields, genres splittés, conflits, géocodage, jobs dashboard 2026-06-30 23:06:20 +02:00
008_band_locations.sql fix(geocoder): band_locations.ma_id en BIGINT — débloque 62k bands 2026-07-02 19:47:30 +02:00
009_band_locations_bigint.sql fix(geocoder): band_locations.ma_id en BIGINT — débloque 62k bands 2026-07-02 19:47:30 +02:00
010_band_locations_geom.sql feat(map): carte multi-localisations — un point par step géocodé 2026-07-02 19:52:40 +02:00
011_llm_cache_linkage.sql feat(admin): observabilité & provenance du géocodage + fix parser 2026-07-02 20:10:18 +02:00
012_geocode_confidence.sql feat(geocoder): seuil de confiance strict, dedup, purge ancien pipeline 2026-07-02 20:32:16 +02:00
013_geocode_dirty_trigger.sql feat(geocoder): seuil de confiance strict, dedup, purge ancien pipeline 2026-07-02 21:07:16 +02:00
014_run_cancellation_and_geo_sync.sql feat(qualité): outillage de test complet, CI locale, annulation réelle des runs 2026-08-18 10:05:40 +02:00
015_service_health.sql feat: validation syntaxique du SQL + supervision des services de fond 2026-08-18 18:20:15 +02:00
016_updated_at_only_on_change.sql fix(crawler): boucle de ré-enrichissement infinie, politesse et résilience 2026-08-20 16:43:48 +02:00
017_enrich_pending_signal.sql fix(crawler): boucle de ré-enrichissement infinie, politesse et résilience 2026-08-20 16:43:48 +02:00
018_protect_admin_locations.sql fix(géocodage): les corrections manuelles n'étaient protégées par rien 2026-08-22 14:20:44 +02:00