feat: source_curator per-curator tagging via ogar-from-rails::extract_with (consumes ruff#27)#74
Merged
Conversation
…mes ruff#27) Completes the ruff#27 thread end to end. ruff_ruby_spo::extract_with(path, namespace) lets a harvest be tagged with its specific curator instead of the hardcoded 'openproject'. This wires it through OGAR: - ogar-vocab: Class.source_curator: Option<String> — the SPECIFIC product (openproject/redmine/odoo/osb), distinct from the coarse source_domain (project/erp). Two curators in one domain (Redmine + OpenProject are both project) stay distinguishable. Additive field (serde default); all consumers still build. - ogar-from-ruff: lift_model_graph sets source_curator from graph.namespace (empty namespace -> None, not empty string). - ogar-from-rails: extract_with(source_tree, curator) threads through ruff_ruby_spo::extract_with; plain extract() stays the OpenProject default. Tests: - ogar-from-ruff source_curator_carries_namespace_distinct_from_domain: redmine + openproject both project-domain, distinct curators, SAME canonical id (convergence holds while provenance stays separable). - ogar-from-rails real-corpus extract_with_tags_distinct_curators_in_one_- domain: Redmine Issue (curator redmine) + OP WorkPackage (curator openproject) both -> project_work_item id, distinct curators. ogar-vocab 41, ogar-from-ruff 25 (+1), real-corpus 14 (+1); clippy clean; consumers build.
8842f0c to
abb2efe
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.
What
Adds per-curator source tagging so two curators in the same domain stay distinguishable, end to end (consumes ruff#27's
extract_with).ogar_vocab::Class.source_curator: Option<String>— the specific product (openproject,redmine,odoo), alongside the existing coarsesource_domain(project,erp).#[serde(default)]so it is backward-compatible on the wire.ogar_from_ruff::lift_model_graphsetssource_curatorfrom the harvest namespace (Nonefor an empty namespace).ogar_from_rails::extract_with(path, curator)— namespace-tagging entry point (the existingextractstays as theopenproject-defaulting wrapper).Why
source_domainanswers which domain (for codebook routing);source_curatoranswers which product. Both OpenProject and Redmine areprojectdomain, so without the curator tag a cross-curator convergence test cannot tell whose extract a class came from. This is the field the real-corpus OP↔Redmine convergence tests key on.Tests
extract_withtags RedmineIssueand OpenProjectWorkPackagewith distinctsource_curatorwhile both still converge onproject_work_item;source_curator_carries_namespace_distinct_from_domain. Purely additive (110 insertions, 0 deletions); workspace test green.