Skip to content

docs+deprecate(bridges): preemptive landing shape for OGAR consumer migration#589

Merged
AdaWorldAPI merged 1 commit into
mainfrom
claude/medcare-bridge-lance-graph-wmx76z
Jun 22, 2026
Merged

docs+deprecate(bridges): preemptive landing shape for OGAR consumer migration#589
AdaWorldAPI merged 1 commit into
mainfrom
claude/medcare-bridge-lance-graph-wmx76z

Conversation

@AdaWorldAPI

@AdaWorldAPI AdaWorldAPI commented Jun 22, 2026

Copy link
Copy Markdown
Owner

What

Preemptive soft deprecation of every consumer-facing tenant bridge, pointing each at its OGAR PortSpec replacement. Symbols still compile; nothing removed. Companion to AdaWorldAPI/OGAR#95 (APP‖class codebook layout + per-app migration plan).

// BEFORE:
use lance_graph_ogar::bridges::WoaBridge;
let bridge = WoaBridge::new(registry)?;
let entity = bridge.entity("Stundenzettel")?;

// AFTER (the replacement consumers grep for):
use ogar_vocab::ports::{WoaPort, PortSpec};
let cid: Option<u16> = WoaPort::class_id("Stundenzettel");  // Some(0x0103)
// Render lens (per-app) lives in the high u16: 0x0003_0103

Scope

Deprecated (10 symbols):

Crate Symbol Replacement
lance-graph-ogar::bridges OpenProjectBridge OpenProjectPort::class_id(name)
lance-graph-ogar::bridges RedmineBridge RedminePort::class_id(name)
lance-graph-ogar::bridges MedcareBridge HealthcarePort::class_id(name)
lance-graph-ogar::bridges WoaBridge WoaPort::class_id(name)
lance-graph-ogar::bridges SmbBridge SmbPort::class_id(name)
lance-graph-ogar::bridges OdooBridge OdooPort::class_id(name)
lance-graph-ontology::bridges OgitBridge *Port::class_id(name)
lance-graph-ontology::bridges WoaBridge (legacy) WoaPort::class_id(name)
lance-graph-ontology::bridges SpearBridge author a SpearPort then pull
lance-graph-ontology::bridges SharePointBridge author a SharePointPort then pull

