v0.29.0
What's Changed
- docs(changelog): promote Unreleased to 0.29.0
- chore(release): read HEAD, not the worktree, for the dev-cycle resume shortcut
- fix(pipeline): commit injected/child events DELIVERED, in causal order
- chore(release): resume after a partial or complete PyPI publish
- fix(pipeline): route the last timeline writes through commit_event
- chore(release): make release.sh re-runnable end to end
- fix(pipeline): commit every timeline write atomically; no phantom latest_index
- chore(release): generate the SBOM before any Git mutation, pin cyclonedx-bom
- test: make the Level 0 conformance matrix honest and behavioural
- feat(api): export lock managers and Postgres store/lock
- fix(pipeline): commit inbound events atomically; defer ON_ERROR past the lock
- ci(release): generate a CycloneDX SBOM and attach it to the GitHub Release
- test: executable RFC Level 0 conformance matrix
- feat(store): PostgresStore.dedupe_event_indices() repair helper
- fix(store): log a visible warning when the events index stays non-unique
- fix(store): don't fail init() when upgrading idx_events_room_index to UNIQUE
- ci: resolve fastapi via 'uv run --with' in the integration job
- ci: run real-Postgres + WebRTC integration tests
- test(store): distinct indices in Postgres tests + multiprocess H1b proof
- style: format postgres_lock.py
- feat(store): distributed room locking + UNIQUE(room_id, index)
- fix(inbound): surface swallowed agent-turn failures to ON_ERROR
- Begin 0.29.0.dev0 development
Full Changelog: v0.28.0...v0.29.0