Releases: ArchiveBox/abxbus
v2.4.29
Highlights
This release rolls up everything shipped on main since the last published GitHub release, v2.4.15, through v2.4.29.
- OpenTelemetry tracing is now much more complete across runtimes. The OTEL middleware work tightened root span parenting, preserved nanosecond timing, aligned Python/TypeScript tracing behavior, added stronger TypeScript coverage, and documented the integration path for both runtimes.
- Optional integrations and package exports are cleaner. Root imports stay lightweight, peer-backed integrations stay opt-in, TypeScript now supports direct source imports via
abxbus/sourceandabxbus/source/*, and the runtime export surface is better aligned across Python and TypeScript. - Cross-runtime metadata/serialization got tighter. Event result serialization, handler naming, handler metadata, and optional export behavior were aligned so forwarded/rehydrated events behave more consistently between Python and TypeScript.
- Immediate execution docs now cover parallel fan-out. The RPC-style immediate execution page now shows how to combine
event_concurrency='parallel'with racing child events in both TypeScript and Python, and the pattern is covered by mirrored regression tests. - Python and TypeScript package versions are both bumped to
2.4.29.
Example Snippets
OTEL middleware setup
import { EventBus } from 'abxbus'
import { OtelTracingMiddleware } from 'abxbus/OtelTracingMiddleware'
const bus = new EventBus('AppBus', {
middlewares: [new OtelTracingMiddleware()],
})Immediate-execution parallel fan-out
const settled = await Promise.allSettled([
event.emit(SomeChildEvent1({})).done(),
event.emit(SomeChildEvent2({})).done(),
event.emit(SomeChildEvent3({})).done(),
])The Python equivalent is documented with asyncio.gather(..., return_exceptions=True) in the immediate-execution guide.
Resources
- OTEL middleware docs
- Immediate Execution (RPC-style)
- Parent-Child Tracking
- TypeScript OTEL implementation
- TypeScript optional-dependency/export coverage
- Python optional-integration import coverage
- Immediate execution Python regression coverage
- Immediate execution TypeScript regression coverage
- Full compare:
v2.4.15...v2.4.29
Validation
mainCI for3ad9fd0completed successfully:Dependency GraphRelease Statepre-commit-hookstest-pytest-ts
- Local packaging/build verification:
uv buildpnpm run build
v2.4.15
Highlights
event.emit(child)now recordsevent_parent_idand handler lineage immediately without making the child block parent completion by default.- Awaiting that emitted child from the same handler upgrades it to
event_blocks_parent_completion: true, preserving explicit RPC-style ownership semantics. - Un-awaited
event.emit(...)children now behave as linked background work: lineage is retained, parent completion is not held open, and parent timeout cancellation does not cascade into them. - Python and TypeScript package versions are both bumped to
2.4.15.
Validation
- Python parent-tracking regression suite:
18 passed - TypeScript parent-tracking regression suite:
22 passed - TypeScript timeout regression suite:
27 passed - TypeScript event-result regression suite:
13 passed
Notes
This release tightens parent-completion semantics around intent: emit for lineage, await for ownership.
v2.4.14
Release v2.4.14
- Remove implicit parent-linking from plain bus.emit() in both TypeScript and Python.
- Keep explicit child lineage on event.emit(...), including event_children attribution and parent-completion blocking.
- Prefer uv-managed Python for TS cross-runtime tests.
Validation:
- uv run pytest
- pnpm run typecheck
- pnpm test
- pnpm run build
- uv build
2.4.13
Highlights
Event ownership and parent completion
- Added
event_blocks_parent_completionmetadata across Python and TypeScript so parent/child ancestry no longer implies parent completion blocking. - Added and standardized
event.emit(child)as the explicit owned-child API; children emitted this way block parent completion. - Kept direct
bus.emit(child)/event.event_bus.emit(child)detached-by-default while preserving automatic parent ancestry from handler context. - Awaited bus emissions now block parent completion only when the await originates from the emitting handler context.
- Fixed TypeScript detached-child promotion so outside observers such as
bus.find(...).done(), externalchild.done(), and externalchild.eventCompleted()cannot make parent completion depend on observer behavior. - Verified the Python paths already use
ContextVar-scoped current event/handler checks and do not need the same runtime fix. - Renamed the TypeScript event runtime context from
event.bustoevent.event_buswith no compatibility alias, matching Python.
Retry and cross-runtime coordination
- Added cross-runtime multiprocess semaphore support for retry locking in Python and TypeScript.
- Added retry multiprocess worker/test coverage and made ordering assertions more robust.
Full Changelog: 2.4.7...2.4.13
2.4.11
Highlights
Event ownership and parent completion
- Added
event_blocks_parent_completionmetadata across Python and TypeScript so parent/child ancestry no longer implies parent completion blocking. - Added and standardized
event.emit(child)as the explicit owned-child API; children emitted this way block parent completion. - Kept direct
bus.emit(child)detached-by-default while preserving automatic parent ancestry from handler context; awaited bus emissions block parent completion when possible. - Renamed the TypeScript event runtime context from
event.bustoevent.event_buswith no compatibility alias, matching Python.
Retry and cross-runtime coordination
- Added cross-runtime multiprocess semaphore support for retry locking in Python and TypeScript.
- Added retry multiprocess worker/test coverage and made ordering assertions more robust.
Release and repository operations
- Reworked release automation around the unified
bin/release.sh. - Configured npm/PyPI release credentials through the release workflow.
- Added
bin/setup_monorepo.shfor local monorepo setup. - Updated uv/pre-commit configuration.
Docs and examples
- Updated README and docs for parent-child tracking, immediate execution, timeouts, retry, and event ownership semantics.
- Updated TypeScript examples/tests to recommend
event.emit(...)for owned child work andevent.event_bus.emit(...)only for explicit detached/background emissions. - Fixed prose, capitalization, and grammar issues across docs.
Validation
uv run prek run --all-filespnpm --dir abxbus-ts run builduv build- PR #15 CI passed for Python, TypeScript, examples, coverage, performance, and Cubic checks.
Full Changelog: 2.4.7...2.4.11
2.4.7
Full Changelog: 2.4.6...2.4.7
2.4.6
Full Changelog: 2.4.2...2.4.6
2.4.2
What's Changed
- 🐍 Published the Python package as
abxbus==2.4.2and finalized renamedRepository,Issue Tracker,PyPI, andNPMmetadata inpyproject.toml. - 📚 Refreshed the docs and homepage copy around concurrency, parent/child flows, return values, and quickstart examples to match the renamed package surfaces.
- ✅ Tightened TS-side release metadata and
EventResultcoverage while aligning the docs site, README badges, and DeepWiki links withArchiveBox/abxbus. - 🔗 This is mainly a Python/docs/metadata release, with npm staying on
2.4.1while the docs and package identity catch up.
pip install abxbus==2.4.2Docs: Home · Quickstart · Parent-Child Tracking
Full Changelog: 2.4.1...2.4.2
2.4.1
What's Changed
- 🔁 Completed the
bubus→abxbusrename across Python and TypeScript package names, modules, docs, examples, CI, tests, bridges, and UI assets. - 📦 Added dual-runtime TS packaging with
requireexports plus newbuild:cjsandbuild:cjs:typesscripts alongside the existing ESM build. - 🧯 Tightened
done()/first()/ timeout behavior so the first handler error is re-raised consistently during nested execution. - 🛡️ Added Python recursion-depth option
max_handler_recursion_depthand safer Node runtime loading forAsyncLocalStorageand optional bridge dependencies.
const { EventBus } = require("abxbus");
const bus = new EventBus();Docs: Quickstart · Bridges · Timeouts
Full Changelog: 2.3.3...2.4.1
2.3.3
What's Changed
- 📦 Added CommonJS package outputs via
build:cjs,build:cjs:types, and newrequireexports inbubus-ts/package.json. - 🧯 Tightened
done({ raise_if_any })/first()error propagation, saferAsyncLocalStorageloading, and clearer optional-dependency detection in TS. - 🧪 Expanded TS base-event, timeout, error-handling, typed-result, and Python-side
tests/test_eventbus.pycoverage while moving the UI app underexamples/ui/.
const { EventBus } = require("bubus");Docs: Supported Runtimes · Timeouts · Quickstart
Full Changelog: 2.3.2...2.3.3