アップデート 2.61
2026/6/9
v2.61.0BETA
Seymour
ネイティブメニューSTEP 3:native-list行のソースreverse-engineered+`list-read`(プローブ)+ライブ選択読み取り
- ネイティブin-gameメニューのレーン(ヨウジンボウ→)を継続し、step-3のギャップ#1(「ネイティブリストの行はどこから来るのか?」)をIDAで解消した。そのリスト INPUT (
FFX_Menu_List_UpdateInput 0x8B4460)は 100%汎用的 で、152バイトのオブジェクト上のフィールド計算だけで構成される(+40状態、+48カウント、+50トップ、+52ターゲット、+58ページ、+66スロット、+69結果、+70スクロール、+72選択、+28バリデーター)を扱い、 グローバルには触れず、 10個の異なるビルダー で再利用される。一方、 ネイティブの描画はすべてitem-shaped である。scene3のリスト(FFX_Menu_CreateScene3ScrollableList 0x8B4FB0→0x8B4A00描画 →0x8B4B20行)は、unk_159EC30[64*i](64バイト構造体)+byte_1866250[](種別)から行を読み取り、 アイテム名 を0x86C3C0(id→table)で解決し、種別1の場合はrowPtr+32にある直接ラベルも任意で使う。scene3/33/34を読み込み、Customizeのグローバルに依存する。バイナリには free-textリストの描画は ない。そのため、OURテキストを持つネイティブリスト(アリーナ/Aurora Photo-Modeシェル)には DLL描画コールバックが必要 となる(ステップ5、tick-bible §4で予見された経路)。そこでは hand-rolledレシピを文書化済み であり、汎用入力0x8B4460と、sub_8F5F70ウィンドウ/sub_9016B0文字列/sub_8C0640カーソルを使ってDLL描画を行い、+69/+72を読み取る。プローブTODAY経由で出荷した: 新しい動詞ffxprobectl list-read [handleHex](READ-only)は、 menu-object POOLをスキャンする (g_FFX_MenuObjPool 0x18408C0、32スロット×152B)。ANY個のアクティブなネイティブリスト/ポップアップを見つけ、コールバックで識別するほか、「現在のリスト」グローバルのショートカット(dword_1866214/186A5DC/23CC120)も備える。 ✅ RT2 PASS(ライブ、2026-06-09): ゲームが Customize equipment メニューにある状態で、プールスキャンは移動先のリスト(slot[3]@0x017A0A88、input=0x8D57E0、汎用0x8B4460の薄いラッパー)を捕捉した。+72/SELECTEDは、操作者がカーソルを動かす間、 リアルタイムでカーソルを追跡した(35→42) 。その結果、step-3「ネイティブのナビゲート可能なリストの選択を読み取る」 PROVENを書き込みなしで 実行できた。(補足:リセットオブジェクトの+62 = group 0x101はFFX_MenuObj_Reset(IDA)と一致し、メモリに対するオフセットを確認した。)カメラRAM/Aurora/dllmain.cpp/セーブには触れず、IDA read-only(_claude_idaのコピー、文書内のrename-queue)。ffxprobectlのビルドは0エラー。 ステップ5(ブループリント): paste-readyにおけるネイティブシェルのRuntimeTools/NativeMenuShell/NativeMenuShell.hスケルトン(+README)。オブジェクトhand-roll+描画コールバック(ウィンドウ+行+カーソル)+FFXフォントエンコーダー+Auroraのフォトモードアクションへの分離ブリッジを備える。ABI/オフセットはIDA検証ワークフローで確認済みで、 敵対的レビュー済み (2つのレンズFFX-vs-IDA+C++ → クラッシュ/コンパイルのブロッカーなし)。x86ガード+anti-OOBクランプ+load-bearing不変条件を注記した。 未接続で、dllmain.cppには触れない。 ステップ5.1(ワイヤリングのブループリント、NOT適用済み):docs/ai/HANDOFF_BAHAMUT_NATIVE_MENU_WIRE_BLUEPRINT_2026-06-09.md+docs/patches/BAHAMUT_NATIVE_MENU_WIRE_DRAFT_2026-06-09.patchの計画とパッチ下書きで、シェルをffx-hooks.dllに、メニューポンプFFX_Menu_PerFramePump 0x8A9C50(int __cdecl(uint)、IDA-verified、main-thread)への迂回を通じて接続する。デフォルトではOFF(FFXHOOKS_ENABLE_NATIVE_MENU+F7ホットキー)とし、ブリッジが呼び出すのはPhotoMode::*だけである。敵対的レビュー済み(2つのレンズ)でブロッカーなし(コンパイルレビュアーがスクラッチツリーに適用し、git apply --recount --checkexit 0);dllmain.cppNOT touched/committed. Doc:docs/reverse/FFX_NATIVE_MENU_LIST_ROW_SOURCE_2026-06-09.md
v2.60.2
v2.61.1BETA
Seymour
Atlasギアショップのスロットvalue-guard(`proved-candidate`)+item-shopを正直に`blocked`
- ショップ調査の第2段階(
HANDOFF_ATLAS_RIKKU_SHOP_SLOT_VALUE_INDEXER)として、Treasureですでに証明したSAME value-guardをショップでも解禁する。8エージェントのワークフロー(フォレンジック5+敵対的レビュー2+統合1)で検証した。エディターのスロットRawValueはrawのon-disk little-endian ushort(ShopTable_File≡ReadBaselineSlotValue)であり、gear_shop_slots.csvのslot_value_hex(445/445件が埋まり、shop_arms.binインデックス)も同じワードである。したがってガードはsame-space整数比較となり、off-by-oneはない(カタログはMinIndex=0、インデックス0は予約済みのNULLエントリ、最初に販売可能なギアはインデックス1=0x01)。新しいread-onlyアクセサーSpiraDataAtlasCatalog.TryGetShopGearSlot(bank, slot, currentRawValue)+遅延_shopGearSlotValues(開発用work/のみ、コンパイル済みフォールバックなし、Sphere Gridのnode detail): resolvesatlas:gear:gear-shop-0x{bank}-slot-{n}only while the slot's current value still equals the corpus (and ≠ 0) → editing the slot hides the badge (no stale). The--spiraatlas-rt0gate gained 5 durable asserts (positive lookup Tidus/value 1, value-guard mismatch 999 hides, empty slot raw 0, bank-without-corpus, edge0x2E/427), all PASS. Item-shop =blocked: the corpus does not carry the raw value (item_shop_slots.csv.slot_value_hex100% empty —ItemShopDataObject.toString()prints only the name); a string-guard is NOT fake-safe (Potion/Phoenix Down/Antidote x47 → stale; placeholders + US-vs-JP → false negatives). Unlock = 1-line parser patch + re-run (corpus task, outside this code). Honest tier:proved read-only candidate (parser-corpus + reader-semantics + RT0), neverruntime/byte-grounded(noarms_shop.binwas hexdumped here). No UI, writer, SIN, runtime, orCommonbadge-engine changes (ANIMA). Build 0 errors / 361 warnings;--spiraatlas-rt0+--aicmdmeta-rt0PASS. Doc:docs/ai/ATLAS_RIKKU_SHOP_SLOT_VALUE_INDEXER_RESULT_2026-06-09.md. — Jarvis-RIKKUと同様)
v2.61.0
v2.61.2BETA
Seymour
ショップエクスプローラー(gear-only、value-guarded)のAtlasエビデンスバッジ
- Read-only UIにより、
TryGetShopGearSlotアクセサー(v2.61.1で証明済み)をShopExplorerへ接続した。各 gear-shop スロットは、スロットのギア報酬について起源/バッジ/「ゲーム内での表示箇所」を含む<common:AtlasEvidenceBadgeStrip>を表示する。ただし、スロットの現在のRawValueがコーパスと一致している間 だけ である。ShopEditableSlotRow.Evidence(init)はFrom()で計算され、source.Kind == Gear && TryGetShopGearSlot(entry.Index, slot.SlotIndex, slot.RawValue)となる。EVERYの変更時に行が再構築されるため(ComboBox/Set Empty/Undo/Discard/Save/Refresh →RebuildSelectedSlots)、スロットを編集するとエビデンスを再計算し、 ストリップを隠す (古いバッジは残らない)。 Item-shopには決してバッジを付けない (Kind == Gearガード+double-guard:アイテムにコーパスエントリがない)。空スロット(raw 0)short-circuitsも同様である。3レンズの敵対的ワークフロー(ライフサイクル全網羅/item-shop+バインディング/正直さ)で検証し、すべてsound、欠陥0件だった。ANIMAのCommon基盤を再利用し(エンジンは変更なし)、新しいライター、新しいパーサー、SIN/ランタイム/Aurora/native-menuは追加しない。ティアはparser-corpus+RT0+read-onlyで、ランタイムprovedではない。ビルドは0エラー/警告361件。--spiraatlas-rt0+--aicmdmeta-rt0PASS(--shop*ゲートはProgram.csにない)。ドキュメント:docs/ai/ATLAS_RIKKU_SHOP_GEAR_BADGE_UI_RESULT_2026-06-09.md
v2.61.1
v2.61.3BETA
Seymour
Atlasプロバイダー:正規化された`BlitzballPrizeRef`(read-only)が76行のrawスクレイピングを置き換えた
SpiraDataAtlasCatalogの賞品セクションはrawのbltz0200/0201をスクレイピングしなくなり、WAKKAの正規化済みデータセット(work/step0_blitzball_prize_ref_2026-06-09)を読むようになった。164 prize-index行 で構成される(宝物proved-candidateがprize+220 -> takara 220..320 -> reward経由で101行、3つのオフラインソース――Fahrenheitblitz_prize.cs+bltz0201 obtainTreasure+bltz0200/0201 Treasure-Label――で完結し、RT0-proved takaraを対象とする。techpartialが60行、overdrivemetadata-onlyが3行)に加え、64blockedscript-sites (per-event賞品はランタイム/セーブ変数)。ガードレールを書き換え、proved-candidateルールをオフライン、具体的なper-league/トーナメント賞品blockedを明示し、RT2でもライターでもないとした。--spiraatlas-rt0ゲートは14739から14891詳細へ変更され(BlitzballPrizeRef 76 -> 228)、data-groundedアサートを追加した(宝物101/tech 60/overdrive 3/サイト64、prize 0 → takara 220 Hi-Potion、prize 100 → takara 320 フェニックスの尾、宝物proved-candidate-not-RT2、overdrivemetadata-only、siteblocked)。適用前に4エージェントの敵対的レビューでパッチを検証した。UIもライターもなく、SIN/ランタイムもない。Shop/Treasure/調合(RIKKU)、Commonバッジエンジン(ANIMA)、Aurora/native-menuには触れない。ビルドは0エラー/警告361件。--spiraatlas-rt0+--aicmdmeta-rt0PASS。ドキュメント:docs/ai/ATLAS_WAKKA_BLITZBALL_PROVIDER_INTEGRATION_RESULT_2026-06-09.md
v2.61.2
v2.61.4BETA
Seymour
ネイティブメニューシェル WIREDを`ffx-hooks.dll`へ(ステップ5適用、OFFがデフォルト)
- step-5.1パッチ(敵対的レビュー済み、ブロッカーなし)を
dllmain.cppへ 適用 した(最小パッチ:dllmain.cppONLY、166行追加、削除0)。NativeMenuShell.h(OURテキスト付きのネイティブメニュー)を、Auroraのブリッジ(PhotoModeActions.h)に、メニューポンプFFX_Menu_PerFramePump 0x8A9C50(int __cdecl(uint)、IDA-verified、MAIN THREAD)への迂回を通じて接続する。 OFFがデフォルト:FFXHOOKS_ENABLE_NATIVE_MENU=1が迂回を有効化し、メニューは F7 ホットキーでのみ開く。 Auroraの契約ACCEPTEDを尊重し、従った:PhotoMode::Tick()= Option A (AuroraD3DRenderの先頭、early-returnの前、FFXHOOKS_ENABLE_AURORA_OVERLAY=1、AURORA-ownedハンク付き)。FREEZEの単一オーナーはg_pm.frozen、NtSuspendProcessは PROHIBITED 、PhotoMode::g_base=g_baseはinit内に置く。ワイヤーが 呼び出すのはPhotoMode::*だけ で、カメラRAM(0xD378A0)やアクターRAMを 書き込むことはない 。ビルド-WithPolyHook -Releaseは PASS (dllmain+MusicHook+ElementHook→ffx-hooks.dll)。 ステップ6A/NPCはこのパッチのOUTを維持した。 RT2-pending: メニュー/フィールド内のF7から、ネイティブ「PHOTO MODE」シェルが表示されるはずである(破棄可能なセーブ)。ドキュメント:docs/ai/HANDOFF_BAHAMUT_NATIVE_MENU_WIRE_BLUEPRINT_2026-06-09.md
v2.61.3
v2.61.5BETA
Seymour
アイテムショップ(value-guarded)のAtlasエビデンスバッジ――ギア+アイテムの対を完結
v2.61.2で証明したgear-shop value-guardをitem-shopへ複製する。v2.61.1+コーパスの解禁によって、アイテムにもbyte-grounded 1対1のraw値が与えられたためである。新しいread-onlyアクセサーSpiraDataAtlasCatalog.TryGetShopItemSlot(bank, slot, currentRawValue)+遅延_shopItemSlotValuesを追加した(item_shop_slots.csvを読み込み、開発用work/のみ、コンパイル済みフォールバックなし)。これはTryGetShopGearSlotの完全なミラーであり、atlas:item-shop:item-shop-0x{bank}-slot-{n}を解決するのは、スロットの現在のRawValueがコーパスと一致し(on-disk LE ushort=Items game-index0x2xxx、エディターの領域)、0ではない場合だけである。ShopExplorer_DataModelはショップ種別(Gear/アイテムスイッチ)ごとにEvidenceを計算する。スロットカード内の<common:AtlasEvidenceBadgeStrip>はすでに共有済み(v2.61.2)なので、アイテムスロットにもXAMLの変更なしでバッジが表示される。スロットを編集すると行が再構築され、ストリップが隠れる(古いバッジは残らない)。--spiraatlas-rt0ゲートには4つのアイテムアサート(検索0x2000/Potion、不一致0x9999で非表示、空のraw 0、no-corpusスロット3)を追加し、すべてPASSとした(ギアは引き続きPASS)。work/step0_consolidated_v5/item_shop_slots.csvをslot_value_hex付きで再生成した(404/404、dev-only、未コミット)。Read-only:ライターなし、Treasure/調合/Common/Aurora/native-menu/ランタイムの変更なし。ANIMAのCommonエンジンは消費するだけである。ビルドは0エラー/警告361件。--spiraatlas-rt0+--aicmdmeta-rt0PASS。ドキュメント:docs/ai/ATLAS_RIKKU_SHOP_ITEM_BADGE_UI_RESULT_2026-06-09.md
v2.61.4