Skip to content

Release v0.1.7

Choose a tag to compare

@thanhtham010891 thanhtham010891 released this 28 May 06:21
· 11 commits to main since this release

Focus

Runtime correctness, API clarity, and docs overhaul.

Runtime Fixes

  • Buffered pipeline: bare await future in _commit_next_buffered_record bypassed DLQ routing on middleware failure — removed
  • Buffered pipeline: producer finally block used await put() which could block on cancellation, leaving consumer stuck — switched to put_nowait
  • Checkpoint: LOG_AND_CONTINUE path did not call mark_saved(), causing retry storm on every subsequent record after a failed save
  • Delivery: on_success hook fired under LOG_AND_CONTINUE even when both sink and DLQ writes failed — hook now only fires when the record was durably routed
  • Retry: asyncio.iscoroutine missed Future/Task awaitables in on_retry callbacks — replaced with inspect.isawaitable
  • Span stack: _PipelineSpanScope.__exit__ popped without identity check — silent corruption on out-of-order exits
  • Checkpoint load: corrupted checkpoint data raised bare KeyError with no context — now raises descriptive TypeError
  • Health server: writer.close() without await writer.wait_closed() leaked file descriptors under high connection rates
  • Runner: cancelled pipeline run stored a synthetic CancelledError in RunRecord.error, discarding the original traceback

API Clarity

  • Removed phase-scoped headers and forward-looking language from dlq.py, writer.py, registry.py, state/backend.py, schema/metrics.py
  • Fixed 0.1.4 changelog entry — was labeled "planned hardening release"

Docs

Full docs overhaul: new guides/ section covering pipelines, failure handling, checkpointing, scheduling, testing, and observability. Reference pages restructured with decision tables and common mistakes. mkdocs.yml nav updated.