Docs

Lifecycle

lifecycle.yml names the states work moves through, maps your board's statuses to them, and says how your team marks a fix for something a deploy broke. The measures read it: flow time, work in progress, time in each state and the change fail rate.

The default

.mandately/lifecycle.yml
# The states a request moves through, and which board status means which state.
request:
  start: in_progress         # moving into this state starts work: the class's `start` right applies
  done: done                  # this state means finished (cancelled is the other end)
  states:
    backlog: {owner: owner}
    todo: {owner: team}
    in_progress: {owner: assignee}
    in_review: {owner: reviewer}
    blocked: {owner: assignee}
    done: {terminal: true}
    cancelled: {terminal: true}
  board_status:             # the board's status keys; `mand init` maps your board's own by category
    backlog: backlog
    todo: todo
    in_progress: in_progress
    in_review: in_review
    blocked: blocked
    done: done
    cancelled: cancelled

# The states a change (a pull request, or a push to the default branch) moves through, and which event from your git
# provider moves it where. Rename the states as you like; the events on the left are the connection's.
change:
  states:
    open: {}
    reviewed: {}
    approved: {}
    merged: {terminal: true}
    closed: {terminal: true}
    reverted: {}
  events:
    pr.opened: open
    pr.review: reviewed
    pr.approved: approved     # a review that approves
    pr.merged: merged
    push.main: merged         # a push straight to the default branch
    pr.closed: closed         # closed without merging
    change.reverted: reverted

# How your board or forge marks a fix for something a deploy broke. A change that carries any of these marks, on
# itself or on the issue it names, means the deploy before it failed. Any one match counts.
fixes:
  labels: [hotfix, incident]
  projects: []              # board projects that hold only incidents, e.g. [Operations]
  metadata: {}              # a metadata key and the value that marks a fix, e.g. {kind: incident}; "*" is any value

Requests

A request is a piece of work on your board. Its settings sit under request.

start

The state that starts work. Moving work into it is where its class's start right applies. Flow time runs from the release, or from the move into this state when the work needed none.

done

The state that means finished. Flow time ends here, and the work counts as done.

states

Each state your work can be in. A state may carry:

board_status

Your board's statuses, each mapped to a state. mand init maps your board's own by category. A status with no mapping keeps the board's own word.

Changes

A change is a pull request, or a push to your default branch.

change

The states a change moves through, and the events from your git provider that move it. Rename the states as you like. The events are the connection's: pr.opened, pr.review, pr.approved, pr.merged, push.main, pr.closed and change.reverted. pr.opened and pr.merged must be there.

Fixes

fixes

How your team marks a fix for something a deploy broke. A change carrying the mark, on itself or on the issue it names, means the deploy before it failed. Any one match counts:

Until a change or an issue carries the mark, the change fail rate shows no signal.

Change it

Your board's triage status counts as backlog, and a review should not wait more than a day:

.mandately/lifecycle.yml
request:
  start: in_progress
  done: done
  states:
    backlog: {owner: owner}
    todo: {owner: team}
    in_progress: {owner: assignee}
    in_review: {owner: reviewer, timeout_h: 24}
    blocked: {owner: assignee}
    done: {terminal: true}
    cancelled: {terminal: true}
  board_status:
    triage: backlog
    backlog: backlog
    todo: todo
    in_progress: in_progress
    in_review: in_review
    blocked: blocked
    done: done
    cancelled: cancelled