Repository navigation
AI-mode service page: version history, follow, announcements, delete lands on the list - #35318
Conversation
…ct views in AI mode The AI-mode service details page had only one asset tab per service, so a dashboard service's data models and a drive service's files and spreadsheets could not be reached, and the service's data products were neither shown nor editable (their right-panel container is hidden here). - Dashboard services get a Data Model tab (classic's DataModelTable), and drive services Files and Spreadsheets tabs, between the data-assets tab and Connection. Tab keys are classic's EntityTabs values, so classic deep links land on them. Content mounts only for a tab the category offers, so a deep link to a tab the service lacks never fetches. - FilesTable / SpreadsheetsTable leave the plain list and its paging to the caller; useServiceDriveAssets owns that once for both: the table's fields, top level only, the Deleted switch, the URL cursor, deferring to the table's own search, and only the latest request writes the rows. - Metadata Details shows the service's data products with DataProductsContainer, gated like classic: EditAll on a live service, the entity rules for multiple / domain-required, none for metadata services. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Swap DataProductsContainer, a right-panel card, for DataProductsSection, the section family Metadata Details already uses for glossary terms and tags, so it sits flush with them and applies the entity rules itself. It saves the service through the entity patch API; the page only mirrors the result into its own copy, so nothing is patched twice. The Playwright test now assigns a data product from the section, checks the service PATCH, and that it persists across a reload. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…abs-parity # Conflicts: # .github/playwright/timing-baseline.json
… warnings - Mark the fire-and-forget fetches in effects with `void` (Sonar S9383): useServiceDriveAssets' list fetch and the page's own list fetch. Both catch their own errors. - The service and permission fetch effect now declares its dependencies, so moving to another service without a remount loads that service instead of keeping the old one. - Theme-adapting `utility-` palette classes instead of static grays. - Memoise DataAssetsTab's tag list so its callbacks keep their identity. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…gn review - Tab labels count their assets: the data-assets tab and each secondary tab (data models, files, spreadsheets), fetched with limit=0 so a count shows before its tab's list loads, and following the Deleted switch. - Metadata Details opens expanded. - The asset table drops the outer card (ServiceMainTabContent `wrapInCard`, default true so classic is unchanged) and takes the metadata card's rounded corners and border token; the panel's grey backdrop no longer shows under it. - A long service name ends in an ellipsis with the full name in a tooltip, and the Deleted badge moves to the page header's badge slot. - Secondary-tab definitions move to connectionServiceChildren.utils as a Map, so a URL category such as `constructor` resolves to no tabs. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…on the AI-mode service page - Version history: the header shows the current version as a pill that opens a version-history slideout, as on Context Center. The slideout and pill are extracted from Context Center's persona drawer into common/VersionHistorySlideout, and the persona drawer now renders through it (restore stays persona-specific). Service versions use classic's change summary (getSummary). - Follow: database services only and not when deleted, as classic; reuses classic's StatItem + FollowStarIcon (`entity-follow-button`). - Announcements: the service's active announcements show under the header on every tab (AnnouncementsWidgetV3Body, as on domain details), open the announcement drawer, and reload when it closes. - Delete: lands on the service category's tab on the Connections listing instead of navigate(-1). - formatEntityVersion moves to EntityVersionUtilsPure (was persona-only). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
Hi there 👋 Thanks for your contribution! The OpenMetadata team will review the PR shortly! Once it has been labeled as Let us know if you need any help! |
… route moves on The page refetches the service and its permission when the route moves to another service without remounting. A slower answer for the previous service could land after the new one's, so edits would patch, and permissions gate, the wrong service. Each fetch now lets only its latest request write, as the page's list fetch already does. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ice-page-design-pass
…e-service-header-actions
|
Hi there 👋 Thanks for your contribution! The OpenMetadata team will review the PR shortly! Once it has been labeled as Let us know if you need any help! |
… articles do Design's reference is the Context Center article: the header shows the current version (↻ 0.3) and pressing it opens the entity's version route, which shows that version beside the "Versions History" timeline; picking a version moves to it and closing returns to the page. AI mode already serves the service version route (`/service/<category>/<fqn>/versions/<version>`) inside the Connections layout, so the header now navigates there. The article's version button becomes common/HeaderVersionButton, used by both headers. The slideout extracted from the persona AI-context drawer, and the persona refactor onto it, are reverted: nothing else uses them now. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…test Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ice-page-design-pass
…e-service-header-actions
|
Hi there 👋 Thanks for your contribution! The OpenMetadata team will review the PR shortly! Once it has been labeled as Let us know if you need any help! |
…and Tags The tab's overrides zeroed all of DataProductsSection's padding, but that section spaces its title from its content with padding-bottom (Glossary Terms and Tags use margin), so the chip sat right under the title. Keep the 12px under the title and drop only the side and trailing padding. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ice-page-design-pass
…e-service-header-actions
|
Hi there 👋 Thanks for your contribution! The OpenMetadata team will review the PR shortly! Once it has been labeled as Let us know if you need any help! |
…mode, as classic Metadata and security services have no child assets, so AI mode showed an empty "Databases" tab for them. Classic offers no such tab; neither does AI mode now. The page opens on the next tab (Connection for those who may edit it), a deep link to the tab falls back the same way, and no list request is made. DataAssetsTab's metadata-service guard on data products is gone with it: a metadata service never reaches that tab now. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ice-page-design-pass # Conflicts: # .github/playwright/timing-baseline.json # openmetadata-ui/src/main/resources/ui/src/components/integration/ConnectionServiceDetailsPage/ConnectionServiceDetailsPage.tsx
…e-service-header-actions # Conflicts: # .github/playwright/timing-baseline.json # openmetadata-ui/src/main/resources/ui/playwright/e2e/Features/AIMode/ConnectionServiceDetails.spec.ts # openmetadata-ui/src/main/resources/ui/src/components/integration/ConnectionServiceDetailsPage/ConnectionServiceDetailsPage.tsx
✅ Playwright Results — workflow succeededValidated commit ✅ 4872 passed · ❌ 0 failed · 🟡 6 flaky · ⏭️ 1 skipped · 🧰 0 lifecycle flaky PerformanceBlocking targets: ✅ met · Optimization targets: 🟡 in progress Shard-job maxima below are not the full workflow wall time; the linked run includes build, fixture, planning, and reporting. 🕒 Full workflow signal wall (to summary) 39m 2s ⏱️ Max setup 4m 38s · max shard execution 21m 7s · max shard-job elapsed before upload 24m 22s · reporting 19s 🌐 228.38 requests/attempt · 2.15 app boots/UI scenario · 39.15% common-shard skew Optimization targets still in progress:
🟡 6 flaky test(s) (passed on retry)
How to debug locally# Download playwright-test-results-<shard> artifact and unzip
npx playwright show-trace path/to/trace.zip # view trace |
…igations Tooltip wraps a focusable child itself, so the version button goes straight in. The version and post-delete navigations are fire-and-forget; mark them void so the unhandled promise is explicit. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…header-actions # Conflicts: # .github/playwright/timing-baseline.json
🚦 Removed from the merge queue —
|
Code Review ✅ Approved 1 closed / 1 findings🟡 Medium risk · Adding service follow controls, announcement banners, version navigation, and delete routing changes UI workflows and could leave follow or announcement state out of sync. Adds a header version button ( ✅ 1 closed✅ Quality: New shared HeaderVersionButton imports its icon from assets/
VerificationRules No rules evaluated Functional validation Not enabledAuto-approval Not enabledFor more verification details, comment OptionsDisplay: compact → Showing compact verification results. Comment with these commands to change the behavior for this request:
Was this helpful? React with 👍 / 👎 | Powered by Gitar — free for open source |
|



Describe your changes:
Fixes 7316
Follow-up to #35314 (design review of the AI-mode service details page, #35270). It covers the header items design settled on 2026-10-13. Based on
main(#35286 and #35314 have merged). Delete lands on the service list for the permanent delete #35310 added on a soft-deleted service too.↻ 0.2); pressing it opens the version view with the Versions History timeline, as Context Center articles donavigate(-1), so wherever the user came fromHow
/service/<category>/<fqn>/versions/<version>, which shows that version beside the Versions History timeline (EntityVersionTimeLine)./connections/<category>/<fqn>.connections.module.tsx), so the header only navigates there; no new panel.common/HeaderVersionButton, used by both headers. Itsversion-btntest id is unchanged.StatItem+FollowStarIconwith the sameentity-follow-buttontest id.addServiceFollower) exists for database services alone.useActiveAnnouncementsloads the active ones (only the latest request may write).AnnouncementsWidgetV3Body, the banner domain details uses, renders them above every tab's content. Closing the announcement drawer reloads them.getServiceListPath(beside the category breadcrumb, which now shares its lookup) gives/connections?category=<category>, or/connectionsfor a category the listing does not tab. Per @pmbrull, the redirect happens after the delete is accepted, soft or hard.Screen.Recording.2026-10-13.at.2.53.50.PM.mov
Postgres run - https://github.com/open-metadata/OpenMetadata/actions/runs/38683500178
Type of change:
High-level design:
N/A — small change.
Tests:
Use cases covered
Unit tests
HeaderVersionButton.test.tsx(1)ServiceFollowButton.test.tsx(3): follow, unfollow, failure keeps followersuseActiveAnnouncements.test.ts(5): load, waits for the entity, refetch, stale response ignored, errorConnectionServiceDetailsPage.test.tsx(+7): version button opens the version route, follow gating and follower round trip, delete redirect, banner on every tab, drawer open/close reloadconnectionsBreadcrumb.utils.test.ts(+2)HeaderVersionButtonandpages/ServiceDetailsPage.Backend integration tests
Ingestion integration tests
Playwright (UI) tests
playwright/e2e/Features/AIMode/ConnectionServiceDetails.spec.ts: +4 tests (version history; follow then unfollow; announcement on every tab; delete lands on the list). The database service gets a second version and an active announcement inbeforeAll./connections/.... Not run against the base branch as a control.Manual testing performed
Ran this branch against a local server in the light and dark themes; screenshots below.
UI screen recording / screenshots:
Checklist:
Fixes <issue-number>: <short explanation>(follow-up to AI-mode service details: no Data Model tab, no Files/Spreadsheets tabs, data products not shown #35270)Fixes #<issue-number>above.🤖 Generated with Claude Code