provider-plugin
Implement an OpenDataSuite SDK contract (ArtifactProvider, MetadataProvider, ChangeProvider, StateStore, Executor, CloneProvider, UsageProvider, ERDProvider, LLMProvider, …) for a concrete vendor such
SKILL.mdskills/provider-plugin/SKILL.md
GitHubImplement a provider
- Find the contract in
crates/ods-sdk/src/contracts/. If it does not exist yet, stop: define the trait first, followingcontracts/lock.rs(trait +Contractconstant + documented semantics), with a fake inods-provider-fakeand a suite inods-sdk/src/conformance/, ideally as its own PR (ADR-0006). Provide aProviderFactorythat validatessettingsand never echoes values. - Declare capabilities honestly. Advertise only what the provider can prove at runtime; detect optional features (e.g. Delta CDF, query history, shallow clone) and degrade gracefully. Core chooses strategies from capabilities — never from the provider's name.
- Evidence. Every observation returned (versions, timestamps, usage counts, inferred relationships) carries provenance and a confidence/explicit-vs-inferred marker.
- Conservative failure. When metadata is missing or ambiguous, return "unknown" so the planner falls back to BUILD; never fabricate values (e.g. cost estimates, versions).
- No leakage. Vendor types stay inside the provider crate; map to
ods-coretypes at the boundary. - Secrets come from the config/secret-reference layer; redact in
Debug, errors and events.ProviderError::{Conflict, Unavailable, Other}take free-form strings, so nothing enforces this for you: never format connection strings, tokens, request bodies or raw driver errors that may embed them into those messages. - Tests:
- Run the SDK conformance suite for the contract (
ods-sdkfeatureconformance); assert which cases were skipped, so a lost capability is noticed. - Fixture-based tests (recorded JSON responses / dbt artifacts in
fixtures/), no live network. - Optional live integration tests behind a feature flag + env var, skipped by default.
- Run the SDK conformance suite for the contract (
- dbt specifics: parse artifacts against the public schemas for each supported
dbt_schema_version; the Executor passes exact node selectors (no+graph expansion) so reused nodes are not re-run. - Document capabilities and limitations in the crate README. Run
verify.