048 検証記録
区分: 実装/機能検証。人の楽しさは未確認。

原案データの検査と調整
Bの原案棚[E,F,V]/[V,F,E]を全状態列挙すると、V→Fと売り、次駅でE→F、
最後にV/Eを売れば、手を使わず6個販売できました。
この原案を「手持ちが必要」と説明するのは誤りです。
初期提案内の二つの箱を交換し[E,F,F]/[V,V,E]に調整しました。
在庫F2/V2/E2、各駅の注文、作業3/2/3、最低目標5は変更していません。
積み直しは自由なので、この棚を強制しません。candidate_design_check.jsonに原案の探索も保存。

成功列と安全な別案
A: 6販売・持替0。左右の販売順を逆にしても6販売。F/F/VとV/E/Eに品種順で固めると5販売で未達。
B: 初期提案のEを手へ→F/V→次駅Fと手のE→最後V/Eで6販売・持替1。
   出発前にE/Fの順を交換すると6販売・持替0。5販売・持替0の完走も成功。
C: F3/V1/E2で野菜1件を見送る、F2/V2/E2で魚1件を見送る、双方6販売・持替0。
CのF2/V2/E2積載では、駅1の魚を先に売る案と温存して駅2へ2個渡す案を保存。
両方6販売ですが、見送る魚注文の駅が変わります。
初期提案から全合法手を列挙。A1,775/B3,810/C10,182状態を展開。
成功だけでなく途中駅で取り出せない/早発車の未達を再現します。

一変更比較
Bの初期棚・注文・作業数を固定し、取り出し位置だけ任意へ変更。
初期棚のまま6販売する最少持替回数: 手前のみ1、任意位置0。
両版の達成可能性を確認。手前版でも積み直せば0で販売できます。
元から簡単に到達できる版をわざと不可能な基準として使ってはいません。
同じ初期状態から奥のFを売る操作の可否を実Pyxel PNGでも比較。

保存則と原子性
全idが棚/手/倉庫/販売済みの1箇所にあり、全stock idと一致。
棚3個・手1個、未注文品の販売拒否、奥の直接アクセス拒否、満杯返却拒否、
駅境界前の注文更新、手持ち持越し、同種の異なるid、作業=販売数+持替数を検査。
合法操作のみ作業1消費。発車は残作業を捨てるが、箱を捨てません。
有限到達状態の全遷移で所有/資源不変条件を確認。準備の移動/交換とundoも検査。

UI
押下/解放履歴は停止/説明/演出/終端の早期return前に更新。
停止中に離して新押下、保持したまま復帰、開始時ずれ押下、
運行中押下と解放、保持中の演出完了、リセット/undo/終端、無操作を検査。
全成功/別解/未達/表紙/説明/自動デモ描画の文字範囲・グリフを検査。
既定cp932、日本語/空白フォルダ、別cwd起動の模擬検証済み。BATはASCII・引用符・失敗pause。

実証媒体
実Pyxel自動入力動画: 原GIF749フレームを全て1回ずつRGBで渡し、30fps MP4化。
24.966667秒。ffprobeでフレーム数/時間/音声なしを照合。ネイティブ操作映像とは区別。
nativeフォルダに実入力ログと画面、automatic/comparisonは独立。
テストはログ保存を差し替え、全媒体hashを前後比較して上書きがないことを確認。
Linuxネイティブ実入力の詳細はmedia/native/OBSERVATION.txt（作成後）。
未確認: 人の初見理解と楽しさ、Windows実機、音の品質。
