SocialRSS Accessible Suite. Novedades de la versión 1.0.17.


MEJORAS PEDIDAS POR USUARIOS

- "Iniciar en la bandeja" ahora funciona de verdad: la ventana NO pasa por primer plano al abrir la aplicación; se crea directamente el icono de bandeja y todo el arranque (streaming, sondeos, temporizadores) sigue su curso por detrás. Además ya no exige tener activada también la minimización a bandeja.
- Lo que publicas aparece AL INSTANTE en tu buffer de Enviados (antes solo entraba en Inicio hasta el siguiente sondeo). Enviados entra además en el sondeo de fondo, así que también recoge lo publicado desde otros dispositivos con tu intervalo.
- El orden "los más recientes abajo" se respeta ahora TAMBIÉN en Seguidores, Siguiendo, Bloqueados y Silenciados (antes esas listas ignoraban la preferencia).
- Modo invisible / modo ventana: la tecla de "Mostrar u ocultar la ventana" de la interfaz invisible anuncia ahora el modo ("Modo invisible" / "Modo ventana"), y hay una opción nueva en Preferencias → Accesibilidad para que los comandos invisibles SOLO funcionen con la ventana oculta (modo invisible puro); la tecla de alternar funciona siempre. Los compositores y diálogos siguen abriendo su ventana al invocarlos.
- La navegación por unidades de tiempo de la interfaz invisible ("1 hora", "6 horas", "1 día") ahora salta por BLOQUES DE CALENDARIO en tu hora local (otra hora en punto, otro bloque de 6, OTRO DÍA), no por diferencias exactas de 60/360/1440 minutos: ya no se salta publicaciones de ayer por la mañana al ir "1 día" atrás desde una de anoche.
- Las Cronologías de usuarios (y las Conversaciones abiertas como buffer) se pueden REORDENAR con Ctrl+flechas dentro de su propia rama, como el resto de buffers.


MASTODON A FONDO (auditoría Mastodon de julio de 2026)

