-
Notifications
You must be signed in to change notification settings - Fork 1
Task Tracker: alexs' version
I was a bit confused as to what the UX implications of Mark's design were so I've written down how I think it should work.
-
Creating new comments and changes to tasks without depending on any specific people being online to share those changes with other users. No c
-
Access control, in particular...
- Who should be told about updates?
- Who should be able to comment?
- Who should be able to change the main task content?
- Who should be able to change the lists of people?
Tasks should be based around append only logs.
The dependency structure should point upwards. i.e. only parents are tracked.
Modifications should be copy-on-write, creating entirely new nodes in the graph of comments/task versions etc.
Users should be able to validly share comments on tasks without relying on any single party for signing or distribution.
Publishers of new Task versions and Comments will send out the new data to users they think are interested.
When receiving data users will validate the signatures based on data in previous task versions and other sources.
There is scope for multiple Tasks to be received with the same previous_version_id. I'm not sure how we want to approach resolving these collisions. Ideas? Just take the one with the lowest ctime? Lowest signature? Lowest content hash?
##Proposed Data Structures
class Task
{
// unique task identifier that stays constant across versions
std::string id;
// task id specific to this version
std::string version_id;
// who's allowed to modify the task body?
Retroshare::UserGroupList next_content_signers;
// who's signatures should accept into the comment thread?
RetroShare::UserGroupList comment_signers;
// who's expressed interest in this task?
RetroShare::UserGroupList cc_list;
// who's allowed to modified all these user lists?
RetroShare::UserGroupList admin_list;
// what's this task based on?
std::string previous_version_id;
// the actual task body
TaskContent content;
// signature of everything else. this must be signed by someone indicated in the previous version
std::string signature;
}
class TaskContent {
// free text description of the task
std::wstring task_description;
// id of some tasks that this one relates to
std::list<std::string> needed_for;
// who's currently working on it?
std::string assigned_to;
// when this version was created
struct timespec ctime;
// when this task is meant to be done by
struct timespec deadline;
// when we think we'll have it done by
struct timespec expected_completion;
// amount_done/UINT_MAX = fraction complete
uint32_t amount_done;
}
// is this needed? can we re-use forums for this? do want to even if we can?
class TaskComment {
std::string mime_type; // e.g. text/plain;charset=UTF-8
std::string body;
struct timespec ctime;
std::string parent_comment_id; // for threading
std::string task_id; // doesn't *have* to match parent_comment's
std::string author_signature;
}