ワンクリックで
detect-stuck-tickets
Detects blocked, stale, and silent tickets in the active sprint using multi-layer detection with contextual triage.
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
Detects blocked, stale, and silent tickets in the active sprint using multi-layer detection with contextual triage.
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
Generates messages suggesting a ghost-done ticket be transitioned to Done. Helpful tone, evidence-based, always asks rather than commands.
Generates contextual, humble messages designed to unblock stuck tickets. Use when a stuck ticket needs a nudge comment.
Generates a quick morning briefing with what happened, what's stuck, and what needs attention today.
Evaluates whether epics are ready for PI or quarter planning by scoring 7 readiness dimensions.
Computes team capacity for a sprint or PI from headcount, PTO, and run-rate buffer.
Estimates completion probability for remaining work using velocity distribution and Monte Carlo-style simulation.
| name | detect-stuck-tickets |
| version | 1.0.0 |
| description | Detects blocked, stale, and silent tickets in the active sprint using multi-layer detection with contextual triage. |
| category | sprint-operations |
| trigger | Sprint health check, daily scan, blocker review, standup preparation |
| autonomy | supervised |
| portability | universal |
| complexity | intermediate |
| type | detection |
| inputs | [{"name":"sprint_tickets","type":"structured-text","required":true,"description":"List of tickets in the active sprint. Each ticket should include: key, summary, status, assignee, priority, days_in_current_status, last_updated, linked_issues (optional), pr_status (optional).\n"},{"name":"threshold_days","type":"number","required":false,"default":3,"description":"Days without status change before flagging as stale or silent."},{"name":"sprint_context","type":"structured-text","required":false,"description":"Sprint metadata: name, start date, end date, days remaining. Used to calculate urgency. If not provided, urgency scoring is skipped.\n"}] |
| outputs | [{"name":"stuck_tickets","type":"structured-text","description":"Prioritized list of stuck tickets with detection layers, severity, context, and recommended actions.\n"},{"name":"summary","type":"text","description":"One-paragraph summary: count of stuck tickets, breakdown by layer, highest-severity items.\n"}] |
| tools_optional | ["project-tracker","version-control"] |
| model_compatibility | ["claude","gpt-4","gemini","llama-3"] |
Identify tickets that are blocked, stale, or silently stuck in the active sprint. Produces a prioritized list with detection layers, severity scoring, and recommended next actions.
Provide a list of active sprint tickets. Minimum fields per ticket:
| Field | Required | Description |
|---|---|---|
key | Yes | Ticket identifier (e.g., PROJ-123) |
summary | Yes | Ticket title |
status | Yes | Current status (To Do, In Progress, In Review, Blocked, Done, etc.) |
assignee | Yes | Person assigned |
priority | Yes | Blocker, Critical, High, Medium, Low |
days_in_current_status | Yes | Calendar days in the current status |
last_updated | Yes | Date of most recent activity (comment, status change, field edit) |
linked_issues | No | Blocking/blocked-by relationships with status of linked ticket |
pr_status | No | Pull request state: none, draft, open, approved, merged, CI failing |
story_points | No | Estimate (used for impact scoring) |
If providing data manually, a simple table or structured list is sufficient.
Apply all four layers to every non-Done ticket. A ticket can match multiple layers.
Layer 0 — Flagged Impediments Tickets explicitly flagged with an impediment marker in your project tracker (e.g., red flag, "blocked" label).
flagged = true or labels contains "impediment" or labels contains "blocked"Layer 1 — Explicitly Blocked Tickets in a "Blocked" status.
status = "Blocked" (or equivalent in your tracker)Layer 2 — Stale (No Status Change) Tickets stuck in the same active status for longer than the threshold.
status in ("In Progress", "In Review", "QA", "Code Review") AND days_in_current_status >= threshold_daysLayer 3 — Silent (No Activity) Tickets with no updates of any kind (comments, status changes, field edits) for longer than the threshold.
status != "Done" AND status != "To Do" AND days_since_last_update >= threshold_daysMerge results across layers. If a ticket matches multiple layers, list all matching layers (e.g., "Blocked + Silent"). Remove duplicates by ticket key.
For each stuck ticket, gather:
Assign each stuck ticket a severity: Critical, High, Medium.
| Severity | Criteria |
|---|---|
| Critical | Blocker/Critical priority AND blocked 3+ days, OR blocking other tickets |
| High | In Progress 5+ days with no PR, OR Blocked with no linked resolution |
| Medium | Stale 3-4 days but has recent PR activity, OR Silent with low priority |
If sprint context is available, escalate severity by one level for any ticket stuck with 3 or fewer days remaining in the sprint.
For each stuck ticket, recommend one specific action:
| Situation | Recommended Action |
|---|---|
| Blocked, blocker is known | "Escalate blocker {BLOCKER-KEY} — it has been in {status} for {N} days" |
| Blocked, no linked blocker | "Ask {assignee} to identify and link the blocker" |
| Stale, no PR | "Check in with {assignee} — no code activity detected" |
| Stale, PR awaiting review | "Find a reviewer for PR #{number} — open {N} days" |
| Stale, CI failing | "CI is failing on PR #{number} — needs technical attention" |
| Silent, low priority | "Confirm {ticket} is still in scope for this sprint" |
| Silent, high priority | "Urgent: {ticket} has had zero activity for {N} days" |
## Stuck Tickets: {count} found
**Summary**: {count} tickets stuck across {layer_count} detection layers.
{story_points_at_risk} story points at risk. Highest severity: {max_severity}.
---
### [{KEY}] {summary}
- **Severity**: {Critical|High|Medium}
- **Layers**: {Flagged|Blocked|Stale|Silent} (comma-separated if multiple)
- **Status**: {current_status} for {days_in_current_status} days
- **Assignee**: {assignee}
- **Priority**: {priority}
- **Story Points**: {sp} (or "unestimated")
- **Last Activity**: {last_updated} ({days_ago} days ago)
- **PR Status**: {status} (or "No PR")
- **Blocking Chain**: {blocker_key → its_status} (or "None")
- **Recommended Action**: {specific action from Step 6}
---
(repeat for each stuck ticket, sorted by severity)
### Risk Summary
- **Story points at risk**: {total} SP ({percentage}% of sprint commitment)
- **Tickets blocking others**: {list}
- **Longest stuck**: {KEY} — {N} days in {status}
days_in_current_status is missing: estimate from last_updated field as a fallback. Note the approximation.When connected to a live project tracker, this skill can automatically:
See integrations/_interface/data-source.md for the integration contract.