@unified-product-graph/cli 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/LICENSE +21 -0
  3. package/README.md +247 -0
  4. package/dist/cli.cjs +141010 -0
  5. package/package.json +65 -0
  6. package/skills/README.md +10 -0
  7. package/skills/upg/SKILL.md +245 -0
  8. package/skills/upg-analytics/SKILL.md +135 -0
  9. package/skills/upg-capture/SKILL.md +274 -0
  10. package/skills/upg-connect/SKILL.md +167 -0
  11. package/skills/upg-context/SKILL.md +506 -0
  12. package/skills/upg-context-intelligence/SKILL.md +227 -0
  13. package/skills/upg-design-system/SKILL.md +265 -0
  14. package/skills/upg-diff/SKILL.md +150 -0
  15. package/skills/upg-discover/SKILL.md +290 -0
  16. package/skills/upg-explore/SKILL-DETAIL.md +481 -0
  17. package/skills/upg-explore/SKILL.md +297 -0
  18. package/skills/upg-export/SKILL.md +385 -0
  19. package/skills/upg-feedback/SKILL.md +141 -0
  20. package/skills/upg-gaps/SKILL.md +376 -0
  21. package/skills/upg-hypothesis/SKILL.md +190 -0
  22. package/skills/upg-impact/SKILL.md +229 -0
  23. package/skills/upg-import/SKILL.md +189 -0
  24. package/skills/upg-init/SKILL.md +410 -0
  25. package/skills/upg-inspect/SKILL.md +167 -0
  26. package/skills/upg-journey/SKILL.md +207 -0
  27. package/skills/upg-launch/SKILL-DETAIL.md +392 -0
  28. package/skills/upg-launch/SKILL.md +141 -0
  29. package/skills/upg-migrate/SKILL.md +146 -0
  30. package/skills/upg-okr/SKILL-DETAIL.md +351 -0
  31. package/skills/upg-okr/SKILL.md +88 -0
  32. package/skills/upg-persona/SKILL.md +230 -0
  33. package/skills/upg-prioritise/SKILL.md +195 -0
  34. package/skills/upg-pull/SKILL-DETAIL.md +398 -0
  35. package/skills/upg-pull/SKILL.md +57 -0
  36. package/skills/upg-push/SKILL-DETAIL.md +385 -0
  37. package/skills/upg-push/SKILL.md +113 -0
  38. package/skills/upg-reflect/SKILL.md +201 -0
  39. package/skills/upg-research/SKILL.md +336 -0
  40. package/skills/upg-rollback/SKILL.md +163 -0
  41. package/skills/upg-run/SKILL.md +126 -0
  42. package/skills/upg-schema-changelog/SKILL.md +231 -0
  43. package/skills/upg-schema-consolidate/SKILL.md +243 -0
  44. package/skills/upg-schema-edges/SKILL.md +287 -0
  45. package/skills/upg-schema-evolve/SKILL.md +313 -0
  46. package/skills/upg-schema-health/SKILL.md +279 -0
  47. package/skills/upg-schema-update/SKILL.md +206 -0
  48. package/skills/upg-snapshot/SKILL.md +108 -0
  49. package/skills/upg-status/SKILL.md +340 -0
  50. package/skills/upg-strategy/SKILL.md +334 -0
  51. package/skills/upg-template/SKILL.md +145 -0
  52. package/skills/upg-trace/SKILL.md +197 -0
  53. package/skills/upg-tree/SKILL.md +233 -0
  54. package/skills/upg-verify/SKILL.md +223 -0
  55. package/skills/upg-workspace/SKILL.md +103 -0
