Repository navigation
fix(web): date a registry slice from when it was asked for - #765
Merged
Merged
Conversation
The slice was stamped with now() after the answer landed, so a slow answer counted as fresh for a minute from then and kept names off the rows. An older answer that lands after a newer slice no longer replaces it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TDXX3ZV8LEdZgVTNFYFvZi
When an older answer lost to a newer slice, the call returned the newer slice's index, which need not cover its rows: a row the registry named read as unnamed. The call now uses its own answer; only the stored slice follows the newer question. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TDXX3ZV8LEdZgVTNFYFvZi
Merged
efiten
added a commit
that referenced
this pull request
Oct 31, 2026
…ilure, no longer moves the attributor (#769) Closes #768 ## What changes `createRowAttributor` (`web/rowattribution.js`): - `reset()` (a change of role, `web/map.js:610`) bumps a `generation`. An answer asked for under an earlier generation writes neither the slice nor `failedAt`, and its own rows read without a registry (`rule: estimate`). A member's answer that lands after a logout therefore names nothing for the guest. - A failed answer only sets `failedAt` when no newer slice exists (`!slice || slice.at <= askedAt`), the rule #765 applies to a success. ## Tests - Three unit tests in `rowattribution.test.js`: - `drops an answer that was asked for before a reset`: the rows read `estimate` and the next call asks again; - `does not let an older failure that lands late hold back asks a newer answer allows`: 3 asks, not 2; - `does not let a failure asked for before a reset hold back the first ask after it` (added after review): fails when the generation check is moved below the failure branch. The first two fail without the change; the third guards the order of the two checks. - vitest 876/876, eslint clean, `relaynames.spec.js` + `auth.spec.js` 26/26. - Full Playwright locally: 336 passed, 1 failed: `targetpicker.spec.js:216`. It also fails 1 of 8 runs with master's `rowattribution.js`, and passes 8 of 8 with this one, so it is not from this change. ## Not done - No changelog entry: a reader sees no difference outside these races. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01TDXX3ZV8LEdZgVTNFYFvZi --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
efiten
pushed a commit
that referenced
this pull request
Oct 31, 2026
🤖 I have created a release *beep* *boop* --- <details><summary>app: 1.32.1</summary> ## [1.32.1](app-v1.32.0...app-v1.32.1) (2026-10-31) ### Bug Fixes * **web:** a callout with its control in the menu sends the tour copy into the panel ([#760](#760)) ([8592da6](8592da6)) * **web:** keep the bar's labels on one line at tablet widths ([#759](#759)) ([f27390c](f27390c)) </details> <details><summary>server: 1.11.1</summary> ## [1.11.1](server-v1.11.0...server-v1.11.1) (2026-10-31) ### Performance Improvements * **server,web:** one point query per hex refresh for both cell sizes ([#755](#755)) ([78868fc](78868fc)) </details> <details><summary>web: 1.28.1</summary> ## [1.28.1](web-v1.28.0...web-v1.28.1) (2026-10-31) ### Bug Fixes * **web:** a callout with its control in the menu sends the tour copy into the panel ([#760](#760)) ([8592da6](8592da6)) * **web:** a registry answer from before a role change, or an older failure, no longer moves the attributor ([#769](#769)) ([087377d](087377d)) * **web:** date a registry slice from when it was asked for ([#765](#765)) ([77badec](77badec)) * **web:** keep the bar's labels on one line at tablet widths ([#759](#759)) ([f27390c](f27390c)) ### Performance Improvements * **server,web:** one point query per hex refresh for both cell sizes ([#755](#755)) ([78868fc](78868fc)) ### Code Refactoring * **web:** drop the name-redraw hold, MapLibre never closes a popup on redraw ([#770](#770)) ([ba9a9b0](ba9a9b0)) ### Tests * **web:** release the mocked resolver when the popup is open, not after 600 ms ([#762](#762)) ([2abc959](2abc959)) * **web:** retry the zoomfade hover until a painted cell answers ([#767](#767)) ([9331dfa](9331dfa)) </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>
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.
Closes #764
What changes
createRowAttributor(web/rowattribution.js):at: askedAt, the moment it was asked for, instead ofnow()after the answer. A slow answer then ages from the question.askedAtis older than the current slice does not replace it. That call still attributes its own rows with its own answer, since the newer slice need not cover them (second commit, after review).Why
The flaky CI test
relaynames.spec.js:107(on PR #762) comes down to this:applyRoleresets the attributors and refetches (web/map.js:610,:679).Tests
rowattribution.test.js:All three failed without the fix (
called 1 times/rule: estimate).relaynames.spec.js7/7.zoomfade.spec.js:90). That test does not touch the registry, and it also failed once in a full run on the branch of fix(web): keep the bar's labels on one line at tablet widths #759 while passing 8 of 8 alone.Not done
reset()that lands after it can still fill the slice, and a late failed answer setsfailedAtwithout comparingaskedAt.🤖 Generated with Claude Code
https://claude.ai/code/session_01TDXX3ZV8LEdZgVTNFYFvZi