045 機能検証 / 2026-10-02 UTC

境界
実装・モデル・クラウドLinux入力・実描画を確認。人による面白さ、Windows/macOS実機、音は未確認。
GUI実操作、headless自動入力、管理比較を別の証拠として保存。公開操作はしていません。

純粋モデル
19 unittest（モデル15、UI4）。全A/B/Cで成功。solver_results.jsonは有限の購入のみの行動木を厳密探索。
分岐はJに集団がいるときだけ2通り、建設なし/空きへの弓/槌を列挙。解体は探索の対象外で、別単体/乱択検査。
policy_results.jsonは3状況×4経路方策×4配置方策=48通り。固定正面、固定裏、車なら裏、Cだけ混成を正面。
A: 正面槌1基で耐久3、B: 正面槌1基で耐久2、C: 正面槌1基で耐久1。簡単な方策を合法なまま保持。
C: 適応分岐+弓/槌で耐久3/資材0、毎回車を裏へ+同配置で耐久2/資材2。
全車を裏にする方策の優越が元データで見つかったため、C混成隊だけt4→t5へ変更した。隠し罰は追加なし。
保存: 資材=2+落荷+解体回収-建設費。出現数=盤面+撃破+歩兵退出+車退出。
拒否時不変、同時分岐、車非標的、一台一落荷、先借り拒否、装填2/1/0、標的順、undo完全復帰を検査。

UI合成検査
表紙開始と次フレームの入力、長押し、pause中の解放と復帰、持続キーの遮断、undo/再開/状況切替。
全キーの解放をupdate先頭で読み、pause/title/gate等のreturnより前に履歴を更新。
全方策状態×全7建設×両分岐、全理由文、表紙/説明、780フレームdemoのテキスト座標・必要字形を検査。
実時間の攻撃/移動アニメーションは設けていない。意思決定を一刻ずつ確定する。

クラウドLinux GUI実操作（21:00頃）
A表紙→槌1基→P停止→Z押下/解放→P復帰→新Zでt1からt2→正面固定でt9無傷成功。
成功からXで戻る。2でBへ切替、槌を置く→資材0でF2建設を拒否→選択を戻す。
混成隊を裏へ、S2落荷2、F2槌建設、正面に戻してB耐久2成功。
R再開、裏固定・無建設でB耐久0未達、Xで戻る。
3でCへ。単独車を裏へ流し回収、弓F1/槌F2。後の混成隊は正面、t10耐久3成功。
M表紙→SPACE600ms長押しでもt0のまま。F12記録後ESC終了、一覧で045ウィンドウ不在を確認。
native_events.jsonは最終までの累積、native_success_A/B/Cとnative_failure_Bは途中保存。自動動画とは独立。
視認: 720×520。説明、全出現表、Jの集団、分岐、予告、射線外、結果の重なりを確認。

映像
media/open_defense_automatic_silent.gif: Pyxel自身の実レンダー、自動入力。B/Cの連続した予告→確定→結果。
MP4は元GIF全779フレームを順序どおり一回ずつ、rawvideo30fpsで符号化。25.966667秒、720×520、音声なし。
GIFのcentisecond遅延をそのままfpsへ誤変換せず、元フレーム総数とffprobe最終総数/秒数を照合。
comparison_salvage.png / comparison_no_salvage.pngは同じBの方策を別初期化した実レンダー。旧版史の主張ではない。

移植/隔離
UTF-8明示。日本語・空白のコピー先と任意cwd、cp932既定を模したio.openで字形ロード/タイトル描画を確認。
BATはASCIIのみ、引用符付き相対パス、失敗pause。各フォルダーのみでsetup/play可能。
Noto由来字形+OFL全文、元コード/原始図形+MIT全文を同梱。
validate_artifacts.pyは全capture JSONを純粋モデルで再生検証し、現行app/model SHA一致を確認。
同スクリプト内でテスト前後のmedia全ファイルSHA不変を確認。テストはsaveをstubし、撮影を上書きしません。
