Repository navigation
Fixes #36714: Project concepts onto bound assets in Data mode - #36724
Conversation
… canvas Adds the 360 px New class panel (identity, definition, axioms, properties, governance), a typed single change set built by OntologyNativeChangeSet.utils, free-slot node placement, cancel-on-source-click for drawn relations, and grouped class rows in the release panel. Translates the new locale keys.
Unlock the panel and the page after a rejected or applied attempt, and rebuild the plan from a fresh working revision on the next Create. Restore the guard against replaying an old Add concept request. Define the missing label keys and translate them in every locale. Keep the canvas alive when a class is placed, and read and write node centers consistently. Show the class change row with its local name, parents and a pluralized property count, name property types, and manage focus.
…ypes A user whose policy grants Create but not EditAll on relationshipType could register a primary type and its inverse and then fail on the back-link patch, which the server authorizes as EditAll. The new tests expect the dialog to disable its inverse field for that user and the flow to write a single type, plain or symmetric, with no patch. The first test fails on the current component.
The inverse's back link is a PATCH of /inverse on the inverse type, which the server authorizes as EditAll on relationshipType, and the creator holds no owner right on a type it just made. The create dialog now disables the inverse field for a user without that right and shows the standard permission message under it, so a create-only user registers one type, plain or symmetric, and never leaves a half-linked pair. The decision record gains a v2 amendment with the rule.
A dry run counted a one-value enumeration, duplicate enum values, and a one-item property chain as importable, and the draft then failed to apply. The repository and the preview now read one rule set, so the preview names the CSV row and column, or the RDF property, before Import is offered.
The placeholder is absolutely positioned and centred, so options taller than the viewport spilled past both edges of an overflow-hidden page. The host now scrolls, and the placeholder flows inside it, centred when it fits. The icon colour test also inspects the glyph element, so a grey class on the icon itself fails it.
The placeholder now sits in a centred core Card at the old 340px width, so the copy no longer runs through the canvas dot grid. The overlay still lets pointer events through, and only the card takes them. The test names what it proves: the shared empty placeholder renders inside the card. The wrapper guard itself is a lint rule, not a DOM assertion.
…mment The record now says iri and namespace must parse as a URI and that the server has no uniqueness check on namespace, so the duplicate refusal is client-only. It no longer claims other code reads the onto/ shape, and the comment above ontologyIris keeps only the record citation.
The wrapper now maps an optional per-feature action to a title button, which the record said it never would. Add a v3 revision and a dated amendment, and leave the Decision text unchanged.
A Load more pressed before the second 412 still sends its one queued request afterwards, so the record no longer says nothing is sent. It also names the hook's Generation a load generation, to keep it apart from the server's topology generation, and says which tests guard the amendment now that OntologyConceptDataGraph.test.tsx is gone.
…t it proves The AI-mode heading is a surfaced card and the classic heading is not. The logo tile test says it checks the card surface colour rather than visibility.
…tion Core Button sizes set their own radius and padding and TypographyColor has no primary or secondary-text step, so the full-bleed asset rows and three text colours stay styled at the call site. A scoped record and a v4 amendment to the styling decision say so, and the call sites cite it. The asset name keeps its primary colour because the tertiary button would mute it. The Data layer title drops its primary colour because the page text is already primary. The Load more strip puts its border and padding on a plain div instead of a core Box.
The organize-imports and ESLint pass in CI inserts this blank line.
Takes the decision record's last wording fix from PR9's final head, which main now holds as #36721.
main's tree equals the class authoring head merged in the parent commit, so this merge records the squash and keeps the first-run tree as it is.
The glossary empty state now takes its muted colour from Typography's color prop, so the exception record's closing sentence holds for every Typography in Data mode. The bindings amendment names the PR by number and the view test that pins the stale message, and the AI-mode heading test resets the mode in afterEach.
… its scroll host The placeholder kept flex-shrink 1 and min-h-full replaced its automatic minimum, so it shrank to the host height and its centred content spilled above the scroll origin. Use flex-1 with h-auto so it grows past the host and stays centred when it fits. Put the no-concepts placeholder in Card.Content so the card supplies the padding.
At 720x450 the headline must sit at or below the scroll host top and Create from scratch must scroll into view.
…ding A relative iri also gets 400, iriHash covers iri and not namespace, and the context no longer says the server stores whatever it is sent. The v3 amendment follows the v2 heading and lead-line style.
Without tw:h-auto the shell keeps its own h-full, shrinks to the scroll host and clips the headline again, so the scroll host test now asserts it.
Code Review ✅ Approved 2 closed / 2 findings🟡 Medium risk · Adding a paged native ontology Data graph changes asset and lineage presentation; paging or topology errors could hide assets or misstate relationships. Adds Data mode to native ontologies, showing every bound concept as a paged card on one graph with asset rows, lineage and relation edges, and Load more/Show less controls. Client page size and stale-retry budget are now recorded, and new native rows and chrome no longer conflict with core component styling. No open issues remain. ✅ 2 closed✅ Quality: Client page size and stale-retry budget are not in any decision record
✅ Quality: New native rows and chrome override core component styling
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 |
|
| Count | Rule |
|---|---|
| 7 | openmetadata-imports/review-sequential-api-calls |
| 1 | openmetadata-imports/no-api-calls-in-iteration |
All findings
| Location | Rule | Message | |
|---|---|---|---|
| 🟡 | src/components/governance/ontology/OntologyGraphView/OntologyGraphView.tsx:573:9 |
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/hooks/governance/ontology/useOntologyConceptBindings.ts:157:26 |
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/rest/ontologyAPI.test.ts:253:12 |
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/rest/ontologyAPI.test.ts:261:12 |
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/rest/ontologyAPI.test.ts:292:12 |
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/rest/ontologyAPI.test.ts:314:5 |
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/rest/ontologyAPI.test.ts:450:24 |
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/rest/ontologyAPI.ts:129:28 |
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. |
Fix locally (fast - only checks files changed in this branch):
make ui-checkstyle-changed
|



