079 こだまする洞窟 v1.0.1
音響パズル / 日本語 / Pyxel + Python標準ライブラリ

入口から二つの枝へ音を送って、公開された4枚の地図を確かめる。
遅い反響が遠い壁とは限らない。苔の壁では反射に2刻かかる。
石は0刻。音の到着は距離×2＋反射待ち。現実の測量モデルではない。

起動
Python 3.10以上。初回はWindows: setup.bat、その後play.bat。
Linux/macOS: bash setup.sh、その後bash play.sh。
ネット接続は初回Pyxelインストール時のみ。ゲーム中は不要。
ランタイム依存はrequirements.txtのPyxelのみ。標準ライブラリ以外の素材取得はしない。
日本語の必要な字形を同梱し、端末の日本語フォントに依存しない。
Windows/macOSの実機起動は未確認。Linuxの自動描画とネイティブ操作を分けてQAに記録する。
launch.shは開発用のこのクラウド環境専用。配布先はplay.sh/play.batを使う。

操作
Z/Enter/Space: 表紙から開始。左右: 反射板を選ぶ。Z: 送信。
Space: 1刻。P: 観測中の再生/停止、それ以外は説明。
Tab: 候補欄へ移る。上下: 地図を選ぶ。Z: 残す/外す。
A: 完了した観測に両立する全候補へチェックを合わせる補助。
Enter: 報告。候補が複数でも正しく全部残せば基本達成。
X: 直前の判断を戻す。観測途中なら送信前へ戻して中止する。
R: 同じ洞窟で再開。1/2/3: A/B/C。B: 苔待ち0刻の管理比較版。
H: 説明。M: 表紙。V: 音入/切。F12: PNG保存。S: 現在の操作記録を保存。
一度押したら全操作キーを離してから次を押す。同時押しは全て不採用。
自動再生中はPで停止してから編集する。説明・結果の間は進まない。

洞窟と根拠
広げる設定は両側2区間、6刻の観測窓。片側へ遠くは4区間、10刻。
広い観測は材質別個数だけを伝え、左右を漏らさない。
無音はその設定と窓で返らなかったという情報。壁なしとは断定しない。
途中観測は候補消去に使わない。次の1刻の予告は既に聞いた情報に両立する候補全ての可能性。
内部の波や真の壁は画面へ渡さない。地図図形は公開候補の仮説。
A: まず広く聞くとH1/H4。B: 石と苔が4刻で重なる。C: 広くでは全候補が無音。
全設定を観測すれば原版・比較版とも真相一枚へ到達できることを有限検査した。
同じ枝を何度聞いても隠し減点なし。観測数を知性や面白さと同一視しない。

記録と証拠
media/の各実行フォルダに時刻・意味入力・設定・正規化state SHA-256・秘密を含む再現用stateを保存。
秘密は再現データ内だけ。通常画面/予告はpublic_viewだけを受け取る。
各記録にルール版・全候補表・当時のモデル/操作/表示ソースを同梱。
自動デモはheadless Pyxelの実描画。人の試遊ではない。
MP4は元GIFの全フレームを各1回、30fpsで保持。無音動画で音の実収録は未確認。
音は独自のPyxel内蔵波形。石・苔は同じイベントから字幕と個数が出る。
音デバイス/人の実聴・聞き分け・人による面白さは未確認。

検査
python -m unittest discover -v
開発用tools/build_font.pyとtools/export_video.pyだけPillow/ffmpeg等を使う。ゲーム起動には不要。
policy_results.json / comparison_results.json: 全署名と候補方策、唯一変更の比較。
assets/NOTO-LICENSE.txt: 同梱字形のSIL OFL全文。assets/PYXEL-LICENSE.txt: Pyxel MIT全文。

変更: 再聴を256操作で止める不要な上限を削除。45回聞き直した後も根拠に沿う報告ができる回帰試験を追加。

音付きの参考動画
media/automatic_20261003T002404_938438/echo_offline_synth_NOT_LIVE.mp4 は、実Pyxel無音映像へ、同じイベント列からPyxel Sound.saveで生成した自作波形を後で合わせた参考版です。
ライブ録音ではありません。音の開始位置をイベントのフレームへ合わせ、offline_audio_validation.jsonにサンプル位置を記録。聴感や聞き分けは人による確認待ちです。
無音の原本echo_automatic_silent.mp4もそのまま保存しています。
