Changelog¶
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[Unreleased]¶
[0.1.6] - 2026-09-29¶
Fixed¶
- Dependency floors raised to what the test suite proves:
pico-ioc >= 2.3.3(was 2.2.0; below 2.3.0 the settings prefix fails to resolve). A new CI job runs the suite with every declared floor pinned, so a floor that installs but does not work can no longer ship.
Added¶
__all__declares the public API andtests/test_exports.pypins it, per the ecosystem stability policy (ADR-014 in pico-ioc).
Documentation¶
docs/architecture.mdlinks the ADR-014 stability and deprecation policy.
[0.1.5] - 2026-07-10¶
Fixed¶
stop()claims the loop and thread atomically under the registrar lock, so concurrent stops (ASGI lifespan plus a manualcontainer.shutdown()) can no longer interleave — the loser sees no loop and returns. This was the root cause of the level-2 teardown hang that 0.1.3 only bounded; defense in depth alongside pico-ioc 2.3.3's idempotent container shutdown. Announced in 0.1.4 but that build shipped without the code change; the regression test now drives a real loop and fails against the 0.1.4stop().
[0.1.4] - 2026-07-10¶
Added¶
- Concurrent-stop regression test. The atomic
stop()it was meant to pin missed this build (the test passed vacuously without a running loop); fixed for real in 0.1.5.
[0.1.3] - 2026-07-10¶
Fixed¶
stop()is best-effort: if the clean shutdown exceeds its deadline, it logs a warning and forces the loop down instead of raising throughcontainer.shutdown(). An unclean broker disconnect beats a bricked application exit.
[0.1.2] - 2026-07-10¶
Fixed¶
- Shutdown uses
consumer_start_timeout_secondsas its deadline too: stopping real consumers (group leave + offset commit) under load exceeded the 10s produce timeout and madecontainer.shutdown()raise. Found by the flagship level-2 teardown.
[0.1.1] - 2026-07-10¶
Fixed¶
- Consumer startup no longer reuses
produce_timeout_secondsas its deadline: newkafka.consumer_start_timeout_secondssetting (default 60s). Cold brokers (fresh KRaft clusters) exposing the group coordinator slowly used to kill the whole container boot at 10s.
[0.1.0] - 2026-07-10¶
Added¶
@kafka_consumer(topic, group_id=)marker for component methods (sync and async); JSON record values decoded before dispatch.@kafka_producer/@produce(topic)declarative producing clients (sync stubs block on ack, async stubs await).KafkaRegistrar: dedicated background asyncio loop; one aiokafka consumer task per subscribed method; skip-on-failure policy so poison records never stall a partition; everything stopped on container shutdown.- Settings under the
kafkaprefix:bootstrap_servers,enabled,group_id,produce_timeout_seconds(zero-config). - Auto-discovery via the
pico_boot.modulesentry point.