feat(concepts): full-page browser/detail, links, neighbourhood, robust ontology save#340
Merged
Merged
Conversation
Contributor
mvkonchits-db
left a comment
There was a problem hiding this comment.
Hi Lars, one of the CI tests failed plus 5 cents from my side (what to double check):
- settings_routes.py:364 — audit field rename user_email → requester_email. Confirm requester_email is the canonical field, else downstream audit consumers break silently.
- _get_asset_child_columns N+1 (one SELECT per hasColumn relationship per table-like asset).
- get_all_columns / search_columns paginate in memory rather than push to SQL.
- _resolve_asset_parents recurses without a visited-set.
Merged
8 tasks
larsgeorge-db
added a commit
that referenced
this pull request
May 21, 2026
Eager-load source_relationships.target_asset in _get_columns_from_assets so that _get_asset_child_columns can read rel.target_asset directly instead of issuing one SELECT per hasColumn relationship per table-like asset. Note: PR #340 (feat/concepts-panels-and-fixes) also touches this method — whichever PR merges second will need a rebase carry-over.
larsgeorge-db
added a commit
that referenced
this pull request
May 21, 2026
Eager-load source_relationships.target_asset in _get_columns_from_assets so that _get_asset_child_columns can read rel.target_asset directly instead of issuing one SELECT per hasColumn relationship per table-like asset. Note: PR #340 (feat/concepts-panels-and-fixes) also touches this method — whichever PR merges second will need a rebase carry-over.
73c770b to
77e5c86
Compare
Collaborator
Author
|
Thanks for the careful review @mvkonchits-db — circling back now that main has caught up. The branch is rebased onto current main (
PTAL when CI clears. |
…t ontology save Rebuilds the Concepts experience as a master/detail flow and hardens the backend so LLM-generated ontologies always import cleanly. Frontend - New full-page Concept detail view (/concepts/browser/:iri) with sticky header, dense single-column layout matching other detail pages, back-compat redirect from the legacy ?concept= query param. - Concepts list refactored to a full-width tree with richer rows (type icon, badge, status pill, collection chip, property hints) and persisted UI state (expanded groups, scroll, search) via glossary-preferences-store. - LinkedObjectsPanel: collapsible card matching NodeLinksPanel style; assign dialog now restricted to Data Product, Data Contract, and Asset (no raw UC objects). Asset selector pulls from /api/assets and is scrollable. - ConceptRelationsPanel replaces NodeLinksPanel on detail; consumes /api/semantic-models/neighbors so all incoming/outgoing triples render. - ConceptNeighborhoodGraph: ReactFlow mini-graph (parents/current/children) with click-to-navigate and theme-correct colours for light/dark. - Knowledge-graph cache nonce store ensures Settings "Rebuild Graph" and semantic-link mutations refresh dependent views. - i18n: linkedObjects/neighborhood/relations keys + Asset label across de/en/es/fr/it/ja/nl. Backend - clean_truncated_turtle helper in owl_parser.py guards against truncated LLM Turtle output; applied in semantic_models_manager, base ontology handler, and the upload route. parse() failures now return HTTP 400. - Semantic-link mutations invalidate the manager cache so the UI sees fresh state without a hard reload. Tests - Unit tests for clean_truncated_turtle. - Integration tests for /api/ontology/save-to-collection covering the truncated-Turtle recovery path and unparseable-content rejection. - Component tests for LinkedObjectsPanel, ConceptRelationsPanel, ConceptNeighborhoodGraph, and the BusinessTermsView redirect.
77e5c86 to
39866a8
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Rebuilds the Concepts experience around a full-page master/detail flow and hardens the backend so LLM-generated ontologies always import cleanly.
Concepts UX
/concepts/browser/:iriwith a sticky header (back, title/type/IRI, edit/delete), single dense column matching other detail views. Legacy?concept=IRIURLs auto-redirect.glossary-preferences-store.NodeLinksPanelstyle. Assign dialog now restricted to Data Product, Data Contract, and Asset — no raw UC objects. Asset list pulls from/api/assets(paginated) and is bounded + scrollable. Existing UC links keep rendering for back-compat but can no longer be created from this UI.NodeLinksPanelon detail; consumes/api/semantic-models/neighborsso the full set of incoming/outgoing triples renders, with directional icons and colour-coded predicate badges.knowledge-graph-store): bumped on Settings → Rebuild Graph and on every semantic-link mutation so dependent panels refetch without a hard reload.linkedObjects/neighborhood/relationskeys plus the newAssetlabel acrossde/en/es/fr/it/ja/nl.Backend hardening
clean_truncated_turtlehelper inowl/owl_parser.pysalvages truncated LLM Turtle; applied inSemanticModelsManager, the base ontology handler, and the upload route.rdflib.parse()failures now surface as HTTP 400 instead of 500.SemanticLinksManagerinvalidates the manager cache on create/delete so the UI sees fresh state immediately.Test plan
tests/unit/test_clean_truncated_turtle.py(10 cases)tests/integration/test_knowledge_routes.pycovers truncated-Turtle recovery and unparseable rejectionlinked-objects-panel.test.tsx(6),concept-relations-panel.test.tsx,concept-neighborhood-graph.test.tsx,business-terms.test.tsx(redirect)