cartulary 0.3.0-alpha.1

The knowledge layer of your project — decisions, issues, docs, all in one place.
Documentation
---
summary: An entry's current position in its configured workflow.
---

# Status

A **status** is an entry's current position in the workflow
configured for its kind. [Issues](concept://issue) walk a different
workflow than decision records; both are declared in
`cartulary.toml`.

## What it carries

- A **name** — short, kebab-case (`open`, `in-progress`,
  `accepted`, `superseded`).
- A **category** — one of `pending`, `ongoing`, `resolved`. Used
  by `cartu issue metrics distribution` to bucket entries across
  workflows.
- An optional **label** — human-readable display form (`In
  Progress` for `in-progress`).
- An **active** flag — whether the status counts as "in flight"
  for filters like `cartu issue list --active`.
- A **terminal** flag — whether the status closes the lifecycle.

## Configuration

The status set is per kind: one for issues, one per
decision-record kind. Declare them in `cartulary.toml`:

- `[issues.statuses.<name>]` — one block per status; each carries
  `next` (allowed transitions), `active`, `terminal`, optional
  `label`, optional `category`.
- `[issues]` carries `initial = "<name>"` — the status given to a
  new entry.
- The same shape applies under `[<decision-kind>.statuses.<name>]`
  (e.g. `[adr.statuses.…]` for the default `adr` kind).

### Built-in presets

Without a `preset` key, the built-in `default` applies. To
switch, set `preset = "<name>"` under `[issues]` or under a
decision-kind section.

| Preset                | Initial      | Statuses (terminal in **bold**)                                                  |
|-----------------------|--------------|----------------------------------------------------------------------------------|
| `default` (issue)     | `open`       | open, in-progress, **closed**                                                    |
| `scrum` (issue)       | `to-do`      | to-do, in-progress, code-review, testing, **done**                               |
| `kanban` (issue)      | `backlog`    | backlog, ready, in-progress, blocked, **done**                                   |
| `default` (decision)  | `proposed`   | proposed, accepted, **rejected**, deprecated, **superseded**                     |
| `extended` (decision) | `draft`      | draft, proposed, under-review, accepted, deprecated, **superseded**              |

## Validation

`cartu check` enforces:

- Every entry's `status` field is a name configured for its kind.
- The first event in the [event log]concept://event-log is
  `created` with the configured initial status.
- Each `status_changed` event walks an allowed transition.
- Terminal statuses have no outgoing transitions.

## Commands

Transitions happen through `cartu issue status update <id> <new>`
and `cartu adr status update <id> <new>` (same shape for every
decision-record kind). The current value is readable with
`status show`. The list of valid
statuses for a kind is the keys of its `statuses` table in
`cartulary.toml` (or, when no table is declared, the chosen
preset's keys).