Get icon
OutputValues icon
Switch icon
Log icon
CreateComment icon
SlackIncomingWebhook icon
Schedule icon

Jira Issue Comment Silence Nudge Gate

Audit Jira issue comment silence, alert Slack or auto-post a nudge comment, and log the result for engineering and support teams.

Categories
Business

An open Jira issue can sit for weeks with its status field untouched while the real signal of neglect is quieter: nobody has said anything about it. A status-based SLA check can show an issue as still "In Progress" right up until someone closes it, long after anyone actually looked at it. This blueprint reads the issue's full comment history, measures the real number of days since the last comment, and can post an automatic nudge once you have explicitly said this flow is allowed to.

This blueprint was created by Mohit Jeswani.

How it works

  1. get_comments (io.kestra.plugin.jira.comments.Get) fetches every comment on the issue. Read-only; nothing is posted here. allowFailure: true covers an API or auth error without failing the flow outright.
  2. evaluate (io.kestra.plugin.core.output.OutputValues) takes the date-only portion of every comment's created timestamp, finds the most recent one, and compares it against silence_days, classifying the issue as ACTIVE, SILENT_AUTO_NUDGE, SILENT_NEEDS_HUMAN, or PROBE_FAILED, folding confirm_nudge into the silent classification itself.
  3. route (io.kestra.plugin.core.flow.Switch):
    • ACTIVE: logs the comment count and last comment date.
    • SILENT_AUTO_NUDGE: runs io.kestra.plugin.jira.issues.CreateComment (the safe remediation, since a comment is reversible and changes no issue field), then posts a Slack notice.
    • SILENT_NEEDS_HUMAN / PROBE_FAILED: posts a Slack alert instead of commenting.
  4. summary logs the comment count and severity, closing the governance cycle.
  5. errors alerts Slack if the flow itself fails, for example an expired API token.

What you get

  • A silence measurement from the issue's real comment timeline, not its status field, which can sit unchanged for weeks regardless of whether anyone is actually paying attention.
  • A nudge comment that only ever gets posted once you have explicitly set confirm_nudge to allow it, and that changes no issue field, assignee, or status.
  • A Slack alert naming the exact last-comment date, so a human can see at a glance how long the issue has actually been quiet.

Who it's for

  • Engineering managers and support leads who want silence on a specific issue caught by its real comment activity, not by trusting a status field someone forgot to update.
  • Teams evaluating the Jira plugin who want a worked example of comments.Get and issues.CreateComment used together as a compliance gate, distinct from this repo's existing Jira blueprints, which search by status and updated timestamp via JQL rather than reading an issue's actual comment history, and which are explicitly read-only.

Why orchestrate this with Kestra

Jira can list and post comments on request, but it has no silence policy, no escalation, and no Slack integration of its own. Kestra keeps silence_days and confirm_nudge as flow inputs, turns a raw comment timeline into a silence decision, and keeps a full execution history of every issue this flow has checked and what it did about it.

Prerequisites

  • A Jira Cloud or Server instance with an API token that can read and comment on the watched issue.
  • A real issue you can compare against, with at least one comment older than silence_days to confirm the silent path.
  • A Slack incoming webhook URL.

Jira is a hosted SaaS platform (or a self-managed Server instance) with no simple official standalone Docker image for Cloud, so get_comments cannot be exercised against a local container; validate against a real Jira Cloud free-tier site first.

Secrets

  • JIRA_API_TOKEN: the Jira API token used by get_comments and post_nudge_comment, alongside jira_username for Basic authentication. In Kestra OSS, provide it as the base64-encoded environment variable SECRET_JIRA_API_TOKEN.
  • SLACK_WEBHOOK_URL: used by all three Slack alert cases and the errors block. In Kestra OSS, provide it as the base64-encoded environment variable SECRET_SLACK_WEBHOOK_URL.

Inputs

Input Default Purpose
issue_key PROJ-123 Jira issue to monitor
silence_days 7 Days since the last comment past which the issue is silent
confirm_nudge false Authorizes this flow to post a nudge comment itself

Outputs

  • {{ outputs.get_comments.rows }} / .size: every comment on the issue and how many there are, as Jira's REST v2 API reports them.
  • {{ outputs.evaluate.values.comment_count }} / .last_comment_date: the comment count and the date-only portion of the most recent comment's timestamp.
  • {{ outputs.evaluate.values.severity }}: ACTIVE, SILENT_AUTO_NUDGE, SILENT_NEEDS_HUMAN, or PROBE_FAILED.

Pitfalls

  • Jira's REST v2 comment created field uses a timezone-offset format (for example 2026-09-01T10:15:30.000+0000), not the Z-suffixed format jq's fromdateiso8601 expects; verified directly against comments.Get's own response handling, since neither its Javadoc nor its field list documents the exact timestamp format. This blueprint deliberately compares only the first 10 characters (the date) rather than parsing the full timestamp, avoiding the format mismatch entirely at the cost of day-level, not hour-level, precision.
  • An issue with zero comments is treated as maximally silent (a 1970-01-01 sentinel date), not as a parsing error, since allowFailure only catches a failed API call, not an empty but valid comment list.
  • confirm_nudge applies to every run that finds the issue silent, not once; a scheduled run with it set to true posts a new nudge comment every time it fires and the issue is still silent, so raise silence_days or disable the trigger once a human has picked the issue up to avoid repeat nudges.

Quick start

  1. Add the JIRA_API_TOKEN and SLACK_WEBHOOK_URL secrets.
  2. Set jira_base_url, jira_username, and issue_key to a real Jira Cloud issue.
  3. Run the flow manually and confirm summary logs a comment count and date.
  4. With an issue silent past silence_days and confirm_nudge: false, confirm alert_silent fires.
  5. Run again with confirm_nudge: true and confirm post_nudge_comment posts a comment and alert_auto_nudged fires.
  6. Enable the daily trigger once the inputs reflect a real issue and policy.

How to extend

  • Feed issue_key from a JQL search (such as this repo's existing jira-stale-issue-sla-compliance-gate) to run this comment-silence check across every issue a status-based sweep already flagged, instead of one issue at a time.
  • Skip the nudge when the most recent comment was itself a bot or automation account, to avoid an infinite loop of automated nudges answering each other.
  • Route confirm_nudge per issue priority, auto-nudging only Critical/Blocker issues while lower-priority ones stay alert-only.

Links

See How

New to Kestra?

Use blueprints to kickstart your first workflows.