- Tiempo real de verdad: los eventos del streaming se aplican DIRECTAMENTE a la caché con su contenido completo. Las EDICIONES de publicaciones llegan al momento (antes podían no llegar nunca: el refresco pedía solo ids nuevos y el editado conservaba su id), y los BORRADOS hechos desde otras aplicaciones eliminan la publicación de todos los buffers (antes se quedaba para siempre). Menos peticiones al servidor, más inmediatez.
- Editar una publicación ya actualiza TODO en la copia local: advertencia de contenido, marca de sensible y nombre del autor incluidos (antes quedaban los antiguos y la búsqueda podía discrepar de lo mostrado).
- "Descartar notificación" enviaba un identificador mal construido al servidor (no funcionaba); corregido.
- "Cargar elementos más antiguos" ya no puede mezclar publicaciones de Inicio dentro de una lista o búsqueda (un fallo silencioso contaminaba el buffer), y usa el cursor CORRECTO en cada tipo: en Marcadores, Favoritos y Directos ahora avanza de verdad (paginan con identificadores internos, no por id de publicación), las cronologías de usuario usan su propio cursor, y en hilos y búsquedas de texto (que no paginan) se avisa en vez de hacer nada.
- Editar la descripción (texto alternativo) de un adjunto YA PUBLICADO ahora funciona: va dentro de la misma edición con la API correcta (y esquiva un bug confirmado de la librería Mastodon.py 2.2.1). Si algo falla, ya no se anuncia "editado correctamente" en falso.
- Publicar hilos es más seguro: cada parte lleva una clave de idempotencia que se guarda ANTES de enviar y se reutiliza al reanudar (un corte de red tras publicar una parte ya no puede duplicarla), no se pueden lanzar dos publicaciones simultáneas del mismo hilo, los adjuntos con coma en la ruta ya no se parten, el hilo se guarda de forma atómica, los vídeos esperan a terminar de procesarse en el servidor, y la división en partes usa el CONTADOR REAL de Mastodon (URLs = 23, menciones sin dominio, el CW descuenta), validando cada parte final.
- Citar: si tu servidor no tiene citas nativas (Mastodon anterior a 4.5), la cita se hace mediante enlace visible en el texto (antes el servidor ignoraba la cita y podía publicarse solo tu comentario, sin rastro de lo citado). Y una cita con encuesta o adjuntos se rechaza ANTES de subir los archivos.
- "Novedades de seguidores" ya no puede anunciar bajas FALSAS: si la lista no se descargó completa (fallo de red o cuenta enorme), se muestran solo los seguidores nuevos confirmados y se avisa de que las bajas no se pudieron comprobar.
- Los filtros de palabras deciden la versión de la API ANTES de crear/editar/borrar (antes, un timeout podía hacer que la operación se aplicara dos veces por el reintento con la API antigua).
- Rendimiento: índice nuevo para las notificaciones (su consulta pasaba de milisegundos a microsegundos), y los contadores de las filas visibles se refrescan en UNA petición por lote (Mastodon 4.3+) en vez de una por fila: de más de mil peticiones por hora a unas decenas.
- Streaming más robusto: generaciones de arranque (dos arranques rápidos ya no dejan conexiones duplicadas), inventario de conexiones (si una falla al abrir o se cae, el vigilante la repone; antes se daba por buena su ausencia), reintentos con espera creciente para no martillear a un servidor caído, y sondeo de seguridad de TODAS tus cuentas de Mastodon cada ~2 minutos aunque estés en otra red (antes solo con Mastodon en pantalla).
- La aplicación cachea ahora las CAPACIDADES de tu instancia (versión, límites reales de adjuntos, encuestas y caracteres, traducción) para validar antes de publicar en vez de suponer los valores típicos.
- La búsqueda local (FTS) filtra por TU CUENTA antes de aplicar el límite (resultados de otras cuentas podían ocupar el cupo y esconder los tuyos) y una comilla en el término ya no rompe la búsqueda.
- Editar el perfil ya permite BORRAR todos los campos de información (antes, una lista vacía se ignoraba y el servidor conservaba los campos antiguos).
- MARCADORES DE LECTURA de verdad: al entrar por primera vez en Inicio, Notificaciones o Menciones, la posición se RESTAURA desde el marcador del servidor (retomas donde lo dejaste, también si venías de otro cliente como la web o Tusky), y al moverte por el buffer tu posición se envía al servidor con pausa de 3 segundos (antes se marcaba todo como leído al cargar, aunque no lo hubieras visto, y las notificaciones nunca llegaban a marcarse). El marcador solo avanza: releer algo antiguo no lo retrocede.
- Acciones sobre IMPULSOS con cabeza: el menú muestra "Deshacer mi impulso" cuando ya lo impulsaste (o cuando la fila es tu propio impulso), en vez de volver a preguntar; deshacerlo desde tu entrada de impulso la quita de la lista. "Fijar" y "Quitar fijada" ya no salen las dos a la vez: solo la que aplica según el estado real.
- Seguidores, Siguiendo, Bloqueados y Silenciados ya NO están truncados a 80: Ctrl+Shift+M carga la siguiente página y la añade sin mover el foco, anunciando cuántas cuentas entraron y si hay más.
- Diálogos con BOTONES EXPLÍCITOS: al compartir, los botones son "Impulsar" y "Citar" (antes Sí/No/Cancelar y había que recordar cuál era cuál); el aviso de imágenes sin descripción ofrece "Generar descripciones con IA" y "Publicar sin descripción". Y los errores de favorito ya muestran el motivo real en vez de "Error al interactuar".
- BORRADORES DE VERDAD que sobreviven al cerrar la aplicación: al cancelar el compositor con algo escrito se ofrece "Guardar como borrador" (texto, advertencia de contenido, privacidad, idioma, adjuntos con sus descripciones, encuesta y programación, y si era respuesta o cita). Se retoman desde el menú Mastodon → Borradores (Intro abre en el compositor, Suprimir borra) y al publicarlos se eliminan solos. Si una publicación falla, ahora también puedes elegir entre reintentar, guardarla como borrador o descartarla.
- BORRAR Y VOLVER A REDACTAR: en el menú de tus publicaciones, la borra del servidor y reabre el compositor con su texto original, advertencia de contenido, visibilidad y respuesta (para corregir esa errata sin reescribir todo). Se avisa si tenía adjuntos (esos no se recuperan).
- PUNTO FOCAL de las imágenes: botón "Punto focal..." en el compositor (también al editar) para elegir con nombres (centro, arriba, abajo a la izquierda...) qué zona de la imagen queda visible cuando los clientes visuales la recortan en miniaturas.
- CAPACIDADES DE TU INSTANCIA (menú Mastodon): un resumen legible de lo que admite tu servidor: versión, citas nativas, traducción del servidor, límite de caracteres (y cuánto cuenta cada enlace), adjuntos por publicación con sus formatos admitidos, y límites reales de las encuestas. Sin conexión muestra lo último conocido.
- TRADUCIR con tu propio servidor: si tu instancia tiene traducción habilitada (DeepL, LibreTranslate...), Ctrl+T la usa PRIMERO y te dice qué proveedor tradujo y desde qué idioma; el texto no pasa por motores externos elegidos por la app. Si tu servidor no puede, se usa el motor de Preferencias como siempre (y hay una casilla en Preferencias → Traducción para desactivar la vía del servidor).
- NOTIFICACIONES AGRUPADAS de verdad (menú Mastodon): grupos reales del servidor ("A Ana, Luis y 3 más les gustó..."), con el texto de la publicación afectada, VER todas las cuentas del grupo y DESCARTAR el grupo entero de una vez. Con servidores anteriores a Mastodon 4.3 se agrupa localmente por tipo y publicación.
- CONVERSACIONES de mensajes directos (menú Mastodon): la lista real de conversaciones del servidor (participantes, último mensaje, sin leer y fecha), no una reconstrucción a partir de mensajes sueltos. Intro abre la conversación completa en el visor (y la marca como leída); también puedes marcarla leída sin abrirla.
- Solicitudes de notificación POR LOTES: ahora se marcan VARIAS a la vez (Espacio marca y desmarca) y se aceptan o descartan todas de una; al aceptar, se espera a que el servidor termine de mover sus notificaciones a tu buffer y se te avisa.
- ALIAS LOCALES de cuentas (estilo TWBlue): en el menú de una publicación, "Alias local para este autor..." cambia cómo se LEE su nombre en tus listas y notificaciones (ideal para nombres con emojis o bromas largas). Solo afecta a tu lectura: el @usuario real sigue en su columna y en los detalles, y dejar el cuadro vacío quita el alias.
- BLUESKY, enlaces y menciones de precisión (nuevo parser de texto enriquecido): los enlaces ya no se llevan la coma o el punto final (y respetan los paréntesis del propio enlace, como en Wikipedia), los dominios sueltos tipo bsky.app/settings se vuelven clicables, un correo ya no se convierte en mención, y una URL con @usuario dentro ya no genera enlaces solapados. Las menciones repetidas se resuelven de caché (publicar es más rápido).
- BLUESKY, publicar sin sustos (bandeja de SALIDA): cada publicación se apunta ANTES de enviarse con un identificador idempotente. Si la red se corta a mitad, la app PREGUNTA AL SERVIDOR si llegó (nada de duplicados ni de posts perdidos); lo que no llegue queda en menú Bluesky → "Salida pendiente...", donde se reintenta con el mismo identificador (imposible publicar dos veces) o se borra.
- BLUESKY, límites de peticiones con cabeza: ante un 429 la app respeta la hora de reintento que indica el servidor, lo anuncia ("se podrá reintentar a las 12:05") y deja de martillear la API mientras tanto (los buffers siguen usables con lo ya descargado). Las lecturas reintentan con espera creciente; las escrituras jamás se reintentan a ciegas.
- BLUESKY, "Volver a autorizar" (gestor de cuentas): si tu sesión caduca o la revocas, renuevas la sesión SIN borrar la cuenta, conservando buffers, marcadores y toda la caché. Se comprueba que inicias con la MISMA cuenta (para no mezclar datos) y ya no se puede añadir dos veces la misma cuenta por error. El alta además guarda las credenciales en bloque: un fallo de disco ya no deja una cuenta a medias. Esto cubre también el caso reportado de restaurar una copia de seguridad en OTRO ordenador: las sesiones cifradas no viajan entre equipos (van ligadas a cada máquina a propósito), pero ahora basta "Volver a autorizar" para recuperar la cuenta con todos sus buffers.
- Arreglado: con "Iniciar minimizado en la bandeja" activado, la app se quedaba "no respondiendo" al arrancar (el diálogo "Cargando buffers" salía como modal con la ventana OCULTA, no minimizada, y bloqueaba todo). Con arranque en bandeja los buffers cargan en segundo plano, sin diálogo.
- Arreglado: con "Minimizar a la bandeja del sistema al cerrar" activado, la X y Alt+F4 ahora VAN A LA BANDEJA directamente (antes saltaba la confirmación de salida). Salir de verdad sigue en menú Archivo → Salir y en el menú del icono de la bandeja, con su confirmación.
- BLUESKY, tendencias dentro de la app: Intro sobre una tendencia la abre como BUFFER de búsqueda (con la misma consulta que usa el cliente oficial), navegable, ocultable y eliminable como cualquier búsqueda guardada; "Abrir en el navegador" queda en el menú contextual.
- Arreglado (interfaz invisible): las fechas relativas se leían CONGELADAS de cuando se pintó la fila ("hace unos segundos" en un mensaje de hace una hora, reportado por usuarios); ahora el "hace X" se recalcula en el momento de leer cada elemento, también con la ventana oculta.
- BLUESKY, tiempo real con JETSTREAM: el "Inicio en directo" y la "Monitorización en vivo" usan ahora Jetstream (el servicio oficial recomendado) en vez del firehose completo: el FILTRO por las cuentas que sigues lo aplica EL SERVIDOR (hasta 10.000 seguidos, antes se cortaba en ~1.000), los eventos llegan en JSON ligero, se guarda un CURSOR por cuenta (al reconectar no se pierde nada del corte) y la reconexión tiene espera creciente y comprobación de vida. Además, la mención se detecta por los facets REALES (se acabaron los falsos avisos) y también se avisa de las RESPUESTAS de verdad a tus posts.
- BLUESKY, mensajes directos al día (getLog): los DMs se sincronizan de forma INCREMENTAL con el registro de cambios del servidor: mensajes nuevos, borrados, reacciones, silencios, salidas de grupo y LECTURAS HECHAS DESDE OTRO DISPOSITIVO se reflejan solos (con sonido si hay nuevos y repintado si estás mirando los directos), sin re-descargar conversaciones enteras. Arreglado de paso un error que impedía usar el chat (llamada recursiva en la comprobación de capacidad).
- BLUESKY, Seguidores/Siguiendo/Bloqueados/Silenciados ya NO están truncados a 80: Ctrl+Shift+M añade la página siguiente sin mover el foco, anunciando cuántas cuentas entraron y si hay más (igual que en Mastodon).
- BLUESKY, MODERACIÓN de verdad (por contexto): las etiquetas de los servicios de moderación y del protocolo ya no son solo un texto informativo. La app respeta TUS PREFERENCIAS de la cuenta (las mismas que elegiste en la app oficial: ocultar/avisar/ignorar por etiqueta y si el contenido adulto está activado): lo marcado como "ocultar" desaparece de los buffers Y de la búsqueda local (no se indexa), lo marcado como "avisar" se lee como aviso en la lista ("[Oculto por la etiqueta: contenido adulto...]") y se REVELA al abrir los detalles; lo retirado por moderación (!hide) no puede mostrarse en ningún sitio. Sin preferencias configuradas nunca se esconde nada en silencio: se avisa y se deja abrir.
- Arreglado: publicar en Bluesky con "quién puede responder" distinto de "todos" fallaba con un error interno (variable rkey) y el post no salía.


