Dos bloqueos que impedían avanzar con la instalación en Linux.
1. La validación de PANEL_PUBLIC_URL solo comparaba que coincidiera con ORIGIN,
y eso deja pasar el peor caso: que AMBAS valgan localhost, que es justo lo
que produce el compose de desarrollo. Ahí no avisaba nada y la instalación
sembraba loopback en el config/.env del destino, donde localhost es el propio
destino y el agente acabaría hablando consigo mismo.
Ahora se valida lo que de verdad importa —que la URL sea alcanzable desde
otra máquina— y solo después el desajuste con ORIGIN. El mensaje también
dejaba un consejo peligroso: "comenta PANEL_PUBLIC_URL para que tome ORIGIN"
solo vale si ORIGIN sirve para sembrar; con ORIGIN en localhost, seguirlo
empeora las cosas. Ese consejo ahora es condicional.
De paso se corrige el docstring, que afirmaba que un ORIGIN equivocado se
habría manifestado por la protección CSRF de adapter-node. No es cierto:
svelte.config.js tiene csrf.checkOrigin en false, así que el Origin de los
POST nunca se valida y ese razonamiento llevaba a conclusiones falsas.
2. El formulario fuerza mode='update' en cuanto el servidor tiene versión
instalada, y una actualización exige que en la ruta destino ya viva algo.
Eso hacía imposible mover una instalación a otra carpeta —por ejemplo al
home, para instalar sin privilegios—: abortaba con "no hay una instalación".
Se agrega una confirmación explícita siguiendo el molde de platformAck: el
ack lleva la RUTA confirmada y no un booleano, así que una casilla marcada
deja de valer si después se cambia el destino, y el servidor revalida en vez
de confiar en la UI. La casilla advierte además que el agente anterior sigue
corriendo: los dos reportarían con el mismo instance_key y se pisarían la
carpeta de entrada registrada, que es por donde el panel enruta los
respaldos.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>