Initiatives and Releases
Two different questions. An initiative is intent — a named body of work somebody wants. A release is fact — what actually shipped together. Keeping them apart is what lets a release stay accurate when a plan slips.
Initiatives
An initiative belongs to an organization, not a project, so it can span repositories: "Translate courses" can have work in your API and in your storefront. It has a name (unique in the organization), a description, an owner (a person, never an agent), a status you set by hand — BACKLOG, PLANNING, ON_TRACK, AT_RISK, OFF_TRACK, ON_HOLD, COMPLETE, CANCELED — a priority, and optional start and target dates.
A task can belong to several initiatives. A task in none is in the inbox.
Initiatives never affect phases or dispatch. They are a way of asking "how is this body of work going", not a workflow.
Find them at Initiatives in the sidebar. Archiving an initiative hides it from pickers while its tasks keep it; deleting it returns tasks that were only in it to the inbox.
Blocked By
A task can be blocked by other tasks in the same organization. While any blocker is not Done, that task's fresh Plan or Build turn is held — a person can still move the task by hand — and it is sent automatically when the last blocker reaches Done. On a staged project that includes reaching Done by way of its release going live. A task blocking itself, and any cycle, is refused.
Intake can set blockers for you: upsert_task_by_source accepts blockedBySourceRefs, the source's own "Blocked by" relation expressed as source references of other tasks in the same project and source system. A reference to a task that has not been created yet comes back as unresolved rather than failing the call, so import order does not matter.
Releases
A release is what went out of one project together — a project is one repository, and a release is what that repository shipped.
A task has two links to releases:
- Target release — the plan. Set by a person on the task page, by
update_task, or by intake. - Shipped in release — the fact. Set by FlightDesk only, never typed in.
An initiative can aim at a release. Its tasks in that release's project that name no target of their own are then planned for it, and a task with its own target overrides that. Because initiatives span projects, an initiative aims at one release per project.
Staged or continuous
Which one a project is, is its Releases setting (see Task Workflow):
- Continuous (the default, and every project FlightDesk does not drive): every merge is its own release, live immediately, and the task lands on Done. Every project gets a changelog without anyone staging anything.
- Staged: a merge lands the task on the Release phase — merged, awaiting release. A person then stages a release, which collects every merged task that is awaiting one, and later ships it. Shipping fixes the changelog and moves every task still at Release to Done. Only one release per project can be on staging at a time; staging again adds whatever merged since.
Staging deploys the branch wholesale, so it cannot pick and choose what goes in.
The gap, and moving unfinished work
The gap of a release is the work that was targeted at it but did not ship in it — either still unfinished, or shipped somewhere else, such as in a hotfix. Move unfinished retargets the unfinished part to the next unreleased release, creating one if there is none, or to a release you name. Each moved task gets its own target pinned, so a later change to the initiative's aim does not silently move it again.
Release notes
Every task carries a release note, drafted when the plan is written and confirmed at closeout. A release's changelog is one Markdown line per shipped task, in the order the work was asked for: the release note (or the title, if there is no note) and its pull request. It is composed live until the release goes live, then stored as it was, and the release page shows it with a copy button.
Tags
Tags are free-form labels on a task, normalized on the way in. They are how a slice of work is selected without inventing a project for it — the client status report can select on them, and intake can set them.