BLUESKY A FONDO (auditoría Bluesky de julio de 2026)

- Editar el perfil o fijar una publicación ya NO puede borrar datos de tu perfil: antes se reconstruía el registro entero solo con nombre/biografía/avatar/banner, y cualquier otro campo (pronombres, web, publicación fijada, campos futuros de Bluesky) se PERDÍA en el servidor. Ahora se lee el registro completo, se cambia solo lo que pides y se escribe con protección contra ediciones simultáneas desde otros clientes (swap + reintento único).
- El vídeo funciona de verdad: un post SOLO con vídeo ya no se rechaza como vacío, el vídeo tiene su PROPIO texto alternativo (se pide al adjuntarlo; antes siempre iba vacío), y la publicación con vídeo conserva la advertencia de contenido, el control de respuestas y la cita (antes se perdían en silencio por ir por una ruta aparte). Además se valida formato y tamaño ANTES de subir y se envía la relación de aspecto (ffprobe).
- El orden de los buffers es el DEL SERVIDOR: los feeds algorítmicos conservan su ranking, la búsqueda su relevancia y un repost de un post antiguo aparece donde toca (antes todo se reordenaba por fecha del post original y el repost se hundía). Se guarda también el motivo (repost/fijado) y el contexto del feed, que ahora acompaña a las señales de interacción del algoritmo. Con 100.000 elementos, la consulta pasa de ~44 ms a décimas de milisegundo (índice nuevo).
- Las notificaciones se marcan como VISTAS en el servidor al abrir el buffer (el contador remoto quedaba pendiente para siempre), Menciones se pide con el filtro del servidor (una página llena de "me gusta" ya no esconde menciones antiguas), se reconocen los tipos modernos (verificaciones, me gusta a reposts, publicaciones suscritas...) y "cargar más" avisa cuando ya no quedan páginas en vez de repetir la primera.
- Etiquetas de moderación COMPLETAS: además de las del propio autor, se guardan las hidratadas por los servicios de moderación (labelers) y las de la cuenta, respetando las negaciones. Suscribirse a un labeler usa ahora su identificador correcto (antes se enviaba una URI inválida y la suscripción fallaba) y configura la cabecera para que sus etiquetas lleguen en las respuestas.
- Crear contraseñas de aplicación desde SocialRSS era IMPOSIBLE por diseño del servidor (siempre "Bad token scope"): ahora el botón abre la gestión de tu cuenta en el navegador con instrucciones. Y si tu contraseña de aplicación no tiene el permiso de mensajes directos, el chat te lo explica con la solución (antes, errores genéricos en cada intento).
- El almacén de credenciales serializa sus actualizaciones: dos cuentas renovando sesión a la vez podían PISARSE los secretos (la segunda escritura machacaba a la primera) y obligar a reautenticar. Verificado con prueba de concurrencia.
- La tarjeta de vista previa de enlaces se descarga con protecciones: se rechazan destinos internos/privados (SSRF), se limita el tamaño en streaming y las redirecciones se revalidan.
- Publicar genera una clave de registro idempotente ANTES de enviar (un reintento con la misma clave no puede duplicar el post) y bloquea el doble envío por doble clic.
- La búsqueda local de Bluesky ya no falla con comillas, guiones ("social-rss") u operadores a medias: búsqueda literal por defecto con respaldo LIKE. Borrar un post limpia también su índice de búsqueda (quedaban restos que la búsqueda seguía encontrando) y el mantenimiento repara huérfanos antiguos.
- Se leen las GALERÍAS de imágenes (posts modernos que aparecían sin multimedia), el límite de imagen clásica sube a 2 MB (el vigente; antes se recomprimía sin necesidad, con pérdida de calidad), el avatar/banner tienen su propia optimización a 1 MB, los mensajes de sistema del chat ya no aparecen en blanco, y fijar un feed ya guardado ahora fija de verdad (no hacía nada).
- Biblioteca atproto actualizada a 0.0.69 (primera importación ~74% más rápida, lexicones al día) y resuelto el aviso de dependencias de Requests que salía en cada arranque (chardet fijado a una versión soportada; además la extracción de texto completo vuelve a funcionar en la versión compilada, que lo excluía).
- Menos peticiones duplicadas: el refresco manual, el temporizador y el sondeo ya no piden el mismo recurso a la vez (deduplicación por clave), los marcadores se guardan por página en una transacción, y la caché detecta registros REEMPLAZADOS (mismo enlace, contenido nuevo) comparando el CID en vez de asumir que un post nunca cambia.
- VER CONVERSACIÓN al nivel de Mastodon (petición de usuarios): ya no es un volcado de texto, sino un visor completo con lista navegable (autor, mensaje, fecha), panel de detalle, menú de ACCIONES sobre cada mensaje (responder, citar, me gusta, repost, marcador, traducir, descripción de la multimedia, abrir en el navegador, copiar enlace, reportar, perfil del autor; con Ctrl+R/Ctrl+Mayús+U/Ctrl+B/Ctrl+T), resumen del hilo con IA, traducción y exportación a Markdown/texto/JSON. Y además "Abrir la conversación como buffer": la conversación completa (raíz, padres y respuestas en orden de lectura) queda como un buffer más del árbol, persistente entre sesiones, con el menú contextual completo de publicaciones, eliminable desde el árbol y reordenable con Ctrl+flechas; el grupo "Conversaciones" se puede ocultar desde Mostrar u ocultar buffers. Las búsquedas guardadas y las cronologías de cuentas también son ahora reordenables dentro de su grupo.


