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
# 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 valueRequests
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:
owner: who holds work in this state, such asowner,team,assigneeorreviewer.terminal:truewhen work in this state is over, done or cancelled.timeout_h: how many hours work may wait in this state. Mandately records it, and nothing acts on it yet.
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:
labels: a label on the pull request or the issue.projects: a board project that holds only incidents.metadata: a board field and the value that marks a fix, or"*"for any value.
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:
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