013 棚からぼたもち — 検証を種類ごとに分けた記録
検証日：2026-10-02 UTC

1. 純粋モデル・自動試験
python -m unittest -v：30件成功。詳細 test_results.txt。
- 不変State、無入力/不正入力で変化なし、終端状態の吸収性。
- Aの1手成功。BのA成功/B石接触失敗/C片支え安全停止。
- Cの安全な複数順、同時破断、片側への全重量集中。
- 耐荷重と等しい値は耐える。Fractionによる荷重保存。
- 入力配列順を逆にしても終端状態hash一致。
- 落下群の1格子同時移動と下からの支持判定。
- 固定側と落下側の両接触でも固定ブロックを貫通しない。
- 全座標で物体の重なりなし。もちの落下列に固定ブロックなし。
- D初期の下面より皿は1格子下（初期支持にならない）。
- 3面全ての合法除去列を終端まで探索。128反復異常は0件。
- undoの位置/除去/破断/配送/荷重/支持グラフ/hash復元。
- GUIを模擬した入力端、長押し、演出中追加入力、P→復帰、R、Z、N。
- 全主要状態のdrawを呼び出す日本語字形カバレッジ。
この節はプログラム試験。人の試遊ではない。

2. 有限状態の全探索
A：2一意状態、成功1列、失敗0列。短い導入。
B：6一意状態、成功2列、失敗2列。
C：27一意状態、成功44列、失敗12列。
一意状態には終端を含む。各合法列は順序ごとに数え、成功直後に停止。
一番上から固定して抜く：A成功、B石接触失敗、C過荷重失敗。
一番下から固定して抜く：A成功、B成功、C皿接触失敗。
アルファベット順：A成功、B成功、C過荷重失敗。
何もしない：全て安全な未達。待つことへ罰はない。
安全な全初手と初手後の成功/失敗列：solver_results.json。

3. 面の成立と残る懸念
A：初見で見えるものは、もち、板A、離れた皿、横の固定ブロック。
  成功入力はAのみ。操作端を覚える導入。深さは主張しない。
B：上の石3と板B、下のもちと板Aが同じ落下列にある。
  A、またはC→Aで成功。Bを引き抜くと石がもちへ触れる。
  Cを抜いてもBは固定端で止まるので、残る支えで静止する様子を観察可能。
  C除去自体は必須の判断ではない。余分な操作を課題にしない。
C：E/Fに0.5/1.25、1つ載ると1/1.25を直接表示。
  両方載せた破断時/失敗後に1.5 > 1.25を保持表示する。
  A1→D→A2、A2→D→A1、D→A1→A2、D→A2→A1は全て最短3手。
  D先行を禁止しない。高難度/深い最適化が成立したとは評価しない。
  固定ブロックは壁付き。もち列x5/x10を塞がず、Dと皿は初期非接触。
  重さの分配が人に伝わるかは試遊待ち。

4. 一変更比較
同じC、同じ入力でE/F耐荷重だけを無制限→1.25。
基準74成功列、変更44成功列。A1→A2→Dの結果が成功→失敗へ変化。
A1→D→A2とD→A1→A2は変わらず成功。EXPERIMENT.txt参照。
この変更は順序の意味が変わることの証拠で、楽しさの証拠ではない。
「片支えでも固定物を貫通せず止まる」修正は比較の両版で共通。

5. 実際のPyxel描画と媒体
Linux + Pyxel 2.9.9で実描画。PNGの目視確認済み。
自動操作のMP4：719枚、30fps、23.966667秒、768×864、音声なし。
元GIFの30ms/frame（21.57秒）をゲームの30Hzへ時間補正。
成功/失敗/undo/再成功と、過荷重の白い亀裂・数値・原因線を収録。
実映像とソースhashはmedia/replay.jsonとMP4_VERIFICATION.json。
静止画：runtime_*.png、experiment_before/after.png。

6. 実GUIのキー操作
実施：2026-10-02 17:58〜18:01 UTC、クラウドLinuxのネイティブPyxel。
Application Finderからlaunch.shで起動。CUAの画面操作でキー入力。
開始Spaceを500ms保持しても板は抜けず、開始と除去を分離できた。
A：次のSpaceで1枚だけ抜け、1手成功。NでBへ。
B：右でB選択→Spaceで石が落下、もち接触で停止。原因枠と文を確認。
  Zで0手の元配置へ。P中のSpace500msは無効。P解除後、左でA選択、
  Spaceで石の支持を残して成功。
C：A1→A2で両支持の白い亀裂を実画面で観察。
  失敗後も E/F: 1.5 > 1.25 の数値と皿接触の原因枠が残った。
  Z→右でD選択→Spaceで1つを配送→SpaceでA2を抜き2/2成功。
  Rを500ms保持して初期配置/0手/0.5荷重へ戻る。
最後にEscで終了、ウィンドウ一覧から013の消失を確認。
ネイティブ保存PNG：media/manual_B_failure.png、manual_C_failure.png、
manual_C_success.png（F12保存）。画像はゲームの描画バッファそのもの。
日本語タイトル/目的/重さ/原因/操作案内の欠字・画面外切れを目視確認。
これはエージェントのGUI操作確認であり、人の楽しさの感想ではない。
同時キーの厳密なタイミング、演出中Pのフレーム凍結は自動試験で確認し、
ネイティブ試験で全ての同時キー組合せを確認したとは主張しない。

7. 配布と文字コード
tools/test_portability.py：cp932既定を模擬し、日本語と空白を含む場所へ
フォルダをコピー、任意cwdからappを読み、実際のタイトルdrawまで検査。
JSONの文字読みは明示的UTF-8。BATはASCIIのみ、引用符付きのパス、失敗pause。
BATの静的確認も成功。portability_results.txt参照。
実Windows/macOSでSDL/Pythonインストールを確認したとは主張しない。
requirementsはPyxel 2.9.9のみ。フォント再生成用Pillowは開発用で起動不要。

8. 未確認
人の試遊0件。初見理解、面白さ、再挑戦したくなるかは未確認。
音は未実装。音の実聴は未実施。画面だけで状態が分かることを目視確認。
最初の3作品へのユーザー評価は本作へ転記していない。
公開投稿なし。NOTE/Xは下書きのみ。
