Keelcroft / GitLab Issues Sync for Jira / Privacy

Privacy Policy

Effective 30 October 2026 upon publication. GitLab Issues Sync for Jira is published by Keelcroft. Privacy contact: support@keelcroft.com.

This app transfers configured issue content between Jira and GitLab.

Destination permissions govern copies. Source audiences are not preserved, and public destination projects can expose copied content. Pause, unlink and uninstall do not erase those copies.

Scope

This policy explains how GitLab Issues Sync for Jira processes information when installed in Jira Cloud. The app runs entirely on Atlassian Forge. There is no vendor-hosted backend: Forge calls GitLab directly, and no customer data is relayed through infrastructure operated by Keelcroft. The app contains no advertising, no external analytics, and no AI services.

Information read and transferred

Administrators select directions, mappings and creation/import rules. Linked issues are synchronized; qualifying unlinked issues can create a counterpart through an enabled automatic-creation rule or an explicitly started backlog import. Enabling sync alone does not import the backlog. Depending on these settings, data processed or transferred includes:

New connections default descriptions, comments and files to Both directions. Existing description settings are retained; missing legacy comment/file settings remain Off unless explicitly enabled. Formatting conversion supports common Markdown/rich-text constructs, not every GitLab extension. Images remain links rather than embedded Jira media; a copied link does not grant source access.

Authenticated issue/note webhook payloads and provider reads can contain more information than the selected transfer fields. Raw payloads, descriptions, rich documents, comment text and file bytes are processed transiently during a pass, not archived in the event journal. Comment reads stop at five pages of 100 per side; copies are limited to ten per direction/pass, with visible shortening after 30,000 source characters. Files are limited to 10 MiB and three per direction/pass; bytes are buffered before checking size. These are not unlimited-history, streaming-memory or malware-scanning guarantees.

Confidential issues and destination audiences

Confidential GitLab issue export is blocked by default for new, missing and legacy settings, including linked pairs. Blocked confidential rows are excluded before backlog preview titles are collected. A project administrator can explicitly opt in after a warning. The app does not configure Jira issue security or preserve GitLab audiences. Filters, trigger labels and mappings are selection controls, not access-control equivalence.

This safeguard is not a write ACL: confidentiality changes during a pass can race, and a direct write/create may occur before response/read-back refusal. Disabling export does not remove existing copies. Review destination permissions before allowing transfer, including when a source becomes more restricted later.

Durable information stored by the app

The following records use ordinary Forge storage unless identified as secrets. They are not an archive of complete source issues, but identifiers, configuration, failure values and file-access references can still be sensitive.

Credentials

The supplied GitLab access token and generated root webhook secret use Forge encrypted secret storage. GitLab's webhook token and signing token are derived from that root secret. Raw access tokens, webhook secrets and signatures are not returned to the interface or written to application logs. The interface reports token presence rather than its value. Pause clears the webhook secret, not the access token; external token revocation is a separate action in GitLab.

External destinations

Administration, previews and background execution

Administrative operations re-check Jira project administration on the server using the signed project context; license checks also apply to protected controls. Import Jira selection runs as the administrator. Background sync, queued imports and scheduled recovery use the app-permission path and do not freshly impersonate or re-authorize the initiating administrator at every step. These checks do not prove that every destination viewer has equivalent source access.

Backlog preview titles are transient. Pair Preview reads both records but returns only field names, decision/conflict/override codes, mapping problems, timestamp and configured comment/file directions, not field values, authors, bodies, filenames or URLs. It writes no issue or storage record and queues no replay. Sanitized operational errors may still be shown. A preview is not an immutable consent reservation.

Application decision logs contain operational identifiers, outcomes and reason codes, not raw issue content, access tokens, upload references or webhook credentials. This log minimization does not remove the durable configuration, failure values or sensitive upload references disclosed above.

Retention and removal

Contact

Send privacy, access or deletion questions to support@keelcroft.com. Report suspected vulnerabilities to the same address with the subject line “Security”. Include the Jira site, but never send passwords or API tokens.