@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,481 @@
1
+ ---
2
+ name: upg-explore-detail
3
+ description: "Full property schemas and edge type reference for /upg-explore"
4
+ ---
5
+
6
+ # /upg-explore — Property Schemas & Edge Types (Detail)
7
+
8
+ This file contains the full property schemas and edge type reference for entity creation. It is loaded on demand by /upg-explore when the agent needs to know the specific properties or valid connections for an entity type.
9
+
10
+ ## Full Property Schemas
11
+
12
+ When creating an entity, actively prompt for the key properties. Do not just set title and description.
13
+
14
+ ### outcome
15
+ ```json
16
+ {
17
+ "timeline": "When this should be achieved"
18
+ }
19
+ ```
20
+ Ask: "What's the timeline for this outcome?"
21
+
22
+ ### metric (KPI)
23
+ ```json
24
+ {
25
+ "designation": "kpi",
26
+ "current_value": 0,
27
+ "target_value": 100,
28
+ "unit": "%, users, seconds, etc.",
29
+ "range_min": 0,
30
+ "range_max": 100
31
+ }
32
+ ```
33
+ Ask: "What's the current value? What's the target? What unit?" (KPIs are `metric` nodes with `designation: "kpi"` — the `kpi` type was consolidated into `metric` in v0.1.0.)
34
+
35
+ ### objective
36
+ ```json
37
+ {
38
+ "timeframe": "Q1 2026, H2 2026, etc.",
39
+ "status": "active | achieved | deferred"
40
+ }
41
+ ```
42
+
43
+ ### key_result
44
+ ```json
45
+ {
46
+ "current_value": 0,
47
+ "target_value": 100,
48
+ "unit": "metric unit",
49
+ "status": "on_track | at_risk | behind | achieved"
50
+ }
51
+ ```
52
+
53
+ ### opportunity
54
+ ```json
55
+ {
56
+ "status": "identified | validated | deferred | closed",
57
+ "reach": 1-5,
58
+ "frequency": 1-5,
59
+ "pain": 1-5
60
+ }
61
+ ```
62
+ Ask: "How many people does this affect (reach 1-5)? How often (frequency 1-5)? How painful (1-5)?"
63
+
64
+ ### solution
65
+ ```json
66
+ {
67
+ "status": "proposed | in_progress | shipped | deferred",
68
+ "reach": 1-5,
69
+ "impact": 1-5,
70
+ "confidence": 1-5,
71
+ "effort": 1-5,
72
+ "rice_score": "(reach x impact x confidence) / effort"
73
+ }
74
+ ```
75
+ Ask: "Let's RICE-score this. Reach (1-5)? Impact (1-5)? Confidence (1-5)? Effort (1-5)?"
76
+
77
+ ### experiment
78
+ ```json
79
+ {
80
+ "method": "Description of the test method",
81
+ "status": "planned | running | analysing | complete",
82
+ "start_date": "ISO date",
83
+ "end_date": "ISO date"
84
+ }
85
+ ```
86
+
87
+ ### learning
88
+ ```json
89
+ {
90
+ "result": "What happened",
91
+ "metric": "What was measured",
92
+ "result_value": 0,
93
+ "confidence_impact": "strengthens | weakens | neutral"
94
+ }
95
+ ```
96
+
97
+ ### competitor
98
+ ```json
99
+ {
100
+ "positioning": "How they position themselves",
101
+ "pricing_model": "Their pricing approach",
102
+ "strengths": ["What they do well"],
103
+ "weaknesses": ["Where they fall short"],
104
+ "website": "URL"
105
+ }
106
+ ```
107
+
108
+ ### feature
109
+ ```json
110
+ {
111
+ "status": "planned | in_progress | shipped | deprecated"
112
+ }
113
+ ```
114
+
115
+ ### user_story
116
+ ```json
117
+ {
118
+ "as_a": "persona name",
119
+ "i_want_to": "action",
120
+ "so_that": "outcome",
121
+ "status": "backlog | in_progress | done",
122
+ "effort": 0
123
+ }
124
+ ```
125
+
126
+ ### need
127
+ ```json
128
+ {
129
+ "valence": "pain | gap | desire | constraint",
130
+ "frequency": 1-5,
131
+ "severity": 1-5
132
+ }
133
+ ```
134
+ Ask: "How often does this happen (1-5)? How bad is it (1-5)? Is this a pain, gap, desire, or constraint?" (The old `pain_point` type was consolidated into `need` with `valence: "pain"` in v0.1.0.)
135
+
136
+ ### research_study
137
+ ```json
138
+ {
139
+ "method": "interview | usability_test | survey | diary_study | field_study | other",
140
+ "status": "planned | in_progress | analysing | complete",
141
+ "participant_count": 0
142
+ }
143
+ ```
144
+
145
+ ### insight (research insight)
146
+ ```json
147
+ {
148
+ "source_domain": "research | ux | product | support",
149
+ "insight_level": "observation | finding | insight",
150
+ "confidence": "low | medium | high",
151
+ "evidence_count": 0
152
+ }
153
+ ```
154
+ (The old `research_insight`, `finding`, and `ux_insight` types were all consolidated into `insight` in v0.1.0.)
155
+
156
+ ### business_model
157
+ ```json
158
+ {
159
+ "canvas_type": "lean | bmc | custom",
160
+ "customer_segments": ["Who you serve"],
161
+ "channels": ["How you reach them"],
162
+ "key_activities": ["What you do"],
163
+ "key_resources": ["What you need"],
164
+ "key_partners": ["Who helps you"],
165
+ "status": "draft | validated | active | pivoting"
166
+ }
167
+ ```
168
+ Ask: "What type of canvas is this — lean, BMC, or custom? Who are the customer segments? What are the key activities?"
169
+
170
+ ### value_proposition
171
+ ```json
172
+ {
173
+ "for_segment": "Which customer segment this serves",
174
+ "gains": ["What gains you create"],
175
+ "pain_relievers": ["What pains you relieve"],
176
+ "products_and_services": ["What you offer"],
177
+ "differentiator": "Why this is unique vs. alternatives",
178
+ "status": "draft | testing | validated"
179
+ }
180
+ ```
181
+ Ask: "Which customer segment is this for? What gains does it create? What pains does it relieve? What makes it different from alternatives?"
182
+
183
+ ### gtm_strategy
184
+ ```json
185
+ {
186
+ "target_market": "Primary market",
187
+ "motion": "product_led | sales_led | community_led | hybrid",
188
+ "channels": ["Distribution channels"],
189
+ "timeline": "Launch timeline",
190
+ "success_metrics": ["How you'll measure success"],
191
+ "status": "draft | in_progress | launched | iterating"
192
+ }
193
+ ```
194
+ Ask: "What's the target market? Is this product-led, sales-led, or community-led? What channels will you use?"
195
+
196
+ ### ideal_customer_profile
197
+ ```json
198
+ {
199
+ "company_size": "1-10 | 11-50 | 51-200 | 201-1000 | 1000+",
200
+ "industry": "Target industry",
201
+ "budget_range": "Typical budget",
202
+ "buying_triggers": ["What causes them to look for a solution"],
203
+ "disqualifiers": ["Red flags — who is NOT a fit"],
204
+ "decision_makers": ["Roles involved in the buying decision"]
205
+ }
206
+ ```
207
+ Ask: "What size company is the ideal fit? What industry? What triggers them to start looking for a solution like yours?"
208
+
209
+ ### positioning
210
+ ```json
211
+ {
212
+ "for_whom": "Target audience",
213
+ "who_need": "Their primary need",
214
+ "our_product_is": "Category or frame",
215
+ "that_provides": "Key benefit",
216
+ "unlike": "Primary alternative",
217
+ "we_differentiate_by": "Unique differentiator",
218
+ "framework": "april_dunford | moore | custom"
219
+ }
220
+ ```
221
+ Ask: "Let's use a positioning statement. For whom? Who need what? What category is your product? How do you differentiate?"
222
+
223
+ ### user_journey
224
+ ```json
225
+ {
226
+ "persona": "Which persona takes this journey",
227
+ "scenario": "The specific context or trigger",
228
+ "stages": ["awareness", "consideration", "decision", "onboarding", "retention"],
229
+ "emotional_arc": "How feelings change across stages",
230
+ "status": "draft | mapped | validated"
231
+ }
232
+ ```
233
+ Ask: "Which persona takes this journey? What's the scenario? What stages does it cover?"
234
+
235
+ ### decision (architecture / design / product)
236
+ ```json
237
+ {
238
+ "layer": "engineering | design | product",
239
+ "context": "Why this decision was needed",
240
+ "decision": "What was decided",
241
+ "alternatives_considered": ["What else was evaluated"],
242
+ "consequences": ["Trade-offs and implications"],
243
+ "status": "proposed | accepted | deprecated | superseded",
244
+ "decided_by": "Who made the decision",
245
+ "decided_on": "ISO date"
246
+ }
247
+ ```
248
+ Ask: "What's the context — why was this decision needed? What was decided? What alternatives were considered? Which layer does this belong to — engineering, design, or product?" (`architecture_decision`, `design_decision`, and `product_decision` were consolidated into the single `decision` type with a `layer` property in v0.2.0.)
249
+
250
+ ### growth_loop
251
+ ```json
252
+ {
253
+ "loop_type": "viral | content | paid | product",
254
+ "trigger": "What starts the loop",
255
+ "action": "What the user does",
256
+ "output": "What the action produces",
257
+ "reinvestment": "How the output feeds back into the trigger",
258
+ "time_to_complete": "How long one cycle takes",
259
+ "status": "theoretical | testing | proven | scaling"
260
+ }
261
+ ```
262
+ Ask: "What type of loop — viral, content, paid, or product? What triggers it? What action does the user take? How does the output feed back into the trigger?"
263
+
264
+ ### pricing_strategy
265
+ ```json
266
+ {
267
+ "model": "freemium | free_trial | usage_based | flat_rate | per_seat | tiered | custom",
268
+ "anchor_price": "Primary price point",
269
+ "willingness_to_pay": "Researched WTP range",
270
+ "competitive_position": "cheaper | parity | premium",
271
+ "tiers": ["Tier names"],
272
+ "status": "research | testing | launched | iterating"
273
+ }
274
+ ```
275
+ Ask: "What pricing model — freemium, usage-based, per-seat, etc.? What's the anchor price? How does this compare to competitors — cheaper, parity, or premium?"
276
+
277
+ ### ai_model
278
+ ```json
279
+ {
280
+ "model_type": "llm | classifier | recommender | generative | embedding | custom",
281
+ "provider": "openai | anthropic | google | huggingface | self_hosted | other",
282
+ "use_case": "What this model does in the product",
283
+ "input_type": "text | image | audio | structured | multimodal",
284
+ "output_type": "text | classification | embedding | structured | multimodal",
285
+ "latency_target": "Target response time",
286
+ "cost_per_call": "Estimated cost",
287
+ "status": "prototyping | evaluating | staging | production | deprecated"
288
+ }
289
+ ```
290
+ Ask: "What type of model — LLM, classifier, recommender? Which provider? What's its use case in the product?"
291
+
292
+ ## Edge Types — Valid Connections
293
+
294
+ After creating an entity, search for related entities and suggest connections. Use these valid edge types:
295
+
296
+ ### Core Product Graph
297
+
298
+ | Edge Type | From | To |
299
+ |---|---|---|
300
+ | `product_has_outcome` | product | outcome |
301
+ | `product_has_objective` | product | objective |
302
+ | `product_has_competitor` | product | competitor |
303
+ | `product_has_feature` | product | feature |
304
+ | `product_has_release` | product | release |
305
+ | `product_has_research_study` | product | research_study |
306
+ | `product_has_persona` | product | persona |
307
+ | `product_has_business_model` | product | business_model |
308
+ | `product_has_gtm_strategy` | product | gtm_strategy |
309
+ | `product_has_pricing_strategy` | product | pricing_strategy |
310
+ | `product_has_ai_model` | product | ai_model |
311
+ | `outcome_has_metric` | outcome | metric |
312
+ | `outcome_has_opportunity` | outcome | opportunity |
313
+ | `objective_has_key_result` | objective | key_result |
314
+ | `persona_pursues_job` | persona | job |
315
+ | `job_has_need` | job | need |
316
+ | `opportunity_has_solution` | opportunity | solution |
317
+ | `solution_has_hypothesis` | solution | hypothesis |
318
+ | `hypothesis_has_experiment` | hypothesis | experiment |
319
+ | `experiment_produces_learning` | experiment | learning |
320
+ | `feature_has_epic` | feature | epic |
321
+ | `epic_has_user_story` | epic | user_story |
322
+ | `research_study_has_insight` | research_study | insight |
323
+ | `insight_informs_opportunity` | insight | opportunity |
324
+
325
+ ### Market Intelligence
326
+
327
+ | Edge Type | From | To |
328
+ |---|---|---|
329
+ | `competitor_has_competitor_feature` | competitor | competitor_feature |
330
+ | `market_segment_has_persona` | market_segment | persona |
331
+ | `competitive_analysis_has_competitor` | competitive_analysis | competitor |
332
+ | `market_trend_informs_opportunity` | market_trend | opportunity |
333
+
334
+ ### UX Research
335
+
336
+ | Edge Type | From | To |
337
+ |---|---|---|
338
+ | `research_study_has_participant` | research_study | participant |
339
+ | `research_study_has_interview_guide` | research_study | interview_guide |
340
+ | `participant_has_observation` | participant | observation |
341
+ | `observation_yields_insight` | observation | insight |
342
+ | `insight_refines_insight` | insight | insight |
343
+
344
+ ### Design
345
+
346
+ | Edge Type | From | To |
347
+ |---|---|---|
348
+ | `persona_has_user_journey` | persona | user_journey |
349
+ | `user_journey_has_journey_step` | user_journey | journey_step |
350
+ | `user_flow_has_screen` | user_flow | screen |
351
+ | `screen_has_design_component` | screen | design_component |
352
+ | `design_component_has_design_token` | design_component | design_token |
353
+ | `feature_has_wireframe` | feature | wireframe |
354
+ | `wireframe_has_prototype` | wireframe | prototype |
355
+ | `feature_has_user_flow` | feature | user_flow |
356
+
357
+ ### Engineering
358
+
359
+ | Edge Type | From | To |
360
+ |---|---|---|
361
+ | `feature_has_service` | feature | service |
362
+ | `service_has_api_contract` | service | api_contract |
363
+ | `service_has_database_schema` | service | database_schema |
364
+ | `service_has_library_dependency` | service | library_dependency |
365
+ | `feature_has_feature_flag` | feature | feature_flag |
366
+ | `service_has_decision` | service | decision (with `layer: "engineering"`) |
367
+ | `service_has_technical_debt_item` | service | technical_debt_item |
368
+
369
+ ### Growth
370
+
371
+ | Edge Type | From | To |
372
+ |---|---|---|
373
+ | `funnel_has_funnel_step` | funnel | funnel_step |
374
+ | `acquisition_channel_feeds_funnel` | acquisition_channel | funnel |
375
+ | `growth_campaign_targets_acquisition_channel` | growth_campaign | acquisition_channel |
376
+ | `cohort_measured_by_metric` | cohort | metric |
377
+ | `growth_loop_has_experiment` | growth_loop | experiment (with `experiment_type: "growth"`) |
378
+ | `experiment_produces_learning` | experiment | learning |
379
+
380
+ ### Business Model
381
+
382
+ | Edge Type | From | To |
383
+ |---|---|---|
384
+ | `business_model_has_value_proposition` | business_model | value_proposition |
385
+ | `business_model_has_revenue_stream` | business_model | revenue_stream |
386
+ | `business_model_has_cost_structure` | business_model | cost_structure |
387
+ | `business_model_has_partnership` | business_model | partnership |
388
+ | `value_proposition_targets_persona` | value_proposition | persona |
389
+ | `revenue_stream_has_pricing_tier` | revenue_stream | pricing_tier |
390
+ | `pricing_tier_has_unit_economics` | pricing_tier | unit_economics |
391
+
392
+ ### Go-To-Market
393
+
394
+ | Edge Type | From | To |
395
+ |---|---|---|
396
+ | `gtm_strategy_has_ideal_customer_profile` | gtm_strategy | ideal_customer_profile |
397
+ | `gtm_strategy_has_positioning` | gtm_strategy | positioning |
398
+ | `gtm_strategy_has_messaging` | gtm_strategy | messaging |
399
+ | `gtm_strategy_has_launch` | gtm_strategy | launch |
400
+ | `launch_has_release` | launch | release |
401
+ | `positioning_has_competitive_battle_card` | positioning | competitive_battle_card |
402
+ | `competitive_battle_card_references_competitor` | competitive_battle_card | competitor |
403
+
404
+ ### Team & Organisation
405
+
406
+ | Edge Type | From | To |
407
+ |---|---|---|
408
+ | `team_has_role` | team | role |
409
+ | `team_has_stakeholder` | team | stakeholder |
410
+ | `team_has_retrospective` | team | retrospective |
411
+ | `team_has_dependency` | team | dependency |
412
+
413
+ ### Data & Analytics
414
+
415
+ | Edge Type | From | To |
416
+ |---|---|---|
417
+ | `metric_drives_metric` | metric (KPI) | metric (definition) |
418
+ | `data_source_defines_metric` | data_source | metric |
419
+ | `metric_has_event_schema` | metric | event_schema |
420
+ | `dashboard_tracks_metric` | dashboard | metric |
421
+ | `experiment_produces_learning` | experiment (with `experiment_type: "ab_test"`) | learning |
422
+
423
+ ### DevOps & Platform
424
+
425
+ | Edge Type | From | To |
426
+ |---|---|---|
427
+ | `service_has_service_level_indicator` | service | service_level_indicator |
428
+ | `service_level_objective_measured_by_service_level_indicator` | service_level_objective | service_level_indicator |
429
+ | `service_has_monitor` | service | monitor |
430
+ | `incident_has_postmortem` | incident | postmortem |
431
+ | `postmortem_produces_runbook` | postmortem | runbook |
432
+
433
+ ### Security
434
+
435
+ | Edge Type | From | To |
436
+ |---|---|---|
437
+ | `service_has_threat_model` | service | threat_model |
438
+ | `threat_model_has_vulnerability` | threat_model | vulnerability |
439
+ | `vulnerability_has_security_control` | vulnerability | security_control |
440
+
441
+ ### QA & Testing
442
+
443
+ | Edge Type | From | To |
444
+ |---|---|---|
445
+ | `feature_has_test_suite` | feature | test_suite |
446
+ | `test_suite_has_test_case` | test_suite | test_case |
447
+ | `release_has_qa_session` | release | qa_session |
448
+
449
+ ### Feedback & VoC
450
+
451
+ | Edge Type | From | To |
452
+ |---|---|---|
453
+ | `feature_request_informs_opportunity` | feature_request | opportunity |
454
+ | `feedback_theme_has_feature_request` | feedback_theme | feature_request |
455
+ | `nps_campaign_produces_feedback_theme` | nps_campaign | feedback_theme |
456
+ | `beta_program_produces_learning` | beta_program | learning |
457
+
458
+ ### Pricing & Packaging
459
+
460
+ | Edge Type | From | To |
461
+ |---|---|---|
462
+ | `pricing_strategy_has_experiment` | pricing_strategy | experiment (with `experiment_type: "pricing"`) |
463
+ | `pricing_strategy_has_pricing_tier` | pricing_strategy | pricing_tier |
464
+ | `pricing_tier_has_trial_config` | pricing_tier | trial_config |
465
+
466
+ ### AI/ML Operations
467
+
468
+ | Edge Type | From | To |
469
+ |---|---|---|
470
+ | `ai_model_has_prompt_version` | ai_model | prompt_version |
471
+ | `ai_model_has_eval_benchmark` | ai_model | eval_benchmark |
472
+ | `eval_benchmark_produces_learning` | eval_benchmark | learning |
473
+
474
+ ### Portfolio
475
+
476
+ | Edge Type | From | To |
477
+ |---|---|---|
478
+ | `organization_has_portfolio` | organization | portfolio |
479
+ | `portfolio_has_product_area` | portfolio | product_area |
480
+ | `product_area_has_product` | product_area | product |
481
+