Actualización 2.61
9/6/2026
v2.61.0BETA
Seymour
Menú nativo PASO 3: nativo-lista fuente de fila obtenido mediante ingeniería inversa + `list-read` (sonda) + lectura de selección en vivo
- Continuando con el carril del menú nativo en el juego (Yojimbo→), paso-3 espacio #1 ("de dónde vienen las filas de la lista nativa de?") se cierra a través de IDA: la lista ENTRADA (
FFX_Menu_List_UpdateInput 0x8B4460) es 100% genérica: matemática de campo pura sobre el objeto de 152 bytes (+40estado,+48recuento,+50superior,+52destino,+58página,+66espacios,+69resultado,+70desplazamiento,+72seleccionado,+28validador), no toca no GLOBAL y es reutilizado por 10 constructores distintos, pero cada sorteo nativo es elemento-shaped: la lista de escena3 (FFX_Menu_CreateScene3ScrollableList 0x8B4FB0→ dibujar0x8B4A00→ fila0x8B4B20) lee filas deunk_159EC30[64*i](estructuras de 64 bytes) +byte_1866250[](tipo), con el nombre del elemento resuelto por0x86C3C0(id→table)y una etiqueta directa opcional enrowPtr+32(tipo 1); Carga la escena 3/33/34 y depende de Personalizar globales. No hay sorteo de "gratuito-texto lista" en el binario, por lo que una lista nativa con texto NUESTRO (la arena/Aurora Photo-Modo shell) requiere una devolución de llamada de sorteo DLL (paso 5, el camino previsto en tick-BIBLIA §4), con la receta hecho a mano documentada (entrada genérica0x8B4460+ un sorteo DLL usandosub_8F5F70ventana /sub_9016B0cadena /sub_8C0640cursor, leyendo+69/+72). Enviado a través de la sonda HOY: nuevo verboffxprobectl list-read [handleHex](LEER-solo) que escanea el menú-object POOL (g_FFX_MenuObjPool 0x18408C0, 32 espacios × 152B): busca CUALQUIER lista nativa/ventana emergente activa y la identifica por sus devoluciones de llamada, además del acceso directo GLOBAL "lista ACTUAL" (dword_1866214/186A5DC/23CC120). ✅ RT2 PASS (en vivo, 2026-06-09): con el juego en el menú Personalizar equipo, el escaneo del grupo captó la lista navegada (espacio[3]@0x017A0A88,input=0x8D57E0, una fina envoltura del genérico0x8B4460) y+72/SELECTEDrastrearon el cursor en tiempo REAL (35→42) mientras el operador lo movía → paso-3 "leer la selección de una lista navegable nativa" PROBADO sin escribir nada. (Bonificación: el+62 = group 0x101del objeto reiniciado coincide conFFX_MenuObj_Reset(IDA): compensaciones confirmadas en la memoria). sin cámara RAM / Aurora /dllmain.cpp/ guardar tocado; IDA de solo lectura (_claude_idacopia, rename-queue en el documento).ffxprobectlerrores de compilación 0. Paso 5 (plano): paste-ready esqueleto del shell nativo enRuntimeTools/NativeMenuShell/NativeMenuShell.h(+README) — objeto hand-tirada + dibujar devolución de llamada (ventana+filas+cursor) + FFX codificador de fuentes + puente desacoplado a las acciones del Modo Foto de Aurora; ABI/compensaciones confirmadas (IDA verificar el flujo de trabajo) y revisadas por el adversario (2 lentes FFX-vs-IDA + C++ → sin bloqueo de fallas/compilación); x86 guardia + anti-OOB abrazadera + cargar-bearing invariantes anotadas; sin cable, no tocadllmain.cpp. Paso 5.1 (plano de cableado, NO aplicado): plan + borrador de parche (docs/ai/HANDOFF_BAHAMUT_NATIVE_MENU_WIRE_BLUEPRINT_2026-06-09.md+docs/patches/BAHAMUT_NATIVE_MENU_WIRE_DRAFT_2026-06-09.patch) cableando la carcasaffx-hooks.dllmediante un desvío en el menú bombaFFX_Menu_PerFramePump 0x8A9C50(int __cdecl(uint), IDA-verificado, main-thread) — DESACTIVADO de forma predeterminada (FFXHOOKS_ENABLE_NATIVE_MENU+ F7 tecla de acceso rápido), solo puente llama aPhotoMode::*; revisado adversamente (2 lentes) sin bloqueador (el revisor de compilación lo aplicó a un árbol borrador,git apply --recount --checksalir 0);dllmain.cppNO tocado/registrado. Doc:docs/reverse/FFX_NATIVE_MENU_LIST_ROW_SOURCE_2026-06-09.md
v2.60.2
v2.61.1BETA
Seymour
Ranura Atlas Equipo Tienda valor-protector (`proved-candidate`) + elemento-tienda sinceramente `blocked`
- Segundo pase del Tienda scout (
HANDOFF_ATLAS_RIKKU_SHOP_SLOT_VALUE_INDEXER): desbloquea el MISMO valor-protector para Comprar ese tesoro ya probado. Verificado por un flujo de trabajo de 8-agente (5 forense + 2 adversario + 1 síntesis): el del editor ranuraRawValuees el en-disk sin formato little-endian ushort (ShopTable_File≡ReadBaselineSlotValue), ygear_shop_slots.csv'sslot_value_hex(445/445 poblado, el índiceshop_arms.bin) es la misma palabra — por lo que la guardia es un mismo-space número entero comparar con no desactivado-por-uno (el catálogo esMinIndex=0, índice 0 = reservado NULL entrada, primer engranaje vendible = índice 1 =0x01). Nuevo accesorio de solo lecturaSpiraDataAtlasCatalog.TryGetShopGearSlot(bank, slot, currentRawValue)+ perezoso_shopGearSlotValues(devwork/solamente, sin respaldo compilado, como el nodo Sphere Grid detalle): resuelveatlas:gear:gear-shop-0x{bank}-slot-{n}solo mientras que el valor ACTUAL de la ranura' aún es igual al corpus ( y ≠ 0) → editar la ranura oculta la insignia (no obsoleto). La puerta--spiraatlas-rt0ganó 5 afirmaciones duraderas (búsqueda positiva Tidus/valor 1, valor-protector discordancia 999 oculta, ranura vacía sin formato 0, banco-sin-corpus, borde0x2E/427), todos PASS. Objeto-tienda =blocked: el corpus no lleva el valor bruto (item_shop_slots.csv.slot_value_hex100% vacío —ItemShopDataObject.toString()imprime solo el nombre); una cadena-protector NO es fake-seguro (Poción/Cola de fénix/Antídoto x47 → obsoleto; marcadores de posición + US-vs-JP → falsos negativos). Desbloquear = 1-parche del analizador de línea + re-ejecutar (tarea de corpus, fuera de este código). Nivel honesto:proved read-only candidate (parser-corpus + reader-semantics + RT0), nuncaruntime/byte-grounded(noarms_shop.binse volcó hexadecimalmente aquí). No UI, escritor, SIN, tiempo de ejecución, oCommoninsignia-cambios de motor (ANIMA). Errores de compilación 0 / 361 advertencias;--spiraatlas-rt0+--aicmdmeta-rt0PASS. Doc:docs/ai/ATLAS_RIKKU_SHOP_SLOT_VALUE_INDEXER_RESULT_2026-06-09.md
v2.61.0
v2.61.2BETA
Seymour
Insignia de evidencia de Atlas en Tienda Explorador (solo equipo, valor protegido)
- UI de solo lectura conectando el descriptor de acceso
TryGetShopGearSlot(probado env2.61.1) enShopExplorer: cada ranura de tienda de equipo muestra<common:AtlasEvidenceBadgeStrip>con el origen/insignias/"donde aparece" de la recompensa de equipo de esa ranura: solo mientras elRawValueACTUAL de la ranura aún coincida con el corpus.ShopEditableSlotRow.Evidence(init) se calcula enFrom():source.Kind == Gear && TryGetShopGearSlot(entry.Index, slot.SlotIndex, slot.RawValue). Dado que la fila se reconstruye en CADA mutación (ComboBox/Establecer vacío/Deshacer/Descartar/Guardar/Actualizar →RebuildSelectedSlots), al editar la ranura se vuelve a calcular la evidencia y oculta la tira (sin insignia obsoleta). Objeto-tienda nunca recibe una insignia (Kind == Gearguardia + doble guardia: el artículo no tiene entrada en el corpus); una ranura vacía (sin formato 0) provoca un cortocircuito. Verificado mediante un flujo de trabajo adversario de 3 lentes (ciclo de vida exhaustivo/tienda de artículos+enlace/honestidad) → todosound, 0 defectos. Reutiliza la infraestructuraCommonde ANIMA (motor intacto); sin nuevo escritor, sin nuevo analizador, sin SIN/runtime/Aurora/native-menu. Nivelparser-corpus+RT0+read-only, nunca tiempo de ejecuciónproved. Construya 0 errores/361 advertencias;--spiraatlas-rt0+--aicmdmeta-rt0PASS (sin puerta--shop*enProgram.cs). Documento:docs/ai/ATLAS_RIKKU_SHOP_GEAR_BADGE_UI_RESULT_2026-06-09.md
v2.61.1
v2.61.3BETA
Seymour
Proveedor de Atlas: normalizado `BlitzballPrizeRef` (de solo lectura) reemplaza el raspado sin procesar de 76 líneas
- El
SpiraDataAtlasCatalogLa sección de premios ya no raspa elbltz0200/0201sin procesar; ahora lee el conjunto de datos normalizado de WAKKA (work/step0_blitzball_prize_ref_2026-06-09): 164 premio-índice filas (101 tesoroproved-candidatea través deprize+220 -> takara 220..320 -> reward, cerrado por 3 fuentes fuera de línea — Fahrenheitblitz_prize.cs+bltz0201 obtainTreasure+bltz0200/0201 Treasure-Label— sobre RT0-probado takara; 60 tecnologíapartial; 3 turbometadata-only) + 64blockedscript-sites (los campos de registro por-evento premio es una variable de tiempo de ejecución/guardado). SALVAGUARDA reescrito: reglaproved-candidatefuera de línea, el concreto por-liga/premio del torneoblocked, nunca RT2, nunca un escritor. La puerta--spiraatlas-rt0pasó de14739a14891detalles (BlitzballPrizeRef 76 -> 228) y ganó datos-grounded afirma (tesoro 101 / tecnología 60 / turbo 3 / sitios 64; premio 0 - takara 220 Ultrapoción; premio 100 - takara 320 Cola de fénix; tesoroproved-candidate-not-RT2; sobremarchametadata-only; sitioblocked). Parche verificado por una revisión adversaria de 4 agentes antes de su aplicación. No UI, sin escritor, no SIN/tiempo de ejecución; no toca Tienda/Tesoro/Alquimia (RIKKU), elCommonMotor de insignias (ANIMA), o Cableado de insignia Aurora/nativo-menú. Construya 0 errores/361 advertencias;--spiraatlas-rt0+--aicmdmeta-rt0PASS. Doc:docs/ai/ATLAS_WAKKA_BLITZBALL_PROVIDER_INTEGRATION_RESULT_2026-06-09.md
v2.61.2
v2.61.4BETA
Seymour
Menú nativo Escudo CONECTADO a `ffx-hooks.dll` (paso 5 aplicado, APAGADO de forma predeterminada)
- El paso 5.1 parche (revisado por el adversario, sin bloqueador) ahora se aplica a
dllmain.cpp(parche mínimo: SOLOdllmain.cpp, +166 líneas, 0 eliminaciones): conectaNativeMenuShell.h(menú nativo con NUESTRO texto) al puente de Aurora (PhotoModeActions.h) a través de un desvío en la bomba de menúFFX_Menu_PerFramePump 0x8A9C50(int __cdecl(uint), verificado por IDA, HILO PRINCIPAL). DESACTIVADO por defecto:FFXHOOKS_ENABLE_NATIVE_MENU=1arma el desvío; el menú solo se abre con la tecla de acceso rápido F7. El contrato de Aurora fue ACEPTADO y seguido:PhotoMode::Tick()= Opción A (parte superior deAuroraD3DRender, antes del retorno anticipado, conFFXHOOKS_ENABLE_AURORA_OVERLAY=1, el trozo propiedad de AURORA); CONGELAR único propietariog_pm.frozen;NtSuspendProcessPROHIBIDO;PhotoMode::g_base=g_baseen inicio. El cable solo llama aPhotoMode::*; no escribe la cámara RAM (0xD378A0) o el actor RAM. COMPILAR-WithPolyHook -ReleasePASS (dllmain+MusicHook+ElementHook→ffx-hooks.dll). El paso 6A/NPC se mantuvo FUERA de este parche. RT2-pendiente: F7 dentro de un menú/campo → debería aparecer el shell nativo "MODO FOTO" (guardado descartable). Documento:docs/ai/HANDOFF_BAHAMUT_NATIVE_MENU_WIRE_BLUEPRINT_2026-06-09.md
v2.61.3
v2.61.5BETA
Seymour
insignia de evidencia de Atlas en la tienda Objeto (valor protegido): cierra el par equipo+artículo
- Clona el valor guardado de la tienda de equipo probado en
v2.61.2a la tienda de artículos, ahora quev2.61.1+ el desbloqueo del corpus le dio al artículo un valor bruto 1:1 basado en bytes. Nuevo descriptor de acceso de solo lecturaSpiraDataAtlasCatalog.TryGetShopItemSlot(bank, slot, currentRawValue)+ Diferido_shopItemSlotValues(leeitem_shop_slots.csv, solo devwork/, sin respaldo compilado): un espejo exacto deTryGetShopGearSlot: resuelveatlas:item-shop:item-shop-0x{bank}-slot-{n}solo mientras que elRawValueACTUAL de la ranura aún coincide con el corpus (el LE en disco ushort = Índice del juego de elementos0x2xxx, el espacio del editor) y es ≠ 0.ShopExplorer_DataModelahora calculaEvidencepor tipo de tienda (interruptor Equipo/Objeto); el<common:AtlasEvidenceBadgeStrip>en la tarjeta de ranura ya se compartió (v2.61.2), por lo que las ranuras de artículos ahora muestran la insignia sin ningún cambio en XAML; editar la ranura reconstruye la fila y oculta la tira (no obsoleta). La puerta--spiraatlas-rt0obtuvo 4 afirmaciones de elementos (la búsqueda0x2000/Poción, no coincide con las ocultaciones de0x9999, 0 sin formato vacío, ranura 3 sin corpus), todo PASS (el equipo aún es PASS).work/step0_consolidated_v5/item_shop_slots.csvregenerado conslot_value_hex(404/404, solo para desarrolladores, no confirmado). Sólo lectura: sin escritor, sin cambios en Tesoro/Alquimia/Common/Aurora/nativo-menú/tiempo de ejecución; El motorCommonde ANIMA solo consumió. Construya 0 errores/361 advertencias;--spiraatlas-rt0+--aicmdmeta-rt0PASS. Documento:docs/ai/ATLAS_RIKKU_SHOP_ITEM_BADGE_UI_RESULT_2026-06-09.md
v2.61.4