Version: [6061] Pudumaps 0.9.3

0.9.3 (2026-08-20) — Fix: las capas de ArcGIS FeatureServer no
cargaban
* Las capas del catalogo Capas Oficiales servidas por ArcGIS
FeatureServer (SERNAGEOMIN, SENAPRED y otras) fallaban al abrir un
proyecto, con el error external_layer_invalid, aunque los servicios
respondian normalmente. Se veian bien en la web de Pudumaps.
* Dos causas, las dos corregidas: el proveedor de QGIS necesita el
origen de datos como pares clave=valor y no como una URL suelta, y
ademas exige el numero de capa del FeatureServer, que en algunas
capas no venia. Ahora se consulta al servicio cual es.
* Las capas de tipo MapServer nunca estuvieron afectadas.

0.9.2 (2026-08-20) — La URL de la API pasa a pudumaps.cl y el campo se
esconde
* La URL base por defecto deja de ser el endpoint crudo de Supabase y
pasa a https://pudumaps.cl/api, que hace de proxy hacia la misma
Edge Function. El endpoint viejo sigue funcionando.
* Las instalaciones que ya tenian guardada la URL vieja se migran
solas
al abrir el plugin. Una URL personalizada (dev, self-host) no se toca.
* El campo "Base URL" del dialogo de Configuracion ahora vive detras
de
una casilla "Avanzado" y esta oculto por defecto. Se abre solo si hay
una URL personalizada guardada, para que nadie quede apuntando a otro
lado sin darse cuenta.

0.9.1 (2026-08-20) — Fix: el dialogo de Configuracion decia que la API
requeria plan Pro
* El texto de ayuda del dialogo de Configuracion seguia diciendo
"Requiere plan Pro o superior". El acceso a la API se abrio a todos
los planes, incluido el gratuito, el 2026-08-19. La v0.8.2 corrigio
metadata.txt y el README pero no este string, que es el unico de los
tres que el usuario ve realmente.

0.9.0 (2026-08-20) — Primera version estable: el plugin sale de
"experimental"
* El plugin deja de estar marcado como experimental. Pasa a aparecer
en
el repositorio oficial de QGIS sin necesidad de activar "Mostrar
tambien complementos experimentales" en el Administrador de
Complementos.
* Sin cambios funcionales respecto de 0.8.7: mismo codigo, mismos 164
tests en verde, bandit y ruff limpios. El salto de version marca el
cambio de estado de publicacion, no una funcionalidad nueva.
* Alcance verificado: pull de proyectos y capas — incluidas capas
externas WMS/ArcGIS del catalogo Capas Oficiales de Chile — contra
datos reales. Push y sync bidireccional funcionan pero acumulan menos
horas de vuelo; ante un conflicto el plugin nunca sobrescribe solo,
siempre pregunta que lado gana.

0.8.7 (2026-08-19) — Fix: 48 issues de compatibilidad Qt6 detectados
por plugins.qgis.org
* BUG REPORTADO al subir v0.8.6: security scan pasó, pero el check de
compatibilidad Qt6 marcó 48 issues en 8 archivos — enums de PyQt5
sin calificar (ej. QMessageBox.Yes en vez de
QMessageBox.StandardButton.Yes) y 4 usos de .exec_() (removido en
PyQt6, solo queda .exec()).
* Fix: los 48 corregidos a la forma calificada/PyQt6-compatible.
Sigue funcionando igual en QGIS con Qt5 — la forma calificada
siempre fue válida en PyQt5 también, no es exclusiva de Qt6.
* NOTA: no se pudo probar contra un runtime Qt6/PyQt6 real (no hay
QGIS instalado en el entorno de desarrollo) — verificado sintaxis
+ bandit + ruff + 164 tests, pero el fix en sí es el patrón
estándar documentado de migración PyQt5→PyQt6, no smoke-testeado
end-to-end en Qt6.

0.8.6 (2026-08-19) — Fix: 3 hallazgos CRÍTICOS de Bandit bloqueaban el
scan de seguridad
* BUG REPORTADO al subir v0.8.5: plugins.qgis.org bloqueó la
publicación por 3 try/except/pass (error_utils.py, plugin.py,
project_loader.py) — su scanner los trata como CRÍTICOS, a
diferencia de bandit local que los marca solo LOW. Ya no eran
aceptables como estaban.
* Fix real, no solo silenciar el scan: los 3 ahora loggean el error
(log_full_error, o print a stderr en el caso de error_utils.py que
es el propio fallback de logging y no puede llamarse a sí mismo)
en vez de tragárselo en silencio. Mismo comportamiento best-effort
de antes — ninguna excepción ahí debe crashear el flujo — pero ya
no desaparece sin rastro para debugging.
* bandit: 0 issues (antes 3 LOW). ruff: 0 issues. 164/164 tests
verdes.

