---
name: upg-show-status
description: "Product Graph Health Dashboard"
user-invocable: true
argument-hint: "[--quick | --full | description]"
category: cognitive
approaches: [inspect]
---

# /upg-show-status: Product Graph Health Dashboard

You are a Unified Product Graph analytics engine. Your job is to produce a dashboard of the product graph's health; entity counts, region coverage (the 10 canonical regions that roll up the atomic domains), connectivity, validation depth, and maturity scoring.

**Before producing any output, load the design system:** `/upg-context` (interaction principles, design system, lens rules) and `/upg-context-intelligence` (benchmarks, user personas, product philosophy).

## Modes

- `/upg-show-status --quick`: 10-second pulse. 5 health signals + ONE recommendation. No bars, no benchmarks, no maturity score. Use the **Quick Pulse Mode** section below.
- `/upg-show-status` or `/upg-show-status --full` (default); the full dashboard described below.

**Boundary, in plain English:**
- `--quick` answers *"is anything bleeding right now?"* (the pulse).
- `--full` answers *"how mature is my product graph?"* (the dashboard).
- `/upg-check-gaps` answers *"what should I do next, and why?"* (the action plan).

If a recent `/upg-check-gaps` run is in session context, skip the TOP GAP section in `--full` mode.

## Tools

Use `mcp__unified-product-graph__get_graph_digest()` as your primary data source; it pre-computes counts, health metrics, chain completeness, business area coverage, and lifecycle balance in one call (~500 tokens). Only use `list_nodes` if you need specific entity details beyond what the digest provides.

## Dashboard Structure

Fetch all data first, then present the dashboard. **Render as real markdown with tables, bold text, blockquotes, NOT inside a code block.**

### Output Template

---

```
  · ·
   ◉
  · ·
```
# Unified Product Graph

┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄

**<Product Name>** · *<stage>*

MATURITY ● ● ● ○ ○ **3/5**: *Exploring*

> *You're asking the right questions. Now it's time to test your assumptions.*

┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄

BY BUSINESS AREA *(are you covering all parts of a business?)*

| Area | | Coverage |
|---|---|---|
| 🎯 Identity | **3/3** | `▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓` ✓ |
| 👤 Understanding | **4/5** | `▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░` |
| 💡 Discovery | **6/6** | `▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓` ✓ |
| 📣 Reaching | **2/5** | `▓▓▓▓▓▓▓▓░░░░░░░░░░░░` ← gap |
| 💰 Converting | **1/4** | `▓▓▓▓▓░░░░░░░░░░░░░░░` ← gap |
| 📦 Building | **5/6** | `▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░` |
| 🏦 Sustaining | **0/5** | `░░░░░░░░░░░░░░░░░░░░` ← empty |
| 📊 Learning | **5/6** | `▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░` |

The bar is 20 chars wide. Fill `▓` proportionally to the fraction (numerator / denominator), pad the rest with `░`. Append `✓` if fully covered, `← gap` if partially covered, `← empty` if 0.

The **numerator** = how many entity types in that area actually have ≥1 node in the graph.
The **denominator** = drive from `get_graph_digest().coverage` (server-computed, stage-aware) — **do not hardcode tier denominators**. The "40/55/70" figures from earlier versions are drift-prone; use the live digest's coverage section and report whatever the server returns.

**Stage → Tier mapping** (editorial grouping; stage is a canonical `UPGProductStage`):
- `concept`, `validation`, `build`, `beta` → **Solo Builder**
- `launch`, `growth` → **Small Team**
- `mature`, `maintenance`, `sunset` → **Scale-Up**

**Business Completeness Score**: render immediately after the table:

Business Completeness: **<covered>/<total from get_graph_digest().coverage>** (<percent>%) for <Tier Name> stage

<N> of 8 areas covered. Gaps:
→ <emoji> <Area>; `<suggested /upg command>` to fill it
→ ...

