Summary
Leftovers after PR #169 (merged as 2c7fbd6c), which fixed items 1–4 of #150. Item 5 of #150 was not in scope, and the independent review of #169 found three small P3 gaps. None is a regression from #169. Line numbers refer to master 2c7fbd6c.
Relates to #150, #169.
1. Analytics warm-up window vs. frontend retry (item 5 of #150)
Since #145, the RF/Topology/Channels endpoints answer 503 until the whole background load has finished, capped by the 60 s force-open. The frontend only retries for about 30 s, so on a slow startup a user can see the error state before the data is ready.
- Fix: keep retrying until the server stops answering 503, honouring
Retry-After. Alternatively, show a "still loading" state instead of an error.
- Test: a delayed background load longer than 30 s. The page must end up showing data, not an error.
2. Drawer close button contrast in some customizer presets (P3)
#169 moved .nav-drawer-header onto --nav-bg2. The title (--nav-text) now passes everywhere, at 6.39:1 or better. The close button uses --nav-text-muted (public/nav-drawer.css ~94/127), and in four presets from customize-v2.js it stays below 4.5:1 against --nav-bg2:
| Preset |
Contrast |
| forest / light |
3.38 |
| forest / dark |
4.05 |
| sunset / dark |
3.03 |
| mono / dark |
3.67 |
All other preset/theme combinations measure 4.95 or more. The same palette weakness already exists in the navbar.
- Fix: give the close button
--nav-text, or adjust the four presets' muted colour.
- Test: extend the contrast step in
test-nav-drawer-1064-e2e.js to iterate over the presets, and require 4.5:1 for both the title and the close button.
3. IATA drop throttle: oldest refresh after a sweep is untested (P3)
In cmd/ingestor/iata_drop_warn.go (~105), removing t.oldest = oldest after the sweep leaves every IATA test green. The cost is performance only: a full table scan on each drop instead of an amortised one. Correctness is not affected.
4. RX Coverage: fitToObserver is not sequence-guarded (P3, pre-existing)
fitToObserver() (public/rx-coverage.js ~237) fetches and then calls fitBounds. #169's request sequence does not guard it, so if you switch days, or probably the observer or "All", while that fetch is in flight, the stale response still moves the map. This is the same class of bug as item 3 of #150.
Acceptance criteria
- Each item has a test that fails on master
2c7fbd6c and passes with the fix.
- Colours come from CSS variables only, with no hardcoded hex outside
:root.
- Fork guards in
deploy.yml are unchanged: 9 × github.repository == 'Kpa-clawbot/CoreScope'.
Summary
Leftovers after PR #169 (merged as
2c7fbd6c), which fixed items 1–4 of #150. Item 5 of #150 was not in scope, and the independent review of #169 found three small P3 gaps. None is a regression from #169. Line numbers refer to master2c7fbd6c.Relates to #150, #169.
1. Analytics warm-up window vs. frontend retry (item 5 of #150)
Since #145, the RF/Topology/Channels endpoints answer 503 until the whole background load has finished, capped by the 60 s force-open. The frontend only retries for about 30 s, so on a slow startup a user can see the error state before the data is ready.
Retry-After. Alternatively, show a "still loading" state instead of an error.2. Drawer close button contrast in some customizer presets (P3)
#169 moved
.nav-drawer-headeronto--nav-bg2. The title (--nav-text) now passes everywhere, at 6.39:1 or better. The close button uses--nav-text-muted(public/nav-drawer.css~94/127), and in four presets fromcustomize-v2.jsit stays below 4.5:1 against--nav-bg2:All other preset/theme combinations measure 4.95 or more. The same palette weakness already exists in the navbar.
--nav-text, or adjust the four presets' muted colour.test-nav-drawer-1064-e2e.jsto iterate over the presets, and require 4.5:1 for both the title and the close button.3. IATA drop throttle:
oldestrefresh after a sweep is untested (P3)In
cmd/ingestor/iata_drop_warn.go(~105), removingt.oldest = oldestafter the sweep leaves every IATA test green. The cost is performance only: a full table scan on each drop instead of an amortised one. Correctness is not affected.TestProbeNoResweepAfterPartialSweep(partial sweep, then assert no re-sweep before the next deadline) is a template.4. RX Coverage:
fitToObserveris not sequence-guarded (P3, pre-existing)fitToObserver()(public/rx-coverage.js~237) fetches and then callsfitBounds. #169's request sequence does not guard it, so if you switchdays, or probably the observer or "All", while that fetch is in flight, the stale response still moves the map. This is the same class of bug as item 3 of #150.isLive(gen)+ latest-request check that fix: #150 follow-ups (drawer header contrast, Live heat sync, RX days race, IATA interval cap) #169 added for coverage and leaderboard.days, release the response, and assert thatfitBoundsis not called for the stale request.Acceptance criteria
2c7fbd6cand passes with the fix.:root.deploy.ymlare unchanged: 9 ×github.repository == 'Kpa-clawbot/CoreScope'.