NOT deprecated: UnifiedBridge<P> (impl harness), the *Port types (the replacement), and the *_CODEBOOK constants (already deprecated in PR #570).

What this PR does NOT do — flagged by parallel sessions

lance-graph-rbac has no authorize(actor, classid, op) keystone yet. The crate ships scaffolding (AccessDecision::{Allow, Deny, Escalate}, role/permission/policy/access modules) but the keystone signature does not exist. So a consumer reading the deprecation note "authorize by classid" cannot, today, call that.

Why this PR doesn't add it: the keystone is graded [H] and gated on PROBE-OGAR-RBAC-AUTHORIZE (OGAR CLAUDE.md non-negotiables; CLASSID-RBAC-KEYSTONE-SPEC.md §10). Shipping the signature before the probe locks the shape before falsification. The keystone is its own PR, after the probe runs green.

Until the keystone ships, consumers should: migrate the classid pull off the bridges now (this PR's target), keep their existing auth (or none) for the authorize call site, and NOT re-introduce a bridge as an auth stopgap.

Build

Both touched crates cargo check green; existing call sites (tests + the consumer-conformance harness) carry #[allow(deprecated)] so the build stays warning-clean. Pre-existing dead-code warnings on NAMESPACE constants are unrelated.

Consumer status snapshot (git grep 2026-06-22)

Consumer Files still importing lance_graph_{ontology,ogar}::bridges
MedCare-rs 33
woa-rs 6
smb-office-rs 4
odoo-rs 0 ✓ (migration in flight)
openproject-nexgen-rs 0 ✓

The terminal bridges/ deletion PR opens only after the three remaining consumers ship their migrations. No removal window announced — the deprecation is a beacon, not a deadline.

Status

[H] — landing shape only. The OGAR migration model is shipped (#95); this PR signals the target inside the spine. Promotion to [G] waits on the keystone + consumer migrations + the eventual deletion PR.

🤖 Generated with Claude Code

https://claude.ai/code/session_01EYvNjD8M8LMNYbRy3gq2FP


Generated by Claude Code

Summary by CodeRabbit

  • New Features

    • Added support for Odoo, SMB, and WoA system integrations.
  • Documentation

    • Added migration guide for transitioning from legacy bridge APIs to the new OGAR port-based architecture.
  • Deprecations

    • Marked several bridge types as deprecated. Consumers should transition to using the new port-based API for class ID lookups as documented in the migration guide.

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, you can upgrade your account or add credits to your account and enable them for code reviews in your settings.

@coderabbitai

coderabbitai Bot commented Jun 22, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@AdaWorldAPI, we couldn't start this review because you've reached your PR review rate limit.

More reviews will be available in 52 minutes and 53 seconds. Learn how PR review limits work.

Your organization has used up its prepaid credits, and credit purchases are no longer available. Enable the review add-on in the billing tab to keep reviews running — you're only billed for reviews past your plan's rate limits ($0.25/file).

⌛ How to resolve this issue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based credits.

🚦 How do rate limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan refill rate.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, the refill rate gradually slows as usage increases. The highest same-day bursts are limited more strictly.

Please see our Fair Usage Limits Policy for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 9f18bfdc-b4c6-4751-961c-a08a754311eb

📥 Commits

Reviewing files that changed from the base of the PR and between 5dfa37f and 10e717d.

📒 Files selected for processing (20)
  • crates/lance-graph-consumer-conformance/src/lib.rs
  • crates/lance-graph-ogar/src/bridges/medcare_bridge.rs
  • crates/lance-graph-ogar/src/bridges/odoo_bridge.rs
  • crates/lance-graph-ogar/src/bridges/openproject_bridge.rs
  • crates/lance-graph-ogar/src/bridges/redmine_bridge.rs
  • crates/lance-graph-ogar/src/bridges/smb_bridge.rs
  • crates/lance-graph-ogar/src/bridges/woa_bridge.rs
  • crates/lance-graph-ogar/src/lib.rs
  • crates/lance-graph-ogar/tests/bridge_codebook_convergence.rs
  • crates/lance-graph-ogar/tests/bridge_scope_lock.rs
  • crates/lance-graph-ogar/tests/openproject_bridge_scope_lock.rs
  • crates/lance-graph-ogar/tests/redmine_bridge_scope_lock.rs
  • crates/lance-graph-ontology/src/bridges/mod.rs
  • crates/lance-graph-ontology/src/bridges/ogit_bridge.rs
  • crates/lance-graph-ontology/src/bridges/sharepoint_bridge.rs
  • crates/lance-graph-ontology/src/bridges/spear_bridge.rs
  • crates/lance-graph-ontology/src/bridges/woa_bridge.rs
  • crates/lance-graph-ontology/tests/hydrate_real_ogit.rs
  • crates/lance-graph-ontology/tests/round_trip_ttl.rs
  • docs/CONSUMER-BRIDGE-DEPRECATION.md
📝 Walkthrough

Walkthrough

Deprecates all consumer-facing per-tenant bridge alias types across lance-graph-ogar and lance-graph-ontology (Medcare, OpenProject, Redmine, Ogit, SharePoint, Spear, WoA). Adds new thin UnifiedBridge wrapper modules for Odoo, SMB, and WoA ports. Updates public re-exports, conformance harness dependencies, and ships docs/CONSUMER-BRIDGE-DEPRECATION.md as the migration guide.

Changes

Consumer Bridge Deprecation and OGAR Port Migration

Layer / File(s) Summary
Migration guide and deprecation contract
docs/CONSUMER-BRIDGE-DEPRECATION.md
Adds the full landing-page doc: preemptive deprecation notice, before/after Rust examples, deprecation tables for both ogar and ontology bridges, gap list, not-deprecated list, removal timeline, and migration recipe.
Deprecate lance-graph-ontology bridge structs
crates/lance-graph-ontology/src/bridges/ogit_bridge.rs, crates/lance-graph-ontology/src/bridges/sharepoint_bridge.rs, crates/lance-graph-ontology/src/bridges/spear_bridge.rs, crates/lance-graph-ontology/src/bridges/woa_bridge.rs, crates/lance-graph-ontology/src/bridges/mod.rs, crates/lance-graph-ontology/tests/...
Applies #[deprecated] to OgitBridge, SharePointBridge, SpearBridge, and WoaBridge; wraps their mod.rs re-exports with #[allow(deprecated)]; adds #![allow(deprecated)] to two ontology test files.
Deprecate existing ogar bridge aliases (Medcare, OpenProject, Redmine)
crates/lance-graph-ogar/src/bridges/medcare_bridge.rs, crates/lance-graph-ogar/src/bridges/openproject_bridge.rs, crates/lance-graph-ogar/src/bridges/redmine_bridge.rs, crates/lance-graph-ogar/tests/bridge_scope_lock.rs, crates/lance-graph-ogar/tests/openproject_bridge_scope_lock.rs, crates/lance-graph-ogar/tests/redmine_bridge_scope_lock.rs
Adds #[deprecated] to MedcareBridge, OpenProjectBridge, and RedmineBridge type aliases; annotates their test modules and scope-lock test files with #[allow(deprecated)].
Add Odoo, SMB, and WoA bridge modules
crates/lance-graph-ogar/src/bridges/odoo_bridge.rs, crates/lance-graph-ogar/src/bridges/smb_bridge.rs, crates/lance-graph-ogar/src/bridges/woa_bridge.rs
Introduces three new bridge modules as deprecated thin UnifiedBridge<*Port> aliases, each with a NAMESPACE constant, a deprecated *_CODEBOOK compatibility constant, and unit tests for namespace/bridge-id mirroring and class_id resolution.
Wire new bridges into public API and update conformance
crates/lance-graph-ogar/src/bridges/mod.rs, crates/lance-graph-ogar/src/lib.rs, crates/lance-graph-ogar/src/bridges/unified.rs, crates/lance-graph-consumer-conformance/Cargo.toml, crates/lance-graph-consumer-conformance/src/lib.rs, crates/lance-graph-ogar/tests/bridge_codebook_convergence.rs
Extends mod.rs and lib.rs to declare and re-export all six port types and deprecated bridge aliases; adds ODOO_CODEBOOK/SMB_CODEBOOK/WOA_CODEBOOK compatibility constants; reformats unified.rs (no logic change); adds lance-graph-ogar dependency to conformance crate and updates MedcareBridge import path.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

  • AdaWorldAPI/lance-graph#585: Laid the groundwork for the OGAR bridge layer refactor in lance-graph-ogar, including bridges/mod.rs and medcare bridge exports, which this PR builds upon to apply deprecation annotations.
  • AdaWorldAPI/lance-graph#587: Introduced the odoo_bridge, smb_bridge, and woa_bridge modules whose aliases this PR now formally marks as deprecated with migration guidance.

Poem

🐇 Hop, hop, the bridges grow stale,
#[deprecated] marks the old trail.
PortSpec::class_id lights the new way,
OGAR codebooks here to stay.
No removals yet — just a gentle nudge,
From rabbit's paw, a soft bridge-grudge! 🌿

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately describes the main change: a preemptive deprecation of consumer-facing bridge symbols with accompanying documentation.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

…igration

Adds `#[deprecated(note = "...")]` to every consumer-facing tenant bridge,
pointing each at its OGAR PortSpec replacement. Symbols still compile;
nothing removed. Companion to AdaWorldAPI/OGAR#95 (APP‖class codebook
layout + per-app migration plan).

Deprecated:
- lance-graph-ogar::bridges — 6 per-port aliases:
  OpenProjectBridge, RedmineBridge, MedcareBridge, WoaBridge, SmbBridge,
  OdooBridge → pull via the corresponding `ogar_vocab::ports::*Port::class_id(name)`
- lance-graph-ontology::bridges — 4 legacy structs:
  OgitBridge, WoaBridge, SpearBridge, SharePointBridge → pull via the
  relevant PortSpec (Spear/SharePoint require authoring a port first)

NOT deprecated: the `UnifiedBridge<P>` harness (impl mechanism), the
`*Port` types (the replacement), the OPENPROJECT_CODEBOOK / REDMINE_CODEBOOK
constants (already deprecated in PR #570).

Existing call sites (tests + the consumer-conformance harness) carry
`#[allow(deprecated)]` so the build stays clean. cargo check green on
both crates; pre-existing dead-code warnings on the `NAMESPACE` constants
are unrelated.

Scope this PR does NOT cover (explicitly flagged in
docs/CONSUMER-BRIDGE-DEPRECATION.md, surfaced by parallel sessions):
  - lance-graph-rbac has no `authorize(actor, classid, op)` keystone yet.
    The keystone is `[H]` and gated on PROBE-OGAR-RBAC-AUTHORIZE (OGAR
    spec). It lands as its own PR after the probe runs green. Until
    then, consumers migrate the classid pull only and keep existing
    auth — do NOT reintroduce a bridge as an auth stopgap.
  - `Membership` / `Op` types not yet defined.

Consumer status snapshot (`git grep` 2026-06-22):
  MedCare-rs: 33 files · woa-rs: 6 · smb-office-rs: 4 · odoo-rs: 0 ✓ ·
  openproject-nexgen-rs: 0 ✓

Terminal `bridges/` deletion PR opens only after the three remaining
consumers ship their migrations. No removal window announced.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EYvNjD8M8LMNYbRy3gq2FP
@AdaWorldAPI AdaWorldAPI force-pushed the claude/medcare-bridge-lance-graph-wmx76z branch from 5dfa37f to 10e717d Compare June 22, 2026 17:22
AdaWorldAPI pushed a commit that referenced this pull request Jun 22, 2026
…iene

Follow-up to the cherry-picked #589 beacon (fb0d8c4d), landing two things the
5+3 review surfaced:

- P0 (brutally-honest-tester): crates/lance-graph-ogar/src/bridges/mod.rs
  re-exported the 6 deprecated bridge aliases (Medcare/Odoo/OpenProject/
  Redmine/Smb/Woa) WITHOUT #[allow(deprecated)], so cargo clippy -- -D warnings
  failed there. #589 split lib.rs + the ontology mod.rs + the *_CODEBOOK
  re-exports but missed this ogar bridges/mod.rs site. Split it the same way:
  the *Port types + UnifiedBridge stay clean; the deprecated aliases sit under
  #[allow(deprecated)]. Verified: cargo check -p lance-graph-ogar green, 0
  deprecated-alias warnings at mod.rs. #589 itself still ships this gap.

- Board hygiene (integration-lead P1, mandatory per CLAUDE.md): plan doc +
  PR_ARC_INVENTORY + AGENT_LOG + LATEST_STATE prepended for the beacon landing
  and the 5+3 sprint/review record.

Residual lint noise (odoo_blueprint doc_lazy_continuation/iter_cloned_collect +
oxrdf::Subject deprecations) is pre-existing TD-ONTOLOGY-LINT in the excluded
lance-graph-ontology crate, out of scope.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TzqvDqbFRzyx17EkLKBoZF

Copy link
Copy Markdown
Owner Author

Heads-up from a 5+3 review while reproducing this beacon's shape on another branch: the PR's "warning-clean" claim doesn't hold under cargo clippy -- -D warnings.

crates/lance-graph-ogar/src/bridges/mod.rs re-exports the six now-deprecated aliases without an #[allow(deprecated)] guard:

pub use medcare_bridge::{HealthcarePort, MedcareBridge};   // MedcareBridge is #[deprecated]
pub use odoo_bridge::{OdooBridge, OdooPort};               // OdooBridge   …
pub use openproject_bridge::{OpenProjectBridge, OpenProjectPort};
pub use redmine_bridge::{RedmineBridge, RedminePort};
pub use smb_bridge::{SmbBridge, SmbPort};
pub use woa_bridge::{WoaBridge, WoaPort};

The deprecated lint fires at each of those pub use sites, so -D warnings errors there. lib.rs, the ontology bridges/mod.rs, and the *_CODEBOOK re-exports were all split/guarded — this intermediate ogar bridges/mod.rs site was the one missed.

One-line-per-symbol fix (mirrors the lib.rs split): keep the *Port types + UnifiedBridge in the clean group, move the six aliases under #[allow(deprecated)]:

// canonical surface
pub use medcare_bridge::HealthcarePort;
pub use odoo_bridge::OdooPort;
pub use openproject_bridge::OpenProjectPort;
pub use redmine_bridge::RedminePort;
pub use smb_bridge::SmbPort;
pub use unified::UnifiedBridge;
pub use woa_bridge::WoaPort;
// deprecated aliases (lint still fires at the consumer use-site)
#[allow(deprecated)] pub use medcare_bridge::MedcareBridge;
#[allow(deprecated)] pub use odoo_bridge::OdooBridge;
#[allow(deprecated)] pub use openproject_bridge::OpenProjectBridge;
#[allow(deprecated)] pub use redmine_bridge::RedmineBridge;
#[allow(deprecated)] pub use smb_bridge::SmbBridge;
#[allow(deprecated)] pub use woa_bridge::WoaBridge;

Verified locally: with that split, cargo check -p lance-graph-ogar shows 0 deprecated-alias warnings at mod.rs. (Separately, the odoo_blueprint doc_lazy_continuation / iter_cloned_collect and oxrdf::Subject lints are pre-existing TD-ONTOLOGY-LINT, unrelated to this PR.)

Otherwise the beacon reviewed clean across drift / Core-first / OGAR #95 doc-accuracy / iron-rule / SoA-column lenses — nice landing shape.


Generated by Claude Code

@AdaWorldAPI AdaWorldAPI merged commit fdbe09d into main Jun 22, 2026
6 checks passed
AdaWorldAPI added a commit that referenced this pull request Jun 22, 2026
…d-allow

fix(bridges): guard deprecated-alias re-exports + ontology self-impls (#589 follow-up)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants