# Phase 20.25 — Boxes→Plugins 集約 + 正規化恒久化(MVP) 目的 - String/Array/Map の代表機能をプラグイン(動的/静的)へ集約し、VM/Core/Runner から統一的に呼び出す。 - Method/ModuleFunction→Extern の正規化を構造化(Router/Verifier 側)へ段階移行。Gate‑C のローカル正規化は最小限に。 - 既定挙動は不変。全て opt‑in トグルで導入し、Fail‑Fast を維持。 ステータス: MVP 完了(2025‑10‑30) 背景(現状) - Gate‑C フォールバック経路で Method/ModuleFunction→Extern の正規化を実装済み(runner/normalize)。 - VM 側 extern_adapter が `nyrt.box.*` を受理する互換を実装済み(iface/method 別名の吸収)。 - quick プロファイルは緑(Pass 53 / Skip 13 / Fail 0)。 範囲 - Plugins 集約(代表): - String: length(size), indexOf, lastIndexOf, substring(代表) - Array: size, push, pop, get, set, clear - Map: len(size), get, set, delete, keys, values(代表) - Router/Verifier 側の恒久正規化(段階導入; 既定OFF → 構造確認 → 既定ON) - CLI トグルの実効化(既定は変えない) 非対象(このフェーズではやらない) - 全外部APIの正規化・網羅(代表に限定) - 文字列/配列/連想の全オプション動作(境界・負荷の細部は次フェーズで拡張) トグル/ENV(既定OFF) - `HAKO_GATE_C_ENABLE_PLUGINS=1`(Gate‑C(Core) plugin 経路の opt‑in) - `NYASH_NORMALIZE_CORE_EXTERN=1`(既定ON; 問題時の一時 opt‑out 用) - `SMOKES_ENABLE_CORE_CANARY=1`(スモーク opt‑in) 受け入れ基準(MVP) - quick プロファイル緑の維持(新規 canary は opt‑in)→ 達成 - Gate‑C(Core)+plugins の対称(file/pipe)で代表ケースが PASS → 達成(plugins カナリアは opt‑in で SKIP/ PASS 運用) - 正規化(Method/ModuleFunction→Extern)は runner/normalize へ一本化済み(SSOT参照) - 外部名の揺らぎは VM extern_adapter が吸収(SSOT 文書と一致)