アップデート 2.77
2026/6/10
SIN Chain Builder Gate 3:AiScriptLab 検証ブリッジ(`SinApplyPlan`)――プランを検証し、read-only は適用しない;NOT は書き込み用に SIN のまま。 レーン BLOCKED(Jarvis-NEMESIS/MAGIC)。SIN Chain Builder の Gate 3 を開き、SIN の SHINRYU preview-only `SinApplyPlan`(Gate 2)を受け取り、AiScriptLab/`AiValidator`-compatible チェックを実行する。それでも モンスターをロードせず、`Rebuild`/`Splice` を行わず、AEON の diff も、ディスクへの書き込みも、何の適用も行わない。問いはただ1つ――「この preview-only プランは構造的に受け入れ可能か(出力されるバイトコードは well-formed か)、そして適用までに残る正直なブロッカー/警告/エラーは何か?」。新しいクラスを `FfxLib/Ai/Sin` に追加:`SinPlanValidator`(`Validate(SinApplyPlan) → SinPlanValidationResult`、`AiScript_File` の静的テーブルと `AiStackModel` とプランだけを読む)、`SinPlanValidationResult`(プランレベルで `AiValidationReport` の語彙を再現:`Errors`/`Blockers`/`Warnings`/`Infos`、`StructurallyValid`=Error なし、`ApplyAcceptable`=Gate 3 では構造上 false)および `SinAiScriptLabBridge`(low-level チェックを緩い `AiInstruction` ストリームに対して行い、`AiScriptFile` なし)。チェック(SOUND のオフライン部分集合で、`AiValidator` 自身が使うものと同一): (1) すべての opcode が実証済み48種(`AiScript_File.IsKnownOpcode`)に含まれる;(2) `HasOperand` が `0x80` のサイズ規則(`IsOperandBearing`)と一致――不一致なら `Emit()` がストリームを mis-sizes;(3) per-instruction RT0(`Emit()` が同じ opcode+operand の re-decodes と一致);(4) statement-level によるスタックバランスを `AiStackModel` で確認(線形ボディは net 0、ガードは D7/POPXNCJMP 用に boolをちょうど1つ残す)。 3つのパイロットの判定: すべて 構造的に有効な BUT apply-BLOCKED(preview-only)――SIN-006/SIN-009(線形)は net 0 でバランスし、SIN-010(HP-guard)は bool をちょうど1つと net-0 アクションを残す。SHINRYU の DIV/MUL に関する指摘は EXPLICITLY 対応(NEMESIS の判断=EXPECTED BLOCKER として残し、NOT 修正は行わない):方向は実証済み(345体のモンスター調査による `0x16=DIV`/`0x17=MUL`+IDA `FFX_Atel_InterpretWorkerOpcodes@0x864180`+FFXDataParser)なので、`AiSnippetLibrary` の `MUL` が `0x16` に束縛されているのは確認済みのバグ――ただし 完全な整合(定数の修正+re-validate EVERY の利用側:`MonsterAiEditor`、`AiAutomation`、`--aiasm-rt0`/`--ai2`/`--ai3`+re-prove RT0/RT2)は、read-only 検証ゲート外の 専用 PATCH で行う(RT2 は Gate 3 では禁止)。それが Error ではなく BLOCKER でなければならない理由を示す構造的な洞察:`AiStackModel` は BOTH DIV と MUL に対して net -1 になるため、スタックは同じように釣り合い、バイトは re-parses のままで、間違った算術を検出できるのは RT2 だけ。バリデーターは完全な証拠付きの Warning + Blocker として表面化し、ゲートは HP% レシピが ブロックされたままで、NOT は黙って修正されていないことを確認する(プランナーは引き続き `0x16` を出力し、`AiSnippetLibrary` は変更なし)。追加の(non-breaking)拡張: `SinPlannedStep` に `GuardOps`/`BodyOps`(プランナーがすでに計算した生の `AiInstruction`)を持たせ、バリデーターがプランナーの生成物を 正確に検査できるようにした(単一の情報源;デフォルトは空なので、すべての Gate-2 構築箇所はコンパイルを継続し、`--sin-dryrun-rt0` は PASS のまま)。新しい read-only ゲート `--sin-validate-rt0`: 3つのパイロットを検証し、structurally-valid+apply-NOT-acceptable+正直なブロッカー+未達の昇格ラダー+候補からauthoring-readyへの昇格なしを表明し、さらに(SIN-010)DIV/MUL ブロッカーが存在して not-fixed であることも確認する。決定的な検証。MINOR(NEW の実行可能な機能:バリデーター+ゲート)。対象範囲/正直さ: SIN は BLOCKED のまま書き込み用――Gate 3 はプランを検証するだけで、適用はしない;「DESIGN 用にクリーンでも、WRITING 用に開放されたわけではない」――そして clean-structure も書き込みを開放しない。writer/save/NOT/`Rebuild` diff/backup/`Splice`/AEON/button/RT2 を行わず、UI、NOT も `monster_.bin`/runtime/Aurora/native-menu/Blitzball/Shop/Mix/Sphere/`Common`(ANIMA)や `MonsterAiEditor` に触れない。ビルドは0 errors;`--sin-validate-rt0`+`--sin-dryrun-rt0`(Gate 2、回帰なし)+`--aicmdmeta-rt0`+`--spiraatlas-rt0`+`--aiasm-rt0`(AiScriptLab、実際のコーパス上で346/346 RT0)はすべて PASS。ドキュメント:`docs/ai/SIN_NEMESIS_AISCRIPTLAB_VALIDATION_RESULT_2026-06-10.md`+`docs/ai/HANDOFF_NEMESIS_SIN_AEON_DIFF_GATE_NEXT_2026-06-10.md`。[前回: `v2.76.0`] — Jarvis-NEMESIS
ノートを読む