This repo should actively use the public Convex/Fivetran reference materials before inventing source-side behavior.
The relevant upstream crates are mirrored locally under:
.memory/upstream/convex-backend/crates/fivetran_source.memory/upstream/convex-backend/crates/fivetran_common.memory/upstream/convex-backend/crates/fivetran_destination
These are local-only working references and are intentionally ignored by git.
Primary source of truth:
.memory/upstream/convex-backend/crates/fivetran_source/src/sync.rs.memory/upstream/convex-backend/crates/fivetran_source/src/convex_api.rs.memory/upstream/convex-backend/crates/fivetran_source/src/api_types/mod.rs
Use these files when deciding:
- snapshot resume behavior
- delta handoff behavior
- checkpoint phase structure
- delete semantics
has_morehandling- component-aware table identity
Use:
.memory/upstream/convex-backend/crates/fivetran_source/src/schema.rs.memory/upstream/convex-backend/crates/fivetran_source/src/api_types/selection.rs.memory/upstream/convex-backend/crates/fivetran_source/src/connector.rs
Use these when deciding:
- component/table/column selection behavior
- schema naming or component partitioning assumptions
- resync requirements when schema layout changes
Use:
.memory/upstream/convex-backend/crates/fivetran_source/src/convert.rs
Use this when deciding:
- which top-level values should stay typed
- when nested values should be serialized as JSON
- special handling for
_creationTime - which underscore-prefixed fields are transport metadata instead of user data
Use carefully:
.memory/upstream/convex-backend/crates/fivetran_destination/src/schema.rs.memory/upstream/convex-backend/crates/fivetran_destination/src/convert.rs.memory/upstream/convex-backend/crates/fivetran_destination/README.md
These are useful for:
- schema compatibility rules
- metadata-column separation
- nullable-vs-non-nullable compatibility thinking
These are not the source of truth for our source-side incremental runtime.
- Convex connector overview: https://fivetran.com/docs/connectors/databases/convex
- Fivetran soft delete mode: https://fivetran.com/docs/core-concepts/sync-modes/soft-delete
- Fivetran history mode: https://fivetran.com/docs/core-concepts/sync-modes/history-mode
These are useful for product-level semantics and user expectations, but not for the exact implementation details of Fivetran's proprietary destination runtime.
Public and usable:
- Convex source connector extraction logic
- Convex connector request/response shapes
- Convex/Fivetran documented sync semantics
Not public / not directly copyable:
- Fivetran's internal scheduler
- warehouse-specific incremental merge strategies
- internal retry / throttling / billing behavior
- proprietary destination maintenance logic
When possible, our source-side behavior should stay aligned with the public
fivetran_source behavior:
- explicit snapshot vs delta checkpoint phases
- resume initial snapshot from checkpoint
- hand off deltas from the final snapshot timestamp
- treat deletes as first-class events
- keep transport metadata separate from user fields
- keep nested values JSON-encoded rather than flattening aggressively
Today we intentionally differ from the Fivetran connector in these ways:
- we do not implement the Fivetran gRPC runtime
- we support target-owned landing contracts instead of one destination runtime
- the S3/export path writes Parquet datasets instead of pushing rows into a Fivetran destination
- the S3/export path materializes local
stagingtables instead of relying on warehouse-native managed tables - the Databricks Delta path lands bronze CDC rows directly and relies on Lakeflow
AUTO CDCfor current-state resolution