# Epic AUTOWORK-209 - Workflow transition rules

Project: Stream Workflows & Automations
Status: in specification
URL: https://community.openproject.org/work_packages/AUTOWORK-209

## Detailed specification

### Motivation and background information

**This epic answers one question for every status change: May this status change happen, and what is needed first?**

Teams moving from Jira to OpenProject rely heavily on transition rules. Every status change answers two questions: who may make it, and what must be true before it happens. Conditions and validators are among the most used workflow features in large Jira instances. Without them, these rules would get lost in a migration. Users would then have to remember the rules themselves, and data quality would drop.

Today OpenProject can only restrict status changes per role, through the workflow matrix. It cannot ask for missing information, check field values or block a status change based on rules.

<br>

**Jira features covered by this epic (e.g. conditions and validators)**

<figure class="table op-uc-figure_align-center op-uc-figure"><table class="op-uc-table"><thead class="op-uc-table--head"><tr class="op-uc-table--row"><th class="op-uc-table--cell op-uc-table--cell_head" scope="col"><p class="op-uc-p">Jira feature</p></th><th class="op-uc-table--cell op-uc-table--cell_head" scope="col"><p class="op-uc-p">What it does in Jira</p></th><th class="op-uc-table--cell op-uc-table--cell_head" scope="col"><p class="op-uc-p">Use case</p></th></tr></thead><tbody><tr class="op-uc-table--row"><td class="op-uc-table--cell"><p class="op-uc-p">Conditions: Project Role, Group, Permission</p></td><td class="op-uc-table--cell"><p class="op-uc-p">Only users with a certain role, group or permission can make the transition</p></td><td class="op-uc-table--cell"><p class="op-uc-p">UC1</p></td></tr><tr class="op-uc-table--row"><td class="op-uc-table--cell"><p class="op-uc-p">Conditions: Only Assignee, Only Reporter, User in Custom Field</p></td><td class="op-uc-table--cell"><p class="op-uc-p">Only the assignee, the reporter or a user named in a field (e.g. Approver) can make the transition</p></td><td class="op-uc-table--cell"><p class="op-uc-p">UC1</p></td></tr><tr class="op-uc-table--row"><td class="op-uc-table--cell"><p class="op-uc-p">Validators: Fields Required</p></td><td class="op-uc-table--cell"><p class="op-uc-p">Blocks the transition if certain fields are missing</p></td><td class="op-uc-table--cell"><p class="op-uc-p">UC2</p></td></tr><tr class="op-uc-table--row"><td class="op-uc-table--cell"><p class="op-uc-p">Transition screens</p></td><td class="op-uc-table--cell"><p class="op-uc-p">Show the user a form during the status change to fill in missing information</p></td><td class="op-uc-table--cell"><p class="op-uc-p">UC2</p></td></tr><tr class="op-uc-table--row"><td class="op-uc-table--cell"><p class="op-uc-p">Condition: Value Field, scripted conditions and validators</p></td><td class="op-uc-table--cell"><p class="op-uc-p">Allow the transition only if field values meet a rule (fixed value, other field, pattern, date, linked or child issues)</p></td><td class="op-uc-table--cell"><p class="op-uc-p">UC3</p></td></tr><tr class="op-uc-table--row"><td class="op-uc-table--cell"><p class="op-uc-p">Workflow schemes per project</p></td><td class="op-uc-table--cell"><p class="op-uc-p">Different rules per project and issue type</p></td><td class="op-uc-table--cell"><p class="op-uc-p">UC4</p></td></tr><tr class="op-uc-table--row"><td class="op-uc-table--cell"><p class="op-uc-p">Validators: Comment Required</p></td><td class="op-uc-table--cell"><p class="op-uc-p">Blocks the transition if a comment is missing</p></td><td class="op-uc-table--cell"><p class="op-uc-p">UC5</p></td></tr><tr class="op-uc-table--row"><td class="op-uc-table--cell"><p class="op-uc-p">Condition: Hide transition from user</p></td><td class="op-uc-table--cell"><p class="op-uc-p">Transition only the system or API can make</p></td><td class="op-uc-table--cell"><p class="op-uc-p">UC6</p></td></tr></tbody></table></figure><br>

**Use Cases**

**Use Case 1 Restrict who can change a status**

**Only defined users can move a work package from one status to another**, based on their role, group, permission, or their relation to the work package (assignee, author, or a user named in a field such as &quot;Approver&quot;)

Example: If a user without the role &quot;Developer&quot; opens a work package in status &quot;On Hold&quot; the status change to &quot;In Progress&quot; will not be available to this user.

**Use Case 2 Mandatory information (within any field) when transitioning to/from certain status:**