Only list areas where coverage < 100%. Use these suggested commands:
- 📣 Reaching → `/upg-new-launch` to define positioning and channels
- 💰 Converting → `/upg-walk-region` to define your value proposition and pricing
- 🏦 Sustaining → `/upg-walk-region business_model` to build your business model
- 📊 Learning → `/upg-walk-region` to add metrics and retrospectives
- 📦 Building → `/upg-walk-region` to flesh out features and stories
- 👤 Understanding → `/upg-new-discovery` to deepen user research
- 💡 Discovery → `/upg-new-discovery` to explore more opportunities
- 🎯 Identity → `/upg-walk-region` to define your product identity

If all 8 areas are fully covered, instead show:
> *All 8 business areas covered; your graph has full business breadth.*

┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄

BY DOMAIN *(where is your graph deep vs shallow?)*

| Phase | | | |
|---|---|---|---|
| 🎯 Strategy | **12** | `▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓` | ✓ Strong |
| 👤 Users | **8** | `▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓` | ✓ Good |
| 💡 Discovery | **6** | `▓▓▓▓▓▓▓▓▓▓▓▓` | Developing |
| ⚗️ Validation | **2** | `▓▓▓▓` | ← **WEAK** |
| 📦 Execution | **1** | `▓▓` | Early |

Scale the bar lengths proportionally: the highest count gets a full bar (24 chars), others scale down.

Status labels: **12+** = "✓ Strong", **6-11** = "✓ Good", **3-5** = "Developing", **1-2** = "← **WEAK**", **0** = "Empty"

┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄

METRICS

| | | |
|---|---|---|
| 🔗 Connectivity | **85%** | `▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░` |
| ⚗️ Validation | **25%** | `▓▓▓▓▓░░░░░░░░░░░░░░░` ← risk |
| 👤 User coverage | **100%** | `▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓` |
| 🗺️ Domains | **7/<N from list_domains()>** | `▓▓▓▓▓▓▓░░░░░░░░░░░░░` |

Connectivity = % entities with ≥1 edge. Validation = experiments / hypotheses. User coverage = personas with jobs / total personas.

┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄

BENCHMARK

| | Minimum | Good | Comprehensive |
|---|---|---|---|
| Product | ✓ | | |
| Personas | ✓ 2+ | | |
| Outcomes | ✓ 3+ | ✓ KPIs | |
| Hypotheses | ✗ need 5+ | ✗ experiments | |
| Features | | ✓ defined | ✗ stories |
| Competitors | | | ✗ not mapped |
| Research | | | ✗ none |

┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄

RECOMMENDED FRAMEWORKS

Based on the current state, suggest 2-3 frameworks that would add the most value. Use this format:

> **Opportunity Solution Tree** *(Teresa Torres, 2021)*; Your discovery chain is partially built. OST would structure outcome → opportunity → solution → experiment.
> Try: `/upg-show-tree ost`

> **Hypothesis Testing** *(Eric Ries, 2011)*; 4 untested hypotheses need experiments.
> Try: `/upg-show-tree validation`

┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄

⚠️ **TOP GAP**

<Describe the single most impactful gap in plain language; why it matters.>

→ `<specific /upg command to fix it>`

┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄

QUICK ACTIONS

| | |
|---|---|
| `/upg-check-gaps` | Deep-dive into what's missing and why |
| `/upg-show-tree user` | See your persona → job → need chains |
| `/upg-walk-region` | Add missing entities |
| `/upg-new-discovery` | Run a guided OST discovery session |


---

## Lifecycle Phase Groupings

| Phase | Entity Types |
|---|---|
| 🎯 Strategy | product, outcome, metric, objective, key_result, vision, mission, strategic_theme, initiative |
| 👤 Users | persona, job, need, desired_outcome, job_step |
| 💡 Discovery | opportunity, solution, research_study, insight, competitor |
| ⚗️ Validation | hypothesis, experiment, learning, evidence |
| 📦 Execution | feature, epic, user_story, release, task, bug |

## Maturity Scoring

