Skip to content

Fixes 34853: correct Governance forms and graph theme - #34854

Merged
shah-harshit merged 16 commits into
mainfrom
fix/governance-dark-theme-feedback
Oct 8, 2026
Merged

shah-harshit merged 16 commits into
mainfrom
fix/governance-dark-theme-feedback

Conversation

@shah-harshit

@shah-harshit shah-harshit commented Oct 7, 2026 •

Copy link
Copy Markdown
Contributor

Describe your changes:

Fixes #34853

Correct Governance graph colors and migrate task forms to core controls. Collate's classification/editor companion is tracked in https://github.com/open-metadata/openmetadata-collate/pull/7182.

Type of change:

  • Bug fix

High-level design:

Resolve graph colors through semantic theme tokens while preserving stored palette keys and graph camera state. Use core form controls and cards while preserving task payloads and selected assignee metadata. Shared import, disabled-button, and editor-toolbar fixes remain covered by #34796.

Tests:

Use cases covered

  • Relation colors, badges, canvas, and node borders follow the active theme.
  • Request/update description and tag forms retain their payload behavior with core controls.
  • Selected assignee metadata survives remote searches; schema fields retain accessible labels and required state.

Unit tests

Latest affected run: 94 suites / 592 tests passed at 092e981, including the selected-assignee native validation regression. Suites: TasksPage, OntologyExplorer, GlossaryLeftPanel, IncidentManager, and TestCaseStatusModal. Updated regression files: graphStyles.test.ts, OntologyExplorer.test.tsx, Assignees.test.tsx, TaskPayloadSchemaFields.test.tsx.

Measured affected-file coverage: 64.10% lines, 51.23% branches across the changed source files at 092e981. Coverage run includes TasksPage, OntologyExplorer, GlossaryLeftPanel, IncidentManager, and TestCaseStatusModal.

UI checkstyle (imports, ESLint, Prettier, license headers, translations, generated application docs, design-system guard) and git diff --check passed.

Cleanup commit b0c1c8c (dead Task styles, legacy classes → tw:/Typography props, dark-safe clamp fade): 83 suites / 494 tests passed across TasksPage and OntologyExplorer; UI checkstyle clean.

Backend integration tests

Not applicable — no backend/API changes.

Ingestion integration tests

Not applicable — no ingestion changes.

Playwright (UI) tests

Ran locally (chromium, 3 workers) at b0c1c8c + spec fixes in f10cb2b. Frontend: branch Vite dev server on localhost:3103; backend: local Collate server on localhost:8585 (MySQL + Elasticsearch).