ADMINISTRACIÓN COMPLETA DE MASTODON

- El submenú Mastodon → Administración ya no encadena preguntas simples: abre ventanas wxPython persistentes, redimensionables y navegables por teclado, con tablas accesibles, filtros, detalle, menú de Aplicaciones, paginación y acciones sin perder el elemento enfocado. Se activa expresamente en Preferencias → Mastodon y la cuenta debe haberse autorizado como moderadora/administradora.
- Informes (reportes) funciona ahora como un expediente de moderación: permite alternar abiertos y resueltos, filtrar por quien reporta o por la cuenta reportada, cargar páginas anteriores y consultar categoría, comentario, reglas infringidas, asignación, reenvío y todas las publicaciones incluidas. Desde el mismo diálogo se puede asignar/desasignar, resolver/reabrir, reclasificar el motivo y sus reglas, o aplicar una acción vinculada al informe.
- Cuentas usa la API administrativa v2 y ofrece los filtros de la web que permite la API: local/remota, estado, usuario, nombre visible, dominio, correo, IP y personal de la instancia. El detalle incluye perfil, rol, idioma, fecha de alta, actividad, contadores y todas las IP conocidas con su último uso.
- Las acciones sobre cuentas ya conservan todas las opciones públicas: aprobar o rechazar solicitudes, advertir con texto, enviar o no correo, desactivar el acceso, limitar, forzar la multimedia como sensible, suspender, deshacer cada medida y eliminar definitivamente una cuenta local. Las operaciones destructivas piden confirmación explícita y explican sus consecuencias.
- Dominios bloqueados dispone de administración completa: crear, editar, paginar y retirar; elegir entre limitar, suspender o aplicar solo medidas auxiliares; rechazar multimedia o informes; añadir comentarios privados y públicos; y ofuscar el dominio en las vistas públicas.
- Se añadieron ventanas completas para la lista blanca de federación, dominios de correo, correos canónicos e IP. Es posible exigir aprobación manual a las altas de un dominio de correo, consultar su historial de intentos, crear un bloqueo canónico desde el correo o desde su hash SHA-256, probar si un correo coincide, y crear/editar bloqueos CIDR con severidad, comentario y caducidad.
- Tendencias y descubrimiento reúne hashtags, publicaciones y enlaces pendientes, todos los hashtags registrados y los publicadores de tarjetas de enlace. Se pueden aprobar/rechazar tendencias, revisar publicadores y configurar en cada hashtag su nombre visible, aparición en listados, permiso para ser tendencia y permiso de uso.
- Estadísticas del servidor expone todas las medidas y dimensiones de Mastodon.py: usuarios, altas, interacciones, informes, idiomas, aplicaciones, servidores, espacio, versiones, métricas por dominio o hashtag, series diarias y retención diaria/mensual. Las consultas especialmente costosas se identifican antes de ejecutarlas.
- Las listas con casillas de Reglas del informe y Métricas usan EXACTAMENTE el mismo AccessibleCheckListBox de Preferencias → Sonidos: cada fila se presenta al lector como una casilla real, Windows recibe el cambio de estado y se verbaliza el nombre junto a “marcado” o “desmarcado”. Una prueba impide volver a introducir aquí el CheckListBox nativo inaccesible.
- La cobertura incluye toda la administración pública que ofrecen Mastodon.py 2.2.1 y la API actual. Las pantallas internas de Rails sin API soportada (notas privadas, auditoría, roles, relays, webhooks o ajustes globales) no se imitan mediante cookies ni formularios web frágiles.


ESTABILIDAD Y PROTECCIÓN DE TUS DATOS (auditoría técnica de julio de 2026)

- Copias de seguridad de verdad consistentes: la copia ya no comprime el archivo de la base de datos "en caliente" (podía perder los cambios más recientes), sino una instantánea íntegra hecha con la API oficial de SQLite y verificada antes de publicar el ZIP. Además, la copia ahora incluye las sesiones de Telegram y los almacenes de cifrado de Matrix y XMPP (OMEMO): al restaurar, vuelves a poder leer tu historial cifrado.
- Restaurar una copia ya no sustituye archivos en uso: la restauración se valida, se deja preparada y se aplica sola al volver a abrir la aplicación (antes de abrir la base de datos), igual que la migración. Nada de bases corruptas por restaurar con la app abierta. Crear, exportar y restaurar copias ya no congela la ventana: se hace en segundo plano.
- Los archivos ZIP de copias se validan a fondo antes de restaurar: lista blanca de contenidos, protección contra rutas maliciosas y límites de tamaño (un ZIP dañado o malintencionado ya no puede escribir fuera de su carpeta ni inflarse sin control).
- Cierre de la aplicación ordenado: primero se dejan de aceptar tareas nuevas y se drenan las que corren, después se detienen los servicios (X, Mastodon, Bluesky, audio, Telegram) y la base de datos se cierra LA ÚLTIMA, cuando ya nadie escribe. Si algo se cuelga, el cierre forzado queda registrado con el nombre del servicio que no respondió.
- Operaciones que tardaban demasiado en Telegram y X ahora se CANCELAN de verdad al agotarse el tiempo (antes podían terminar "por detrás" y, si repetías la acción, salía duplicada). El aviso te pide comprobar si la acción llegó a completarse antes de repetirla.
- Corregidos siete errores latentes que podían provocar fallos al re-descifrar mensajes de Matrix, configurar Wallabag o en rutas de error de XMPP (nombres sin importar que el análisis estático no veía por culpa de los falsos positivos de la traducción; ya hay lint configurado para que no vuelva a pasar).

