Repository navigation
port(upstream#1860): Phosphor icon instead of emoji in the RX coverage header - #28
Merged
Merged
Conversation
… rx-coverage (Kpa-clawbot#1860) ## Summary `public/rx-coverage.js` still carried a literal `🗺️` (U+1F5FA) in the Mobile RX coverage page header — missed by the Kpa-clawbot#1648 emoji → Phosphor migration. Replaced with `ph-map-trifold` from the existing sprite, matching how every other page header renders (`analytics.js`, `home.js`, `node-analytics.js`, `customize-v2.js`). ```diff -'<h2 style="margin:4px 0 2px;font-size:18px">🗺️ Mobile RX coverage</h2>' + +'<h2 style="margin:4px 0 2px;font-size:18px"><svg class="ph-icon" aria-hidden="true"><use href="/icons/phosphor-sprite.svg#ph-map-trifold"/></svg> Mobile RX coverage</h2>' + ``` ## How it got through This is not a gap in the tooling — `test-issue-1648-m6-final-sweep.js` catches it correctly. On current `master` (`a06ac8ac`): ``` ✗ 1 emoji-as-icon violation(s): public/rx-coverage.js:29 [U+1F5FA] '<h2 style="margin:4px 0 2px;font-size:18px">🗺️ Mobile RX coverage</h2>' + ``` The gate is in `test-all.sh` but not in the CI test list in `deploy.yml`, so it never runs. That divergence is filed separately as Kpa-clawbot#1858 — this PR is the concrete defect it let through. ## Test plan - [x] `node test-issue-1648-m6-final-sweep.js` — `✓ lint gate: 0 violations across public/** and cmd/**` (was 1 violation before) - [x] `node test-issue-1648-m6-lint-self.js` — green, including the anti-tautology probe (it requires a clean repo to run at all, so it was failing on master purely as a cascade from the above) - [x] `eslint public/rx-coverage.js` — 0 errors (1 pre-existing `no-unused-vars` warning on `selectedName`, untouched) - [x] `ph-map-trifold` confirmed present in `public/icons/phosphor-sprite.svg` Single-line change, no behaviour change beyond the icon glyph. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: SaarMesh-Bot <300107934+SaarMesh-Bot@users.noreply.github.com> Co-authored-by: Claude <noreply@anthropic.com> (cherry picked from commit a3454e7) Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This was referenced Sep 13, 2026
… rx-coverage (Kpa-clawbot#1860) ## Summary `public/rx-coverage.js` still carried a literal `🗺️` (U+1F5FA) in the Mobile RX coverage page header — missed by the Kpa-clawbot#1648 emoji → Phosphor migration. Replaced with `ph-map-trifold` from the existing sprite, matching how every other page header renders (`analytics.js`, `home.js`, `node-analytics.js`, `customize-v2.js`). ```diff -'<h2 style="margin:4px 0 2px;font-size:18px">🗺️ Mobile RX coverage</h2>' + +'<h2 style="margin:4px 0 2px;font-size:18px"><svg class="ph-icon" aria-hidden="true"><use href="/icons/phosphor-sprite.svg#ph-map-trifold"/></svg> Mobile RX coverage</h2>' + ``` ## How it got through This is not a gap in the tooling — `test-issue-1648-m6-final-sweep.js` catches it correctly. On current `master` (`a06ac8ac`): ``` ✗ 1 emoji-as-icon violation(s): public/rx-coverage.js:29 [U+1F5FA] '<h2 style="margin:4px 0 2px;font-size:18px">🗺️ Mobile RX coverage</h2>' + ``` The gate is in `test-all.sh` but not in the CI test list in `deploy.yml`, so it never runs. That divergence is filed separately as Kpa-clawbot#1858 — this PR is the concrete defect it let through. ## Test plan - [x] `node test-issue-1648-m6-final-sweep.js` — `✓ lint gate: 0 violations across public/** and cmd/**` (was 1 violation before) - [x] `node test-issue-1648-m6-lint-self.js` — green, including the anti-tautology probe (it requires a clean repo to run at all, so it was failing on master purely as a cascade from the above) - [x] `eslint public/rx-coverage.js` — 0 errors (1 pre-existing `no-unused-vars` warning on `selectedName`, untouched) - [x] `ph-map-trifold` confirmed present in `public/icons/phosphor-sprite.svg` Single-line change, no behaviour change beyond the icon glyph. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: SaarMesh-Bot <300107934+SaarMesh-Bot@users.noreply.github.com> Co-authored-by: Claude <noreply@anthropic.com> (cherry picked from commit a3454e7) Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Brings in: - #64: fix(nodes): separate advert timestamps from confirmed relay activity - #48: test(ingestor): reconcile watchdog Stop-test coverage (StopJoinsLoop + StopIsIdempotent), fixing the CI watchdog flake this PR previously hit No conflicts. PR #28's own change (public/rx-coverage.js) is untouched by this merge.
dborup
added a commit
that referenced
this pull request
Sep 19, 2026
dborup
pushed a commit
that referenced
this pull request
Sep 19, 2026
This was referenced Sep 19, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Update 2026-09-19: synced with master after #67
31c2aa8e3869822f79a8414d89277d5552669056(includes fix(packets): keep the Details summary on one line so rows stay bounded #67, the packets Details one-line clamp that resolves the row-height failure seen in the CI integration only: #28 + #50 — do not merge #66 integration).e55810a78f9ea32e29b1b08698c5e5c57b33fe9c, an ordinary merge oforigin/masterinto the previous head6e40de4c(no rebase, no force-push). Feature scope unchanged:public/rx-coverage.js(1 line); the merge only adds master's advance (fix(packets): keep the Details summary on one line so rows stay bounded #67's three files).node --check public/rx-coverage.jsPASS,test-rx-coverage-config-race.jsPASS, emoji sweep now 5 instead of 6 baseline violations (this PR removes the rx-coverage one).test-rx-coverage-escape.jsfails identically on master (stale marker, not run in CI).test-issue-1122-packets-filter-ux-e2e.js6/6 (incl. "Path column row height stays bounded < 60px"),test-issue-1122-details-row-clamp-e2e.js18/18.e55810a7: success. Go Build & Test, Playwright E2E (incl.#1122row height and the clamp test 18/18): success. Docker job success with Buildx/QEMU/GHCR login/metadata/push skipped. Release, Deploy Staging, Badges skipped (fork guards).Split out of #25 (commit
37be79a2there). This branch holds exactly one upstream change so it can be reviewed, tested and reverted on its own.Upstream
a3454e75080800d4ef545e21d2ff987b4563794cgit cherry-pick -xonto masterfda24ca5; upstream authorship kept, and the commit message carries the(cherry picked from commit …)line.public/rx-coverage.js(one line).Problem
The Mobile RX coverage page header still rendered a literal map emoji, missed by the emoji → Phosphor icon migration.
Change
Replaces it with the
ph-map-trifoldicon from the existing Phosphor sprite, matching the other page headers.Adaptation to this fork
None. The cherry-pick applied without conflicts and the changed lines are identical to upstream.
Dependencies and merge order
fda24ca5and needs no other PR from this split.TestPruneOldNeighborMetricsdeterministic). If test(ingestor): make neighbor metrics pruning deterministic #33 lands first, the expected CI failure named below disappears; nothing in this PR depends on it.Verification
Local run of the same commands as CI's “Go Build & Test” job (server tests with
-race), on this branch and on masterfda24ca5under the same conditions (same machine, run one after another):fda24ca5xss-gate-diffchannel-lib-testdecrypt-cli-build-testdockerfile-copy-invariantsdeclare -A), macOS has 3.2; identical on masterstaging-disk-monitorcss-vars-linttest-issue-1375-scope-stats-fetch.jsExactly oneapi('/scope-stats'call exists (the fixed loader) — found 2test-issue-1648-m4-emoji-scan.jsmap.js has 1 emoji/misc-icon hit(s):test-a11y-axe-routes-coverage.jsaxe ROUTES missing analytics tabs (issue #1706): areas, foreign-traffic, wardrivingtest-frontend-helpers.jsfavStar returns empty star for non-favorite: The expression evaluated to a falsy value:,favStar returns filled star for favorite: The expression evaluated to a falsy value:Baseline failures (fail identically on master; not introduced or changed here): see rows marked baseline failure, unchanged.
Browser validation (local, fixture DB, no staging/production): Local Go server (built from master) on the committed E2E fixture DB (freshened, migrated and seeded exactly like CI), serving this branch's
public/, compared side by side with the same server serving master'spublic/. Both servers started withclientRxCoverage.enabled: true(the page is gated on it).#/rx-coverageheader: master renders "🗺️ Mobile RX coverage" (literal emoji). this branch renders the Phosphorph-map-trifoldsprite icon (16×16 px, no emoji) before "Mobile RX coverage". The CARTO "API KEY REQUIRED" tile watermark and "Could not load mobile observers" appear identically on master and are unrelated (CARTO key: open #13).Not run:
eslint(not installed locally; CI installs it on the fly).-race/tests for modules this PR does not touch (unchanged code, identical to master).Expected GitHub CI: “Go Build & Test” is expected to fail on
TestPruneOldNeighborMetrics, which already fails on master (see #25's run). Downstream jobs (Playwright, image build) are therefore skipped. “Deploy Staging” and all GHCR publish steps only run onpushtomasterand cannot run for this PR.Two further ingestor tests have failed intermittently in this split's CI on branches whose
cmd/ingestortree is byte-identical to master (#27, #28), so they can also appear here without being caused by this change:TestBackfillTxLastSeen_ResolvesFromMaxObservationTimestamp: also reproduced locally on unmodified master.TestMQTTStallWatchdog_DisconnectedEscalationThrottled_1749: the suite flake that upstream test(ingestor): join the watchdog loop goroutine instead of only asking it to stop Kpa-clawbot/CoreScope#2003 (also split out of port(upstream): 26 clean upstream fixes — prune batching, /ws limits, observer liveness, watchdog race #25) addresses.GitHub CI result: run 34749200083 on
29ed4265. Go Build & Test: failure; all downstream jobs incl. Deploy Staging skipped. Failed tests:TestPruneOldNeighborMetrics: fails on master, documented baselineTestBackfillTxLastSeen_ResolvesFromMaxObservationTimestamp: intermittent, reproduced on unmodified master locally🤖 Generated with Claude Code
Update — current master 693eb04 (2026-09-17)
The existing PR branch was updated without force-push from
29ed4265toc178df5e. The merge graph preserves the original upstream-attributed commit, incorporates green master693eb045dbb10ecdd4657444134a696f007297e1, and includes the verified local prep commit5c2365e0.The PR diff against current master remains exactly
public/rx-coverage.js.Fresh verification on c178df5
node --check public/rx-coverage.js: PASSnode test-rx-coverage-config-race.js: PASSnode test-issue-1648-m1-emoji-scan.js: PASS#/rx-coverage: PASS — oneph-map-trifoldsprite reference and no map emojigit diff --check: PASStest-rx-coverage-escape.js: FAILS in its source-extraction harness because it cannot locate the row-builder end; the same failure reproduces unchanged on master693eb045No staging, production, deployment, workflow, or auto-merge action was performed. GitHub PR CI: run 35220046384 completed with failure. The only failing test was the known
TestMQTTStallWatchdog_DisconnectedEscalationThrottled_1749suite flake (got 2 invocations); the PR changes onlypublic/rx-coverage.js. Playwright, release, image publication, staging deploy, and badge publication were skipped. No retry or unrelated fix was made.Update — current master 37d82e8 (2026-09-18)
The existing PR branch was updated without force-push from
c178df5eto6e40de4c, an ordinary merge commit. The merge graph incorporates green master37d82e8a1844234e498c0c909d0fb1155ea858d7, which now includes PR #64 (fix(nodes): separate advert timestamps from confirmed relay activity) and PR #48 (watchdog Stop-test coverage:StopJoinsLoop+StopIsIdempotent, fixing theTestMQTTStallWatchdog_DisconnectedEscalationThrottled_1749flake this branch previously hit in CI).The PR diff against current master remains exactly
public/rx-coverage.js(1 line).git diff --checkclean..github/workflows/unchanged by this branch.Fresh verification on 6e40de4
node --check public/rx-coverage.js: PASSTestMQTTStallWatchdog_DisconnectedEscalationThrottled_1749(the previously-blocking watchdog flake),-count=5: PASS 5/5 — confirms port(upstream#2003): join the watchdog loop goroutine in tests #48's fix resolves what blocked this PR's prior CI runnode test-rx-coverage-config-race.js: PASSnode test-rx-coverage-mobile-nav-e2e.js: clean SKIP (no live server in this check — see live verification below, which covers the same ground manually)node test-rx-coverage-escape.js: FAILS —could not locate row-builder end in rx-coverage.js. Reproduced identically on a plain, unmodified checkout of current master (same error, same assertion). Root cause, established (not hypothesis): the test's hardcoded end-marker stringo.nodes + '</span></div>';does not exist verbatim inpublic/rx-coverage.js— the actual row template has a<span class="rxb-rec">…</span>(receptions column) betweeno.nodes's closing</span>and the row's closing</div>, so the literal marker string was never present. This file has been essentially untouched (besides this PR's one line and the initial feature commit) since 2026-06-19; the test's marker appears to predate that structure. Unrelated to this PR's one-line header change, which is nowhere near the row-builder block.clientRxCoverage.enabled: true), desktop (1280×800-class viewport) and mobile (375×812):#/rx-coverageheader renders theph-map-trifoldSVG sprite (<svg class="ph-icon"><use href="/icons/phosphor-sprite.svg#ph-map-trifold">) before "Mobile RX coverage" — no emoji, sprite request 200 OK — confirmed identically at both sizes. Also confirmed "Coverage" is reachable from the mobile bottom-nav "More" sheet (the surfacetest-rx-coverage-mobile-nav-e2e.jschecks). The CARTO "API key required" tile watermark and "Could not load mobile observers" (two unrelated 500s on/api/rx-coverageand/api/rx-leaderboardagainst this ad-hoc local fixture) are pre-existing environment artifacts of the throwaway local DB, not code introduced or changed by this PR, which touches nocmd/servercode.No staging, production, deployment, workflow, or auto-merge action was performed. Local test processes and temp files/DBs cleaned up after verification.
🤖 Generated with Claude Code