How this reference was built, what is verified, and the traps to avoid.
Voyages leave every 2 hours on odd JST hours = even UTC hours, and the destination/time sequence is fully deterministic, so the route can be computed from a Unix timestamp:
vn = floor(unix_ms / 7200000)
Indigo: INDIGO[(88 + vn) % 144]
Ruby: RUBY[vn % 144]
Both cycles are 144 voyages = 12 days. Indigo's day-blocks rotate one left each day; Ruby is a flat 144-entry table of 9 routes.
Bite times are the whiskers of a boxplot over Teamcraft's sample data: compute quartiles with R's type-7 quantile algorithm, then discard samples more than 1.5 × IQR from the median. That makes them a stable “normal range”, not a hard limit — player-tested timings can be tighter.
Ranges are per fish per bait; the underlined bait is the sheet's recommended pick (usually the fish's desynthesis bait, preferring ocean-fishing baits unless the goal is Fisher's Intuition).
☀️🌅🌙 mark the times of day a fish can be caught. Indigo stops are labelled by time; on Ruby the time varies by route, so the availability column tells you what still bites when a stop lands on a different hour.
Scope: built for private use — English names only, no localised strings.