#3798 fix(taps): ignore start_date for non-string SQL replication keys
Pull request opened by
akashmalbari
Summary
• add a cached Stream.supports_start_date property backed by a _supports_start_date hook that defaults to True for backward-compatible custom stream behavior
• have SQLStream evaluate the configured replication-key schema: string keys retain start_date; non-string keys warn once and omit it before initial state is written
• raise the standard invalid-replication-key error when an SQL replication key is absent from the effective schema
• add regression coverage for generic streams and SQL streams with integer, string, absent, and invalid replication keys
Fixes
#1677
Validation
• UV_PRERELEASE=if-necessary-or-explicit uv run --python 3.14 --locked pytest tests/core/test_streams.py (51 passed)
• UV_PRERELEASE=if-necessary-or-explicit uv run --python 3.14 --locked pytest -m packages tests/packages/test_tap_sqlite.py (12 passed)
• uvx prek run --files singer_sdk/streams/core.py singer_sdk/sql/stream.py tests/core/test_streams.py tests/packages/test_tap_sqlite.py (passed)
• GitHub Actions required checks, including API changes, typing, package tests, and coverage (passed on the prior head; the fresh run is in progress)
Compatibility and privacy/security impact
The behavior change is limited to SQLStream instances with an explicit non-string replication key: an ISO start_date is no longer used as their initial bookmark, preventing incompatible SQL comparisons. String SQL keys and streams without a replication key retain existing behavior. Other Stream subclasses keep the default support and can explicitly opt out by overriding _supports_start_date. No credentials, tokens, records, or sensitive responses are exposed.
meltano/sdk