069 沈黙の証人 / 教材QA

範囲
原作A「返された箱」の原版first_detailを五段階で実装。
原作のmodel.py、app.py、README.txt全文を確認して設計。
01投影、02最初だけ細部の回答、03観測のAND、04集合の報告、05Undo。
固定の可能世界と、受け取った情報で言える範囲を区別する。
現実の証人や法律上の聞き取りを説明・推奨するものではない。
A/B/C切替、全細部比較、表紙、停止、保存、動画は意図的に省略。
入力の同時押しは原作の一件優先受理から教材の全件拒否へ変更し、本文に明記。

検証結果
- 48 unittest。通常47成功・任意原作比較1skip。
  原作パスを明示した再検査は48件すべて成功。
  qa/model_tests.txt、qa/standalone_tests.txt/json、qa/with_original_tests.txt。
- 原作から24投影、256入力状態×14操作=3584モデル遷移、24再演記録を採取。
  04/05の遷移はそれぞれ3584件を同じfixtureと照合。
  fixtureはqa/canonical_reference.json。元ソースなしの配布先でも試験可能。
  tools/verify_original.pyは元ファイルのSHA-256も含めて任意でライブ再照合。
  qa/canonical_recheck.txt、qa/canonical_comparison.json、qa/provenance.json。
- 空の知識、全候補・一意・複数、未提示情報を使わない理由、重複/不正提示の拒否、
  真相だけの当て推量の拒否、候補の過不足、最低一枚/途中報告、補助、終端、
  Undoで知識/報告を戻す、カーソルを戻さない、無変更時の履歴なし、
  128変更上限とUndo回復、512再演上限、リセットを検査。
- Controllerの長押し、段違いに離したキー、同時押し拒否、未対応キーも検査。
  描画の副作用なし、ASCII文字と横/縦の表示範囲、主要状態の文言も検査。
- 実Pyxel 2.9.9ヘッドレス28画像。初期5枚と、投影の細部/分類、順序/重複提示、
  既知回答による矛盾、未回答報告、bounded/specific、候補の過不足、手動報告、
  知識/成功/失敗のUndo、再報告、終端、reset、128変更上限/回復。
  各qa/*.png/*.json/*.log、qa/render_runs.json。
  Python 3.12.14、-B、SDL_AUDIODRIVER=dummy。実update/drawを使用。
  入力はController.feedへの合成キーで、ネイティブOS操作ではない。
- 全5本をそれぞれ一枚だけ日本語・空白入りパスへコピーし、無関係な日本語・空白
  CWDから起動。相対PNGとUTF-8 JSONの保存成功。追加の教材ファイル・画像不要。
  PYTHONUTF8=0 / PYTHONIOENCODING=cp932。qa/isolation_runs.json。
- 教材だけのコピーでpython -B -Sを使用して47成功・任意1skip。
  原作もsite-packagesも不在。通常テストは標準ライブラリのみ。
- 不正CLI 25例がPyxel import前にexit 2。
  未知キー、出力だけ、未知引数、1001キーを検査。qa/cli_invalid.json。
- 全28画像を7コンタクトシートで目視確認。切れ・重なりなく、候補・回答・
  KEEP/OUT・矛盾理由・二種の正式達成・Undoの変化を確認。
  qa/visual_review.json、qa/visual_sheets.json。最終再描画のピクセルも照合済み。
- README/LESSON/lessons.jsonのコード断片、4差分、元MIT全文の埋込み、
  exact LICENSEおよび参照先Noto通知、Pyxel 2.9.9指定を検査。
  qa/rights_packaging.json。Noto由来字形データは実行時に使用しない。

原作証跡は別扱い
qa/original_evidenceには親作業が実施した原作10試験exit 0と実Pyxel自動デモexit 0。
同デモのframe_330.png（H1/H2への限定）とframe_650.png（写真先の特定）を目視確認。
この担当で原作GUIを追加実行した記録ではなく、原作試験数と教材試験数は合算しない。
原作のmodel/app/README/LICENSE/Noto通知はfixtureのハッシュで再照合し変更なし。

未検証
人の試遊、ネイティブOS入力、音の評価、ブラウザ、Windows/macOS GUI。
この担当はSiteやcanonicalフォルダを書き換えず、公開も行っていない。

再現
python -B -S -m unittest -v test_stages.py
python -B tools/render_qa.py
python -B tools/verify_original.py /元ゲームの場所/069_silent_witness
python -B tools/check_freeze.py
WITNESS_ORIGINAL環境変数を元フォルダにするとunittestの任意比較も実行。
描画再生成にはPyxel 2.9.9が必要。コンタクトシートは検査用の既存画像。

フリーズ
FROZEN_SHA256.jsonに配布ファイルSHA-256一覧と除外一覧。
qa/freeze_verification.txtは最終照合結果。QA再生成は記録を書き換えるので、
凍結後に行う場合は別コピーで実行するか、再レビュー後に再凍結する。
