diff options
author | fr33domlover <fr33domlover@riseup.net> | 2020-01-21 17:13:36 +0200 |
---|---|---|
committer | fr33domlover <fr33domlover@riseup.net> | 2020-01-21 17:13:36 +0200 |
commit | e5680215bee374c5726ebbcfd56d2969014df9ba (patch) | |
tree | a3da01bbe8f8e2780e28f9dcd083ddd36ab8a751 | |
parent | faa456bfef024f557613e60affb2c7070f0aad11 (diff) |
Define how to determine the ticket tracker for a given object
-rw-r--r-- | spec/behavior.md | 28 | ||||
-rw-r--r-- | spec/modeling.md | 29 | ||||
-rw-r--r-- | spec/vocabulary.md | 66 |
3 files changed, 108 insertions, 15 deletions
diff --git a/spec/behavior.md b/spec/behavior.md index bc21fb7..0a0c528 100644 --- a/spec/behavior.md +++ b/spec/behavior.md @@ -198,8 +198,28 @@ See [example in the modeling specification][model-push]. ## Opening a Ticket -There are two mechanisms for opening a [Ticket][type-ticket] under a ticket -tracking object: +The first step for opening a ticket is to determine to which actor to send the +ticket. We'll refer to this actor as the *ticket tracker*. Given an object +*obj* against which you'd like to open a ticket (e.g. some application's source +code repository), look at the [ticketsTrackedBy][prop-ticketstrackedby] +property of *obj*. + +- If `ticketsTrackedBy` isn't specified, then *obj* does't declare a way to + open tickets via ForgeFed. +- If `ticketsTrackedBy` is specified and is set to the [id][] of *obj* itself, + that means *obj* manages its own tickets, i.e. it is the *ticket tracker* to + which you'll send the ticket. +- If `ticketsTrackedBy` is specified and is set to some other object, look at + the [tracksTicketsFor][prop-tracksticketsfor] property of that other object. + If the [id][] of *obj* is listed there under `tracksTicketsFor`, then that + other object is the *ticket tracker* to which you'll send the ticket. + Implementations SHOULD verify this bidirectional reference between the object + and the tracker, and SHOULD NOT send a ticket if the bidirectional reference + isn't found. + +Now that we've determined the *ticket tracker*, i.e. the actor to whom we'll +send the [Ticket][type-ticket], there are two mechanisms for opening a new +[Ticket][type-ticket] under the *ticket tracker*: 1. The *creation* flow: The ticket author will be hosting the ticket. They provide the ticket tracker with the ticket's [id][] URI, and the ticket @@ -473,7 +493,9 @@ he submitted earlier against her Game Of Life simulation app repository: [type-repository]: /vocabulary.html#type-repository [type-ticket]: /vocabulary.html#type-ticket -[prop-team]: /vocabulary.html#prop-team +[prop-team]: /vocabulary.html#prop-team +[prop-ticketstrackedby]: /vocabulary.html#prop-ticketstrackedby +[prop-tracksticketsfor]: /vocabulary.html#prop-tracksticketsfor [model-comment]: /modeling.html#comment [model-push]: /modeling.html#push diff --git a/spec/modeling.md b/spec/modeling.md index e100864..6cbce2d 100644 --- a/spec/modeling.md +++ b/spec/modeling.md @@ -135,6 +135,9 @@ Properties: * [team][prop-team]: [Collection][] of actors who have management/push access to the repository, or the subset of them who is available and wants to be contacted/notified/responsible on repo access related activities/requests +* [ticketsTrackedBy][prop-ticketstrackedby]: The ticket tracker that tracks + tickets for this repository, this can be the repository itself if it manages + its own tickets Example: @@ -156,6 +159,7 @@ Example: "outbox": "https://dev.example/aviva/treesim/outbox", "followers": "https://dev.example/aviva/treesim/followers", "team": "https://dev.example/aviva/treesim/team", + "ticketsTrackedBy": "https://dev.example/aviva/treesim", "name": "Tree Growth 3D Simulation", "summary": "<p>Tree growth 3D simulator for my nature exploration game</p>" } @@ -350,18 +354,19 @@ Example: [type-repository]: /vocabulary.html#type-repository [type-ticket]: /vocabulary.html#type-ticket -[prop-committed]: /vocabulary.html#prop-committed -[prop-committedby]: /vocabulary.html#prop-committedby -[prop-description]: /vocabulary.html#prop-description -[prop-dependants]: /vocabulary.html#prop-dependants -[prop-dependencies]: /vocabulary.html#prop-dependencies -[prop-earlyitems]: /vocabulary.html#prop-earlyitems -[prop-hash]: /vocabulary.html#prop-hash -[prop-hashafter]: /vocabulary.html#prop-hashafter -[prop-hashbefore]: /vocabulary.html#prop-hashbefore -[prop-isresolved]: /vocabulary.html#prop-isresolved -[prop-ref]: /vocabulary.html#prop-ref -[prop-team]: /vocabulary.html#prop-team +[prop-committed]: /vocabulary.html#prop-committed +[prop-committedby]: /vocabulary.html#prop-committedby +[prop-description]: /vocabulary.html#prop-description +[prop-dependants]: /vocabulary.html#prop-dependants +[prop-dependencies]: /vocabulary.html#prop-dependencies +[prop-earlyitems]: /vocabulary.html#prop-earlyitems +[prop-hash]: /vocabulary.html#prop-hash +[prop-hashafter]: /vocabulary.html#prop-hashafter +[prop-hashbefore]: /vocabulary.html#prop-hashbefore +[prop-isresolved]: /vocabulary.html#prop-isresolved +[prop-ref]: /vocabulary.html#prop-ref +[prop-team]: /vocabulary.html#prop-team +[prop-ticketstrackedby]: /vocabulary.html#prop-ticketstrackedby [prop-created]: http://purl.org/dc/terms/created diff --git a/spec/vocabulary.md b/spec/vocabulary.md index a0dacb8..1413ad0 100644 --- a/spec/vocabulary.md +++ b/spec/vocabulary.md @@ -681,6 +681,72 @@ The repository's team *https://dev.example/aviva/treesim/team*: } ``` +## ticketsTrackedBy {#prop-ticketstrackedby} + +**URI:** `https://forgefed.peers.community/ns#ticketsTrackedBy` + +**Notes:** Identifies the actor which tracks tickets related to the given +object. This is the actor to whom you send tickets you'd like to open against +the object. + +**Domain:** [Object][] + +**Range:** [Object][] that is an actor + +**Functional:** Yes + +**Inverse of:** [tracksTicketsFor](#prop-tracksticketsfor) + +**Example:** + +```json +{ + "@context": [ + "https://www.w3.org/ns/activitystreams", + "https://forgefed.peers.community/ns" + ], + "id": "https://dev.example/aviva/treesim", + "type": "Repository", + "name": "Tree Growth 3D Simulation", + "summary": "<p>Tree growth 3D simulator for my nature exploration game</p>", + "ticketsTrackedBy": "https://bugs.example/projects/treesim" +} +``` + +## tracksTicketsFor {#prop-tracksticketsfor} + +**URI:** `https://forgefed.peers.community/ns#tracksTicketsFor` + +**Notes:** Identifies objects for which which this ticket tracker tracks +tickets. When you'd like to open a ticket against those objects, you can send +them to this tracker. + +**Domain:** [Object][] that is an actor + +**Range:** [Object][] + +**Functional:** No + +**Inverse of:** [ticketsTrackedBy](#prop-ticketstrackedby) + +**Example:** + +```json +{ + "@context": [ + "https://www.w3.org/ns/activitystreams", + "https://forgefed.peers.community/ns" + ], + "id": "https://bugs.example/treesim", + "type": "Project", + "tracksTicketsFor": [ + "https://dev.example/aviva/liblsystem", + "https://dev.example/aviva/3d-tree-models", + "https://dev.example/aviva/treesim" + ] +} +``` + [Activity]: https://www.w3.org/TR/activitystreams-vocabulary/#dfn-activity [Collection]: https://www.w3.org/TR/activitystreams-vocabulary/#dfn-collection [Link]: https://www.w3.org/TR/activitystreams-vocabulary/#dfn-link |