Repository navigation
Conversation
Adds the fields to the concept and property schemas, the create requests, the release payload allowlist, and the RDF catalog vocabulary. Adds the DEPRECATED change type, the REPLACED_BY reference role, and the concept-grouped rows of the working diff. Regenerates the TypeScript types.
✅ PR checks passedThe linked issue has a description and all required Shipping project fields set. Thanks! |
Concepts and properties now carry deprecation and replacement, and
concepts carry abstract and a definition source:
- A replacement must name another definition of the same kind in the
same ontology. It is indexed as a REPLACED_BY reference, so deleting
a replacement target is refused like any other dangling reference.
- An enumeration needs at least two allowed values. One-value
enumerations stored before this rule stay editable until their values
change.
- Release projection writes om:abstract, dct:source, owl:deprecated,
and dct:isReplacedBy, and native import reads them back.
- Release and working diffs classify a member whose deprecated flag
turned true as DEPRECATED.
- GET /ontologies/{id}/working/diff?groupBy=concept returns the working
changes grouped by the concept they define, with parent labels and a
property count, paged by group under its own revision-bound cursor.
…sion IndependentOntologyClassModelIT covers the field round trips, the enumeration minimum and its legacy carve-out, replacedBy integrity, the DEPRECATED diff row, and grouped diff paging with the 412 cursor rule. NativeOntologyMemoryIT adds a class-create change set and its rollback. Existing ITs that stored one-value enumerations now use two values.
Adds the fields to the concept and property schemas, the create requests, the release payload allowlist, and the RDF catalog vocabulary. Adds the DEPRECATED change type, the REPLACED_BY reference role, and the concept-grouped rows of the working diff. Regenerates the TypeScript types.
Concepts and properties now carry deprecation and replacement, and
concepts carry abstract and a definition source:
- A replacement must name another definition of the same kind in the
same ontology. It is indexed as a REPLACED_BY reference, so deleting
a replacement target is refused like any other dangling reference.
- An enumeration needs at least two allowed values. One-value
enumerations stored before this rule stay editable until their values
change.
- Release projection writes om:abstract, dct:source, owl:deprecated,
and dct:isReplacedBy, and native import reads them back.
- Release and working diffs classify a member whose deprecated flag
turned true as DEPRECATED.
- GET /ontologies/{id}/working/diff?groupBy=concept returns the working
changes grouped by the concept they define, with parent labels and a
property count, paged by group under its own revision-bound cursor.
…sion IndependentOntologyClassModelIT covers the field round trips, the enumeration minimum and its legacy carve-out, replacedBy integrity, the DEPRECATED diff row, and grouped diff paging with the 412 cursor rule. NativeOntologyMemoryIT adds a class-create change set and its rollback. Existing ITs that stored one-value enumerations now use two values.
…d per-operation revisions
This comment has been minimized.
This comment has been minimized.
Code Review ✅ Approved 3 closed / 3 findings🟡 Medium risk · Adding ontology metadata, RDF round-tripping, and replacement validation changes definition writes and imports; errors could omit metadata or reject valid definitions. Adds abstract, definition source, and deprecation/replacement fields to native ontology classes and properties, projected through RDF import and export and reflected in grouped working diffs. Resolved the missing DEPRECATED change type emission, RDF export dropping the new semantic fields, and the missing decision record for new cross-component contracts. No open issues found. ✅ 3 closed✅ Bug: DEPRECATED change type is declared but the comparison never emits it
✅ Bug: New semantic fields are sealed into releases but dropped from RDF export
✅ Quality: New cross-component contracts and limits have no decision record
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 |
❌ UI Checkstyle Failed❌ Bundle Runtime CheckA route chunk loads but one of its chunks still exports Fix locally (fast - only checks files changed in this branch): make ui-checkstyle-changed |
|
|



