Skip to content

console(grid): a second toolbar change to a view overwrites the first — every whole-document PUT is built from the page-load row, so density reverts after a sort #11642

Description

@objectstack-fleet

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)

  1. Open showcase_task.in_progress in the console.
  2. Toggle density. Wait past the 300 ms save debounce.
  3. Sort on the Title header.
  4. Wire: the second PUT /api/v1/meta/view/showcase_task.in_progress carries config.sort only. GET reads back config.sort and no rowHeight.
  5. 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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

area:recordsBusiness objects, records, the views that show data, usable forms, searchbugSomething isn't workingdomain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatpriority:p2

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions