diff --git a/CHANGELOG.md b/CHANGELOG.md index 527e1a29a..29dbedfaa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +- CCTV cameras whose bearing is a guess now say so. Packs mark bearings derived + from a hash of the camera id as `headingConfidence: 'low'`, but nothing read the + flag, so roughly 70% of a default catalog rendered like surveyed facings. The HUD + now reads `HDG n° (ESTIMATED)` and the coverage wireframe draws dashed; manual + calibrations and curated poses are never marked estimated (bassem chagra, #643). + - Report which upstream declined a Street Traffic road load. The layer row now reads `Overpass rate-limited`, `Overpass timed out`, or `Overpass refused the road query (HTTP 406)` instead of a general diff --git a/docs/CURRENT-STATE.md b/docs/CURRENT-STATE.md index 59f021aba..fdb42fc0c 100644 --- a/docs/CURRENT-STATE.md +++ b/docs/CURRENT-STATE.md @@ -3384,6 +3384,12 @@ silently demoting every later lookup for the session. - **The DENSE chip reports the dense LOAD, not the catalog param.** The param flips synchronously while the Starlink shell takes seconds to arrive over a chunked load, and CelesTrak 502s that feed regularly. So the chip reads `DENSE ···` (busy, disabled) while loading, ACTIVE only once dense points are actually on screen, and `DENSE ✕` with the reason on hover when the load fails — a failure also reverts `catalog` to `core`, drops any partial chunk, and leaves the chip clickable to retry. A load is judged by points added, not by HTTP status: a 200 carrying an empty body, a passed-through HTML error page, or only TLEs the core catalog already owns fails with the same revert semantics as a 502. Any explicit request for `core` clears a latched error even when the mode does not change, so a Space Missions restore of an already-core snapshot never leaves the user with a failure they did not cause. Because the load settles asynchronously, the layer pushes a re-render through the optional `setRowControlsListener()` hook; nothing else would repaint that row before the 5-minute catalog refresh, so the count and legend would otherwise sit stale. - **A dependency owner takes the row with it.** Space Missions borrows this layer for TLE lookup with `showPoints:false`; while points are hidden the layer returns empty row controls, so the legend never describes an empty sky and the chip cannot accept a write that the owner's restore would silently revert. - The detection-overlay record cache (`_detectionObjects`) is cleared with the catalog on every rebuild: it stamps id/class at creation only, and a rebuild can re-tag a satellite when a partial CelesTrak outage changes which group wins dedupe. +- **CCTV estimated bearings:** a camera whose pack marks `headingConfidence: 'low'` (the id-hash + `fallbackHeadingFromId` bearing) shows `HDG n° (ESTIMATED)` in the HUD and draws its coverage + wireframe dashed; colours, widths and active/idle emphasis are unchanged. A manual calibration + (`calSource: 'manual'`) or curated pose (`poseSource: 'curated'`) is never presented as + estimated, matching the CAL badge. Public camera state carries `headingConfidence` and + `headingEstimated` (`src/layers/cctv/headingConfidence.js`, #639). - **FIRMS**: no ground clamping (zero 3D-tiles height sampling), ≤18 screen-decluttered ambient labels, click-to-inspect detail card, 2.5k/3k sprite budgets viewport-clipped by FRP. - **CCTV v2 foundation:** a pitched frustum wireframe (4 corner rays + far-cap rectangle) with a monitor plane at the frustum's