Actualización 2.79
10/6/2026
updatesin
SIN Puerta 5 del constructor de cadenas: con puerta del operador copia de seguridad/aplicación SANDBOX — se aplica a un desechable COPIA y DESHACE es idéntico byte a byte; SIN permanece BLOQUEADO para escritura pública. Carril Jarvis-PENANCE (MAGIC/SIN). Abre la Puerta 5 del SIN Cadena Constructor: demuestra un `SinApplyPlan` validado (Puerta 3/NEMESIS) y AEON-revisado (Puerta 4/OMEGA) se puede aplicar y deshacer en una zona de pruebas/copia controlada, sin tocar el juego, sin tocar ningún archivo de usuario REAL, sin RT2 y sin un botón público. Copia de seguridad/aplicar sandbox no es una creación pública. Nuevas clases sandbox-solo en `FfxLib/Ai/Sin`: `SinSandboxApplyGate` (`SinSandboxEligibility` — el 8 de solo lectura condiciones: válido estructuralmente · `ApplyAcceptable` permanece falso · un SEPARADO permiso `AllowSandboxApply` explícito · AEON AGREGADO-solo · ningún bloqueador crítico fuera del andamio eliminable, la regla que separa los bloqueadores de la Puerta 5 se resuelve (`plan-blocker`/`rung-ladder`) de los reales (carga útil candidata/bloqueada, `divmul-integrity`, `jump-slots`, paso-bloqueador)), `SinSandboxApplySession` (orquestador: copiar → copia de seguridad-antes-escribir → emisión REAL al copiar solo → diferencia REAL → verificar que el original esté intacto → restaurar → idéntico byte a byte), `SinSandboxBackup` (`.prev.bak` de la copia + pre-image hash + `Restore`), `SinSandboxRestoreVerifier` (SHA-256 + byte-comparar) y `SinSandboxApplyResult` (resultado inspeccionable + plantilla de salida). REAL se aplica a través del códec probado: para la receta elegible, carga una copia desechable de un monstruo REAL (de solo lectura del corpus → `work/`), construye el cuerpo lineal mediante `AppendGuardedAction`(siempre-verdadero guardia `PUSHII 1`): el único método limpio, sí mismo-relocating que se agrega al final del código (compensaciones existentes estables), se ejecuta `SpliceAiFileIntoMonsterGrow`, re-lee (re-parses limpio = `offline-emittable` renglón), ejecuta un REAL `AiScript_Diff.Compare(original, edited)` (solo el bloque AGREGADO previsto, 0 modificado / 0 eliminado = `AEON-reviewed` peldaño, sin deriva) + `AiValidator.ValidateRebuilt` (`AiScriptLab-clean` renglón), y solo entonces escribe en el COPIA (después del `.prev.bak` = `backup-ready` renglón). 3 recetas piloto (una decisión honesta, nunca forzada en verde): SIN-006 (Véu de Bevelle, turno-1 sí mismo-buff; Autoobjetivo probado, sin carga útil de comando, sin 0x16/0x17) = el SOLO elegible → se aplica el sandbox REAL (`m201`, OnTurn resuelto mediante `AiWorkerMapping.TryResolveCombatOnTurn`, diff +15 ~0 -0, idéntico byte a byte restaurar, hash original/corpus sin cambios); SIN-009 (Mandato hacer Maester; carga útil candidata) = conservadoramente BLOQUEADO (una copia desechable no es excusa para escribir una carga útil deshonesta; decisión documentada); SIN-010 (Farplane Peaje, HP%) = BLOQUEADO por el `0x16` DIV frente al HP% multiplicado (`divmul-integrity`) — 0x16/0x17 es un dedicado PARCHE en otro carril, NUNCA arreglado aquí. Pruebas adicionales: sin el permiso `AllowSandboxApply` incluso SIN-006 es BLOQUEADO (con puerta del operador); una diferencia inesperada (manipulada) es rechazada por el mismo predicado conservador (`+0 ~1 -0 → conservative=False`); el original nunca se escribe (`AppliedToOriginal=NO`, probado mediante hash tanto de la copia de referencia Y como de la fuente del corpus REAL). Nueva puerta `--sin-sandbox-rt0`: ejecuta las 3 recetas, prueba la copia de seguridad/restauración/aislamiento y una protección del sistema de archivos (nada escrito fuera de `work/`, no `.prev.bak`/`monster_.bin` en la salida dir, cada elemento REAL de solo lectura con un hash sin cambios, el directorio sandbox limpio al final (sin residuos, nunca comprometido). MENOR (NUEVO capacidad ejecutable: sandbox aplicar capa + puerta; cruza el sin conexión-emittable/AiScriptLab-limpio/AEON-revisado/copia de seguridad-ready renglones en una copia). Alcance/honestidad: SIN permanece BLOQUEADO para escritura pública — La puerta 5 se aplica solo a un sandbox/copia, es NO RT2 y NO un público botón; `PublicApplyAllowed=NO`/`Rt2=NO` por construcción. Hace NO hacer un escritor público/guardar/runtime/RT2/UI/button en `MonsterAiEditor`; toca NO un `monster_.bin`/Aurora/nativo-menú/Blitzball/Tienda/Alquimia/Sphere/`Common`(ANIMA) REAL; se reutiliza `SinDryRunPlanner`/`SinPlanValidator`/`SinAeonDiffPlanner` + `AiScript_File.AppendGuardedAction`/`SpliceAiFileIntoMonsterGrow`/`AiScript_Diff`/`AiValidator` (el ida y vuelta ya probado 345/345 por `--aiasm-rt0`). Construya 0 errores; `--sin-sandbox-rt0` + `--sin-aeon-preview-rt0` (Puerta 4) + `--sin-validate-rt0` (Puerta 3) + `--sin-dryrun-rt0` (Puerta 2) + `--aicmdmeta-rt0` + `--spiraatlas-rt0` + `--aiasm-rt0` todos PASS. Documentos: `docs/ai/SIN_PENANCE_BACKUP_APPLY_SANDBOX_RESULT_2026-06-10.md` + `docs/ai/HANDOFF_PENANCE_SIN_RT2_PILOT_NEXT_2026-06-10.md`.
Leer notas