TuneCraft privacy policy

Effective [date of publication]

The short version

  • TuneCraft runs on Atlassian Forge and keeps its data in Atlassian's Forge storage for your Jira site, in your site's data residency location. It declares no outside network access and sends nothing outside Atlassian.
  • Plugincraft receives none of the data the app reads or keeps. What it can read of the app is technical: the app's logs, and the usage metrics that Atlassian shows a publisher for each site. As for any paid app, Atlassian's Marketplace also gives it your licence and its contact details. An admin can choose to send us a support bundle.
  • TuneCraft stores no email address and no text from your automation flows' settings. The texts people wrote that it keeps are the names of flows, what a Jira admin types as a setting, and, for 30 days, the old and new text of a label change.
  • If a Jira admin turns on the automatic scan, a sender the customer runs pushes the redacted flows to the app's one web trigger, with a key. Section 6 says what it sends, what the app keeps and who holds the key.
  • We don't sell personal information, use it for advertising or use it to train any model.
  • Security, logging, data handling, AI and the data processing agreement are in the Trust center.

This policy explains what TuneCraft: Automation & Site Cleanup ("TuneCraft"), an app for Jira Cloud made by Plugincraft Software Inc. ("Plugincraft", "we", "us"), does with data. It covers the app only. Atlassian's privacy policy covers Jira itself, and the privacy policy of this website covers plugincraft.ca and the support we provide.

Plugincraft Software Inc. (in French, Logiciels Plugincraft inc.) is a company incorporated on October 26, 2026 under the Business Corporations Act (Québec) (CQLR, c. S-31.1). Its Québec enterprise number (NEQ) is 1182711235. We follow Québec's Act respecting the protection of personal information in the private sector and, where it applies, Canada's Personal Information Protection and Electronic Documents Act (PIPEDA).

Who to contact

The President of Plugincraft Software Inc. is the person in charge of the protection of personal information. For any question, request or complaint about your personal information, write to the President at info@plugincraft.ca. Put "Protection of personal information" in the subject line.

Roles

Your organization decides how TuneCraft is used and is the controller of the personal data in it. Plugincraft provides the software that processes that data on your behalf, as your processor. Our Data Processing Agreement sets out the terms. Atlassian hosts the app on its platform and is its only subprocessor (see Subprocessors).

1. What TuneCraft reads

Unless a line says otherwise, the app reads Jira as the person using it, with that person's own Jira rights.

2. What TuneCraft stores, and why

The app stores the following in Atlassian's Forge hosted storage for your site. Names and texts that a line does not list are not stored.

