053 風まかせ郵便気球
同じ空でも、ひとつ上は帰り道の風。

目的
公開された三層の風を選び、低空で郵便を届け、家の桟橋へ戻る小さな航路ゲーム。
上昇は燃料1、下降と維持は0。選択後の層の風を一度だけ適用します。
低空で桟橋に着くと係留し、空き容量だけ有限在庫から補給します。
係留中は風で流れず、一手待つこともできます。出発点でCなら途中の成果で安全帰還。
安全帰還は失敗と扱いません。全配達帰還、残燃料、所要手は別々の記録です。

起動（Python 3.10以上、Pyxel 2.9.9）
Windows: 初回は setup.bat、次から play.bat。画面のエラーは閉じずに確認してください。
macOS/Linux: bash setup.sh、bash play.sh。
インストール時だけPyPIへの接続が必要。実行時はPyxelと標準ライブラリ、同梱字形だけを使用。
このフォルダーを丸ごと移せます。空白・日本語を含むパスを引用した起動を自動試験。
Windows実機・macOS実機は未確認。クラウドLinuxの検証と区別します。

操作
上下: 高度案を一段ずつ変える。Z: 一手を確定（係留中は中層へ離陸）。
左右: 全周期予報の読む列。現在列は黄枠、読んでいる列は紫枠。
SPACE: 係留中だけ一手待つ。飛行中は現在高度を選んでZで維持。
X: 一つの決定を戻す。R: 同便を最初から。P: 停止と説明。
C: 家へ係留中に切り上げ。1/2/3: 別の便。B: 上層風を低層と同じにする比較版。
E: 現在の盤面と意味入力をsavesへ保存。M: 表紙。Q/ESC: 終了。E保存後は画面に完了通知を表示。
便切替・再開・表紙・比較の前にも自動保存します。Qはネイティブ操作記録も保存します。
結果中もX/R/Pを使用可能。各決定後と状態切替後は全キーを一度離します。
同時のSPACE/Z/Cは拒否。隣接frameに届く複合押下では先着一手だけを受理します。

予報と結果
全周期は画面下に常に表示。次の三手の風と、白丸の次の着地点を同時に見られます。
一手先の予告は現状態からの仮計算で、時間・在庫は消費しません。
端の外へ流れるか便の終了時刻に達すれば未完了。最終刻ちょうどの全配達帰着は成功優先。
燃料不足や無理な上昇は拒否し、時間を進めません。

三つの有限便
A-01-g1: 期限24、家1、郵便4/9、補給6に3。
B-01-g1: 期限32、家2、郵便1/10、補給4に3・9に1。
C-01-g1: 期限32、家3、郵便5/8/11、補給7に3。
任意整数seedの生成はありません。この3組だけを開発時の有限探索で確認しました。
Bの設計候補期限30では東先回りが31手必要だったため32へ変更。燃料・相場などは変更なし。
最短の西先29手と東先31手を双方残すための変更です。

ファイル
model.py: Pyxel非依存の不変状態、step、盤面/状態SHA-256、入力リプレイ検証。
app.py: 入力と描画。experiments.py: 開発専用の上限つき探索（通常起動では読み込まない）。
evidence/automated/: モデル試験、厳密な経路、方策比較、別プロセス再生。
evidence/native/: 最終修正確認の実ウィンドウ記録。初回の広い操作確認と失敗した中間確認はpre_audit_v1/v2へ元sourceと保全。evidence/automatic_capture/: 自動操作による実描画ログ。
media/: Pyxel実描画の無音動画とPNG。映像は自動入力で、人の試遊ではありません。
evidence/final_source/: 実動画時点のソース写し。saves/: 操作で生成される本人用リプレイ。

検査
python -m unittest -v test_model test_ui
python test_ui.py  （実証拠フォルダーが不変であることも検査）
python model.py saves/対象.json  （別プロセスで盤面・全入力tick・中間/最終hashを検証）
python experiments.py  （有限探索を再生成。branch_results生成はimport後branches()）
動画再収録は既存証拠を退避してから python app.py --demo --headless。
tools/export_video.pyは開発用Pillowとffmpeg/ffprobeを使う。通常プレイには不要。

状態
実装・機能検証済み。人による理解しやすさ・面白さの確認は未実施。
音を使わない設計で、動画も無音。音質の実聴やWindows実機検証を主張しません。
コードはMIT、同梱日本語字形はNoto由来のSIL OFL 1.1。全文はLICENSE.txtとassets/NOTO-LICENSE.txt。