0.8.5 (2026-08-19) — Fix: faltaba LICENSE dentro del ZIP publicado
* BUG REPORTADO al subir el ZIP: "Cannot find LICENSE in the plugin
package". El LICENSE (GPL-3.0) vive en la raíz del repo, pero
build.py/build.sh solo empaquetaban pudumaps_qgis/ — nunca lo
incluían. Ahora ambos scripts copian LICENSE dentro del paquete
(junto a metadata.txt) al construir el ZIP.

0.8.4 (2026-08-19) — Fix: metadata.txt rompía el parser INI de
plugins.qgis.org
* BUG REPORTADO al subir el ZIP: el changelog de v0.7.6 tenía un
símbolo porcentaje suelto (nubosidad, sin escapar). metadata.txt
se lee con configparser (formato INI), que trata ese símbolo como
carácter especial de interpolación — uno solo sin duplicar rompe
el parseo completo del archivo. Ya escapado correctamente.
Verificado simulando el mismo parser (ConfigParser + resolución de
cada valor) antes de subir: parsea limpio.

0.8.3 (2026-08-19) — Limpieza de código previa a publicar en
plugins.qgis.org
* 2 imports sin usar (Qt en sync_dialog.py, QWidget en ui_helpers.py),
2 f-strings sin placeholder y 3 líneas >100 cols. Sin cambios de
comportamiento. Verificado con bandit (0 issues medium/high) y
ruff --select E,F,W (0 issues) antes de subir a plugins.qgis.org.

0.8.2 (2026-08-18) — El acceso a la API ya no requiere plan Pro
* Pudumaps abrió acceso a la API (y por lo tanto al plugin) a todos
los planes, incluido Free — antes requería Pro o superior. Se
actualiza el texto de metadata.txt y README.md, que seguían
diciendo lo contrario.

0.8.1 (2026-08-17) — Fix: capas externas del catálogo Capas Oficiales
quedaban invisibles
* BUG REPORTADO: al abrir un proyecto con capas del catálogo "Capas
Oficiales de Chile" (WMS/ArcGIS MapServer/FeatureServer), el canvas
quedaba completamente en blanco y sin zoom para las 7 capas del
proyecto de prueba — no solo la marcada (WMS).
* Causa raíz: esas capas se guardan en project_layers con geojson=null
(layer_type + external_url describen el servicio real; la web las
renderiza en vivo). La API v1 nunca exponía layer_type/external_url —
solo geojson/id/name/display_order/project_id — así que el plugin
recibía geojson=null para las 7 capas, las trataba a todas como
FeatureCollection vacío, y _zoom_to_group las saltaba por tener 0
features → sin combined extent → canvas nunca se movía del default.
* Fix backend (migración 20260817190000): api_v1_list_layers y
api_v1_get_layer ahora exponen layer_type/external_url/metadata.
* Fix plugin: project_loader distingue layer_type. Para wms/arcgis_map
crea un QgsRasterLayer (proveedores nativos wms/arcgismapserver); para
arcgis_feature, un QgsVectorLayer (arcgisfeatureserver). 'weather'
(puntos Open-Meteo calculados en el navegador, sin servicio
geoespacial
real) se reporta como no soportado en vez de quedar en blanco sin
explicación.
* _zoom_to_group ya no crashea silenciosamente ante la primera capa
raster del grupo (featureCount() no existe en QgsRasterLayer).
* sync_dialog y el menú contextual "Subir a Pudumaps" excluyen estas
capas — son referencias en vivo, no datos locales para sincronizar.
* 11 tests nuevos, 164/164 verdes.

0.8.0 (2026-08-17) — Módulo IA oculto de la UI + hardening para
publicación
* El módulo IA (detección de edificios/agua, landcover, change
detection,
descarga Sentinel-2 vía geoai-py/GeoAgent) queda FUERA de esta
release.
No es un feature maduro: dependía de un instalador pip pesado (~2 GB,
PyTorch) contra el Python embebido de QGIS, con varios hotfixes de DLL
/CRS sin smoke test completo. Se retira de la UI (menú, toolbar,
panel)
y del zip publicado — el código sigue en el repo (paquete ai/ y
diálogos asociados) por si se retoma más adelante, pero no se instala
ni se ofrece al usuario.
* scripts/build.py y build.sh excluyen pudumaps_qgis/ai/ y los
diálogos
IA del zip. El plugin publicado ya no arrastra la superficie de fallo
de PyTorch/geoai — solo depende de `requests`, ya bundleada en QGIS.
* Sin cambios en sync/pull/push/settings — siguen siendo el foco del
plugin: navegar proyectos, abrir capas, subir capas nuevas y
sincronizar cambios en ambas direcciones contra la API pública.

