├── License.md └── README.md /License.md: -------------------------------------------------------------------------------- 1 | Copyright (c) 2016 Madhu Geejagaru Balakrishna 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 4 | 5 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 6 | 7 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Global-Task-Exchange-Protocol 2 | --- 3 | 4 | Task management systems are invariably creating one of many data silos. If we take an example of email, it reflected the real life behaviour of `postcard` and made it available to everyone. Calendar protocol reflected the real life invitations to events. But for tasks we are still dependent on Emails, Calendars, or some task management softwares. 5 | 6 | Now these task management solutions work beautifully inside a wall. It fails when the task is shared between 2 different entities. 7 | 8 | So, What if anyone is able to assign a task to anyone else, just like an e-mail system. 9 | 10 | 11 | ##Proposal 12 | --- 13 | 14 | Here is what I am proposing. Every domain gets set of TXT records (Thanks to [epaulson](https://news.ycombinator.com/user?id=epaulson)). which indicates the server where the tasks are stored, and bunch of other settings. 15 | 16 | The hierarchy looks like this. 17 | 18 | Domain 19 | 20 | User 21 | 22 | Project 23 | 24 | Task 25 | 26 | 27 | *Task* is owned by a Project. *Project* belongs to a User. *User* is a member of Domain. 28 | 29 | ###Domains 30 | 31 | - Domain is identified by Canonical Names of the hosted server. 32 | - For example `example.com`, `tasks.example.com` 33 | 34 | ###Projects 35 | 36 | - A project is like a folder to keep set of tasks. 37 | - Project is identified by an id and name 38 | - Project id is `@`. 39 | - It exists somewhere in 40 | `/var/spool/tasks///projects///` 41 | 42 | ###Tasks 43 | 44 | - Tasks are documents containing information and history of the work 45 | - A task must belong to a project. 46 | - ID of the task must be globally unique and it should end with project id `-@` 47 | 48 | ###Members 49 | 50 | - Users identified by Email address 51 | - Every member has a role [CREATOR, OWNER, GUEST etc ] 52 | - Every member can have a default project by their email address (which will be unique of course) which acts as a personal todo. 53 | 54 | 55 | 56 | The system is not truly distributed. Even though every member will have a copy of it (depending on scope and role), it has a master copy which belongs to the creator of the project (just like calendar). 57 | 58 | Some more info 59 | 60 | - Any change in the task is synced back to the master copy. 61 | 62 | - Any change is recorded as history and can be reversed just like Git. 63 | 64 | - Task is a multipart document, which means it supports attachments and custom fields 65 | 66 | Now here are some questions. 67 | 68 | ####How do I trust if the other guy / system is legit? 69 | 70 | Use private and public keys encryption 71 | 72 | ####How to sync/patch updates? conflicts? 73 | 74 | It looks like git is already solving this :-) 75 | 76 | ####Who should be able to assign me a task? 77 | 78 | Actually it is like Email, anyone can assign you a task. However you can block or ignore the requests. 79 | 80 | 81 | ### Use cases 82 | --- 83 | 84 | This can be useful in 85 | 86 | - Project management involving multiple organizations 87 | 88 | - Freelancers to work closely with the organization 89 | 90 | - Open source project development 91 | 92 | - Your bot can have a todo list too which you can assign from anywhere. 93 | 94 | ## The MIT License (MIT) 95 | 96 | See [License.md](https://github.com/madhugb/Global-Task-Exchange-Protocol/blob/master/License.md) 97 | 98 | ## Author 99 | 100 | [Madhu Geejagaru Balakrishna](https://twitter.com/madospace "Follow @madospace on Twitter") 101 | --------------------------------------------------------------------------------