Repository navigation
refactor(ui): remove antd from AI-mode Observability - #34936
Conversation
Migrate every component reachable from AI-mode Observability to @openmetadata/ui-core-components in place, with no behaviour change: alerts, incidents, test cases and suites, pipelines, learning drawer, entity headers, block editor, tasks and activity feed. - Table.interface.ts now owns its table types instead of re-exporting antd's - SlideoutMenu overlay stacks at z-50 like the core modal overlay - EditorSlots skips the editing menus for read-only previews - Playwright helpers target the core DOM instead of .ant-* selectors Part of open-metadata/openmetadata-collate#6826
🔄 Playwright impact map auto-refreshedThis PR touched specs or UI source that changed the source→spec routing map. I regenerated What is this file? It is the auto-generated half of Playwright's PR planner. It routes "if source X changes, run specs Y" by walking spec imports and cross-referencing What if I want to regenerate locally instead? Run this before pushing your next change to skip the bot commit: python3 .github/scripts/generate_playwright_impact_map.py
git add .github/playwright/impact-map.generated.json
git commit --amend --no-edit # or a separate commit |
…bservability-antd-free # Conflicts: # openmetadata-ui/src/main/resources/ui/src/components/Explore/EntitySummaryPanel/LineageTab/LineageTabContent.tsx # openmetadata-ui/src/main/resources/ui/src/components/common/ErrorWithPlaceholder/FilterErrorPlaceHolder.tsx # openmetadata-ui/src/main/resources/ui/src/components/common/RichTextEditor/RichTextEditorPreviewerV1.tsx # openmetadata-ui/src/main/resources/ui/src/components/common/RichTextEditor/rich-text-editor-previewerV1.less
…y-antd-free' into ShaileshParmar11/ai-observability-antd-free
- ModalWithMarkdownEditor: markdown-editor test id wraps the dialog again, as it did with antd, so helpers that look for the dialog inside it still work - DescriptionSourceBadge: take main's version, keeping the tooltip trigger keyboard focusable - EntityVersionTimeLine: the version history panel is a dialog again - BulkEditEntity: keep row identities stable so the grid does not discard an open cell edit when the tag picker closes - CSV grid editors: refocus the selected cell after the modal editor closes so arrow-key navigation keeps working - Playwright helpers: target core dialogs and the core tag picker instead of antd selectors
…bservability-antd-free # Conflicts: # .github/playwright/impact-map.generated.json # openmetadata-ui/src/main/resources/ui/playwright/e2e/Features/ActivityAPI.spec.ts # openmetadata-ui/src/main/resources/ui/playwright/e2e/Features/IncidentManager.spec.ts # openmetadata-ui/src/main/resources/ui/playwright/e2e/Features/Tasks/TaskAssigneeManagement.spec.ts # openmetadata-ui/src/main/resources/ui/playwright/e2e/Features/Tasks/TaskCreation.spec.ts # openmetadata-ui/src/main/resources/ui/playwright/utils/activityFeed.ts # openmetadata-ui/src/main/resources/ui/playwright/utils/glossary.ts # openmetadata-ui/src/main/resources/ui/playwright/utils/incidentManager.ts # openmetadata-ui/src/main/resources/ui/playwright/utils/task.ts # openmetadata-ui/src/main/resources/ui/playwright/utils/taskWorkflow.ts # openmetadata-ui/src/main/resources/ui/src/components/DataQuality/TestCaseStatusModal/TestCaseStatusModal.component.tsx # openmetadata-ui/src/main/resources/ui/src/components/Database/Profiler/TableProfiler/ProfilerProgressWidget/ProfilerProgressWidget.tsx # openmetadata-ui/src/main/resources/ui/src/components/Database/SchemaTable/SchemaTable.component.tsx # openmetadata-ui/src/main/resources/ui/src/components/Entity/EntityStatusBadge/EntityStatusBadge.component.tsx # openmetadata-ui/src/main/resources/ui/src/components/Entity/EntityVersionTimeLine/EntityVersionTimeLine.tsx # openmetadata-ui/src/main/resources/ui/src/components/Modals/ConfirmationModal/ConfirmationModal.tsx # openmetadata-ui/src/main/resources/ui/src/components/Suggestions/SuggestionsSlider/SuggestionsSlider.tsx # openmetadata-ui/src/main/resources/ui/src/components/Visualisations/Chart/CustomPieChart.component.tsx # openmetadata-ui/src/main/resources/ui/src/components/common/AsyncSelectList/AsyncSelectList.tsx # openmetadata-ui/src/main/resources/ui/src/components/common/ErrorWithPlaceholder/AssignErrorPlaceHolder.tsx # openmetadata-ui/src/main/resources/ui/src/components/common/ErrorWithPlaceholder/CreateErrorPlaceHolder.tsx # openmetadata-ui/src/main/resources/ui/src/components/common/ErrorWithPlaceholder/ErrorPlaceHolderIngestion.tsx # openmetadata-ui/src/main/resources/ui/src/components/common/ErrorWithPlaceholder/PermissionErrorPlaceholder.tsx # openmetadata-ui/src/main/resources/ui/src/components/common/InlineEdit/InlineEdit.component.tsx # openmetadata-ui/src/main/resources/ui/src/components/common/InlineEdit/InlineEdit.interface.ts # openmetadata-ui/src/main/resources/ui/src/components/common/Skeleton/CommonSkeletons/LabelCountSkeleton/LabelCountSkeleton.component.tsx # openmetadata-ui/src/main/resources/ui/src/components/common/Skeleton/SummaryPanelSkeleton/SummaryPanelSkeleton.component.tsx # openmetadata-ui/src/main/resources/ui/src/pages/TasksPage/shared/Assignees.test.tsx # openmetadata-ui/src/main/resources/ui/src/pages/TasksPage/shared/Assignees.tsx # openmetadata-ui/src/main/resources/ui/src/pages/TasksPage/shared/TaskPayloadSchemaFields.tsx
🔄 Playwright impact map auto-refreshedThis PR touched specs or UI source that changed the source→spec routing map. I regenerated What is this file? It is the auto-generated half of Playwright's PR planner. It routes "if source X changes, run specs Y" by walking spec imports and cross-referencing What if I want to regenerate locally instead? Run this before pushing your next change to skip the bot commit: python3 .github/scripts/generate_playwright_impact_map.py
git add .github/playwright/impact-map.generated.json
git commit --amend --no-edit # or a separate commit |
The merge brought back the antd Row/Col layout that main had already moved to core Grid. Take main's version and only keep TableProps from Table.interface instead of antd.
…y-antd-free' into ShaileshParmar11/ai-observability-antd-free
|
| Count | Rule |
|---|---|
| 53 | react-hooks/exhaustive-deps |
| 19 | openmetadata-imports/no-lower-layer-page-imports |
| 5 | openmetadata-imports/no-circular-imports |
| 1 | openmetadata-imports/review-sequential-api-calls |
| 1 | openmetadata-imports/no-cross-page-imports |
All findings
| Location | Rule | Message | |
|---|---|---|---|
| 🟡 | src/components/BlockEditor/BlockEditor.tsx:245:8 |
react-hooks/exhaustive-deps |
React Hook useEffect has a missing dependency: 'isPopoverOpenRef'. Either include it or remove the dependency array. |
| 🟡 | src/components/BlockEditor/BubbleMenu/BubbleMenu.tsx:100:6 |
react-hooks/exhaustive-deps |
React Hook useMemo has a missing dependency: 'toggleLink'. Either include it or remove the dependency array. If 'toggleLink' changes too often, find the parent |
| 🟡 | src/components/BlockEditor/Extensions/File/AttachmentComponents/AttachmentPlaceholder.tsx:16:1 |
openmetadata-imports/no-circular-imports |
This runtime import participates in a circular dependency. Extract the shared type/constant/utility or invert the dependency. |
| 🟡 | src/components/BlockEditor/Extensions/slash-command/SlashCommandList.tsx:19:1 |
openmetadata-imports/no-circular-imports |
This runtime import participates in a circular dependency. Extract the shared type/constant/utility or invert the dependency. |
| 🟡 | src/components/BlockEditor/TableMenu/TableMenu.tsx:145:6 |
react-hooks/exhaustive-deps |
React Hook useEffect has a missing dependency: 'view.dom'. Either include it or remove the dependency array. |
| 🟡 | src/components/BulkEditEntity/BulkEditEntity.component.tsx:243:6 |
react-hooks/exhaustive-deps |
React Hook useCallback has a missing dependency: 'newRowConfig?.defaults'. Either include it or remove the dependency array. |
| 🟡 | src/components/DataQuality/AddTestCaseList/AddTestCaseList.component.tsx:293:34 |
react-hooks/exhaustive-deps |
React Hook useCallback received a function whose dependencies are unknown. Pass an inline function instead. |
| 🟡 | src/components/DataQuality/AddTestCaseList/AddTestCaseList.component.tsx:326:35 |
react-hooks/exhaustive-deps |
React Hook useCallback received a function whose dependencies are unknown. Pass an inline function instead. |
| 🟡 | src/components/DataQuality/AddTestCaseList/AddTestCaseList.component.tsx:670:6 |
react-hooks/exhaustive-deps |
React Hook useEffect has a missing dependency: 'fetchTestCases'. Either include it or remove the dependency array. |
| 🟡 | src/components/DataQuality/AddTestCaseList/AddTestCaseList.component.tsx:695:5 |
react-hooks/exhaustive-deps |
React Hook useCallback has an unnecessary dependency: 'fetchColumnOptions'. Either exclude it or remove the dependency array. |
| 🟡 | src/components/DataQuality/AddTestCaseList/AddTestCaseList.component.tsx:826:6 |
react-hooks/exhaustive-deps |
React Hook useMemo has an unnecessary dependency: 'items'. Either exclude it or remove the dependency array. |
| 🟡 | src/components/DataQuality/IncidentManager/Severity/Severity.component.tsx:59:5 |
react-hooks/exhaustive-deps |
React Hook useCallback has a missing dependency: 'onCancel'. Either include it or remove the dependency array. |
| 🟡 | src/components/DataQuality/TestCaseStatusModal/TestCaseStatusModal.component.tsx:31:1 |
openmetadata-imports/no-lower-layer-page-imports |
Pages are route-level composition modules. Move the shared implementation/type to a lower layer instead of importing a page from here. |
| 🟡 | src/components/DataQuality/TestCaseStatusModal/TestCaseStatusModal.component.tsx:32:1 |
openmetadata-imports/no-lower-layer-page-imports |
Pages are route-level composition modules. Move the shared implementation/type to a lower layer instead of importing a page from here. |
| 🟡 | src/components/DataQuality/TestCaseStatusModal/TestCaseStatusModal.component.tsx:244:25 |
openmetadata-imports/review-sequential-api-calls |
Review these sequential API requests. If they are independent, start them together with Promise.all/Promise.allSettled; keep sequencing only when data-dependent |
| 🟡 | src/components/DataQuality/TestCaseStatusModal/TestCaseStatusModal.component.tsx:277:6 |
react-hooks/exhaustive-deps |
React Hook useEffect has a missing dependency: 'fetchInitialAssign'. Either include it or remove the dependency array. |
| 🟡 | src/components/DataQuality/TestCaseStatusModal/TestCaseStatusModal.component.tsx:292:6 |
react-hooks/exhaustive-deps |
React Hook useEffect has a missing dependency: 'form'. Either include it or remove the dependency array. |
| 🟡 | src/components/DataQuality/TestCaseStatusModal/TestCaseStatusModal.interface.ts:18:1 |
openmetadata-imports/no-lower-layer-page-imports |
Pages are route-level composition modules. Move the shared implementation/type to a lower layer instead of importing a page from here. |
| 🟡 | src/components/DataQuality/TestCases/TestCases.component.tsx:32:1 |
openmetadata-imports/no-lower-layer-page-imports |
Pages are route-level composition modules. Move the shared implementation/type to a lower layer instead of importing a page from here. |
| 🟡 | src/components/DataQuality/TestCases/TestCases.component.tsx:33:1 |
openmetadata-imports/no-lower-layer-page-imports |
Pages are route-level composition modules. Move the shared implementation/type to a lower layer instead of importing a page from here. |
| 🟡 | src/components/DataQuality/TestCases/TestCases.component.tsx:46:1 |
openmetadata-imports/no-circular-imports |
This runtime import participates in a circular dependency. Extract the shared type/constant/utility or invert the dependency. |
| 🟡 | src/components/DataQuality/TestCases/useTestCaseFilterOptions.tsx:249:34 |
react-hooks/exhaustive-deps |
React Hook useCallback received a function whose dependencies are unknown. Pass an inline function instead. |
| 🟡 | src/components/DataQuality/TestCases/useTestCaseFilterOptions.tsx:253:35 |
react-hooks/exhaustive-deps |
React Hook useCallback received a function whose dependencies are unknown. Pass an inline function instead. |
| 🟡 | src/components/DataQuality/TestCases/useTestCaseFilterOptions.tsx:257:39 |
react-hooks/exhaustive-deps |
React Hook useCallback received a function whose dependencies are unknown. Pass an inline function instead. |
| 🟡 | src/components/DataQuality/TestCases/useTestCaseFilterOptions.tsx:261:43 |
react-hooks/exhaustive-deps |
React Hook useCallback received a function whose dependencies are unknown. Pass an inline function instead. |
| 🟡 | src/components/DataQuality/TestCases/useTestCaseFilters.ts:228:6 |
react-hooks/exhaustive-deps |
React Hook useMemo has missing dependencies: 'getInitialOptions', 'handleSearchParam', and 'onSearchByKey'. Either include them or remove the dependency array. |
| 🟡 | src/components/DataQuality/TestCases/useTestCaseList.test.ts:20:1 |
openmetadata-imports/no-lower-layer-page-imports |
Pages are route-level composition modules. Move the shared implementation/type to a lower layer instead of importing a page from here. |
| 🟡 | src/components/DataQuality/TestCases/useTestCaseList.ts:32:1 |
openmetadata-imports/no-lower-layer-page-imports |
Pages are route-level composition modules. Move the shared implementation/type to a lower layer instead of importing a page from here. |
| 🟡 | src/components/DataQuality/TestCases/useTestCaseList.ts:237:6 |
react-hooks/exhaustive-deps |
React Hook useEffect has a missing dependency: 'getTestCases'. Either include it or remove the dependency array. |
| 🟡 | src/components/DataQuality/TestCases/useTestCaseListPage.tsx:20:1 |
openmetadata-imports/no-circular-imports |
This runtime import participates in a circular dependency. Extract the shared type/constant/utility or invert the dependency. |
| 🟡 | src/components/DataQuality/TestCases/useTestCaseListPage.tsx:20:1 |
openmetadata-imports/no-lower-layer-page-imports |
Pages are route-level composition modules. Move the shared implementation/type to a lower layer instead of importing a page from here. |
| 🟡 | src/components/DataQuality/TestCases/useTestCaseListPage.tsx:21:1 |
openmetadata-imports/no-lower-layer-page-imports |
Pages are route-level composition modules. Move the shared implementation/type to a lower layer instead of importing a page from here. |
| 🟡 | src/components/DataQuality/TestCases/useTestCaseListPage.tsx:22:1 |
openmetadata-imports/no-lower-layer-page-imports |
Pages are route-level composition modules. Move the shared implementation/type to a lower layer instead of importing a page from here. |
| 🟡 | src/components/DataQuality/TestSuite/TestSuitePipelineTab/TestSuitePipelineTab.component.tsx:248:6 |
react-hooks/exhaustive-deps |
React Hook useCallback has a missing dependency: 't'. Either include it or remove the dependency array. |
| 🟡 | src/components/DataQuality/TestSuite/TestSuitePipelineTab/TestSuitePipelineTab.component.tsx:266:5 |
react-hooks/exhaustive-deps |
React Hook useCallback has a missing dependency: 't'. Either include it or remove the dependency array. |
| 🟡 | src/components/DataQuality/TestSuite/TestSuitePipelineTab/TestSuitePipelineTab.component.tsx:290:5 |
react-hooks/exhaustive-deps |
React Hook useCallback has a missing dependency: 't'. Either include it or remove the dependency array. |
| 🟡 | src/components/DataQuality/TestSuite/TestSuitePipelineTab/TestSuitePipelineTab.component.tsx:319:5 |
react-hooks/exhaustive-deps |
React Hook useCallback has a missing dependency: 't'. Either include it or remove the dependency array. |
| 🟡 | src/components/DataQuality/TestSuite/TestSuitePipelineTab/TestSuitePipelineTab.component.tsx:391:5 |
react-hooks/exhaustive-deps |
React Hook useMemo has a missing dependency: 'handleAddPipelineRedirection'. Either include it or remove the dependency array. |
| 🟡 | src/components/DataQuality/TestSuite/TestSuitePipelineTab/TestSuitePipelineTab.component.tsx:411:6 |
react-hooks/exhaustive-deps |
React Hook useEffect has a missing dependency: 'getAllIngestionWorkflows'. Either include it or remove the dependency array. |
| 🟡 | src/components/Database/SchemaTable/SchemaTable.component.tsx:353:6 |
react-hooks/exhaustive-deps |
React Hook useEffect has a missing dependency: 'fetchTestCaseSummary'. Either include it or remove the dependency array. |
| 🟡 | src/components/Database/SchemaTable/SchemaTable.component.tsx:455:5 |
react-hooks/exhaustive-deps |
React Hook useCallback has a missing dependency: 'tableFqn'. Either include it or remove the dependency array. |
| 🟡 | src/components/Database/SchemaTable/SchemaTable.component.tsx:741:5 |
react-hooks/exhaustive-deps |
React Hook useCallback has missing dependencies: 'handleEditDisplayNameClick' and 't'. Either include them or remove the dependency array. |
| 🟡 | src/components/Database/SchemaTable/SchemaTable.component.tsx:868:5 |
react-hooks/exhaustive-deps |
React Hook useMemo has missing dependencies: 'handleColumnClick' and 't'. Either include them or remove the dependency array. |
| 🟡 | src/components/Database/SchemaTable/SchemaTable.component.tsx:948:5 |
react-hooks/exhaustive-deps |
React Hook useMemo has a missing dependency: 't'. Either include it or remove the dependency array. |
| 🟡 | src/components/Entity/EntityVersionTimeLine/EntityVersionTimeLine.tsx:42:6 |
react-hooks/exhaustive-deps |
React Hook useEffect has a missing dependency: 'getResourceLimit'. Either include it or remove the dependency array. |
| 🟡 | src/components/Entity/EntityVersionTimeLine/EntityVersionTimeLine.tsx:102:6 |
react-hooks/exhaustive-deps |
React Hook useMemo has missing dependencies: 'maxVersions' and 't'. Either include them or remove the dependency array. |
| 🟡 | src/components/Entity/Task/TaskTab/TaskTabNew.component.tsx:78:1 |
openmetadata-imports/no-lower-layer-page-imports |
Pages are route-level composition modules. Move the shared implementation/type to a lower layer instead of importing a page from here. |
| 🟡 | src/components/Entity/Task/TaskTab/TaskTabNew.component.tsx:79:1 |
openmetadata-imports/no-lower-layer-page-imports |
Pages are route-level composition modules. Move the shared implementation/type to a lower layer instead of importing a page from here. |
| 🟡 | src/components/Entity/Task/TaskTab/TaskTabNew.component.tsx:790:9 |
react-hooks/exhaustive-deps |
The 'updateTaskData' function makes the dependencies of useCallback Hook (at line 895) change on every render. To fix this, wrap the definition of 'updateTaskDa |
| 🟡 | src/components/Entity/Task/TaskTab/TaskTabNew.component.tsx:1342:6 |
react-hooks/exhaustive-deps |
React Hook useMemo has unnecessary dependencies: 'onTaskDropdownClick', 'taskHandler.approvedValue', and 'taskHandler.rejectedValue'. Either exclude them or rem |
… and 29 more. Run make ui-checkstyle-changed locally for the full list.
Fix locally (fast - only checks files changed in this branch):
make ui-checkstyle-changed
Code Review ✅ Approved 1 closed / 1 findings🟡 Medium risk · Replacing Ant Design across Observability and shared task, feed, and editor components changes many UI workflows, so interaction regressions could disrupt incident or task operations. Migrates AI-mode Observability components from antd to ✅ 1 closed✅ Performance: AddTestCaseList dropped virtualization; DOM grows with every loaded page
OptionsDisplay: compact → Counting what did not apply, without listing it. Comment with these commands to change the behavior for this request:
Was this helpful? React with 👍 / 👎 | Powered by Gitar — free for open source |
|