Fixes #35988
Native ontology definitions record abstraction, definition source, deprecation and replacements. RDF import and export preserve those fields, and grouped working diffs remain revision-bound. With definition status in the parent, captured release summaries now include the deprecated count.
The published stack targets release 2.1.0. Each linked Shipping issue is In Progress with Product, P1 and Governance metadata.
main→ PR1 #35990 → PR2 #35994 → PR3 #35997 → PR4 #35995. Two chains start at PR4:This PR targets PR2 #35994. Its child is PR4 #35995. PR9, PR11, PR13, PR14 and PR16 are not published yet.
Current assessment for
eb95757841f, recorded 2026-10-28.Verdict. The 2026-10-25 source integration review passed at
33601808a794. The plan audit after it closed with no change. This head merges PR2's review-bot fix20e50e5e265. PR3's patch-id against PR2 is36506fafb14before and after that merge, with the same edit lines in all 58 files, so the verdict carries to this head.Test evidence at this head. The merge gate passed package and
spotless, and 190 of 190 unit tests.docs/generated/api-reference.mdregenerates unchanged, the Java impact map is complete, and the Playwright map is current.CI. Every check at this head passes except
maven-collate-ci. That job fails with HTTP 422 (No ref found for: harshach/ontology-studio/02-definition-status). The Collate build is pointed at this PR's base branch, and the Collate repository has no branch of that name. That is a limit of the CI setup for stacked PRs, not a fault in this PR's code. PR1, whose base ismain, passes it.Still owed. Docker is down on the build machine, so none of these has run. Run each IT on
-Pmysql-elasticsearchand then-Ppostgres-opensearch, and confirm aTests run:line.ListFilter.java(area core). Run firstIndependentOntology*IT,Ontology*ResourceIT,TaskResourceIT,TaskChangeEventIT, andWorkflowDefinitionResourceITin the global-state lane.OntologyEntityDAOTestandOntologyReleaseComparisonStorageTest.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.
Earlier description and verification records
These records preserve the earlier design notes, test results and attachments. Earlier statements about the current head or readiness apply to their recorded revisions. The integration assessment above supersedes those statements.
Describe your changes:
Fixes #35988
Native ontology classes could not say that they are abstract, where their definition comes from, or that they are deprecated and which definition replaces them. This PR adds
abstract,definitionSource,deprecatedandreplacedByto concepts, anddeprecatedandreplacedByto properties. It projects them asom:abstract,dcterms:source,owl:deprecatedanddcterms:isReplacedByand reads them back on import. Release and working diffs classify a member whosedeprecatedturned true asDEPRECATED.GET /api/v1/ontologies/{id}/working/diff?groupBy=conceptserves rows grouped by concept (change type, parent labels, property count, member changes), paged by concept under the same revision binding (a stale cursor returns 412). A property with a single enumeration value is refused withAn enumeration needs at least two allowed values. Adds a decision record for the new fields.Also in this PR: a MySQL deadlock fix.
OntologyReferenceIndex.replaceno longer deletes the reference rows of a definition that does not exist yet. Deleting a missing key range takes a gap lock, and two concurrent creates then deadlocked on their inserts and returned 500 after the retries ran out.Left out: the
changeSummarydeprecated count (PR2 is not in the base) and any UI.Deviations from the plan:
OntologyWorkingStatebehaves on main, so the IT asserts it.What could break: the enumeration rule applies only when a one-value list differs from the stored value, so stored definitions stay editable.
replacedByis validated as a same-kind, same-ontology reference, so deleting a replacement is refused.Type of change:
Tests:
mvn test -pl openmetadata-service -Dtest='Ontology*Test,NativeOntology*Test,RdfOntologyContractTest,OwlProfileGuardTest': 595 run, 0 failures. Line coverage from unit tests alone: projection 98%, importer 98%, validator 95%,OntologyConceptChanges100%, comparison 69%, property repository 71%; the resource and mappers are covered by the ITs.IndependentOntologyClassModelITandNativeOntologyMemoryIT(new cases: class change set with two parents, an equivalent class, a disjoint class and three properties; rollback when the last operation fails), plus the affected ontology ITs, on-Pmysql-elasticsearchand-Ppostgres-opensearch: 739 run, 0 failures, 96 skipped on each.NativeOntologyMemoryITfailed on MySQL in 3 of 3 solo runs; after it, 3 of 3 pass.Checklist:
Fixes <issue-number>: <short explanation>Fixes #<issue-number>above.

Confidence Score: 5/5
The reviewed changes appear safe to merge.Summary
Adds abstraction, source, deprecation, and replacement fields to native ontology definitions.
No actionable issue was established. No previous review threads were supplied. The full PR diff was reviewed because the previous and current commits have different merge bases with the target. Tests were not run during this review.
Diagram
%%{init: {'theme': 'neutral'}}%% flowchart LR A[Definition writes or RDF import] --> B[Working definitions] B --> C[Reference and structure checks] B --> D[Release capture] D --> E[RDF export] B --> F[Compare with active release] F --> G[Flat member changes] F --> H[Concept groups] G --> I[Revision-bound paging] H --> IReviews (8) · Last reviewed commit: "Merge definition status into class model" · Reviewed by Greptile