Change Log: 0.1.6

Released: May 27, 2026

Focus

0.1.6 is a confidence release. It tightens CI hygiene, makes benchmark reporting trustworthy again, and removes a small set of avoidable runtime hot path costs without introducing new public APIs or changing the core execution model.

Implemented

CI Hygiene

  • Added mypy to the make ci target so type checking is part of every local validation pass alongside ruff and pytest
  • Resolved all 86 pre-existing mypy errors across the codebase so the type checking gate starts clean

Benchmark Truthfulness

  • Removed tracemalloc from the timed path of both core and plugin benchmark lanes so throughput numbers are no longer distorted by heap sampling overhead
  • Updated the core and plugin benchmark reports to hide Peak Py Heap when heap sampling is intentionally disabled and to explain that throughput is now measured without tracemalloc
  • Kept the benchmark lane split (core, Kafka, Redis) but made the generated reports better match what they actually measure in practice

Runtime Fixes

  • Fixed trace_span() to return a zero-allocation singleton scope when NoopTracer is active, eliminating per-record span object allocation on the hot path for pipelines that do not collect traces
  • Fixed MapMiddleware to cache whether its callable is async at construction time instead of re-running coroutine-function inspection for every record
  • Fixed SinkFanOut.write() to use the same _WRITE_OK singleton fast path that write_batch() already used for single-sink pipelines, avoiding unnecessary list allocation per record
  • Fixed MiddlewareChain.stop_all() to continue stopping remaining middlewares when one raises during shutdown, logging each failure instead of aborting the shutdown sequence early
  • Fixed AIBatchMiddleware.submit() variable shadowing that caused UnboundLocalError when the queue was active
  • Replaced deprecated asyncio.iscoroutinefunction() usage with inspect.iscoroutinefunction() in the middleware and CLI paths that still used the old helper

Type Checking

  • Added Any imports and type annotations to untyped functions across cli/, config/, core/, runner/, middlewares/, sinks/, sources/, schema/, metrics/, and ai/ modules
  • Fixed on_error parameter defaults in all AI middleware subclasses to use OnError.PASSTHROUGH enum value instead of the bare string "passthrough"
  • Fixed asyncio.Task, asyncio.Future, and dict generic type arguments throughout the codebase
  • Removed stale and incorrect type: ignore comments that mypy flagged as unused after other fixes landed

Packaging

  • Bumped agora-etl to 0.1.6