Watson
Watson copied to clipboard
Add tasks management capabilities
I'm hesitating to open this feature request for quite a long time now. I do understand that time tracking is different from task management. But I'm sure I'm not the only one needing both and struggling to find the right tools for this.
Most of what I have tried (like timewarrior/taskwarrior) is not well integrated and kind of difficult to setup. I propose this feature here because I know the libraries used by watson and I could try to build the feature.
Feature proposal
As a developer, I would like to be able to manage my tasks (gitlab issues, todo lists) in watson then track my time until the task is completed.
waston task @doit remember to do something +important +dontforget
watson start @doit
# doing it doing it doing it
watson end @doit
where:
@doitis a shortcut for task idremember to do somethingis the task short description+importantis a tag
I understand those are breaking changes on many core functionalities and it comes with side effects requiring further discussions. But would those changes interess the community or should I go on my own ?
Hello @plup,
Some comments about your proposal: I wonder how projects fit in. Currently, projects have tags associated and you always work on projects. How are tasks related to them?
How would I approach dealing with project tasks?
- Task status, description, etc. would be managed in another tool like Trello, Github, or other.
- With current Watson features, I would handle tasks with tags, so that I could get reports by project or tag (task).
- Idea: Tags could grow too fast, so it would be great to have a way to "hide" projects and associated tags from some watson operations (e.g. start, log, report,...). This could be a configuration option with a list of hidden projects or a date indicating projects with no frames since that time.
- If frames could have descriptions (see #145), I would use them to add task info, like the issue id for example. This would allow to obtain time per task reports by adding some filtering to reports.
From #145 you could also handle tasks using a format like "project.task" and then maybe you could filter by "project" to get the project total (currently, I think this is not possible using watson report -p, but could be implemented; one more idea ;-)
If you asked me, I'd prefer to see improvements on current features more than introducing new concepts and commands. But it's just my opinion :-)
I hope some of this helps you!
Hey @plup ! Thank you for this proposition. I think your idea is really interesting and worth consideration. As @davidag pointed out: we need to focus first on base features improvement/refactoring before adding new core features.
Feel free to share your thoughts folks!
Just coming to Watson and still trying to install Crick. But right from the start I too saw I needed a way to report what each time period (aka frame) was about. A review of bugs found this one.
Still need more time on this but from the cuff it seems what might help is the ability to add a comment or description to a frame. I can see how tags could be used but as pointed out I think they would grow too big and affect the primary task of tags.
After writing above I moved onto pull requests to see if anyone has considered a comment feature as I might want to add it if not. Found one almost merged:
https://github.com/TailorDev/Watson/issues/349
I think this could probably be implemented in a way that would be useful for things other than tasks.
I think the following might get us the functionality we're looking for here, while being general enough to make other features easier to implement
- Add the ability to pre-configure projects and tags.
- Add optional metadata fields to the configuration for the projects and tags. All unrecognized properties are just metadata.
- Allow a project to add mandatory tag types - e.g. task, such that one tag of that type must be included when starting the project.
- Add syntax to the start command to indicate that a project or tag must be one that was pre-configured.
So, we'd end up with something to the effect of: Preconfigure projects and tags with optional metadata
$ VISUAL=cat watson config --edit
[Preconfigured Projects]
watson =
[watson]
RequiredTagTypes = task
[Preconfigured Tags]
_274 =
[_274]
Type = task
IssueLink = https://github.com/TailorDev/Watson/issues/274
Start a project guaranteeing that the project and tag are pre-configured
$ watson start @watson +@_274
Starting project watson [_274] at 13:06
Attempt to start a project with a typo in a pre-configured project name
$ watson start @waston +@_274
Error starting project: No pre-configured project named "waston"
Using the new syntax is just a convenience to prevent creating typo projects/tags
$ watson start watson +_274
Starting project watson [_274] at 13:06
Attempt to start a project without at least one tag matching each of the required types.
$ watson start @watson +cool_feature
Error starting project: Project "watson" requires at least one tag of type "task"
The metadata should be displayed in (at least) the json version of the report
$ watson report -j
{
"projects": [
{
"name": "watson",
"tags": [
{
"name": "_274",
"time": 459.0,
"metadata":
{
"Type": "task",
"IssueLink": "https://github.com/TailorDev/Watson/issues/274"
}
}
],
"time": 459.0
}
],
"time": 459.0,
"timespan": {
"from": "2020-07-16T00:00:00-05:00",
"to": "2020-07-23T23:59:59.999999-05:00"
}
}
I think this is an improvement on the initial suggestion since instead of adding a whole new workflow, it's adding additional functionality to the existing flows that can also be re-used for other things.
If we also add an interface to manager pre-defined projects and tasks through the cli, we can approximate the example in the initial issue like
$ watson projects add watson --RequiredTagTypes task
$ watson tags add _274 --description "Add tasks management capabilities" --TagType task --IssueLink https://github.com/TailorDev/Watson/issues/274
Collecting this extra data would allow users to implement things on top of it, like
- Create a tag for every open issue at a URL
- Create a new issue when a tag of a certain type is created
- Synchronize the time tracking integrated in e.g. gitlab or jira with watson
If the above makes any sense, I'll likely find time to implement it at some point.
Really, the key features here are that users could associate arbitrary key/value data with projects and tags, and have a way to ensure that data is added (a way to catch typos).
I'm mainly interested in using this to build tools that synchronize watson with gitlab's time tracking, but I'm sure there's plenty of other reasons to want to add data for use in later scripting