Probed gpsjam.org per SPEC2 §7's investigate-first rule. Findings: the data is
real and clean (https://gpsjam.org/data/<YYYY-MM-DD>-h3_4.csv, columns
hex,count_good_aircraft,count_bad_aircraft, H3 res-4, published ~04:00 UTC for
the prior day). But two blockers: no Access-Control-Allow-Origin (browser can't
fetch directly — would need a serve.py proxy), and ambiguous licensing (no
stated terms; derived from ADS-B Exchange, which is non-commercial and
protective of redistribution). Per spec — ambiguous licensing → document and
stop, don't scrape around an unwilling origin — the layer is NOT built; the full
findings are recorded in the README roadmap so John can decide after getting
permission from John Wiseman / ADS-B Exchange.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1. Military callsigns (aircraft.js): callsigns matching CONFIG.aircraft.
militaryPrefixes tint red regardless of altitude band and bump larger. New
"Military filter" HUD row (default off) shows only military aircraft when on;
status "N military of M". Pick overlay shows Military/Civil class.
2. Satellite ground track (satellites.js): selecting a satellite draws its
sub-satellite path (height 0, ±half orbit around now) as a dashed polyline in
the sat's colour; deselect hides it; one track at a time. Recomputed on
demand from the satrec (no upfront precompute of 97 tracks).
3. Shareable URL state (main.js + ui.js): camera / mode / layer toggles / clock
offset serialize to location.hash (replaceState, 1 s cadence, only on change)
and are restored on boot; malformed hashes ignored silently.
4. Screenshot endpoint (serve.py): dev-only POST snap?name= writes a base64 PNG
body to docs/<name>.png (name sanitized to [a-z0-9-], can't escape docs/).
Captured docs/screenshot-data.png + screenshot-photo.png (render() called
synchronously before toDataURL — the preserveDrawingBuffer pitfall).
README rewritten for Wave 2: quakes/fires layer rows (marked REAL), replay,
shared cache, shareable links, ground tracks, military, screenshots, updated
architecture + roadmap.
Verified in browser: 11 military of 6062 + filter; ground track 180 pts on
select / hidden on deselect; URL round-trips camera+mode+layers+clock; both
screenshots written as valid 1280x720 PNGs; subpath audit clean.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Applied 4 confirmed findings from the multi-agent review (5th was a documented
deliberate deviation):
- aircraft: self-healing visibilitychange listener — the live feed no longer
stalls permanently after tab hide->show while the clock is paused (MAJOR)
- SPEC §9: nginx proxy_pass with $is_args$args needs a resolver or prod 502s
while nginx -t still passes — documented + hardened the deploy step (MAJOR)
- ships: live-AIS map now evicts true least-recently-updated (move-to-end),
not oldest-inserted
- ships: corrected inverted Hormuz lane direction labels (tracks with
decreasing longitude sail west/inbound, not east)
- README: full data-source + attribution table, real-vs-DEMO breakdown,
architecture, roadmap
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
SPEC.md is the complete execution plan: architecture, verified data-feed
CORS probes, per-layer component specs, verification protocol, and the
gated partly.party/godsigh deployment phase.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>