willdo 0.0.1

Task manager with DAG
Documentation
# WillDo

Will do some work when the conditions are ripe!

It is a generic task manager for running jobs
with a directed acyclic graph (DAG) dependency resolution.
Configuration is loaded from simple yaml files:

```yaml
job: baking
script:
    - echo oven 250
    - echo insert yummy
    - sleep 3600
    - echo oven off
    - echo take yummy
---
job: oops
when:
    - done: baking
      code: 
        min: 1 # that is non-zero, baking failed
script: echo alarm!
---
job: cleanup
when:
    - any:
        - done: baking # assuming 0 - success
        - done: oops
script: echo tidy up
```

Jobs are effectively scheduled when their parent dependencies
(`when`) are satisfied. Dependencies can be conditional
with a simple code arithmetic conditions and combined
into complex rules (all/any). By default, all
dependencies must be satisfied. 

Triggers (`then`) are opposite - child - relations.

The crate includes a subprocess commander behind a feature of same name,
so any shell or repl can be utilized immediately to run your scripts.
The default commander is `()` which does nothing.

You can configure an interpretter:

```yaml
interpretter: sh
provider: subprocess
executable: dash
---
job: making
runs: sh
script:
    - test -f .skip && echo skipped || echo make
```


In order to discern the outcome of a script command,
the commander must provide feedback to send back
the numeric code of the last operation.
This is not easily done in a subprocess
and is achieved by printing a uniquely
stamped string that is parsed from child
process outputs.

# Usage

 1. Use it as a crate in your project - see examples and docs to get started.
    The `Graph` implements `Display` with a digraph output which can be rendered with graphviz
    to visualize the state. You can provide your own `Commander` to interpret job scripts.

 2. Build the examples that can run jobs as a CLI, you could install
    the examples with cargo, but I would not recommend it at this stage
    as the interfaces are not stable.

# TODO
- Pass resources between jobs, such as exit codes, outputs, variables.
- Preserve and load job state so we can pick up where we left off.
- An official and stable CLI.
- Later: other configuration sources.
- Later: fancy interactive TUI.
- Maybe: more ways to work with the graph.