v0.2.1
Co-Authored-By: Claude Opus 4.8 (1M context) noreply@anthropic.com
Version intentionally not bumped. Tests: feedback-d2; routing/robustness updated.
-
D2-6: document that
Select.itemIdmust be collision-free as a string.build time, instead of warning then letting Telegram reject the send into onError.
-
D2-5: over-long
callback_datanow throws a clear error naming the widget atinstead of leaving a no-op stub on the shared gramio context.
-
D2-4: scope the reply-keyboard
ctx.answershim — restore it after routing(was mutated in memory but dropped, only relevant with
StartMode.NewStack). -
D2-3: persist the
currentIdreselection on the stale/denied return pathsheadlessCtxalso fleshesfrom.is_bot.fromwith a locale, ort) so getters/i18n needing more thanfrom.idwork; -
D2-1:
background(bot, key, overrides?)— enrich the headless ctx (e.g. realcreateDialogs().withLocksobackground()callers can serialize against taps.(
_reloadStore), so concurrent updates can't clobber each other. Exposed asupdate path now locks per stack key and re-reads the store under the lock
fix: address v0.2.0 feedback round 2 (background/persist/routing hardening)- D2-2: lost-update race — StackRepository.withLock keyed async mutex; the live
chore(release): v0.2.1Co-Authored-By: Claude Opus 4.8 (1M context) noreply@anthropic.com
Full Changelog: v0.2.0...v0.2.1