mirror of
https://github.com/BigBodyCobain/Shadowbroker.git
synced 2026-05-28 10:01:31 +02:00
5e6bb8511a
Replace the dated editorial fallback positions baked into the registry with a one-shot seed file + persistent observation cache. The user's runtime cache now reflects what THIS install has actually observed, not what USNI published on March 9, 2026. A year from now, the cache holds a year of observations and the seed is irrelevant. == #244: dated editorial coordinates out of the registry == CARRIER_REGISTRY no longer carries fallback_lat/lng/heading/desc. Those fields are deleted. The registry is now identity + homeport only. New file: backend/data/carrier_seed.json - Read-only, shipped with every release. - Used ONCE on first-ever startup to bootstrap carrier_cache.json. - Each entry stamped with position_confidence="seed" and the actual as-of date (2026-03-09), NOT now(). == #245: approximate confidence for headline-derived positions == _parse_carrier_positions_from_news() now stamps every GDELT-derived entry with position_confidence="approximate" so the UI knows the coordinate is a region-centroid match, not a precise observation. After the freshness window the label rolls over to "stale_approximate" so old-and-imprecise is distinguishable from recent-and-imprecise. The article's actual seendate is used as position_source_at instead of now(), so the "last reported X days ago" badge is honest. == #246: freshness is labelling, not eviction == The cache always preserves the last position the system observed, forever. What changes is the position_confidence label: - within configurable window (default 14d, env-overridable via SHADOWBROKER_CARRIER_FRESHNESS_DAYS) -> "recent" - older -> "stale" - seed-bootstrap entries that were never refreshed -> "seed" - homeport defaults (carrier added post-install) -> "homeport_default" - headline-derived (any age, fresh) -> "approximate" - headline-derived (older than window) -> "stale_approximate" The position itself never reverts to the seed or the registry. The user always sees the last position the system observed. Per the user's explicit guidance: "from there have it be the last position the user has logged the carriers that way a year from now it doesnt revert to where the ships are today". == Other improvements == - CACHE_FILE moved to backend/data/carrier_cache.json so it lives in the volume-mounted dir under Docker compose. Previously it was at /app/carrier_cache.json which got wiped on every container restart (pre-existing bug). - Atomic cache write (temp + os.replace) so a crash mid-write does not leave a truncated cache file. == Public API shape == Every carrier object the API emits now includes: - position_confidence: seed | recent | stale | approximate | stale_approximate | homeport_default - position_source_at: ISO timestamp of when the underlying source was observed (NOT now()) - is_fallback: convenience boolean for the UI; true when the confidence is seed/stale/stale_approximate/ homeport_default Existing fields (estimated, source, source_url, last_osint_update, name, type, lat, lng, country, desc, wiki) are preserved exactly so the current ShipPopup frontend renders unchanged. last_osint_update now reflects position_source_at instead of now(), which is what the existing "last reported MM/DD" badge always meant to show. Tests: backend/tests/test_carrier_tracker_quality.py — 17 tests covering seed bootstrap, subsequent-startup ignoring seed, no-seed/ no-cache homeport fallback, registry no longer has fallback fields, freshness window labelling + env override, "year-old cache entry keeps its position, only the label flips" regression, approximate confidence for headline matches, GDELT seendate ISO parser, public response shape backward compat. Credit: tg12 (external security audit, three P1/P2 issues).
121 lines
4.6 KiB
JSON
121 lines
4.6 KiB
JSON
{
|
|
"_meta": {
|
|
"as_of": "2026-03-09",
|
|
"source": "USNI News Fleet & Marine Tracker",
|
|
"source_url": "https://news.usni.org/2026/03/09/usni-news-fleet-and-marine-tracker-march-9-2026",
|
|
"note": "One-shot bootstrap for first-run carrier positions. Once carrier_cache.json exists in the runtime data volume, this seed file is never read again. All subsequent updates come from GDELT (and any future sources) and are written to carrier_cache.json. A year from now, your runtime cache reflects whatever your install has observed since first launch — not these snapshot positions."
|
|
},
|
|
"carriers": {
|
|
"CVN-68": {
|
|
"lat": 47.5535,
|
|
"lng": -122.6400,
|
|
"heading": 90,
|
|
"desc": "Bremerton, WA (Maintenance)",
|
|
"source": "USNI News Fleet & Marine Tracker (seed, as of 2026-03-09)",
|
|
"source_url": "https://news.usni.org/category/fleet-tracker",
|
|
"position_source_at": "2026-03-09T00:00:00Z",
|
|
"position_confidence": "seed"
|
|
},
|
|
"CVN-76": {
|
|
"lat": 47.5580,
|
|
"lng": -122.6360,
|
|
"heading": 90,
|
|
"desc": "Bremerton, WA (Decommissioning)",
|
|
"source": "USNI News Fleet & Marine Tracker (seed, as of 2026-03-09)",
|
|
"source_url": "https://news.usni.org/category/fleet-tracker",
|
|
"position_source_at": "2026-03-09T00:00:00Z",
|
|
"position_confidence": "seed"
|
|
},
|
|
"CVN-69": {
|
|
"lat": 36.9465,
|
|
"lng": -76.3265,
|
|
"heading": 0,
|
|
"desc": "Norfolk, VA (Post-deployment maintenance)",
|
|
"source": "USNI News Fleet & Marine Tracker (seed, as of 2026-03-09)",
|
|
"source_url": "https://news.usni.org/category/fleet-tracker",
|
|
"position_source_at": "2026-03-09T00:00:00Z",
|
|
"position_confidence": "seed"
|
|
},
|
|
"CVN-78": {
|
|
"lat": 18.0,
|
|
"lng": 39.5,
|
|
"heading": 0,
|
|
"desc": "Red Sea — Operation Epic Fury (USNI Mar 9)",
|
|
"source": "USNI News Fleet & Marine Tracker (seed, as of 2026-03-09)",
|
|
"source_url": "https://news.usni.org/category/fleet-tracker",
|
|
"position_source_at": "2026-03-09T00:00:00Z",
|
|
"position_confidence": "seed"
|
|
},
|
|
"CVN-74": {
|
|
"lat": 36.98,
|
|
"lng": -76.43,
|
|
"heading": 0,
|
|
"desc": "Newport News, VA (RCOH refueling overhaul)",
|
|
"source": "USNI News Fleet & Marine Tracker (seed, as of 2026-03-09)",
|
|
"source_url": "https://news.usni.org/category/fleet-tracker",
|
|
"position_source_at": "2026-03-09T00:00:00Z",
|
|
"position_confidence": "seed"
|
|
},
|
|
"CVN-75": {
|
|
"lat": 36.0,
|
|
"lng": 15.0,
|
|
"heading": 0,
|
|
"desc": "Mediterranean Sea deployment (USNI Mar 9)",
|
|
"source": "USNI News Fleet & Marine Tracker (seed, as of 2026-03-09)",
|
|
"source_url": "https://news.usni.org/category/fleet-tracker",
|
|
"position_source_at": "2026-03-09T00:00:00Z",
|
|
"position_confidence": "seed"
|
|
},
|
|
"CVN-77": {
|
|
"lat": 36.5,
|
|
"lng": -74.0,
|
|
"heading": 0,
|
|
"desc": "Atlantic — Pre-deployment workups (USNI Mar 9)",
|
|
"source": "USNI News Fleet & Marine Tracker (seed, as of 2026-03-09)",
|
|
"source_url": "https://news.usni.org/category/fleet-tracker",
|
|
"position_source_at": "2026-03-09T00:00:00Z",
|
|
"position_confidence": "seed"
|
|
},
|
|
"CVN-70": {
|
|
"lat": 32.6840,
|
|
"lng": -117.1290,
|
|
"heading": 180,
|
|
"desc": "San Diego, CA (Homeport)",
|
|
"source": "USNI News Fleet & Marine Tracker (seed, as of 2026-03-09)",
|
|
"source_url": "https://news.usni.org/category/fleet-tracker",
|
|
"position_source_at": "2026-03-09T00:00:00Z",
|
|
"position_confidence": "seed"
|
|
},
|
|
"CVN-71": {
|
|
"lat": 32.6885,
|
|
"lng": -117.1280,
|
|
"heading": 180,
|
|
"desc": "San Diego, CA (Maintenance)",
|
|
"source": "USNI News Fleet & Marine Tracker (seed, as of 2026-03-09)",
|
|
"source_url": "https://news.usni.org/category/fleet-tracker",
|
|
"position_source_at": "2026-03-09T00:00:00Z",
|
|
"position_confidence": "seed"
|
|
},
|
|
"CVN-72": {
|
|
"lat": 20.0,
|
|
"lng": 64.0,
|
|
"heading": 0,
|
|
"desc": "Arabian Sea — Operation Epic Fury (USNI Mar 9)",
|
|
"source": "USNI News Fleet & Marine Tracker (seed, as of 2026-03-09)",
|
|
"source_url": "https://news.usni.org/category/fleet-tracker",
|
|
"position_source_at": "2026-03-09T00:00:00Z",
|
|
"position_confidence": "seed"
|
|
},
|
|
"CVN-73": {
|
|
"lat": 35.2830,
|
|
"lng": 139.6700,
|
|
"heading": 180,
|
|
"desc": "Yokosuka, Japan (Forward deployed)",
|
|
"source": "USNI News Fleet & Marine Tracker (seed, as of 2026-03-09)",
|
|
"source_url": "https://news.usni.org/category/fleet-tracker",
|
|
"position_source_at": "2026-03-09T00:00:00Z",
|
|
"position_confidence": "seed"
|
|
}
|
|
}
|
|
}
|