RFCs are a way for Atlassian to share what we’re working on with our valued developer community.
An RFC is a document for building shared understanding of a topic. It expresses a technical solution, but can also communicate how it should be built or document standards. A written specification facilitates feedback and drives consensus. It is not a tool for approving or committing to ideas, but a collaborative practice for shaping an idea and finding serious flaws early.
Please respect our community guidelines: keep it welcoming and safe by commenting on the idea, not the people, especially the author; keep it tidy by staying on topic; and keep comments constructive. Thanks!
Summary of project
- Publish: 3 September 2026
- Discuss: 4 September 2026 - 24 September 2026
- Resolve: To be confirmed
A bulk operation affecting 1,000 issues can generate 1,000 Forge invocations. Some apps need every event, while others use the events only as a signal to refresh a cache, index, dashboard, or synchronized copy of the affected data.
Jira bulk-operation metadata can help an app identify each event after it has been delivered. The app must still receive and process every event, even when the intermediate states do not affect its result.
We are considering an explicit trigger setting that would let an app receive one notification when the bulk operation finishes and fetch the resulting state once. This could reduce invocation usage, queue backlogs, retries, and app-side code for debouncing or grouping related events. Apps that need every individual event would retain the current behaviour by default.
Jira bulk issue updates are used below as an example. The capability could later support other Atlassian products where a bulk operation and its completion can be identified reliably.
Problem
Forge currently treats each product event independently. When a customer bulk-updates 1,000 Jira issues, a matching avi:jira:updated:issue trigger can be invoked 1,000 times.
Webhooks generated by Jira bulk operations can include bulkOperationMetaData, which lets an app recognize that an individual event came from a bulk operation. For example:
{
"bulkOperationMetaData": {
"sendMail": true
}
}
This improves classification after delivery, but it does not reduce the number of Forge invocations or indicate when the overall operation has finished.
Apps that reconcile by fetching the latest state may repeat the same work for many intermediate events. A burst can consume invocation capacity, create a backlog, and delay other useful processing. Each app must also implement its own debounce or grouping logic without a reliable completion signal.
Earlier Developer Community feedback has highlighted the value of reducing requests through event batching and the invocation pressure created by broad issue-update triggers.
Forge apps cannot currently express:
Skip the individual events from this bulk operation, notify me when it finishes, and let me fetch the final state once.
Proposed solution
We are considering a bulkEvents property on eligible Forge product-event triggers.
modules:
trigger:
- key: issue-updated-trigger
function: handle-issue-update
events:
- avi:jira:updated:issue
bulkEvents: exclude
The setting would support two initial behaviours:
include: Deliver every matching event created by the bulk operation.exclude: Skip the individual events and deliver one notification when the bulk operation finishes.
If bulkEvents is omitted, Forge would use include. Existing triggers would continue to behave as they do today.
For an app that reconciles state after receiving events, exclude could replace hundreds or thousands of invocations with one completion notification. The app could then fetch the final state once instead of reacting to each intermediate change if needed.
A completion notification could contain the operation identifier, product and operation type, outcome, affected scope, and information the app can use to fetch the latest state. The exact payload is open for feedback.
At this stage, we are seeking feedback on whether these delivery choices would solve a meaningful problem for partners. If the feedback supports the approach, we will develop and share the detailed delivery contract before implementation. That contract will cover event types, payloads, ordering, retries, duplicate delivery, and failed or partially completed operations.
The setting would apply only to event types for which the product can provide a reliable bulk-operation completion signal. Jira bulk issue updates are the initial example. Broader product support would depend on those signals being available.
Asks
We would appreciate any feedback, particularly on the following:
- Would you enable completion-only delivery for any triggers in an app you operate today?
- Which app workflows need every individual event, and which only need the final state?
- Would your app need individual events, a completion notification, or both?
- Approximately how many invocations can one bulk operation create for your app today?
- Would completion-only delivery reduce queue backlogs, rate-limit pressure, or app-side debounce and grouping logic for you?
- Which information would you need in the completion notification to fetch or reconcile the final state safely?
- How soon after the operation finishes would your app need the completion notification?
- Would a manifest setting be sufficient, or would you need to configure the behaviour at runtime?
- Which Jira or other Atlassian product operations create the most unnecessary event processing for your app?