042 小さな渡し船 検証記録 / 2026-10-02
区分: 実装・機能検証。人による面白さ確認待ち。

モデルの順序
出航時に経路/人数/潮を全検証→航行先と残刻を確定→1刻ずつ時刻+1→客の出現→残刻-1→到港/自動降船→完走判定。
乗客は未出現/一つの港/船内/到着済のどれか一つ。所有はtupleの一項で表現。
乗降は時刻0、同じ客を繰り返し触っても利益なし。拒否はStateと履歴が不変。
航行は途中のImmutable Stateをtraceへ保存し、undoは出航前まで一操作で復元。
船の画面演出中も全キーの押下/解放を更新し、確定入力を受付へ持ち越さない。

16 unittest
全状況の成功/別案、全undo、定員3/4、出現前乗船、潮0空船、人数==潮、次の干潮で罰しないこと、
深水2刻の途中出現、希望時刻同刻、船上行先変更拒否、遅客存続、不正入力原子性。
長押し乗降/開始遷移/再開/終了後入力、停止中解放→新規押下、演出中解放/保持の両方。
全所有ラベル組合せ×全港、全選択、潮位相、比較モード、停止/表紙/完走/大きい時刻表示の枠と字形。
750フレームの実演操作を別途synthetic描画で全チェック。テスト内の保存は無効化。

探索・設計ログ
solution_logs.jsonに毎操作/航行途中の時刻と一意所有、到着時刻を保存。
A: 一席で出る3航行/4刻/全3人希望内、待ってまとめる2航行/4刻/2人希望内。
B: 満員の深水便は2航行/3刻/全4人希望内。軽い浅瀬案は合法な完走だが5刻で2人希望内。
Bの後者は劣る候補だったことを隠さず、同等な好手とは呼ばない。
C: 全5人希望内は5航行/6刻。最初のAではrを残し、帰りにr/uを乗せる。
C: 5航行/5刻で4人希望内の別案あり。初期単独便、B先行、r先乗せの各列も保存。
9刻までの全合法操作探索を、将来へ影響する時刻/港/所有/各客の希望内判定で同値圧縮。
A1561/B7119/C21494状態。最大希望内は3/4/5人。無期限探索や人の体験を保証しない。
満席待ち/利用可能最短便/常時深水/FIFO/希望時刻順の限定方策を各面で比較。
満席待ちはt8以降に配送へ切り替える上限付き方策。永遠に待つことを成功と数えない。

一変更比較
同じB、同じ初期船荷3人。浅瀬条件だけ人数<=潮と人数<=3で比較。
現行は満員深水で3刻、変種は浅瀬で2刻。共通補助目標「4刻までに全員希望内」は両方達成。
比較スクリーンショットは同じt0/3人の選択予告。制作史上の旧版ではない。

移植性・媒体
UTF-8指定、cp932既定シミュレーション、日本語/空白パス、任意cwdの起動描画回帰。
ASCII BAT、引用されたパス、失敗時pause。Windows実機GUIは未検証。
Noto由来字形とOFL1.1を同梱。音声は実装していない。
自動動画は実Pyxel描画。原749フレームを各1回30fpsへ符号化、24.966667秒、音声0。
GIF遅延丸めに合わせた再サンプリングは行わない。timing_validation.jsonに原フレームSHA。

クラウドLinux native操作 / 20:50~20:53 UTC
SPACE600msで開始、P停止中のZは乗船せず、解放して復帰後Z600msで一度だけ乗船。
Aでp一席出航→Aのrを乗せてHへ→qと深水B便、全員希望内/4刻の成功を画面確認。
完走後SPACE600msは時間不変、Xで直前出航前(時刻2/船内2人)へ戻る。
B切替、p/q/rの満員で浅瀬を押すと時刻0/船内3人のまま拒否、潮待ち計3刻/深水2刻の比較表示。
深水航行の途中t1/残1刻でsがAに出現している画面を観察。X/Rを試しF12保存、ESC終了。
同ウィンドウが消えたことを確認してGUI枠を解放。

表示訂正と証拠の区別
上記native観察で、航行途中の下部便予告だけが到着後のStateを表示している不一致を発見。
最終版は航行中の下部を専用パネルに替え、途中の人数/残刻と受付再開条件を表示。
モデルと入力ロジックは不変。元nativeログ・画像はそのまま、当時のソースをmedia/native_sourceに保存。
最終自動/比較映像は修正版で再収録。nativeは当時のSHA照合と最終モデルへの再適用を別検証。
保存済み観察を最終版のnative再観察と呼ばない。テスト前後の全媒体ハッシュ不変を検査。
