feat(app,web): name a relay on the map the way the app does - #733
Conversation
|
Review before merge: one point to change, one test to add, small ones. Found by reading the code at 101faaa, not run. 1. In "all" mode the ticker can fetch the registry twice per 5 s poll (change requested) 2. The in-place sender-cell rewrite has no deterministic test (change requested) 3. Small ones
|
The map's ticker and point popup printed a name on a 1 to 3-byte relay id as it came, without the guess mark, and never took a name from the registry. How a name is printed is now one file on both surfaces, namerules.js. The map puts the attribution by reach on the rows it names, from a registry slice around those rows. A guest has no registry and reads the resolver's name with the guess mark. Closes efiten#663 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
101faaa to
83a53d5
Compare
|
Pushed 83a53d5 for the review, rebased on master. Per point:
Web: 784 tests, eslint, Playwright 304 passed. App: 1628 tests, eslint, build. |
🤖 I have created a release *beep* *boop* --- <details><summary>app: 1.30.0</summary> ## [1.30.0](app-v1.29.1...app-v1.30.0) (2026-09-30) ### Features * **app,web:** ease what the map shows by zoom, on one hex system ([#734](#734)) ([4c2a57b](4c2a57b)) * **app,web:** name a relay on the map the way the app does ([#733](#733)) ([a9aa01a](a9aa01a)) * **app:** send one broker to several collectors under one switch ([#722](#722)) ([8c6da30](8c6da30)) * **web:** export the repeaters heard in view as a 1200×1200 PNG ([#725](#725)) ([d6186bc](d6186bc)) ### Bug Fixes * **app,web:** hang a Discover-heard repeater's star from its own position ([#724](#724)) ([15a6ada](15a6ada)) * **app,web:** put the caret in the target picker's search when it opens ([#721](#721)) ([6bd899c](6bd899c)) * **app:** drop the float window's previous and next buttons ([#717](#717)) ([c957ff3](c957ff3)) * **app:** give the sound the playback buffer instead of the smallest ([#712](#712)) ([dee5484](dee5484)) * **app:** hide Chrome's pause on the fullscreen readout ([#715](#715)) ([836d91e](836d91e)) * **app:** keep a space under the HUD on Android ([#710](#710)) ([2754716](2754716)) * **app:** let the fullscreen readout turn with the phone ([#718](#718)) ([fae3749](fae3749)) * **app:** put the transmit pop under the receptions it sat over ([#738](#738)) ([2bfc5fa](2bfc5fa)) * **server:** keep the node registry in memory on a loop of its own ([#736](#736)) ([4f3e988](4f3e988)) * **web:** keep the map bar on one row between 641 and 767 px ([#732](#732)) ([c44dc1d](c44dc1d)) </details> <details><summary>server: 1.10.1</summary> ## [1.10.1](server-v1.10.0...server-v1.10.1) (2026-09-30) ### Bug Fixes * **server:** keep the node registry in memory on a loop of its own ([#736](#736)) ([4f3e988](4f3e988)) * **server:** read a refused frame again when the message-id decoder changes ([#737](#737)) ([8586c71](8586c71)) </details> <details><summary>web: 1.26.0</summary> ## [1.26.0](web-v1.25.1...web-v1.26.0) (2026-09-30) ### Features * **app,web:** ease what the map shows by zoom, on one hex system ([#734](#734)) ([4c2a57b](4c2a57b)) * **app,web:** name a relay on the map the way the app does ([#733](#733)) ([a9aa01a](a9aa01a)) * **app:** send one broker to several collectors under one switch ([#722](#722)) ([8c6da30](8c6da30)) * **web:** export the repeaters heard in view as a 1200×1200 PNG ([#725](#725)) ([d6186bc](d6186bc)) ### Bug Fixes * **app,web:** hang a Discover-heard repeater's star from its own position ([#724](#724)) ([15a6ada](15a6ada)) * **app,web:** put the caret in the target picker's search when it opens ([#721](#721)) ([6bd899c](6bd899c)) * **app:** drop the float window's previous and next buttons ([#717](#717)) ([c957ff3](c957ff3)) * **app:** give the sound the playback buffer instead of the smallest ([#712](#712)) ([dee5484](dee5484)) * **app:** hide Chrome's pause on the fullscreen readout ([#715](#715)) ([836d91e](836d91e)) * **app:** keep a space under the HUD on Android ([#710](#710)) ([2754716](2754716)) * **app:** let the fullscreen readout turn with the phone ([#718](#718)) ([fae3749](fae3749)) * **app:** put the transmit pop under the receptions it sat over ([#738](#738)) ([2bfc5fa](2bfc5fa)) * **server:** keep the node registry in memory on a loop of its own ([#736](#736)) ([4f3e988](4f3e988)) * **web:** keep the map bar on one row between 641 and 767 px ([#732](#732)) ([c44dc1d](c44dc1d)) </details> --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
The map's ticker and point popup now name a relay the way the app does. A name on a 1 to 3-byte id wears the
~guess mark (#452), and the one registry node within reach decides the name first (#661).What you see
repeater-3~repeater-3repeater-3~Mast Noordrepeater-3#a1~Mast Noord, with#a1in the id columnChange
namerules.jsholdsisHashIdKind,GUESS_MARK,isGuessedName,namePartsanddisplayName, identical inapp/src/andweb/and pinned inweb/parity.test.js. Bothnames.jsfiles re-export it, so no import in the app changes. The app's behaviour is unchanged: the code moved.web/rowattribution.jsasks/api/nodes/positionsfor the box around the rows it names, padded by the reach. The ticker shows the latest 200 receptions wherever they were heard, so a slice of the view would leave a line outside it without candidates.~.Tests
web/rowattribution.test.js: the slice, the guest, the reuse, and an answer that is not a whole registry.web/names.test.jsandweb/receptionticker.test.js:senderNameandsenderCellfor every branch of the rule.web/parity.test.js:namerules.jsbyte-identical, andsenderCellequal on both surfaces for seven more senders, with and without an attribution.web/e2e/relaynames.spec.js: five cases in the browser. The slice case fails when the ticker's attributor is given the view instead of the rows.Limits
Closes #663
🤖 Generated with Claude Code