BoatRaceのシミュレーションで、判定は記録されているのに結果が不明に見える状態を調査した。原因は一つではなく、着順の数値を持たない特殊結果と、公開ステータスが更新されていない状態が混在していた。
判定済みでも着順が空になる理由
bets_log.csvを確認すると、失格・転覆などはsettlement_status=settledで精算済みでも、result_placeが空欄になる。例えば2026年9月15日のresult_code=エは、エンストによる失格を表す。この行を着順だけで表示すると、結果を判定できないように見えてしまう。
そこで公開ステータス生成処理に結果ラベルを追加した。主な対応は次のとおりである。
| 結果コード | 表示 |
|---|---|
| F / L / 欠 | 返還・フライング、返還・出遅れ、返還・欠場 |
| 転 / 落 / 沈 | 失格・転覆、失格・落水、失格・沈没 |
| エ / 妨 / 失 | 失格・エンスト、失格・妨害、失格 |
| 数値着順 | 払戻、または外れと着順 |
| pending | 未確定、または未知の結果コード確認中 |
公開JSONのdecisionsにはresult_labelを追加し、古いJSONしかない場合は画面側で従来表示へフォールバックするようにした。
データ更新停止も見えるようにした
手元の公開JSONは2026年9月16日22時59分以降更新されておらず、予測データの最終日は9月16日だった。そのため、公開ステータスに次の鮮度情報を追加した。
latest_race_datelatest_prediction_athas_today_data
画面には予測データ最終日を表示し、表示対象日より古く当日データがない場合は「最新データ未同期」と表示する。これにより、結果未確定とデータ更新停止を区別できる。
なお、実投票停止を示すHALTは解除していない。HALT中でも--liveを付けないpaper runnerはPaperVoterとして動作できることを回帰テストで確認した。
検証結果
BoatRaceの全テスト37件が成功した。追加したテストでは、失格コードの結果ラベル、返還コード、未確定状態、HALT中のpaper voterを確認した。
実台帳から公開JSONを再生成すると、2026年9月15日のresult_code=エは次のように表示された。
20260915_07_03 エ settled 失格・エンスト(エ)
今回の変更はローカルのserverブランチで実装・検証したもので、VPSおよびRaspberry Piへのリモート配備はまだ行っていない。実運用の更新再開には、Piのrunner・ステータス同期timerとVPS側の受信先を認証可能な経路で確認する必要がある。