The stack targets release 2.1.0.
PR1 #35990, PR2 #35994, PR3 #35997, PR4 #35995, PR5 #36183, PR6 #36187, PR7 #36188, PR8 #36190, PR9 #36721, PR10 #35991, PR11 #36723, PR12 #35996 and PR15 #35989 are merged.
This PR targets
main. PR14 #36725 builds on this branch. PR16 is not published yet.Current assessment for
727d5a0f91c, recorded 2026-10-30.Verdict. PASS. The independent review of the last fix round passed at
bebd9843d11.c2feefb2bcdmerges PR11's reviewed head without conflict, and727d5a0f91ccatches up withmainafter PR11 landed. PR13's own lines are unchanged.What moved since the last assessment. gitar-bot's review raised two findings, and both are fixed. gitar-bot now approves with no open thread.
NATIVE_ASSET_PAGE_SIZEcites the record.Cards withCard.Content. The logo tile takes the card's surface colour, so in dark mode it no longer shows the page colour. Muted text usesTypography color="secondary". The Load more strip moves its border and padding onto a plaindiv.Buttons and three text colours thatTypographyColorlacks. These call sites move to core when core ships a list-row variant and those colours.PR11 then took its own review fixes and
mainwith #36721 landed, andc2feefb2bcdmerges PR11 at4f9d666e3cf. No file is in both PR11's new changes and PR13's diff. Every PR13 file keeps its stable patch-id. The total changed because PR9's decision record and one comment inuseOntologyChangeSetApply.tsmoved into the base.PR11 landed as
5bf55a51aa0, on top of #36726, which changes only backend repositories and their tests.871d8e90961merges9ac5b217711, the commit before PR11's squash, without conflict.727d5a0f91cthen mergesmainand keeps PR13's tree, becausemain's tree equals PR11's final head merged with #36726. PR13's stable patch-id is644efbd4ce8againstmainand against PR11's final head, and no UI file differs fromc2feefb2bcd.The reviews declared these minor issues, which do not block.
Guardline, onmain, still namesOntologyConceptDataGraph.test.tsx, which PR13 deletes. The v6 amendment names the suites that now guard it.Test evidence. The gates ran at
c2feefb2bcd, whose UI tree equals this head's. Jest passes 1,673 of 1,673 tests in 162 suites, covering every Studio suite, the placeholder wrappers and the import guard test. TypeScript reports onlymain's error atIngestionWorkflowForm.tsx(413,9). ESLint, Prettier and organize-imports leave no change on PR13's UI and Playwright files. The import guard is clean, the Playwright impact map is up to date, and the decision record check is clean. The last fix round's review ran the Data mode suites atbebd9843d11and passed 93 of 93.CI. This head was pushed on 2026-10-30, and CI is running. With
mainas the base, GitHub linksFixes #36714, so Validate PR Metadata andmaven-collate-cican pass.Still owed. None of these has run yet. Run each IT on
-Pmysql-elasticsearchand then-Ppostgres-opensearch, and confirm aTests run:line.OntologyNativeDataMode.spec.tsandOntologyNativeOperations.spec.tsagainst a live stack built from this head. Then the specs that the impact map routes the changed files to,OntologyNativeStudio,OntologyNativeAuthoring,OntologyNativeRelations,OntologyStudioE2EandOntologyNativeTreeShell. They drive classic mode.NativeOntologyDataGraphPageITfirst, thenNativeOntologyDataGraphIT,NativeOntologyDataGraphContextIT,NativeOntologyDataGraphBindingScanIT,NativeOntologyDataGraphEdgeScanITandOntologyConceptBindingsIT. PR13 changes no Java.AI mode.
main's AI-mode restyle #36433 gates new screens on AI mode. Paths are underopenmetadata-ui/src/main/resources/ui/src/components/. No PR13 control is missing from AI mode, because Data mode renders in code that both modes share.main's AI mode tabs now call PR13'schangeGraphMode, which mounts the Data surface.main's AI-only Data mode pieces moved to their match in the new code. The backdrop is ingovernance/ontology/OntologyGraphView/OntologyNativeDataMode.tsx, the controls surface is inOntologyExplorer/OntologyDataGraph.tsx, and the details-card style is on the heading inOntologyExplorer/OntologyDataGraphChrome.tsx. In the all-ontologies view with no concept chosen, AI mode showsmain's concept picker and classic mode shows PR13's prompt. The single-ontology concept picker no longer renders, because Data mode now shows every bound concept of the ontology. The possible overlap of the status and the heading card is listed above.Not verified yet. This PR is verified only when its unit, live and performance boxes in the plan are all checked. The operator lands the stack.
Describe your changes
Fixes #36714
Data mode on a native ontology now shows every bound concept as a card on one graph, fed by PR12's paged native data graph. Before, it showed the assets of one selected concept.
connector · N cols, and it opens the asset.The graph loads concepts in pages. At 60 concepts the server reports that the view is full, so the graph disables loading more concepts and says that the view holds its maximum. If the bound data changes while a page loads, the graph says so and offers Retry. Data mode reloads after a model write or a binding write, and it stays mounted while Model mode shows, so switching back keeps the selection and the expanded card. The inspector's more assets link opens this view. The all-ontologies view shows the same graph for the chosen concept's ontology.
This is PR13 of the sixteen-part Ontology Studio program for release 2.1.0.
Type of change
High-level design
Of the 50 changed files, 46 are UI files. The others are three decision records and the generated Playwright impact map. PR13 adds no endpoint.
useNativeOntologyDataGraphcallsPOST /api/v1/ontologies/{id}/dataGraph/pagesthroughgetNativeOntologyDataGraphPageinrest/ontologyAPI.ts. Each request sends the loaded concept prefixes and asks for one page of clusters, one page of a concept's bindings, or the next topology page. The hook follows a non-null cursor even after a page that permission filtering left empty, because the server bounds each scan and an empty page is not the end. It asks only for the cluster offsets that the server advertised.OntologyNativeDataGraph.utils.tsturns those pages into the graph model, with its clusters, rows, edge kinds and cursors.OntologyDataGraph.tsxalready drew glossary data graphs, and itsnativevariant now draws this model. A card renders only the rows in its scroll window. It moves that window when a scroll crosses a row, and it stores the exact position 100 ms after scrolling stops. When a lineage row leaves a card's view, its edge anchors on the card, and edges between the same two cards merge. The dashed relation edge between those cards then moves once per such crossing, which this PR accepts. PR13 deletesOntologyConceptDataGraph.tsxand its test.The paging contract, the 60-concept limit and the rule that a reader sees only assets they can view are in the bindings decision record, which PR12 amended. PR13 adds its v6 amendment for the page size and the stale-reload budget. The exception record lists the core styling Data mode overrides until core ships a list-row button and two text colours, and the styling record links it as v4.
Tests
Use cases covered
The tests cover these cases.
Unit tests
New suites cover
OntologyNativeDataGraph.utils,useNativeOntologyDataGraphandOntologyNativeDataMode.OntologyDataGraph, the graph view, the explorer page,rest/ontologyAPIandOntologyConceptBindings.utilsgain native cases. Mutation runs during review confirmed that the scroll settle and the reconciliation of a returning card each fail a test when changed. See Test evidence above for the gate counts at this head.Backend and ingestion integration tests
Not applicable. PR13 changes no backend or ingestion code. The ITs behind the endpoint it calls are listed under Still owed.
Playwright and UI recording
playwright/e2e/Features/OntologyNativeDataMode.spec.tsbinds 150 tables through the API, pages a cluster, checks that logos are not placeholders, and checks that edges join only related concepts.OntologyNativeOperations.spec.tsfollows the new Data view. Neither has run against a stack built from this head. The UI recording and review screenshots are not made yet.Performance
Not measured yet. The plan's lane times Data mode's first paint for one concept against trunk, the first paint for 20 clusters of 150 assets, and one Load more.
Checklist
Fixes <issue-number>: <short explanation>.Fixes #36714above.