fix(recent-imagery): reject absent box edges instead of inventing zero degrees

This commit is contained in:
Rudy Celekli committed 2026-10-14 20:11:19 -04:00
1 parent 0265ad4c19
commit c5ac24b600
4 files changed
+33 -6

No files matched your search

+1
View File
@@ -32,6 +32,7 @@
- Tool string length validation counts Unicode characters correctly, including characters outside the basic multilingual plane.
- Director timeline seeks cross the dateline along the short longitude arc.
- Recent Imagery refuses missing bounding-box edges instead of interpreting them as zero coordinates.
- Treat explicitly current, complete empty vessel coverage as a successful update,
clearing obsolete contacts while retaining stale or incomplete snapshots.
+5
View File
@@ -5326,3 +5326,8 @@ datacenters, dams and the Nepal locator retain that shared credit while displaye
Military fragments stitch by source identity. Different mapped parcels merge only
when their footprints touch or contain one another, never across a seam tolerance gap.
### fix(recent-imagery): reject absent box edges instead of inventing zero degrees
Reject absent, blank and boolean edges before numeric conversion while retaining valid finite numbers and numeric strings. Invalid boxes remain explicit invalid results instead of false geometry.
@@ -0,0 +1,16 @@
import test from 'node:test';
import assert from 'node:assert/strict';
import { validateBox, boxCentre } from './model.js';
test('missing imagery edges do not turn into invented zero coordinates', () => {
for (const value of [null, undefined, '', ' ', false, true]) {
const box = { west: value, south: 0, east: 1, north: 1 };
assert.equal(validateBox(box).ok, false);
assert.equal(validateBox(box).reason, 'invalid');
assert.equal(boxCentre(box), null);
}
assert.equal(validateBox({ west: 0, south: 0, east: 1, north: 1 }).ok, true);
assert.equal(
validateBox({ west: '0', south: '0', east: '1', north: '1' }).ok,
true,
);
});
+11 -6
View File
@@ -77,12 +77,17 @@ const pad2 = (value) => String(value).padStart(2, '0');
*/
function normalizeBox(box) {
if (!box || typeof box !== 'object') return null;
const [west, south, east, north] = [
box.west,
box.south,
box.east,
box.north,
].map(Number);
const edges = [box.west, box.south, box.east, box.north];
if (
edges.some(
(value) =>
value == null ||
typeof value === 'boolean' ||
(typeof value === 'string' && !value.trim()),
)
)
return null;
const [west, south, east, north] = edges.map(Number);
if (![west, south, east, north].every(Number.isFinite)) return null;
return {
west,