Repository navigation
Publish the outbox's summary and its waiting work together - #550
Merged
Merged
Conversation
Storing a change published the account's summary before the open strategy's waiting work included it. For that moment the outbox read as empty, the canvas was marked saved, and a redraw from the server waiting for that ran over the edit just stored. The edit still landed; the older page then replaced it on the canvas, and the next save sent the old value back.
Each item stored while a page is handed to the outbox republished the whole outbox. A 2,000 item page took 7.8 s to queue; it takes 0.2 s.
|
Warning Review limit reachedYou've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Next included review available in 15 minutes. View limit details
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. |
This was referenced Nov 12, 2026
Merged
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.
Nothing to show on screen: the bug is a race a few milliseconds wide, and the fix is in when the outbox publishes its state. The numbers:
Why
In cloud mode, an edit could be thrown away without a word. You change an item. A teammate's change to a different item arrives in the moment after your edit and before the outbox has stored it. Your edit is reverted on the canvas, and the next save sends the old value to the server. The chip says synced.
What was happening
_putRecordstored the new record and published the account summary straight away. The open strategy's waiting work (the five per-item maps) was only updated after_syncDesiredLockedfinished its loop. For that moment the queue state counted the new change in its summary and left it out ofpending.StrategySaveStateNotifierreadpending.isEmpty, cleared the unsaved mark, and the page session ran the redraw from the server that had been waiting for a clean canvas. That redraw dropped the overlay holding the edit. The edit still landed; the older page then replaced it on the canvas, and the next save diffed the reverted canvas and sent the old value.What this does
_publishAccountSummarynow publishes the summary and the waiting work together, both built from the stored records by_refreshActiveQueueView. A state with one and not the other can no longer be published.How far this was checked
an edit made offline lands when a teammate's edit to another item arrived firstfails on main (server keepsalpha, expectedmine) and passes here.fvm flutter test: 3,570 passed, 14 skipped.Not covered
ci: analyze test web gauntlet