chore(deps)!: bump es-entity to 0.13.0, job to 0.15.2, obix to 0.12.1 - #887
Conversation
es-entity 0.13.0 gates PaginatedQueryRet construction and its entities field behind PaginatedQueryRet::new(...)/entities()/into_parts() (#229), so every repo that hand-built the struct now goes through ::new(...) with the query's requested `first` as the new requested_size argument, and callers that read .entities move to .entities() or .into_parts(). obix 0.12.0 replaces the commit-ordered delivery envelope with a lane typed as part of the type system (#156): SingletonSubscriber:: handle_persistent now takes &EventDelivery<P, L> instead of &Arc<PersistentOutboxEvent<P>>, retention goes through event.inner().clone(), Subscription::await_sequence is renamed to await_position, and SubscriptionError::CaughtUpTimeout/ SubscriptionStreamStatus report the dynamic StreamPosition rather than a lane-typed sequence. cala only ever runs the default insert lane, so EcRollupStatus and LedgerError::EcCaughtUpTimeout are updated to match with no behavior change. obix 0.12.0 also replaces the commit-log partition scheme with sparse commit checkpoints, and job 0.15.0 adds a job_waiters table plus job_executions.woken_at for wake-on-completion; both migrations are updated in place (nothing is live yet on this schema). job 0.15.2 and obix 0.12.1 are trailing patch releases that only strip comments from their migration templates; the cala-prefixed copies here are updated to match with no schema change. .sqlx query cache regenerated against the new schema. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
| .await? | ||
| .entities; | ||
| .into_parts() | ||
| .0; |
There was a problem hiding this comment.
ugly - I thought into_parts() was internal only... why is it pub?
There was a problem hiding this comment.
I think this is an anti-pattern. I left into_parts because I'm thinking want both entities and the next query if we need the entities. Having entities alone is a signal that we are ignoring future pages. The intention is to fetch let (entities, next) = query.into_parts() or let next = query.into_next_query() but never let entities = query.into_entities() and never this tuple destructuring style, since this might signal a bug if we're ignoring next pages?
There was a problem hiding this comment.
okay - can you PR here to show what should be idiomatic?
| } | ||
|
|
||
| fn balances_by_id<C>( | ||
| fn balances_by_id<C: std::fmt::Debug>( |
There was a problem hiding this comment.
Ugly - why does C now carry this constraint? We shouldn't mandate that constraint on library users.
📊 Performance ReportCommit: 8f35899 Cala Performance Benchmark Results (non-representative)Criterion Benchmark Results (single-threaded)
Load Testing Results (parallel-execution)
Note: Performance results may vary based on system resources and database state. Last updated by commit 8f35899 |
Summary
es-entity0.12.21 → 0.13.0,job0.14.0 → 0.15.2,obix0.11.0 → 0.12.1 — all breaking 0.x bumps.PaginatedQueryRetgates construction behind::new(entities, has_next_page, end_cursor, requested_size)and theentitiesfield behind.entities()/.into_parts()(chore(deps): bump serde from 1.0.208 to 1.0.210 #229). Every repo that hand-built the struct now calls::new(...)with the query'sfirstasrequested_size; callers that read.entitiesmove to.entities()or.into_parts().SingletonSubscriber::handle_persistentnow takes&EventDelivery<P, L>instead of&Arc<PersistentOutboxEvent<P>>(retention viaevent.inner().clone()),Subscription::await_sequence→await_position, andSubscriptionError::CaughtUpTimeout/SubscriptionStreamStatusreport the dynamicStreamPositioninstead of a lane-typed sequence. cala only runs the default insert lane, soEcRollupStatusandLedgerError::EcCaughtUpTimeoutare updated to match with no behavior change.persistent_outbox_commit_checkpointstable, and job 0.15.0 addsjob_waitersplusjob_executions.woken_atfor wake-on-completion. Both migrations are updated in place — regenerated verbatim from the upstream templates (byte-for-byte round-trip verified after stripping thecala_prefix) — since nothing is live on this schema yet..sqlxquery cache regenerated against the new schema.Test plan
SQLX_OFFLINE=true cargo build --locked --workspace --all-targets --all-featuresSQLX_OFFLINE=true cargo clippy --workspace --all-targets --all-features(clean)cargo nextest run --workspace --all-featuresagainst a fresh local Postgres migrated from these migration files — 219/219 passedcargo run -p cala-ledger --bin event-schemas --features json-schema— no schema driftcargo doc --no-deps— no new warnings🤖 Generated with Claude Code
Note
High Risk
Rewrites job and persistent-outbox migrations and job scheduling SQL while changing pagination and outbox delivery APIs—high impact on background jobs, EC rollup lag/wait semantics, and any consumer of paginated list types.
Overview
Breaking dependency upgrade for
es-entity0.13.0,job0.15.2, andobix0.12.1, with matchingCargo.lockand regeneratedcala-ledger/.sqlxoffline query metadata.es-entity: Pagination results are no longer built with struct literals. Repos construct
PaginatedQueryRet::new(..., query.first)and callers read pages via.entities(),.into_parts(), or updated pagination continuation patterns in tests.obix: Persistent delivery moves to
EventDeliveryinhandle_persistent(EC rollup clones viaevent.inner()). Subscription waiting usesawait_positionandStreamPositionin errors/status instead of lane-typed sequences. The outbox commit path drops partitionedcala_persistent_outbox_commit_log+ state tables for sparsecala_persistent_outbox_commit_checkpoints(migrations rewritten in place).job: Schema adds
job_waiters,job_executions.woken_at, and updated queue promote/reschedule/retry SQL (wake-on-completion semantics). Job setup migration is trimmed/regenerated to match upstream templates.Ledger surface:
EcRollupStatusis built from explicitcheckpoint()/frontier();LedgerError::EcCaughtUpTimeoutcarriesStreamPosition.Reviewed by Cursor Bugbot for commit 8f35899. Bugbot is set up for automated code reviews on this repo. Configure here.