Skip to content

fix(plugin-grid): a bulk action's result lists each refused record by its title - #27996

Merged
objectstack-fleet[bot] merged 3 commits into
mainfrom
claude/project-thread-x2m3hc
Oct 30, 2026
Merged

objectstack-fleet[bot] merged 3 commits into
mainfrom
claude/project-thread-x2m3hc

Conversation

@objectstack-fleet

@objectstack-fleet objectstack-fleet Bot commented Oct 30, 2026 •

Copy link
Copy Markdown
Contributor

domain:ui#3 · os-bill · session_01Utp6CaJoinvGQSbHeDaWBe

Requested by Bill · project thread

维护者速读

Fixes #27380

Clause-②: no
Metadata-protocol: none

What changes

BulkActionDialog's result panel lists each refusal under the record it refused. The label used to be the record's raw id; it is now the record's title, resolved by the same affectedRecordName the confirm step already uses to list the affected records (the declared nameField, or the resolver's Record #ID floor). An entry that is not a record of the run (a row with no id, a batch the server answered with a count only) keeps its id. Counts, Retry and the error CSV are unchanged.

This PR takes row 1 of #27380. Rows 2, 3 and 4 are carded by the seat: row 2 is #27999 (Blocked-by #27907, which holds the file it needs), rows 3 and 4 are #28000 and #28001 (spec and server changes). With every row owned, this PR closes the card.

Tests

ui/packages/plugin-grid/src/__tests__/bulkResultPerRecord-27380.test.tsx drives the real ObjectGrid, a real ActionProvider and the real createServerActionHandler over a transport that answers per record (HotCRM's "Add to Campaign" shape, three leads, two refused with a 400):

  • the counts follow each record's own answer (Succeeded 1 / 3 · Failed 2): already true on main, pinned so it stays true;
  • every refusal is listed under its record, by the record's title;
  • a clean run reports Succeeded 3 / 3 and no refusal list.

Acceptance notes

  • Row 1, measured on main 5f6dc96 through the chain above: a record whose dispatch is refused already counts as failed and is listed; the card's "Succeeded 2 / 2 whatever each row did" did not reproduce for a refusal the server answers with a 4xx. A handler that answers 200 for a record it did nothing to is a success by the /actions door's contract (a handler that refuses throws, which the door answers 400), so that half needs no platform change.
  • Row 1's "shows only the last refusal" did not reproduce either: the per-record path lists every refusal (three records, two refusals, both listed).

Verification

Head 17fa19bc (main merged in). Local subset only; every family CI runs is read from this PR's check-runs.

  • pnpm --dir ui exec vitest run packages/plugin-grid/: lock VERDICT command-exit 0, Test Files 261 passed (261), Tests 2289 passed (2289).
  • pnpm --filter @object-ui/plugin-grid run type-check: lock VERDICT command-exit 0.
  • Ablation (fix committed first, mutation through scripts/ablation-replace.mjs): the result label put back to the raw id, anchor 1 to 0 on disk, lists every refusal, each under the record it refused, by that record's title fails (expected Grace Hopper, received lead_2:), 1 failed and 2 passed; restored, blob equals HEAD and git diff HEAD empty.
  • node scripts/pm/dispatch-gates.mjs --ran: 34 derived, 34 run, 0 NOT-MEASURED, 0 UNRUN.
  • node scripts/check-new-cross-file-line-citations.mjs (from ui/): 0 new citations.
Derived gate families (34), each command and its exit code
node scripts/check-adr-0087-registration.mjs --base origin/main :: exit 0
node scripts/check-adr-0087-registration.mjs --self-test :: exit 0
node scripts/check-changeset-no-major.mjs --base origin/main :: exit 0
node scripts/check-closing-keyword-parity.mjs :: exit 0
node scripts/check-closing-keyword-parity.mjs --self-test :: exit 0
node scripts/check-comment-mask-corpus.mjs :: exit 0
node scripts/check-empty-changeset.mjs --base origin/main :: exit 0
node scripts/check-empty-changeset.mjs --self-test :: exit 0
node scripts/check-sdui-manifest.mjs :: exit 0
node scripts/check-sdui-manifest.mjs --self-test :: exit 0
node scripts/pm/release-rehearsal-clone.mjs --self-test :: exit 0
node scripts/release-pending-publish.mjs --self-test :: exit 0
pnpm --dir ui exec vitest run scripts/ :: exit 0
pnpm --filter @objectstack/spec run check:duration-unit-keys :: exit 0
pnpm check:changeset-gate-self-tests :: exit 0
pnpm check:closed-ceremony-text :: exit 0
pnpm check:cross-package-test-inputs :: exit 0
pnpm check:dispatcher-error-vocabulary :: exit 0
pnpm check:driver-memory-census :: exit 0
pnpm check:engine-double-contract :: exit 0
pnpm check:gitlink-declared :: exit 0
pnpm check:nul-bytes :: exit 0
pnpm check:pm-changeset-deadline-census :: exit 0
pnpm check:published-files :: exit 0
pnpm check:query-options-erasure :: exit 0
pnpm check:refd-timer-probe :: exit 0
pnpm check:skill-identifier-liveness :: exit 0
pnpm check:test-source-alias :: exit 0
pnpm check:tier-file-adoption :: exit 0
pnpm check:type-check-coverage :: exit 0
pnpm check:type-check-debt :: exit 0
pnpm check:undeclared-dep-imports :: exit 0
pnpm check:watch-hint-literal :: exit 0
pnpm check:where-matcher :: exit 0

Generated by Claude Code

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

domain:ui#3 · os-bill · session_01Utp6CaJoinvGQSbHeDaWBe

席位核对

ACCEPT · head 17fa19bca45f0b02ad215d5d98c101d72a000d85 · 2026-10-30T07:35Z


Generated by Claude Code

@objectstack-fleet
objectstack-fleet Bot marked this pull request as ready for review October 30, 2026 07:37
@objectstack-fleet
objectstack-fleet Bot enabled auto-merge October 30, 2026 07:37
@objectstack-fleet
objectstack-fleet Bot added this pull request to the merge queue Oct 30, 2026
Merged via the queue into main with commit 10cbfac Oct 30, 2026
60 checks passed
@objectstack-fleet
objectstack-fleet Bot deleted the claude/project-thread-x2m3hc branch October 30, 2026 07:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation size/m tooling

Projects

None yet

1 participant