SUPERFICIE DE CAMBIOS — ACCRDP
Revisión de minimización, 6 de octubre de 2026.

Se revisaron todos los archivos existentes modificados del cliente.
No se cambió el protocolo ni se actualizó el submódulo hbb_common.

Cargo.toml, build.py y build.rs: agregan las funciones accrdp/accrdp-host y
exigen servidor y clave propios cuando se seleccionan. Sin esas funciones
se conserva la configuración y la compilación de RustDesk.
src/lib.rs y src/common.rs: puntos de entrada mínimos para cargar la
política ACCRDP y seleccionar el servidor antes de conectar. La lógica
está en el módulo nuevo src/accrdp.rs.
src/platform/windows.rs: Caja rechaza la parada y desinstalación directa
desde la interfaz nativa; se utiliza el mantenimiento del instalador.
src/server/connection.rs: Caja valida una autorización del directorio antes
del inicio de sesión y bloquea el cambio de lados. La ruta original se
conserva sin accrdp-host. La autorización dura 90 segundos, se consume una
vez y vuelve a comprobar asignación, usuario y equipo habilitados.
flutter/lib/common.dart: marca azul, acceso al directorio y supresión del
contenido de enlaces con credenciales en el registro ACCRDP. La interfaz
original se conserva para appName distinto de ACCRDP.
flutter/lib/models/server_model.dart: Android Caja solicita contraseña al
detener desde la aplicación. Las demás variantes siguen la ruta original.
Android MainActivity y BootReceiver: puente a la nueva pantalla de
mantenimiento e inicio al arrancar de Caja, respetando permisos del sistema.
Android build.gradle y AndroidManifest.xml: identificadores, iconos,
esquema de enlaces, versión mínima y firma propios según ACCRDP_ROLE.
Windows runner/CMakeLists.txt y Runner.rc: recursos ACCRDP solo cuando
ACCRDP_ROLE está configurado.
res/vcpkg/aom/portfile.cmake: selecciona ensamblador NDK al compilar AOM
para ARM de 32 y 64 bits Android desde Windows; sin ese ajuste no compila.
flutter/pubspec.lock: resolución compatible con Flutter 3.24.5, incluyendo
dependencias de pruebas fijadas por ese SDK. No se cambió pubspec.yaml.
Los archivos generados del puente no cambian la API; se corrigió su
generación proporcionando los encabezados C que faltaban en este entorno.

CAMBIOS DE 1.1.0
Se inspeccionaron los 27 archivos existentes modificados. Las adiciones
del núcleo se limitan a bloques condicionados por la función accrdp.
src/rendezvous_mediator.rs: inicia la comprobación de cambio de red.
src/client.rs y src/server.rs: traducen el destino del socket del relay
a su IP interna cuando HTTPS confirma la red de la oficina. El relay
anunciado a otros equipos conserva siempre su dirección pública.
src/tray.rs: ACCRDP carga su propio icono, sin heredar assets/icon.png.
flutter/lib/desktop/pages/desktop_home_page.dart y mobile/pages/home_page.dart:
entran a la pantalla nativa de cuentas solo para ACCRDP Maestro; Caja
conserva ID y permisos del sistema, y ofrece Buscar actualizaciones.
flutter/lib/mobile/pages/server_page.dart y desktop_home_page.dart:
ocultan el campo de contraseña de acceso de Caja. La validación del
directorio sigue siendo obligatoria; esto no permite acceso anónimo.
build.rs: al compilar Android desde Windows no compila windows.cc.
Cargo.toml y Cargo.lock: incorporan libsodium-sys 0.2.7 con un único bloque
de compilación por destino Android. El código criptográfico no se modifica
y el anfitrión Windows conserva sus dependencias originales.
Android MainService.kt y FloatingWindowService.kt: puntos de llamada al
módulo nuevo AccrdpBranding.kt para el nombre e icono de la notificación,
canal del servicio y botón flotante. Era necesario para conservar la marca
al dejar Android en segundo plano. Solo se aplica a los dos identificadores
de ACCRDP; RustDesk conserva los valores originales y no se agregan estados.
El nuevo vector accrdp_status.xml es un icono monocromo para notificaciones;
Android controla su color. El iniciador y el botón flotante usan el logo azul.
control/desk/downloads.py y templates/downloads.html: textos de compatibilidad
y acceso desde la aplicación, para corresponder a los paquetes publicados.
server/Caddyfile: agrega descargas públicas por HTTP en 192.168.1.64, a
petición del usuario. Solo los GET/HEAD del catálogo y archivos llegan al
portal; las demás rutas de cuenta/API no se exponen por ese enlace. Las
rutas existentes HTTPS de control y correo se conservan. Se comprobó el
catálogo, sus estilos, el SHA-256 del Host descargado por IP y el rechazo
de un POST al inicio de sesión por HTTP local.

Los módulos nuevos accrdp_api.dart y accrdp_home.dart aíslan la cuenta,
directorio, usuarios, permisos y actualización. El token se mantiene solo
en memoria. La API nueva app_api.py mantiene sesiones de ocho horas,
almacena únicamente el hash del token y vuelve a validar cuenta, cambio
de contraseña y permisos en cada solicitud. Migración 0003_app_session.
Las vistas web originales y el protocolo RustDesk se conservan.
No se declara estado en línea sin medirlo; habilitado significa permiso.

DETECCIÓN DE RED
Todas las variantes comprueban 192.168.1.64 conservando el hostname y la
validación TLS de control.amanecerccu.com. Al confirmarlo utilizan los
puertos internos 21116/21117. Si no se confirma, usan los dominios y puertos
externos 22116/22117. No se confía solo en coincidir con una IP privada.
El motor revisa cambios cada 15 segundos. Los registros LocalServer de la
versión anterior ya no deciden la selección de red.

VALIDACIÓN DE 1.1.0
17 pruebas del portal aprobadas, incluidas creación/asignación desde la API,
cambio obligatorio de clave, sesiones expiradas/revocadas y acceso denegado
a equipos ajenos. Inicio de sesión real y consulta de los cuatro equipos
mediante el mismo transporte Dart de la app: correctos, Red de la oficina.
Comprobación HTTPS con certificado válido y TCP 21116/21117 internos: correcta.
Windows Maestro y Caja: compilación Rust, Flutter e instaladores completados.

ANDROID, 7 DE OCTUBRE DE 2026
Compilación nativa de Maestro y Caja para ARM32, ARM64 y x64 completada.
Paquetes universales 1.1.0, código de versión 110, mínimo API 22.
Cada paquete contiene 12 bibliotecas nativas con arquitectura ELF correcta.
Se verifican firma APK v1/v2, alineación ZIP y bibliotecas de 64 bits con
páginas de 16 KiB. Los identificadores son com.amanecerccu.accrdp.master
y com.amanecerccu.accrdp.host. Los dos conservan la misma firma privada.
Se comprobó el icono de inicio extraído del APK y la inclusión de la marca
propia de notificaciones y botón flotante. No se modificó el motor remoto
para esta corrección de marca. Los cuatro scripts de compilación y
publicación revisados pasaron el análisis de sintaxis de PowerShell.
Las fuentes y los hashes de los instaladores se publican en el manifiesto.

MAESTRO WINDOWS 1.1.1: AJUSTE A VENTANA, 7 DE OCTUBRE DE 2026
Se confirmó view_style=original y scroll_style=scrollauto en las
preferencias locales de Caja 1 y Caja 2. El tamaño original puede exceder
la ventana y provocar desplazamiento de la imagen al acercar el mouse
a los bordes. No se modificó la resolución del equipo remoto.

Superficie de regresión de esta corrección:
- client/flutter/lib/models/model.dart: cinco líneas en onEvent2UIRgba
  seleccionan adaptive antes de actualizar la geometría de la primera
  imagen. Solo actúan en sesiones de escritorio de ACCRDP. Era necesario
  para sustituir también las preferencias original guardadas en 1.1.0.
  El ajuste al redimensionar, los márgenes y las coordenadas del mouse
  siguen usando la implementación existente del visor. La ruta RustDesk,
  Android, cámara y transferencia de archivos conserva su comportamiento.
- COMPILACION.txt y ACTUALIZACIONES.txt: describen la versión y cómo
  instalarla. No agregan cambios de ejecución.
- Los scripts locales de compilación, empaquetado y publicación permiten
  versionar solo Maestro Windows y conservar los otros tres instaladores.
No se cambió el motor Rust, la autenticación, el servicio de Caja, los
submódulos ni las contraseñas. Se reutilizó la DLL verificada de 1.1.0.

