Each provider role (source, doc sink, tracker, notifier) is defined as a Protocol in src/providers/base.py, but conformance is only verified implicitly by the pipeline at runtime. As adapters are added -- Sentry, OTLP, and Jira are all queued -- a shared contract suite is what keeps them interchangeable.
Scope
- A parametrized test suite each adapter is registered against, asserting the behaviour the pipeline relies on: return types, empty-result handling, and that failures raise rather than returning partial data.
- Cover the existing adapters (
datadog, markdown, notion, github, linear, console, slack) so the contract is pinned to current behaviour before new adapters land.
- No network access: adapters are exercised against fakes at the transport boundary.
Done when
Adding a new adapter requires only registering it with the suite to get baseline coverage, and any divergence between two adapters in the same role fails a test.
Each provider role (source, doc sink, tracker, notifier) is defined as a Protocol in
src/providers/base.py, but conformance is only verified implicitly by the pipeline at runtime. As adapters are added -- Sentry, OTLP, and Jira are all queued -- a shared contract suite is what keeps them interchangeable.Scope
datadog,markdown,notion,github,linear,console,slack) so the contract is pinned to current behaviour before new adapters land.Done when
Adding a new adapter requires only registering it with the suite to get baseline coverage, and any divergence between two adapters in the same role fails a test.