                              ━━━━━━━━━━━
                               CHANGELOG
                              ━━━━━━━━━━━


              2026-09-05 2026-09-05 2026-08-28 2026-08-07


1 Unreleased
════════════

1.1 Fixes
─────────

  • Drop rejected incoming message corrections silently, including
    missing or ambiguous archive targets, instead of flooding
    `*Messages*'.
  • Keep contact names, presence, subscriptions, avatars and resource
    capabilities separate for each connection, including completion and
    background chat alerts.
  • Keep unread activity and subscription prompts attached to their
    originating account when several accounts share a contact or room.
  • Scope service-discovery observations and pending room errors to
    their connection; capability retries retain the advertising account
    and node.
  • Keep named resources independently selectable, preserving resource
    case.
  • Reclaim retired discovery observations when storing new
    observations, without clearing other live accounts or globally
    verified capabilities.


1.2 Extension compatibility
───────────────────────────

  • Restart Emacs disconnected before first using this version.
    Existing live global-symbol rosters and pending-room tables are not
    migrated by reloading Lisp files.
  • `jabber-jid-symbol', the roster/display/bookmark name helpers and
    `jabber-avatar-set' accept a final optional connection argument.
    Pass it when reading or writing automatic roster metadata.  Without
    it, these APIs use only supplied symbols or legacy accountless data,
    never a guessed account.
  • Presence hooks and title callbacks keep their existing arities.
    Their WHO argument is an account-scoped symbol; `jabber-jid-owner'
    returns its connection.  Direct symbol-property reads on WHO remain
    supported.
  • `jabber-read-jid-completing' accepts the connection as its seventh
    argument.  An explicitly selected empty account does not fall back
    to other rosters.
  • Activity entries now retain connection/JID pairs internally.
    Existing custom activity formatters and visibility predicates still
    receive JID strings.  Legacy JID-only navigation refuses ambiguous
    owners instead of choosing one.  Legacy JID widgets can carry their
    owner in the `:jabber-connection' property.


2 [0.14.0]
══════════

2.1 Fixes
─────────

  • Restore broadcast presence after connection.  A room-recovery check
    rejected presence without a recipient, leaving the client
    unavailable to the server: contacts appeared offline and incoming
    messages could require archive sync


3 [0.13.3]
══════════

3.1 Added
─────────

  • Automatically preview shared links locally when URL expansion is
    enabled


3.2 Fixes
─────────

  • Reconnect failed transports after wake and check keepalive responses
    for new and resumed sessions
  • Preserve Stream Management replay order, validate handled counts,
    and ignore stale transport input and lifecycle callbacks
  • Preserve room recovery state, encrypted messages, and local echoes
    across reconnects, including nickname and credential ownership
  • Propagate picomemo encryption errors instead of reporting success
  • Restore serialized picomemo stores after refilling prekeys
  • Fix compiler dependencies and check every library with isolated byte
    and native compilation, including regression tests for compiler
    failures
  • Cancel orphaned Stream Management timers and bind callbacks to their
    owning connection state
  • Retire stale Stream Management requests during TLS negotiation
  • Fix OMEMO random generation and shared-module linking on OpenBSD


4 [0.13.2]
══════════

4.1 Added
─────────

  • Navigate previously sent chat input
  • Reset an individual OMEMO peer-device session from the trust buffer


4.2 Fixes
─────────

  • Persist OMEMO heartbeat ratchets before sending, preventing key
    reuse after restart
  • Preserve OMEMO trust while rebuilding sessions and reject changed
    device identities
  • Clear OMEMO session state atomically and wipe temporary store
    secrets
  • Preserve exact OMEMO cryptographic bytes in SQLite
  • Harden STARTTLS negotiation against malformed, premature, and stale
    replies
  • Skip queued real-time text sends after their chat session has ended
  • Handle MUC author retractions


5 [0.13.1]
══════════

5.1 Fixes
─────────

  • Correct outgoing MUC message-correction target lookup
  …  …