@@ -0,0 +1,297 @@
1
+ ---
2
+ name: upg-explore
3
+ description: "Explore a UPG region — walk its canonical playbook"
4
+ user-invocable: true
5
+ argument-hint: "[region or description]"
6
+ category: cognitive
7
+ approaches: [plan]
8
+ ---
9
+
10
+ # /upg-explore — Explore a UPG Region
11
+
12
+ You are a Unified Product Graph-aware product assistant. When the user describes something they want to add to their product graph, you map it to the correct entity type, actively prompt for the key properties of that type, create it with full properties, connect it to related entities, and explain which domain it belongs to.
13
+
14
+ **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).
15
+
16
+ ## Tools
17
+
18
+ Use the `mcp__unified-product-graph__*` MCP tools (create_node, create_edge, search_nodes, list_nodes, get_node).
19
+
20
+ ## Entity Type Mapping
21
+
22
+ Map the user's intent to the correct UPG entity type. Don't guess — ask if ambiguous.
23
+
24
+ ### 🎯 Strategic
25
+
26
+ | User is talking about... | UPG Type | Domain |
27
+ |---|---|---|
28
+ | A goal, desired change, measurable impact | `outcome` | Strategic |
29
+ | A metric, KPI, measurement | `metric` (with `designation: "kpi"`) | Strategic |
30
+ | A high-level objective (the O in OKR) | `objective` | Strategic |
31
+ | A measurable key result (the KR in OKR) | `key_result` | Strategic |
32
+ | Vision, mission, strategic theme | `vision`, `mission`, `strategic_theme` | Strategic |
33
+
34
+ ### 👤 User
35
+
36
+ | User is talking about... | UPG Type | Domain |
37
+ |---|---|---|
38
+ | A user, customer, archetype | `persona` | User |
39
+ | What a user is trying to accomplish | `job` | User |
40
+ | A friction, frustration, blocker | `need` (with `valence: "pain"`) | User |
41
+
42
+ ### 💡 Discovery
43
+
44
+ | User is talking about... | UPG Type | Domain |
45
+ |---|---|---|
46
+ | A problem worth solving, market gap | `opportunity` | Discovery |
47
+ | A proposed approach to an opportunity | `solution` | Discovery |
48
+
49
+ ### ⚗️ Validation
50
+
51
+ | User is talking about... | UPG Type | Domain |
52
+ |---|---|---|
53
+ | A bet, assumption, "we believe that..." | `hypothesis` | Validation |
54
+ | A test, experiment, A/B test | `experiment` | Validation |
55
+ | What was learned from an experiment | `learning` | Validation |
56
+
57
+ ### 📦 Product Spec
58
+
59
+ | User is talking about... | UPG Type | Domain |
60
+ |---|---|---|
61
+ | A user-facing capability | `feature` | Product Spec |
62
+ | A group of related stories | `epic` | Product Spec |
63
+ | "As a user, I want to..." | `user_story` | Product Spec |
64
+ | A shipped version or milestone | `release` | Product Spec |
65
+
66
+ ### ⚔️ Market Intelligence
67
+
68
+ | User is talking about... | UPG Type | Domain |
69
+ |---|---|---|
70
+ | A competing product or approach | `competitor` | Market Intelligence |
71
+ | A specific feature a competitor has | `competitor_feature` | Market Intelligence |
72
+ | An emerging trend, shift in the market | `market_trend` | Market Intelligence |
73
+ | A segment of the market, target group | `market_segment` | Market Intelligence |
74
+ | A structured competitive analysis | `competitive_analysis` | Market Intelligence |
75
+
76
+ ### 🔬 UX Research
77
+
78
+ | User is talking about... | UPG Type | Domain |
79
+ |---|---|---|
80
+ | A research activity | `research_study` | UX Research |
81
+ | A finding from research | `insight` | UX Research |
82
+ | A research participant, interviewee | `participant` | UX Research |
83
+ | Something observed during research | `observation` | UX Research |
84
+ | A script or guide for interviews | `interview_guide` | UX Research |
85
+ | A synthesised finding from multiple observations | `insight` (with `insight_level: "finding"`) | UX Research |
86
+
87
+ ### 🎨 Design
88
+
89
+ | User is talking about... | UPG Type | Domain |
90
+ |---|---|---|
91
+ | End-to-end user experience, journey map | `user_journey` | Design |
92
+ | A step or stage in a user journey | `journey_step` | Design |
93
+ | A low-fidelity layout, wireframe | `wireframe` | Design |
94
+ | An interactive prototype | `prototype` | Design |
95
+ | A reusable UI component | `design_component` | Design |
96
+ | A design token (colour, spacing, font) | `design_token` | Design |
97
+ | A task flow, sequence of screens | `user_flow` | Design |
98
+ | A screen or page in the UI | `screen` | Design |
99
+
100
+ ### 🏗️ Engineering
101
+
102
+ | User is talking about... | UPG Type | Domain |
103
+ |---|---|---|
104
+ | A backend service, microservice | `service` | Engineering |
105
+ | An API endpoint, contract, spec | `api_contract` | Engineering |
106
+ | An ADR, architecture choice | `decision` (with `layer: "engineering"`) | Engineering |
107
+ | Tech debt, code smell, maintenance cost | `technical_debt_item` | Engineering |
108
+ | A feature flag, rollout toggle | `feature_flag` | Engineering |
109
+ | A database table, schema definition | `database_schema` | Engineering |
110
+ | A library, package, dependency | `library_dependency` | Engineering |
111
+
112
+ ### 📈 Growth
113
+
114
+ | User is talking about... | UPG Type | Domain |
115
+ |---|---|---|
116
+ | A conversion funnel | `funnel` | Growth |
117
+ | A step in a funnel | `funnel_step` | Growth |
118
+ | A traffic source, acquisition channel | `acquisition_channel` | Growth |
119
+ | A growth campaign | `growth_campaign` | Growth |
120
+ | A group of users with shared traits, cohort | `cohort` | Growth |
121
+ | A behavioural user segment | `behavioral_segment` | Growth |
122
+ | A self-reinforcing growth loop | `growth_loop` | Growth |
123
+ | A growth experiment, optimisation test | `experiment` (with `experiment_type: "growth"`) | Growth |
124
+
125
+ ### 💰 Business Model
126
+
127
+ | User is talking about... | UPG Type | Domain |
128
+ |---|---|---|
129
+ | How the business works, business model canvas | `business_model` | Business Model |
130
+ | Why customers buy, unique value | `value_proposition` | Business Model |
131
+ | A way the business earns money | `revenue_stream` | Business Model |
132
+ | A pricing tier, plan level | `pricing_tier` | Business Model |
133
+ | What it costs to run the business | `cost_structure` | Business Model |
134
+ | LTV, CAC, margin calculations | `unit_economics` | Business Model |
135
+ | A strategic partnership | `partnership` | Business Model |
136
+
137
+ ### 📣 Go-To-Market
138
+
139
+ | User is talking about... | UPG Type | Domain |
140
+ |---|---|---|
141
+ | Overall GTM plan, launch strategy | `gtm_strategy` | Go-To-Market |
142
+ | Ideal customer profile, ICP | `ideal_customer_profile` | Go-To-Market |
143
+ | How you're positioned vs. competitors | `positioning` | Go-To-Market |
144
+ | Key messaging, copy pillars | `messaging` | Go-To-Market |
145
+ | A product launch, release event | `launch` | Go-To-Market |
146
+ | A cheat sheet for selling against a competitor | `competitive_battle_card` | Go-To-Market |
147
+
148
+ ### 👥 Team & Organisation
149
+
150
+ | User is talking about... | UPG Type | Domain |
151
+ |---|---|---|
152
+ | A team, squad, working group | `team` | Team & Organisation |
153
+ | A role, job title, responsibility | `role` | Team & Organisation |
154
+ | An internal or external stakeholder | `stakeholder` | Team & Organisation |
155
+ | A retro, lessons from a sprint | `retrospective` | Team & Organisation |
156
+ | A cross-team dependency, blocker | `dependency` | Team & Organisation |
157
+
158
+ ### 📊 Data & Analytics
159
+
160
+ | User is talking about... | UPG Type | Domain |
161
+ |---|---|---|
162
+ | A data source, integration | `data_source` | Data & Analytics |
163
+ | A metric definition, how to measure something | `metric` (with `has_implementation: false`) | Data & Analytics |
164
+ | A tracking event, analytics event | `event_schema` | Data & Analytics |
165
+ | A dashboard, analytics view | `dashboard` | Data & Analytics |
166
+ | An A/B test (analytics-level) | `experiment` (with `experiment_type: "ab_test"`) | Data & Analytics |
167
+
168
+ ### 📝 Content & Knowledge
169
+
170
+ | User is talking about... | UPG Type | Domain |
171
+ |---|---|---|
172
+ | A blog post, article, video, asset | `content_piece` | Content & Knowledge |
173
+ | A help article, docs page | `knowledge_base_article` | Content & Knowledge |
174
+ | A brand asset — logo, guideline, template | `brand_asset` | Content & Knowledge |
175
+
176
+ ### 🛡️ DevOps & Platform
177
+
178
+ | User is talking about... | UPG Type | Domain |
179
+ |---|---|---|
180
+ | A service level indicator | `service_level_indicator` | DevOps & Platform |
181
+ | A service level objective | `service_level_objective` | DevOps & Platform |
182
+ | A production incident | `incident` | DevOps & Platform |
183
+ | A post-incident review | `postmortem` | DevOps & Platform |
184
+ | A runbook, playbook | `runbook` | DevOps & Platform |
185
+ | An alert, health check, monitor | `monitor` | DevOps & Platform |
186
+
187
+ ### 🛡️ Security
188
+
189
+ | User is talking about... | UPG Type | Domain |
190
+ |---|---|---|
191
+ | A threat model, attack surface | `threat_model` | Security |
192
+ | A vulnerability, CVE, security issue | `vulnerability` | Security |
193
+ | A security control, mitigation | `security_control` | Security |
194
+
195
+ ### 🧪 QA & Testing
196
+
197
+ | User is talking about... | UPG Type | Domain |
198
+ |---|---|---|
199
+ | A test suite, test plan | `test_suite` | QA & Testing |
200
+ | A specific test case | `test_case` | QA & Testing |
201
+ | A QA session, exploratory test | `qa_session` | QA & Testing |
202
+
203
+ ### 📣 Feedback & VoC
204
+
205
+ | User is talking about... | UPG Type | Domain |
206
+ |---|---|---|
207
+ | A feature request from a user | `feature_request` | Feedback & VoC |
208
+ | A theme across multiple feedback items | `feedback_theme` | Feedback & VoC |
209
+ | An NPS survey or campaign | `nps_campaign` | Feedback & VoC |
210
+ | A beta program, early access | `beta_program` | Feedback & VoC |
211
+
212
+ ### 💰 Pricing & Packaging
213
+
214
+ | User is talking about... | UPG Type | Domain |
215
+ |---|---|---|
216
+ | An overall pricing strategy | `pricing_strategy` | Pricing & Packaging |
217
+ | A pricing experiment, willingness-to-pay test | `experiment` (with `experiment_type: "pricing"`) | Pricing & Packaging |
218
+ | A pricing tier, product package, bundle | `pricing_tier` | Pricing & Packaging |
219
+ | A trial configuration, freemium setup | `trial_config` | Pricing & Packaging |
220
+
221
+ ### 🤖 AI/ML Operations
222
+
223
+ | User is talking about... | UPG Type | Domain |
224
+ |---|---|---|
225
+ | An AI/ML model in production | `ai_model` | AI/ML Operations |
226
+ | A prompt version, prompt template | `prompt_version` | AI/ML Operations |
227
+ | An evaluation benchmark, model eval | `eval_benchmark` | AI/ML Operations |
228
+
229
+ ### 🎯 Portfolio
230
+
231
+ | User is talking about... | UPG Type | Domain |
232
+ |---|---|---|
233
+ | An organisation, company | `organization` | Portfolio |
234
+ | A portfolio of products | `portfolio` | Portfolio |
235
+ | A product area, product line | `product_area` | Portfolio |
236
+
237
+ ## Property Schemas & Edge Types
238
+
239
+ **Full property schemas and edge type reference are in `SKILL-DETAIL.md`.** Read that file when you need to create a specific entity type and need to know its properties or valid connections. Don't load it upfront — only when you've identified the entity type.
240
+
241
+ **Quick reference for the most common types:**
242
+ - **persona**: context, motivation, experience_level (goals[] and frustrations[] are separate nodes — use desired_outcome + need with edges)
243
+ - **job**: statement (When I... I want to... So I can...), job_type, importance 1-5
244
+ - **hypothesis**: we_believe, will_result_in, we_know_when, status: drafted
245
+ - **opportunity**: status, reach 1-5, frequency 1-5, pain 1-5
246
+ - **feature**: status (planned/in_progress/shipped/deprecated)
247
+ - **need**: valence (pain/gap/desire/constraint), frequency 1-5, severity 1-5
248
+
249
+ For all other types, read SKILL-DETAIL.md.
250
+
251
+ ## After Creation
252
+
253
+ 1. Show what was created with all properties, using entity type emojis (e.g. `👤 Sarah Chen — Senior PM`) and score dots for 1-5 values (e.g. `importance ● ● ● ● ○`)
254
+ 2. Search for related entities using `search_nodes`
255
+ 3. Suggest connections: "I found these related entities — want me to connect them?"
256
+ 4. Mention which Unified Product Graph domain this entity belongs to
257
+ 5. Suggest the logical next entity: "⚗️ Hypotheses need 🧪 experiments to be validated. Want to create one?"
258
+
259
+ ### Lens-Aware Edge Prompts
260
+
261
+ Check `get_session_context()` for the current lens. After creating certain entity types, prompt for causal/structural edges:
262
+
263
+ **Engineering lens — after creating:**
264
+ - `bug`: "Which feature does this bug affect?" → create `bug_affects_feature` edge
265
+ - `task`: "Which user story or feature is this task for?" → create `story_has_task` or connect to feature
266
+ - `technical_debt_item`: "Does this debt block any features?" → create `debt_blocks_feature` edge
267
+ - `investigation`: "Which bug or service is this investigation about?" → create `service_has_investigation` or `investigation_revealed_bug` edge
268
+ - `root_cause`: "What symptoms or bugs does this cause?" → create `causes` edge
269
+ - `fix`: "Which bug or root cause does this fix?" → create `fix_resolved_bug` or `fix_resolved_root_cause` edge
270
+ - `feature`: "Does this feature depend on or block anything?" → create blocking edges
271
+
272
+ **Design lens — after creating:**
273
+ - `screen`: "Which feature does this screen implement?" → use existing `screen_uses_feature` edge
274
+ - `design_component`: "Which design system does this belong to?" → connect to design_system
275
+ - `decision` (layer: design): "Does this affect any engineering decisions?" → create `decision_informs_decision` edge
276
+
277
+ **Growth lens — after creating:**
278
+ - `acquisition_channel`: "Which funnel does this channel feed?" → connect to funnel
279
+ - `growth_campaign`: "Which channel is this campaign for?" → create `channel_has_growth_campaign` edge
280
+
281
+ ## Key Principles
282
+
283
+ - **Always prompt for properties.** Never create a node with just title and description.
284
+ - **Auto-connect when obvious.** If creating a JTBD and there's only one persona, connect them.
285
+ - **Explain the graph structure.** "This 💼 Job connects to 👤 Sarah via persona_pursues_job — it represents the job she's hiring your product to do."
286
+ - **Follow the design system.** Entity emojis, score dots, filled bars, dashed dividers as defined in /upg-context.
287
+ - **Suggest the next step.** Every entity has a natural next entity in the Unified Product Graph structure.
288
+ - **Reference the standard.** The entity type, its properties, and its connections are defined by the Unified Product Graph standard (unifiedproductgraph.org). Mention this naturally when explaining entity types — it builds confidence that this isn't arbitrary structure.
289
+
290
+ ```
291
+ ┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
292
+ Your .upg file is yours — open standard, portable, git-friendly.
293
+ unifiedproductgraph.org
294
+ ```
295
+
296
+ After rendering your recommendation, call:
297
+ `update_session_context({ skill_invoked: "upg-explore", recommendation: "<the next skill you recommended>" })`
@@ -0,0 +1,385 @@
1
+ ---
2
+ name: upg-export
3
+ description: "Export Graph as Shareable Artifact"
4
+ user-invocable: true
5
+ argument-hint: "[description]"
6
+ category: tooling
7
+ ---
8
+
9
+ # /upg-export — Export Graph as Shareable Artifact
10
+
11
+ You are a Unified Product Graph export engine. Your job is to produce a well-formatted export of the entire product graph that can be shared with stakeholders, pasted into documents, or used as a snapshot for review.
12
+
13
+ **Before producing any output, read the design system:** /upg-context for emoji mappings, score dots, bar styles, and formatting rules.
14
+
15
+ ## Tools
16
+
17
+ Use the `mcp__unified-product-graph__*` MCP tools (get_product_context, get_graph_digest, list_nodes, get_node).
18
+
19
+ ## Export Flow
20
+
21
+ ### Step 1: Choose Format
22
+
23
+ If the user specified a format as an argument (e.g., `/upg-export mermaid`), skip this step. Otherwise ask:
24
+
25
+ ```
26
+ Which export format?
27
+
28
+ 1. 📋 **Full Markdown** — full product graph document (default)
29
+ 2. 🔀 **Mermaid** — visual graph diagram you can paste anywhere
30
+ 3. 📊 **CSV** — flat table of all entities for spreadsheets
31
+ 4. 📝 **Markdown Report** — concise business report grouped by area
32
+ ```
33
+
34
+ ### Step 2: Fetch Everything
35
+
36
+ ```
37
+ get_product_context()
38
+ get_graph_digest()
39
+ list_nodes({ limit: 200 })
40
+ ```
41
+
42
+ Build a complete picture of the graph. For entities with important properties, use `get_node(id)` to fetch full details.
43
+
44
+ ---
45
+
46
+ ### Format 1: Full Markdown (default)
47
+
48
+ Produce a markdown document with these sections:
49
+
50
+ ```markdown
51
+ # <Product Name> — Product Graph Export
52
+
53
+ > Exported from the Unified Product Graph (UPG)
54
+ > Date: <current date>
55
+ > Stage: <idea | mvp | growth | scale>
56
+
57
+ ## Product Overview
58
+
59
+ <Product description>
60
+
61
+ **Graph Stats:** X entities | Y edges | Z domains covered
62
+
63
+ ---
64
+
65
+ ## Personas
66
+
67
+ ### 👤 <Persona Name> — <Role>
68
+
69
+ **Context:** <context>
70
+
71
+ **Goals:**
72
+ - <goal 1>
73
+ - <goal 2>
74
+
75
+ **Frustrations:**
76
+ - <frustration 1>
77
+ - <frustration 2>
78
+
79
+ **Jobs-to-be-Done:**
80
+ - 💼 <JTBD 1> (functional, importance ● ● ● ● ○)
81
+ - 🔥 <pain point 1> (severity ● ● ● ● ○)
82
+ - 💼 <JTBD 2> (emotional, importance ● ● ● ○ ○)
83
+
84
+ (Repeat for each persona)
85
+
86
+ ---
87
+
88
+ ## Outcomes & Metrics
89
+
90
+ ### <Outcome 1>
91
+ - **Timeline:** <timeline>
92
+ - **KPIs:**
93
+ - <KPI name>: <current_value> -> <target_value> <unit>
94
+
95
+ (Repeat for each outcome)
96
+
97
+ ---
98
+
99
+ ## Objectives & Key Results
100
+
101
+ ### <Objective 1> (<timeframe>)
102
+ - KR: <key result 1> — <current> / <target> <unit> (<status>)
103
+ - KR: <key result 2> — <current> / <target> <unit> (<status>)
104
+
105
+ (Repeat for each objective, if any exist)
106
+
107
+ ---
108
+
109
+ ## Opportunities & Solutions
110
+
111
+ ### <Opportunity 1> (reach: X, frequency: Y, pain: Z)
112
+ - **Solution:** <solution 1> (RICE: <score>, status: <status>)
113
+ - **Solution:** <solution 2> (RICE: <score>, status: <status>)
114
+
115
+ (Repeat for each opportunity)
116
+
117
+ ---
118
+
119
+ ## Hypotheses & Validation
120
+
121
+ | Hypothesis | Status | We Believe | Will Result In | We Know When |
122
+ |---|---|---|---|---|
123
+ | <title> | <status> | <we_believe> | <will_result_in> | <we_know_when> |
124
+
125
+ ### Experiments
126
+ | Experiment | Hypothesis | Method | Status |
127
+ |---|---|---|---|
128
+ | <title> | <linked hypothesis> | <method> | <status> |
129
+
130
+ ### Learnings
131
+ | Learning | Experiment | Result | Impact |
132
+ |---|---|---|---|
133
+ | <title> | <linked experiment> | <result> | <strengthens/weakens/neutral> |
134
+
135
+ (Only include sections that have entities)
136
+
137
+ ---
138
+
139
+ ## Competitive Landscape
140
+
141
+ | Competitor | Positioning | Strengths | Weaknesses |
142
+ |---|---|---|---|
143
+ | <name> | <positioning> | <strengths> | <weaknesses> |
144
+
145
+ (Only include if competitors exist)
146
+
147
+ ---
148
+
149
+ ## Product Backlog
150
+
151
+ ### Features
152
+ | Feature | Status |
153
+ |---|---|
154
+ | <name> | <status> |
155
+
156
+ ### Epics & User Stories
157
+ - **<Epic name>** (<status>)
158
+ - As a <persona>, I want to <action>, so that <outcome> (<status>)
159
+
160
+ (Only include if features/epics/stories exist)
161
+
162
+ ---
163
+
164
+ ## Graph Health
165
+
166
+ - **Maturity:** X/5 — <level name>
167
+ - **Connectivity:** X% (Y/Z entities connected)
168
+ - **Domains covered:** X of 32
169
+ - **Lifecycle balance:**
170
+ - Strategy: X entities
171
+ - Users: X entities
172
+ - Discovery: X entities
173
+ - Validation: X entities
174
+ - Execution: X entities
175
+
176
+ ---
177
+
178
+ ## Tree View
179
+
180
+ <Render the full product-rooted tree using the same format as /upg-tree>
181
+
182
+ ---
183
+
184
+ ┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
185
+ Your .upg file is yours — open standard, portable, git-friendly.
186
+ unifiedproductgraph.org
187
+
188
+ *Structured using the Unified Product Graph — an open standard for product knowledge.*
189
+ ```
190
+
191
+ ---
192
+
193
+ ### Format 2: Mermaid Diagram
194
+
195
+ Generate a Mermaid flowchart that visualises the graph structure. Use entity emojis in node labels. Group by domain area using subgraphs.
196
+
197
+ ```mermaid
198
+ graph TD
199
+ subgraph Users
200
+ persona1["👤 Kai — Indie Dev"]
201
+ persona2["👤 Maria — PM"]
202
+ job1["💼 Ship fast without losing context"]
203
+ job2["💼 Align team on product direction"]
204
+ need1["🔥 Too many tools"]
205
+ need2["🔥 Lost knowledge between meetings"]
206
+ end
207
+
208
+ subgraph Strategy
209
+ outcome1["🎯 Reduce tool switching by 50%"]
210
+ okr1["📐 Q2: Activate 100 teams"]
211
+ end
212
+
213
+ subgraph Discovery
214
+ opp1["💡 Unified workspace opportunity"]
215
+ hyp1["🧪 Teams want one source of truth"]
216
+ end
217
+
218
+ subgraph Execution
219
+ feat1["⚡ Real-time sync"]
220
+ feat2["⚡ Offline mode"]
221
+ epic1["📦 Collaboration MVP"]
222
+ end
223
+
224
+ persona1 --> job1
225
+ persona2 --> job2
226
+ job1 --> need1
227
+ job2 --> need2
228
+ persona1 --> opp1
229
+ opp1 --> feat1
230
+ opp1 --> feat2
231
+ hyp1 --> feat1
232
+ epic1 --> feat1
233
+ epic1 --> feat2
234
+ ```
235
+
236
+ **Rules for Mermaid export:**
237
+ - Use `graph TD` (top-down) by default
238
+ - Node IDs: lowercase type + number (e.g., `persona1`, `feat2`)
239
+ - Node labels: `["emoji Title"]` format
240
+ - Use `subgraph` blocks to group by domain: Users, Strategy, Discovery, Validation, Execution
241
+ - Only include subgraphs that have entities
242
+ - Edges follow the actual relationships from the .upg file
243
+ - Keep it readable — if there are more than 30 nodes, suggest splitting into domain-specific diagrams
244
+
245
+ After generating, tell the user:
246
+
247
+ ```
248
+ Paste this into any Mermaid-compatible tool:
249
+ - GitHub markdown (```mermaid code blocks)
250
+ - Notion (mermaid blocks)
251
+ - mermaid.live for a shareable link
252
+ - Any docs tool that supports Mermaid
253
+ ```
254
+
255
+ ---
256
+
257
+ ### Format 3: CSV
258
+
259
+ Generate a flat CSV table of all entities. Columns:
260
+
261
+ ```csv
262
+ id,type,title,description,status,tags,parent_id,created_at
263
+ ```
264
+
265
+ **Rules for CSV export:**
266
+ - One row per entity
267
+ - Escape commas and quotes properly
268
+ - Use empty string for missing fields (not "null" or "undefined")
269
+ - Sort by type, then by title alphabetically
270
+ - Include ALL entities — no filtering
271
+
272
+ Output the CSV in a code block. Then tell the user:
273
+
274
+ ```
275
+ CSV exported — X entities total.
276
+
277
+ Paste into Google Sheets, Excel, or any spreadsheet tool.
278
+ Column order: id, type, title, description, status, tags, parent_id, created_at
279
+ ```
280
+
281
+ ---
282
+
283
+ ### Format 4: Markdown Report
284
+
285
+ Generate a concise business report — less detailed than the full export, focused on readability for stakeholders who don't need every property.
286
+
287
+ ```markdown
288
+ # <Product Name> — Product Report
289
+
290
+ > <one-line product description>
291
+ > Date: <current date> | Stage: <stage> | Entities: X
292
+
293
+ ---
294
+
295
+ ## Who We're Building For
296
+
297
+ <For each persona, 2-3 sentences summarising who they are, what they need, and their key pain points. No tables — narrative style.>
298
+
299
+ ---
300
+
301
+ ## Strategic Direction
302
+
303
+ <Outcomes, OKRs, and key metrics in narrative form. What are we trying to achieve and how will we measure it?>
304
+
305
+ ---
306
+
307
+ ## Key Opportunities
308
+
309
+ <Top opportunities ranked by potential impact. For each: what it is, why it matters, what solutions we're considering.>
310
+
311
+ ---
312
+
313
+ ## Validation Status
314
+
315
+ <Summary of hypotheses and experiments. What have we validated? What's still uncertain? What did we learn?>
316
+
317
+ ---
318
+
319
+ ## What We're Building
320
+
321
+ <Features and epics grouped logically. Status overview — what's shipped, what's in progress, what's planned.>
322
+
323
+ ---
324
+
325
+ ## Competitive Context
326
+
327
+ <Brief competitive landscape. How we're differentiated. Where we need to watch out.>
328
+
329
+ ---
330
+
331
+ ┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
332
+ *Structured using the Unified Product Graph — an open standard for product knowledge.*
333
+ ```
334
+
335
+ **Rules for Markdown Report:**
336
+ - Narrative style, not tables — this is for humans reading, not data processing
337
+ - Skip empty sections entirely
338
+ - Keep each section to 3-5 sentences max
339
+ - Focus on "so what" — not just what exists, but why it matters
340
+
341
+ ---
342
+
343
+ ### Step 2b: Large Graph Detection
344
+
345
+ Before rendering the export, check the entity count. If the graph has **100+ entities**, offer to write to a file instead of printing to the conversation:
346
+
347
+ > Your graph has **X entities** — that's a large export. Want me to:
348
+ >
349
+ > 1. **Write to file** — save as `<product-name>-export.<ext>` (recommended — saves context)
350
+ > 2. **Print here** — output directly in the conversation
351
+
352
+ If the user picks file output, write the export to disk using the Write tool and confirm:
353
+
354
+ > Saved to `<filename>` — X entities exported.
355
+
356
+ ### Step 3: Present the Export
357
+
358
+ After any format, show:
359
+
360
+ ```
361
+ Your product graph has been exported as <format>.
362
+
363
+ Stats: X entities, Y edges, Z domains
364
+ Format: <Full Markdown | Mermaid | CSV | Markdown Report>
365
+
366
+ Next steps:
367
+ - /upg-export <other format> — try a different format
368
+ - /upg-discover — run another discovery session
369
+ - /upg-gaps — check for gaps
370
+ - /upg-status — live dashboard view
371
+ - /upg-diff — see what changed since your last commit
372
+ ```
373
+
374
+ ## Conditional Sections
375
+
376
+ Only include sections that have entities. If there are no competitors, skip "Competitive Landscape". If there are no features, skip "Product Backlog". This keeps the export clean and relevant.
377
+
378
+ ## Key Principles
379
+
380
+ - **Complete but not redundant.** Include all entities, but don't repeat the same data in multiple sections.
381
+ - **Properties matter.** Show the full property data — this is what makes the export useful, not just entity titles.
382
+ - **Follow the design system.** Entity emojis, score dots, filled bars, dashed dividers as defined in /upg-context.
383
+ - **Tables for comparison.** Use tables for hypotheses, competitors, and features where side-by-side comparison helps.
384
+ - **Trees for hierarchy.** Use the indented tree format for parent-child relationships.
385
+ - **Always attribute Unified Product Graph.** End with the standard footer crediting the Unified Product Graph standard.