Jira labels
The complete catalog of labels WASViking writes on Jira issues, the rules the sync follows, and a playbook for organizing boards, automation and reporting by team.
Every issue the Jira integration creates carries a small set of labels that say where the finding came from, what kind of weakness it is and which repository or application it belongs to. The labels exist so that a team can pick up its own work from a board filter, an automation rule or a dashboard without opening the card.
This page is the reference for those labels: the full catalog, the rules the sync follows, and the patterns teams use to organize security work around them.
The grammar
All labels follow one shape:
wasviking
wasviking-<facet>-<value>
wasvikingis on every issue the integration creates.<facet>is one ofarea,category,repo,apporplatform.<value>is lowercase and hyphenated. It never contains a space, because Jira refuses a label with a space in it.
The namespace is deliberate. Your own labels, such as sprint-42,
needs-review or team-payments, never collide with these, and a JQL
query can tell the two apart at a glance.
Catalog
The root label
| Label | On which issues |
|---|---|
wasviking |
Every issue the integration creates. labels = wasviking lists all of them. |
Area labels
The area is the part of the platform that found the weakness, which in most organizations is also the team that fixes it. There are six.
| Label | What lands there | Suggested owner |
|---|---|---|
wasviking-area-web |
Findings from scans of running web applications and APIs: cross-site scripting, SQL injection, other injection, authentication and authorization, GraphQL, sensitive files, security headers, known CVEs, and secrets, access control or AI security weaknesses observed at runtime. | The product team that owns the application, or the web platform team. |
wasviking-area-mobile |
Findings from mobile application assessments, including vulnerable components bundled inside the app. | The mobile team. Split by wasviking-platform-android and wasviking-platform-ios when two teams own the platforms. |
wasviking-area-code |
Findings from repository scans: code review for broken access control, AI and LLM security review, and hard-coded secrets. | The team that owns the repository. The wasviking-repo- label names it. |
wasviking-area-supply-chain |
Vulnerable or outdated third-party components from SBOM and SCA submissions and from runtime component detection. | The team that owns the repository, with platform engineering for shared base images and frameworks. |
wasviking-area-infrastructure |
SSL and TLS weaknesses and exposed sensitive ports. | Infrastructure, SRE or network operations. |
wasviking-area-exposure |
Credentials found in breach data and brand abuse or typosquatting domains. | Security operations, with IT for credential resets and legal or brand teams for typosquatting takedowns. |
An issue carries exactly one area label. When a finding could belong to two,
its origin decides: a vulnerable component found inside a mobile app is
wasviking-area-mobile, not wasviking-area-supply-chain, and a secret
found in a repository is wasviking-area-code while the same secret observed
in an HTTP response is wasviking-area-web.
Category labels
The category is the finding category as WASViking® reports it in the portal, the API and the CSV export, written with hyphens. There are eighteen.
| Label | Category in the portal | Usual area |
|---|---|---|
wasviking-category-xss |
Cross-site scripting | web |
wasviking-category-sqli |
SQL Injection | web |
wasviking-category-injection |
Injection (SSRF, command injection, path traversal, SSTI, XXE and others) | web |
wasviking-category-auth |
Authentication / Authorization | web |
wasviking-category-graphql |
GraphQL (introspection, IDE exposed, GET mutation, verbose errors, field suggestion) | web |
wasviking-category-sensitive-file |
Sensitive file exposure | web |
wasviking-category-headers |
Security headers | web |
wasviking-category-cve |
Known CVE | web |
wasviking-category-token-exposure |
Secret / token exposure | web at runtime, code in a repository |
wasviking-category-access-control |
Broken Access Control (IDOR, BOLA, BFLA, clickjacking) | web at runtime, code in a repository |
wasviking-category-ai-security |
AI / LLM Security (prompt injection, unsafe tool execution, data exposure) | web at runtime, code in a repository |
wasviking-category-vulnerable-component |
Vulnerable / outdated third-party component | supply-chain, or mobile inside an app |
wasviking-category-mobile |
Mobile application | mobile |
wasviking-category-ssl |
SSL / TLS | infrastructure |
wasviking-category-exposed-port |
Exposed sensitive port | infrastructure |
wasviking-category-credential-exposure |
Credential exposure (breach data) | exposure |
wasviking-category-brand-abuse |
Brand abuse / typosquatting | exposure |
wasviking-category-other |
Other | web |
A category the engine gains later appears as wasviking-category-<value>
on its own, so a filter written on the root or area labels keeps working.
Repository label
| Label | On which issues | Example |
|---|---|---|
wasviking-repo-<repository> |
Findings that came from a repository or pipeline scan: code review, AI security review, hard-coded secrets, and SBOM or SCA submissions. | acme-corp/payments-api reads wasviking-repo-acme-corp-payments-api |
The repository name is the one the pipeline reported, which is the
--app-name given to the Sentinel CLI or the name of the scanned folder. It
is folded to the label character set: lowercase, everything outside letters,
digits, dots, underscores and hyphens becomes one hyphen, accents are
removed, so serviço/api reads wasviking-repo-servico-api. Findings from
scans of running applications carry no repository label, because they have no
repository.
Application and platform labels
| Label | On which issues | Example |
|---|---|---|
wasviking-app-<identifier> |
Findings from a mobile assessment. The identifier is the Android application id or the iOS bundle id, dots kept. | wasviking-app-com.acme.bank |
wasviking-platform-<platform> |
Findings from a mobile assessment. | wasviking-platform-android, wasviking-platform-ios |
Mobile findings carry these two instead of a repository label.
What one issue looks like
| Finding | Labels |
|---|---|
| Reflected cross-site scripting found by a scan of a web application | wasviking, wasviking-area-web, wasviking-category-xss |
IDOR found by code review in acme-corp/payments-api |
wasviking, wasviking-area-code, wasviking-category-access-control, wasviking-repo-acme-corp-payments-api |
Vulnerable library in the SBOM of acme-corp/payments-api |
wasviking, wasviking-area-supply-chain, wasviking-category-vulnerable-component, wasviking-repo-acme-corp-payments-api |
| Insecure storage in an Android app | wasviking, wasviking-area-mobile, wasviking-category-mobile, wasviking-app-com.acme.bank, wasviking-platform-android |
| Expired certificate on a public host | wasviking, wasviking-area-infrastructure, wasviking-category-ssl |
| Employee credential found in breach data | wasviking, wasviking-area-exposure, wasviking-category-credential-exposure |
The rules the sync follows
- Your labels are never touched. The sync adds and refreshes its own labels through label operations, never by rewriting the field, so every label your team adds survives every update.
- Only the grammar above is managed. The sync removes a label only when
it has the shape
wasviking-<facet>-<value>and no longer applies, for example the old repository label after a repository was renamed in the pipeline. A label of yours that merely starts with the name, such aswasviking-reviewed, is not in the grammar and is left alone. wasvikingis never removed. If someone deletes it from a card, it is back on the next update.- Labels are refreshed on every push. A push happens when the finding changes, when a scan sees it again, on a manual Push to Jira and on a backfill with Force resync. Issues created before labels existed receive theirs on their next push.
- Labels are a mirror, not a control. Removing an area label in Jira does not change the finding; the label comes back. To route work differently, add your own label or an automation rule rather than editing these.
- The labels field has to be on the screen. If the issue type's create or edit screen does not include Labels, the issue is created without labels and everything else still syncs. Add the field to both screens and run a backfill with Force resync.
Organizing the work by team
The labels are the raw material. What follows is how organizations with several engineering teams usually put them to work.
Start with an ownership matrix
Decide once who owns each area and write it down where the teams can see it.
A minimal matrix has three columns: the area label, the owning team, and the
escalation contact for anything rated Highest. Repositories refine it: a
wasviking-repo- label maps to the team in your service catalog, and mobile
platforms map to the Android and iOS teams.
One board per team, driven by a quick filter
Each team's board keeps its own filter, so the team sees security work next to its feature work instead of on a separate security board nobody visits.
| Team | Quick filter |
|---|---|
| Mobile, Android | labels = wasviking-area-mobile AND labels = wasviking-platform-android |
| Mobile, iOS | labels = wasviking-area-mobile AND labels = wasviking-platform-ios |
| Payments squad | labels = wasviking-repo-acme-corp-payments-api |
| Web platform | labels = wasviking-area-web |
| Infrastructure | labels = wasviking-area-infrastructure |
| Security operations | labels = wasviking-area-exposure |
One security board with a swimlane per area
For the security team, a single board with swimlanes based on JQL gives the whole picture. One swimlane per area label, ordered by priority, shows at a glance which team is behind.
Route automatically with Jira Automation
Automation rules turn a label into an owner the moment the issue is created, so nobody has to triage by hand.
| When | Condition | Then |
|---|---|---|
| Issue created | Labels contains wasviking-area-mobile |
Set the Team or Component to Mobile, assign to the mobile lead |
| Issue created | Labels contains wasviking-repo-acme-corp-payments-api |
Set Component to payments-api, assign to the component lead |
| Issue created | Labels contains wasviking-category-credential-exposure |
Set priority to Highest, add the security lead as watcher, post to the security channel |
| Issue created | Labels contains wasviking-area-supply-chain and priority is Highest |
Create a linked task for platform engineering |
Keep the ownership in your own field, Team or Component, and let the labels feed it. Renaming or deleting a WASViking label to change ownership does not work, because the sync puts it back.
Dashboards and reporting
Saved filters on the labels give the weekly review its numbers without anyone assembling a spreadsheet.
| Question | JQL |
|---|---|
| Everything open from WASViking | labels = wasviking AND statusCategory != Done |
| Open work per team | labels = wasviking-area-mobile AND statusCategory != Done, one filter per area |
| What arrived this week | labels = wasviking AND created >= -7d |
| Highest and High still open, by repository | labels = wasviking AND priority in (Highest, High) AND statusCategory != Done grouped by label in a two dimensional statistics gadget |
| Anything resolved by a scan rather than by hand | labels = wasviking AND statusCategory = Done AND resolved >= -30d |
A two dimensional filter statistics gadget with labels on one axis and status on the other is the single most useful view: every area, every state, one table.
Keep the two namespaces apart
Use your own labels freely for anything the sync does not express: sprint,
ownership, review state, customer impact. Leave the wasviking- labels to
the sync. If a value does not fit your naming convention, map it with an
automation rule to a label or field of your own instead of editing the
label on the card.
JQL reference
| Goal | JQL |
|---|---|
| All issues from WASViking | labels = wasviking |
| One area | labels = wasviking-area-code |
| Several areas | labels in (wasviking-area-web, wasviking-area-code) |
| One repository | labels = wasviking-repo-acme-corp-payments-api |
| One category across every area | labels = wasviking-category-access-control |
| One mobile app | labels = wasviking-app-com.acme.bank |
| One platform | labels = wasviking-platform-ios |
| Everything except supply chain | labels = wasviking AND labels != wasviking-area-supply-chain |
| Not yet labelled by a team | labels = wasviking AND component is EMPTY |
Labels are matched exactly and are case sensitive in JQL, so type them as they appear here, in lowercase.
