049 町工場の一日 / 5段階チュートリアル

必要環境
- Python 3.11以上
- Pyxel 2.9.9 (requirements.txtで固定)
- 通常のウィンドウ表示にはGUIが使える環境

新しい仮想環境を使う例
  python -m venv .venv
  Windows: .venv\Scripts\activate
  macOS/Linux: source .venv/bin/activate
  python -m pip install -r requirements.txt

一段階を起動
  python 01_cutting.py
  python 02_parallel.py
  python 03_cleaning.py
  python 04_deadlines.py
  python 05_undo.py
前段階のimport、原作フォルダー、ネットワーク、画像素材は不要。
好きな名前へ変更した単一ファイルでも動きます。
配布時はMIT全文・LICENSE・Noto noticeを保持してください。

操作
  左右: 指示を選択（時間は進まない）
  Z / Space: 一指示を確定。全操作キーを離してから次を押す
  R: 現在の面を最初から（Rの新しい押下は他のキーより優先）
  1 / 2 / 3: 04/05のA/B/C面へ切替、状態初期化
  X: 05のUndo。終端後も戻せる
  B: 05の無料素材切替比較へ切替、状態初期化
  Esc: 終了
通常実行はファイルを書きません。日本語の説明はLESSON.md参照。
画面はASCIIです。01〜03は学習用の無期限・部分ルールです。
04は3面の通常ルール、05は予告、Undo、無料切替比較まで含みます。
原作の表紙、P停止、日本語字形、イベント保存・GIFは省略しています。

標準ライブラリのテスト（Pyxel不要）
  python -B test_stages.py
原作から抽出した固定期待値を同梱しています。直接比較は任意。
  macOS/Linux: PYXEL049_ORIGINAL="原作のフォルダー" python -B test_stages.py
  PowerShell: $env:PYXEL049_ORIGINAL="原作のフォルダー"
              python -B test_stages.py
未設定やmodel.py不存在なら直接比較の1件をskipします。
元データのSHA-256も確認し、別版なら黙って比較しません。

有限フレームの実Pyxel描画
  python 05_undo.py --headless-smoke --screenshot qa/my_initial.png
  python 05_undo.py --headless-smoke --demo-checkpoint --screenshot qa/my_checkpoint.png
--demo-checkpoint、--screenshot、--framesは--headless-smokeが必須。
--framesは2〜600、デモ時は全操作分の最低値以上。指定不足は引数エラー。
PNG形式だけを指定できます。検査用フラグの矛盾はPyxelのimport前に拒否。
  python -B qa/render_check.py
この再実行はqaの画像・検査ログを更新します。配布時の凍結照合は失敗する
可能性があるので、検査用コピーで実行することを勧めます。

凍結ファイル検証（書き込みなし）
  python -B qa/verify_freeze.py
FROZEN_SHA256.json自身、__pycache__、.pycを除く全ファイルを照合します。

検証の範囲
- 合成入力の押下、保持、同時押し、解放待ち、リセット、Undo
- 加工順、レール容量、素材切替、納期、終端、全状態復元
- 原作の通常/比較モードのサンプル遷移と完走トレース
- 実Pyxel 2.9.9 headless画像、独立改名実行、日本語・空白パス
- ブラウザー、OSの実キーボード、音声、人の理解度は未検証
詳しい実測件数と画像所見はqa/REVIEW.mdに記載。

収録物
- lessons.json / lesson_meta.json: Web掲載用の本文と説明情報
- LESSON.md: 本文、練習、答え、原作との差、次に読む関数
- diffs/: 隣り合う4差分（追加だけでなく置き換えを含む）
- test_stages.py / qa/: 再現テスト、参照値、実描画、検査証拠
- LICENSE / LICENSE.txt: 原作とバイト一致のMIT全文
- assets/NOTO-LICENSE.txt: 原作の参照するOFL通知。教材は字形未使用