Validación: compilación Flutter Windows release completada. La geometría
adaptive existente pasó una comprobación de escritorio 1920x1080 en
ventanas 900x600, 1600x850, 600x900 y 2560x1400, verificando que no se
recorte la imagen y se conserve la proporción. La comprobación permite
redondeo de punto flotante; no constituye una prueba de sesión remota.
Todavía se debe confirmar visualmente el movimiento del mouse en una caja
real con Maestro 1.1.1. La escala puede cambiarse manualmente durante la
sesión; una nueva conexión vuelve a ajuste automático.

CAJA WINDOWS 1.1.2: VENTANA EN SEGUNDO PLANO Y DESCONEXIÓN LOCAL
Solicitud del propietario: no abrir la ventana al conectar ni ofrecer
Desconectar a los cajeros, incluso si usan cuentas administradoras.

Superficie de regresión, revisada archivo por archivo:
- client/flutter/lib/models/server_model.dart: maintenanceProtectedHost
  identifica únicamente ACCRDP Caja en Windows. Su constructor activa
  hideCm antes de recibir conexiones, por lo que las rutas ya existentes
  addConnection, updateClientState, ventana al frente y temporizador de
  minimización no muestran ni enfocan el administrador de conexiones.
- client/flutter/lib/main.dart: el inicio del administrador de conexiones
  conserva esa política y activa setPreventClose solo para Caja Windows.
  Era necesario para que la configuración anterior no volviera a abrir
  la ventana y para interceptar el cierre antes de desconectar sesiones.
- client/flutter/lib/desktop/pages/server_page.dart: no dibuja el botón
  Desconectar de una sesión autorizada en Caja Windows y también bloquea
  su callback. El botón de cierre oculta la ventana. El evento de cierre
  conserva sesiones activas; cuando ya no hay sesiones, mantiene la ruta
  original de limpieza y terminación del administrador de conexiones.
- ACTUALIZACIONES.txt y COMPILACION.txt documentan versión, instalación y
  compilación. Los scripts locales empaquetan/publican solo Caja Windows.
El resto de plataformas, Maestro y RustDesk conservan sus rutas anteriores.
Se mantienen autenticación por cuenta, autorizaciones del directorio,
indicador de bandeja y procedimiento de Mantenimiento con contraseña.
No se cambian permisos de Windows ni el motor nativo ni submódulos.

Validación: Flutter Windows release 1.1.2/112 compilado. Tres pruebas con
la DLL real de Caja y eventos/plataforma de ventana simulados comprobaron:
1. Una conexión autorizada no solicita show, focus, restore ni minimize.
2. El cierre de ventana y su botón la ocultan sin eliminar la sesión.
3. La tarjeta de conexión se dibuja sin el texto/botón Desconectar.
No son una prueba de teclado físico en una caja. Se debe instalar Host
1.1.2 en las cajas y confirmar allí el resultado. Las actualizaciones
de las tres cajas continúan siendo manuales, como acordó el propietario.

LÍMITES DE LA VALIDACIÓN
Compilación no equivale a una prueba de captura y control en cajas reales.
Falta una prueba real de conexión desde Android y la confirmación de las
actualizaciones manuales de Caja 1, Caja 2 y Caja 3. El botón Buscar
actualizaciones descarga el instalador; no hay orden central de actualización
remota por lotes desde Maestro en 1.1.0.
La suspensión de un usuario bloquea nuevas conexiones, no termina una
sesión ya establecida. Sin administración empresarial de Android no se
puede impedir que el sistema fuerce la detención de una aplicación.

ACCRDP 1.2.0: SUPERFICIE DE REGRESIÓN
Se revisó el cambio respecto al paquete fuente 1.1.2, sin actualizar
submódulos ni dependencias. Las modificaciones de ejecución necesarias son:
- src/accrdp.rs: admite escritorio o transferencia de archivos en la
  autorización Host; mantiene ID, prueba criptográfica y ticket de un uso.
- src/flutter.rs: solo Android con la función accrdp habilitada entrega
  fotogramas RGBA de varias pantallas y solicita su actualización inicial.
  El filtrado de pantallas por sesión y las otras plataformas se conservan.
