La tool llamaba a `action_ws=setStaticVars`, que hace un file_put_contents del builder.json ENTERO en la web para cambiar una sola clave. Eso se saltaba las dos garantias que protegen ese fichero: el bloqueo de escritura de la API de ficheros (BLOCKED_GENERATED_FILENAMES en handlers/files.py) y la allowlist de /api/modules/update-metadata. El riesgo no era teorico. El builder.json es la unica memoria de que variable vive en que columna de builder_custom: si una compilacion caia entre la lectura y la escritura de setStaticVars, esta devolvia el mapeo var->columna anterior encima del recien generado y el contenido guardado quedaba colgado de la variable equivocada en TODAS las paginas que usan el modulo. Ahora delega en /api/modules/update-metadata, que ya es la via quirurgica para la metadata y acepta staticVars en su allowlist (objeto, <=64KB, <=200 claves). Se aprovecha para quitar el volcado del schema y del payload completos por consola en cada llamada. Companion en el repo de Forge: compiler.js reenvia staticVars en cada compilacion. Antes no lo mandaba, asi que el CMS lo tiraba al regenerar el builder.json — solo 5 de 4870 modulos lo conservaban. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
5.6 KiB
5.6 KiB