Ensures users **provide the necessary information in a certain field before a work package can move into a status**. This works for standard and custom fields.  
Example (**when entering a status**): If a user sets a work package to Done while a field Version is empty, or sets a work package of type Bug to Cancelled without a comment the user is asked for the information required for the target status, e.g. &quot;Set a target version to move this work package to Done&quot; or &quot;Add a reason why this work package is cancelled.&quot;

Example (**when leaving a status**): If a work package leaves “In review” and “Reviewer” is empty, the user is asked to &quot;Select a reviewer before continuing&quot;. After user adds a reviewer -&gt; status -&gt; target status

**Use Case 3 Allow a status change only if rules are met**

**Status change is blocked when field values do not meet defined rules**. Several rules can apply to the same status change. A rule can:

*   compare a field with a fixed value or with another field
    
*   check if a text follows a pattern, e.g. an ID like &quot;ABC-1234&quot;
    
*   check related work packages, e.g. whether all children are closed
    

Example: If a user sets a work package to Done while no target version is set, or while a Planned Availability Date lies in the past, or the child work package is still open the user would see a dialogue &quot;This work package cannot be set to Done: a target version must be set&quot; or &quot; The planned availability date must be today or later&quot; and/or &quot;This work package cannot be set to Done: all child work packages must be closed&quot;

**Use Case 4 Project-specific rules:**  
Admins can set **different rules per project and work package type**.

Example: If a project ALPHA requires a field to be updated on the status cancelled and project BETA does not, only users in project ALPHA are asked to fill out the field.

In the automations UI, you can define a scope of project(s) that the automation applies to. For ALPHA and BETA, this would imply two separate automation objects.

Note: This is more a configuration. This applies to all other use cases.

<br>

\---

**Use cases out of scope for Q1 delivery**

<br>

**Use Case 5 Mandatory information (as a comment) when transitioning to/from certain status:**

Ensures users **provide the necessary comment** before a work package can move into a status. Example (when entering a status): If a user sets a work package of type Bug to Cancelled without a comment the user is asked to &quot;Add a reason why this work package is cancelled.&quot;

Example (when leaving a status): If a work package leaves status “rejected” (e.g. reopening a work package), the user is asked to enter a comment. After user adds a comment -&gt; status transition -&gt; target status

Example 2: When closing a task, require a comment. (Workaround: define a field similar to resolution that then is required as part of the transition).

**Use Case 6 Status changes only the system can make**

Admins can set up a status change that users cannot see or select. Only automation rules or the API can make this status change.

Example: When all child work packages are closed, an automation rule moves the parent from In progress to Ready for release. Users cannot select Ready for release themselves.

<br>

### Acceptance criteria

*   Admins can define rules per status change and work package type
    
*   Several rules can apply to one status change -&gt; all of them must be met
    
*   When a rule blocks a status change, the user sees which rule is not met and what to do
    
*   When information is missing, the user can add it directly during the status change
    
*   Rules apply wherever a status can be changed: work package view, tables, boards, bulk edit and API&nbsp;
    
*   Rules cannot be bypassed via the API

### Out of scope

Anything the system does automatically after a status change, e.g. setting or clearing fields, creating work packages, updating related work packages or sending notifications: see  <mention class="mention" data-id="37473" data-type="work_package" data-text="##AUTOWORK-200" data-display-id="AUTOWORK-200">\#\#AUTOWORK-200</mention>

| Attribute | Value |
| --- | --- |
| Mockups |  |

## Planning

| Attribute | Value |
| --- | --- |
| Roadmap | 2027 Q1 |
| Date |  |
| Votes |  |
| List | RM Jira exit, RM Jira admin, TIB 2026 |
| Target versions |  |
| Sprint |  |
| Backlog bucket |  |
| Relevance | Showstopper — Go-Live Blocker |

## Subitems

_No work packages_

## Bugs and other work packages

_No work packages_

## Details

| Attribute | Value |
| --- | --- |
| Module | Administration / Type/Variants and Workflows |
| Enterprise plan |  |
| Labels |  |

## People

| Attribute | Value |
| --- | --- |
| Assignee | Sonita Soth |
| Accountable | Rosanna Sibora |
| Product manager | Sonita Soth |
| Designer | Parimal Satyal |
| Developers | OP Dev Sirius Team, Mir Bhatia, David Friquet |
| Requested by |  |
| Interest by | Express (8754), Black (37919), Bowling (40324), Home (224196000003952096), Periscope (224196000002193032) |

## Estimates and progress

| Attribute | Value |
| --- | --- |
| Work | 160d 0h · Σ 500d 0h |

## Description

**Summary:**

Admins can define **rules for each status change**: **who** may make it, what information is **required** and which **conditions** must be met. The system enforces these rules for all users.
