# `Choreo.Lab.DSL.Planner`
[🔗](https://github.com/code-shoily/choreo/blob/v0.14.1/lib/choreo/lab/dsl/planner.ex#L1)

Experimental Livebook-friendly DSL for sketching project plans.

This Lab DSL compiles to the stable, pipe-first `Choreo.Planner` builders and
returns an ordinary `%Choreo.Planner{}`. It is useful for interview planning,
release sketches, dependency conversations, and quick Kanban/Gantt artifacts.

## Examples

    iex> import Choreo.Lab.DSL.Planner
    ...> plan = planner "Launch v1" do
    ...>   v1 = milestone("V1 Launch")
    ...>   design = task("Design API", status: :done, estimate_hours: 8)
    ...>   build = task("Build Gateway", priority: :high)
    ...>   alice = user("Alice")
    ...>   backend = label("backend")
    ...>
    ...>   contains v1 ~> design
    ...>   contains v1 ~> build
    ...>   design ~> build |> depends_on()
    ...>   build ~> alice |> assigned_to()
    ...>   build ~> backend |> tagged_with()
    ...> end
    iex> Enum.sort(Choreo.Planner.children(plan, :v1))
    [:build, :design]
    iex> Choreo.Planner.dependencies(plan, :build)
    [:design]
    iex> Choreo.Planner.assignee(plan, :build)
    :alice

Edges use the same sketch grammar as the other Lab DSLs:

    design ~> build
    design ~> build |> depends_on("finish design first")
    blocks blocker ~> blocked
    contains milestone ~> task
    assigned_to task ~> user
    tagged_with task ~> label

Planner edge labels are accepted for grammar consistency, but the stable
`Choreo.Planner` model currently stores typed relationships rather than
display labels on those edges.

# `after`

# `assign`

# `assigned_to`

# `blocks`

# `bug`

# `contains`

# `depends`

# `depends_on`

# `edge`

# `label`

# `milestone`

# `on`

# `owner`

# `person`

# `phase`

# `planner`
*macro* 

Builds a `%Choreo.Planner{}` from a compact Lab DSL block.

# `planner`
*macro* 

# `relates`

# `relates_to`

# `release`

# `story`

# `tag`

# `tagged`

# `tagged_with`

# `task`

# `taxonomy`

```elixir
@spec taxonomy() :: %{
  nodes: [atom()],
  edges: [atom()],
  modifiers: [atom()],
  options: [atom()]
}
```

Returns the vocabulary supported by the planner DSL.

    iex> taxonomy = Choreo.Lab.DSL.Planner.taxonomy()
    iex> :task in taxonomy.nodes
    true
    iex> :depends_on in taxonomy.edges
    true
    iex> :assigned_to in taxonomy.modifiers
    true

# `todo`

# `type`

# `user`

# `verbs`

```elixir
@spec verbs() :: map()
```

Compatibility alias for `taxonomy/0`.

# `work`

---

*Consult [api-reference.md](api-reference.md) for complete listing*
