# Wtf.health

> 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.

- Skill: `xiduzo/wtf-health` (Agent Skill, multi-file: 5 files)
- Install (CLI): `npx skillmds@latest add xiduzo/wtf-health`
- Raw SKILL.md: https://api.skillmd.com/api/skills/xiduzo/wtf-health/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Docs & Writing
- Author: xiduzo (https://skillmd.com/u/xiduzo)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/xiduzo/wtf-health

---


# Health

Project health dashboard.

This skill gives a full-stack view of open WTF issues in under a minute.
It reports what is blocked, what is stale, and the clear next action 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:

```bash
# Resolve $WTF_CLASS once — see ../references/issue-classification.md.
# labels mode → query by kind label; types mode → query by native issue type.
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:

```bash
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, it is 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.

