Added specification for storyboard story tags
This specification explains how story tags should be handled in StoryBoard. Change-Id: I66dcaa700e4a64d25b2c0a7e05fec9ff2e12f5d6 Story: 98
This commit is contained in:
parent
d5b3824759
commit
7434bdbc77
199
specs/storyboard_story_tags.rst
Normal file
199
specs/storyboard_story_tags.rst
Normal file
@ -0,0 +1,199 @@
|
|||||||
|
::
|
||||||
|
|
||||||
|
This work is licensed under a Creative Commons Attribution 3.0
|
||||||
|
Unported License.
|
||||||
|
http://creativecommons.org/licenses/by/3.0/legalcode
|
||||||
|
|
||||||
|
..
|
||||||
|
This template should be in ReSTructured text. Please do not delete
|
||||||
|
any of the sections in this template. If you have nothing to say
|
||||||
|
for a whole section, just write: "None". For help with syntax, see
|
||||||
|
http://sphinx-doc.org/rest.html To test out your formatting, see
|
||||||
|
http://www.tele3.cz/jbar/rest/rest.html
|
||||||
|
|
||||||
|
==========
|
||||||
|
Story Tags
|
||||||
|
==========
|
||||||
|
|
||||||
|
https://storyboard.openstack.org/#!/story/98
|
||||||
|
|
||||||
|
StoryBoard needs to support tagging to allow for free-form classification
|
||||||
|
of stories by its users. It will also allow to port current tag-driven
|
||||||
|
workflows from Launchpad to StoryBoard, facilitating the transition.
|
||||||
|
|
||||||
|
Problem description
|
||||||
|
===================
|
||||||
|
|
||||||
|
Definition
|
||||||
|
----------
|
||||||
|
In information systems, a tag is a non-hierarchical keyword or term assigned
|
||||||
|
to a piece of information. This kind of metadata helps describe an item and
|
||||||
|
allows it to be found again by browsing or searching.
|
||||||
|
|
||||||
|
It also lets teams implement basic team-specific workflows, where the presence
|
||||||
|
or absence of a tag is used to derive state (rather than endlessly overloading
|
||||||
|
the data model with team-specific fields).
|
||||||
|
|
||||||
|
Historical usage
|
||||||
|
----------------
|
||||||
|
In OpenStack, Launchpad bug tags are currently used to:
|
||||||
|
- classify the affected submodule or domain of expertise ("xen")
|
||||||
|
- identify bugs that could be fixed by new contributors ("low-hanging-fruit")
|
||||||
|
- trigger notifications for subset of bugs ("security")
|
||||||
|
- define sets of bugs used as part of the release process ("juno-rc-potential")
|
||||||
|
|
||||||
|
Convergence in the use of standard tags is encouraged in Launchpad by the
|
||||||
|
ability to define "official tags" that the UI suggests in type-ahead.
|
||||||
|
|
||||||
|
See the current "official tags" used by OpenStack at:
|
||||||
|
https://wiki.openstack.org/wiki/BugTags
|
||||||
|
|
||||||
|
Launchpad tags can be specified in search forms and subscription rules.
|
||||||
|
This lets users easily designate and retrieve subset of bugs in a reusable way.
|
||||||
|
|
||||||
|
Note that Launchpad blueprints notoriously do NOT support tags: this is seen
|
||||||
|
as a major feature gap (along with lack of comment, search...) supporting
|
||||||
|
the move to a new tool.
|
||||||
|
|
||||||
|
Proposed change
|
||||||
|
===============
|
||||||
|
|
||||||
|
We propose to let users associate tags to StoryBoard stories. Tags should be
|
||||||
|
supported as a search parameter (to retrieve stories associated with a given
|
||||||
|
tag). Users should be able to subscribe to tags (and get notified when tagged
|
||||||
|
stories are modified).
|
||||||
|
|
||||||
|
Tags should only contain lowercase alphanumeric characters, plus dash (-) and
|
||||||
|
underscore (_) characters. To encourage convergence, uppercase characters
|
||||||
|
should be automatically converted to lowercase on input. Their length is
|
||||||
|
limited to 30 characters.
|
||||||
|
|
||||||
|
In order to enable various use cases for tags, we propose three types of tags:
|
||||||
|
|
||||||
|
Free-form tags
|
||||||
|
--------------
|
||||||
|
Free-form tags are keywords that can be freely set (and unset) by any
|
||||||
|
authenticated user of StoryBoard. They may use any name they want, as long
|
||||||
|
as it respects the abovementioned syntax rules.
|
||||||
|
|
||||||
|
System tags
|
||||||
|
-----------
|
||||||
|
System tags are predefined keywords that we want to recommend usage of.
|
||||||
|
|
||||||
|
It is a feature needed to increase convergence in tag usage, and reduce
|
||||||
|
tag consolidation manual tasks. As an example, take a system tag called
|
||||||
|
"documentation", that would be used to signal a potential documentation impact.
|
||||||
|
The tag input field could use type-ahead to strongly suggest the correct
|
||||||
|
keyword when you start typing "doc..", hopefully reducing variants like "doc",
|
||||||
|
"docs", "documentations", etc.
|
||||||
|
|
||||||
|
System tags should come with a description of their intended usage, which
|
||||||
|
should be accessible as part of the StoryBoard interface.
|
||||||
|
|
||||||
|
System tags can be freely set (and unset) by any authenticated user of
|
||||||
|
StoryBoard. They shall be defined by superusers using a specific admin UI.
|
||||||
|
|
||||||
|
Protected tags
|
||||||
|
--------------
|
||||||
|
Protected tags are keywords that would be reserved for use by a specific group.
|
||||||
|
Members of the protected tag owner group should be the only ones to be able to
|
||||||
|
set or unset the tag. For example, the release managers team could use a
|
||||||
|
protected "juno-ffe" tag to track that a Juno feature freeze exception was
|
||||||
|
granted to the corresponding story, and easily build lists of open feature
|
||||||
|
freeze exceptions.
|
||||||
|
|
||||||
|
Since tags are applied at story-level, any project-specific protected tag
|
||||||
|
should be project-specific itself. For example if Nova drivers want to track
|
||||||
|
that the spec for a given story has been approved, they could use a
|
||||||
|
"nova-approved" protected tag to that effect. Since the owner groups are
|
||||||
|
distinct, an equivalent tag for Cinder drivers would have to be distinct (and
|
||||||
|
for example be called "cinder-approved").
|
||||||
|
|
||||||
|
Protected tags should come with a description of their intended usage and owner
|
||||||
|
group, and you should be able to access that information as part of the
|
||||||
|
StoryBoard interface. Protected tags shall be defined by superusers using a
|
||||||
|
specific admin UI.
|
||||||
|
|
||||||
|
NB: Protected tags are a new feature: they are not needed for Launchpad feature
|
||||||
|
parity. However, they are a convenient way to implement a number of workflows
|
||||||
|
in StoryBoard that would otherwise need to be hardcoded. Given the very
|
||||||
|
dynamic nature of OpenStack development, it's easier to give users concepts
|
||||||
|
that they can build experimental workflows with than to require code changes
|
||||||
|
or configuration changes to let them implement them.
|
||||||
|
|
||||||
|
Alternatives
|
||||||
|
------------
|
||||||
|
The "tag" concept could be extended to other citizens of StoryBoard, like tasks
|
||||||
|
or projects.
|
||||||
|
|
||||||
|
I think allowing tags to be applied to tasks would confuse the UI a lot and
|
||||||
|
result in non-intuitive behavior (do new tasks inherit other tasks
|
||||||
|
tags ?). The experience from Launchpad usage (where the tag is applied to the
|
||||||
|
bug rather than on the task) shows that tags apply to most tasks anyway, and
|
||||||
|
humans can read that information in a smart way. The value of this additional
|
||||||
|
granularity in information is limited, while the cost in extra data entry and
|
||||||
|
UI overcrowding is high.
|
||||||
|
|
||||||
|
Project tags could make sense to designate informal groups of projects.
|
||||||
|
However we already implement projectgroups, which should ideally be cheap to
|
||||||
|
create and therefore cover that use case.
|
||||||
|
|
||||||
|
Implementation
|
||||||
|
==============
|
||||||
|
|
||||||
|
Implementation details should be left to the person that would do the
|
||||||
|
implementation work. What follows is just a suggestion.
|
||||||
|
|
||||||
|
Each type of tag should be quickly identifiable. The proposed implementation
|
||||||
|
would represent them with different background colors:
|
||||||
|
|
||||||
|
* Free-form tags would be represented with a neutral background (grey color)
|
||||||
|
* System tags would be represented with a cold color (blue/green color)
|
||||||
|
* Protected tags would be represented with a hot color (red/yellow color)
|
||||||
|
|
||||||
|
Assignee(s)
|
||||||
|
-----------
|
||||||
|
Primary Assignee:
|
||||||
|
TBD
|
||||||
|
|
||||||
|
Work Items
|
||||||
|
----------
|
||||||
|
* Create an API to define system tags and protected tags
|
||||||
|
* Create an API to associate tags to stories
|
||||||
|
* Add tag data in story details API responses
|
||||||
|
* Teach the storyboard-webclient to use those new APIs
|
||||||
|
|
||||||
|
Repositories
|
||||||
|
------------
|
||||||
|
No new repositories.
|
||||||
|
|
||||||
|
Servers
|
||||||
|
-------
|
||||||
|
No new servers.
|
||||||
|
|
||||||
|
DNS Entries
|
||||||
|
-----------
|
||||||
|
No new DNS entries.
|
||||||
|
|
||||||
|
Documentation
|
||||||
|
-------------
|
||||||
|
TBD
|
||||||
|
|
||||||
|
Security
|
||||||
|
--------
|
||||||
|
Free-form and system tags may be set and unset by any authenticated user.
|
||||||
|
They may therefore be used for spamming (set), or info destruction (unset).
|
||||||
|
However this is not different from any other potentially more lucrative fields
|
||||||
|
(like title or description). The benefit of letting anyone authenticated
|
||||||
|
edit data in a task/bug tracker generally outweighs those drawbacks, which are
|
||||||
|
not specific to tags.
|
||||||
|
|
||||||
|
Testing
|
||||||
|
-------
|
||||||
|
TBD
|
||||||
|
|
||||||
|
Dependencies
|
||||||
|
============
|
||||||
|
|
||||||
|
Protected tags will need "StoryBoard Teams API and management spec" to be
|
||||||
|
approved and implemented first (specs/storyboard_teams.rst).
|
Loading…
x
Reference in New Issue
Block a user