mirror of
https://github.com/bilawalsidhu/gods-eye-view.git
synced 2026-11-05 19:04:02 +00:00
Merge pull request #1043 from rudycelekli/contrib/gods-022-firms-calendar-validity-20261011-reviewed
fix(firms): reject impossible acquisition days in CSV parsing
This commit is contained in:
4 files changed
+44
-3
No files matched your search
+13
-1
@@ -24,7 +24,19 @@
|
|||||||
the five borough cores load and `CCTV_NYC_MAX_SOURCES` changes the cap. The catalog-wide ceiling is
|
the five borough cores load and `CCTV_NYC_MAX_SOURCES` changes the cap. The catalog-wide ceiling is
|
||||||
unchanged; extra cameras share it round-robin with the other packs.
|
unchanged; extra cameras share it round-robin with the other packs.
|
||||||
|
|
||||||
- Cancelled catalog queries refuse execution when their signal is already aborted.
|
- Street Level counts unique tiles before ranking so overlapping dateline halves
|
||||||
|
in polar views do not waste slots in the 16-tile overview budget.
|
||||||
|
|
||||||
|
- Directions no longer shows a truncation notice for a route with exactly 200
|
||||||
|
turns, and a roundabout at the 200th turn keeps its exit distance.
|
||||||
|
|
||||||
|
- Weather records keep missing conditions unknown and refuse summaries without a measured temperature.
|
||||||
|
|
||||||
|
- 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.
|
||||||
|
|
||||||
|
- Reject impossible FIRMS acquisition calendar days in the CSV parser before trailing-24-hour filtering.
|
||||||
|
|
||||||
- Treat explicitly current, complete empty vessel coverage as a successful update,
|
- Treat explicitly current, complete empty vessel coverage as a successful update,
|
||||||
clearing obsolete contacts while retaining stale or incomplete snapshots.
|
clearing obsolete contacts while retaining stale or incomplete snapshots.
|
||||||
|
|||||||
@@ -1467,7 +1467,7 @@ accessible name remains "Don't show this again". Control behavior is unchanged.
|
|||||||
|
|
||||||
## FIRMS source status
|
## FIRMS source status
|
||||||
|
|
||||||
FIRMS ingestion and adaptation require explicit finite coordinates within WGS84 ranges; genuine zero coordinates remain valid and admitted detection indices stay sequential.
|
The FIRMS CSV parser rejects impossible acquisition calendar dates before the proxy filters records to the trailing 24 hours, while retaining valid UTC acquisition times.
|
||||||
|
|
||||||
The FIRMS proxy records source success after appending its rows. If aggregation
|
The FIRMS proxy records source success after appending its rows. If aggregation
|
||||||
throws, that source reports failure without a contradictory success entry.
|
throws, that source reports failure without a contradictory success entry.
|
||||||
|
|||||||
@@ -0,0 +1,23 @@
|
|||||||
|
import test from 'node:test';
|
||||||
|
import assert from 'node:assert/strict';
|
||||||
|
import { acquisitionMsUtc } from './firmsCsv.js';
|
||||||
|
test('FIRMS acquisition dates cannot roll into a different calendar day', () => {
|
||||||
|
for (const [date, time] of [
|
||||||
|
['2026-02-30', '1200'],
|
||||||
|
['2026-04-31', '1200'],
|
||||||
|
['2026-13-01', '1200'],
|
||||||
|
['2026-07-16junk', '1200'],
|
||||||
|
['2026-07-16', '2400'],
|
||||||
|
['2026-07-16', '1260'],
|
||||||
|
['2026-07-16', null],
|
||||||
|
['2026-07-16', ''],
|
||||||
|
]) {
|
||||||
|
assert.ok(Number.isNaN(acquisitionMsUtc(date, time)), `${date}:${time}`);
|
||||||
|
}
|
||||||
|
for (const [date, time, expected] of [
|
||||||
|
['2024-02-29', '45', Date.UTC(2024, 1, 29, 0, 45)],
|
||||||
|
['2026-07-16', '0', Date.UTC(2026, 6, 16)],
|
||||||
|
]) {
|
||||||
|
assert.equal(acquisitionMsUtc(date, time), expected);
|
||||||
|
}
|
||||||
|
});
|
||||||
@@ -163,7 +163,13 @@ export function acquisitionMsUtc(acqDate, acqTime) {
|
|||||||
minutes > 59
|
minutes > 59
|
||||||
)
|
)
|
||||||
return NaN;
|
return NaN;
|
||||||
return Date.UTC(year, month - 1, day, hours, minutes);
|
const ms = Date.UTC(year, month - 1, day, hours, minutes);
|
||||||
|
const parsed = new Date(ms);
|
||||||
|
return parsed.getUTCFullYear() === year &&
|
||||||
|
parsed.getUTCMonth() === month - 1 &&
|
||||||
|
parsed.getUTCDate() === day
|
||||||
|
? ms
|
||||||
|
: NaN;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in new issue
Block a user