006 片手の料理人 教材QA / 2026-10-05 UTC

実測環境
cloud Linux、Python 3.12.14、実Pyxel 2.9.9。
共通要件はPython 3.11以上。3.11構文をastで検査したが、3.11実機は未確認。
新しいソフトウェアのインストールは行っていない。

純粋モデル・実controllerの合成入力
qa/standalone_tests.txt: 32件中30成功、任意原作再照合2件skip。
qa/live_canonical_tests.txt: 同じ32件すべて成功。
qa/cp932_tests.txt: PathテキストI/OのCP932既定模擬で30成功+任意2件skip。
CP932模擬はWindowsの実機・GUI・OS入力を確認したことにはならない。
各段階2500回、計12500回の乱数モデル操作で所有権を検査。
一枚一箇所、焼き台拒否、棚交換、受付窓、選択折返し、加熱再開、
60/120の完成、追加60の焦げ、温かさ180/181、再加熱で時刻不変、
生/焦げ拒否、冷配膳成功、手持ち焦げ皿の廃棄、23/24の保持境界、
保持継続で再廃棄しない、10tick移動/最後一個予約、Undo、終端停止、
R/P/Z優先と無tick、Space保持、新規同時押し、保持中追加押下を確認。
全テキスト描画のASCIIと座標幅、本文snippet、MIT全文、独立importも検査。

原作との直接比較と固定fixture
基準: Model(index=1,shelf=True,reverse=False,two=False)、原作app.pyのplay画面。
qa/canonical_controller_trace.json: 2136更新を原作App.updateと教材App.controlへ
同じ合成pressed/heldで入力し比較。4皿を棚で仕込み重ね、終了、Undo、P/R、
新規同時押し、保持中の追加押下、乱数操作を含む。
比較: orders,t,pos,target,moving,buffer,choice,hand/oven/shelf全フィールド、
delivered,warm,waste,status,undo_used、全history、paused、discard_frames。
日本語message、log、タイトル/描画/選択画面は比較しない。
qa/canonical_checkpoints.jsonにはフレーム別の読める状態を併記。
qa/canonical_model_boundaries.json: 加熱再開、冷配膳、温かさ180、
焦げ回復、再加熱、移動拒否、Undoを62操作で原作と比較。
こちらの位置セットはモデル境界の準備で、controller入力ではない。
fixtureは原作モデルから取得し、standaloneテストは原作なしで照合可能。
qa/make_reference.pyは任意の原作再取得用。元コードは-Bで読み取りのみ。
全到達状態や原作A/C/UIの同等性までは主張しない。

実Pyxelヘッドレス描画
qa/render_results.json: 初期各2フレームの5本、意味あるcheckpoint5本、計10本。
qa/isolation_results.json: 各.pyだけを日本語・空白パスへコピーし、別CWDから
同じcheckpointまで実起動した5本。原作・前段階・画像・JSONなしで正常終了。
計15プロセス成功。全PNGを実際に開き、表示、状態、入力案内、重なりを確認。
5本のisolated PNGは各checkpoint PNGとバイト一致。
checkpointの到達点:
01: 7フレーム、一枚を棚へ。材料はNO ORDER、手はEMPTY。
02: 29フレーム、棚は注文1厚焼き、手は注文2パン。焼き台EMPTY。
03: 315フレーム、厚焼きが棚。HEAT121のまま、AGE190/COLD。
04: 420フレーム、t418、SERVED4/4、HOT4、WASTE0、DONE。
05: 524フレーム、t522、SERVED4/4、HOT4、WASTE0、DONE。
フレーム数はR/P/Zや終端で止まるゲーム内tと区別して記録。
自動操作は画面にAUTOMATIC CONTROLLER DEMOと表示している。
入力は合成集合を実controllerへ渡したもので、人やOSのキー入力ではない。

音声について
最初の通常音声初期化は利用可能デバイスがなく失敗。
qa/initial_audio_device_unavailable.logを保持した。
その後SDL_AUDIODRIVER=dummyで上記15起動が成功。音の成功証拠ではない。
ゲームは音声データ・再生呼出しを持たず、聴取検査もしていない。

権利と改変確認
元ゲーム24ファイルの開始時SHA256はqa/original_sha256.json。
最終照合で24ファイルすべて不変。qa/source_integrity.jsonに結果。
LICENSEとassets/NOTO-LICENSE.txtは元とバイト一致。各段階もMIT全文を含む。
ASCII教材にNoto字形・glyphs.json・フォント本体は含まない。
元ゲームの既存テスト/動画を教材の実行証拠として再利用していない。
親バッチの新しい原作検査はpyxel_batch8_qa/originalsで別管理。

未確認
人のキーボード操作、OSイベント、Windows/macOS GUI、Python3.11実機、
ブラウザー実行、音声出力、人の楽しさ・学習理解。
架空ゲームであり、食品安全・調理の現実検証は行わず、その助言でもない。

固定
検証後の配布物はFROZEN_SHA256.json。manifest自身を除く全ファイルをSHA256化。
再検査はqa/verify_freeze.py（読取のみ）。編集後はfreezeを作り直して再検証する。
