diff --git a/fep/82f6/fep-82f6.md b/fep/82f6/fep-82f6.md index c33dd13..d50324c 100644 --- a/fep/82f6/fep-82f6.md +++ b/fep/82f6/fep-82f6.md @@ -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