VM batch 4: profile, presence, roster and blocking on all three servers #26
Loading…
Reference in a new issue
No description provided.
Delete branch "vm/batch-4"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Batch 4 (profile, presence, roster, blocking) of the GUI VM runs: anotherim-js 0.8.0-rc9 (
142ee094, libtacky v1.2.3) against Gajim, Dino, Kaidan and anotherim-web on ejabberd, Prosody and anotherim-server.Coverage:
tools/interop.py gaps --feature <spec> --server <server>prints 0 gaps for RFC 6121, XEP-0054, 0084, 0085, 0153, 0172, 0191, 0313 (r), 0319, 0377, 0392 on all three servers. Dino and Kaidan lack nick, idle and spam reporting (clients.toml,bf6874c); XEP-0377 isnaon all three (no server advertisesurn:xmpp:reporting:1).Runs: 94 recorded, 75 pass, 13 fail, 6 na: ejabberd 33 (27/4/2), prosody 30 (24/4/2), anotherim-server 31 (24/5/2).
Found:
16c265d).<nick/>), web's Contact info keeps "Aim Kiwi" (all three servers).<delete/>received (prosody 150252).<nick/>": not reproduced on any server.<metadata/>; Kaidan never puts its photo hash in presence; Prosody writes an empty metadata's item id as a photo hash and keeps a vCard-derived avatar.XEP-0313
r: a real session death on each server (link down past the resume limit: 300 s ejabberd/anotherim-server, 600 s Prosody), resume refused, MAM catch-up with original timestamps.Harness:
profile.pywith one PART per spec, aim's contact/block actions, Gajim's Add Contact, idle monitor (libXss) and width fix, Dino and Kaidan approve/avatar/profile actions,tools/xep0392.pyfor name colours,xep0313.py PART=reset, AGENTS.md per server.🤖 Generated with Claude Code
aim's presence carries its vcard-temp❌update photo hash once its avatar is set; on Gajim's new hash aim fetched vm-gajim's vCard and got the PHOTO, and shows the picture. Gajim shows aim's picture from PEP. C12 is not exercised (no avatar at sign-in; the own vCard get went before the first presence). Assisted-by: Claude:opus-5-5Each side's PEP nick reaches the other and names the contact (aim's list, header and details; Gajim's Information title). aim's cleared name goes out as an empty <nick/> and Gajim drops the nick at once ("Nickname ... None", plain vm-aim): #9's "Gajim keeps the old nick" is not reproduced on prosody. Assisted-by: Claude:opus-5-5Gajim 2.6 logged "IDLE False" at start and never went auto-away, so it sent no XEP-0319 <idle/> however long the X session idled: its only usable monitor on X11 is XScreenSaverInfo through ctypes, and NixOS' ctypes.util.find_library("Xss") finds nothing without ld and the library dirs in LD_LIBRARY_PATH. The guest now has binutils, and interop-client.sh starts Gajim with libXScrnSaver's and libX11's lib dirs (INTEROP_GAJIM_LIBS) in LD_LIBRARY_PATH; checked on the host: find_library then answers libXss.so.1 and libX11.so.6. profile.py's "aim got an <idle/> from the peer" matched aim's own reflected presence, which carries <idle/> once aim itself has been left alone 5 min during the peer's wait (ejabberd, Gajim): it now requires the peer's JID. Assisted-by: Claude:opus-5-5profile.py's restore clears Gajim's Full Name with edit_profile({...: ""}), which looked for the row once, right after the Edit page opened: on prosody it found none, deleted nothing and saved "gajim Mango" again, so vm-gajim kept that name (cleared by hand in a REPL since). Clearing now waits up to 4 s for the row before pressing its delete. Assisted-by: Claude:opus-5-5On ejabberd tesseract read the dialog's body ("Remove vm-gajim@…") but not its Cancel, twice in a row, and profile.py's spam step failed before the stranger wrote. The red Remove (srgb(217,48,37), white label) is found by colour then; tried in a REPL: (766, 449). Assisted-by: Claude:opus-5-5Batch 4's profile.py needs both from Dino 0.5.1 (RFC 6121, XEP-0084, XEP-0153). A subscription request is a bar atop the contact's chat ("This contact would like to add you to their contact list", Accept / Deny); Accept also asks back (prosody REPL: roster ended both). The avatar is set in Preferences › Accounts › the account: a pencil opens "Select avatar" (a GTK chooser, Ctrl+L path), and with an avatar set a trash appears beside the pencil, so the pencil's place depends on the state: the set tries the left spot first, the removal escapes a chooser it opened by mistake. Checked in a REPL: set, set again, remove, remove again (no-op); each publish reached the log. Assisted-by: Claude:opus-5-5The resumption case: net_reset() aborts aim's TCP and its link stays down 348 s, past the 300 s resume max. Back online the server refuses the resume ("Previous session timed out"), aim opens a new session and fetches Gajim's two lines from MAM, shown at their send time. Assisted-by: Claude:opus-5-5Batch 4 needs these from Kaidan 0.16 (RFC 6121, XEP-0153, XEP-0054). A request is a bar over the composer of the contact's chat ("would like to receive your personal data", Refuse / Allow, white on grey); Allow sends only <subscribed/>, so request_presence (a new action, Gajim's existing _request_presence_gajim fits it) asks back from Contact Details › Privacy › "Request personal data". profile.py's re-add uses request_presence where the peer has it instead of add_contact, whose Kaidan dialog hangs for a contact in the roster. Kaidan keeps its picture and name in vcard-temp: Account Details' avatar opens "Change profile image" (Open image…, a Qt dialog; Save selection; Remove current profile image), Profile › Name edits FN with a ✓. Checked in a prosody REPL: approve + request_presence ended both, the avatar set twice and removed (PHOTO gone from the vCard), FN set and cleared. Assisted-by: Claude:opus-5-5Dino 0.5.1 shows a pending subscription inside the chat ("This contact would like to add you to their contact list": Accept / Deny) and, when it gets no presence, "You do not receive status updates from this contact yet." with "Send request" (subscription_notification.vala at v0.5.1). approve() presses Accept, add_contact() the Send request of an existing chat (profile.py's ask-back). Its Accept also asks back. set_avatar(): Preferences (Ctrl+comma) > Accounts > the account; with no picture the letter tile has one pencil at (687,319), with one a light button pair, pencil (652,319) and trash (687,319): the pixel at (645,319) tells which. set_avatar(None) presses the trash, which deletes the urn:xmpp:avatar:metadata node (Dino's own tile keeps the picture until restart). Tried in a REPL on ejabberd: aim removed and re-added vm-dino, Dino accepted and asked back, aim approved, the push ended in subscription both; Dino published bars, then a gradient, then deleted the node. Assisted-by: Claude:opus-5-5Both advertise their vcard-temp❌update photo hash once a picture is set and fetch the other's vCard PHOTO on the new hash; each shows the other's picture. C12 is not exercised (no avatar at sign-in). Assisted-by: Claude:opus-5-5aim and web each send <idle/> when minimized and clear it when back; web shows aim's device "was seen 1 minute ago". aim's display of an idle stamp is the Gajim run's ("Last seen 6 minutes ago"). Assisted-by: Claude:opus-5-5With web as the peer the idle step restored web's window before aim's screenshots, so aim drew web as active again ("Last seen recently", anotherim-server run 142207) and the shot showed nothing of the idle stamp aim had received. web is restored after aim's shots now. Assisted-by: Claude:opus-5-5approve: Dino shows a subscription request as a bar in the contact's chat ("This contact would like to add you to their contact list", Accept / Deny); Accept approves and asks back (REPL on anotherim-server: subscribed and subscribe, then both). set_avatar: Preferences (Ctrl+comma, its own window) › the account row › the avatar's pencil, a GTK file chooser; with a picture set the pencil moves left of a trash, which deletes the urn:xmpp:avatar:metadata node. Its buttons take a hover and a slow press, like the details dialog's. Assisted-by: Claude:opus-5-5aim reads Kaidan's vcard-temp FN ("kaidan Mango"), but aim writes its own full name only as an XEP-0292 vCard4 item: Kaidan, which reads vcard-temp only, gets aim's card without a name (the server mirrors nothing). Gajim and web passed because they read vCard4. Assisted-by: Claude:opus-5-5PLAN's 0313 r case on ejabberd: net_reset() makes ejabberd see the stream die, the link stays down past the 300 s resume max while Gajim sends twice. aim's resume fails ("Previous session timed out"), and the new session's MAM query returns both lines with their original delay stamps; aim shows them at the times they were sent. Assisted-by: Claude:opus-5-5