0.7.13 (2026-05-19) — Fix extract_buildings flow + mejor mensaje vacío
* BUG REPORTADO en 0.7.12: extract_buildings corría 1 min y fallaba
silenciosamente con "geoai no produjo el archivo de máscaras".
Causa: mi código asumía que process_raster() escribe un GeoTIFF
de máscaras intermedio (entonces vectorizar después), pero
realmente process_raster() es la pipeline COMPLETA: tile, infer,
vectorize, escribir GeoJSON. Devuelve GeoDataFrame directo.
* Rewrite: ya no se genera _masks.tif intermedio. process_raster
se invoca con output_path=geojson y listo. Si devuelve None pero
escribió, leemos el GeoJSON. Si no escribe nada (0 detecciones),
mensaje explícito al usuario con sugerencias (orto ≤1m/px en vez
de Sentinel 10m/px).

0.7.12 (2026-05-18) — Auto-uninstall pyarrow + RGB renderer
* BUG CULPABLE IDENTIFICADO: pyarrow.lib choca con DLLs C++ de QGIS
causando "DLL load failed while importing lib". Auto-uninstall en
el cleanup post-instalación (sklearn lo importa defensivamente y
cae sin él — no afecta acciones IA).
* Sentinel-2 descargado ahora se carga con renderer multibanda
R=1/G=2/B=3 + stretch min-max automático. Antes se veía negro
porque QGIS default lo cargaba en grayscale.

0.7.11 (2026-05-18) — Fix MKL conflict + GeoAgent pin
* BUG REPORTADO: DLL load failed se mantiene incluso en main thread.
Causa real: conflicto MKL/OpenMP entre QGIS y PyTorch (no
threading como pensé en 0.7.9). Fix: warm_up_geoai ahora setea
KMP_DUPLICATE_LIB_OK=TRUE y registra torch/lib como dll_directory
ANTES de `import geoai`.
* BUG REPORTADO: pin GeoAgent==0.4.0 no existía en PyPI (versiones
reales saltan de 0.2.0 a 1.0.0). Bump a 1.8.0 (última).
* Sin cambios funcionales nuevos — todos los rewrites de tools de
0.7.10 siguen igual.

0.7.10 (2026-05-18) — Rewrite wrappers + warm-up + UX polish
* Rewrite de las 5 acciones IA con APIs reales de geoai 0.10.0:
BuildingFootprintExtractor.process_raster (no predict),
ChangeDetection.detect_changes (no ChangeDetector),
CLIPSegmentation con text prompt para water (no WaterBodyExtractor),
image_segmentation HF para landcover (marcado experimental),
pystac-client + planetary-computer para download Sentinel-2.
* Warm-up de geoai en main thread (fix DLL load en QgsTask Windows).
* PyTorch CPU-only forzado desde índice oficial PyTorch (evita
DLL CUDA fail en máquinas sin GPU NVIDIA).
* Barra de progreso real con tiempo + MB + paquete N/M durante
instalación pip.
* Ventana consola cmd oculta vía CREATE_NO_WINDOW.

0.7.8 (2026-05-18) — Hotfix robusto: detección Python QGIS
* El fix de 0.7.7 (usar sys.prefix) no cubría todas las layouts de
QGIS-Windows: algunas distribuciones tienen sys.prefix apuntando
al root de QGIS, no al directorio del Python embebido.
* Estrategia más robusta: usar os.__file__ (que SIEMPRE apunta a
<python_root>/Lib/os.py) para derivar el python.exe correcto.
Fallbacks múltiples si esto falla.
* Defensa adicional: el instalador valida que el python resuelto
sea un archivo real antes de invocar subprocess. Si la detección
falla, error claro en vez del críptico "could not be found".
* Diagnóstico al inicio del log de pip: [pudumaps-ai diagnostics]
con sys.executable / sys.prefix / resolved_python para que los
reportes de bug traigan siempre el contexto necesario.

0.7.7 (2026-05-18) — Hotfix: instalador IA en Windows
* BUG CRÍTICO: en QGIS-Windows sys.executable apunta al binario GUI
(qgis-bin.exe), no a python.exe. El instalador IA de 0.7.6 fallaba
"relanzando QGIS" en vez de invocar pip, con error críptico
'geoai-py==0.10.0 could not be found' (QGIS interpretaba la spec
como archivo de proyecto). Ahora deriva python.exe desde sys.prefix
que sí apunta consistentemente al Python embebido.
* Sin cambios funcionales. Tests +4.

