diff --git a/FEDERATION.md b/FEDERATION.md index e4197d4..935940a 100644 --- a/FEDERATION.md +++ b/FEDERATION.md @@ -842,6 +842,72 @@ TODO: #### (4) Tickets +While comments are published and hosted by the actors who write them, a +project's tickets are hosted by the project. Actors may still host their +original copy of a ticket. I suppose in general we could allow tickets to be +published first, and then offered in a separate activity, and we could allow +projects to list tickets hosted on other servers. TODO discuss these two +things. In Vervis, at the time of writing, a ticket is offered without a prior +publishing activity, and projects all host their tickets. + +A ticket is published using an Offer activity. The author actor may address the +project's followers, but the server may decide not to deliver to them (or +perhaps deliver to them only if the ticket is accepted). In Vervis, project +followers get delivered to. Also in Vervis, a ticket's deps and rdeps can only +be tickets under the same project, but this restriction will hopefully be +relaxed in the future. + +The Offer activity looks more-or-less like this: + +`GET /aviva/activities/c8lrd0` + +```json +{ "@context": + [ "https://www.w3.org/ns/activitystreams" + , { "forge": "https://forgefed.peers.community/ns#" + , "Ticket": "forge:Ticket" + , "isResolved": "forge:isResolved" + , "dependsOn": + { "@id": "forge:dependsOn" + , "@type": "@id" + } + } + ] +, "id": "https://https://poetry.space/aviva/activities/c8lrd0" +, "type": "Offer" +, "to": + [ https://poetry.space/aviva/followers + , https://dev.federated.coop/luke/text-adventure + , https://dev.federated.coop/luke/text-adventure/team + , https://dev.federated.coop/luke/text-adventure/followers + ] +, "summary": "
Aviva offered a ticket to project text-adventure.
" +, "target": "https://dev.federated.coop/luke/text-adventure" +, "object": + { "type": "Ticket" + , "attributedTo": "https://poetry.space/aviva" + , "published": "2019-02-17T11:31:33Z" + , "summary": "Game crashes when tasting the coconut cream
" + , "content": "..." + , "mediaType": "text/html" + , "source": + { "content": "..." + , "mediaType": "text/markdown" + } + , "isResolved": false + , "dependsOn": + [ "https://dev.federated.coop/luke/text-adventure/issues/106" + , "https://dev.community/jerry/text-game-engine/issues/1219" + ] + } +} +``` + +If the ticket is accepted (which may happen automatically or manually, in +Vervis currently always happens automatically), the project's server gives it +an ID and hosts a copy in the project's ticket tracker. The Ticket object may +look like this: + `GET /luke/text-adventure/issues/113` ```json @@ -884,7 +950,7 @@ TODO: , "updated": "2019-06-01T12:30:36Z" , "context": "https://dev.federated.coop/luke/text-adventure" , "name": "#113" -, "summary": "Game crashes when tasting the coconut cream" +, "summary": "Game crashes when tasting the coconut cream
" , "content": "..." , "mediaType": "text/html" , "source": @@ -892,7 +958,8 @@ TODO: , "mediaType": "text/markdown" } , "replies": - [ ... + [ https://dev.federated.coop/users/luke/posts/vr7mnt9 + , https://dev.community/jerry/outbox/n3y0rk ] , "assignedTo": "https://dev.community/jerry" , "isResolved": false @@ -904,19 +971,18 @@ TODO: ] , "dependedBy": "https://dev.federated.coop/luke/text-adventure/issues/87" , "history": - [ ... + [ "https://https://poetry.space/aviva/activities/c8lrd0" + , "https://dev.federated.coop/luke/text-adventure/outbox/b3r1shv4" ] } ``` -TODO list actual examples under the "history" property (proposal B.7) +TODO turn replies and history into URIS pointing to separate Collections TODO replies and depends (ForgeFed #12) TODO content/source and media types (ForgeFed #11) -TODO Offer activity - #### (5) Patches #### (6) Merge requests