038 うそつき市場
主判断：安い試し買いで店主の変化を見るか、本命を先に買うか。隣の在庫と袋の空きも考える。
現実の投資・価格予測ではなく、全六品だけの架空市場。

起動
Python3.10以降、実行時依存Pyxelのみ。
Windows: setup.batを一度実行後、play.bat。
macOS/Linux: bash setup.sh、その後 bash play.sh。
このフォルダ単独で動作。開発環境用launch.shは移動先では使わない。
python -m unittest test_model test_ui -v で検査。
python app.py --comparison はBの隣ボーナスあり/補助目標12。
python app.py --baseline はBの全品固定3/同じ補助目標12。他の条件は同じ。

操作とルール
SPACEで開始。左右で店A/B/C、上下で茶/ジャムを選択。
Zで提示を開き、キーを離して別のZ押下でその額を払って購入。Xで見送り。
SPACEで帰宅確認、別のZ押下で帰る。Xで取消。提示中のSPACEは買物を勝手に確定しない。
P説明/停止、R同じ市場の最初、1〜3市場選択、M表紙。遷移後は操作キーを全て離す。
店には茶とジャムが各一個。袋は三個まで。買戻し・捨てる・転売・undoなし。
帰るだけはいつでも合法。目標未達も損失罰や破産演出なし、結果と再挑戦。
品の価値は基本3＋同じ品を持たない隣店一軒につき2。
隣はA—B—Cだけ。A/C最大5、B最大7。袋に買った店を残す。
残金＋袋の価値が目標以上なら達成。成立購入で在庫/金/袋を同時更新する。

店主
定価：初値のまま。売り急ぎ：一度見送られたら以後は初値−1、最低1。
強気：一度買われたら残り品は初値の二倍。どちらも変化は一度だけ。
提示額は開いた瞬間に固定。その購入の後の値上げを今回へ遡らせない。
不成立購入は履歴/財布/在庫/袋を変えない。
棚の「初値」は公知の基準額。「見た」は過去二回の実際の提示履歴。
候補表示は公知の初値＋得た履歴から整合するタイプだけ。真のタイプ名を直接表示しない。
買って変わらないだけでは定価/売急が残る。口上は全店同じで保証ではない。
商人AIのObservationは自店の成立購入/見送りと品種だけ。他店、財布、袋、カーソルは渡さない。

三状況
A 隣の最後の茶：A茶→B茶だけで14、茶三店18。B一度見送り後の二品は15。
B 安い試し買い：Aジャム3→A茶2→Bジャム3=15。
逆順A茶1→Aジャム6→Bジャム3=13で未達。同じ三品でも支払額が2違う。
試し買い後に高いジャムを見送り、B/Cの茶へ切替えると19。値上がりを必ず失敗にしない。
C 買わない在庫も条件：ジャム三店17。Aを見送ってからなら18。
C茶→Aジャム→Bジャムも15。Aを値切ってA/Bジャム二品だけで15の別解あり。
完成ブリーフの価格/タイプ/目標をそのまま使い、算術と可達性を検証した。

全列挙
experiments.py。無限に繰り返せる同じ質問・見送りは経済状態の同値類へまとめる。
財布/在庫/袋の由来順/商人の一度だけの変化をキーにA1264/B1696/C912状態。
三面とも二品達成がある。最大値19/20/18。状態数は袋順を含むので袋順を潰した監査より多い。
policy_results.jsonは候補方策の全操作/状態hash、solver_results.jsonは全数検査結果。

一変更比較
比較用の反実仮想。Bで品価値の隣ボーナスだけ有/無、共通補助目標12。
A茶を買って帰れば両版12で成功。そこでB茶も買うと、隣あり15/固定3版11。
後者の値札4は同じ。隣ありでは手持ちA茶が+2、新品B茶が5なので合計+3。
固定版は新品3のみで合計−1。第二品を買う判断が逆になる。
最高値は20/14だが、面白さの数値とは扱わない。comparison_*は実Pyxel比較画面。

同梱
Noto Sans CJK由来の12px字形とSIL OFLライセンス。UTF-8明示。
media/market_habits_automatic_silent.mp4は実画面の自動操作・無音。747フレームを30fpsで全保存（24.900秒）。
モデル、GUI操作、実映像、人の試遊はQA.txtで区別。Windowsネイティブと人の試遊は未確認。
NOTE.txtとX_DRAFTS.txtは日本語下書き。公開投稿なし。
