Actualización 2.198
1/8/2026
v2.198.0.0BETAMINOR
Seymour31 jul 2026
P3-L2: `GameEnvironmentProbe` (verificación del estado del entorno de ejecución)
Core/GameEnvironmentProbe.cs(nuevo, 10 pruebas): detector de versión/verificación de estado del entorno de ejecución: cumple con el contrato P3 (mensaje L410-416: detector · instalación/config/permiso/contrato de ruta · respaldo · error procesable sin seguimiento de pila sin formato · matriz de compatibilidad). Detecta:FFX.exe(versión FileVersionInfo + región a través dedata\jppc/intl/us/eu),modules\ffx-probe.dll+modules\FfxHooksDll.dll, indicadores activos (config\*.flagy raíz), sonda activa a través deFfxProbe_Service(MMFLocal\FFXProbeBlock_v1— IsAttached/IsHooked/Heartbeat, solo lectura, nada armado). Descubrimiento de raíz del juego: entornoFFX_GAME_ROOT→ Registro de Steam →libraryfolders.vdf(análisis sin escape, comprobable) → candidatos comunes. Resultado escritoGameEnvironmentReport(Estado correcto/Advertencia/Error + Código/Mensaje/EnvironmentIssue/ActionableMessage): UI muestra el estado escrito, nunca un seguimiento de pila sin formato.- Línea base: 233/233 PASS (223 + 10 nuevos). ### REVISIÓN ### REVISIÓN
v2.197.1.1
v2.198.1.0BETAPATCH
Seymour31 jul 2026
P3-L3: refuerzo de la plataforma de operaciones (cancelación/reversión/diario/bloqueo/redacción) + conjunto de resiliencia (12 pruebas)
Core/OperationExecutorV2.cs(endurecimiento):ExecuteAsync(plan, CancellationToken)con puntos de control (antes de la etapa, entre operaciones, antes de la promoción, durante la promoción) y propagación aStageAsync; reversión automática al promocionar (la falla/cancelación restaura los resultados ya promocionados de las copias de seguridad o elimina los resultados creados por esta promoción); journal.json en BackupRoot (indica promoción/éxito/cancelado/fallido: contrato de recuperación, el mejor esfuerzo nunca falla la operación); bloqueo estático promoción de serialización (contrato de concurrencia: 2 operaciones en la misma salida nunca se intercalan); redacción (LlmRedactor) en ErrorMessage/RecoveryInstructions/diario (el secreto nunca aparece en las superficies de falla).FFXProjectEditor.Tests/Core/OperationResilienceTests.cs(nuevo, 12 pruebas): cancelar antes de la etapa/durante la etapa (el adaptador observa el token) → no hay nada escrito; falla de promoción inyectada → reversión de la salida ya promocionada (hash original restaurado); diario fallido/éxito + copia de seguridad .bak con bytes originales; concurrencia (2 ejecuciones paralelas mismo resultado → resultado intacto, un ganador completo); secreto redactado de mensajes de error; plan vacío → "sin operaciones"; diferencia prohibida (EditSession.Build rechaza el campo fuera de la lista de permitidos); OperationPlan JSON ida y vuelta; recibo de falla consistente (FilesWritten=0).- Línea base: 245/245 PASS (233 + 12 nuevos). ### MENOR ### MENOR
v2.198.0.0
v2.198.2.0BETAPATCH
Seymour31 jul 2026
refuerzo de FfxSaveSphereGrid (protección de límites + verdad nativa) + importación de la tabla de símbolos de Ghidra/Fahrenheit en la base de datos canónica (8.281 renombrados)
FfxLib/Save/FfxSaveSphereGrid.cs(corrección):FfxSaveSphereGridNodeSnapshot.Read/Write/ReadActivation/WriteActivationahora protegeNodeIndex(0..859 en el modelo FFXED heredado) conArgumentOutOfRangeExceptionprocesable: corrige una escritura OOB latente en el búfer de guardado; las nuevas constantesNativeTableBase(=8684) yNativeMaxNodeIndex(=1279) exponen la capacidad de guardado nativa; Los documentos XML aclaran el sesgo de +64 frente aFfxSaveSphereGridRuntimeTabley que 860 NO es el límite del motor.FfxLib/Save/FfxSaveSphereGridRuntimeTable.cs(doc): confirmado de forma cruzada por la tabla de símbolos Fahrenheit/Ghidra:eiAbmDataInit(SaveSphereGrid*)@ 0xA53DE0 yMsGetSaveAbilityMap() → SaveSphereGrid*@ 0x785000 demuestran que el bloque de estado es un tipo de motor REAL; Capacidad nativa 1280 nodos / 1280 enlaces / cursor.FfxLib/Save/FfxSaveBatchActions.cs(doc):ImportSphereGridRegiondocumentado como modelo heredado +64; ruta nativa señalada (extensión 8684..13579) para cuadrículas >860.- RE — Fahrenheit-crew/fahrenheit (Ghidra) symbol-tabla importar: 7,609 funciones + 672 globales renombrado en la base DB
ffxoficial.exe.i64(8,281 en total; fuentes USER_DEFINED 460 + IMPORTED 2,816 + filtrado ANALYSIS 7,570; nunca sobrescribe proyectoFFX_*nombres - 3774)conservados; los globales obtuvieron tipos primitivos; copia de seguridadbackups_ffxoficial\ffxoficial.exe.before_ghidra_renames_20260731_231338.i64. Propagado al complemento DBffxoficial_COPY.i64a través del ida-pro-mcp de trabajo del equipo RPC dentro del GUI (puerto 13338): 7,440 funciones + 490 globales aplicadas en el COPIA, 17 omitido (GUI nombres conservados), DB guardado; copia de seguridadffxoficial_COPY.before_ghidra_renames_20260731_233813.i64. Resultados:LpAbilityMapEnginestruct (0x12FC0; clusters[128]/nodos[1024]/enlaces[1024] : diseño completo en doc), funciones estáticas.databúfer0x16AD870(InitLpamng @ A572E0), 12 con a1024bucle mapeado (RenderPathNodes A50290, eiAbmCalc A53570, eiAbmParaGet A54860, ClearNodeTransforms A57120, ReadAndProcessInputState A57520, BuildLinkBatchSegment A57710, UpdatePlacementSlotTransform A58080, DialogDispatch A583E0, InitPlacementGrid A5B230, +3), renderizado 861 (681DB0/7F4900), nombres originaleseiAbm*/+AbmapState_*/abmap_*,SaveSphereGridtipo confirmado. Conclusión clave: el guardado nativo ya admite 1280/1280; el cuello de botella que excede 1024 es la estructura de tiempo de ejecución estática + bucles + renderizado, no el guardado. Documento:docs/reverse/FFX_GHIDRA_FAHRENHEIT_SYMBOL_IMPORT_2026-07-31.md; scripts/reports enwork/_fahrenheit_probe/. - Estado:
Needs Testing— construcción ecológica; Los nuevos guardias no tienen consumidores fuera de rango (no se utilizan códigos más allá de los documentos). ### PARCHE
v2.198.1.0
v2.198.2.1BETAREVISION
Seymour31 jul 2026
fahrenheit-excel: nombres de campos reales del kernel aplicados al editor (KeyItem/Importante + Tesoro/takara) + contenedor "Excel" documentado
- Fuente: segundo repositorio fahrenheit (
fahrenheit-excel) con 8 estructuras nuevas + reescritura deexcel.cs(contenedor de Excel:ExcelProlog0x8 +ExcelHeader0xC +ExcelTextOffset0x4 — coincide con nuestroCustomization_File.ReadHeader, HeaderLength 0x14). FfxLib/Common/KeyItem_File.cs+ KeyItemEditor (renombrar):PrimerByte10/RawByte11/RawByte12/OrderingByte13→ItemType/ItemValue/Icon/Number(nombres reales de Ghidra; 0x10 = "¿es Al Bhed Primer?", 0x13 = número de cartilla) — XAML, resúmenes y RT0 actualizado.FfxLib/Treasure/Treasure_File.cs+ TreasureEditor + BukiGetTreasureCatalog + TaskRewardGameFileLoader + TreasureRt0 (cambiar nombre):Treasure_Entry.Type→ItemId(confirma fahrenheitTreasure{item_id u16}); VMTreasureRow.Type/TypeHex/TypeDecimal→ItemId/ItemIdHex/ItemIdDecimal; Enlaces XAML actualizados.- Confirmaciones:
MixRecipe= ushort[0x70] coincide conMixTable_File(EntryLength 0xE0);SphereGridNodeType.amount@0x14confirmaIncreaseAmount;SphereGridNodeTypeInfo→SphereGridNodeTypeUiInfo(la matriz lpamngnode_type_infoses solo para UI). - Documentado (futuros escritores):
Sphere(ACTIVADOR/MODIFICADOR + máscara de bits de 11 estadísticas + rango NORMAL/ILIMITADO),Rate,WeaponName,HelpText/NameHelpText,Treasure. - Línea de base: 245/245 PASS · Errores de compilación 0. Documento:
docs/reverse/FFX_GHIDRA_FAHRENHEIT_SYMBOL_IMPORT_2026-07-31.md§fahrenheit-excel. ### PARCHE
v2.198.2.0
v2.198.3.0BETAPATCH
Seymour31 jul 2026
P3-L4: lanzamiento — `scripts/release_manifest.ps1` (manifiesto verificable) + documento de proceso
scripts/release_manifest.ps1(nuevo, operativo): manifiesto de lanzamiento: versión leída de<Version>en el csproj (fuente de la verdad), SHA-256 de cada artefacto de compilación.exe/.dll(+ archivos auxiliares.sha256a través de .NET SHA256: compatible con la PS de esta máquina), primera entrada del registro de cambios (verificación cruzada),gitCommit/gitDirty(versión de árbol de trabajo sucio = alerta) ysigning: "not-signed"(la firma nunca se declaró realizada sin ejecutarse). Validado: 103 artefactos de la versión de lanzamiento con hashes correctos.docs/ai/P3_RELEASE_2026-07-31.md(nuevo): Flujo de lanzamiento de 7 pasos (compilación → pruebas → offline_ci → implementar todos los objetivos → manifiesto → verificación de hash → firma); Auditoría.gitignore(cobertura ya presente: bin/obj/work/.vs, no se necesitan cambios; no hay limpieza destructiva en un árbol de trabajo con trabajo externo); firma documentada COMO PLAN (signtool/Authenticode: no ejecutado, no se importa ningún certificado).- No hay cambios en el comportamiento del editor: línea base 245/245 PASS intacta. ### PARCHE
v2.198.3.3
v2.198.3.1BETAREVISION
Seymour31 jul 2026
P3-L5: contrato corto Gemini (UI ↔ Núcleo)
docs/ai/P3_GEMINI_CONTRACT_2026-07-31.md(contrato basado en tipos reales): propiedad del archivo (Núcleo = backend / Módulos+AXAML = UI); DTO públicos (CapabilityDescriptor, OperationPlanPreview/ChangeSetSummary, OperationProgress, CommitReceipt, ValidationResult, OperationResult, FilePreviewSummary/OperationPreview, GameEnvironmentReport); comandos (EditSession fluido, OperationExecutorV2, OperationPreview, ReceiptBuilder, GameEnvironmentProbe); estados escritos cargando/vacío/no disponible/advertencia/bloqueado/fallo con orígenes reales; Códigos ValidationIssue; las 10 identificaciones de capacidad REAL; simulado/provisional (descubrimiento heurístico de Steam, LAB FfxProbe_Service, suscripción voluntaria LlmHttpAdapter, OperationProgress sin cableado completo); reglas estrictas (UI nunca crea un escritor fuera de OperationPlan; mensajes ya redactados; AXAML/temas solo con coordinación). Solo lectura: línea base 245/245 PASS intacta. ### PARCHE
v2.198.3.0
v2.198.3.2BETAREVISION
Seymour31 jul 2026
P3-L6: protocolo RT2 por familia (reproducible, registrado)
docs/ai/P3_RT2_PROTOCOL_2026-07-31.md(protocolo; ejecución = tiempo de ejecución humano): RT0/RT1/RT2 distintos con puertas de salida (RT0 = CLI puertas de identidad de bytes; RT2 = registro reproducible antes/después + guardado desechable); requisitos previos de la sesión (sonda implementada,ffxprobectl mon, guardado desechable, editor cerrado); Piloto familiar de rotación de fase en 7 pasos (aplicar receta → hash H2 → implementar con copia de seguridad básica H1 → batalla → 5 turnos observados → lectura de contravar de solo lectura → restaurar H1 → promoción solo con registro); lista de verificación por familia (sonda PROBADA/escenario Forzar Batalla 1/Rotación de fases pendiente/ganchos parciales/sondas de solo lectura); reglas de promoción (nunca RT0→producción sin RT2; nunca el guardado principal; nunca CreateRemoteThread); Se hace referencia a la contradicción de Forzar Batalla (mecanismo PROBADO / producto LAB). Solo lectura: línea base 245/245 PASS intacta. ### REVISIÓN ### REVISIÓN
v2.198.3.1
v2.198.3.3BETAREVISION
Seymour1 ago 2026
Aviso Gemini actualizado: backend P3 completo reflejado (245/245, cancelación/retroceso/diario/bloqueo del ejecutor, ID de adaptador reales, contrato UI↔Núcleo obligatorio)
docs/ai/PROMPT_GEMINI_UI_UX_FINAL_2026-08-01.md(actualizado): encabezado con versión2.198.3.2+ 245/245 PASS; la lectura obligatoria ahora incluyeP3_GEMINI_CONTRACT_2026-07-31.md(elemento 5: el contrato oficial UI↔Núcleo); Tabla principal conOperationExecutorV2actualizado (CancellationToken 4 puntos de control, reversión automática, journal.json, PromoteGate, mensajes redactados) + nuevos tiposOperationPreview/FilePreviewSummary(diferenciación de 3 capas); tabla de adaptadores arreglada (10 registrados, eran "8" con 10 filas, y REAL ID:ability-commandyatel-recipe-phase-rotation, que eran incorrectos);GameEnvironmentProbecon descubrimiento (env/registry/libraryfolders.vdf); nuevo bloque "Estado de backend" (245/245, ejecutor confiable, mensajes ya redactados, verificación de estado sin excepciones, vista previa de 3 capas, manifiesto de lanzamiento, protocolo RT2, cambios en otros carriles: guardia de límites FfxSaveSphereGrid, cambios de nombre en grados Fahrenheit, FALLAR anotado conocidomcyt00_21); Los límites ahora incluyen confirmaciones selectivas (carrera de carril, nuncagit add -A). sin cambios de comportamiento: línea de base 245/245 PASS intacta. ### REVISIÓN ### REVISIÓN
v2.198.3.2
v2.198.3.4BETAPATCH
Seymour1 ago 2026
SphereGrid sphere.bin adaptado a la estructura `Sphere` de fahrenheit (nombres reales + enumeraciones + corrección del validador probada con el corpus)
FfxLib/SphereGrid/SphereGrid_File.cs(+Write.cs) (cambiar nombre+enumeraciones):SphereGridSphereTypeEntryActionValue/ActivationBitfield/RangeValue/AlwaysZero→Behavior/Activates/Range/Reserved0x0E(nombres Ghidra/fahrenheitSphere); nuevas enumeracionesSphereBehavior(NASHI/Activador/Modificador),SphereTargets[Flags] (11 estadísticas,All=0x07FF— orden de bits no probado, valores básicos documentados),SphereRange(NASHI/Normal/Unlimited=0x20); accesorios derivadosBehaviorKind/ActivatesTargets/RangeKind;ActionLabelfijo ("Mutador" → "Modificador").Core/Writers/SphereGridAdapter.cs(arreglo+endurecimiento): claves renombradas (Comportamiento/Activaciones/Rango/Reservado0x0E);SpecialRolevalidador fijo 0x0F→0x1F (el corpus básico usa roles especiales hasta 24 - sphere.bin ranuras 14..29; el antiguo validador rechazaba las cuadrículas legítimas);Behaviorvalidado 0..2 (el corpus prueba solo 0..2); los mensajes citan las enumeraciones.SphereGridExplorer(cambiar nombre): VMSphereGridSphereTypeEditorRow+ estado + ayudantes + XAML actualizado; Se ha cambiado el nombre deSetSelectedOptions/diferencias/línea base.- Prueba de corpus (jppc
battle\kernel\sphere.bin, 50 entradas, elem 0x10): ACTIVADOR=1 (Habilidad/Poder/Mente doble/Velocidad/Buena suerte + Clave L1–L4 especial 8..11 + Amigo 0x07FF), MODIFICADOR=2 (Regreso=1, Teletransporte=2, Borrar=3, Maestro=4), rango 0x01 NORMAL / 0x20 ILIMITADO; los índices coinciden conSphereGridNodeSphereRequirementKind(Ability=0..Buena suerte=4). Documento:docs/reverse/FFX_GHIDRA_FAHRENHEIT_SYMBOL_IMPORT_2026-07-31.md§sphere.bin. - Línea de base: 245/245 PASS · Errores de compilación 0. Estado:
validated(cambios de nombre de bytes idempotentes + RT0/RoundTrip intactos). ### REVISIÓN
v2.198.3.3
v2.198.4.0BETAPATCH
Seymour1 ago 2026
ruta de prueba RT2 limpia no-hook para True New Node + corrección de la teoría del bloqueo + confirmación de la comunidad externa (1024/1024/128)
SphereGridDeployPolicy.cs(REVISIÓN): el hallazgo "861/882 sin gancho se bloquea al salir" provino de ejecuciones RT2 de la pila de ganchos v5 retirada (manifiesto/archivo auxiliar/SEH) - nunca de una implementación limpia. Con el RE ACTUAL (motor impulsado por cabezal;LpAbilityMapEngineestático 1024/1024/128; guardado nativo 1280/1280), los recuentos ≤ 1024 necesitan sin gancho. Techo REAL sospechoso: renderizado (681DB0861×48 buffers + puerta7F4900n861 >= 861). La nueva anulación de suscripción voluntariabuilder.AllowRuntimeTestDeploy(desactivada predeterminada) desbloquea SaveToProject/SaveSquareToProject con recuentos modificados para la prueba de limpieza.SphereGrid_File.Builder.cs: PropiedadAllowRuntimeTestDeploy+ docs.SphereGridCanvas_DataModel.cs+SphereGridCanvas_Control.axaml: Casilla de verificación de la barra de herramientas "Permitir implementación de prueba RT2 (sin gancho)";RefreshTopologySafetySummarymuestra el estado de la prueba (🧪 publicado con advertencia de guardado desechable / 🚫 bloqueado con la explicación corregida).- Confirmación externa: EvelynTSMG (fahrenheit-crew) confirmó el límite 1024 nodos/1024 enlaces/128 clústeres: coincidencia exacta con el
LpAbilityMapEngineque probamos (matrices en el búfer 0x808/0xA808/0x8,.data0x16AD870). Pruebas de Dragoon (comunidad) para agregar/empatar/expandir en su editor. - Protocolo de prueba limpio RT2 documentado (doc RE §confirmación externa): Estándar → Modo cuadrado → +1 nodo/+1 enlace → casilla de verificación → Guardar → implementar → guardar desechable → abrir/mover/salir → sin bloqueo = se superó el techo (repetir 900/1024); fallo = renderizar es el techo (parche de 2 bytes, sin enlace).
- Línea de base: 245/245 PASS · Errores de compilación 0. Estado:
Needs Testing(RT2 humano). ### PARCHE
v2.198.3.4
v2.198.4.1BETAPATCH
Seymour1 ago 2026
corrección semántica de los códigos de operación de comparación ATEL (0x0A/0x0B/0x0E/0x0F) — probado mediante descompilación del intérprete
- Descubrimiento (fuente: noclip.website
src/FinalFantasyX/script.ts— enumeración de código de operación de script de campo): la asignación de códec (GT=0x0A, LT=0x0B, GE=0x0E, LE=0x0F) se invirtió frente a noclip (LT=0x0A, GT=0x0B...). Probado mediante descompilación deFFX_Atel_InterpretWorkerOpcodes@0x864180+FFX_FieldVM_PopOperand@0x86DE90(pop = superior): con pila[A(base), B(top)], 0x0B pruebaA < B, 0x0A pruebaA <= B(0x0E/0x0F = variantes flotantes). No existe un "mayor que" directo: el compilador expresaA > Bcomo[B, A] + 0x0B(B < A). La puerta RT0 (ida y vuelta estructural) no puede detectar errores semánticos; solo la descompilación los expone. - Solución:
AiVarConditionBuilder(GreaterThan/GreaterOrEqual ahora emiten orden intercambiada[N, var]+ LT/LE; LessOrEqual fijo 0x0F→0x0A),AiAutomation(campo/estado/Overdrive guarda:[threshold, field]+ LT; constantes GT/GE eliminadas),AiPhaseRotationRecipe(protección de fase final:[FinalLimit, counter]+ LT),AiBibleCatalog(tabla 0x0A–0x0F corregida con semántica REAL)..i64comentó en los casos (0x8646E4/0x864759) — REGLA DE ORO. Doc:docs/reverse/FFX_ATEL_COMPARISON_OPCODE_SEMANTICS_2026-08-01.md(3 fuentes: intérprete = verdad, noclip = dirección, fahrenheit = denominación). - Validación:
--phase-rotation-rt0319/319 PASS · AI + pruebas de plataforma 64/64 PASS · línea base 254 (1 falla es una nueva prueba de carril SphereGrid en progreso, fuera de alcance). ### PARCHE
v2.198.4.0
v2.198.4.2BETAREVISION
Lulu1 ago 2026
C3-1: catálogo de claves de recursos de magic DLL VALIDADO — se refuta la premisa del borrador (0/149 claves indexan la tabla raíz; semántica real = tabla global del host, poblada en tiempo de ejecución)
v2.198.4.1