- Issue #38 part 1: MAX reply to a bridged TG message now lands in the
same TG forum thread as the original, not in the pair's default
thread. messages table gets tg_thread_id column (migration 000014);
SaveMsg stores the TG thread, LookupTgMsgID returns it, forwardMaxToTg
applies source thread for reply-routing (both body.ReplyTo and
Link.Type=reply paths).
- Fix crosspost attribution heuristic: forwardMaxToTg used
"caption != text" to detect bridge mode, which broke when MaxToTg
replacements or whitespace made caption differ from raw body.Text —
MAX→TG crossposts then got [MAX] prefix and bold name. Now explicit
isCrosspost flag.
- /bridge without key in an already-linked chat no longer generates a
fresh key; instead shows "already linked" hint with pairing guidance
(both TG and MAX sides).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>