I see three possible dispositions for this:
1. Do nothing
2. Say that the server is allowed to add a user property to a forwarded message. We should need to talk about the server being allowed to modify such a property when forwarding.
3. Define a property on the PUBLISH which represents a timestamp, and say the the server is allowed to add or modify this property when the message is forwarded.
If we go with solution 3, we need to further define the type and semantics of the timestamp. I will throw out three suggestions for this:
1. Define an Eight byte integer as the type, and the value as milliseconds into the Unix epoch (1970-01-01T00Z ignoring leap seconds). This is the Java tiemstamp. Alternately, a resolution of microseconds or nanoseconds could be used.
2. Define the value as a string in ISO8601 format and require that it start with the year. The resolution could be arbitrary as the decimal places after the seconds. The time zone could be specified or default to UTC.
3. Two Four byte integers, the first representing seconds into the Unix epoch, and the second nanoseconts beyond that second. This is pure Unix time format.
Presumably the issue is that the device does not itself have a clock, or it could just put this information into the payload or a user property.
There are many messaging protocols where the server adds a timestamp to the message.. This is useful for many cases other than retained messages.
However, in order to get any reasonable amount of interoperability we would need to define a property for this, and also define the format, epoch, and resolution of the timestamp.