背景
stationapi/src/import.rs の build_stop_route_mapping() 内、prev_chain / next_chain の再帰 CTE は再帰深さを depth < 10 で打ち切っている(commit d6562e0 で導入)。
WHERE pc.depth < 10
AND von2.prev_stop_id IS NOT NULL
AND NOT pc.current_stop_id::TEXT = ANY(pc.visited)
...
visited 配列でサイクル防止は出来ているが、上限が固定値 10 なのでメイン系統に戻るまでに 11 停留所以上ある variant 系の経路ではアンカー解決に失敗し、estimated_seq が末尾フォールバック値(mtms.max_seq + 9999)に落ちる。結果、長い出入庫便や枝線をもつ系統で停留所の順序が末尾に固まる別パターンの不具合が再発し得る。
改善案
固定値ではなく、route ごとの停留所数(またはサイクル防止用 visited の長さ)から動的に上限を設定する。例:
WHERE pc.depth < (
SELECT COUNT(*) FROM gtfs_stop_times gst
JOIN gtfs_trips gt ON gt.trip_id = gst.trip_id
WHERE gt.route_id = pc.route_id
)
または、サイクル防止だけに任せて再帰深さ制限を撤廃(パフォーマンスは要計測)。
関連
背景
stationapi/src/import.rsのbuild_stop_route_mapping()内、prev_chain/next_chainの再帰 CTE は再帰深さをdepth < 10で打ち切っている(commit d6562e0 で導入)。visited配列でサイクル防止は出来ているが、上限が固定値 10 なのでメイン系統に戻るまでに 11 停留所以上ある variant 系の経路ではアンカー解決に失敗し、estimated_seqが末尾フォールバック値(mtms.max_seq + 9999)に落ちる。結果、長い出入庫便や枝線をもつ系統で停留所の順序が末尾に固まる別パターンの不具合が再発し得る。改善案
固定値ではなく、route ごとの停留所数(またはサイクル防止用
visitedの長さ)から動的に上限を設定する。例:または、サイクル防止だけに任せて再帰深さ制限を撤廃(パフォーマンスは要計測)。
関連
shape_dist_traveled跨 trip 比較バグ)と独立しているため別 issue として起票。stationapi/src/import.rs:1736-1748,1782-1793