0.7.6 (2026-05-18) — Download Sentinel-2 + cierre 5 acciones
* Quinta y última acción del plan IA original: "Descargar
Sentinel-2" (DownloadSentinelTool). Bbox del canvas (o custom
EPSG:4326) + rango de fechas + cloud cover máximo. Resultado
GeoTIFF cargado como capa raster.
* Diálogo de configuración con extent del canvas pre-seleccionado,
QDateEdit con calendarios, spinbox de nubosidad %.
* Validación defensiva: rechaza bbox >5° (descargas masivas),
fechas invertidas, rango pre-Sentinel-2 (antes 2015-06-23),
cloud_max fuera de 0-100.
* Ciclo v0.7.x cerrado: las 5 acciones del plan IA están
operativas — buildings, water, landcover, change_detection,
download_sentinel. v0.8.0 arranca con Nivel 2 chilenización
(modelos finetuneados sobre datasets chilenos).

0.7.5 (2026-05-18) — Change detection + framework prompt_params
* Cuarta acción IA: "Detectar cambios (2 rásters)"
(ChangeDetectionTool). Compara dos rásters del mismo bbox y
distinta fecha, produce máscara binaria de cambios.
* Nuevo patrón en AITool: input_kind='none' + prompt_params(parent,
iface) hook. Permite tools que no usan la capa activa y necesitan
pedir input vía diálogo propio. Útil también para futuros tools
que requieran fechas, bbox custom, etc.
* Diálogo selector dialogs/change_detection_dialog.py lista los
rásters del proyecto y pide "antes" y "después" con validación
(no permite el mismo, requiere ≥2 rásters cargados).

0.7.4 (2026-05-18) — Landcover + re-etiquetado clases Chile
* Tercera acción IA: "Clasificar uso de suelo"
(LandCoverClassificationTool). Produce raster GeoTIFF categórico
con sidecar JSON de leyenda re-etiquetada al español + ecorregión
chilena cuando el bbox cae en Chile.
* Nuevo módulo pudumaps_qgis.ai.chile_classes (Nivel 1 chilenización
en código): lookup determinístico bbox → ecorregión (matorral
esclerófilo / estepa patagónica / bosque siempreverde / desierto
costero / etc.) + traducción de clases genéricas (shrubland →
matorral esclerófilo / patagónico según zona).
* AITool gana atributo output_suffix (default .geojson). Landcover
usa .tif. El panel ahora dispatcha QgsVectorLayer / QgsRasterLayer
por extensión del output.

0.7.3 (2026-05-18) — Ejecución async + extract_water + doc Chile
* Las acciones IA ahora corren en QgsTask (background thread del task
manager de QGIS). La UI ya no se congela durante la inferencia y
aparece una entry en el panel Tasks con progreso y cancelación.
* Nueva acción: "Detectar cuerpos de agua" (ExtractWaterTool) — para
lagos, embalses y ríos sobre raster RGB. Funciona con Sentinel-2 y
ortofoto. Caveats Chile documentados.
* Nuevo docs/modelos-chile.md (Nivel 1 chilenización): tabla de qué
casos rinden bien con pesos de fábrica y cuáles requieren
finetuning (rural, palafitos, tomas, bosque nativo).

0.7.2 (2026-05-18) — Panel IA + primera acción (extract_buildings)
* Nuevo framework pudumaps_qgis/ai/tools con clase abstracta AITool,
registry estático y manejo de dependencias por tool.
* Primera acción: "Detectar edificaciones" sobre raster RGB usando
geoai.BuildingFootprintExtractor. Aislada la llamada a geoai en un
helper único para que el upgrade entre versiones del paquete sea
localizado.
* Panel lateral "Pudumaps · IA" como QDockWidget (toggle desde menú
"Panel IA"). Lista las acciones registradas, grisa botones si
falta geoai y muestra mensaje invitando al instalador.
* Resultado de cada acción se carga automáticamente como capa
vectorial en el proyecto QGIS.

0.7.1 (2026-05-18) — Instalador IA en menú
* Nueva entrada "Instalar módulo IA…" en el menú Pudumaps y la
toolbar, con icono propio (ai.svg). Abre el diálogo de instalación
introducido en 0.7.0 para que sea descubrible por el usuario sin
tener que invocarlo desde código.