- flutter/lib/accrdp_home.dart: conexión por la ruta correspondiente a cada
  plataforma, botón de archivos, solicitud de un ticket nuevo y controles
  para recordar, recuperar y olvidar credenciales. Es el único propietario
  de la sesión API; las ventanas hijas no reciben el token de cuenta.
- desktop/pages/desktop_home_page.dart: despacha una solicitud de archivos
  al directorio autenticado; la solicitud contiene solo el ID remoto.
- desktop/widgets/remote_toolbar.dart y common/widgets/toolbar.dart:
  muestran herramientas y usan un ticket nuevo al abrir Archivos en ACCRDP.
- mobile/pages/remote_page.dart: añade las herramientas y el pintor de
  monitores. models/model.dart conserva un fotograma por monitor, calcula
  los límites de zoom sobre el escritorio completo y libera las imágenes.
  La ruta original de una pantalla se mantiene.
- mobile/pages/file_manager_page.dart: una sesión independiente para
  archivos ACCRDP evita reemplazar la sesión de escritorio. Su cierre
  normal vuelve al escritorio y restaura el receptor de eventos móviles.
- windows/runner/flutter_window.cpp: registra el canal de credenciales
  solo en compilaciones ACCRDP.
- android/.../MainActivity.kt: registra ese canal solo para paquetes ACCRDP.
La lógica nueva está en accrdp_tools.dart, accrdp_displays.dart,
accrdp_credentials.dart, windows/runner/accrdp_credentials.h y
android/.../AccrdpCredentials.kt. La contraseña guardada no se envía por
IPC a ventanas remotas ni se escribe en configuraciones o registros RustDesk.
El inicio de sesión continúa verificándose en el servidor por HTTPS.

Comprobaciones automatizadas: dos pruebas Flutter verifican que actualizar
un monitor conserve visible el otro (incluyendo origen negativo y espacio
entre pantallas) y que Maestro recupere credenciales ocultas y las olvide.
La prueba de credenciales simula el canal nativo; no sustituye una prueba
de almacenamiento en un teléfono real. El analizador no detectó errores
en los archivos revisados; hay avisos previos de API obsoletas en RustDesk.

Límites que deben verificarse en dispositivos reales: enviar y recibir
archivos entre Maestro/Host actualizados, control táctil sobre varios
monitores, permisos Android y conservación del escritorio al volver de
Archivos. No se ha instalado Host remotamente en las tres cajas ni se ha
realizado una sesión física de varios monitores desde un Android.
La resolución y cantidad de monitores afectan consumo de memoria y red.
En Android, cerrar un diálogo de error de conexión puede devolver al
directorio por la ruta heredada de cierre; el cierre normal de Archivos
conserva el escritorio. El guardado de credenciales requiere Android 6+.

MAESTRO ANDROID 1.2.1: SUPERFICIE DE REGRESION
- flutter/android/app/build.gradle: selecciona un manifiesto adicional
  exclusivamente cuando ACCRDP_ROLE=master y la variante es release.
- flutter/android/app/src/accrdp-master/AndroidManifest.xml: nuevo archivo
  que elimina InputService, FloatingWindowService y BootReceiver, y sus
  permisos de superposicion, arranque y excepcion de ahorro de bateria.
  Maestro solo inicia conexiones a otros dispositivos. Estas funciones
  corresponden al Host y no son necesarias en Maestro.
La variante Host y el manifiesto base no se modifican por esta correccion.
Se mantiene el mismo identificador de paquete y la misma clave de firma.
No se intenta sustituir la decision de Play Protect ni cambiar la identidad
de la app para eludir su clasificacion. La aceptacion real queda pendiente
de instalar el APK actualizado en el telefono del propietario.

flutter/lib/accrdp_credentials.dart: si una plataforma aun no implementa
el almacen nativo, supported devuelve false ante MissingPluginException.
Asi conserva el inicio manual en esas plataformas. No cambia la lectura,
escritura o eliminacion de credenciales en Windows y Android.

Verificacion del APK 1.2.1 final: manifiesto binario sin servicio de
accesibilidad, SMS, escucha de notificaciones, superposicion ni arranque.
Paquete com.amanecerccu.accrdp.master; versionCode 121; minSdk 22 y target 36.
Firma APK valida con el mismo certificado SHA-256 de las versiones previas:
829b0fbd40c6ae117e9fa9b31c405c28922ac7ecdd676b78b8d637424963518f
ZIP, arquitecturas ARM32/ARM64/x86_64 y alineacion de 16 KiB comprobadas.
El APK Host 1.2.0 conserva su servicio de accesibilidad.
Tambien pasaron seis pruebas de API/autorizacion de tickets y permisos.
Windows Maestro 1.2.0 instalado en la PC servidor; ejecutable y app.so
coinciden con el paquete compilado. No se instaló Host en las cajas.

