Compare commits

...
Sign in to create a new pull request.

2 commits

Author SHA1 Message Date
c3f0443a2b Merge pull request 'feat(map): dark-hull v1 Hormuz SAR+AIS visual fusion' (#30) from feat/dark-hull-v1-hormuz-fusion into feat/chokepoint-preset-buttons
Reviewed-on: #30
2026-08-29 17:18:22 -04:00
Sirius DevOps
c405005099 feat(map): dark-hull v1 Hormuz SAR+AIS candidate note
Eyeballs fusion: Hormuz tap already enables Sentinel-1 SAR and
vesselapi AIS together; add the HUD note that a bright radar return
without a boat icon is a candidate, not a detection.
2026-08-29 14:20:04 -04:00
2 changed files with 23 additions and 0 deletions

View file

@ -868,6 +868,7 @@
</div>
<div class="lp-opacity">Opacity <input type="range" id="lp-sentinel-opacity" min="5" max="100" value="80" oninput="setSentinelOpacity(this.value)"><b id="lp-sentinel-val">80%</b></div>
<div class="lp-note">Cloud-penetrating C-band. Last 7 days, viewport bbox. Tiles from same-origin TiTiler — not fetched on load.</div>
<div class="lp-note">SAR + AIS: bright radar with no boat icon is a <em>candidate</em>, not a detection.</div>
</div>
<div class="lp-layer">
<div class="lp-row">

View file

@ -76,3 +76,25 @@ def test_phone_chokepoints_use_select_not_buttons():
mobile = HTML.split("@media (max-width: 820px)")[1].split("@media (prefers-reduced-motion")[0]
assert "#chokepoint-select { display: block; }" in mobile
assert ".chokepoint-btns { display: none; }" in mobile or "#chokepoint-label, .chokepoint-btns { display: none; }" in mobile
def test_dark_hull_v1_sar_ais_candidate_note():
sar = HTML.split('id="sentinel-1-sar"')[1].split('class="lp-layer"')[0]
assert "SAR + AIS:" in sar
assert "candidate" in sar
assert "not a detection" in sar
assert sar.count('class="lp-note"') >= 2
def test_hormuz_tap_enables_sar_and_vesselapi_src():
apply = HTML.split("function applyChokepoint")[1].split("function currentBBox")[0]
assert "p.vesselapi ? 'vesselapi' : ''" in apply
assert "vChk.checked = true" in apply
assert "vesselsOn = true" in apply
assert "p.id === 'hormuz' || p.vesselapi" in apply
assert "sChk.checked = true" in apply
assert "sentinelOn = true" in apply
assert "if (vesselsOn) loadVessels();" in apply
assert "if (sentinelOn) loadSentinel1();" in apply
load = HTML.split("async function loadVessels")[1].split("async function toggleStorms")[0]
assert "&src=${encodeURIComponent(vesselSrcPref)}" in load or "src=${encodeURIComponent(vesselSrcPref)}" in load