Quantitative scope
The saved Árbol Grande extraction contains 108 position records spanning January 31 to March 29, 2026. Its largest adjacent timestamp gap is about 164.9 hours. These quantities describe the supplied file. They do not establish continuous tracking, a vessel's location between records, or the source of contamination.
The position sample, calculated summary, and source manifest identify the inputs. The manifest distinguishes the repository revision from hashes of inspected working-tree files. Preserve both when comparing a later extraction.
Pipeline and independent clocks
Saved vessel events → normalized positions → sorted vessel timelines
Cerulean detections and satellite integrations → map layers
Timeline + layers → React/MapLibre display
External API requests → Express proxy with server-side credentials
Event time, satellite acquisition time, detection time, and the display slider are different clocks. Moving the slider does not mean a new satellite image was acquired at every displayed instant. A spatial comparison needs the timestamp and provenance of each layer.
The combined-track builder groups events by SSVID and can emit the same event position at its start and end. It also deduplicates by hour, with selection depending on processing order. Those anchors are not necessarily independent location observations. Árbol Grande uses its separate saved file and is excluded from that combined output.
Why the dot moves through missing data
For two saved points, the display computes the elapsed fraction and interpolates latitude and longitude:
f = (display_time - t0) / (t1 - t0)
lon = lon0 + f * (lon1 - lon0)
lat = lat0 + f * (lat1 - lat0)
A six-day gap can therefore look like continuous travel. The formula supplies a straight path in coordinate space; it does not recover the actual route or changing speed. The inspected helper hides the vessel before its first point and retains the last position for at most twelve hours afterward. Those are display policies, not observations.
Coordinate normalization also needs review. A truthiness check can reject zero latitude or longitude even though zero is valid. The Gulf study area may not expose that defect, but a general pipeline should validate finite values and geographic ranges explicitly.
Recompute the gap
Download the position sample as showcase.json. This calculation uses the saved timestamps, not the animation:
import json
from datetime import datetime
from pathlib import Path
sample = json.loads(Path('showcase.json').read_text())
times = sorted(datetime.fromisoformat(p['t'].replace('Z', '+00:00'))
for p in sample['points'])
gaps = [(b - a).total_seconds() / 3600
for a, b in zip(times, times[1:])]
print(len(times), times[0].isoformat(), times[-1].isoformat())
print(max(gaps))
The timezone-aware subtraction compares instants. A refreshed provider response can change the count and gap, which is why the saved source hash belongs with the result. Repeated coordinates and event endpoints should remain distinguishable from newly observed positions.
Interpretation and review
A radar detection is a feature to investigate, with possible lookalikes and false positives. A missing AIS interval does not establish deliberate transmitter disabling. Proximity among a vessel, pipeline, and detection does not assign responsibility. Those claims require additional evidence with compatible locations and times.
The technical article links the dated statements and investigation narrative separately from these calculations. The methodology report preserves the quantitative review. This report makes no new attribution about the spill.
For a stronger inspection, distinguish observed points from interpolated segments, expose gap duration, and retain acquisition times beside each external layer. Review normalization and deduplication before interpreting apparent stops or motion. The saved records support count, range, and gap calculations; the video shows how the application presents them.