045 穴だらけの防衛線 / 日本語5段階Pyxel教材

前提: Python3.11以降、Pyxel2.9.9。実検査はLinux/Python3.12.14。
各01〜05.pyは独立実行。別名、空白や日本語のパス、assetsなしで動きます。
  python 01_cohort_routes.py
  python 02_salvage_bows.py
  python 03_hammer_ticks.py
  python 04_forecast.py
  python 05_undo.py
導入済み環境で実行。新規導入時は python -m pip install -r requirements.txt
一刻ずつSpace/Z。左右で道、上下で建設、1/2/3で状況、R初期化、Esc終了。
02以降Bで落荷価値2/0を比較。05はXでUndo。キーを離してから次を押します。
コード編集は保存→終了→再実行。Rでは再読込しません。

01移動のみ、02資材/弓、03槌/待ち時間で原作全apply、04予告、05全モデル/Undo。
ASCII画面。日本語字形・表紙・P停止・Mメニュー・F12・通常記録/GIFは未実装。
モデルは有限の固定出現予定です。ランダム生成や無限ステージではありません。

本文: LESSON.md。標準サイトデータ: lessons.json / lesson_meta.json。
差分: diffs/01_to_02.diff 〜04_to_05.diff（隣接ソースの完全差分）。
  python -B test_stages.py
  python -B qa/cp932_check.py
  python -B qa/exercise_checks.py
  python -B qa/runtime_checks.py NEW_DIRECTORY
  python -B qa/render_boundaries.py NEW_DIRECTORY
  python -B qa/reference_check.py ORIGINAL_GAME_DIRECTORY NEW_JSON_PATH
  python -B qa/verify_freeze.py

初期画像/JSON:（保存先ディレクトリは存在、同名ファイルは存在しないこと）
  python 05_undo.py --headless-smoke --screenshot initial.png --report initial.json
チェックポイントは --demo-checkpoint を追加。
相対出力はPyxel初期化より前の起動cwdへ絶対化。同名ファイルは上書きしません。
UTF-8を明示。CP932試験は既定のテキスト読み込みを本当にCP932へ置換し検査します。
Windows/macOS GUI、OSの実キー、ブラウザ、音の聴取、人の学習効果は未検証です。
実Pyxel描画と合成キー入力を検査。原作QAと教材QAを区別します。

原作MIT全文: LICENSE / LICENSE.txt、および全.pyの先頭。
Noto通知: assets/NOTO-LICENSE.txt（字形はこのASCII画面で不使用）。
Pyxel通知: assets/PYXEL-LICENSE.txt。原典のコード・素材・権利表示は変更していません。
