Thank you for being patient! We're working hard on resolving the issue
Behind features = ["connector"]. Maps
:~google:{authId}:calendar:{calId}:events onto the
tento-lona-connector trait surface.
tento_google::connector::{
GoogleCalendar, // Integration marker
GoogleClient, // empty grab-bag; host deps do the work
GoogleBackendDeps, // host-implemented calendar behavior
GoogleCalendarParams, // authId + calId path params
GoogleAuth, // AuthProvider marker
events::Events, // calendar events Row
}
GoogleBackendDepsThe connector is intentionally thin. Row bodies delegate to host methods:
pub trait GoogleBackendDeps: Send + Sync {
fn run_calendar_sync(..., stage: Option<&str>) -> BoxFuture<anyhow::Result<usize>>;
fn create_calendar_event(..., body: serde_json::Value) -> BoxFuture<anyhow::Result<WriteOutput>>;
fn update_calendar_event(..., cell_id: &str, body: serde_json::Value) -> BoxFuture<anyhow::Result<WriteOutput>>;
fn delete_calendar_event(..., cell_id: Option<&str>) -> BoxFuture<anyhow::Result<WriteOutput>>;
fn recent_log_cells(...) -> BoxFuture<anyhow::Result<Vec<Cell>>>;
}
The host owns event database rows, sync-token handling, Google event mapping, cell persistence, and write-output conversion.
events::Events advertises two stages:
viewport for the active visible window.backfill for broader history, locked by calendar so concurrent backfills do
not race.There is no sync-plugin feature for Google. The host supplies the
orchestrator executor because the concrete Google client and event mapping are
host-shaped.