The short version
- Change history is read in your browser, as you. If Jira will not show you a work item, the app cannot show it either. The exceptions, scheduled reports, a few lookups that need a permission most people lack, and background jobs, are described below.
- Restoring and reverting write as you, so Jira enforces your create, edit and transition permissions, and the audit trail names you.
- Deleted items are filtered by the projects you can browse, checked as you on every request. A secured one is shown only when Jira confirms you are in its security level. Jira administrators see every one.
- The app declares no egress permission. Forge blocks external calls at the platform level, so the app itself never sends your Jira data outside Atlassian, to the vendor’s servers or anywhere else. If people use the app’s Rovo agent, Atlassian Rovo writes its answers under Atlassian’s own terms, using Atlassian’s sub-processors.
- The vendor sees the operational logs described under Logging, which an organization admin can switch off, and the usage metrics and installation details Atlassian gives every app’s developer, which hold no Jira data.
- Only the data the features need is stored, inside your own Atlassian site.
How each action is authorised
| Action | Runs as | Jira check |
|---|---|---|
| Run a report, page through it, search it | You, in your browser | Browse project and issue-level permissions, applied by Jira’s own API |
| Export the current report | You, in your browser | Only the rows the report already loaded |
| Revert a change | You | Edit permission for a field. For a status, your Transition work items permission plus the workflow’s conditions and validators |
| List deleted items | The app reads its storage, then filters | Your Browse projects permission, checked as you, before anything is returned. A secured item is shown only when Jira confirms you are in its security level: the app compares Jira’s counts at that level as you and as the app. Jira administrators see every secured item. Anyone else sees a short note, naming nothing, when something at a security level was left out |
| Preview or restore a deleted item | The check runs as you, the work item is created as you | Your browse permission, then your create permission and the project’s create screen. A secured work item comes back at its security level, so restoring it also needs you to be able to set that level; otherwise nothing is created |
| Comment history, viewer history | The app reads its storage | The app first reads the work item as you. If Jira refuses, nothing is returned. Comment history then keeps only the comments Jira would show you: a comment still on the work item when Jira lists it for you, a deleted one when you are in the project role or group it was restricted to |
| Re-post captured comments on a restored work item | You | Your permission to comment on the new work item. A comment restricted to a project role or group comes back with the same restriction, so Jira refuses it if you are not in that role or group |
| Post a report link as a comment | You | Your permission to comment on that work item |
| Ask the Rovo agent about history or secrets | You, in the app’s backend | Jira’s own permissions, as for a report, plus the History reports or Security scanner feature permission and an active subscription, checked on the server |
| Ask the Rovo agent about deleted items | The app reads its storage, then filters | The Deleted work items feature permission and an active subscription, then your Browse projects permission and the item’s security level, checked as you, as on the Deleted items tab |
| Sign an export | You | The Export feature permission and an active subscription, checked on the server |
| Verify a signed export | You, on the admin page | Jira’s ADMINISTER permission, checked on the server, because a record holds the query, the names in its Report line and the signer’s reason |
| Create or run a scheduled report | You | An active subscription and the History reports and Export feature permissions. Run now also needs you to be the owner or a Jira administrator. Saving captures the projects you can browse and the issue security levels you can see, and the delivery work item must open for you |
| Delete a scheduled report | You | Owner or Jira administrator |
| Change any setting, redeem or remove a code, start a backfill, erase tracking data | You | Jira’s ADMINISTER permission, checked on the server for every call |
Where the app acts as itself
Some work has no person behind it, so it runs with the app’s own access rather than a user’s:
| What | Why | What it does |
|---|---|---|
| Snapshot and delete triggers | So a deletion can be undone | Reads the work item that was created or updated. When one is deleted, it keeps that last snapshot and reads nothing more. Writes to the app’s own storage (on Atlassian’s cloud, inside your Jira site. The app sends no data outside Atlassian, and nothing is stored on Astrospray’s servers.) Jira sends no event for a comment restricted to a role or group that leaves out the app, so those comments are not captured. |
| Comment trigger | Comment history | Records the comment that was added, edited or deleted, reading it from Jira only when the event leaves the text out, and writes to the app’s own storage (on Atlassian’s cloud, inside your Jira site. The app sends no data outside Atlassian, and nothing is stored on Astrospray’s servers.) |
| View trigger | Viewer history | Records who opened a work item and when. Reads nothing from Jira |
| Backfill | Started by an administrator | Reads the fields of every work item the app can see, and writes snapshots to the app’s own storage (on Atlassian’s cloud, inside your Jira site. The app sends no data outside Atlassian, and nothing is stored on Astrospray’s servers.) A work item at a security level that leaves out the app gets no snapshot, so if it is deleted it may not be captured at all, or only partly. A partial capture is shown only to Jira administrators |
| Scheduled reports | A scheduled run has no user, and Run now uses the same path | First checks that the owner still has History reports and Export (an owner who was a Jira admin when they last saved the schedule still passes after they stop being one, or after their account is closed or deactivated), and that the delivery work item is still in a project and security level the creator could see; otherwise nothing is read. Then reads change history, limited to the projects and security levels the schedule’s creator could see when they saved it, in the search and again on every row. JQL whose brackets or quotes don’t pair up is refused, because it could get past those limits. Then attaches the file and adds a comment on the chosen work item. Jira shows the app as the author. Nothing runs while the subscription is inactive |
| Group and name lookups | Reading group members and display names needs a permission most people lack | Returns only account IDs for the groups picked in a Changed by group filter (for people with History reports, and for scheduled runs), and display names for the people the app shows: Deleted by, comment authors, viewers and restored items. Never email addresses |
| Rovo agent links | A Rovo action isn’t told which site it runs on | Reads your Jira site’s address, so an answer can link to the full report. Nothing else |
| Weekly personal data report | Atlassian requires it of apps that store account IDs | Sends the account IDs the app holds to Atlassian’s privacy service, then looks up the new display names of people who changed them. Reads no work items |
| Erasing tracking data for one project | Started by an administrator | Lists the work items currently in that project that the app can read, to find their view records (comment versions are matched by the project stored with them). If Jira stops answering while it lists them, nothing is erased. View records of work items since moved out or deleted, or at a security level that leaves out the app, aren’t erased this way; a site-wide erase removes them. A very large erase can stop part way; running it again carries on from what is left |
See Scheduled reports for how a schedule is kept within its creator’s reach.
Feature permissions
An administrator decides who can use each of six features (history reports, export, revert, deleted items, security scanner, viewer history): everyone, Jira admins only, or named Jira groups. The security scanner starts as Jira admins only, because it gathers every secret a person can see into one list; the other five start open to everyone. See Admin settings for exactly what each one controls.
Be precise about what this is. Wherever the app’s backend serves the data, the check runs on the server:
- Deleted items and viewer history, which read the app’s own storage (on Atlassian’s cloud, inside your Jira site. The app sends no data outside Atlassian, and nothing is stored on Astrospray’s servers.).
- History reports for saved views, the group lookup behind the Changed by group filter, and scheduled reports.
- Export for signing an export and for scheduled reports, which deliver a file.
- The Rovo agent’s three actions, each checked against the matching feature.
A work item’s own history and comment history aren’t among the six features: they follow Jira’s own permissions for the work item and each comment.
Reports, exports, revert and the scanner otherwise run in your browser against Jira’s own API. There the restriction is applied in the app’s interface: a blocked person gets no Reports tab and no download or revert buttons, and the Changes tab, the issue search action and the dashboard gadgets show a short note instead of any data. Jira’s own permissions remain the real boundary on the data itself, so nobody gains access to Jira data through the app that Jira itself would not give them.
If the app can’t load your permissions (a network or service error), it fails closed: reports, exports, revert, deleted items, viewer history and the scanner stay shut, and the page says to reload. An error never opens a feature an administrator has restricted.
What is stored, and for how long
| Data | Why | Where | How long |
|---|---|---|---|
| Change history | Not stored at all. Read live from Jira, in your browser | In memory, while the page is open | Until you close the page |
| Work item snapshots | So a deleted item can be restored with its fields | Forge storage on your site | One per work item, replaced on each change, for as long as the work item exists. When it is deleted, the snapshot becomes its deleted-item record. When a whole project is deleted permanently, Jira sends no deletion for its work items, so their snapshots stay until the app is uninstalled (closed accounts are still erased from them each week) |
| Deleted-item records | The Deleted items list and restore | Forge storage | The retention setting (default 90 days, 1 to 365), counted from the deletion, then removed automatically. Restoring doesn’t restart the count |
| Comment versions (on by default; an administrator can turn this off) | Jira keeps no record of comment edits or deletions. Each comment’s role or group restriction is kept with it | Forge storage | Up to 50 versions per comment, until erased by an administrator, or the app is uninstalled |
| View records (on by default; an administrator can turn this off) | To show who opened a work item | Forge storage | The most recent 500 per work item, until erased by an administrator, the person’s Atlassian account is closed, or the app is uninstalled |
| Saved views and settings | So reports and configuration persist | Forge storage | Saved views until their owner deletes them; settings until an administrator changes them. Both until the app is uninstalled |
| Scheduled reports | The name, query, owner and their display name, whether the owner was a Jira admin when they last saved it, timing, file format, delivery work item, the projects and security levels it may cover, when it was created, and the time and outcome of its last run | Forge storage | Until deleted, or the app is uninstalled |
| Signed-export records | The SHA-256, file name, size, rows, who signed it (account ID and name), when, the reason given, and the report behind it: the query, its JQL, and the Report line with the names of any people it filters on | Forge storage | Until the app is uninstalled |
| Onboarding progress | Whether each person has seen the first-run guide, the tour and the latest What’s new, and whether they have been asked for a review | Forge storage | Until the app is uninstalled |
| Backfill progress | The status line on the admin page | Forge storage | Until the next backfill |
| A redeemed access code | To record the grant and which administrator redeemed it | Forge storage | Until removed. Once expired it is ignored |
| Account list for Atlassian’s privacy reporting | The account IDs the app holds, with the oldest time each one’s data was stored (or its last refresh, if later) and Atlassian’s latest answer, so they can be reported each week | Forge storage | Until no stored record mentions the account, the account is closed, or the app is uninstalled |
| Privacy report progress | Where the weekly report has got to, and when it last started | Forge storage | Until the app is uninstalled |
| The projects you last reported on | So the explorer opens on them next time | Your browser only, never sent anywhere | Until you clear your browser’s site data |
Scheduled report files and their summary comments are stored in Jira itself, on the work item each schedule delivers to, like any other attachment and comment. A dashboard gadget’s settings are saved by Jira with the dashboard.
Closed Atlassian accounts. Every week the app reports the Atlassian account IDs it holds to Atlassian’s personal data reporting API, as Atlassian requires of apps that store account IDs. When Atlassian answers that an account has been closed, the app erases that person’s view records and their first-run guide progress, removes them as assignee, reporter and “deleted by” on work item snapshots and deleted-item records (and from user fields captured there), and shows them as Former user on comment versions, signed-export records (including the names in their Report line), saved views and scheduled reports, in the Changed by filters of saved views, schedules and signed-export records, and in @mentions in captured descriptions and fields. When a person’s profile changes, the stored display name is refreshed in the same places. Captured comment text is kept as plain text, so a name written or @mentioned in a comment stays as it was, and so does an account ID written into a saved JQL query (in a saved view, a schedule or a signed-export record). User fields in snapshots keep only the account ID and display name, never an email address.
Forge storage is kept on Atlassian’s cloud, separately for each site. If your site is pinned to a data residency region, the app’s storage is kept in that region too.
Scopes
The app requests eleven Atlassian scopes and nothing else:
| Scope | Used for |
|---|---|
read:jira-work |
Reading work items and their change history |
write:jira-work |
Creating a restored work item, moving it back to its old status and re-posting its captured comments; writing a revert; posting a report link as a comment; and attaching scheduled report files with their summary comments |
read:jira-user |
Display names, such as the Deleted by column; group membership for feature permissions (yours, and a scheduled report owner’s) and comment restrictions; the group picker on the admin page |
storage:app |
The app’s own storage described above (on Atlassian’s cloud, inside your Jira site. The app sends no data outside Atlassian, and nothing is stored on Astrospray’s servers.) |
report:personal-data |
The weekly report of stored account IDs to Atlassian, so closed accounts are erased and changed names refreshed (see Closed Atlassian accounts above) |
read:board-scope:jira-software |
Listing boards for the report’s sprint picker, read as you |
read:project:jira |
Which projects those boards belong to. Atlassian requires it alongside the board scope |
read:sprint:jira-software |
Listing each board’s sprints for the sprint picker, read as you |
read:group:jira |
Reading who is in the groups picked in a Changed by group filter. Jira requires this scope and the next two together for that one lookup |
read:user:jira |
The same group lookup. The app keeps only each member’s account ID |
read:avatar:jira |
The same group lookup. Jira requires it alongside the other two; the app reads no avatars |
There is no permissions.external entry, which is what makes the “no egress” statement enforceable rather than a promise.
Logging
The app’s backend logs operation outcomes, error types and counts, and it records work item keys, comment identifiers and scheduled report names so a failed operation can be traced. The app does not write field values, summaries, descriptions or comment text to its logs. When a call fails, the error message Jira or the platform returned is logged, shortened to a few hundred characters. Logs are held by Atlassian on its own schedule. Atlassian shares an app’s logs with its developer by default, through Atlassian’s developer tools; an organization admin can switch this off in Atlassian Administration, under Connected apps. Atlassian also gives every app’s developer usage metrics and installation details, for example how often the app’s functions run and fail, and which sites it is installed on. These hold no Jira data.
Exports
Export files are built in your browser from the report data it has already loaded, which can be more rows than the table shows at once, and saved to your own machine. They are not uploaded anywhere. Signing an export sends only its fingerprint and the details listed above to the app’s storage on your site, and saves a short receipt to your machine. An unmasked scanner export contains real secrets, and the file itself says so in its header; handle it accordingly.
Uninstalling
Uninstalling ends the app’s access to its Forge storage for your site, including snapshots, deleted-item records, comment versions, view records, saved views, scheduled reports, signed-export records and settings. Atlassian keeps that storage for 28 days after uninstall, then deletes it. A reinstall starts empty. To have it reconnected to your earlier data, contact us promptly: Atlassian must receive the request within 21 days of uninstalling. Work items you already restored stay in Jira, because they are ordinary Jira work items, and so do scheduled report files and comments already delivered.
To remove comment versions and view records without uninstalling, an administrator can use Erase captured tracking data on the admin page. See Tracking.
Limitations
- Deleted-item visibility is checked per project and per issue security level, as the person asking. A secured item is shown only when Jira confirms they are in its level: the app counts the work items at that level in that project, leaving out ones they reported or are assigned, once as them and once as the app, and the two counts must match and be above zero. If Jira can’t confirm it, for example because no other work item is left at that level, the item stays hidden, and the list says something was left out without naming it. Jira administrators see every secured item. A deletion the app only partly captured (the work item was never snapshotted, and Jira’s delete event doesn’t carry its level), or one the app could no longer read after a later change (so its last snapshot may be out of date), is shown only to Jira administrators. Running the backfill after installing snapshots every work item the app can read. A work item at a security level that leaves out the app can’t be snapshotted, so if it is deleted it may not be captured at all, or only partly.
- When a whole project is deleted permanently, Jira sends no deletion for each of its work items, so they don’t appear under Deleted items, and their snapshots stay in the app’s storage until the app is uninstalled. Closed accounts are still erased from them each week. A project moved to the trash and restored needs nothing: Jira brings its work items and comments back.
- The app is not a backup product. It captures snapshots for restore. A restored work item gets a new key, today’s date and the person restoring as its reporter, and it doesn’t bring back attachments (the files are deleted with the work item), links, logged work or the change history. Comments come back only as copies re-posted by the person restoring.
- The vendor has no access to your Forge storage and no endpoint to receive your data, so vendor-side deletion requests are not applicable. Deletion is a Jira and Forge operation. The vendor sees the operational logs described under Logging, which an organization admin can switch off in Atlassian Administration under Connected apps, and the usage metrics and installation details Atlassian gives every app’s developer (for example how often the app’s functions run and fail, and which sites it is installed on), which hold no Jira data.
- Answers from the app’s Rovo agent are written by Atlassian Rovo from what the app’s actions return, under Atlassian’s own terms, using Atlassian’s sub-processors. The app itself sends nothing outside Atlassian.