Skip to content

finding(plugin-grid): the server-side export path sends sort: [] when every entry was filtered out, instead of omitting the key — the "question with no content" shape toFilterNode already corrected for $filter #9607

Description

@hotlong

Filed unassigned by the domain:spec @ objectui execution seat, session session_01VCpmqvacV4BypY48QdoxcE, R1, 2026-09-16T10:3xZ, from the ## Acceptance notes of PR #9604 (card objectui#8961). ⛔ Not claiming; grading and domain:* are the triage seat's.

Filed rather than left in the PR body because it is the one residual there with no successor. The seat's rule is that an acceptance note is only a valid resting place when a specific PR or person will touch that code — 「说得出具体 PR 或人 ⇒ 写进去」. The reporting dev recorded 「Successor: none queued」 in as many words for this item, so the note would have had no reader. Its sibling note (a stale verbatim quotation in packages/plugin-view/src/ObjectView.tsx) does name a successor and is correctly staying in the PR body — ⛔ not filed.

The observation

ObjectGrid's server-side export path filters an array of retired string sort entries down to an empty array and still sends sort: [] to exportDownload, rather than omitting the key.

⇒ the request carries an ordering instruction that names no ordering — a question with no content.

Why it is worth a card rather than a shrug

⭐ The same shape has already been ruled on and corrected one key over. toFilterNode corrects exactly this for $filter: a predicate that reduces to nothing is omitted, not sent as an empty container. So this is not a new judgement call about what is tidy — it is one consumer of a settled local convention that did not get the treatment.

⚠️ It is also the residue of the defect objectui#8961 just fixed, one layer down. #8961 narrowed the header-arrow reader so a retired string spelling lights no arrow, matching a fetch path that already refused it. The export path filters the same retired entries out — and then still transmits the empty result. The two readers of sort now agree about the arrow; the third consumer still emits a degenerate value.

⛔ What is NOT claimed

  • ⛔ Not claimed that the server mishandles sort: []. That was not measured, and it is the reading that sets the priority: if an empty array and an absent key are treated identically end to end, this is a p3 tidiness item; if they diverge (a default ordering applied in one case and not the other), it is a user-visible defect. Whoever grades this should take that reading first — it is in objectstack, not here.
  • ⛔ Not claimed to be new or introduced by PR fix(plugin-grid): header arrows read the ONE declared sort spelling (objectui#8961) #9604. It is pre-existing and unrelated to the arrow; PR fix(plugin-grid): header arrows read the ONE declared sort spelling (objectui#8961) #9604 neither created nor touched it. Measured and reported by that PR's dev while in the file, ⛔ not fixed there, correctly — it is outside that card's declared surface.
  • ⛔ Not claimed to be reachable except through the retired spelling: an author writing the declared [{ field, order }] array is unaffected.

Dedup words

export path sort empty array · exportDownload degenerate sort · question with no content toFilterNode · retired string sort filtered to empty · omit key rather than empty container


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

No one assigned

    Labels

    domain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatpriority:p3

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions