StoryBoard: Worklists and Boards

Spec for worklists and boards for managing tasks in StoryBoard.

Change-Id: I7b58ebb6cd70c442eacdb3acced6ebe3b70f564e
This commit is contained in:
Adam Coldrick 2015-07-17 12:43:29 +01:00
parent 94f510cab4
commit f7be4caeb6
2 changed files with 239 additions and 0 deletions

View File

@ -54,6 +54,7 @@ permits.
specs/storyboard_story_tags
specs/storyboard_subscription_pub_sub
specs/storyboard_task_branches
specs/storyboard_worklists_boards
specs/translation_check_site
specs/zuul_split
specs/zuulv3

View File

@ -0,0 +1,238 @@
::
Copyright 2015 Codethink Limited.
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
===============================
StoryBoard Worklists and Boards
===============================
https://storyboard.openstack.org/#!/story/2000322
StoryBoard's current model for priority has each task have a discrete
priority value. However, that isn't ideal as everyone has different
priorities for things and there is no way to represent that in the
current model. Instead we want to allow users to create worklists,
which they can then use to create prioritised lists relevant to
themselves.
Problem Description
===================
A developer, a PTL, and the community as a whole may all have different
opinions on the priority of tasks or stories in StoryBoard. Currently, a
task can only have a single discrete priority, which could lead to issues
if people's priorities come into conflict.
Using "worklists" - lists of tasks and/or stories - allows for complex
prioritisation of work and also allows each user to have their own view
or prioritisation. There is even the possibility of each user having
multiple worklists to represent prioritisation from the various viewpoints
they may need to consider.
Worklists could also be used to create a kanban-like interface. These
boards would allow for a linear kanban workflow for managing the flow of
work in a team for example.
Proposed Change
===============
Boards
------
A board is a set of worklists, with the added constraint that no task or
story may be in more than one of the worklists. If the user tries to add
a story or task to a worklist in the board which is already in a different
worklist, the attempt should be unsuccessful. In a board, the worklists
represent the lanes in a kanban board. Boards can be public or private to
the people with appropriate permissions to see it. Boards can optionally
be related to projects.
Worklists
---------
A worklist is an arbitrary list of tasks and stories for which order may or
may not have meaning. Worklists can be public or private to the people with
appropriate permissions to see the worklist. Each story or task can be in
any number of worklists. Worklists can optionally be related to projects.
Automatic Worklists
-------------------
Some people may find it useful to have a worklist containing only items which
meet some criteria, for example a worklist containing all tasks related to a
project with status "review". Keeping such a worklist manually updated would
be difficult and time consuming, so it should be possible to create a worklist
which automatically updates its contents.
Implementation
==============
Database
--------
A new table called ``worklists`` would be created with the following columns:
* title
* creator_id
* project_id
* created_at
* updated_at
* private (boolean, default to False)
* archived (boolean, default to False)
* automatic (boolean, default to False)
* permission_id
A new table called ``worklist_criteria`` would be created. This table would be
used to implement automatic worklists, and would have the following columns:
* list_id
* item_type (either ``story`` or ``task``)
* field
* value
* title
A new table called ``worklist_items`` would be created with the following
columns:
* item_id
* item_type (either ``story`` or ``task``)
* list_id
* list_position
A new table called ``boards`` would be created with the following columns:
* title
* description
* creator_id
* project_id
* created_at
* updated_at
* private (boolean, default to False)
* archived (boolean, default to False)
* permission_id
A new table called ``board_worklists`` would be created with the following
columns:
* board_id
* list_id
* position
UI Behaviour
------------
When the user creates a worklist, they will be able to choose whether it
is public or private to people with permissions. If it is public, it will
still only be editable by people with adequate permissions. The user will
also be able to define a group of people who have edit permissions on the
list. Tasks and stories will also be able to be added to the list both at
the time of creation and at any point in the future. An existing list will
have the option of being "archived", as opposed to being deleted.
Whether or not a worklist is "automatic" is also selected when creating
the list. Criteria for the contents of an automatic list are chosen here.
If an existing list is converted to an automatic list, the existing
contents are removed from the list. Automatic lists cannot be re-ordered.
When the user creates a board, they will be able to select whether it is
public or private in a similar way to worklists. The user will also be
able to create worklists to be the lanes of the board. These worklists
will be given the same ACL as the board. Tasks and stories can be added
to these lists at this time, but a task or story cannot appear more than
once in the board. After creation, the worklists function like normal
worklists, with the ability to drag tasks or stories between them. If
the whole board gets archived, all the worklists that make it up are
archived too.
The user cannot add existing worklists to a board, to avoid unexpected
changes happening to a worklist used elsewhere due to the board changing,
or unexpected changes occurring in the board due to a worklist used
elsewhere changing. It should be possible to set up an automatic worklist
to "mirror" an existing worklist if that behaviour is desired.
API
---
Two new API endpoints will be created, ``/v1/boards`` and ``/v1/worklists``.
These new endpoints will support basic CRUD operations to allow management
of worklists and boards.
Assignee(s)
-----------
Primary assignee:
adam-coldrick (Adam Coldrick)
Gerrit Topic
------------
Use Gerrit topic "worklists" for all patches related to this spec.
.. code-block:: bash
git-review -t worklists
Work Items
----------
* Add new tables to the database model, and write a migration.
* boards, worklists and some mapping tables
* Implement REST API for boards and worklists.
* Implement board and worklist functionality in the webclient.
Repositories
------------
No new repositories.
Servers
-------
No new servers.
DNS Entries
-----------
No new DNS entries
Documentation
-------------
Storyboard's API documentation will need updating with the new
endpoints.
Documentation to aid in the usage of worklists and boards should
be created.
Security
--------
It is important to ensure that 'private' worklists and boards can
only be accessed by the people in the ACL. It is also important to
ensure that worklists which are used in boards have the same ACL
as the board. Care will also need to be taken to ensure that
information about the contents of private worklists and boards
doesn't leak onto any other pages.
Testing
-------
The existing unit tests for StoryBoard will need to be extended to
cover the new API endpoints and database tables.
Dependencies
============
This work doesn't depend on any other work.