Skip to content

fix(web): a registry answer from before a role change, or an older failure, no longer moves the attributor - #769

Merged
efiten merged 2 commits into
masterfrom
fix/attributor-generation
Oct 31, 2026
Merged

efiten merged 2 commits into
masterfrom
fix/attributor-generation

Conversation

@efiten

@efiten efiten commented Oct 31, 2026 •

Copy link
Copy Markdown
Owner

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 fix(web): date a registry slice from when it was asked for #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.ai/code/session_01TDXX3ZV8LEdZgVTNFYFvZi

efiten and others added 2 commits October 31, 2026 12:17
…ilure, no longer moves the attributor (#768)

reset() bumps a generation; an answer asked for under an earlier one
changes nothing and leaves its rows without a registry. A failure older
than the current slice no longer sets failedAt.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TDXX3ZV8LEdZgVTNFYFvZi
…next ask (#768)

Guards the order of the generation check and the failure branch. Fails
when the check is moved below it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TDXX3ZV8LEdZgVTNFYFvZi
@efiten
efiten merged commit 087377d into master Oct 31, 2026
7 checks passed
@github-actions github-actions Bot mentioned this pull request Oct 31, 2026
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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

web: a registry answer from before reset() or a late failure still changes the attributor's state

1 participant