Security Policy

Epic Progress for Confluence ยท Last updated: October 4, 2026

1. Overview

Epic Progress for Confluence ("the App") is built on the Atlassian Forge platform and operates entirely within Atlassian's infrastructure under the Runs on Atlassian trust boundary. It reads Jira and Confluence with the permissions of the person viewing the page, has no write access to Jira or Confluence, makes no outbound network calls to any external server, and stores no credentials of any kind. This document describes the App's security architecture and our practices.

2. Architecture & Runtime Environment

3. Access Control

ControlDetails
Reader's own permissions Every Jira and Confluence read for a page view, a settings preview, a picker, an export or the admin switch runs as the user (Forge asUser). Jira and Confluence apply that person's permissions, including issue security and page restrictions. People without access see a short note, never numbers or names. An automated test fails if a Jira request would run as the app.
App account, two yes/no checks only The App uses its own account (asApp) only for two questions that show no data to anyone: on the admin page, whether Jira is connected; and in the daily snapshot cleanup, whether a page with a snapshot still exists or an app access rule blocks it.
No write access The App requests no write scopes. It cannot create, edit, move or delete any Jira work item or Confluence page, comment or label.
Minimal API scopes read:jira-work (all Jira reads, as the reader), search:confluence (Page Progress: count pages by label, as the reader), read:space:confluence (space picker), read:page:confluence (snapshots: whether the user may view or edit the page, and the daily check whether the page still exists; no page content is read), read:confluence-user (verify that the person changing the app setting is a Confluence administrator; only the permitted operations are used), storage:app (snapshots, the admin setting, anonymous usage counters, a non-personal cache). Six scopes, no admin or write scopes.
Admin setting for Confluence administrators only The switch “Allow published snapshots” changes only after Confluence confirms, at that moment and as the person changing it, that they are a Confluence administrator. If Confluence does not confirm it or does not answer, the setting stays as it is and the admin page says why.
Settings from the page, not from the browser A macro on a page reads its settings from the Forge macro context, which the platform fills from the page and the browser cannot change. Settings sent from the browser (settings preview, pickers) can only query the caller's own data, with the caller's permissions.
Published snapshots Showing a snapshot requires view permission on the page, and publishing, updating and removing one require edit permission, both checked with Confluence as the user at that moment; publishing reads Jira as the user. Snapshots are stored under the page and macro ID from the Forge context, never from an ID sent by the browser, so a reader of one page cannot fetch the snapshot of another. Stored fields are whitelisted: no person fields (no assignees or account IDs, not even of the publisher) and no JQL text; titles and names are kept as the team wrote them in Jira. Reading a snapshot never causes a Jira request; “View live” reads Jira with the reader's own permissions. Someone who may no longer view the page gets a neutral notice instead. Unless a macro turns it off, a snapshot's numbers are updated when someone who can edit the page opens it and the snapshot is older than 15 minutes, read with that person's own Jira permissions (never with the App's account), one update at a time; an automatic update never adds epics, work items or names, never changes which epics a list shows, and a removal always wins over it. Confluence admins can turn snapshots off for the site.
Input validation Work item keys, project keys and IDs from the settings are validated before use, and names and labels enter JQL and CQL only as escaped values. JQL typed by users is limited to 2,000 characters and runs with the reader's permissions.
License enforcement The subscription is checked server-side before any data is shown; if the license state is missing or unknown, the App fails closed and shows a notice instead of data.
Developer access None. We cannot read, access, or export any data stored in your Jira or Confluence site or in the App's Forge storage. All data resides within Atlassian's infrastructure.

4. Data Protection

Data in transit:

Data at rest:

Data minimization:

5. No External Credentials or Integrations

The App does not require or accept any API keys, tokens, passwords, or third-party credentials. There is no configuration that could expose user secrets, and there are no integrations beyond the Atlassian platform itself.

6. Dependency & Vulnerability Management

7. Incident Response

If a security issue is discovered in the App:

To report a security vulnerability, contact support@janekbehrens.de with the subject line "Security Report โ€” Epic Progress". We aim to acknowledge reports within 2 business days.

8. Organizational Security Controls

9. Compliance

10. What We Cannot Access

For complete transparency, we have no technical means to access:

11. Contact

For security questions or to report a vulnerability:
Email: support@janekbehrens.de
Subject: Security Report โ€” Epic Progress

Atlassian, Confluence and Jira are trademarks of Atlassian. Epic Progress for Confluence is an independent app by Janek Behrens and is not made or endorsed by Atlassian; the product names only say which products the app works with.