SEGURIDAD

- El contenido HTML de artículos y publicaciones se sanea SIEMPRE con una lista blanca de etiquetas antes de mostrarse (nada de scripts, marcos, formularios ni manejadores de eventos), y los documentos generados llevan una política de seguridad de contenido restrictiva. Se usa la librería nh3 (con respaldo propio).
- Los enlaces solo se abren directamente si son http, https o mailto. Cualquier otro protocolo (que podría lanzar aplicaciones de tu equipo) pide confirmación, y las rutas locales solo se abren sin preguntar si son archivos generados por la propia SocialRSS.
- Tus credenciales están más protegidas: la clave de cifrado ya no se deriva solo del identificador del equipo (que otro programa podía leer), sino que es una clave aleatoria protegida con DPAPI de Windows, ligada a TU usuario. La migración desde el formato anterior es automática y transparente.
- La exportación de migración a otro ordenador usa un formato nuevo cifrado por bloques autenticados (AES-GCM): consume una fracción de la memoria de antes (importante con bases grandes), detecta archivos manipulados o truncados, y la contraseña mínima sube a 10 caracteres (el archivo contiene tus credenciales descifradas). Los archivos exportados con versiones anteriores se siguen importando sin problema, e incluye ahora también los almacenes E2EE de Matrix y XMPP.
- Los errores de base de datos ya no vuelcan al log el contenido de los parámetros (mensajes privados, artículos): solo tipos y longitudes.
- Actualizador reforzado: límites contra ZIP "bomba", comprobación de que el paquete extraído es realmente SocialRSS antes de aplicarlo, detección de fallos de copia (robocopy) sin perder los temporales, y FIRMA DIGITAL Ed25519 del manifiesto de versión ACTIVA: la aplicación lleva la clave pública incrustada y rechaza cualquier actualización cuyo manifiesto no venga firmado con la clave privada del proyecto (que no está en el servidor). El proceso de compilación firma el version.json automáticamente al crear el paquete.

