Business Sign-off & Approval for Jira Cloud
Copyright © 2026 Cahaba Forge LLC. All rights reserved.
Cahaba Forge™ is a trademark of Cahaba Forge LLC.
Atlassian, Jira, and Forge are trademarks of Atlassian Pty Ltd.
Business Sign-off is a Forge app distributed through the Atlassian Marketplace. Unlike Data Center plugins, there are no JAR files, certificates, or server-side installations. Atlassian hosts and runs the app entirely within the Forge platform.
Alternatively, visit the Atlassian Marketplace directly, search for the app, and click Get it now to install it on your Jira Cloud site.
Installation screenshot will be added in a future update.
During installation, Jira prompts the site administrator to authorize the following scopes:
| Scope | Purpose |
|---|---|
| Read Jira project and issue data | Read issue details, project configuration, and user information |
| Write Jira project and issue data | Update custom fields, issue properties, and approval status |
| Manage Jira configuration | Send email notifications via the Jira notify API |
| Forge Storage | Persist approval records, configuration, and audit history |
These scopes are required for the app to function. The app uses its own installed permissions (not per-user OAuth) so that all Jira users can interact with the approval panel without individual authorization prompts.
Once installed, the app is available from:
Note: Only Jira Site Administrators can access the global configuration page. Project Administrators can access project-level settings.
Navigation shorthand: Throughout this guide, we use “Global Config” to refer to the full path: Settings (gear icon) > Marketplace apps > Connected apps > Business Sign-off > … > Configure. We use “Project Settings” to refer to: From your project board, click … (three dots) > Board settings > View space settings > Apps > Business Sign-off.
Note: Atlassian periodically updates the Jira Cloud navigation. The exact menu labels and paths may vary slightly from what is described here.
Business Sign-off runs entirely on Atlassian’s Forge platform. There is no need to:
All data is stored securely in Forge Storage within your Atlassian cloud tenant.
Business Sign-off licensing is managed entirely by the Atlassian Marketplace. There are no license keys to copy, paste, or manage manually.
| State | Behavior |
|---|---|
| Active | All features enabled (active paid subscription) |
| Evaluation / Trial | All features enabled during the trial period, managed by Atlassian |
| Expired | Write operations are disabled — existing data is preserved but approvers cannot be added, decisions cannot be recorded, and configuration changes are blocked |
| Community | Free license for qualifying community organizations; all features enabled |
| Academic | Free license for qualifying academic institutions; all features enabled |
| Developer | Free license for development and testing instances; all features enabled |
| Demo | Short-term license for demonstrations; all features enabled |
The global administration page displays the current license status in the header area. The status indicator shows:
When you install the app for the first time, Atlassian automatically starts a free trial period. The trial duration is determined by Atlassian Marketplace policies (typically 30 days). During the trial, all features are fully functional with no restrictions.
When the license expires or is removed:
Tip: To renew or manage your subscription, visit the Manage subscriptions page in your Atlassian administration at admin.atlassian.com.
Access the global configuration page from Global Config. The configuration page opens to the Settings tab.
Only Jira Site Administrators can access this page.
Toggle the Enable Plugin switch to activate or deactivate Business Sign-off across all projects.
When disabled:
Disable dialog: When turning the plugin off, a confirmation dialog presents two options:
Finishing Mode is useful when you need to decommission the plugin gracefully without disrupting in-flight approvals.
Set the global default percentage of approvals required for an issue to pass:
| Threshold | Meaning | Example (4 approvers) |
|---|---|---|
| 50% | Simple majority | 2 must approve |
| 66% | Two-thirds majority | 3 must approve |
| 75% | Three-quarters majority | 3 must approve |
| 90% | Near-unanimous | 4 must approve |
| 100% | Unanimous | All 4 must approve |
The threshold is applied using ceiling rounding — for example, 75% of 3 approvers rounds up to 3 (all must approve).
Allow Project Threshold Override: When enabled, project administrators can set a different threshold for their project, subject to the minimum threshold floor.
Minimum Threshold: Sets the lowest threshold a project can configure. This prevents project administrators from setting an inappropriately low bar for approval. The minimum threshold must be less than or equal to the global threshold.
Note: If you change the minimum threshold to a value higher than a project’s current override, the project’s effective threshold is raised to the new minimum on the next evaluation.
Restrict who can serve as an approver across the instance.
Mode selection:
Filters (available when “Selected users only” is chosen):
Filters use OR logic: a user is eligible if they match any selected role or any selected group. At least one filter must be enabled with at least one value selected.
Allow Project Eligible Approver Override: When enabled, project administrators can configure different eligible approver filters for their project.
Tip: If you select a project role that has no members in a particular project, no users from that role will be eligible in that project. Verify that selected roles are populated in the projects where you need them.
The Require Edit Permission to Decide toggle controls the permission level required for an approver to record a decision (approve or return).
Allow Project Decision Authority Override: When enabled, project administrators can set a different decision authority requirement for their project.
Note: Decision Authority controls who can decide (approve or return). It does not control who can be added as an approver — that is governed by Eligible Approver Controls and Approver Management Permissions.
Configure who can add and remove approvers from the issue panel. Three toggles control this:
At least one of these toggles must be enabled. The app enforces this requirement and will not allow you to disable all three.
Note: Workflow post-functions can add and remove approvers regardless of these settings. Post-functions run as the app (not as a user), so they bypass management permission checks.
Configure when approvers must provide a comment with their decision:
| Option | Behavior |
|---|---|
| All decisions | Comment required for both approvals and returns |
| Approval only | Comment required only when approving |
| Return only | Comment required only when returning |
| None | Comments are always optional |
When a comment is required, the approver must enter text before submitting their decision. The decision button is disabled until a comment is provided.
Allow Project Comment Override: When enabled, project administrators can set different comment requirements for their project.
Configure which issue participants cannot serve as approvers:
How violations are enforced:
When a SoD rule is active, the plugin enforces it at every decision point:
Allow Project SoD Override: When enabled, project administrators can set different SoD rules for their project.
Tip: For compliance frameworks like SOC 2 or SOX, enable both SoD toggles globally and do not allow project overrides. This ensures consistent enforcement across all projects.
The Decision Locking Enabled toggle controls whether approved decisions become immutable after the issue transitions to a different workflow status.
How it works:
Important details:
Allow Project Decision Lock Override: When enabled, project administrators can enable or disable decision locking for their project.
Toggle diagnostic logging on or off for troubleshooting. When enabled, the app writes detailed log entries for all operations including resolver calls, service actions, eligibility checks, and workflow function execution.
Duration dropdown: Select how long logging remains active:
| Duration | Use case |
|---|---|
| 1 hour | Quick investigation of a specific issue |
| 2 hours | Reproducing an intermittent problem |
| 4 hours | Monitoring a workflow during a release cycle |
| 8 hours | Extended troubleshooting session |
Logging automatically expires after the configured duration. There is no need to remember to turn it off — the app disables logging when the timer expires.
Viewing logs: Diagnostic logs are accessible through the Atlassian Developer Console at developer.atlassian.com. Navigate to your app’s environment and view the runtime logs.
Privacy: Log entries include Atlassian account IDs and issue keys for correlation, but do not contain personally identifiable information (PII) such as display names or email addresses.
Tip: When contacting Cahaba Forge support, enable diagnostic logging and reproduce the issue before submitting your support request. Include the approximate timestamp of the reproduction so support can locate the relevant log entries.
Access project-level settings from Project Settings.
Only Project Administrators can access project configuration. The global plugin must be enabled for project settings to take effect.
Toggle Business Sign-off on or off for the project. When disabled:
The project toggle requires the global plugin to be enabled. If the global plugin is disabled, the project toggle has no effect.
Finishing Mode: When disabling a project, a confirmation dialog presents the same two options as the global disable:
Choose which issue types display the Business Sign-off panel:
Note: If an issue type is removed from the project after being selected here, the panel will no longer appear on issues of that type. The configuration is automatically cleaned up on the next settings save.
The Approval Required toggle controls whether workflow validators enforce approval for this project.
Tip: Set Approval Required to OFF for projects that want the approval panel available but do not need strict workflow enforcement. Approvers can still be added and decisions recorded — the difference is that transitions are not blocked when no approvers are present.
This section is only visible if the global administrator has enabled Allow Project Threshold Override.
The override value must meet or exceed the Minimum Threshold configured globally. If the global minimum is 66%, the project cannot set a threshold below 66%.
This section is only visible if the global administrator has enabled Allow Project Eligible Approver Override.
Project-level role filters apply to roles defined in the current project. If the project does not have a role that is selected in the filter, no users from that role will be eligible.
This section is only visible if the global administrator has enabled Allow Project Decision Authority Override.
This section is only visible if the global administrator has enabled Allow Project Comment Override.
This section is only visible if the global administrator has enabled Allow Project SoD Override.
Note: Relaxing SoD rules at the project level (e.g., disabling “Assignee Cannot Approve” when it is enabled globally) may weaken compliance controls. Consider your organization’s audit requirements before overriding SoD rules.
This section is only visible if the global administrator has enabled Allow Project Decision Lock Override.
Email notification preferences are configured at the project level. Each notification type can be toggled or configured independently:
Notify Approvers on Add
Toggle on or off. When enabled, each approver receives an email notification when they are added to an issue. The email includes a direct link to the issue.
Notify Requestor on Decision
Select when to notify the person who requested the approval (the user who added the approver) about individual decisions:
| Option | Behavior |
|---|---|
| Approved only | Notify when an approver approves |
| Returned only | Notify when an approver returns |
| Both | Notify on every decision |
| Never | No notifications for individual decisions |
Notify Requestor on Outcome
Select when to notify the requestor about the overall approval outcome (passed or failed):
| Option | Behavior |
|---|---|
| Approved only | Notify when the issue reaches Approval Passed |
| Returned only | Notify when the issue reaches Approval Failed |
| Both | Notify on either outcome |
| Never | No outcome notifications |
Notify Assignee on Decision
Same options as Notify Requestor on Decision, but sent to the current issue assignee.
Notify Assignee on Outcome
Same options as Notify Requestor on Outcome, but sent to the current issue assignee.
Tip: For high-volume projects, consider setting decision notifications to “Never” and using only outcome notifications. This reduces email noise while still ensuring stakeholders are informed when the final result is reached.
Business Sign-off creates two custom fields and uses Jira issue properties for JQL indexing and audit trail persistence.
A multi-user custom field that displays the current list of approvers assigned to an issue.
Key characteristics:
"BSO - Approvers" = currentUser() — find issues where you are an approver"BSO - Approvers" = "john.smith" — find issues where a specific user is an approver"BSO - Approvers" IS NOT EMPTY — find issues with any approvers assignedA read-only text field that displays the current approval status of the issue.
Possible values:
| Status | Meaning |
|---|---|
| Not Started | Approvers are assigned but none have decided yet |
| Awaiting Decisions | At least one approver has decided but the threshold is not yet met |
| Approval Passed | The approval threshold has been met |
| Approval Failed | Enough approvers have returned to make passing the threshold impossible |
Key characteristics:
"BSO - Status" = "Approval Passed" — find approved issues"BSO - Status" = "Approval Failed" — find returned issues"BSO - Status" IS EMPTY — find issues with no approval activityBusiness Sign-off writes a bso-signoff issue property to each issue with approvers. This property is used by workflow conditions (Jira Expressions) and is available for JQL queries using the issue.property syntax.
Property contents:
| Field | Type | Description |
|---|---|---|
pluginActive | boolean | Whether the plugin is active for this issue’s project |
approvalRequired | boolean | Whether approval is required for workflow enforcement |
totalApprovers | number | Total number of assigned approvers |
approvedCount | number | Number of approvers who have approved |
returnedCount | number | Number of approvers who have returned |
pendingCount | number | Number of approvers who have not yet decided |
approvedPercentage | number | Percentage of approvers who have approved |
status | string | Aggregate status: NOT_STARTED, AWAITING_DECISIONS, APPROVAL_PASSED, or APPROVAL_FAILED |
Privacy: The bso-signoff property contains only aggregate statistics. It does not include account IDs, display names, or any personal data.
For compliance and tamper detection, Business Sign-off writes individual audit records as Jira issue properties using the key pattern bso.approval.audit.NNNN (where NNNN is a sequential number).
Key characteristics:
Note: Issue properties have a size limit. The app manages property rotation automatically, creating new numbered properties as needed.
Business Sign-off provides workflow conditions, validators, and post-functions that integrate with Jira’s workflow engine. These components allow you to enforce approval requirements at transition points and automate approver management.
All workflow components support both company-managed and team-managed projects.
Conditions control whether a transition is visible to the user. If a condition is not met, the transition button does not appear. Business Sign-off provides three conditions:
Shows the transition only when at least one approver is assigned to the issue.
bso-signoff issue property. No function call is made to the app.bso-signoff property does not exist (no approvers have ever been assigned), if the plugin is inactive for the project, or if approval is not required, the condition passes and the transition is visible.Shows the transition only when the approval status is Approval Passed (the approval threshold has been met).
bso-signoff issue property.Shows the transition only when the approval status is Approval Failed.
bso-signoff issue property.Note: Because conditions are expression-based, they are evaluated entirely by Jira with no latency overhead from the app. They read directly from the issue property that Business Sign-off maintains.
Validators control whether a transition is allowed to proceed. If a validator fails, the transition is blocked and an error message is displayed. Business Sign-off provides three validators:
Blocks the transition unless at least one eligible approver is assigned to the issue.
Blocks the transition unless the approval status is Approval Passed.
Blocks the transition unless approvers from specific groups and/or roles have approved. This validator has a configuration UI that appears in the workflow editor.
Configuration options:
Example: To require approval from at least one member of the “QA” role and at least one member of the “Security” group, add two rules with AND logic:
| Rule | Source type | Source value | Min count | Min approved |
|---|---|---|---|---|
| 1 | Project Role | QA | 1 | 1 |
| 2 | User Group | security-reviewers | 1 | 1 |
Post-functions execute after a transition completes. They automate approver management and notification tasks. Business Sign-off provides six post-functions:
Automatically adds approvers to the issue when the transition fires.
Source types:
| Source | Description |
|---|---|
| Specific users | Add named users by account ID |
| Project role | Add all members of a selected project role |
| User group | Add all members of a selected user group |
| User picker custom field | Add the user(s) from a specified user picker field on the issue |
The configuration UI allows you to select the source type and configure the specific source. All eligibility rules (eligible approver filters, SoD) are applied when the post-function executes — ineligible users are skipped.
Removes approvers from the issue when the transition fires.
Modes:
| Mode | Description |
|---|---|
| Remove all | Remove all approvers from the issue |
| Pending only | Remove only approvers who have not yet decided (preserves decided approvers) |
| Specific users | Remove named users by account ID |
The configuration UI allows you to select the removal mode and, for specific users, configure which users to remove.
Sends email notifications to approvers who have not yet decided.
Modes:
| Mode | Description |
|---|---|
| All undecided | Notify all approvers who have not yet approved or returned |
| New only (ADDED) | Notify only approvers in the ADDED status (recently added, not yet notified) |
| Pending only | Notify only approvers in the PENDING status (previously notified but not yet decided) |
Resets all decisions back to PENDING, allowing the approval cycle to start over.
Use case: Add this post-function to a “Rework” or “Reopen” transition so that when an issue is sent back for changes, all approvals are cleared and the approval cycle restarts.
Sends notifications to approvers matching specific role and/or group filters. This is a targeted version of the Notify Approvers post-function.
Configuration:
Use case: Notify only the QA team’s approvers when the issue transitions to “QA Review”, without bothering approvers from other teams.
Resets decisions for approvers matching specific role and/or group filters. This is a targeted version of the Reset Approval Status post-function.
Configuration:
Use case: When an issue moves from “Dev Review” to “QA Review”, reset only the QA approvers’ decisions (from a previous cycle) while preserving the dev team’s existing approvals.
Follow these steps to configure a simple approval gate in your project’s workflow.
This blocks the transition until the approval threshold is met.
This sends a notification to all undecided approvers when the issue enters the review stage.
Tip: Start with a simple setup (one validator on one transition) and expand from there. You can add conditions to hide transitions until approval is possible, and post-functions to automate approver assignment and notification.
Business Sign-off provides multiple integration points that allow administrators to build automated approval workflows tailored to their environment. This section brings together the workflow functions, custom fields, Jira Automation, JQL, and issue properties into a unified reference for designing end-to-end approval processes.
Workflow functions are the primary mechanism for automating approvals. By combining post-functions, validators, and conditions on your Jira workflow transitions, you can build fully automated approval gates without any manual intervention beyond the actual approval decision.
Available building blocks:
| Function Type | Functions | Purpose |
|---|---|---|
| Conditions (3) | Has Approvers, Is Approved, Is Returned | Control which transitions are visible based on approval state |
| Validators (3) | Require Approvers, Require Approval Passed, Require Group/Role Approval | Block transitions that don’t meet approval requirements |
| Post-Functions (6) | Add Approvers, Remove Approvers, Notify Approvers, Reset Approval Status, Selective Notify, Selective Reset | Automate approver assignment, notifications, and resets on transitions |
Note: See Section 6 for detailed configuration of each workflow function.
Design pattern — Automated approval gate:
A common pattern combines post-functions on an early transition with validators on a later transition:
Design pattern — Multi-stage approval:
For workflows requiring approvals at multiple stages (e.g., technical review, then management sign-off):
Business Sign-off creates two custom fields that integrate with Jira’s native functionality:
BSO - Approvers (multi-user field):
BSO - Status (read-only text field):
Tip: Add both BSO fields to your team’s default issue list columns. This gives everyone visibility into approval status without opening each issue individually.
Jira’s built-in Automation for Jira can interact with Business Sign-off through the custom fields. While automation rules cannot call resolvers directly, they can trigger approver management through field edits.
What automation can do:
Example automation rules:
| Rule | Trigger | Condition | Action |
|---|---|---|---|
| Auto-transition on approval | Field value changed: BSO - Status | BSO - Status = “Approval Passed” | Transition issue to “Approved” status |
| Notify manager on return | Field value changed: BSO - Status | BSO - Status = “Approval Failed” | Send email to issue reporter |
| Add approvers on status change | Issue transitioned to “In Review” | — | Edit issue: set BSO - Approvers to members of a group |
| Escalate stale approvals | Scheduled (daily) | BSO - Status = “Awaiting Decisions” AND updated < -7d | Send email notification to approvers |
Note: Automation rules that edit the BSO - Approvers field will trigger Business Sign-off’s field sync handler, which enforces all the same rules as the issue panel (eligibility, SoD, permissions). If an automation rule tries to add an ineligible user, the addition is silently rejected and the field is re-synced to reflect the valid state.
Business Sign-off’s custom fields and issue properties enable powerful JQL queries for dashboards, filters, and reporting.
Custom field JQL examples:
-- Find all issues where I am an approver
"BSO - Approvers" = currentUser()
-- Find all issues approved in a project
"BSO - Status" = "Approval Passed" AND project = PROJ
-- Find issues awaiting approval decisions
"BSO - Status" = "Awaiting Decisions" AND project = PROJ
-- Find issues that failed approval
"BSO - Status" = "Approval Failed"
-- Find issues where a specific user is an approver
"BSO - Approvers" = "john.smith@company.com"
-- Find issues with no approvers assigned
"BSO - Status" = "Not Started" OR "BSO - Approvers" is EMPTY
Issue property JQL examples:
The bso-signoff issue property enables queries on approval metadata:
-- Find issues where approval is required but not yet passed
issue.property[bso-signoff].approvalRequired = true
AND issue.property[bso-signoff].status != "APPROVAL_PASSED"
-- Find issues with 100% approval
issue.property[bso-signoff].percentage = 100
-- Find issues where plugin is active
issue.property[bso-signoff].pluginActive = true
Dashboard ideas:
| Dashboard Gadget | JQL Filter | Purpose |
|---|---|---|
| My Pending Approvals | "BSO - Approvers" = currentUser() AND "BSO - Status" = "Awaiting Decisions" | Personal approver inbox |
| Approval Bottlenecks | "BSO - Status" = "Awaiting Decisions" AND updated < -3d | Stale approvals needing attention |
| Recently Approved | "BSO - Status" = "Approval Passed" AND updated >= -7d AND project = PROJ | Weekly approval throughput |
| Failed Approvals | "BSO - Status" = "Approval Failed" AND project = PROJ | Issues returned by approvers |
For teams building custom integrations or using third-party tools, Business Sign-off writes structured data to Jira issue properties that can be read via the Jira REST API.
bso-signoff property (approval statistics):
{
"status": "AWAITING_DECISIONS",
"approvedCount": 2,
"returnedCount": 0,
"pendingCount": 1,
"totalApprovers": 3,
"percentage": 67,
"threshold": 75,
"approvalRequired": true,
"pluginActive": true,
"lastUpdated": "2026-04-12T14:30:00.000Z"
}
Access via REST API:
GET /rest/api/3/issue/{issueKey}/properties/bso-signoff
This property contains no personal data — only aggregate statistics. It is updated every time an approver is added, removed, or records a decision.
bso.approval.audit.NNNN properties (immutable audit trail):
Individual compliance events with full context and hash chain integrity. See Section 10.3 for details.
Access via REST API:
GET /rest/api/3/issue/{issueKey}/properties/bso.approval.audit.index
GET /rest/api/3/issue/{issueKey}/properties/bso.approval.audit.0001
Tip: External compliance tools can poll the bso-signoff issue property to monitor approval status across issues without needing direct access to the app’s internal storage. The property is standard Jira REST API — any tool that can read Jira issue properties can consume it.
The following scenarios illustrate how to combine the integration points above to solve common approval workflow requirements.
Goal: Require one teammate to approve before an issue can move to Done.
| Step | Configuration |
|---|---|
| Project setting | Enable Business Sign-off, set threshold to 100% |
| Workflow: “Submit for Review” transition | Post-function: Add Approvers (from project role “Developers”) |
| Workflow: “Submit for Review” transition | Post-function: Notify Approvers (all undecided) |
| Workflow: “Done” transition | Validator: Require Approval Passed |
| Workflow: “Done” transition | Condition: Issue Is Approved (hides transition until approved) |
Goal: Require sign-off from both a technical reviewer and a compliance officer, with full audit trail.
| Step | Configuration |
|---|---|
| Global setting | Enable SoD (assignee + reporter), decision locking, comment required on all decisions |
| Project setting | Eligible approvers: Selected Users, filtered by “Change Approvers” group |
| Workflow: “Submit for Review” transition | Post-function: Add Approvers (from “Technical Reviewers” role) |
| Workflow: “Submit for Review” transition | Post-function: Add Approvers (from “Compliance Officers” group) |
| Workflow: “Submit for Review” transition | Post-function: Notify Approvers (all undecided) |
| Workflow: “Approve for Release” transition | Validator: Require Group/Role Approval (Technical Reviewers: min 1 approved AND Compliance Officers: min 1 approved) |
| Workflow: “Return to Development” transition | Post-function: Reset Approval Status (notify = true) |
Goal: Have team members acknowledge a decision without blocking the workflow.
| Step | Configuration |
|---|---|
| Project setting | Enable Business Sign-off, Approval Required = Off |
| Project setting | Threshold = 50%, comment required = None |
| Workflow | No validators or conditions needed — approvals are informational only |
| Usage | Team members add themselves as approvers and approve to acknowledge. No workflow gates. |
Goal: Send a daily summary of pending approvals to a project lead.
| Step | Configuration |
|---|---|
| Jira Automation rule | Trigger: Scheduled (daily at 9 AM) |
| Jira Automation rule | JQL condition: "BSO - Status" = "Awaiting Decisions" AND project = PROJ AND updated < -2d |
| Jira Automation rule | Action: Send email to project lead with list of matching issues |
Segregation of Duties (SoD) is a key compliance control that prevents conflicts of interest in approval workflows. Business Sign-off enforces SoD at the API level — violations are prevented, not just flagged.
SoD rules prevent specific issue participants from serving as approvers:
Real-time enforcement: SoD is not just checked when an approver is added — it is continuously re-evaluated. If the issue’s assignee or reporter changes after approvers have been added, Business Sign-off automatically re-evaluates all existing approvers against the updated SoD rules. An approver who was previously eligible may become ineligible if they are now the assignee or reporter.
Prevention, not flagging: SoD violations are hard-enforced. An ineligible approver cannot record a decision — the app blocks the action and displays the reason. This is stronger than a soft warning that can be overridden.
Visibility in the issue panel: When an approver has a SoD violation, the issue panel displays a warning badge next to their name with a tooltip explaining the reason (e.g., “Cannot approve — user is the issue assignee”). The approver’s decision buttons are disabled.
Audit trail: SoD check results are recorded in every audit entry. Each approver action includes a sodResult field with one of three values: PASS (eligible), FAIL (violation detected), or NOT_APPLICABLE (SoD not configured).
If your organization is pursuing or maintaining SOC 2 Type II compliance, the following configuration provides strong controls for the Change Management and Access Control trust service criteria:
| Setting | Recommended Value | Rationale |
|---|---|---|
| Assignee cannot approve | Enabled (global) | Prevents the person implementing a change from approving it |
| Reporter cannot approve | Enabled (global) | Prevents the requester from self-approving |
| Decision locking | Enabled (global) | Prevents approval withdrawal after issue progresses through workflow |
| Eligible approvers | “Selected Users” filtered by a designated approver role or group | Restricts sign-off authority to authorized personnel |
| Approval threshold | 75% or 100% | Ensures sufficient review coverage |
| Workflow validator | “Require Approval Passed” on production deployment transitions | Blocks deployment without sign-off |
| Audit CSV export | Enabled | Provides evidence for auditor review |
Tip: For production change management, add the Require Approval Passed workflow validator to the transition that moves issues into a “Ready for Deploy” or “Done” status. This guarantees no change reaches production without the required approvals.
For organizations subject to Sarbanes-Oxley compliance, Business Sign-off supports the internal controls over financial reporting (ICFR) requirements:
| Setting | Recommended Value | Rationale |
|---|---|---|
| Assignee cannot approve | Enabled (global) | Mandatory separation of execution and approval |
| Reporter cannot approve | Enabled (global) | Prevents self-authorization |
| Decision locking | Enabled (global) | Ensures approvals are immutable once the issue advances |
| Eligible approvers | “Selected Users” filtered by a designated group (e.g., sox-approvers) | Restricts sign-off authority to authorized controllers |
| Approval threshold | 100% (unanimous) | All designated approvers must sign off |
| Workflow validator | “Require Group/Role Approval” with specific department groups configured | Ensures cross-departmental sign-off (e.g., Finance + IT) |
| Audit CSV export | Quarterly exports for compliance reporting | Provides evidence trail for external auditors |
| Comment requirements | “All decisions” | Documents the rationale for every approval and return |
Note: SOX auditors typically require evidence that controls were in place and operating effectively throughout the audit period. Schedule quarterly CSV exports (see Section 10.4) covering the prior quarter and retain them alongside your other compliance artifacts.
To verify that SoD rules are working correctly in your environment:
FAIL SoD resultTo verify the reporter rule:
To verify real-time re-evaluation:
Business Sign-off sends targeted email notifications to keep approvers and stakeholders informed about approval activity. Notifications are delivered through Jira’s built-in mail system — no external SMTP configuration is needed beyond what Jira Cloud provides out of the box.
/rest/api/3/issue/{key}/notify), which delivers HTML-formatted emails through Jira’s own mail infrastructure.Business Sign-off sends the following notification types:
| Notification | Trigger | Recipients |
|---|---|---|
| Approver Added | An approver is added to an issue | The added approver |
| Approval Requested | “Notify Approvers” action from the panel or a workflow post-function | All undecided approvers (PENDING status) |
| Re-Review Requested | “Request Re-Review” action (resets all decisions) | All approvers (decisions are reset to PENDING) |
| Decision Made | An approver records an approval or return | Reporter and/or assignee (per project config) |
| Outcome Reached | Approval threshold is met (passed) or approval fails | Reporter and/or assignee (per project config) |
| Approver Removed | An approver is removed from an issue | The removed approver |
Note: The Approval Requested notification is not sent automatically when approvers are added. It is a separate action — either triggered manually from the issue panel (“Notify Approvers” button) or automatically via a Notify Approvers workflow post-function. This two-step design allows you to add all approvers first, then notify them once the issue is ready for review.
Notification preferences are configured at the project level in Project Settings (see Section 1 for navigation). There are no global notification toggles — all notification types are available by default, and each project controls its own preferences.
The following notification settings are available per project:
| Setting | Options | Default |
|---|---|---|
| Email approver when added | On / Off | On |
| Email reporter on each decision | Approved Only / Returned Only / Approved or Returned / Never | Never |
| Email reporter on outcome | Approved Only / Returned Only / Approved or Returned / Never | Approved or Returned |
| Email assignee on each decision | Approved Only / Returned Only / Approved or Returned / Never | Never |
| Email assignee on outcome | Approved Only / Returned Only / Approved or Returned / Never | Approved or Returned |
Tip: For most teams, the recommended configuration is: Email approver when added = On, Email reporter/assignee on each decision = Never, and Email reporter/assignee on outcome = Approved or Returned. This minimizes notification noise while ensuring stakeholders are informed when the final outcome is reached.
To prevent notification fatigue, Business Sign-off applies rate limiting to the Approval Requested (reminder) notification:
Business Sign-off maintains a comprehensive audit trail of all approval activity. Every action — adding an approver, recording a decision, resetting approvals, sending notifications — is recorded with full context for compliance and accountability.
To view the audit history for an issue:
Each history entry includes:
| Field | Description |
|---|---|
| Action | The type of action (e.g., Approver Added, Decision Approved, Status Changed) |
| Actor | The user who performed the action |
| Target | The approver affected by the action (if applicable) |
| Timestamp | When the action occurred |
| Comment | The decision comment (for approval/return actions) |
| SoD Result | Whether the SoD check passed, failed, or was not applicable |
| Source | How the action was triggered (UI, Workflow Post-Function, Event Trigger) |
Filtering: Use the filter toggle at the top of the history modal to switch between All History (every action) and Decisions Only (approvals, returns, decision changes, and resets).
Pagination: The history modal loads entries in pages. Scroll to the bottom and click Load More to fetch additional entries for issues with long histories.
Every audit record includes a SHA-256 integrity hash computed from the record’s key fields:
This hash allows you to verify that records have not been tampered with. To validate integrity:
integrityHash column — a mismatch indicates the record was alteredFor the highest level of compliance assurance, Business Sign-off writes critical approval events to Jira issue properties — native Jira data that persists independently of the app’s storage.
Why issue properties matter:
How it works:
bso.approval.audit.NNNN (zero-padded sequence numbers starting at 0001)bso.approval.audit.index) tracks the current sequence numberEvents written to issue properties:
| Event | Description |
|---|---|
DECISION_APPROVED | Approver recorded an approval |
DECISION_RETURNED | Approver returned (rejected) the issue |
DECISION_CHANGED | Approver changed a previous decision |
DECISION_RESET | Approver’s decision was reset |
STATUS_CHANGED | Overall approval status changed |
RE_REVIEW_REQUESTED | All decisions were reset for re-review |
Tip: To inspect issue properties via the Jira REST API, use:GET /rest/api/3/issue/{issueKey}/properties/bso.approval.audit.indexto see the current sequence number, thenGET /rest/api/3/issue/{issueKey}/properties/bso.approval.audit.0001to read individual audit records.
Business Sign-off provides an audit CSV export feature for delivering compliance evidence to auditors or performing offline analysis.
Accessing the export:
Configuring the export:
| Option | Details |
|---|---|
| Projects | Select up to 50 projects to include in the export |
| Date range | Select a start and end date (maximum span: 365 days) |
| Decisions only | When checked, only decision events are included |
Running the export:
Export limits:
Tip: For recurring compliance reporting, establish a quarterly export schedule. Export the prior quarter’s data within the first week of the new quarter and retain the CSV alongside your other compliance artifacts.
The Admin Audit Log records all administrative configuration changes made to Business Sign-off. This provides accountability for who changed what, when, and why.
Only Jira Administrators can access the Admin Audit Log.
| Action | Description |
|---|---|
| Global Configuration Changed | Any change to global settings (with field-level from/to tracking) |
| Project Configuration Changed | Any change to project-level settings |
| Plugin Enabled | The plugin was enabled globally |
| Plugin Disabled | The plugin was disabled globally |
| Export Started | An administrator initiated an audit CSV export |
| Export Downloaded | An administrator downloaded a completed CSV export |
| Diagnostic Logging Toggled | Diagnostic logging was enabled or disabled |
Field-level change tracking: For configuration changes, the audit log captures exactly which fields changed, with from and to values for each field.
The Admin Audit Log supports the following filters:
Expandable rows: Click on any audit entry to expand it and view the detailed field changes with field name, old value, and new value.
Admin audit log screenshot will be added in a future update.
Each admin audit entry includes:
Tip: If the panel still does not appear after verifying all settings, try opening the issue in a private/incognito browser window to rule out caching or extension interference.
Note: Decision locking protects downstream workflow stages that rely on earlier sign-offs. Disabling it should be a deliberate decision.
Note: Diagnostic logging increases log output. Always set the shortest duration that allows you to reproduce the issue.
If you encounter issues not covered in this guide, or need assistance with configuration, compliance setup, or troubleshooting:
General Support
Security Issues
When contacting support, please include:
https://yourcompany.atlassian.net)Tip: Enabling diagnostic logging before contacting support significantly speeds up troubleshooting. Enable it, reproduce the issue, then note the time — the support team can correlate your report with the detailed logs.
Refer to the Support Policy for response time commitments and service level details.