085 役目を交換する砦 / 085.1.0
実装・機能検証。人による面白さの確認待ち。

15単体テスト: 役保存、交換時HP/位置非交換、弓射程/遮蔽、盾隣接/斜め/倒れ、
敵の標的優先/最短路同点/移動後攻撃なし、救起/重なり、6フェーズ/早期全滅、
無効入力不変、正確な敵予告、全State undo、開始/説明/再開/比較/結果の解放待ち。
同時・段階的なキー到着、説明中の解放、選択で時間不変も検査。

設計候補の検算
元A/B/Cは待機6回で旗HP3。元Cは味方も全員無傷。
核となる位置と役の判断が見えにくいため、Aを安全な入門として保持しB/C初期配置のみ調整。
Bは槍/盾身体の位置交換と敵1の前進。Cは味方3人と敵1の初期位置を移動。
敵の数・HP・攻撃・行動数・6番・盾軽減は変更なし。READMEに全変更座標を明記。
調整後の待機はA成功、B/Cは3番目に旗HP0。
各面2系統の成功をpolicy_results.jsonで再現。Aの盾交換ではアキHP0→3となる。
同じ交換なしの入力を原版/比較版で再生し、全状態が完全一致。
これは戦術候補の存在と違いの証拠であり、面白さや最適方策の証明ではない。

保存・納品
元の自動/ネイティブ記録は当時のソースと共に独立した時刻付きフォルダへ保存。
テストにファイル書込みなし。validate_package.pyでmediaの前後ハッシュを照合。
実行時依存はPyxel+stdlib。日本語字形、ライセンス全文、ASCII引用符BAT、UTF-8。
Windows/macOS実機、人の初見理解・楽しさ、音の実聴は未確認。ゲームは無音。
映像・ネイティブ観察の最終情報は検査後に追記する。

最終映像: media/automatic_20261003T010349_427310/fortress_automatic_silent.mp4
実Pyxelの原GIF749フレームを各1回30fps、24.966667秒。ffprobeで音声なしを確認。
開始、交換前、交換後、旗0ダメージ、槍攻撃、守り成功のPNGを保存・目視。
ネイティブはNATIVE_OBSERVATIONS.txt。初回は原因不明の終了、原証跡を保持。
同じゲームソースで再起動後、比較A成功/B失敗/再開/説明/キー保持を観察しQで正常終了。
全原記録の全イベントを、各記録の意味入力から再生しハッシュ照合した。
