diff --git a/crates/ogar-vocab/src/ports.rs b/crates/ogar-vocab/src/ports.rs index 38dc0a9..46b780e 100644 --- a/crates/ogar-vocab/src/ports.rs +++ b/crates/ogar-vocab/src/ports.rs @@ -1,6 +1,6 @@ //! Port specifications — `(namespace, bridge_id, public_name → class_id)` -//! triples consumed by `lance_graph_ontology::UnifiedBridge` to project -//! per-port public name vocabularies onto the shared OGAR codebook. +//! triples consumed by `lance_graph_ogar::bridges::UnifiedBridge` to +//! project per-port public name vocabularies onto the shared OGAR codebook. //! //! # The goal — one bridge harness, port-specific data //! @@ -12,7 +12,7 @@ //! NamespaceBridge impl AND duplicating its alias table. //! //! [`PortSpec`] flips that: the bridge becomes one generic -//! [`lance_graph_ontology::UnifiedBridge`] harness, and +//! `lance_graph_ogar::bridges::UnifiedBridge` harness, and //! the per-port differences (namespace, bridge_id, alias table) live //! here as data attached to the canonical class schema. Adding a port //! is now one `impl PortSpec for FooPort {...}` block with three @@ -91,7 +91,7 @@ impl PortSpec for OpenProjectPort { /// The OpenProject port's `(public_name, class_id)` alias slice, /// exposed for downstream `pub const` re-exports -/// (e.g. `lance_graph_ontology::bridges::OPENPROJECT_CODEBOOK` keeps +/// (e.g. `lance_graph_ogar::bridges::OPENPROJECT_CODEBOOK` keeps /// its pre-migration shape by aliasing this slice). Prefer /// [`OpenProjectPort::aliases`] in new code — going through the /// `PortSpec` impl works generically across ports. @@ -206,7 +206,7 @@ pub const REDMINE_ALIASES: &[(&str, u16)] = &[ /// Unlike [`OpenProjectPort`] / [`RedminePort`] — which converge two /// project-management forks on a shared codebook — Healthcare is a /// single-tenant namespace today, so there is no cross-port convergence -/// pin yet. The port exists so `lance_graph_ontology`'s `MedcareBridge` +/// pin yet. The port exists so `lance_graph_ogar`'s `MedcareBridge` /// collapses to `UnifiedBridge`: the namespace, /// bridge_id, and alias table are now **inherited from this canonical /// class schema** instead of being re-declared per bridge in lance-graph. diff --git a/docs/integration/CLASSVIEW-MATERIALIZATION-PLAN.md b/docs/integration/CLASSVIEW-MATERIALIZATION-PLAN.md index 95e9f39..997b865 100644 --- a/docs/integration/CLASSVIEW-MATERIALIZATION-PLAN.md +++ b/docs/integration/CLASSVIEW-MATERIALIZATION-PLAN.md @@ -152,7 +152,7 @@ epiphany #4). public name "WorkPackage" │ ▼ - NamespaceBridge.entity("WorkPackage") [lance-graph-ontology] + UnifiedBridge.entity("WorkPackage") [lance-graph-ogar] │ ▼ UnifiedBridge.authorize_read(...) [lance-graph-callcenter] @@ -215,11 +215,25 @@ of the first emitted concept). | C1 | `op-codegen-projection` adopts `ogar-render-askama` for paths currently using `format!` | `openproject-nexgen-rs` | | C2 | `redmine-canon` re-exports `OgarClassView` (symmetric with the existing `class_ids` re-export) | `redmine-rs` | | C3 | `op-surreal-ast::from_class_view` adapter — feeds the canonical shape into the byte-identical-pinned typed AST | `openproject-nexgen-rs` | -| C4 | `OpenProjectBridge: impl NamespaceBridge` — `g_lock` to "OpenProject" namespace, public-name dictionary populated from `op-canon` snapshot. `entity_type_id()` returns OGAR codebook ids. | `openproject-nexgen-rs` (sibling of `MedcareBridge`) | -| C5 | `RedmineBridge: impl NamespaceBridge` — symmetric, "Redmine" namespace, same codebook ids. | `redmine-rs` | - -After C4 + C5: a consumer holding `UnifiedBridge` AND -`UnifiedBridge` resolves `"WorkPackage"` OR `"Issue"` +| C4 | `OpenProjectBridge: impl NamespaceBridge` — `g_lock` to "OpenProject" namespace, `entity_type_id()` returns OGAR codebook ids. | `lance-graph-ogar` (sibling of `MedcareBridge`) | +| C5 | `RedmineBridge: impl NamespaceBridge` — symmetric, "Redmine" namespace, same codebook ids. | `lance-graph-ogar` | + +**How C4 + C5 actually landed (location corrected post-merge).** The +original plan listed C4 in `openproject-nexgen-rs` and C5 in `redmine-rs`, +"sibling of `MedcareBridge`." During implementation the bridges converged +on a single generic harness instead of two cloned structs: +`OpenProjectBridge` / `RedmineBridge` are now **type aliases over +`UnifiedBridge`**, where `OpenProjectPort` / `RedminePort` +(the per-port `NAMESPACE` / `BRIDGE_ID` / alias table) live in +`ogar-vocab::ports` (lance-graph PR #570). The bridges first landed in +`lance-graph-ontology` (#558/#559), then **moved to `lance-graph-ogar` +by #585** to restore the OGIT/OGAR separation of concerns — OGIT +(`lance-graph-ontology`) must not depend on `ogar-vocab`. The codebook +itself (the `(public_name → class_id)` data) stays in `ogar-vocab`; only +the bridge *harness* lives in `lance-graph-ogar`. + +After C4 + C5: a consumer holding `UnifiedBridge` AND +`UnifiedBridge` resolves `"WorkPackage"` OR `"Issue"` through the policy-evaluated, audit-chained path → gets an `EntityRef` whose `class_id` routes to the *same* `OgarClassView` arm.