outageloop

Data Processing Addendum

App: Outageloop (Jira Cloud, Atlassian Forge, with an external monitoring backend)
Processor: MernPearl Technology Private Limited (CIN U62099RJ2024PTC097952)
Registered office: C/O Sunil Kumar Sharma, Bar Chowk, Pilani, Jhunjhunu, Rajasthan 333031, India
Controller: the Atlassian customer installing the App
Last updated: 1 October 2026


1. Scope and roles

This Addendum supplements the Terms of Service (https://outageloop.mernpearl.com/terms) and applies where MernPearl Technology Private Limited ("Processor") processes personal data on behalf of the customer ("Controller") in connection with the Outageloop app ("the App").

The scope is narrow, and Annex A is the reason: the App persists exactly one category of personal data — an Atlassian account ID — and holds it only in Atlassian Forge hosted storage. The Outageloop backend that Processor operates holds no personal data (Annex B.2). Read Annex A before the clauses, because it determines how much of this Addendum has subject matter at all.

Atlassian is a separate processor of Controller's Jira data under Controller's own agreement with Atlassian. This Addendum does not govern that relationship.


2. Processor obligations

Processor shall:

  1. process personal data only on Controller's documented instructions, which for the App consist of the Controller's configuration and use of it as described in the Terms of Service and Annex B;
  2. ensure that persons authorised to process personal data are bound by confidentiality;
  3. implement appropriate technical and organisational measures, as described in Annex C;
  4. not engage another sub-processor except as disclosed in §3, and give Controller at least 30 days' notice of an intended addition or replacement, during which Controller may object;
  5. assist Controller, so far as the narrow scope in Annex A permits, with data subject requests and with Controller's own obligations regarding security, breach notification and impact assessments;
  6. delete personal data at the end of the provision of services as described in §6;
  7. make available the information necessary to demonstrate compliance with this Addendum (§10).

3. Sub-processors and recipients

See Annex B for the flow-by-flow position. In summary:

Party Role Location Receives personal data?
Atlassian Sub-processor: runs the Forge app and holds all Forge-side App data Per Controller's Atlassian agreement Yes — the account ID in Annex A
Oracle (Oracle Cloud Infrastructure) Sub-processor: hosts the Outageloop backend server, its database and its backups Mumbai, India (ap-mumbai-1) No — the backend holds no personal data
Cloudflare DNS provider for mernpearl.com. Traffic is not proxied, so Cloudflare sees no App data Global No
Third-party status-page operators Not a processor — receives no customer data at all (§4) Various No
Slack Recipient, only if Controller connects a workspace. A customer-initiated integration (§5) Per Controller's Slack agreement No — see Annex B.2(e)

No other third party receives any data from the App. There is no analytics provider, error-reporting vendor or application-performance-monitoring service.


4. Status-page operators are not processors

Processor's backend polls third-party status pages with an unauthenticated GET request carrying no request body, no credential, no Atlassian site or tenant identifier, no user identity and no Jira content. Each service is polled once for all customers. The operator learns only that a request arrived from the backend server's IP address.

Because no personal data and no Controller data of any kind is transmitted, status-page operators are not processors or sub-processors of Controller's data. They are listed for transparency only.


5. Slack

Slack receives data only if a Controller site administrator connects a Slack workspace, using a bot token the Controller itself creates and supplies, to post into channels the Controller nominates.

Processor characterises this as a customer-initiated integration rather than a Processor-appointed sub-processor: the Controller chooses the destination, supplies the credential and can disconnect it at any time. Controller's use of Slack is governed by Controller's own agreement with Slack. In either characterisation, the Slack payload contains no personal data (Annex B.2(e)).


6. Deletion and return of data

Forge hosted storage, which holds the account ID in Annex A, is cleared automatically by the Atlassian platform on uninstall: soft-deleted immediately, retained for a platform-managed window during which a reinstall can relink it, then permanently deleted under Atlassian's own retention policy. Atlassian does not publish a fixed number of days; see https://developer.atlassian.com/platform/forge/storage-reference/hosted-storage-data-lifecycle/

The Outageloop backend is instructed by the App's uninstall handler to delete the installation. That deletes the installation record, callback secret, catalog selections and queued messages from the database and cache immediately. If the instruction fails, the backend deletes any installation it has not heard from in 90 days. Nightly database backups are kept for 14 days, so deleted backend records persist in backups for up to 15 days. None of these records is personal data.

Granular erasure before uninstall is also available: deleting a project-dependency mapping removes its addedBy account ID.


7. Data subject rights

Right How it is satisfied
Access / portability The addedBy account ID is held on the project-dependency mapping in Forge storage. No App screen displays it, so access is served by Processor on request at privacy@mernpearl.com.
Rectification The account ID is written from the acting user's own principal and is not editable; it is corrected by removing and re-creating the mapping.
Erasure Delete the mapping, or uninstall the App (§6).
Restriction / objection Remove the dependency mapping, or uninstall.
Automated decision-making Not applicable. The App makes no decisions about individuals.

Processor will assist Controller with any request it receives directly, and will refer requests about Controller's Jira data generally to Controller or to Atlassian as appropriate.


8. Security incidents

Processor shall notify Controller without undue delay, and in any event within 72 hours, after becoming aware of a personal data breach affecting personal data processed under this Addendum, and provide the information reasonably available to it.

For transparency: the only personal data in scope is held in Forge hosted storage, so most breach scenarios affecting it would be detected and notified by Atlassian under Controller's agreement with Atlassian. Processor's own detection covers the App's code and the backend it operates (Annex B.2).


9. International transfers

The personal data in Annex A stays in Forge hosted storage, where Atlassian hosts it under Controller's agreement with Atlassian, and is not transferred to Processor's backend.

The Outageloop backend is located in India (Oracle Cloud, Mumbai). It holds no personal data. To the extent that any data transferred to it, or any access by Processor's personnel in India, involves personal data originating in the EEA, Switzerland or the United Kingdom, the parties agree that the EU Standard Contractual Clauses (Module 2, controller to processor), together with the UK International Data Transfer Addendum where UK law applies, are incorporated into this Addendum by reference.


10. Audit

Processor shall make available the information necessary to demonstrate compliance with this Addendum. On Controller's written request, no more than once in any twelve-month period (or after a personal data breach), Processor will answer a reasonable written security questionnaire about the App and the backend it operates. On-site audit of the Forge platform is a matter for Atlassian. Processor does not commit to disclosing its internal security-review records or risk register.


Annex A — Personal data processed

Categories of data subject: Atlassian users of Controller's Jira site who attach a dependency to a
project (in practice, project administrators).

Categories of personal data — complete list:

# Data Where stored Purpose
1 Atlassian account ID of the user who attached a dependency (addedBy on the project-dependency mapping) Forge Key-Value Store Attribution — recording who configured a mapping

That is the entire list. The App stores no names, email addresses, avatars, IP addresses, Jira issue content, issue keys, comments, attachments or free-text customer content, in Forge or on the backend.

Special categories: none. Children's data: none.

Transiently, in platform logs: an account ID may appear in Atlassian Forge application log entries — for example when the App records a denied permission check. These are Atlassian platform logs, retained and managed by Atlassian. The App exports them nowhere.

Non-personal data the App also stores in Forge: dependency records (catalog service, category, chosen regions); current status per dependency and per watched region or component; incidents and their event timeline; notification rules (project and Slack channel identifier); notification logs and outbox markers; Slack connection metadata (team ID, team name, connection timestamp); backend registration and opaque source identifiers; onboarding timestamps; and the subscription mirror (tier, limits, evaluation flag).

Non-personal data held on the Outageloop backend: see Annex B.2.

Credentials: the Slack bot token (if Controller connects Slack) and the per-installation callback
secret are held in Forge encrypted secret storage. The callback secret is also held on the backend, encrypted with AES-GCM. Neither is personal data.

Duration of processing: for the life of the installation, then per §6.


Annex B — Processing activities and where controls come from

B.0 The governing rule

Atlassian's SOC 2 / ISO 27001 control inheritance applies only to data within the Forge platform. It does not apply to the Outageloop backend, which Processor operates and is responsible for. See Forge and SOC 2 / ISO 27001.

B.1 Inherited — Forge hosted storage

All Forge-side App data, including the Annex A account ID and the credentials, resides in Forge hosted storage. For that data, the following inherit in full from Atlassian:

Domain SOC 2 criteria ISO 27001 controls Inherits
Vulnerability management CC 6.6, CC 7.1 A 8.18, 8.26, 8.8 Yes — platform runtime
Access control CC 6.1–6.3 A 8.2, 8.5 Yes — tenant isolation, Forge auth
Physical security CC 6.4–6.5 A 7.1–7.14 Yes — Atlassian infrastructure
Network security CC 6.6–6.7 A 8.20–8.21, 8.24 Yes — for the platform
Logging & monitoring CC 7.2, A 1.1 A 8.6, 8.15, 8.16 Yes — platform logs
Data encryption CC 6.1 A 8.12, 8.24 Yes — at rest and in transit, platform-provided
Backup & restoration CC 5.3, A 1.1 A 8.10, 8.13, 8.14 Yes — for hosted storage

Processor does not hold SOC 2 or ISO 27001 certification for the App and does not claim one.

B.2 Processor's own responsibility — the backend and the outbound flows

The Outageloop backend runs on one Oracle Cloud virtual server in ap-mumbai-1 (Mumbai, India), as Docker containers: an API service, a poller, PostgreSQL, Redis and RabbitMQ. It stores:

Data Personal data Retention
Installation record: tenant key (HMAC-SHA256 of the installation identifier with a server-held salt), Forge web-trigger URL, timestamps None Until uninstall; 90 days after last contact at most
Callback secret, AES-GCM-encrypted None (credential) Until uninstall
Catalog selections: which services, regions and components are watched None Until changed or uninstall
Outbound status messages to the installation None Deleted 7 days after delivery or final failure
Global status history of catalog services (public, shared by all customers) None 90 days
Nightly pg_dump backups of the database None 14 days

The flows that leave the Forge platform:

Flow Payload Personal data
(a) Forge app → backend, over Forge Remote (HTTPS, Atlassian-signed token) Web-trigger URL, callback secret, opaque source IDs, catalog selections None
(b) Backend → third-party status pages None — unauthenticated GET, no tenant identifier None
(c) Backend → Forge web trigger (status push, HMAC-signed) Opaque source ID, region/component, status, sequence number None
(d) Forge app → Slack auth.test (only if Controller connects Slack) Controller's own bot token, returned to its issuer None
(e) Forge app → Slack chat.postMessage (only if Controller connects Slack) Slack channel identifier + one line of text None

(a) The backend verifies Atlassian's signed token and derives the tenant key from the installation identifier in it. It does not store or log any user identity carried by the token.

(e) Slack notifications — the only flow carrying customer-derived content. The text is composed from three values only: the display name of the monitored service (e.g. "Stripe"), the event type (opened, resolved or severity changed) and the severity (major or minor). It contains no personal data, no account IDs, no Jira issue keys, no project names and no free-text Controller content:

:red_circle: Stripe is DOWN — incident opened (Major severity).

B.3 Processor's own responsibility — cross-cutting


Annex C — Technical and organisational measures

Stated only where true of the App as built and deployed.

Inherited from Atlassian Forge (Annex B.1), for Forge-side data: encryption at rest and in transit, tenant isolation, physical and network security, platform vulnerability management, logging and backup.

Implemented by Processor in the Forge app:

Implemented by Processor on the Outageloop backend:

Governance and development practices: