068 教材 / 検証結果

結論: ローカル著作・モデル照合・実Pyxel headless・単体可搬性検査は合格。
元のゲームとSiteは編集していません。公開作業は親側の別工程です。
原作baseline: 16テストと実自動デモは親の新規検査で合格、9 PNG。qa/original_baseline.json。
教材の結果と原作baselineを混同しません。

モデル
Python 3.12.14、-B -S、標準ライブラリのみ: 44件中43合格、原作指定なしの任意比較1件skip。
原作を明示して再実行: 44件全合格、skipなし。tools/verify_original.pyも合格。
qa/stdlib-tests.txt、qa/live-tests.txt、qa/live-original.txtに実ログ。
全5,400は6台から4台を選択し、6品から重複なし4品を配置する15×360通りだけ。
0〜3品の途中/空配置を全数に含めた主張ではありません。それらは個別の配置/開館拒否/保存試験。
通常の縦横規則と左右だけの比較規則に対し、タグ・新規/既知の候補・三人の全巡回結果を原作由来fixtureと照合。
Undo/編集復帰/無効入力/初期巡回の明示的記録も照合。fixtureは原作なしで持ち運べます。

主な境界
台境界、予算ちょうど、0点候補、既観覧/既知の違い、魅力→費用→台番号の同点。
原作の配置はswapではなく移動元を空け置き先品を外す方式。
開館は四品のみ。初期Cは3/3成功済み、基本目標は2/3。
目標タグと興味の役割を分離。目標取得後も有効な候補があれば進行。
退館は一手、次の人は入口/新予算/既知なし。前の結果を保持。
Xは巡回を丸ごと戻す。編集へ復帰した後のXは直前の終了状態を戻す。
空配置/3品/未開館/巡回途中も保存可能。Sはtickを増やさず、指定先同名を上書き。
App生成・起動・保存先指定だけではファイルや親フォルダーを作成しない。

実描画と可搬性
Pyxel2.9.9、SDL_AUDIODRIVER=dummy、実Pyxel headless。
各段階の初期5枚+到達点5枚、800×560を新規取得。
各.pyだけを日本語と空白のある別フォルダーへコピーし、無関係なcwdから起動: 5件合格。
コピー先は一つの.pyのみ。画像/JSON/他段階/原作/assetsを起動に必要としない。
コピー側の状態と画像ハッシュは通常起動と一致。
不正CLI30ケースを実ランタイムでexit2として確認。stdlib試験でも32ケース確認。
画像/JSON出力のモード制限、拡張子、衝突パス、未知引数を検査。

画面確認
10枚の初期/到達点PNGを実際に開き、枠・台・タグ・候補順位・2点/1点内訳・来客切替・ログ・終了表示を確認。
最終の編集/終了ヒント修正後も該当画像を再確認。
描画の状態非変更、ASCII、文字と図形が800×560をはみ出さないことは合成描画でも試験。
標準ピクセル文字は小さい端末では拡大が必要。人間による読みやすさ評価は行っていません。

権利/配布
原作LICENSE.txtをLICENSEへバイト同一で収録し、5ソース冒頭にも全文コメント。
NotoとPyxelの参照権利文書も同一。Noto字形データは使用しない。
原作model/app/README/LICENSEと参照noticeのSHA-256を最後にも確認し変更なし。
隣接段階のdiffは現在のソースから生成した内容と一致。
FROZEN_SHA256.jsonとtools/check_freeze.pyで配布内容を確認。

確認していないこと
ブラウザー、OSの実キーボード入力、Windows/macOS実機GUI、人間の試遊/学習/面白さ、音声。
自動の合成操作を人間のプレイ記録とは呼びません。現実の観客への予測・教育効果は主張しません。
controllerは手動一歩・全キー解放方式へ変更しており、原作の42フレーム自動進行と完全同一ではありません。
詳細はqa/validation.jsonとLESSON.md。
