CreaRack-SL

Bootstrap ZIP — Código embebido que no descarta PyInstaller

Descripción

El bootstrap del Agente carga su código desde un paquete ZIP embebido (app-VER.zip) en lugar de .py sueltos en agent_modules. Resuelve el bug que rompía en 2.14.0: PyInstaller analiza módulos y descarta los .py que colisionan con sus análisis internos (app_main.py) → el fallback embebido fallaba con “no encontrado”.

Raíz: Los 2 builds fallidos de 2.14.0 (07-07) se debían a que PyInstaller dejaba fuera app_main.py cuando iba como --add-data suelto → tras un swap limpio el bootstrap rompía.

Solución implementada

  1. build_agent.bat: genera app-VER.zip ANTES de llamar a PyInstaller.
  2. PyInstaller --add-data app-VER.zip: embebe el zip (no colisiona).
  3. bootstrap._embedded_source(): extrae y verifica el zip embebido en fallback.
    • Mismo mecanismo que un paquete descargado.
    • Se ejecuta si current.txt apunta a embebido o previous.txt no existe.

Testing

  • 3 tests nuevos de _embedded_source en tests/agent/test_agent_launcher.py.
  • Self-test forzado con CREARACK_FORCE_EMBEDDED=1 → ejercita el camino embebido (antes, el self-test pasaba pese al .exe roto porque usaba current.txt con versión anterior intacta).
  • Suite agente: 26/26 verde.

Impacto

  • 2.14.1: Primera release entregada como paquete firmado sin recompilar el .exe.
  • Cadena de fallback completa: current → previous → embebido ahora funciona en ambos extremos (código suelto descartado).
  • Cierre de carrera antivirus sobre el binario: el swap de actualización ya no crea un nuevo .exe → no hay ventana donde el AV bloquea la extracción de un onefile no-reputado.

Archivo modificado

  • scripts/agent/build_app_package.py: genera y embebe el ZIP.
  • terminal/agent/bootstrap/_embedded_source(): función nueva de extracción.
  • build_agent.bat: orquesta la generación del ZIP.
  • Tests: tests/agent/test_agent_launcher.py (+3 test casos).

Véase también

  • [[feature—agent-lanzador—paquete-firmado-ed25519]]
  • [[decision—20260707—netbird-ssh-apex]]
  • [[concept—agent-lanzador—cadena-fallback]]
  • [[incident—20260707—bootstrap-2-14-0-roto]]
  • [[concept—agent-lanzador—pyinstaller]]