| name | wtf.health |
| description | This skill should be used when a developer or lead wants a project status overview โ for example "what's the state of the project", "show me what's blocked", "project health check", "what tasks are stuck", "standup summary", "how many issues are unverified", "what's left in this epic", "show me what needs attention", "what's been implemented but not verified", or "what's blocking the release". Scans all open WTF issues and produces a triage-ready health report with actionable next steps. |
Health
Project health dashboard. Core value: gives a full-stack view of open WTF issues in under a minute โ surfaces what is blocked, what is stale, and what the clear next action is for each problem found.
Process
0. GitHub CLI setup
Run steps 1โ2 of ../references/gh-setup.md. Stop if gh is not installed or not authenticated.
1. Choose the scope
Call AskUserQuestion (per ../references/questioning-style.md):
- question: "What scope do you want to check?"
- header: "Scope"
- options:
- Full project โ all open Epics, Features, and Tasks
- One Epic โ all work under a specific Epic
- One Feature โ all Tasks under a specific Feature
For Epic or Feature scope, prompt for the issue number with options pre-filled from recent open issues.
2. Fetch all open issues
Run in parallel:
if [ "$WTF_CLASS" = types ]; then
gh issue list --search 'type:"Epic" state:open' --json number,title,labels,updatedAt --limit 50
gh issue list --search 'type:"Feature" state:open' --json number,title,labels,updatedAt --limit 100
gh issue list --search 'type:"Task" state:open' --json number,title,labels,updatedAt --limit 200
gh issue list --search 'type:"Bug" state:open' --json number,title,labels,updatedAt --limit 50
else
gh issue list --label "epic" --state open --json number,title,labels,updatedAt --limit 50
gh issue list --label "feature" --state open --json number,title,labels,updatedAt --limit 100
gh issue list --label "task" --state open --json number,title,labels,updatedAt --limit 200
gh issue list --label "bug" --state open --json number,title,labels,updatedAt --limit 50
fi
Also fetch open PRs to detect tasks with an open PR but no verified label:
gh pr list --state open --json number,title,headRefName,body --limit 50
3. Classify issues into health categories
For each issue, check its labels against the expected lifecycle:
Epics:
| Signal | Category |
|---|
| No child Features linked | โ ๏ธ Epic has no Features |
| All child Features closed | โ
Epic complete โ needs wtf.retro |
Features:
| Signal | Category |
|---|
No designed label, no child Tasks | โ ๏ธ Feature not designed, no tasks |
Has child Tasks, none implemented | ๐ต In progress |
All child Tasks verified, Feature still open | โ
Feature complete โ needs Feature PR |
Tasks:
| Signal | Category |
|---|
No designed label | โ ๏ธ Not designed โ blocked before implement |
designed but not implemented for > 7 days | ๐ Stale โ may be forgotten |
implemented but not verified | โณ Waiting for QA |
verified but no open or merged PR | โณ Waiting for PR |
Has open PR but not verified | โ ๏ธ PR open without QA sign-off |
implemented + verified + PR merged | โ
Done |
Bugs:
| Signal | Category |
|---|
| Open, no task linked in body | โ ๏ธ Bug not linked to a task |
| Open > 14 days | ๐ Stale bug |
Staleness threshold for tasks is 7 days since last update; for bugs, 14 days. These are heuristics โ flag but do not auto-close anything.
4. Render the health report
Project Health โ <scope> โ <YYYY-MM-DD>
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Epics: [n open]
Features: [n open]
Tasks: [n open] ([n] implemented, [n] verified, [n] stale)
Bugs: [n open] ([n] stale)
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ๏ธ Needs attention ([n])
[#n] Task: <title>
Label gap: designed โ not yet implemented (stale [n days])
Next: run implement-task
[#n] Task: <title>
implemented โ not verified
Next: run verify-task
[#n] Feature: <title>
All tasks verified โ Feature PR not opened
Next: run create-pr targeting main
[#n] Bug: <title>
Open [n days], no linked task
Next: run write-task to create a fix task
๐ Stale ([n])
[#n] Task: <title>
Last updated [n days ago] โ no activity since designed
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
Clean
[n] tasks verified and merged
[n] features closed
If everything is clean, print: "All open issues are in a healthy state. Nothing needs attention."
5. Offer to act on findings
If findings exist, call AskUserQuestion (per ../references/questioning-style.md):
- question: "Would you like to act on any of these findings now?"
- header: "Next action"
- options:
- One option per โ ๏ธ finding (e.g. Verify Task #42 โ run
verify-task)
- Done โ just the report โ exit
Route each selection to the appropriate skill with the issue number pre-loaded as context.