Fixes #34935
Part of open-metadata/openmetadata-collate#6826
Summary
Every component reachable from AI-mode Observability now uses
@openmetadata/ui-core-components, migrated in place while preserving the existing entry points and workflows. The antd scan over the Observability tree goes from 86 files onmainto 0 of 587.Shared fixes found during the before/after review:
Intentional differences:
startTs/endTs, and Clear all resets the filters.id: undefined.Evidence
Before/after composites: 72 places, each one image with Before | After × Light | Dark (
mainat 9675c6d vs this branch), attached below. Groups: alerts (6), incidents and status (8), test cases, suites and library (22), pipelines (5), learning (4), entity headers and versions (10), block editor (4), tasks and feed (9), other classic pages (4).Unit: latest affected-component run: 60 suites / 877 tests passed, covering
ActivityFeedDrawer,MathEquationComponent,SelectionCardGroup,ConnectionStepCard,EditorSlotsread-only menus, Incident Manager and the other migrated components.Types/lint: the application typecheck recorded before this merge reported 575 baseline diagnostics. The Playwright typecheck recorded at
49c688eb44areports 116 errors, identically reproduced with the unchanged HEAD version of the repaired spec; none are inIncidentManagerDateFilter.spec.ts. Full Playwright lint passes with 0 errors / 197 existing warnings; PR-wide Playwright formatting passes; 170 guardrail tests pass. All applicable pre-commit hooks passed without bypasses.Playwright (local, affected specs): 174/230 on the first run; after fixes, all branch-only failures pass:
.ant-*DOM.main: ProfileNotificationTab:438, DataQualityDashboard (Domain cannot be empty when data products are provided), ObservabilityAlerts webhook delivery, LearningResources:329 (duplicate seed data).Incident Manager date-filter verification (
49c688eb44a):playwright/e2e/Features/DataQuality/IncidentManagerDateFilter.spec.tsto exercise the core picker, dropdowns and Clear all control. Coverage verifies staged selection, exact browser-local day boundaries in API and URL parameters, clearing, reload persistence, and both date fields.IncidentManager.spec.tsfilter test, with no retries.Repeated verification, from the UI directory after running the standard
setupproject:PLAYWRIGHT_TEST_BASE_URL=http://localhost:3200 PW_PRESEEDED_STATE=true yarn playwright test e2e/Features/DataQuality/IncidentManagerDateFilter.spec.ts --project=chromium --repeat-each=10 --workers=4 --retries=0 --no-deps --reporter=listLatest main merge (
6bcfc9885c5, branch headb69d75955ac): GitHub reports no merge conflicts. Resolved the suppression-count conflict against the measured merged ledger (591 positional locators) and regenerated token artifacts to remove four unused legacy colors. After the merge, 12/12 focused browser checks passed without retries, the affected Jest run passed 60 suites / 877 tests, the core-table suite passed 11 tests, and both core and application production builds passed. Playwright guardrails (170 tests), token tests (18 tests), token drift, impact-map freshness, applicable commit hooks, and the new Java ownership pre-push check all passed. The 110/110 repeated run above was recorded on the date-filter fix commit before this main merge.AUT: run 37959279545 built successfully; both local-webserver lanes passed, while both full-suite lanes failed. The original Incident Manager filter test passed on both databases, but all 11 date-filter cases still targeted the removed legacy controls. The fix above passes locally; AUT validation of the latest commit remains pending.
Review regressions fixed (
76f445a8df1): bundle-suite typing always performs the server search, including an exact loaded label; only an explicit combobox selection sets the suite, cancels pending search, and enables Add. Added tests using the real core combobox. Large test-case pickers use React AriaVirtualizer/GridListexported by core-components, with stable entity keys, measured variable-height cards, preserved spacing, selection state, and scroll paging. No new dependency orrc-*import. Regression tests verify selection after an offscreen row remounts and eight accumulated pages with a bounded rendered window.Focused verification for the review fixes: 5 Jest suites / 86 tests passed; both existing bundle-add and picker-filter browser flows passed with one worker and no retries, using a temporary page-local Classic-mode override because the saved admin preference is AI (spec files restored afterward). A separate browser fixture loaded 200 mixed-height cards in eight 25-row pages, kept 5–9 cards mounted, and preserved selection after scrolling away and back. Core type-check, core/application builds, changed-file UI checkstyle, impact-map freshness, decision-record validation, and all applicable commit hooks passed. The full application type-check retains 581 errors, with the same diagnostic locations/codes on unchanged HEAD; the full legacy token audit retains the same 88 errors on unchanged HEAD. Neither baseline failure was expanded by this patch.
Recorded integration contract: alert-widget values and OSS-before-Collate decision record. Both PRs are conflict-free; the coordinated merge requirement remains OSS first, then Collate Query parser not able to recognise table with special char during usage #7216 immediately afterward. Latest-commit AUT validation remains pending.
Merge Danger
Door: two-way
Revert restores antd; no schema, API or data change.
Blast Radius: wide-UI
Shared components outside Observability use these too: BlockEditor menus, the activity feed and task pages,
CertificationTag,SlideoutMenu(core), and everyTable.interfaceimporter at type level. Collate depends on this: companion PR #7216 (same branch) readsvaluesinTestAlertButtonbecauseformRefis no longer passed to extra alert buttons. Merge this first, then the Collate PR right after.Follow-ups, already broken on
mainand not touched here:inputis not passed through.