HOST 1.3.0: SUPERFICIE DE REGRESION (2026-10-09)
- client/src/accrdp.rs: únicamente la ruta accrdp-host de watch_network
  intenta registrar su identidad hasta tener éxito. Maestro y compilaciones
  sin accrdp-host mantienen la ruta anterior. Es el punto existente de
  arranque/reconexión del servicio, necesario para registrar sin intervención.
- Nuevo client/src/accrdp/enrollment.rs: firma Ed25519 de un desafío HTTPS
  con la identidad nativa del equipo; reutiliza el cliente TLS de ACCRDP.
- control/accrdp/settings.py: dos opciones de despliegue para el destinatario
  y la base de claves públicas de hbbs. Por defecto el registro está apagado.
- control/accrdp/urls.py: añade /api/host/challenge/ y /api/host/register/.
  La autenticación y autorización de sesiones remotas no cambia.
- control/templates/downloads.html: explica el registro automático y la
  primera apertura necesaria en Android; no cambia las rutas de descarga.
- Nuevo desk/enrollment.py: comprueba ID, firma, clave pública registrada y
  vigencia de 180 segundos; crea equipo y asignación en una transacción.
  No modifica equipos existentes ni recupera asignaciones revocadas.
  No cambia modelos, migraciones, dependencias ni submódulos.
- Configuración privada del panel: activa el destinatario autorizado.
  Se respaldó antes del cambio; solo se reiniciaron las tareas del panel.
- Red: el rango TCP del módem se reemplazó por las tres traducciones
  individuales equivalentes. El usuario confirmó conexión Android externa.
  Se retiró el cambio provisional para forzar retransmisión: no era necesario.

Pruebas: nueve casos de API/tickets/registro aprobados, incluida firma
incorrecta, ID ajeno, desafío alterado, reintentos y permisos revocados.
El endpoint publicado emitió un desafío válido contra la base real de hbbs.
Las cuatro cajas están online según OnlineResponse; Caja 4 respondió tanto
a negociación directa como relay. No se enviaron entradas a su escritorio.
El registro automático con un Host nuevo requiere comprobar su aparición
tras instalarlo; esta actualización no se ha instalado en las cajas.

Preparación solicitada de otras plataformas, sin instaladores publicados:
- flutter/linux/CMakeLists.txt y my_application.cc: marca ACCRDP únicamente
  cuando ACCRDP_ROLE está definido. No afecta a Windows ni Android.
- flutter/lib/accrdp_home.dart: el enlace de actualización elige su plataforma
  real; evita proponer un instalador Windows desde Linux/macOS/iOS.
- deploy/macos/build_host.py: ruta candidata para un constructor macOS;
  no se ha ejecutado con Xcode ni se ha validado una aplicación Mac.
  src/accrdp/enrollment.rs identifica macOS con el nombre aceptado por el API.

POLITICA INTERNA SOLICITADA (2026-10-09)
- deploy/POLITICA-USO.txt: aviso de asistencia exclusivamente a equipos
  empresariales propios, con personal autorizado y permisos del sistema.
  Es una política de despliegue; conserva las licencias del software libre.
- deploy/windows/ACCRDP.iss: añade InfoBeforeFile y una copia instalada del
  aviso. Necesario para mostrarlo antes de instalar; conserva LicenseFile.
- flutter/lib/mobile/pages/server_page.dart: añade un aviso visible en la
  pantalla del Host ACCRDP. El cliente sin marca ACCRDP mantiene su UI.
  No cambia arranque, autorización de sesiones ni permisos de Android.
- control/templates/downloads.html: aviso antes de los enlaces de descarga
  y detalle desplegable. No añade cookies, aceptación registrada ni cambios
  en la autorización. Los Maestros publicados conservan sus versiones.
- deploy/ios/EVALUACION.txt: resultados de búsqueda, requisitos y alternativas
  descartadas; no contiene un Host iOS ni instrucciones de jailbreak.