DataWhy
For each flow scanned: its id, name, trigger type, project ids, creation day, Jira's setting for its failure emails, for a scheduled flow its runs a month by its schedule (estimated), the Atlassian account ids of its owner and actor, a fingerprint of its structure, its score and its estimated step countsTo list findings by flow, tell owners, and recognize the flow in later scans
For each scan: the account id of the person who made it (or the app, for an automatic scan), when, and its totalsTo show the history of scans
For a scan a Jira admin starts: each flow's structure (its steps, their order and settings), every text replaced by a keyed hash; in clear only numbers, true or false, the export's own words (an advanced schedule's cron included), Jira's own field names, project ids, and a basic schedule's frequency, start and end. Beside it, the account ids its steps nameSo Jira admins can optimize a flow or all flows at once, and follow a flow from scan to scan without choosing the export again
For each flow of the last finished scan, and of the one being made: what it uses (the fields, options, statuses, projects, versions, components, work types, priorities, resolutions, link types, labels, filters and groups it names), each by Jira's id or by a keyed hash of its name, and how it uses it; counts for governance (web requests, credentials, fixed email addresses and those outside your organization's domains, whether a scheduled flow searches and how many work items it finds, a missing owner, an actor who is a person); what it names that Jira no longer has; how many of its JQL texts Jira refused. Never an address, a host, a header, a value or a JQL text. A keyed hash is a pseudonym, not a secret from whoever holds the database: the key is kept in the same storage, so a short name can be found again by trying candidates. A value that looks like a person is never hashed into this recordSo Jira admins can see which flows use something before they remove or change it, review credentials, email and owners, and fix flows that fail or never act
From the automation audit logs chosen with the exports: for each flow, numbers and calendar days only (runs and how they ended, steps billed, run time, the day of the last run and of the last failed run); the site's runs and steps a day, by product; and, from a log that lists every run, the time of its newest run: one time for the whole log, with no flow, run, person or work item beside it, kept only when that log's last day is the day of the scanTo show which flows fail, are stopped by Jira's limits, run without doing anything or no longer run, to show usage beyond the 90 days Jira's log holds, and to forecast the month
For each paid seat of a user export a Jira admin chooses: the account id, the last day of use and whether the person is a product adminSo Jira admins can see paid seats nobody uses and product admins who have not been active
For each action on the To do page: its status, the account id of the Jira admin who set it, and the key of the work item a Jira admin linked to itSo Jira admins can track the clean-up they decided on
For each notice sent to a flow's owner: the flow (for a filter whose JQL Jira refuses, the filter's Jira id), when, the key of the Jira work item, the account ids of the person told and of the person who sent it, and what it was about. Not its text, which is in Jira, where everyone who can browse the project can read itTo list the notices sent about a flow
For each alert sent: its key (which kind of alert, for which product and period), when, and the key of the Jira work item. No account id. Not its text, which is in Jira, where everyone who can browse the project can read itTo list the alerts sent, and so that no alert is sent twice
Settings a Jira admin enters: the plan, number of users, the groups allowed, your organization's email domains, the alert settings (project, work item type, language, flow names or ids) and the account ids of the people alerts mention, naming conventions for filters, dashboards and sprints, the two numbers of days after which Sprints left behind counts a sprint as left behind, targets for checks (a number, with the account id of the Jira admin who set it) and guidance for checks (text the admin typed, 500 characters at most); the cost model's values, which a person at the Manage level may also save; and, beside each setting, the account id of the person who last saved itTo compute estimates, decide access, tell addresses inside your organization from those outside, create alerts, and record who last saved a setting
For the clean-up tools, while a Jira admin keeps a tool's checks on: configuration and counts by Jira's id (never a name), with when each was read, a row for each day a count changed, and a code made from a name with your site's key where copies must be found (custom fields, statuses, work types, priorities, resolutions, link types, workflows), and, for a custom field, the codes of the names it has had. For a filter or dashboard also its owner's account id and whether that owner is active. For a space's lead, the account id, only while Jira says the lead is inactive. For each person a permission scheme grants a permission to by name, active or not, the account id and the permission's keyTo show what is unused, copied, broken or near a limit, and when a count would reach Jira's cap
The record of each change a clean-up tool made in Jira: the tool, when, the kind, the account ids of the Jira admin who made it and of a new owner, how many objects, the result, and until when it can be undone; for each object, Jira's id, its state and what an undo needs (ids, never names; for a rename, keyed hashes of the old and new name; for a deleted status, a keyed hash of its name and description, made with your site's key, so that a status renamed since it was confirmed is left as it is; for a deleted workflow or workflow scheme, how many workflows or statuses the delete left unused, as counts; for a repaired filter, keyed hashes of its JQL before and after, made with your site's key, never the JQL)So Jira admins can see what TuneCraft changed and undo it while Jira allows
For each label change: the old and new label (the labels' text, 255 characters at most each) and the ids of the work items it changedSo the change can be undone or carried on within 30 days, without a file
For each merge of one field into another a Jira admin makes (Fields > Merge fields), and each preparation of the field to keep (options, spaces of a context, screens added): the ids of the two custom fields, counts, and the ids of the work items, options, spaces or screens it touched, each with a code for what Jira answered. The values a merge copies pass through the app's memory and are never stored or logged; no field name, option text or work item key or summary is keptSo the change can be carried on, checked and undone; kept as the record says in section 5
For each label change, how far it has got: the keyed hashes of the old and new label, its state and counts, and, while the run is open, the id of the last work item it handledSo a label change can run in slices, be stopped, carried on or undone, and show its counts; kept 400 days, except the last work item's id, which goes when the run stops and in any case after 30 days
For an Attachments reading: counts of work items, files and bytes by space, file type and month, the copies found on one work item (counts), the ids of the 100 work items whose attachments take the most space, and, for a reading of picked spaces, the account id of the Jira admin who started it. Never a file name, a work item's text or a space's nameTo show where attachments take space and which work items hold copies
While an archive or stale-backlog run is open (if nobody finishes or stops it, until 400 days after it was last written): how it was started, its mode and, for a stale backlog, the space ids, a day and a status id. The work items' ids and states are in the record of changes above. Never a key, a summary, a filter's name or a JQL textSo the run can be stopped or carried on, and each batch of a stale backlog is checked again before it is written
The ignore list: for each proposal a Jira admin chose not to see again, the tool, the kind of object and Jira's id (for a flow, its id and the finding), the account id of the Jira admin who ignored it, the day, a reason code and the day it ends, if it has one; for a person who is ignored, that person's own account id. Never a nameSo an ignored proposal is not made again
The watch list: for each field, space or filter a Jira admin put on watch, its kind and Jira's id, the account id of the Jira admin who added it, the day, 30, 60 or 90 days, the last day it was seen used and the day of the last check. At most 100 rows. Never a nameSo a Jira admin can see whether something is still used before removing it
The change history: for each change a background reading saw in Jira's configuration, the kind, Jira's id and the day. Never a name, a query or a valueSo Jira admins can see what changed on their site, and when
For the automatic scan: a one-way hash of the key's secret; the parts of a push in progress, which hold the flows as the sender sent them (see section 6); a record of each push in progress or just ended (its id, start time, state and counts); and the result of the last push (counts) with the time it was savedTo accept a push only from a sender with the key, to save the scan, to answer a part sent again without saving it twice, and to show a Jira admin what happened
The account ids the app stores, with when each was last stored and reported to AtlassianFor Atlassian's personal data reporting (section 5)
Runs and steps a month measured for some flows (typed by a person at the Manage level, or counted from an audit log): the flow's id, the numbers, where they came from and the day measuredTo use real numbers in place of estimates
For each fix that a scan confirmed: the flow's id, the finding, the steps saved, the day, the ids of the scan that confirmed it and, if one did, of the scan that found it undone, and the flow's name while the scan that confirmed it is keptTo show the steps that fixes saved, and which fixes a later scan found undone
For each scan: how its flows are linked (which can start which, copies, shared triggers, loops), by flow id; and how far the comparison of the scan with the one before has got (scan ids, a flow id, counts)To show how flows relate, and to tell which fixes a scan confirmed or reverted
For a trial: the id of the one flow Optimize may prepare a fix for, a fingerprint of its structure and the scan it was chosen from; and how many objects each clean-up tool has changedTo keep a trial within its limits
For each day the tools home was opened: the whole numbers of the tools' cards (objects and findings counted by tool and severity, and the share of the nearest limit). Numbers and days onlySo the Tune score can be compared with the day before
For each background check: its state, where it stands (Jira's ids and offsets), counts, Jira points and times, and the short code of its last failure; and, for each day, what it did (passes finished, tries that failed, points spent). No name and no account idTo carry a check on from where it stopped, keep to the points budget, and show a Jira admin what the checks did
Counts of the app's own maintenance runs, and its own Jira points a day by kindTo keep the app's storage tidy and show an admin what the app costs

Flow names are text your team wrote. They are kept so that reports can name the flows. Kept flows are for Jira admins only. TuneCraft does not use your data for anything else, does not sell it, does not use it for advertising, and does not use it to train any model.

3. Where it is kept

All the data the app stores is in Forge SQL, Atlassian's hosted database for Forge apps, which belongs to your installation. It stays in your Jira site's data residency location and moves with the site if an admin changes that location. The app declares no outside network access, no remotes and no external fetch, and has no MCP tools and no REST API other than the automatic scan's web trigger. Its one remote entry point is the web trigger of the automatic scan (section 6). Plugincraft has no servers of its own. See Data Handling: Retention and Deletion.

4. Who can see it

In the app. The people your admins allow: Jira admins, members of the groups they allow, and a project's admins for that project's flows only. The clean-up tools are for Jira admins only. Jira's permissions apply to everything the app reads or changes in Jira as a person.

In Jira. The app creates Jira work items for alerts, owner notices and the To do page. Alerts are created as the app (Jira shows the app as the reporter), in the project and work item type that a Jira admin picked and may create in. Everyone who can browse that project can read them. They mention the people the admin picked, so Jira notifies them, and only those who can browse the project. By default they name flows by their ids only; a Jira admin may turn names on. Owner notices are created as the person who sends them, who needs the Manage level, and the To do page's work items as the Jira admin who confirms them.

Plugincraft. Plugincraft receives none of the data the app reads or keeps. What it can read of the app is technical, and it is more than the logs:

A site admin can turn off the publisher's access to the app's logs in Atlassian administration.

Requests from authorities. Plugincraft holds no copy of the data you store in TuneCraft: it stays in Atlassian's storage for your Jira site. If a court, the police or another authority asks us for that data, we refer the request to you or to Atlassian. If a request concerns you, we tell you before we answer it, unless the law forbids it, and we disclose only what the law requires.

5. How long

6. The automatic scan

A Jira admin may turn on the automatic scan. Then a sender, a script the customer runs, reads each rule's real text with the customer's own Atlassian API token, redacts it on the customer's side by rules at least as strict as the browser's, and pushes the result to the app's web trigger, in parts of at most 58,000 bytes. A rule the sender cannot redact is not sent and is counted. The app records such a scan as made by the app, not by a person, and keeps what it receives as it does for a scan a Jira admin starts.

The customer chooses where the sender runs: on its own systems, or as a scheduled job in ScriptRunner Cloud, a script app from another publisher that the customer has installed on its Jira site. In that case ScriptRunner reads the rules' real text and holds the customer's API token, under the customer's own agreement with that publisher, before anything reaches TuneCraft. The token never reaches TuneCraft or Plugincraft.

What the app receives. For each flow: its id, name, whether it is turned on, the account ids of its owner and actor, its project ids, its steps with every text in their settings replaced by a placeholder, the account ids those steps name, Jira's ids, keyed hashes and counts. Flow names are text your team wrote; they are kept and shown as written. The app never receives a text from a rule's settings: it checks every flow when it arrives and again before it saves the scan, and one flow that is not redacted refuses the whole push, with nothing of it kept.

The web trigger. It is the app's one remote entry point. It takes a POST only, with a key in the Authorization header, and answers with one of ten fixed replies (accepted, unauthorised, unlicensed, too large, bad request, out of order, replayed, limit, try later, error), never with data. It refuses a push without a licence for the app (a trial counts), more than 6 pushes a day for the site, more than two open pushes at once, a request over 150 KB, and a push of more than 800 parts or 20,000 flows.

The key. A Jira admin makes the key on the Automatic scan card of the Scan page and sees it once. It has two parts. One is a secret that the sender sends with each push to show that it may; the app keeps only a one-way hash of it, made with the site's id and a secret of the app's own that is held in an encrypted Forge variable. The other is the site's scan key, the key behind every keyed hash in this policy, which the sender needs to make the same keyed hashes as the browser; the app also keeps it in its storage, and the browser of anyone who scans receives it. Whoever holds the whole key can push scans to the app, and can test guesses against a keyed hash (a pseudonym), so keep it as you keep the API token, in the sender's secret store. Replacing the key or turning the automatic scan off stops the old secret at once. It does not change the scan key.

While a push is under way. The parts of a push wait in the app's storage until the last one has arrived and the app has saved the scan; then they are deleted. A push that never finishes (a sender that stopped) is removed by the daily maintenance once it is an hour old, three hours old if the app had begun to save it, or 26 hours old if the sender asked the app to keep it open for several runs. The waiting parts hold the same data the saved scan will, including the account ids of owners, actors and the people the steps name. Those ids are added to the list that the app reports to Atlassian when the scan is saved: for the hours a push waits they are not on it, and a push that never finishes is deleted without having been reported.

7. Logs and support

Atlassian keeps the app's technical logs, which Plugincraft can read to fix problems. They hold ids of the app's own records, counts, states and error codes only, never the content of your flows, names or email addresses. Atlassian keeps app logs under its own retention rules (its documentation says logs are available for the past 30 days). See Data Logging.

When you write to us, we keep your message, your email address and anything you choose to include, as the privacy policy of this website describes. Each admin decides whether to send a support bundle.

8. AI features

On a site with Rovo, TuneCraft has an AI helper, the TuneCraft helper, that a person opens from an Ask Rovo button. It is Atlassian's Rovo: the model is the one Atlassian provides on its platform, and TuneCraft sends nothing outside Atlassian. The prompt from the button names what the person is looking at by its id (a flow, field, filter or space number, never JQL, a label's text or a secret). To answer, the helper asks TuneCraft for what the person may see: counts, ids, the findings and savings of the last scan, and names the person's own pages already show. Those answers go to Rovo and are shown to that person only. The helper never changes Jira. On a site without Rovo, the app has no AI feature. See the AI Usage Policy.

9. How we protect it

Access to our accounts and records is limited to the people who need it and protected with strong passwords and two-factor authentication. The app relies on Atlassian's security for everything it stores. To report a vulnerability, see the Security overview. How we handle incidents is in Incident Response.

If a confidentiality incident involving your personal information creates a risk of serious injury, we will tell you and the Commission d'accès à l'information du Québec promptly, as the law requires. We keep a register of every incident.

10. Your rights

Requests about personal data in TuneCraft (access, correction, deletion) go to your organization's Jira admins, who control the data. They can view it in the app, and a person at the Manage level can delete scans on the History page. We help them as your processor.

For personal information that Plugincraft itself holds, you can ask us to tell you what we hold about you and give you a copy, to correct anything that is wrong, to delete what we no longer need, and to stop using it for a purpose you agreed to. Write to info@plugincraft.ca. We may ask you to confirm who you are. We answer within 30 days, and it's free. If you aren't satisfied with our answer, you can complain to the Commission d'accès à l'information du Québec or the Office of the Privacy Commissioner of Canada.

11. Children

The app is meant for businesses and is not aimed at children under 14. We don't knowingly collect their information.

12. Changes to this policy

If we change this policy, we'll update the date at the top of this page. If a change is significant, we'll also announce it on this page before it takes effect, and in the app's "What's new".

13. Language

This policy is available in English and French. Both versions have the same value.