070 帰れないラジオ局 — 五段階教材

Python3.11以上 / Pyxel2.9.9。実行検査環境はLinux/Python3.12.14。
python -m pip install -r requirements.txt
python 01_read_and_send.py
五つのNN_*.pyは別々に動き、元のmodel.pyや素材フォルダーを読みません。
日本語の説明はLESSON.mdとlessons.json。画面はASCIIの要約です。
登場人物・町・放送はすべて架空で、実電話や実放送は使いません。音声なし。

01 読む/放送と四枠（歌と合図だけ）
02 Aの予約と到着/出発
03 Bの同刻優先順位と時計2の記録
04 Cの回答待ちと別の橋放送
05 早期閉局、Undo、Aの条件付き見本比較（原作全モデル）
上下で選択、Zで読む、Enterで放送。一押しごとに全キーを離します。
Rは初期化、Escは終了。2は03以降、3/4は04以降。X/Bは05だけ。
コード変更後は保存→ゲーム終了→同じファイルを再実行。
Rは読み込み済みのコードを使い、変更したPythonを再読込しません。
各段階の改造実験はexercises/verify_edits.pyで実際に実行済みです。
実験中に設定を変えた場合、固定のカード文は元の規則を説明しています。
観察後に変更を戻して再実行し、説明と処理を一致させてください。

時計は放送だけで進み、四枠で終了。handoffは時計を進めず閉局。
橋の回答はcheck開始から3刻で、帰宅にはその後のbridge放送が必要。
PENDINGは予約であって達成ではありません。会館は待機場所、帰宅人数は増やしません。
全員満足の隠し得点はありません。原作との違いはlesson_meta.jsonを参照。
原作に独立controller.pyはなく、入力制御はapp.pyのApp.update内です。

検査:
python -B test_stages.py
python -B qa/cp932_check.py
python -B exercises/verify_edits.py NEW_EMPTY_DIRECTORY
python -B qa/runtime_checks.py NEW_EMPTY_DIRECTORY
python -B qa/verify_freeze.py
qa/reference_check.pyは原作070フォルダーと新規JSON出力パスを引数に取ります。
原作全定義AST/データ/有限到達状態での比較。無限の全操作列の証明ではありません。
実Pyxel検査はheadlessで合成キー入力と境界状態を描画します。
--demo-checkpointは--headless-smokeが必要。--screenshot NEW.pngも同様。
画像はPNG、親フォルダーが存在し、同名の出力が未存在の場合だけ作成。
相対画像パスはPyxelのimport/initより前に呼出元cwd基準へ確定します。

qa/に実行結果、原典ハッシュ、画面検査、凍結マニフェスト検証を保存。
実OSキー入力・ブラウザー・Windows/macOS GUI・音の実聴・人の学習効果は未確認。
CP932はPythonの既定テキスト読込を本当にCP932へ置換する試験で、WindowsのGUI試験ではありません。
LICENSE/LICENSE.txtと各単独pyに原作MIT全文を保持。
原作のNoto OFLとPyxel通知をassets/へ原文保存。教材は字形素材を使用しません。