RENDIMIENTO

- Las conversaciones de Telegram ya no cargan TODO el historial: se abren con los últimos 300 mensajes (o los no leídos con margen) y un botón "Cargar mensajes anteriores" trae el resto por tandas. Un chat con decenas de miles de mensajes ya no congela la ventana. "Ir a una fecha" amplía la ventana automáticamente hasta el mensaje buscado.
- Traer historial masivo de Telegram guarda ahora por lotes de 500 (antes una única transacción gigante retenía la escritura de toda la app durante minutos).
- El volumen y la velocidad del reproductor ya no escriben el archivo de configuración en cada pulsación: los cambios rápidos se agrupan y se guardan una sola vez (y siempre al cerrar).
- Las descargas de feeds RSS y las traducciones reutilizan conexiones HTTP (sesión con pool por hilo): menos apretones de manos TLS repetidos con los mismos servidores, con reintentos solo para operaciones de lectura y respetando Retry-After.
- Índices nuevos en la base de datos para X (timeline por posición), Telegram (chats por fijado y fecha) y RSS (cuenta + no borrado + fecha), y las consultas de artículos RSS usan el filtro indexado directo en vez del JOIN. Menos ordenaciones temporales conforme crezca el historial.
- Las lecturas hechas dentro de una transacción ahora VEN las escrituras de esa transacción (antes podían tomar decisiones con datos viejos y duplicar trabajo).
- La compactación automática de la base ahora mide el espacio realmente recuperable (páginas libres), así que se activa cuando toca y no antes ni después.
- La copia de seguridad automática del arranque se hace en un hilo de fondo con prioridad baja: no retrasa la apertura de la ventana.

PARA PROBADORES

- Nueva batería de pruebas de regresión (tests/test_auditoria_2026_07.py y tests/test_mastodon_admin_completo.py): copia con WAL activo, restauración diferida, ZIP maliciosos, saneamiento HTML, protocolos, migración v2 (contraseña errónea y archivo manipulado), lecturas transaccionales, cierre del gestor de tareas, secretos DPAPI, actualizador y contratos completos de administración Mastodon. 66 pruebas en total.