0.7.0 (2026-05-18) — Infra IA opcional (foundation)
* Nuevo módulo pudumaps_qgis.ai con detección de geoai-py y GeoAgent
como dependencias opcionales. Versiones pineadas (geoai-py 0.10.0,
GeoAgent 0.4.0) para protegerse de bumps rotos upstream.
* Instalador asistido (pip install --user) contra el Python embebido
de QGIS, con progreso línea a línea en un worker thread.
* Diálogo "Instalar módulo IA" que explica tamaños (~500 MB descarga,
~2 GB en disco) y prerequisitos (VC++ redist en Windows).
* Sin acciones IA todavía — esta release solo prepara la
infraestructura. Las acciones (detección de edificios, agua,
landcover, change detection, descarga Sentinel) llegan en 0.7.1.

0.6.0 (2026-05-07) — Security hardening (audit 2026-05-07)
* H1 ALTO: prompt explícito antes de degradar a almacenamiento
plaintext de QSettings cuando QgsAuthManager no tiene master
password. Antes el fallback era silencioso.
* H2 ALTO: rechazo de URLs base no-HTTPS (excepto loopback). Previene
leak de la API key si el user/atacante setea http://evil.example/
* H3 MEDIO: tempfile usado por OGR ahora se borra en finally. Solo
sobrevive cuando OGR es la layer activa y necesita leerlo on-demand
(caso fallback).
* H4 MEDIO: cap de 50 MB en respuestas HTTP + validación estructural
de GeoJSON antes de pasar a OGR. Previene OOM por payloads
malformados.
* H5 MEDIO: helper safe_error_message en todos los diálogos. Stack
traces y mensajes técnicos de la API ya no se muestran al usuario;
el detalle queda en QgsMessageLog para debugging.
* H6 BAJO: User-Agent leído dinámicamente desde metadata.txt. Antes
estaba hardcoded a 0.1.0.
* H8 BAJO: clear_credentials retorna ahora True/False según pudo
eliminar la entry cifrada. SettingsDialog avisa al user si quedó
residuo cifrado por falta de master password en sesión.

0.5.0 (2026-04-23)
* Logo oficial Pudumaps (el pudu con mapa) integrado como icono del
plugin en el administrador de QGIS y como header de cada diálogo
* Iconos SVG específicos por acción: settings (engranaje), download
(abrir proyecto), upload (subir capa), sync (sincronizar)
* Stylesheet QSS con paleta verde Pudumaps aplicada a botones
primarios, tablas, focus rings y progress bars
* Headers con logo + título + subtítulo en los 4 diálogos
(settings, projects, upload, sync)

0.4.0 (2026-04-23)
* Sincronización bidireccional con detección de conflictos
* Diálogo de sync con tabla por capa + dropdown de acción
* Estados: unchanged / local_only / remote_only / conflict / new_local
/
deleted_remote
* Hashes SHA-256 canónicos persistidos como pudumaps/last_hash
* Dedup en pull: si ya existe una capa con el mismo layer_id, se
actualizan sus features en vez de crear un duplicado

0.3.0 (2026-04-23)
* Subir capas QGIS a Pudumaps (push)
* Menú contextual: click derecho en capa vectorial → Subir a Pudumaps
* Acción del menú: Subir capa activa a Pudumaps
* Diálogo con dropdown de proyectos + creación inline de proyecto
nuevo
* Reproyección automática a EPSG:4326 desde cualquier CRS soportado
* Pre-validación de tamaño (10 MB) y número de features (20k)
* Smart dispatch: capas que vinieron del pull se actualizan in-place
(PATCH) en vez de duplicarse (POST)

0.2.1 (2026-04-23)
* Fix: polygon/multipolygon layers no renderizaban — OGR promueve a
Multi* y el memory layer Polygon rechazaba las features. Ahora se
usa el wkbType real de OGR.
* Fix: CRS del memory layer ahora se hereda del OGR layer en vez
de hardcodear EPSG:4326.
* Auto-zoom al grupo recién cargado para que las capas sean visibles
aunque estén lejos del viewport inicial.

0.2.0 (2026-04-23)
* Open a Pudumaps project as QGIS layers (pull)
* Projects dialog with list, search-by-sort, double-click to open
* Automatic layer group "Pudumaps: <project>" in layer tree
* Basic default styling (green) applied to each loaded layer
* Remote project/layer ids stamped as custom properties for future
sync

0.1.0 (2026-04-23)
* Initial release
* Settings dialog with encrypted API key storage via QgsAuthManager
* Connection test against /v1/projects

yes

Chocoplatano

2026-08-20T22:26:56.730909+00:00

3.22.0

3.99.0

None

no

Version management

Plugin details