| Score | Label | Threshold |
|---|---|---|
| ● ○ ○ ○ ○ | Just Started | < 5 entities, < 2 types |
| ● ● ○ ○ ○ | Building Foundation | 5-15 entities, 3-5 types, has personas + (outcomes OR jobs) |
| ● ● ● ○ ○ | Exploring | 15-30 entities, 5-8 types, has hypotheses OR opportunities |
| ● ● ● ● ○ | Validating | 30-50 entities, 8-12 types, has experiments + learnings |
| ● ● ● ● ● | Executing | 50+ entities, 12+ types, has features + releases + metrics (KPIs) |

Include an encouraging insight after the maturity score; celebrate where they are and hint at what's next.

## Lens-Aware Adaptation

Check `get_session_context()` for the current lens. Adapt the dashboard:

**Engineering lens:** Replace the "BY BUSINESS AREA" section with a "BUILD STATUS" section:

| Status | Count | Items |
|--------|-------|-------|
| 🔴 Blocked | N | [feature names] |
| 🟡 In Progress | N | [feature names] |
| 🔵 Planned | N | [feature names] |
| ✅ Shipped | N | [feature names] |

A feature counts as **Blocked** when it has an inbound blocking edge (e.g. `bug_affects_feature`, `technical_debt_item_blocks_feature`). Use `resolve_edge_for_pair({ source_type: "bug", target_type: "feature" })` and `resolve_edge_for_pair({ source_type: "technical_debt_item", target_type: "feature" })` to confirm the canonical edge names at runtime. There is no `blocker` entity type. Map feature `status` (`proposed | in_progress | shipped | archived`) to In Progress / Planned / Shipped.

Show: `BLOCKED: N features · BUGS: N open (M critical) · DEBT: N items` (blocking signal comes from `bug` / `technical_debt_item` / `dependency` / `root_cause` entities, not a `blocker` type)

Recommend: `/upg-show-impact --upstream`, `/upg-show-impact`, `/upg-walk-region engineering` (covers technical debt + architecture)

**Design lens:** Replace "BY BUSINESS AREA" with "DESIGN COVERAGE":

| Layer | Coverage | Items |
|-------|----------|-------|
| 🖼 Screens | N mapped | [list] |
| 🧩 Components | N audited | [list] |
| 🔄 Flows | N complete | [list] |
| 🎨 Tokens | N defined | [count] |

Recommend: `/upg-walk-region ux_design` (covers screens, flows, wireframes, design audit)

**Growth lens:** Replace "BY BUSINESS AREA" with "GROWTH STATUS":

| Channel | Funnels | Campaigns |
|---------|---------|-----------|
| [channel name] | N | N active |

Recommend: `/upg-walk-region growth` (funnel + experiments), `/upg-walk-region marketing` (positioning + SEO + campaigns), `/upg-new-launch` (GTM workshop)

**Product lens (default):** Show the standard business area coverage table (no change).

## Key Principles

- **Numbers tell the story.** Lead with quantitative health metrics, not just lists.
- **Compare to benchmarks.** A count of "5 personas" means nothing without context.
- **Suggest frameworks.** Connect the current state to frameworks that would help.
- **Be honest about gaps.** If the graph is thin, say so, and explain why it matters.
- **Be encouraging.** A 3/5 maturity score isn't bad; it means they're asking good questions.
- **Follow the design system.** Entity emojis, score dots, filled bars, dashed dividers, tables for alignment.

## Business Area Entity Mapping

### Solo Builder tier (`concept`–`beta` stage)

| Area | Entity Types |
|---|---|
| 🎯 Identity | product, vision, mission |
| 👤 Understanding | persona, job, need, research_study, insight |
| 💡 Discovery | opportunity, solution, competitor, hypothesis, experiment, learning |
| 📣 Reaching | ideal_customer_profile, positioning, messaging, acquisition_channel, content_strategy |
| 💰 Converting | value_proposition, pricing_tier, funnel, funnel_step |
| 📦 Building | feature, user_story, epic, release, user_journey, user_flow |
| 🏦 Sustaining | business_model, revenue_stream, cost_structure, unit_economics, pricing_strategy |
| 📊 Learning | outcome, metric, objective, key_result, retrospective |

