056 技術・設計・体験の確認を分離

有限列挙: 三人240通り、四人120通り、計360。各奏者を重複配置しない。
A合格210（3人174/4人36）、B合格66（42/24）、C合格156（144/12）。
各曲に3人と4人の成立記録、同人数で席を変えて成否が変わる対を保存。
solver_results.jsonは全合格配置と、密集/間隔/最少/逆順の具体例を含む。
成立数は楽しさの評価でも、実プレイヤーが選ぶ確率でもありません。

同じ原譜・配置・音色で隣接合図だけゼロにしたB比較:
共通目標は三人で四小節。両版で達成しています。
F0/4依頼はゼロ版で不能。不能を難度や面白さの差とは扱わず、入り方と休符を比較。
比較版のUIと説明にもその不能・共通目標を表示しています。

自動試験:
一度だけの位相計算、両側相殺、mod8、音高ペア保存、非連鎖、全配置の一意性、
小節境界の予約確定、予約前後のundo、P停止中の時計不変、再開カウント、
十frameごとの同tick発音、最大四固定チャンネル、四小節終了、未達後の再配置、
別プロセス再生、余分な描画、無音/音ありモデル同一、record改ざん拒否、入力ラッチ。
表示の小節数は9999+、モデルの値は正確な整数。
modelではframeごとの最大4イベントと累積event hashを保持します。

音: パターンとノート列は本作のオリジナル。外部録音や既存曲は使用しません。
イベント・Pyxel呼び出しの一致は検査。クラウド音声出力/実聴/音質は未確認。
撮影映像の動作を、音の心地よさ確認へ置換しません。映像は無音です。

native Linuxの実入力観察はmedia/NATIVE_OBSERVATIONS.txt。
映像は実Pyxel描画、自動入力、約25秒、全元GIFframeを30fpsで一度ずつ使用。
自動試験はnative/映像を書き換えず、最終検証時に既存media hashの不変を確認。
Windowsはcp932デフォルト/Japanese+spaceパス/任意cwdを模擬。Windows実機未検証。
人の試遊は未実施。001–003の感想を056へ転用しません。
質問案: 「この空席はどの音のため？」「視覚と音で合図を同じように説明できた？」

最終復旧確認: app.py/model.pyを変えず、19単体試験を再実行。
実窓を継続し、成功→undo→未達四小節→再配置、R、B/C切替、P停止と復帰、
停止画面S、H、終了を確認。実入力記録はそのまま別ファイルへ保存。
音あり試奏の実聴は未確認。保存済み通知は停止画面でのみ目視確認。
映像は749frame、30fps、24.966667秒、640×480、音声なし。
