1
0
mirror of https://codeberg.org/fediverse/fep.git synced 2026-08-05 19:55:46 +00:00

Update FEP-82f6 (#601)

I'm clarifying some things and adding an example status object.

Co-authored-by: Grishka <git@grishka.me>
Reviewed-on: https://codeberg.org/fediverse/fep/pulls/601
Co-authored-by: grishka <grishka@noreply.codeberg.org>
Co-committed-by: grishka <grishka@noreply.codeberg.org>
This commit is contained in:
grishka
2025-05-16 09:41:14 +00:00
committed by silverpill
parent 2df06c5840
commit e951ded9ad
+28 -6
View File
@@ -21,8 +21,9 @@ The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL
## Representation of statuses
A status object is of type `sm:ActorStatus`, which extends the ActivityPub `Object`. It has the following fields:
A status object is of type `ActorStatus`, which extends the ActivityPub `Object`. It has the following fields:
- `attributedTo`: the ID of the actor whose status this is. REQUIRED.
- `content`: the plain text content of the status. REQUIRED.
- `published`: the timestamp when this status update was created. REQUIRED.
- `id`: a unique identifier for this status update. REQUIRED.
@@ -33,22 +34,24 @@ A status object is of type `sm:ActorStatus`, which extends the ActivityPub `Obje
The following two OPTIONAL fields are added to actors:
- `sm:status`: the last, or current, status update of this actor. SHOULD NOT be present if the last status has expired. SHOULD contain an inlined `sm:ActorStatus`.
- `sm:statusHistory`: a collection of all past status updates of this actor. If present, implementations MAY provide a UI to view this actor's status history. If absent, implementations SHOULD NOT store this actor's past status updates and MUST NOT expose them in the UI.
- `status`: the last, or current, status update of this actor. MUST NOT be present if the last status has expired. MUST contain an inlined `ActorStatus`.
- `statusHistory`: a collection of all past status updates of this actor. If present, implementations MAY provide a UI to view this actor's status history. If absent, implementations SHOULD NOT store this actor's past status updates and MUST NOT expose them in the UI.
## Activities
### Creating a status update
A status update is created by sending a `Create{sm:ActorStatus}` activity to followers. Upon receiving this activity, an implementation updates the actor's latest status, and, if it has the `sm:statusHistory` collection, adds it to the history. After sending this activity, the `sm:status` field of the actor object MUST be updated with this new status. An `Update{Actor}` MUST NOT be sent because the `Create` already implicitly updates that field in the copies of this actor stored on remote servers.
A status update is created by sending a `Create{ActorStatus}` activity to followers. Upon receiving this activity, an implementation updates the actor's latest status, and, if it has the `statusHistory` collection, adds it to the history. After sending this activity, the `status` field of the actor object MUST be updated with this new status. An `Update{Actor}` MUST NOT be sent because the `Create` already implicitly updates that field in the copies of this actor stored on remote servers.
If the actor does not have a `statusHistory`, the previous status is considered no longer existing, as if it was `Delete`d.
### Clearing the status
The latest status is cleared by sending a `Remove{sm:ActorStatus}` activity to followers. Upon receiving this activity, if the ID of the `object` matches the actor's current status, an implementation removes the actor's current status. If the actor has the `sm:statusHistory` collection, it keeps it there. Same considerations for `sm:status` apply here.
The latest status is cleared by sending a `Remove{ActorStatus}` activity to followers. Upon receiving this activity, if the ID of the `object` matches the actor's current status, an implementation removes the actor's current status. If the actor has the `statusHistory` collection, it keeps it there. Same considerations for `status` apply here.
### Deleting the status
A status is completely deleted by sending a `Delete{sm:ActorStatus}` activity to followers. If the actor has the `sm:statusHistory` collection, the status is removed from there as well as being cleared from the profile. Otherwise, this is activity is identical to `Remove`.
A status is completely deleted by sending a `Delete{ActorStatus}` activity to followers. If the actor has the `statusHistory` collection, the status is removed from there as well as being cleared from the profile. Otherwise, this is activity is identical to `Remove`.
### Other activities in relation to statuses
@@ -97,6 +100,25 @@ Updating one's status, with the ability to set it to expire:
UI with history, similar to early Facebook:
![](history-ui.svg)
## Example status object
```json
{
"type": "ActorStatus",
"id": "https://example.social/users/1/statuses/1747286633",
"attributedTo": "https://example.social/users/1",
"content": "is desperately trying to bring the old internet back",
"published": "2025-05-15T05:23:53.539Z",
"@context": [
"https://www.w3.org/ns/activitystreams",
{
"sm": "http://smithereen.software/ns#",
"ActorStatus": "sm:ActorStatus"
}
]
}
```
## References
- Christine Lemmer-Webber, Jessica Tallon, Erin Shepherd, Amy Guy, Evan Prodromou, [ActivityPub], 2018