026 音のないピアノ / 検査範囲と限界
検査日: 2026-10-05 UTC。対象はこの教材の5段階のみ。
状態: 下記の範囲で合格。人の試遊やOS実機検証済みを意味しません。

1. 原作読解と忠実性
原作model.py / app.py / README.txt / test_model.py / test_ui.py / LICENSE.txtを確認。
採用はC面のみ。4候補、3鍵、実物図3、目標101。A/Bと原作の一部UIは省略。
原作model.pyを読み込み、最終Gameの値・返却可否・観測・履歴・開封状態を直接照合。
4実物図 x 8灯 x 3鍵 = 96押下ケース。
3つの候補表示段階ごとに、Noneおよびmask 1..7の全512メモ組合せで候補と確定maskを照合。
4実物図 x 5操作（A/B/C/undo/reset）の長さ5全組合せ = 12,500列、62,500遷移を照合。
終端の押下拒否、undoで再開、resetの空判定、知識・押下累積・開封保持を含む。
テスト実行は-B付き。原作内に__pycache__を作成していないことも確認。

2. 純粋モデル / スタブ（実レンダリングとは別）
原作指定あり: 15テスト合格。tests_with_original.txt参照。
原作指定なし: 12テスト合格、原作比較3件を明示的skip。tests_standalone.txt参照。
全8灯の反転、二重押下、無効キー、長い観測1024件、候補・推論、物理undoの分岐を検査。
全4実物図でA→Bの成功、候補2枚、C未観測、開封保持、完全初期化を検査。
全4配線図から到達する灯りが8通り全てあることを検査。
入力スタブで左右同時、押しっぱなし、リセット後のキー持越し、Z/R/Nを検査。
描画スタブでASCII文字の画面境界を検査。これは実キーボードやOS GUIの確認ではない。

3. 実Pyxel描画
Linux / Python 3.12.14 / Pyxel 2.9.9。既存仮想環境を使用し、追加インストールなし。
SDL_AUDIODRIVER=dummyを使い、5段階それぞれ初期表示と--demoを別プロセスで起動。
計10プロセスが--headless-smokeで12更新・12描画後に終了し、PNG計10枚を保存。
各PNGは768 x 720（384 x 360のscale=2）。全10枚を開いて目視確認。
画面切れ、文字重なり、灯り左右順、初期000と最終101、観測行、候補数を確認。
段階4の自動操作A/B/Z/R/AはPRESSES 3と観測継続を表示。
段階5の自動操作A/BはCLEAR、候補2/4、C ???、実物3、PRESSES 2を表示。
render_log.txt / *_initial.png / *_demo.png / validation.json参照。
--demoはGameメソッドを所定フレームで呼ぶ。OS実キー入力の自動操作ではない。
最初の予備起動では音声デバイス警告が出たがPNGは生成された。本検査10件はdummyで実施。

4. 未実施
人による初見理解・面白さの試遊。
Windows/macOS実機、Linuxネイティブウィンドウ・物理キーボード操作。
Python 3.11実行（コードの対象は3.11以降、実測は3.12.14）。
音声出力・実聴確認（本作は音声APIを呼ばず、無音が仕様）。
省略した原作A/B・全記録スクロール・面選択・停止・F12・動画出力。

5. 再現と配布
README.txtの.venvコマンドは教材ZIPのREADME所在フォルダからの相対パス。
実描画再現: .venv/bin/python -B 05_goal.py --headless-smoke --demo --screenshot qa/05_clear.png
純粋/スタブ再現: .venv/bin/python -B test_stages.py
原作比較の任意設定はREADMEのPYXEL026_SOURCE_MODEL参照。
全5ファイル先頭に原作MIT通知全文。原作のNoto由来資産は未同梱。
原作・Site・公開物は変更していない。SHA256SUMSで凍結時の教材を確認できる。
