Uh oh!
There was an error while loading. Please reload this page.
test(plugin-detail): pin record:quick_actions resultDialog reaches the shared runner - #5807
Merged
os-zhuang merged 2 commits intoAug 23, 2026
Merged
Conversation
Contributor
✅ Console Performance Budget
The eager closure is every chunk the entry reaches through static imports — what the browser fetches and parses before the app renders. The entry chunk on its own is a small fraction of it. 📦 Bundle Size Report
Size Limits
|
os-zhuang
marked this pull request as ready for review
August 23, 2026 12:10
Uh oh!
There was an error while loading. Please reload this page.
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 freeto 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.
Fixes#5711
What
Test-only pin, no product change — triage graded this Task on exactly that basis.
RecordQuickActionsRenderer(record:quick_actions) never touchesresultDialogitself — it resolves actions throughuseActionEngine, which reuses the surrounding<ActionProvider>'sActionRunnerwhen one is mounted and falls back to a local, unwired one otherwise.resultDialogis honoured centrally inActionRunner.handlePostExecution: on success it suppresses thesuccessMessagetoast and awaits the registeredResultDialogHandler; with none registered itconsole.warns and discards the response value while still reporting success.Nothing pinned that a handler registered on an ambient
<ActionProvider>(the oneRecordDetailViewmounts around a record page) is actually reachable from arecord:quick_actionsbar mounted as its child — the shape objectstack#10681 depends on (sys_user.generate_backup_codes, a one-shotresultDialogatrecord:quick_actions { location: 'record_section' }).New file:
packages/plugin-detail/src/renderers/__tests__/record-quick-actions.resultDialog.test.tsx, two legs:<ActionProvider onResultDialog onToast>, running the action opens the dialog with the response value and the success toast stays suppressed.<ActionProvider>(the fallback-to-local-runner shape), the response is silently discarded and the documentedconsole.warnfires. This is the defect class the finding is about: a refactor that accidentally drops the ambient provider keeps every affected action reporting success while showing the user nothing.Gap verification (before writing the test)
grep -rni resultDialog packages/plugin-detail/src→ 0 hits, confirming the issue's claim.ActionRunner.resultDialog.test.tspins the runner in isolation with the handler registered directly — no React tree, nouseActionEngine, no<ActionProvider>.useActionEngine.sharedRunner.test.tsxpins runner-sharing (instance identity +ctxmerge) but never touchesresultDialog.MetadataTypeActions.test.tsxhas a same-named assertion ("shows the result dialog when the action declares resultDialog") but on a different bar —MetadataTypeActionsmounts its own internal<ActionProvider>(likeDeclaredActionsBar), so it doesn't exercise the shared-runner pathrecord:quick_actionsrelies on.None of the four exercise the actual missing link. Gap confirmed real.
Reverse verification
Committed the test first, then mutated
packages/react/src/hooks/useActionEngine.ts(const sharedRunner = null;, simulating a refactor that falls back to a local runner) and reran:stderr showed the exact documented warning fired instead:
Restored with
git checkout -- packages/react/src/hooks/useActionEngine.ts(confirmed clean viagit status --porcelain), reran green:Test Files 1 passed (1),Tests 2 passed (2).Tests
At d44e205:
pnpm exec vitest run packages/plugin-detail/src/renderers/__tests__/record-quick-actions.resultDialog.test.tsx --maxWorkers=2→Test Files 1 passed (1),Tests 2 passed (2).pnpm exec vitest run packages/plugin-detail/ --maxWorkers=2(full package, dependency closure built first) →Test Files 95 passed (95),Tests 870 passed (870).pnpm --filter @object-ui/plugin-detail type-check→ exit 0.pnpm exec eslint packages/plugin-detail/src/renderers/__tests__/record-quick-actions.resultDialog.test.tsx --no-inline-config→ 0 errors, 2no-explicit-anywarnings (identical pattern to the siblingrecord-quick-actions.disabled-declared-gate.test.tsx, same schema-cast convention).node scripts/check-changeset-presence.mjs→ ✅ (empty-frontmatter changeset declared).node scripts/check-changeset-no-major.mjs→ ✅.node scripts/check-control-bytes.mjs→ ✅ (4828 tracked text files scanned).Out of scope
record:alert's CTA path shares the exact same wiring (useActionEngineunder the same ambient<ActionProvider>) and has noresultDialogcoverage either — the issue itself flagged this as worth checking. Filed as a separate unassigned finding rather than folded into this PR (different renderer, different test file, and this card's scope isrecord:quick_actionsonly).Generated by Claude Code
Generated by Claude Code