Distributed issues / tickets possible via AP?

I very much like the idea of distributed issue tracking for more than just collaboration on code.

move tickets between instances
move users / groups between instances

This feature is sometimes called “nomadic identity”. Unfortunately it is not provided by the ActivityPub protocol. It is very much requested (see discussions at APConf).

Other than that I think it would be feasible to implement a issue tracking system on-top of ActivityPub. I believe the only thing needed is a vocabulary that specifie the issue tracking procedure.

There has been some work to define such a vocabulary (Linked Open Vocabularies is a great resource for discovering such vocabularies):

If we have such a vocabulary it could be used as such:

Create a new issue

Instead of creating a “Note” or any object type defined by ActivityStreams Alice creates an Issue as defined in the fictive “Fediverse Issue Vocabulary”.

{
  "@context": [
      "https://www.w3.org/ns/activitystreams",
      { "fiv": "https://example.com/fediverse-issue-vocabulary" }
    ],
  "type": "Create",
  "id": "https://social.example/activities/1",
  "to": ["https://chatty.example/ben",  "https://www.w3.org/ns/activitystreams#Public"],
  "actor": "https://social.example/actors/alice",
  "object": {
      "type": "fiv:Issue",
      "id": "https://social.example/issues/1",
      "fiv:title": "Bird house needs to be refilled",
      "fiv:description": "It's winter and the birds are eating a lot of grains from the bird house. Please rifll",
    }
}

Note that the issue is addressed to the public and to Ben explicitly (maybe because Ben is somehow responsible for the bird house).

Note

Comment on the issue (discussion)

Charlie asks a question about the issue:

{
  "@context": [
      "https://www.w3.org/ns/activitystreams",
      { "fiv": "https://example.com/fediverse-issue-vocabulary"      }
    ],
  "type": "Create",
  "id": "https://another-instance.com/activities/2",
  "to": ["https://www.w3.org/ns/activitystreams#Public"],
  "actor": "https://another-instance.com/actors/charlie",
  "object": {
      "type": "Note",
      "id": "https://another-instance.com/objects/1",
      "context": "https://social.example/issues/1",
      "content": "What seeds do the birds like?",
    }
}

This is just a ActivityStreams Note. The context was set to the id of the issue created by Alice.

Alice can reply with another Note:

{
  "@context": [
      "https://www.w3.org/ns/activitystreams",
      { "fiv": "https://example.com/fediverse-issue-vocabulary"      }
    ],
  "type": "Create",
  "id": "https://social.example/activities/3",
  "to": ["https://another-instance.com/actors/charlie",  "https://www.w3.org/ns/activitystreams#Public"],
  "actor": "https://social.example/actors/alice",
  "object": {
      "type": "Note",
      "id": "https://social.example/objects/4",
      "inReplyTo": "https://another-instance.com/objects/1",
      "context": "https://social.example/issues/1",
      "content": "Sunflower seeds"
    }
}

Resolve issue

Ben can change the status of the issue by creating a “StatusChange” object:

{
  "@context": [
      "https://www.w3.org/ns/activitystreams",
      { "fiv": "https://example.com/fediverse-issue-vocabulary" }
    ],
  "type": "Create",
  "id": "https://chatty.example/activities/13",
  "to": ["https://social.example/actors/alice",  "https://www.w3.org/ns/activitystreams#Public"],
  "actor": "https://chatty.example/actors/ben",
  "object": {
      "type": "fiv:StatusChange",
      "fiv:status": "fiv:Resolved",
      "context": "https://social.example/issues/1",
      "fiv:description": "Refilled bird house with sunflower seeds.",
    }
}

Note that three actors from different servers interacted on this issue. Also individual comments and the issue itself are hosted on different servers.

It would probably make sense that one server collects the issue and related object, caches them and offers the servers view of the affairs (including moderation on who is allowed to comment on the issue or who is allowed to resolve the issue.

I believe the main effort we need to collaborate on is to agree on a vocabulary for talking about issues and I would be very happy to continue discussion and work on this.

3 Likes