The trigger

Greeted once, and only if you are new

An allow-list over arrivals, so a first boot cannot greet everybody who was already there.

Who is greeted

Only someone who joined after the bot, or whom the bot invited, is greeted. Anything the arrival category does not positively name is refused, which is what stops a first boot greeting nine hundred people who have been in the room for a year.

The greeting is planned and sent inside the arrival event, with no queue and no delay, and the settings are read at that moment, so an edit takes effect at the very next join.

QuestionAnswer
The trigger The member-arrival events, gated by an allow-list over the arrival category: only someone who joined after the bot, or whom this bot invited, is greeted, and anything unknown is refused. Members who predate the bot are never greeted
Timing Immediate: planned and sent inside the arrival event, with no queue and no delay, and the settings are read at that moment, so an edit takes effect at the next join
Two bots, one person They cannot both greet. The greeted-record is keyed on the member wire id, which SimpleX issues identically to every bot in the room, so two bots race for one row and only the winner sends. A bot that cannot greet does not enter the race
The record One row per member per room, forever. A failed send keeps the claim, and no operator reset exists
Copy There is no shipped greeting text at all: it is entirely operator-authored, and the default of empty means silence. The member and group names are filled by the application in one non-recursive pass, and the model neither writes nor sees the greeting
Two bots, one person

They race, and one row settles it

Two bots in a room both see the arrival. The record decides which of them speaks.

Why it is a race at all

Two bots in one room both see the arrival, and they cannot both greet. The record is keyed on the member's wire identity, which the network issues identically to every bot present, so the two race for one row and only the winner speaks.

Why there is no reset 1 lines · 115 characters
That you were greeted once, so you are not greeted twice. Deleting it would make her greet you again as a stranger.
Source site material Block 4 section 6 · the Welcome plugin
The words

Nothing shipped, and nothing written by her

The greeting is the operator's text or there is no greeting. The model neither writes it nor sees it.

Empty means silence

There is no shipped greeting text at all. The default is empty, and empty means silence: a bot with nothing written says nothing rather than falling back to something friendly. The member and group names are filled in by the application, in one pass that cannot recurse.

The console hint above the box 1 lines · 71 characters
She does not write this and never sees it: the words are yours exactly.
Source site material Block 4 section 6 · the Welcome plugin
When it does not happen

Three outcomes, kept apart

A member simply gets no greeting. Which of the three reasons it was matters to the operator, and only one is a fault.

The private route

The private route has three outcomes and they are kept apart: no contact, a group that forbids direct messages, and a real send fault. Only the fault raises an alert. A real send failure is never quietly converted into a greeting in the group, because a message the operator meant to be private is not something to reroute in public.

The row that explained it 1 lines · 36 characters
route: suppressed · reason: disabled
Source site material Block 4 section 6 · the Welcome plugin

What the first live test cost

On the first live test three members joined, both bots saw every arrival, and no greeting came. One row explained it: the bot without a greeting had taken the exclusive claim first, recorded that it was disabled, and sent nothing; the bot that had words then lost the race and returned silently. A bot that cannot greet no longer enters the race, and those members stay permanently claimed.