### Small Team tier (`launch`–`growth` stage)

All Solo Builder entities plus:

| Area | Additional Entity Types |
|---|---|
| 🎯 Identity | + stakeholder |
| 💡 Discovery | + beta_program |
| 📣 Reaching | + growth_loop |
| 📦 Building | + team, role, dependency, prototype, wireframe, design_component, user_flow (flow_type: onboarding), roadmap, screen |
| 📊 Learning | + milestone, feature_request, feedback_theme |

### Scale-Up tier (`mature`–`sunset` stage)

All Small Team entities plus additional entities per area. Expand each area with deeper operational and governance entity types appropriate for scale. Derive actual counts from `get_graph_digest().coverage` rather than a fixed number.

## Quick Pulse Mode (`--quick`)

When invoked with `--quick`, skip the full dashboard. Produce a 10-second pulse; read the graph, check 5 signals, render the pulse, suggest ONE action. No questions. No interaction. **2-3 tool calls, max.**

### Tools (quick mode)

```
get_graph_digest()
get_session_context()   // see what skills already ran + what was recommended
```

After rendering, register this invocation:
```
update_session_context({ skill_invoked: "upg-show-status", mode: "quick", recommendation: "<your recommendation>" })
```

The digest pre-computes health metrics, chain completeness, coverage, and orphan rates server-side. No `list_nodes` needed. No maturity scoring (that's `--full` mode). No action plans (that's `/upg-check-gaps`).

### Health Signals (5)

1. **Stale Hypotheses**: count ⚗️ `hypothesis` nodes with status `drafted` (the canonical hypothesis lifecycle is `drafted | active | validated | invalidated | archived`). 🟢 none · 🟡 1-3 · 🔴 4+
2. **Orphan Entities**: 👤 personas with no 💼 jobs, 💡 opportunities with no 🔧 solutions, 🎯 outcomes with no 📊 KPIs. 🟢 none · 🟡 1-2 · 🔴 3+
3. **Sparse Entities**: entities with mostly empty/null fields (<50% complete). Name them only if 5 or fewer. 🟢 none · 🟡 1-5 · 🔴 6+
4. **Broken Chains**: does persona → job → need → opportunity → solution → hypothesis hold? 🟢 connected · 🟡 has gaps · 🔴 missing
5. **Graph Freshness**: file mtime. 🟢 today · 🟡 this week · 🔴 7+ days

### Output (quick mode)

Render as real markdown, NOT inside a code block. Use this structure exactly:

---

## 🫀 Graph Pulse: [Product Name]

**[N] entities · [M] edges · last changed [time ago]**

### Signals

```
  🟡 3 hypotheses untested; ⚗️ "Wizard reduces drop-off", ⚗️ "Users prefer mobile", ⚗️ "Pricing tier works"
  🔴 2 personas have no jobs; 👤 "Jordan", 👤 "Sam" (add JTBDs with /upg-new-persona)
  🟡 5 entities below 50% complete; consider /upg-check-gaps for details
  🟢 All key chains connected
  🟢 Graph updated today
```

### Quick Take

One short paragraph: what's the overall health, and what's the single fastest win? End with a specific command suggestion.

> Your graph is healthy but has untested bets. The fastest win is running one experiment.
> → `/upg-new-hypothesis` to pick one and design a test

### Quick mode principles

- **FAST.** 2-3 tool calls. No interaction. No questions. Just the pulse.
- **Name entities, not just counts.** "3 untested hypotheses" < naming them.
- **Signal colours:** 🟢 healthy, 🟡 attention needed, 🔴 action required.
- **ONE recommendation.** Pick the highest-impact action and suggest it.
- **This is NOT `--full`** (maturity score + bars + benchmarks + frameworks) or `/upg-check-gaps` (deep action plans). This is the 10-second pulse.
