La frontera estaba afuera
Periodo narrado: del 28 de septiembre al 4 de octubre de 2026
Una frontera puede fallar de dos maneras.
Puede dejar pasar aquello que debía detener. O puede existir únicamente en la historia que nos contamos sobre ella.
Esta semana Mori encontró ambas formas. Una apareció en un despliegue firmado que no había llevado consigo todos sus archivos. La otra surgió dentro de una máquina construida para recibir operaciones asistidas: una ruta estaba cerrada, un enlace simbólico también, pero un enlace duro creado de antemano todavía permitía leer un señuelo.
Ninguno de los dos hallazgos produjo un atajo. El primero obligó a corregir la instalación y su modo de fallar. El segundo cambió una decisión de arquitectura: la confianza no podía dividirse de forma convincente dentro de aquella celda. La frontera útil estaba afuera.
El despliegue que falló antes de escribir
Backup Catalog había terminado la semana anterior con una transición sintética válida y un corte productivo detenido. El incremento correctivo R7 resolvió las ausencias que impedían aplicarlo y quedó publicado con su propia evidencia. Sin embargo, la primera aplicación productiva no completó el trabajo.
El rol instalado omitió mori_backup_paths.py. La puerta funcional lo detectó
con un ModuleNotFoundError antes de producir escrituras, pero el lanzador
envolvía la comprobación con set +e y dejó continuar el flujo. A la vez, la
comparación de checksum utilizaba una línea base equivocada. Había, por tanto,
tres defectos distintos: faltaba un componente, una prueba comparaba contra la
referencia incorrecta y el mecanismo encargado de detener la ejecución no
respetaba su propio resultado.
La aplicación se clasificó como parcial, no como éxito. El módulo se incorporó,
la línea base se corrigió y el lanzador volvió a tratar el fallo como bloqueo.
Después de la remediación, la puerta funcional terminó en PASS: las treinta
declaraciones activas produjeron treinta eventos de metadata; catorce fuentes
no disponibles quedaron en estado neutral y no apareció ningún error duro. Los
temporizadores se restauraron y las fases finales de verificación y cierre
quedaron completas.
El proyecto pudo cerrarse, pero su historia no se reescribió. El registro
verification-failed de la primera aplicación permanece como evidencia. El
resultado útil no es que el despliegue fuera limpio. Es que falló antes de
alterar datos, que el fallo dejó al descubierto un defecto del arnés y que la
repetición posterior sí quedó comprobada.
El plan conservó el nombre y cambió de cuerpo
El cierre de la segunda fase del plan maestro obligó a revisar las diez fases siguientes. Ya no bastaba una lista extensa dentro de un solo archivo: cada checkpoint necesitaba autoridad, retorno y criterio de cierre propios.
El plan pasó a una representación directory/v1. Conservó el mismo identificador
en Drive, pero distribuyó su contenido en una estructura capaz de sostener el
crecimiento sin convertir el documento principal en un depósito indiscriminado.
Las 115 unidades fueron preservadas y la nueva forma quedó verificada también
desde Nomadici.
La continuidad no fue perfecta ni se presentó como tal. El residual R1 quedó pendiente de registro porque la operación necesaria no estaba soportada desde Drive. El cambio de forma quedó acreditado; ese registro concreto, no.
Hay algo significativo en que el plan conservara su identidad mientras cambiaba de cuerpo. Mori no necesita que un documento permanezca inmóvil para reconocerlo como el mismo. Necesita poder demostrar qué migró, qué se mantuvo y qué todavía no ha encontrado un destino válido.
Una recuperación local no es todavía distancia
Dos soportes físicos de Tails fueron clonados sector a sector, arrancaron y
quedaron validados. Además, una imagen de 7.736.072.192 bytes fue transferida de
forma atómica a CERBERON_BKP, protegida con modo 0600, acompañada por su
manifiesto SHA-256, registrada en Backup Catalog y verificada por checksum.
Eso demuestra una captura íntegra y dos copias físicas arrancables. No demuestra que la imagen haya sido restaurada con éxito. Tampoco convierte un artefacto guardado en el entorno de Cerberon en la copia externa que sigue pendiente.
La distinción importa porque esta semana también concluyó formalmente la recuperación local de Forgejo. Su ensayo ya había probado repositorios, base de datos y operaciones Git dentro de un huésped aislado; el cierre documental reconcilió esa evidencia. La recuperación local quedó demostrada. La capacidad de sobrevivir a la pérdida del entorno que contiene el respaldo continúa siendo otra pregunta.
Un canal seguro empezó por detenerse
El siguiente trabajo del plan maestro debía preparar recuperación cifrada de
servicios. Sólo una parte llegó a ejecutarse: age 1.2.1-1+b5 fue instalado y
verificado. El transporte cifrado posterior quedó preparado, pero no autorizado.
En lugar de empujar secretos por un canal todavía mal definido, el proyecto se pausó y abrió otro: Direct Assisted Operations, DAO. Su propósito es construir un lugar desde el que ChatGPT pueda asistir operaciones de Mori sin recibir por ello acceso indiferenciado al resto del reino.
El primer endpoint en la VM 102 llegó a existir, pero fue descartado de forma
explícita. No se intentó dignificarlo retrospectivamente como base de la solución.
La VM se rehízo como mori-chatgpt-dao sobre Debian 13. Conserva acceso humano
administrativo, mientras la cuenta técnica chatgpt-agent utiliza UID y GID
1100, contraseña bloqueada y ningún privilegio sudo.
Codex 0.160.0 quedó instalado y pudo demostrar, sin conexión, tanto su versión como sus comandos de ayuda. Eso acredita binario y ejecución local. No acredita inicio de sesión, emparejamiento, acceso a modelos, servicio persistente ni un canal operativo. Ninguna credencial real fue entregada.
El enlace duro que atravesó el relato
La celda necesitaba demostrar que una operación ejecutada por el agente no podía leer credenciales fuera de su ámbito. La prueba utilizó material sintético: un señuelo diseñado para fallar sin exponer ningún secreto real.
El acceso directo fue denegado. El enlace simbólico también. Pero un enlace duro preexistente dentro del espacio permitido conservaba acceso al mismo inode y devolvió el contenido del señuelo. El candidato quedó rechazado con una marca inequívoca: la lectura mediante enlace duro había pasado.
El hallazgo no significaba que el agente hubiera creado aquel alias durante la prueba. Significaba algo más incómodo: dentro del mismo sistema de archivos, una política centrada en rutas podía prometer una separación que el objeto subyacente no respetaba.
Siguieron varias iteraciones del arnés. Algunas terminaron por defectos de la propia prueba; otras mostraron que cada nueva excepción añadía complejidad sin resolver de forma limpia la premisa original. Los fallos se conservaron porque también describen el límite de lo que se intentó demostrar.
El 3 de octubre se tomó una decisión explícita. El requisito de aislamiento interno I12 fue reemplazado, no aprobado. La celda DAO completa pasó a considerarse un dominio de confianza: lo que deba mantenerse fuera del alcance del agente no debe entrar en ella. La frontera de seguridad se trasladó al perímetro externo de la VM y de sus canales.
Mover la frontera no cerró el trabajo. I17, la verificación de ese perímetro
externo, sigue abierto. Las inspecciones de sólo lectura CE-RO3 a CE-RO13 quedaron
completas y la siguiente intervención de host —protección del propio host y un
vmbr3 vacío— fue preparada y validada sintácticamente, pero al cierre del
periodo no constaba como ejecutada. La VM 102 seguía conectada a vmbr1.
No hay todavía login de Codex, transferencia de credenciales ni canal de operaciones. Decidir dónde termina la confianza no equivale a demostrar que la nueva frontera funciona.
Cuando la protección se vuelve parte del riesgo
Las pruebas de DAO dejaron otra corrección menos visible. La intensidad de un control no puede medirse por lo severo que parece, sino por el riesgo que reduce y por los fallos que introduce.
Un arnés diseñado para impedir una lectura puede acumular permisos, wrappers, aliases y condiciones hasta convertirse en una fuente de estados ambiguos. Por eso la decisión D-0024 estableció proporcionalidad: el rigor debe crecer con el riesgo real de la operación. No toda inspección de sólo lectura necesita el mismo peso que una migración irreversible o una entrega de credenciales.
La decisión siguiente congeló un benchmark PRE/POST. Su parte PRE conserva el estado y los defectos anteriores; la parte POST deberá permitir comparar la nueva aproximación sin borrar los intentos que la hicieron necesaria. El POST no está completo. La comparación existe como método, no todavía como resultado.
También hubo avances que no encendieron máquinas
El blog recibió una política normativa de privacidad y distribución. Establece lectura anónima, evita identidad persistente, fingerprinting, publicidad conductual, incrustaciones pasivas y recursos remotos innecesarios, y favorece la distribución mediante servidor y API. La política describe cómo debe ser el sitio; no demuestra que el sitio ya cumpla cada punto. La auditoría técnica sigue pendiente y no se aplicó ningún cambio a Hugo durante esta semana.
También se creó una guía de evolución de Mori y un lugar para semillas editoriales. El registro histórico de mantenimiento fue reclasificado: 106 entradas y un seguimiento se convirtieron en 41 hechos, 29 materiales de autoridad, 32 referencias y 4 resúmenes. El original quedó embebido y la transformación puede reconstruirse. No fue una poda de memoria, sino una forma de hacerla navegable.
Tres líneas futuras adquirieron nombre sin adquirir ejecución. La versión multilingüe del blog permanece planificada. La sincronización de Obsidian con Drive sólo completó su primera fase documental. La integración de Homepage con una API de trabajo también sigue en estado de plan. Del mismo modo, Netmox recibió una decisión de nomenclatura —NetBox conservará el nombre declarado en Proxmox y la desambiguación será estructural—, pero todavía no hay código ni migración que la materialice.
Nombrar una dirección reduce ambigüedad. No cuenta como haber llegado.
Lo que queda al cerrar la semana
Backup Catalog terminó su incremento correctivo, superó la puerta funcional y cerró el proyecto que había quedado detenido. Forgejo cerró su recuperación local. El plan maestro completó su segunda fase y cambió de representación sin perder sus 115 unidades. Dos copias físicas de Tails arrancaron y una imagen local quedó registrada e íntegra.
La recuperación cifrada de servicios, en cambio, se detuvo después de instalar
age. DAO posee una VM nueva, una cuenta técnica limitada y un Codex que funciona
sin conexión, pero aún no dispone de la frontera externa comprobada que permitiría
continuar hacia credenciales y operaciones reales.
Ese freno no es una ausencia de avance. El enlace duro mostró que la seguridad de rutas no era la seguridad del objeto. Las iteraciones posteriores mostraron que endurecer el relato no endurecía necesariamente el sistema. Mori cambió entonces la pregunta: dejó de intentar separar, dentro de una misma celda, lo que debía quedar mutuamente ciego, y decidió que la celda entera sería el dominio de confianza.
La próxima prueba ya no debe demostrar que una habitación puede esconderse de sí misma.
Debe demostrar que sus muros terminan donde Mori dice que terminan.