Filing gate: ① a product defect with a named site and a live reproduction (reach: public door, the console UI). Filed by the objectui domain:ui execution seat 1 (session_015W8GBu6sBiqus2L2xjMsAL) at the review of PR objectui#11639 (Fixes #11625), from the dev's out-of-scope findings. ⛔ Filed bare: routing and grading belong to triage. ⛔ Not a claim.
Who acts: triage grades it. A domain:ui seat then fixes it in packages/app-shell/src/views/ObjectView.tsx.
Reproduction (measured by the dev, objectstack main 045f764c showcase; console built from PR objectui#11639's branch)
- Open
showcase_task.in_progress in the console.
- Toggle density. Wait past the 300 ms save debounce.
- Sort on the Title header.
- Wire: the second
PUT /api/v1/meta/view/showcase_task.in_progress carries config.sort only. GET reads back config.sort and no rowHeight.
- Reload. Expected: the new density and the sort. Actual: "Density: Compact", the old density, with the sort kept.
The overlay branch does the same on showcase_task.done: the second PUT { sort, viewKind, object, name, _isOverride } replaces the earlier { rowHeight, … } row.
Mechanism
persistViewPatch builds every whole-document PUT from the tab as it was when the page loaded (the saved branch of buildPersistedViewBody), or from the pending patch alone (the overlay branch).
- Nothing refreshes either base after a successful write, so each later save drops the earlier one.
- It predates PR objectui#11639 on every row kind. That PR's changeset states it as still open.
Done when
Two toolbar changes to one view in one session both survive a reload. That holds for each row kind (envelope row, flat row, overlay), and it is pinned.
Dedupe: the 1200 most recently updated objectui issues and PRs, open and closed (back to #6900), were listed over REST and grepped locally. persistViewPatch hits 3, and buildPersistedViewBody hits 3: objectui#11625, PR objectui#11639, PR objectui#11593 and PR objectui#11010, none of which is this lost update. lost update hits 0, and overwrites the first hits only PR objectui#11639. The control rowHeight hits 21.
Dedupe words: persistViewPatch lost update · second toolbar change overwrites first · density reverts after sort · whole-document PUT stale base
Generated by Claude Code
Filing gate: ① a product defect with a named site and a live reproduction (
reach:public door, the console UI). Filed by the objectuidomain:uiexecution seat 1 (session_015W8GBu6sBiqus2L2xjMsAL) at the review of PR objectui#11639 (Fixes #11625), from the dev's out-of-scope findings. ⛔ Filed bare: routing and grading belong to triage. ⛔ Not a claim.Who acts: triage grades it. A
domain:uiseat then fixes it inpackages/app-shell/src/views/ObjectView.tsx.Reproduction (measured by the dev, objectstack
main045f764cshowcase; console built from PR objectui#11639's branch)showcase_task.in_progressin the console.PUT /api/v1/meta/view/showcase_task.in_progresscarriesconfig.sortonly.GETreads backconfig.sortand norowHeight.The overlay branch does the same on
showcase_task.done: the second PUT{ sort, viewKind, object, name, _isOverride }replaces the earlier{ rowHeight, … }row.Mechanism
persistViewPatchbuilds every whole-document PUT from the tab as it was when the page loaded (the saved branch ofbuildPersistedViewBody), or from the pending patch alone (the overlay branch).Done when
Two toolbar changes to one view in one session both survive a reload. That holds for each row kind (envelope row, flat row, overlay), and it is pinned.
Dedupe: the 1200 most recently updated objectui issues and PRs, open and closed (back to #6900), were listed over REST and grepped locally.
persistViewPatchhits 3, andbuildPersistedViewBodyhits 3: objectui#11625, PR objectui#11639, PR objectui#11593 and PR objectui#11010, none of which is this lost update.lost updatehits 0, andoverwrites the firsthits only PR objectui#11639. The controlrowHeighthits 21.Dedupe words: persistViewPatch lost update · second toolbar change overwrites first · density reverts after sort · whole-document PUT stale base
Generated by Claude Code