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_date
  • latest_prediction_at
  • has_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側の受信先を認証可能な経路で確認する必要がある。