clink v0.7.0 - the qualification release
The qualification release. The centre of gravity across 318 commits is one question: do the guarantees hold when processes die at the worst possible instant? The answer is now published evidence rather than an architecture claim.
Highlights
QUAL-01: Kafka exactly-once, qualified and published. A windowed aggregation from Kafka through the transactional sink ran two hours on a multi-host rig under continuous fault injection - kills armed inside the two-phase-commit protocol's own windows, coordinator SIGKILLs, broker restarts and outages, network partitions - and an independent seeded oracle judged 755/755 windows byte-exact: zero missing, zero duplicates, zero foreign. Full report: https://orhaugh.github.io/clink/qualification/qual-01-kafka-exactly-once/
The exactly-once machinery behind it. Commit-confirmed restores, prepared-transaction resume over the Kafka wire protocol (SASL/PLAIN, SCRAM-SHA-256 with server verification, TLS), durable commit receipts with replay suppression, in-doubt resolution with receipt materialisation and unresolved-orphan markers, and the sink's pre-fence describe - which refuses to open a producer while its predecessor's transaction is unknowable.
Hot rescale. An eligible operator's parallelism changes as an in-place cutover at a checkpoint barrier; only the rescaled operator's subtasks cycle. Graceful stop-at-savepoint lands alongside.
Production-hardening round closed (F1-F101) - per-operator key-group slices, real TTL on collection/CEP state, SQL refusing clauses it used to silently drop, protocol-corrupt receives failing loudly, and more.
Compatibility made explicit. Wire protocol v2 negotiated (v1 peers retained for rolling upgrades); snapshot format version enforced; frozen-bytes fixtures pin each encoding; plugin ABI v1 unchanged. No REST API breaks.
Observability. Real OTLP export (metrics + lifecycle spans), checkpoint staleness, per-job state size, a shipped Grafana dashboard and alert runbook.
Testing surface. Source/sink contract suites where a capability claim is a test obligation, libFuzzer targets whose findings become regression tests, and the SQL differential oracle.
Full changelog: https://github.com/orhaugh/clink/blob/main/CHANGELOG.md
Artifacts
- Python wheel
pyclink-0.7.0(attached; sha2568072195032778fdc7205f6032eaf7d50597c7cff53ee04e80e7187a1d4cff084) - Runtime image
ghcr.io/orhaugh/clink-runtime:0.7.0 - Linux SDK
clink-0.7.0-linux-x86_64-ubuntu24.04.tar.gz(relocatable, attached by release-binaries.yml)