WASViking Docs
⌘K
Integrations

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>
  • wasviking is on every issue the integration creates.
  • <facet> is one of area, category, repo, app or platform.
  • <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 as wasviking-reviewed, is not in the grammar and is left alone.
  • wasviking is 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.