May 10, 2026

Phantom Sailings Hidden

When a cruise line reassigns an existing departure to a new itinerary code, the API stops returning the old code and its prices freeze in our database -- but the old sailings row stays around forever, showing up as a duplicate of the active one. Across all lines, this had accumulated to 101 future phantom sailings.

A daily job now hides these. The rule is intentionally conservative: it only acts when a sibling sailing has

  • the same cruise line, ship, start date, and nights count, AND
  • is at least 30 days fresher, AND
  • is itself priced within the last 30 days.

The same-nights match is the critical safeguard. Cruise lines legitimately sell same-day multi-product offerings of different lengths -- Princess "Grand Adventure" back-to-back suffixes, Royal back-to-back transatlantics, and Ovation Alaska sells 7/9/10/11/12/13-night variants that all depart Vancouver on the same date as separate sailing records. One ship physically can't run two itineraries of the same length on the same day, though, so same-nights pairs are tombstones and we can safely hide the older one.

The Instant Offer matcher also got tightened to include nights in its join -- without that, an IOS row was fanning out across the Ovation Alaska variants.