Files
openclaw/extensions
Peter Steinberger ee3d084048 fix(telegram): coalesce durable album ingress into one turn (#115401)
* fix(telegram): coalesce durable album ingress

Split durable claim lifetime from lane occupancy so Telegram can admit later album members while every deferred claim remains heartbeated, recoverable, and independently settled.

With deferredLaneOccupancy=release, an unrelated later same-lane Telegram message can reach reply admission before an album that is still inside its 500 ms flush window. That restores the pre-f7786a16 contract, not a new defect; grammY sequentialize still preserves handler-entry order and the reply lane serializes once a turn is admitted.

* fix(telegram): preserve deferred abort semantics

Release deferred claims when their owner aborts before settlement, while preserving adoption when settlement won the race. Supersede every accepted pre-adoption state on released lanes without admitting past a surviving lane owner.

* fix(telegram): separate participant rejection from settlement failure

The detached deferred continuation chained its rejection handler with .catch
after .then, so it observed not only a participant.task rejection but also any
error thrown by onFailed()/onAdopted() and re-drove that infrastructure error
through onFailed().

That applied the wrong disposition when the claim was still pre-adoption, and
silently discarded the error once it was not: onAdopted() sets phase to adopted
before its tombstone write, so a wedged write reached a re-entrant onFailed()
that returned early on the phase guard and never reached the logging handler.

Use the two-argument then form so task rejection and lifecycle settlement
failure stay on separate paths.

* fix(channels): satisfy ingress CI guards
2026-07-28 17:50:20 -04:00
..