-
Notifications
You must be signed in to change notification settings - Fork 1
Task Tracker: alexs' version
I have no idea what's going on with the grammar in the page name. Curse you GitHub.
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 sign the next version of this task?
Retroshare::UserGroupList next_content_signers;
// who's signatures should accept into the comment thread?
RetroShare::UserGroupList comment_signers;
// 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 the task that depends on this
std::string parent_task_id;
// 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;
// 0-UINT_MAX field to represent 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;
}