Updated specs/utils for the core task form DOM (antd #title, .ant-select-* assignee and .ant-form-item-explain-error selectors no longer exist): TaskCreation.spec.ts, TaskAssigneeManagement.spec.ts, TasksUIFlow.spec.ts, utils/task.ts, utils/taskWorkflow.ts, utils/glossary.ts.

Specs Passed Failed Flaky
Tasks.spec.ts, Tasks/TaskCreation.spec.ts, Tasks/TaskAssigneeManagement.spec.ts, TasksUIFlow.spec.ts, DescriptionSuggestion.spec.ts, TagsSuggestion.spec.ts 33 0 0

Ontology Studio and Incident Manager specs could not be validated locally: this backend boots the AI-mode shell, so the shared sidebarClick helper (unchanged here) never finds left-sidebar, and the Incident Manager lifecycle needs an Argo server that is not running locally. CI covers these.

Manual testing performed

  1. Ran branch and main frontends against the local Collate backend on localhost:8585 and signed in as admin.
  2. Compared Ontology Studio for the disposable GovernanceThemeReview glossary with three terms and two relations in light and dark mode.
  3. Compared the Customer request-description task form in light and dark mode; searched for admin and selected the original user entry. Submitted a description task successfully with admin assigned, then confirmed an empty selection still shows the required-field error.

UI screen recording / screenshots:

Before/after comparisons against main 87425d6 and branch 3ace220. Graph and task screenshots refreshed for the current UI.

Surface Main Branch
Ontology / light Main Ontology / light Branch Ontology / light
Ontology / dark Main Ontology / dark Branch Ontology / dark
Task form / light Main Task form / light Branch Task form / light
Task form / dark Main Task form / dark Branch Task form / dark

Visually verified at b0c1c8c (Task form legacy-class cleanup). Task form layout is unchanged; the Diff tab now uses the same bordered panel as the Current tab, and the clamp fade resolves to the active surface (rgb(12, 14, 18) in dark) instead of white.

Surface Branch b0c1c8c
Update description · Diff / light Diff light
Update description · Diff / dark Diff dark
Update description · Current / dark Current dark
Update tags / dark Update tags dark

Recording: not attached. Marked ready for review at the requested review stage.

Checklist:

  • PR title follows Fixes : .
  • PR linked to the issue above.
  • Touched logic reviewed; explanatory comments retained/updated for non-obvious constraints.
  • JSON Schema migrations: not applicable.
  • Main/branch screenshots uploaded in light and dark.
  • Recording not attached.
  • Regression tests added/updated and listed above.
  • No submodule pointer changes.

@shah-harshit shah-harshit added UI UI specific issues safe to test Add this label to run secure Github workflows on PRs skip-pr-checks Bypass PR metadata validation check labels Oct 7, 2026
@shah-harshit shah-harshit self-assigned this Oct 7, 2026
@github-actions

github-actions Bot commented Oct 7, 2026 •

Copy link
Copy Markdown
Contributor

Jest test Coverage

UI tests summary

Lines Statements Branches Functions
Coverage: 76%
75.94% (118231/155686) 61.85% (73033/118075) 63.21% (24368/38550)

Remove unused task-page.style.less and Assignee.less, replace legacy
spacing/typography classes with tw: utilities and Typography props, and
make the schema field fade follow the active surface in dark mode.
shah-harshit and others added 2 commits October 7, 2026 21:48
Task title and assignee fields moved from antd to core Input/Autocomplete;
update selectors to the new DOM (title input, combobox input, selected-item
remove button, field hint error).
@github-actions

github-actions Bot commented Oct 7, 2026

Copy link
Copy Markdown
Contributor

🔄 Playwright impact map auto-refreshed

This PR touched specs or UI source that changed the source→spec routing map. I regenerated .github/playwright/impact-map.generated.json and pushed the diff to this branch.

- source entries: 852 → 852
- 0 added, 0 removed, 1 changed spec-list

Entries whose spec list changed:
  openmetadata-ui/src/main/resources/ui/src/components/Settings/CustomProperty/CustomPropertyEditForm/CustomPropertyEditForm.tsx

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 getByTestId strings. Hand-authored routing in impact-map.json always wins on conflict.

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

Prune the TasksUIFlow no-wait-for-selector baseline the Playwright selector
update fixed, switch the schema enum Select to the non-deprecated
value/onChange API, and use RegExp.exec for the palette token match.
The TasksUIFlow selector update removed four baselined waitForSelector
calls; record the pruned count so the guardrail corpus test passes.
@anuj-kumary
anuj-kumary added this pull request to the merge queue Oct 8, 2026
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Oct 8, 2026
@github-actions

github-actions Bot commented Oct 8, 2026

Copy link
Copy Markdown
Contributor

🚦 Removed from the merge queue — failed_checks (2026-10-08T03:49:25Z)

Blocked the queue: playwright-summary

  • Postgresql PR Playwright E2E Tests — playwright-summary, playwright / playwright-ci (ingestion-02), playwright / playwright-ci (chromium-04), playwright / playwright-ci (chromium-05)

Failed Playwright tests:

  • Features/IncidentManager.spec.ts › Complete Incident lifecycle with table owner
  • Features/Tasks/TaskCustomFormWorkflow.spec.ts › renders and resolves a workflow-driven custom task end to end
  • Pages/Tags.spec.ts › Classification Page

… specs

Incident reassignment, the incident assignee filter, the Tags task flow
and the custom task form still drove antd selectors (.ant-select-selector,
close-circle, .ant-form-item). Use the Autocomplete input, its selected-item
remove button and label-based textbox locators, and prune the baselines
these changes fixed.
@github-actions

github-actions Bot commented Oct 8, 2026

Copy link
Copy Markdown
Contributor

🔄 Playwright impact map auto-refreshed

This PR touched specs or UI source that changed the source→spec routing map. I regenerated .github/playwright/impact-map.generated.json and pushed the diff to this branch.

- source entries: 852 → 852
- 0 added, 0 removed, 4 changed spec-list

Entries whose spec list changed:
  openmetadata-ui/src/main/resources/ui/playwright/support/entity/BundleTestSuiteClass.ts
  openmetadata-ui/src/main/resources/ui/src/components/Database/Profiler/DataQualityTab/DataQualityTab.tsx
  openmetadata-ui/src/main/resources/ui/src/components/common/TabsLabel/TabsLabel.component.tsx
  openmetadata-ui/src/main/resources/ui/src/generated/entity/services/ingestionPipelines/ingestionPipeline.ts

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 getByTestId strings. Hand-authored routing in impact-map.json always wins on conflict.

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

@github-actions

github-actions Bot commented Oct 8, 2026

Copy link
Copy Markdown
Contributor

⚠️ UI Checkstyle passed — lint findings in changed files

🔍 ESLint findings in this PR's files — 0 error(s), 26 warning(s)

Errors block the build. Warnings do not yet — they are rules whose backlog is still
being worked down, listed so this PR does not add to it. See docs/ui-code-quality-gate.md.

0 error(s), 26 warning(s) across 12 changed file(s).

Count Rule
14 react-hooks/exhaustive-deps
7 openmetadata-ui-patterns/no-non-adaptive-palette
3 openmetadata-imports/no-lower-layer-page-imports
1 openmetadata-imports/review-sequential-api-calls
1 openmetadata-imports/no-api-calls-in-iteration
All findings
Location Rule Message
🟡 src/components/DataQuality/TestCaseStatusModal/TestCaseStatusModal.component.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/TestCaseStatusModal/TestCaseStatusModal.component.tsx:23: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:220: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:260:5 react-hooks/exhaustive-deps React Hook useMemo has missing dependencies: 'form' and 't'. Either include them or remove the dependency array.
🟡 src/components/DataQuality/TestCaseStatusModal/TestCaseStatusModal.component.tsx:282: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:297:6 react-hooks/exhaustive-deps React Hook useEffect has a missing dependency: 'form'. Either include it or remove the dependency array.
🟡 src/components/IncidentManager/IncidentManager.component.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/OntologyExplorer/OntologyAuthoringInspector.tsx:190:9 react-hooks/exhaustive-deps The 'conceptMappings' logical expression could make the dependencies of useCallback Hook (at line 263) change on every render. To fix this, wrap the initializat
🟡 src/components/OntologyExplorer/OntologyImportExportModal.tsx:331:9 openmetadata-imports/no-api-calls-in-iteration Avoid issuing one API request per item. Fetch at the data owner, use a bulk endpoint, or use useQueries with an intentional concurrency policy.
🟡 src/components/OntologyExplorer/OntologyImportExportModal.tsx:721:27 openmetadata-ui-patterns/no-non-adaptive-palette Raw palette class "tw:bg-brand-50, tw:text-brand-700" is static — it does not flip in dark mode. Use the theme-adapting "utility-" variant (tw:bg-utility-brand-
🟡 src/components/OntologyExplorer/OntologyImportExportModal.tsx:734:23 openmetadata-ui-patterns/no-non-adaptive-palette Raw palette class "tw:border-warning-300, tw:bg-warning-50" is static — it does not flip in dark mode. Use the theme-adapting "utility-" variant (tw:border-util
🟡 src/components/OntologyExplorer/OntologyImportExportModal.tsx:756:23 openmetadata-ui-patterns/no-non-adaptive-palette Raw palette class "tw:bg-brand-50" is static — it does not flip in dark mode. Use the theme-adapting "utility-" variant (tw:bg-utility-brand-50) or a semantic t
🟡 src/components/OntologyExplorer/OntologyImportExportModal.tsx:758:35 openmetadata-ui-patterns/no-non-adaptive-palette Raw palette class "tw:text-brand-600" is static — it does not flip in dark mode. Use the theme-adapting "utility-" variant (tw:text-utility-brand-600) or a sema
🟡 src/components/OntologyExplorer/OntologyImportExportModal.tsx:759:28 openmetadata-ui-patterns/no-non-adaptive-palette Raw palette class "tw:text-brand-700" is static — it does not flip in dark mode. Use the theme-adapting "utility-" variant (tw:text-utility-brand-700) or a sema
🟡 src/components/OntologyExplorer/OntologyImportExportModal.tsx:782:25 openmetadata-ui-patterns/no-non-adaptive-palette Raw palette class "tw:bg-brand-50" is static — it does not flip in dark mode. Use the theme-adapting "utility-" variant (tw:bg-utility-brand-50) or a semantic t
🟡 src/components/OntologyExplorer/OntologyImportExportModal.tsx:783:29 openmetadata-ui-patterns/no-non-adaptive-palette Raw palette class "tw:text-brand-600" is static — it does not flip in dark mode. Use the theme-adapting "utility-" variant (tw:text-utility-brand-600) or a sema
🟡 src/components/OntologyExplorer/OntologyLibrary.tsx:153:5 react-hooks/exhaustive-deps React Hook useCallback has a missing dependency: 'canInstall'. Either include it or remove the dependency array.
🟡 src/components/OntologyExplorer/OntologyNodeRelationsContent.tsx:212:6 react-hooks/exhaustive-deps React Hook useCallback has a missing dependency: 'setTermDetails'. Either include it or remove the dependency array.
🟡 src/components/OntologyExplorer/hooks/useOntologyGraph.ts:1616:5 react-hooks/exhaustive-deps React Hook useMemo has a missing dependency: 'DATA_MODE_ASSET_TYPES'. Either include it or remove the dependency array.
🟡 src/components/OntologyExplorer/hooks/useOntologyGraph.ts:2057:6 react-hooks/exhaustive-deps React Hook useEffect has missing dependencies: 'containerRef', 'glossaryColorMap', 'graphData', 'inputNodes.length', 'onNodeClick', 'onNodeDoubleClick', 'onPane
🟡 src/components/OntologyExplorer/hooks/useOntologyGraph.ts:2318:6 react-hooks/exhaustive-deps React Hook useEffect has a missing dependency: 'suppressEdgeCheck'. Either include it or remove the dependency array.
🟡 src/pages/Glossary/GlossaryLeftPanel/GlossaryLeftPanel.component.tsx:89:6 react-hooks/exhaustive-deps React Hook useEffect has missing dependencies: 'glossaries' and 'selectedKey'. Either include them or remove the dependency array.
🟡 src/pages/TasksPage/RequestDescriptionPage/RequestDescriptionPage.tsx:201:6 react-hooks/exhaustive-deps React Hook useEffect has a missing dependency: 'getTaskAbout'. Either include it or remove the dependency array.
🟡 src/pages/TasksPage/RequestTagPage/RequestTagPage.tsx:195:6 react-hooks/exhaustive-deps React Hook useEffect has a missing dependency: 'getFieldPath'. Either include it or remove the dependency array.
🟡 src/pages/TasksPage/UpdateDescriptionPage/UpdateDescriptionPage.tsx:226:6 react-hooks/exhaustive-deps React Hook useEffect has missing dependencies: 'getDescription' and 'getTaskAbout'. Either include them or remove the dependency array.
🟡 src/pages/TasksPage/UpdateTagPage/UpdateTagPage.tsx:235:6 react-hooks/exhaustive-deps React Hook useEffect has missing dependencies: 'getFieldPath' and 'getTags'. Either include them or remove the dependency array.

Fix locally (fast - only checks files changed in this branch):

make ui-checkstyle-changed

@shah-harshit
shah-harshit added this pull request to the merge queue Oct 8, 2026
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Oct 8, 2026
@github-actions

github-actions Bot commented Oct 8, 2026

Copy link
Copy Markdown
Contributor

🚦 Removed from the merge queue — failed_checks (2026-10-08T08:00:21Z)

Blocked the queue: playwright-summary

Failed Playwright tests:

  • Features/IncidentManager.spec.ts › Complete Incident lifecycle with table owner

@shah-harshit
shah-harshit added this pull request to the merge queue Oct 8, 2026
@shah-harshit
shah-harshit removed this pull request from the merge queue due to a manual request Oct 8, 2026
@github-actions

github-actions Bot commented Oct 8, 2026

Copy link
Copy Markdown
Contributor

🚦 Removed from the merge queue — manual (2026-10-08T08:16:16Z)

The entry left the queue before it was built, so no checks ran against it.

The reassign modal uses single-select Assignees; core Autocomplete hides
its input while an item is selected, so remove the current assignee
before searching for the new one.
@shah-harshit
shah-harshit enabled auto-merge October 8, 2026 08:19
@shah-harshit
shah-harshit added this pull request to the merge queue Oct 8, 2026
The resolve transition requires testCaseFailureReason, rendered by the
schema fields as a core Select. The spec still looked for .ant-select-selector,
skipped the reason, and Save stopped at the required-field check. Pick the
option by the Root Cause label and lower the positional-locator ratchet.
@shah-harshit
shah-harshit removed this pull request from the merge queue due to a manual request Oct 8, 2026
@github-actions

github-actions Bot commented Oct 8, 2026

Copy link
Copy Markdown
Contributor

🚦 Removed from the merge queue — manual (2026-10-08T11:51:27Z)

No failing check on merge-queue commit 0e40c3b — invalidated by an entry ahead in the queue, or a required check timed out.

@shah-harshit
shah-harshit added this pull request to the merge queue Oct 8, 2026
@shah-harshit
shah-harshit removed this pull request from the merge queue due to a manual request Oct 8, 2026
@github-actions

github-actions Bot commented Oct 8, 2026

Copy link
Copy Markdown
Contributor

🚦 Removed from the merge queue — manual (2026-10-08T16:33:56Z)

The entry left the queue before it was built, so no checks ran against it.

…heme-feedback

# Conflicts:
#	.github/playwright/impact-map.generated.json
@gitar-bot

gitar-bot Bot commented Oct 8, 2026

Copy link
Copy Markdown
Code Review ✅ Approved 1 closed / 1 findings

🟡 Medium risk · Migrating governance task forms and assignee controls to core components changes validation and selection behavior, which could block submissions or misassign tasks.

Governance graph colors now resolve through semantic theme tokens while preserving stored palette keys and graph camera state; task forms migrated to core controls with payloads and assignee metadata retained. Relation colors, badges, canvas, and node borders follow the active theme in light and dark mode, and request/update description and tag forms maintain their behavior with core controls. No issues found.

✅ 1 closed
✅ Bug: Built-in relation colors no longer match hex-keyed lookup maps

📄 openmetadata-ui/src/main/resources/ui/src/components/OntologyExplorer/OntologyExplorer.constants.ts:120-134 📄 openmetadata-ui/src/main/resources/ui/src/components/OntologyExplorer/OntologyAuthoringInspector.tsx:271-276 📄 openmetadata-ui/src/main/resources/ui/src/components/OntologyExplorer/OntologyNodeRelationsContent.tsx:262-267 📄 openmetadata-ui/src/main/resources/ui/src/components/OntologyExplorer/utils/graphStyles.ts:596-608 📄 openmetadata-ui/src/main/resources/ui/src/components/OntologyExplorer/utils/graphStyles.ts:641-646 📄 openmetadata-ui/src/main/resources/ui/src/components/OntologyExplorer/OntologyDataGraph.tsx:404-412
RELATION_META colors used to be hex values (e.g. #1570ef) and are now var(--tw-color-utility-*-700) tokens. getEffectiveRelationColor returns that color for system-defined relations, but some consumers still look it up by hex:

  • Inspector badges: OntologyAuthoringInspector.tsx:271-276 and OntologyNodeRelationsContent.tsx:262-267 look up COLOR_META_BY_HEX[effectiveColor.toLowerCase()]. The token string never matches a hex key, so every built-in relation badge falls back to the plain bg-secondary background instead of its tinted *-50 palette background.
  • Studio edge badges: getStudioBorderColor (graphStyles.ts:641-646) looks up STUDIO_EDGE_BORDER_BY_COLOR by hex. Built-in relations now miss and get the generic border-primary stroke instead of their palette border.
  • Data graph edges: in OntologyDataGraph.tsx:409-412, effectiveColor.startsWith('var(') is now true for every built-in relation. Their edges are drawn with getRelationshipHexColor(relationshipType), a static hex based on the palette key that does not follow the theme, instead of the built-in relation color. Before this change these edges went through resolveCssColor.

The new test only exercises effectiveColor === undefined, so none of these paths is covered.

Review coverage

📋 Rules No rules evaluated

🧪 Functional validation Not enabled · Set up

🤖 Auto-approval Not enabled · Set up

Options

Display: compact → Counting what did not apply, without listing it.

Comment with these commands to change the behavior for this request:

Compact
gitar display:verbose         

Was this helpful? React with 👍 / 👎 | Powered by Gitar — free for open source

@sonarqubecloud

sonarqubecloud Bot commented Oct 8, 2026

Copy link
Copy Markdown

@shah-harshit
shah-harshit added this pull request to the merge queue Oct 8, 2026
Merged via the queue into main with commit fc6a14d Oct 8, 2026
70 of 71 checks passed
@shah-harshit
shah-harshit deleted the fix/governance-dark-theme-feedback branch October 8, 2026 22:47

This branch was successfully deployed

1 active deployment
test — 826d6c0f Deployed Oct 8, 2026 by shah-harshit via RDF Playwright execution #27286
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

safe to test Add this label to run secure Github workflows on PRs skip-pr-checks Bypass PR metadata validation check UI UI specific issues

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Fix Governance forms and dark graph colors

3 participants