Release v0.1.8
Documentation
New: Runtime Guarantees
Added guides/runtime-guarantees.md — the
single source of truth for what the runtime promises. Covers:
- source-order delivery in linear and buffered modes
- sink fail-closed semantics and when each policy applies
- the full checkpoint advancement table (success, drop, DLQ, fail-closed,
log-and-continue) - DLQ routing and DLQ failure policy
- DLQ replay acknowledgement
- cancellation and lifecycle ordering
- intentional non-guarantees: at-least-once delivery, no two-phase commit,
untrusted-config caveat, public-edge hardening, cross-source ordering
The page is now the authoritative contract. architecture.md and
failure-handling.md cross-link into it instead of restating guarantees in
prose.
New: Recovery Support Matrix
Added guides/recovery-matrix.md — the
per-source resume contract. Covers:
- which built-in sources are checkpointable and what their resume key looks
like - the three conditions a source must satisfy to be treated as checkpointable
- per-source notes for
JsonLinesSource,CsvSource,ParquetSource,
HTTPSource, andIterableSource - what
resumedoes and does not promise - checkpoint failure handling for both the load and save paths
- a minimal recipe for adding resume support to a custom source
sources.md and guides/checkpointing.md now cross-link into the matrix
instead of carrying their own short tables.
Tests
Preservation: runtime guarantees
Added tests/preservation/test_runtime_guarantees.py (12 tests). Each test
maps to one declared guarantee in runtime-guarantees.md:
- linear-mode source-order commit
- buffered-mode source-order commit when the buffered stage resolves futures
in reverse order - sink fail-closed propagates without DLQ
- checkpoint advances on successful write
- checkpoint advances when middleware DLQs the record
- DLQ routing carries
stage="middleware"and middleware name - middleware failure without DLQ continues the pipeline and counts the error
- sink failure with DLQ advances the checkpoint
is_checkpoint_capablerequires the explicitsupports_checkpointflagDLQFailurePolicy.RAISEpropagates DLQ write errorsDLQFailurePolicy.LOG_ONLY(default) swallows DLQ write errorsSinkFailurePolicy.LOG_AND_CONTINUEadvances the checkpoint over a failed
write
Preservation: recovery edge cases
Added tests/preservation/test_recovery_edge_cases.py (10 tests):
- corrupted checkpoint payload (missing fields) raises a typed
TypeError—
protects the0.1.7fix - non-dict checkpoint payload raises a typed
TypeError prepare_resumefailure aborts the run underFAIL_CLOSEDprepare_resumefailure underLOG_AND_CONTINUEstarts from scratch- checkpoint
load()failure aborts the run underFAIL_CLOSED - checkpoint
load()failure underLOG_AND_CONTINUEstarts from scratch - checkpoint
save()failure underLOG_AND_CONTINUEdoes not retry-storm —
protects the0.1.7mark_savedfix - non-checkpointable source paired with a checkpoint store runs without
checkpointing instead of raising - two-run resume restores progress from the saved position
SQLiteCheckpointStoresurvives close/reopen — basis for cross-process
resume