Reply from someone you wrote to is dropped as a stranger's, with no notice #85

Open
opened 2026-11-04 20:24:35 +00:00 by asxpi · 0 comments
Member

Someone you have written to is still a stranger: their reply is dropped with no trace, and stays lost after allowing strangers.

What happened

Found in an interop hand test (0.8.0-rc2 on libtacky v1.2.0-rc2, Prosody 13.0.7, Gajim 2.6.0 as the peer), with "messages from strangers" off, the default:

  1. Alice (AnotherIM) writes to Bob, who is not in her contacts. Bob gets it.
  2. Bob answers "tset", then corrects it to "test".
  3. Alice sees nothing: no message, no request, no notice.
  4. Alice turns on messages from strangers. Bob's next messages arrive, but "tset"/"test" never show up. Reopening the chat (archive catch-up) does not bring them back either.

AnotherIM's XML log shows both stanzas arriving and being dropped (times UTC, 2026-11-04):

20:10:17 out  to bob@prosody.asxp.io  (Alice's first message, OMEMO)
20:10:39 in   from bob@prosody.asxp.io/gajim…  <body>tset</body>
20:10:53 in   from bob@prosody.asxp.io/gajim…  <body>test</body><replace … id='a9518209-…'/>

Full logs of the client, Gajim and the server: another-im/interop runs/20261104-200806-XEP-0308-gajim-prosody.

Expected

  • A chat I started is not with a stranger. If I sent a message to a JID, their messages in that 1:1 chat should be accepted even without a roster item. Today libtacky's rule (messages_from_strangers, HANDBOOK "Installation-wide settings") admits roster items at to/from/both, transport users, servers and components, rooms and own copies, but not someone the account has written to.
  • A dropped message is visible. libtacky tells message <Blocked> with reason stranger, but nothing in ui/src handles that event (only the generated type), so the user cannot know a reply was blocked or let the sender in.
  • Optionally: allowing strangers (or the sender) afterwards brings back what was blocked, e.g. from MAM, since the catch-up applies the same rule.

Where

  • The rule: libtacky (message StrangerBlocked, roster transportUser).
  • The missing notice: the UI (no listener for message.Blocked).
Someone you have written to is still a stranger: their reply is dropped with no trace, and stays lost after allowing strangers. ## What happened Found in an interop hand test (0.8.0-rc2 on libtacky v1.2.0-rc2, Prosody 13.0.7, Gajim 2.6.0 as the peer), with "messages from strangers" off, the default: 1. Alice (AnotherIM) writes to Bob, who is not in her contacts. Bob gets it. 2. Bob answers "tset", then corrects it to "test". 3. Alice sees nothing: no message, no request, no notice. 4. Alice turns on messages from strangers. Bob's next messages arrive, but "tset"/"test" never show up. Reopening the chat (archive catch-up) does not bring them back either. AnotherIM's XML log shows both stanzas arriving and being dropped (times UTC, 2026-11-04): ``` 20:10:17 out to bob@prosody.asxp.io (Alice's first message, OMEMO) 20:10:39 in from bob@prosody.asxp.io/gajim… <body>tset</body> 20:10:53 in from bob@prosody.asxp.io/gajim… <body>test</body><replace … id='a9518209-…'/> ``` Full logs of the client, Gajim and the server: [another-im/interop runs/20261104-200806-XEP-0308-gajim-prosody](https://dev.another.im/another-im/interop/src/branch/main/runs/20261104-200806-XEP-0308-gajim-prosody). ## Expected - **A chat I started is not with a stranger.** If I sent a message to a JID, their messages in that 1:1 chat should be accepted even without a roster item. Today libtacky's rule (`messages_from_strangers`, HANDBOOK "Installation-wide settings") admits roster items at to/from/both, transport users, servers and components, rooms and own copies, but not someone the account has written to. - **A dropped message is visible.** libtacky tells `message <Blocked>` with reason `stranger`, but nothing in `ui/src` handles that event (only the generated type), so the user cannot know a reply was blocked or let the sender in. - Optionally: allowing strangers (or the sender) afterwards brings back what was blocked, e.g. from MAM, since the catch-up applies the same rule. ## Where - The rule: libtacky (`message StrangerBlocked`, `roster transportUser`). - The missing notice: the UI (no listener for `message.Blocked`).
ann referenced this issue from a commit 2026-11-07 22:42:32 +00:00
0.8.0-rc7, on libtacky v1.2.1 (8919dc12): 0.8.0-rc6 with the modern-only encryption switch per chat, Privacy's "Keep metadata for legacy clients", Who sees my profile and pictures fitted to 72 KiB (feat/profile-visibility), the account password changed at the server (#94), the sign-in fixes (#89, #90), status colours as in Set status (#91), a menu for picked messages (#93), one playback for a full-screen video (#87), reactions as chips inside the bubble (feat/reactions-chips), local delete and Clear history, the stranger's dropped message told (#85), the presence dot back beside a network badge, one Experimental settings card, Copy image on Linux off the main thread and the XML_LOG test build; libtacky pinned to the v1.2.1 tag with the generated API regenerated; made the seventh release candidate: version 0.8.0-rc7 in the UI package and its lock, tauri.conf.json, Cargo.toml and Cargo.lock and the README's version line, Android versionCode 8011; a compact 0.8.0-rc7 CHANGELOG entry (with a From libtacky 1.2.1 bullet) in place of the Unreleased bullets; the metainfo's development release 0.8.0~rc7 (appstreamcli validate --no-net passes). docs/macos.md stays at the last Mac release. README's tables measured again on this tree: 114,546 lines of code and 118,964 of tests (the change since 0.8.0-rc6 counted by the same rules), the UI's 68,842 of 70,448 lines (97.7%, 90.7% of branches), the shell's 12,588 of 13,319 source lines (94.5%), the Kotlin's 4,536 of 4,795 (94.6%), the worker's 872 of 872. Gates: on c4b08323 (the pin) make check STRICT=1 clean, make build, make test-shell 455 in 56 modules, make test-worker green, make release-check passed (no advisory), the WebKit smoke 10,035 checks, 0 failed; before the pin (shell and Kotlin unchanged by it) on 16a94364 the Android JVM tests free 640 and gms 643 passed and cargo check of the shell for x86_64-pc-windows-gnu clean, on bf87e9f7 (its clipboard test brought to Linux's GTK copy) make coverage-shell-all 484 passed; on cc3d1545 (with feat/reactions-chips, UI only) make check STRICT=1 clean (2,500 strings in all five catalogues, seven obsolete), make test-ui 5,246 passed, 8 skipped (444 files), the WebKit smoke 982 screens, 10,103 checks, 0 failed with SMOKE_JOBS=16.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
another-im/anotherim-js#85
No description provided.