@unified-product-graph/mcp-server 0.8.1 → 0.8.2
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.
- package/CHANGELOG.md +11 -0
- package/README.md +1 -1
- package/TOOLS.md +19 -13
- package/dist/index.js +1286 -285
- package/dist/index.js.map +1 -1
- package/dist/tools-manifest.json +94 -75
- package/package.json +1 -1
- package/scripts/claudemd-snippet.md +7 -7
- package/scripts/install-skills.sh +2 -2
- package/skills/upg/SKILL.md +41 -41
- package/skills/{upg-gaps → upg-check-gaps}/SKILL.md +40 -43
- package/skills/{upg-schema-health → upg-check-schema}/SKILL.md +7 -7
- package/skills/{upg-schema-evolve → upg-check-schema-coverage}/SKILL.md +12 -12
- package/skills/{upg-schema-edges → upg-check-schema-edges}/SKILL.md +3 -3
- package/skills/{upg-schema-consolidate → upg-check-schema-merge}/SKILL.md +5 -5
- package/skills/upg-context/SKILL.md +96 -72
- package/skills/upg-context-intelligence/SKILL.md +23 -27
- package/skills/upg-design-system/SKILL.md +21 -26
- package/skills/{upg-verify → upg-find-untracked}/SKILL.md +7 -12
- package/skills/{upg-rollback → upg-fix-rollback}/SKILL.md +6 -12
- package/skills/{upg-migrate → upg-fix-types}/SKILL.md +5 -9
- package/skills/upg-link/SKILL.md +125 -0
- package/skills/{upg-discover → upg-new-discovery}/SKILL.md +42 -58
- package/skills/{upg-capture → upg-new-from-session}/SKILL.md +13 -15
- package/skills/{upg-template → upg-new-from-template}/SKILL.md +8 -12
- package/skills/{upg-init → upg-new-graph}/SKILL.md +50 -82
- package/skills/{upg-hypothesis → upg-new-hypothesis}/SKILL.md +27 -36
- package/skills/{upg-launch → upg-new-launch}/SKILL-DETAIL.md +36 -92
- package/skills/{upg-launch → upg-new-launch}/SKILL.md +8 -18
- package/skills/{upg-okr → upg-new-okr}/SKILL-DETAIL.md +28 -46
- package/skills/{upg-okr → upg-new-okr}/SKILL.md +3 -3
- package/skills/{upg-persona → upg-new-persona}/SKILL.md +35 -67
- package/skills/{upg-research → upg-new-research}/SKILL.md +25 -33
- package/skills/{upg-schema-update → upg-new-schema-type}/SKILL.md +2 -2
- package/skills/{upg-strategy → upg-new-strategy}/SKILL.md +21 -27
- package/skills/upg-prioritise/SKILL.md +4 -4
- package/skills/upg-reflect/SKILL.md +7 -7
- package/skills/{upg-feedback → upg-send-feedback}/SKILL.md +30 -51
- package/skills/{upg-diff → upg-show-diff}/SKILL.md +6 -12
- package/skills/{upg-inspect → upg-show-entity}/SKILL.md +7 -9
- package/skills/{upg-impact → upg-show-impact}/SKILL.md +11 -15
- package/skills/{upg-journey → upg-show-journey}/SKILL.md +31 -32
- package/skills/{upg-analytics → upg-show-metrics}/SKILL.md +9 -12
- package/skills/{upg-schema-changelog → upg-show-schema-changelog}/SKILL.md +5 -5
- package/skills/{upg-status → upg-show-status}/SKILL.md +39 -40
- package/skills/{upg-tree → upg-show-tree}/SKILL.md +15 -15
- package/skills/{upg-export → upg-sync-export}/SKILL.md +10 -13
- package/skills/{upg-import → upg-sync-import}/SKILL.md +7 -13
- package/skills/{upg-pull → upg-sync-pull}/SKILL-DETAIL.md +13 -17
- package/skills/{upg-pull → upg-sync-pull}/SKILL.md +3 -3
- package/skills/{upg-push → upg-sync-push}/SKILL-DETAIL.md +4 -10
- package/skills/{upg-push → upg-sync-push}/SKILL.md +4 -4
- package/skills/{upg-snapshot → upg-sync-snapshot}/SKILL.md +2 -6
- package/skills/upg-trace/SKILL.md +7 -7
- package/skills/{upg-workspace → upg-use-workspace}/SKILL.md +8 -14
- package/skills/{upg-run → upg-walk-playbook}/SKILL.md +10 -10
- package/skills/upg-walk-region/SKILL-DETAIL.md +320 -0
- package/skills/upg-walk-region/SKILL.md +89 -0
- package/skills/upg-connect/SKILL.md +0 -167
- package/skills/upg-explore/SKILL-DETAIL.md +0 -481
- package/skills/upg-explore/SKILL.md +0 -297
|
@@ -13,24 +13,38 @@ This is the shared brain for all `/upg-*` skills. When you load this, you unders
|
|
|
13
13
|
|
|
14
14
|
## What Is the Unified Product Graph?
|
|
15
15
|
|
|
16
|
-
The Unified Product Graph is an **open standard for structured product thinking**. It defines how product knowledge connects:
|
|
16
|
+
The Unified Product Graph is an **open standard for structured product thinking**. It defines how product knowledge connects: a catalogue of entity types organised into canonical regions (Strategy, Users & Needs, Discovery, Market, Experience, Delivery, Engineering, Business GTM, Analytics, Operations), with typed properties and semantic relationships. The live catalogue is the source of truth: call `list_entity_types` for the current types and `list_regions` for the current regions rather than relying on any count quoted here.
|
|
17
17
|
|
|
18
18
|
It's not a tool. It's a vocabulary. A shared language for product decisions.
|
|
19
19
|
|
|
20
20
|
The graph captures everything a product team thinks about: who the users are, what problems exist, what solutions are proposed, how the business works, how to reach people, what to build, and whether any of it is working. Instead of scattering this across Notion docs, Slack threads, and slide decks, the graph connects it all.
|
|
21
21
|
|
|
22
|
-
A `.upg` file is a
|
|
22
|
+
A `.upg` file is a JSON file that holds an entire product graph. You can read it, edit it, diff it, and commit it like any other file in your repo; it belongs to whoever created it.
|
|
23
23
|
|
|
24
24
|
**Standard:** unifiedproductgraph.org
|
|
25
25
|
|
|
26
26
|
---
|
|
27
27
|
|
|
28
|
+
## MCP-First Rule (the default for every skill)
|
|
29
|
+
|
|
30
|
+
The spec evolves: entity types, status/phase enums, property keys, valid children, and canonical edges all change between versions. **Do not write payloads from memory.** Before you create or change anything, fetch the live spec from the MCP server. This is the documented default for all `/upg-*` skills:
|
|
31
|
+
|
|
32
|
+
- **Before creating or updating any entity:** call `get_entity_schema({ type: <type> })` and drive the form from its `expected_properties` and valid parent→child hierarchy. (`list_entity_types` lists what types exist; `get_valid_children({ parent_type: <type> })` answers "what can live under this?")
|
|
33
|
+
- **For a node's top-level lifecycle `status`:** read the phases from `get_lifecycle({ entity_type: <type> })`. The phases live there — `get_entity_schema` does not return a `status` descriptor for stateless types (e.g. persona), so don't try to derive top-level `status` from it. Set top-level `status` to one of the phase ids `get_lifecycle` returns (e.g. objective → `draft`/`active`/`achieved`/`missed`/`deferred`). Many types are stateless and take no `status` at all; if `get_lifecycle` returns no phases, omit `status`.
|
|
34
|
+
- **`*_status` PROPERTIES are NOT the node's lifecycle `status`.** Some types carry a property such as `objective_status` or `kr_status` (an enum inside `expected_properties`). These are distinct fields from the node's top-level lifecycle `status` and use their own enum values — never copy a lifecycle phase into a `*_status` property or vice versa.
|
|
35
|
+
- **Before creating any edge:** call `resolve_edge_for_pair({ source_type, target_type })` to get the canonical edge for that pair, then let the server infer `type` (omit an explicit `type:` where you can).
|
|
36
|
+
- **Before quoting a number** (how many types, frameworks, regions, lenses, playbooks, anti-patterns): derive it from the relevant `list_*` call or `get_spec_version`, or don't quote it. Counts written into a skill drift the moment the spec moves.
|
|
37
|
+
|
|
38
|
+
Any catalogue table reproduced in this file (entity emojis, framework-label Rosetta, region/lens/stage names) is a **display convenience, not the authoritative spec**. The live MCP introspection tools (`get_type_label({ entity_type })`, `list_regions`, `get_region`, `list_lenses`, `get_lens`, `list_product_stages`, `list_playbooks`, `get_playbook`, `list_frameworks`, `get_framework`) are always the source of truth, and these tables are codegen-from-core candidates that may lag the spec.
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
28
42
|
## The Cartographic Frame
|
|
29
43
|
|
|
30
|
-
UPG
|
|
44
|
+
UPG is a **chart** of product knowledge. Two orthogonal organising principles:
|
|
31
45
|
|
|
32
46
|
**Regions**: *where* knowledge lives.
|
|
33
|
-
|
|
47
|
+
The canonical regions roll up atomic domains (enumerate them live with `list_regions` / `list_domains`). Each region has an anchor entity, a shape archetype, a mental model, and a canonical playbook that walks its creation sequence.
|
|
34
48
|
|
|
35
49
|
**Approaches**: *how* you read the chart.
|
|
36
50
|
Five paths of arrival, each answering one question:
|
|
@@ -46,13 +60,13 @@ Five paths of arrival, each answering one question:
|
|
|
46
60
|
Approaches are the **agent's vocabulary**, not the user's menu. Users speak natural language; the LLM translates intent into one of the five approaches and routes to the fitting skill.
|
|
47
61
|
|
|
48
62
|
**Playbooks**: region-anchored creation sequences.
|
|
49
|
-
|
|
63
|
+
Canonical playbooks (enumerate via `list_playbooks`, load one via `get_playbook`; roughly one per region plus a few cross-region). A playbook says: "If you're filling out the Strategy region, do this in this order, with these entities." Reference them by their prefixed id (e.g. `playbook:strategy-outcomes`).
|
|
50
64
|
|
|
51
65
|
**Frameworks**: named techniques inside an approach.
|
|
52
|
-
|
|
66
|
+
Framework definitions served by `list_frameworks` / `get_framework` (RICE lives inside Prioritise; Wardley Map lives inside Plan). The approach is the cognitive operation; the framework is one specific shape of that operation. (The broader frameworks package catalogues more; the MCP surface exposes the canonical subset; enumerate it live rather than quoting a count.)
|
|
53
67
|
|
|
54
68
|
**Anti-patterns**: curated audit catalogue.
|
|
55
|
-
|
|
69
|
+
Anti-patterns codify what *bad* product thinking looks like (personas without jobs, opportunities without needs, etc.). Enumerate via `list_anti_patterns`; they run inside the Inspect approach.
|
|
56
70
|
|
|
57
71
|
---
|
|
58
72
|
|
|
@@ -73,7 +87,7 @@ When you're running a UPG skill, you are a **product thinking partner**. Not a c
|
|
|
73
87
|
|
|
74
88
|
## The 8 Business Areas
|
|
75
89
|
|
|
76
|
-
Every entity in the graph maps to one of 8 areas. These are the questions every product must answer.
|
|
90
|
+
Every entity in the graph maps to one of 8 areas. These are the questions every product must answer. The areas themselves are an editorial grouping (stable); the **Key Entities** column is illustrative, not exhaustive: when you actually need the types in an area, confirm against `list_entity_types` rather than treating this column as the spec.
|
|
77
91
|
|
|
78
92
|
| Area | Emoji | Question | Key Entities |
|
|
79
93
|
|---|---|---|---|
|
|
@@ -111,31 +125,31 @@ After creating entities, check the graph and recommend ONE next step. **Use sess
|
|
|
111
125
|
**Prioritise recommendations in this order:**
|
|
112
126
|
1. What's most relevant to what was just created/discussed
|
|
113
127
|
2. The biggest business area gap that **hasn't been recommended yet this session**
|
|
114
|
-
3. `/upg-journey` as fallback
|
|
128
|
+
3. `/upg-show-journey` as fallback
|
|
115
129
|
|
|
116
130
|
Map gaps to skills:
|
|
117
|
-
- Identity → `/upg-strategy`
|
|
118
|
-
- Understanding → `/upg-persona`
|
|
119
|
-
- Discovery → `/upg-
|
|
120
|
-
- Reaching → `/upg-launch` or `/upg-
|
|
121
|
-
- Converting → `/upg-
|
|
122
|
-
- Building → `/upg-
|
|
123
|
-
- Sustaining → `/upg-
|
|
124
|
-
- Learning → `/upg-okr` or `/upg-
|
|
131
|
+
- Identity → `/upg-new-strategy`
|
|
132
|
+
- Understanding → `/upg-new-persona`
|
|
133
|
+
- Discovery → `/upg-new-discovery`
|
|
134
|
+
- Reaching → `/upg-new-launch` or `/upg-walk-region marketing`
|
|
135
|
+
- Converting → `/upg-walk-region business_model`
|
|
136
|
+
- Building → `/upg-walk-region product_spec`
|
|
137
|
+
- Sustaining → `/upg-walk-region business_model`
|
|
138
|
+
- Learning → `/upg-new-okr` or `/upg-walk-region team_org`
|
|
125
139
|
|
|
126
140
|
**Sync suggestion:** If the skill created or modified entities during the session, add a sync line after the recommendation:
|
|
127
141
|
|
|
128
142
|
```
|
|
129
|
-
🔄 **Sync?** Your local graph has new entities. Run `/upg-push` to sync to the cloud.
|
|
143
|
+
🔄 **Sync?** Your local graph has new entities. Run `/upg-sync-push` to sync to the cloud.
|
|
130
144
|
```
|
|
131
145
|
|
|
132
146
|
Only show this line when:
|
|
133
147
|
1. At least one entity was created or updated during the session
|
|
134
148
|
2. The cloud MCP tools exist (i.e. `mcp__upg-cloud__*` tools are available)
|
|
135
|
-
3. The user did NOT just run `/upg-pull` (they just synced FROM cloud; pushing back immediately makes no sense)
|
|
149
|
+
3. The user did NOT just run `/upg-sync-pull` (they just synced FROM cloud; pushing back immediately makes no sense)
|
|
136
150
|
|
|
137
151
|
Do NOT show the sync line when:
|
|
138
|
-
- The skill was read-only (e.g. `/upg-status`, `/upg-gaps`, `/upg-tree`, `/upg-diff`)
|
|
152
|
+
- The skill was read-only (e.g. `/upg-show-status`, `/upg-check-gaps`, `/upg-show-tree`, `/upg-show-diff`)
|
|
139
153
|
- No entities were created or modified
|
|
140
154
|
|
|
141
155
|
### Progress Indicators
|
|
@@ -214,7 +228,7 @@ After reading the .upg file, if the user mentions a product that doesn't match t
|
|
|
214
228
|
|
|
215
229
|
> I see **[existing product]** in your graph. Are we working on that, or starting something new?
|
|
216
230
|
|
|
217
|
-
If new: guide to `/upg-
|
|
231
|
+
If new: guide to `/upg-new-graph` first. If same: continue.
|
|
218
232
|
|
|
219
233
|
### parent_id Clarification
|
|
220
234
|
|
|
@@ -226,7 +240,7 @@ Skills should narrate the graph like a story, not recite a spreadsheet. The grap
|
|
|
226
240
|
|
|
227
241
|
**When to narrate:**
|
|
228
242
|
- Session start: orient the user in their product world, not a database
|
|
229
|
-
- Status checks (`/upg-status`, `/upg`); show the shape of thinking, not row counts
|
|
243
|
+
- Status checks (`/upg-show-status`, `/upg`); show the shape of thinking, not row counts
|
|
230
244
|
- Recommending next steps: ground the suggestion in a character or relationship
|
|
231
245
|
- After capture: show what changed and why it matters
|
|
232
246
|
|
|
@@ -254,27 +268,27 @@ Skills should narrate the graph like a story, not recite a spreadsheet. The grap
|
|
|
254
268
|
|
|
255
269
|
Skills must adapt to where the product actually is, not where it could theoretically be. A solo builder sketching their first idea doesn't need compliance frameworks.
|
|
256
270
|
|
|
257
|
-
**Detecting the stage:** Read `product.stage` from `get_product_context()`. If missing, default to `
|
|
271
|
+
**Detecting the stage:** Read `product.stage` from `get_product_context()`. The value is a canonical `UPGProductStage`; the canonical list is served by `list_product_stages` (source of truth). At time of writing the stages are `concept | validation | build | beta | launch | growth | mature | maintenance | sunset` (a static convenience for the table below; if it disagrees with `list_product_stages`, trust the tool). If missing, default to `concept`. The stage governs how the session adapts.
|
|
258
272
|
|
|
259
273
|
| Stage | Tone | Focus |
|
|
260
274
|
|-------|------|-------|
|
|
261
|
-
| `
|
|
262
|
-
| `
|
|
263
|
-
| `growth` | Strategic, structured | Reaching + Sustaining |
|
|
264
|
-
| `
|
|
275
|
+
| `concept`, `validation` | Simple, encouraging | Identity + Understanding |
|
|
276
|
+
| `build`, `beta` | Practical, momentum-focused | Building + Converting |
|
|
277
|
+
| `launch`, `growth` | Strategic, structured | Reaching + Sustaining |
|
|
278
|
+
| `mature`, `maintenance`, `sunset` | Precise, systems-aware | All 8 areas active |
|
|
265
279
|
|
|
266
280
|
**What to adapt:**
|
|
267
281
|
- **Type pickers and suggestions:** Surface entity types proportional to stage. Early-stage products don't need governance, compliance, or platform-tier types yet.
|
|
268
|
-
- **Framework recommendations:** `
|
|
269
|
-
- **Language complexity:** `
|
|
270
|
-
- **Gap analysis:** Only flag missing entities appropriate to the current stage. A solo builder at `
|
|
282
|
+
- **Framework recommendations:** `concept`/`validation`/`build` get lightweight frameworks (Lean Canvas, simple persona cards). `launch`/`growth` get structured ones (JTBD, growth funnels). `mature`+ gets the full catalogue.
|
|
283
|
+
- **Language complexity:** `concept` = plain language. `build`/`beta` = some product terminology. `growth`/`mature` = assume fluency.
|
|
284
|
+
- **Gap analysis:** Only flag missing entities appropriate to the current stage. A solo builder at `concept` with no `compliance_framework` is not a gap.
|
|
271
285
|
|
|
272
286
|
**When to suggest graduating:**
|
|
273
287
|
- The current stage's entities are well-populated AND the user is reaching for concepts beyond the stage
|
|
274
288
|
- Never push. Frame it as unlocking: *"Your graph is getting rich; want to unlock the growth-stage entity types?"*
|
|
275
289
|
- Never auto-upgrade. Stage changes are explicit; the user decides.
|
|
276
290
|
|
|
277
|
-
**Hard rule:** When in doubt, show less. An empty graph with
|
|
291
|
+
**Hard rule:** When in doubt, show less. An empty graph with a few dozen thoughtful types feels like possibility. An empty graph with the entire type catalogue dumped on it feels like homework.
|
|
278
292
|
|
|
279
293
|
### Proactive Intelligence
|
|
280
294
|
|
|
@@ -292,7 +306,7 @@ Check these conditions against the current graph and surface the most relevant o
|
|
|
292
306
|
| Features without persona connection | "'{feature}' isn't connected to any persona. Who is this for?" | Teresa Torres: every feature should trace to a user need |
|
|
293
307
|
| Personas without evidence | "'{persona}' has no research evidence linked. Right now this is an assumption, not a validated persona." | Discovery: personas without evidence are fiction |
|
|
294
308
|
| Needs without opportunities | "{N} needs have no connected opportunity. Pain without a response is just a complaint list." | OST: needs should surface opportunities |
|
|
295
|
-
| Business model missing at
|
|
309
|
+
| Business model missing at build/launch/growth stage | "Your product is at {stage} stage but has no business model entities. Strategy without economics is a hobby." | BMC: viability matters |
|
|
296
310
|
| No hypotheses at all | "You have {N} features but zero hypotheses. Everything you're building is an untested bet." | Lean: build-measure-learn requires hypotheses |
|
|
297
311
|
| Validated hypothesis → no feature | "'{hypothesis}' was validated but has no connected feature. You proved it works; now build it." | Discovery→Delivery gap |
|
|
298
312
|
| High orphan rate (>30%) | "{N} of your {total} entities ({pct}%) have no connections. Isolated entities don't compound." | Graph value comes from connections |
|
|
@@ -307,7 +321,7 @@ Check these conditions against the current graph and surface the most relevant o
|
|
|
307
321
|
|
|
308
322
|
**Examples:**
|
|
309
323
|
|
|
310
|
-
During `/upg-
|
|
324
|
+
During `/upg-walk-region feature`:
|
|
311
325
|
> 💡 "Quick note: '{feature}' isn't connected to a persona yet. Want to link it to one of your existing personas?"
|
|
312
326
|
|
|
313
327
|
During smart ending:
|
|
@@ -329,7 +343,7 @@ Skills should prefer **depth before breadth**: three rich personas teach the gra
|
|
|
329
343
|
**When to nudge:**
|
|
330
344
|
1. **After creating an entity.** If completeness is below 50%, surface it: *"Kai is only 40% complete; want to add their motivation and tech comfort before we move on?"* Pick the 2–3 most impactful missing fields, not the full list.
|
|
331
345
|
2. **Before creating another entity of the same type.** If existing instances average below 60% completeness: *"Your 4 existing pain points average 45%; want to enrich those first, or keep drafting new ones?"*
|
|
332
|
-
3. **During `/upg-status` or `/upg-gaps`.** Flag sparse entity types as a first-class finding.
|
|
346
|
+
3. **During `/upg-show-status` or `/upg-check-gaps`.** Flag sparse entity types as a first-class finding.
|
|
333
347
|
|
|
334
348
|
**How to phrase it:**
|
|
335
349
|
- Warm, not nagging. One mention per type per interaction is enough.
|
|
@@ -339,14 +353,14 @@ Skills should prefer **depth before breadth**: three rich personas teach the gra
|
|
|
339
353
|
**When NOT to nudge:**
|
|
340
354
|
- **Rapid brainstorming.** If the user is firing off multiple creates, stay out of the way. Offer a batch-enrichment pass at the end.
|
|
341
355
|
- **Explicit opt-out.** If the user says "just titles for now" or "skeleton first", skip nudges for the rest of that interaction.
|
|
342
|
-
- **Bulk imports.** `/upg-
|
|
356
|
+
- **Bulk imports.** `/upg-new-from-session` and `/upg-new-discovery` often create many entities at once. Nudge once at the end, not per entity.
|
|
343
357
|
|
|
344
358
|
### Cross-Skill Awareness
|
|
345
359
|
|
|
346
|
-
Skills don't run in isolation. A user might run `/upg-persona` → `/upg-
|
|
360
|
+
Skills don't run in isolation. A user might run `/upg-new-persona` → `/upg-new-discovery` → `/upg-walk-region business_model` in a single session. Each skill must build on what came before, not start fresh.
|
|
347
361
|
|
|
348
362
|
**Detecting what happened earlier:**
|
|
349
|
-
1. **Scan the conversation** for prior `/upg-*` skill invocations. If the user ran `/upg-persona` earlier, personas were created.
|
|
363
|
+
1. **Scan the conversation** for prior `/upg-*` skill invocations. If the user ran `/upg-new-persona` earlier, personas were created.
|
|
350
364
|
2. **Check the graph** for recently-added entities. Reference them by name, not generically.
|
|
351
365
|
3. **Read the thread, not just the graph.** The user may have discussed insights or rejected options during a prior skill run.
|
|
352
366
|
|
|
@@ -375,18 +389,20 @@ The UPG stores canonical types (`need`, `hypothesis`, `opportunity`). Users thin
|
|
|
375
389
|
|
|
376
390
|
**How to detect context:** Explicit mention ("lean canvas", "JTBD", "design thinking", "shape up"), or the skill's natural framework home. If no framework is evident, use plain English (canonical UPG names are fine).
|
|
377
391
|
|
|
378
|
-
**High-frequency type → framework label mapping
|
|
392
|
+
**High-frequency type → framework label mapping** *(static display reference / codegen-from-core candidate; not authoritative):*
|
|
393
|
+
|
|
394
|
+
Framework label keys are `lean_canvas`, `bmc`, `jtbd`, `design_thinking`, `lean_startup`. A blank cell means the spec defines no label for that type under that framework; fall back to the canonical UPG name. These values were taken verbatim from core's `framework_labels` at a point in time; do not improvise, and treat `get_type_label({ entity_type }).framework_labels` as the live source of truth (this table may lag the spec).
|
|
379
395
|
|
|
380
|
-
| UPG Type | Lean Canvas | BMC | JTBD | Design Thinking | Lean Startup |
|
|
396
|
+
| UPG Type | Lean Canvas (`lean_canvas`) | BMC (`bmc`) | JTBD (`jtbd`) | Design Thinking (`design_thinking`) | Lean Startup (`lean_startup`) |
|
|
381
397
|
|----------|-------------|-----|------|-----------------|--------------|
|
|
382
|
-
| `need` | Problem |
|
|
383
|
-
| `solution` | Solution |
|
|
384
|
-
| `hypothesis` | Assumption |
|
|
385
|
-
| `opportunity` |
|
|
386
|
-
| `persona` | Customer Segment | Customer
|
|
387
|
-
| `metric` | Key Metric | |
|
|
398
|
+
| `need` | Problem | | Struggle | Pain Point | |
|
|
399
|
+
| `solution` | Solution | | | Solution | |
|
|
400
|
+
| `hypothesis` | Riskiest Assumption | | | | Hypothesis |
|
|
401
|
+
| `opportunity` | | | | | |
|
|
402
|
+
| `persona` | Customer Segment | Customer Archetype | | Persona | |
|
|
403
|
+
| `metric` | Key Metric | | | | |
|
|
388
404
|
|
|
389
|
-
Full mapping lives in `packages/upg-spec/src/type-labels.ts`; the Rosetta Stone.
|
|
405
|
+
For labels under other frameworks (OST, VPC, AARRR, DORA, etc.), call `get_type_label({ entity_type })` and read `framework_labels`; the resolver is the source of truth. Full mapping lives in `packages/upg-spec/src/type-labels.ts`; the Rosetta Stone.
|
|
390
406
|
|
|
391
407
|
**Rules:**
|
|
392
408
|
1. **Store canonical, display contextual.** Never change the underlying type. A "Problem" in Lean Canvas is stored as `need`. Always.
|
|
@@ -401,7 +417,7 @@ Full mapping lives in `packages/upg-spec/src/type-labels.ts`; the Rosetta Stone.
|
|
|
401
417
|
### Brand
|
|
402
418
|
- **Name:** Always "Unified Product Graph" in full; never just "UPG" in user-facing text
|
|
403
419
|
|
|
404
|
-
- **Logo:** Dot cluster + H1; only on `/upg`, `/upg-status`, `/upg-export`
|
|
420
|
+
- **Logo:** Dot cluster + H1; only on `/upg`, `/upg-show-status`, `/upg-sync-export`
|
|
405
421
|
|
|
406
422
|
```
|
|
407
423
|
· ·
|
|
@@ -412,6 +428,8 @@ Full mapping lives in `packages/upg-spec/src/type-labels.ts`; the Rosetta Stone.
|
|
|
412
428
|
|
|
413
429
|
### Entity Emojis
|
|
414
430
|
|
|
431
|
+
*Static display reference (codegen-from-core candidate; the authoritative emoji for a type is `get_type_label({ entity_type }).emoji`). Use this table for quick rendering; if a type is missing or disagrees, trust `get_type_label`.*
|
|
432
|
+
|
|
415
433
|
| Type | Emoji | Type | Emoji |
|
|
416
434
|
|---|---|---|---|
|
|
417
435
|
| product, outcome, objective, key_result | 🎯 | feature | 📦 |
|
|
@@ -448,30 +466,26 @@ Full mapping lives in `packages/upg-spec/src/type-labels.ts`; the Rosetta Stone.
|
|
|
448
466
|
- **Bold** for key values, *italic* for quotes/attributions, `code` for commands/values
|
|
449
467
|
- > Blockquotes for insights and coaching
|
|
450
468
|
|
|
451
|
-
### Footer
|
|
452
|
-
|
|
453
|
-
Every skill ends with:
|
|
454
|
-
|
|
455
|
-
```
|
|
456
|
-
┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
|
|
457
|
-
Your .upg file is yours: open standard, portable, git-friendly.
|
|
458
|
-
unifiedproductgraph.org
|
|
459
|
-
```
|
|
460
|
-
|
|
461
469
|
---
|
|
462
470
|
|
|
463
471
|
## Lens System
|
|
464
472
|
|
|
465
|
-
UPG has
|
|
473
|
+
UPG has a set of **lenses** that change what is surfaced first, recommended, and how gaps are framed. The lens is stored in `sessionContext.lens`. Check it via `get_session_context()`. The canonical lens ids are served by `list_lenses` / `get_lens` (source of truth); at time of writing they are `product`, `ux_design`, `engineering`, `growth`, `business`, `research`, `marketing`, `full`. **The design lens id is `ux_design`, not `design`** — `update_session_context({ lens: "ux_design" })`.
|
|
466
474
|
|
|
467
475
|
### Lenses
|
|
468
476
|
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
|
472
|
-
|
|
473
|
-
|
|
|
474
|
-
|
|
|
477
|
+
*Static display reference (codegen-from-core candidate). The **Key entity types** column is illustrative; for the authoritative per-lens visible types call `get_lens(<id>).visible_types`.*
|
|
478
|
+
|
|
479
|
+
| Lens id | Name | Protagonist | Session-start skill | Key entity types |
|
|
480
|
+
|------|------|-------------|--------------------|--------------------|
|
|
481
|
+
| `product` | Product | The user/persona | `/upg-show-journey` | persona, job, need, outcome, hypothesis |
|
|
482
|
+
| `ux_design` | Design | The interface | `/upg-walk-region ux_design` | screen, design_component, user_flow, design_token, decision (layer: design) |
|
|
483
|
+
| `engineering` | Engineering | The codebase | `/upg-show-status` | bug, feature, task, technical_debt_item, investigation, root_cause, fix |
|
|
484
|
+
| `growth` | Growth | The funnel | `/upg-walk-region growth` | funnel, acquisition_channel, growth_campaign, positioning |
|
|
485
|
+
| `business` | Business | The viability | `/upg-walk-region business_model` | value_proposition, revenue_stream, cost_structure, unit_economics, gtm_strategy |
|
|
486
|
+
| `research` | Research | The evidence | `/upg-new-research` | research_study, insight, observation, opportunity, evidence |
|
|
487
|
+
| `marketing` | Marketing | The audience | `/upg-new-launch` | positioning, messaging, marketing_channel, content_piece, launch |
|
|
488
|
+
| `full` | Full | Everything | `/upg-show-journey` | all types, canonical vocabulary |
|
|
475
489
|
|
|
476
490
|
### Lens-Aware Behavior
|
|
477
491
|
|
|
@@ -480,26 +494,36 @@ When `sessionContext.lens` is set, adapt your behavior:
|
|
|
480
494
|
**Narration style:**
|
|
481
495
|
- **product:** Lead with persona threads. "Kai has 3 jobs and 2 needs."
|
|
482
496
|
- **engineering:** Lead with implementation state. "Auth flow has 2 bugs and 1 blocker."
|
|
483
|
-
- **
|
|
497
|
+
- **ux_design:** Lead with coverage. "12 screens mapped, 3 missing flows."
|
|
484
498
|
- **growth:** Lead with funnel health. "2 funnels, 3 channels, no campaigns yet."
|
|
499
|
+
- **business:** Lead with viability. "Revenue modeled, no unit economics yet."
|
|
500
|
+
- **research:** Lead with evidence state. "20 observations, 4 insights, 1 open study."
|
|
501
|
+
- **marketing:** Lead with audience reach. "Positioning set, 2 channels, no launch plan."
|
|
502
|
+
- **full:** Canonical vocabulary, no lens-specific framing.
|
|
485
503
|
|
|
486
504
|
**Recommendations:**
|
|
487
|
-
- **product:** Prioritize discovery and validation. `/upg-
|
|
488
|
-
- **engineering:** Prioritize resolution. `/upg-impact --upstream`, `/upg-impact`, `/upg-
|
|
489
|
-
- **
|
|
490
|
-
- **growth:** Prioritize reach. `/upg-
|
|
505
|
+
- **product:** Prioritize discovery and validation. `/upg-new-discovery`, `/upg-new-hypothesis`
|
|
506
|
+
- **engineering:** Prioritize resolution. `/upg-show-impact --upstream`, `/upg-show-impact`, `/upg-walk-region engineering`
|
|
507
|
+
- **ux_design:** Prioritize coverage. `/upg-walk-region ux_design` (covers screens, flows, wireframes, audit)
|
|
508
|
+
- **growth:** Prioritize reach. `/upg-walk-region growth`, `/upg-walk-region marketing`, `/upg-new-launch`
|
|
509
|
+
- **business:** Prioritize viability. `/upg-walk-region business_model`, `/upg-new-strategy`
|
|
510
|
+
- **research:** Prioritize evidence. `/upg-new-research`, `/upg-new-discovery`
|
|
511
|
+
- **marketing:** Prioritize messaging. `/upg-new-launch`, `/upg-walk-region marketing`
|
|
491
512
|
|
|
492
513
|
**Gap framing:**
|
|
493
514
|
- **product:** "Missing personas", "untested hypotheses", "no validation"
|
|
494
515
|
- **engineering:** "Unresolved blockers", "disconnected work items", "bugs without fixes"
|
|
495
|
-
- **
|
|
516
|
+
- **ux_design:** "Screens without flows", "orphan components", "no design system"
|
|
496
517
|
- **growth:** "No funnels", "channels without campaigns", "no positioning"
|
|
518
|
+
- **business:** "No revenue model", "missing unit economics", "no GTM plan"
|
|
519
|
+
- **research:** "Observations without insights", "insights without opportunities", "thin participant pool"
|
|
520
|
+
- **marketing:** "No positioning", "features without messaging", "channels without content"
|
|
497
521
|
|
|
498
522
|
### Lens Entity Emojis
|
|
499
523
|
|
|
500
|
-
In addition to the standard emojis above, use these for lens-specific types:
|
|
524
|
+
*Static display reference (codegen-from-core candidate; authoritative source is `get_type_label({ entity_type }).emoji`).* In addition to the standard emojis above, use these for lens-specific types:
|
|
501
525
|
|
|
502
|
-
**Engineering:** 🐛 bug, 📋 task,
|
|
526
|
+
**Engineering:** 🐛 bug, 📋 task, 🔧 technical_debt_item, 🔍 investigation, 🌿 root_cause, 💊 fix, 🚩 feature_flag, 🚀 deployment
|
|
503
527
|
|
|
504
528
|
**Design:** 🖼 screen, 🧩 design_component, 🎨 design_token, ✏️ wireframe, 🔄 user_flow, 📐 design_system, 📝 decision (layer: design)
|
|
505
529
|
|
|
@@ -44,7 +44,7 @@ These people are already in the terminal. They don't need another app; they need
|
|
|
44
44
|
- Building a first real product; background in engineering, new to product thinking
|
|
45
45
|
- Needs: a structured way to think about users before jumping to code; validation before build
|
|
46
46
|
- Fears: building the wrong thing, shipping features nobody asked for
|
|
47
|
-
- UPG entry point: `/upg-
|
|
47
|
+
- UPG entry point: `/upg-new-graph` → `/upg-new-research` → `/upg-new-hypothesis`
|
|
48
48
|
- Language: responds to frameworks and structure; likes "the canonical way to do X"
|
|
49
49
|
|
|
50
50
|
These users often discover UPG through visual tools rather than the CLI.
|
|
@@ -77,21 +77,17 @@ If any of these are empty, there's a blind spot. The graph makes blind spots vis
|
|
|
77
77
|
|
|
78
78
|
Every assumption is a hypothesis. Every hypothesis needs an experiment. Every experiment produces a learning. This isn't academic; it's the difference between building something people want and building something you think they want.
|
|
79
79
|
|
|
80
|
-
### 4.
|
|
81
|
-
|
|
82
|
-
The `.upg` file is yours. MIT licensed. Portable. Git-friendly. Your thinking is your data.
|
|
83
|
-
|
|
84
|
-
### 5. The graph compounds over time.
|
|
80
|
+
### 4. The graph compounds over time.
|
|
85
81
|
|
|
86
82
|
Every entity you add makes the next decision easier. A persona without connections is a note. A persona connected to jobs, needs, and outcomes is a lens. The graph gets more valuable the more it reflects how your product actually thinks.
|
|
87
83
|
|
|
88
|
-
###
|
|
84
|
+
### 5. Collaborate, don't interrogate
|
|
89
85
|
|
|
90
86
|
Every question should feel like brainstorming with a partner, not filling out a form. Offer options. Suggest. React. Build on what the user says. One question at a time; never dump a wall of prompts.
|
|
91
87
|
|
|
92
|
-
###
|
|
88
|
+
### 6. Start simple, scale when ready
|
|
93
89
|
|
|
94
|
-
The graph grows with the product. A solo builder at the `
|
|
90
|
+
The graph grows with the product. A solo builder at the `concept` stage uses a small fraction of the entity catalogue; most types surface only when the product is mature enough to need them. Don't overwhelm an early-stage builder with concepts that belong at scale.
|
|
95
91
|
|
|
96
92
|
---
|
|
97
93
|
|
|
@@ -101,31 +97,31 @@ Every UPG skill follows one of three patterns:
|
|
|
101
97
|
|
|
102
98
|
### Pattern 1: Discovery (guided conversation)
|
|
103
99
|
Ask → discuss → create entities → connect. The user provides the thinking, you structure it. One question at a time, numbered options, vibe check before creating.
|
|
104
|
-
Skills: `/upg-persona`, `/upg-
|
|
100
|
+
Skills: `/upg-new-persona`, `/upg-new-discovery`, `/upg-new-strategy`, `/upg-walk-region engineering`, `/upg-walk-region growth`, `/upg-walk-region ux_design`
|
|
105
101
|
|
|
106
102
|
### Pattern 2: Analysis (read and map)
|
|
107
103
|
Scan external sources (codebase, docs, tools) → infer entities → present for confirmation → create. The skill does the reading, the user validates. Fast, automated, high-leverage.
|
|
108
|
-
Skills: `/upg-
|
|
104
|
+
Skills: `/upg-walk-region engineering` (codebase / api / debt / deps), `/upg-walk-region ux_design` (screens / design-audit), `/upg-find-untracked`, `/upg-walk-region marketing` (SEO).
|
|
109
105
|
|
|
110
106
|
### Pattern 3: Workshop (think together)
|
|
111
107
|
Interactive decision-making with frameworks, scoring, and trade-offs. Not just Q&A; actual collaborative problem-solving with comparison tables, ranking, and "why this matters" coaching.
|
|
112
|
-
Skills: `/upg-
|
|
108
|
+
Skills: `/upg-walk-region pricing`, `/upg-walk-region content`, `/upg-walk-region ux_design` (flows / wireframes), `/upg-walk-region growth`.
|
|
113
109
|
|
|
114
110
|
---
|
|
115
111
|
|
|
116
112
|
## The Journey: 7 Phases
|
|
117
113
|
|
|
118
114
|
```
|
|
119
|
-
Phase 1: Identity /upg-
|
|
120
|
-
Phase 2: Understanding /upg-persona, /upg-research, /upg-
|
|
121
|
-
Phase 3: Discovery /upg-
|
|
122
|
-
Phase 4: Business /upg-
|
|
123
|
-
Phase 5: Reaching /upg-launch, /upg-
|
|
124
|
-
Phase 6: Building /upg-
|
|
125
|
-
Phase 7: Learning /upg-
|
|
115
|
+
Phase 1: Identity /upg-new-graph, /upg-new-strategy
|
|
116
|
+
Phase 2: Understanding /upg-new-persona, /upg-new-research, /upg-walk-region ux_design
|
|
117
|
+
Phase 3: Discovery /upg-new-discovery, /upg-new-hypothesis
|
|
118
|
+
Phase 4: Business /upg-walk-region business_model, /upg-walk-region market_intelligence, /upg-new-okr, /upg-walk-region pricing
|
|
119
|
+
Phase 5: Reaching /upg-new-launch, /upg-walk-region market_intelligence, /upg-walk-region content, /upg-walk-region marketing, /upg-walk-region growth
|
|
120
|
+
Phase 6: Building /upg-walk-region product_spec, /upg-walk-region engineering, /upg-walk-region ux_design
|
|
121
|
+
Phase 7: Learning /upg-walk-region team_org, /upg-check-gaps, /upg-walk-region engineering (debt + deps)
|
|
126
122
|
```
|
|
127
123
|
|
|
128
|
-
`/upg-journey` tracks progress across all phases. Every skill points back to it.
|
|
124
|
+
`/upg-show-journey` tracks progress across all phases. Every skill points back to it.
|
|
129
125
|
|
|
130
126
|
---
|
|
131
127
|
|
|
@@ -190,13 +186,13 @@ A benchmark is not "you have 1 persona, expected 2-4." A benchmark is a conversa
|
|
|
190
186
|
> "You mapped a user journey for Kai but didn't mark any friction points. The whole reason to map a journey is to find where things break down; the moments of confusion, frustration, or abandonment. Go back and score each step: where does Kai struggle?"
|
|
191
187
|
|
|
192
188
|
**Cross-domain (code exists but graph doesn't reflect it):**
|
|
193
|
-
> "Your codebase has routes, components, and API endpoints, but your graph only has personas and features. The graph is meant to hold your whole product, not just the strategy side. Running `/upg-
|
|
189
|
+
> "Your codebase has routes, components, and API endpoints, but your graph only has personas and features. The graph is meant to hold your whole product, not just the strategy side. Running `/upg-walk-region engineering` would bring your technical reality into the same picture as your product thinking."
|
|
194
190
|
|
|
195
191
|
**The voice:** A coach who's been through this before. Not a linter flagging errors. Not a dashboard showing red/green. A thinking partner who says "here's what I've seen work" and lets you decide.
|
|
196
192
|
|
|
197
193
|
**How to use the full benchmark set:**
|
|
198
194
|
- The full benchmark data lives in `@unified-product-graph/core` (`benchmarks.ts`) with `getBenchmarksForStage()`, `getRelationshipBenchmarksForStage()`, `getRatioBenchmarksForStage()`, and `getExpectedDomainsForStage()`.
|
|
199
|
-
- `/upg-gaps` runs ALL benchmarks (in its forward-looking signals section) and synthesises them into a narrative.
|
|
195
|
+
- `/upg-check-gaps` runs ALL benchmarks (in its forward-looking signals section) and synthesises them into a narrative.
|
|
200
196
|
- Individual skills surface the 1-2 benchmarks most relevant to what the user is doing.
|
|
201
197
|
- Never show the raw benchmark table. Always narrate.
|
|
202
198
|
|
|
@@ -213,15 +209,15 @@ At the start of any graph-modifying skill session, detect the user's graph state
|
|
|
213
209
|
|
|
214
210
|
| Local | Cloud | Action |
|
|
215
211
|
|-------|-------|--------|
|
|
216
|
-
| Exists | Available, same product | Note both are connected. Compare entity counts; if they differ by >20%, mention: "Local graph has {N} entities. Cloud has {M}. They may be out of sync; consider `/upg-push` or `/upg-pull`." |
|
|
212
|
+
| Exists | Available, same product | Note both are connected. Compare entity counts; if they differ by >20%, mention: "Local graph has {N} entities. Cloud has {M}. They may be out of sync; consider `/upg-sync-push` or `/upg-sync-pull`." |
|
|
217
213
|
| Exists | Available, different product | Ask: "Your local graph is **{local product}** but your cloud has **{cloud product}**. Which one are we working on?" |
|
|
218
214
|
| Exists | Not available (tool doesn't exist or errors) | Proceed normally with local only. No sync suggestions at end. |
|
|
219
|
-
| Doesn't exist | Available | Suggest: "You have a cloud graph but no local `.upg` file. Run `/upg-pull` to bring it down, or `/upg-
|
|
220
|
-
| Doesn't exist | Not available | Suggest `/upg-
|
|
215
|
+
| Doesn't exist | Available | Suggest: "You have a cloud graph but no local `.upg` file. Run `/upg-sync-pull` to bring it down, or `/upg-new-graph` to start fresh." |
|
|
216
|
+
| Doesn't exist | Not available | Suggest `/upg-new-graph` to get started. |
|
|
221
217
|
|
|
222
218
|
### Rules
|
|
223
219
|
|
|
224
220
|
- This check must be **QUICK**: just 2 tool calls. Do not block the user or force them to sync before working.
|
|
225
221
|
- Surface the state briefly (one sentence) and move on to the skill's actual work.
|
|
226
|
-
- Do NOT run this check for read-only skills (`/upg-status`, `/upg-gaps`, `/upg-tree`, `/upg-diff`, `/upg-export`).
|
|
227
|
-
- Do NOT run this check for `/upg-push` or `/upg-pull` themselves; they already handle sync.
|
|
222
|
+
- Do NOT run this check for read-only skills (`/upg-show-status`, `/upg-check-gaps`, `/upg-show-tree`, `/upg-show-diff`, `/upg-sync-export`).
|
|
223
|
+
- Do NOT run this check for `/upg-sync-push` or `/upg-sync-pull` themselves; they already handle sync.
|
|
@@ -12,7 +12,7 @@ This is the shared design reference for all `/upg-*` skills. Every skill that pr
|
|
|
12
12
|
## Brand
|
|
13
13
|
|
|
14
14
|
- **Name:** Always write "Unified Product Graph" in full; never just "UPG" in user-facing text
|
|
15
|
-
- **Logo mark:** Use on key screens (`/upg`, `/upg-status`, `/upg-export`)
|
|
15
|
+
- **Logo mark:** Use on key screens (`/upg`, `/upg-show-status`, `/upg-sync-export`)
|
|
16
16
|
- **Standard URL:** unifiedproductgraph.org
|
|
17
17
|
|
|
18
18
|
### Logo Mark
|
|
@@ -26,7 +26,7 @@ The dot cluster logo in a code block, followed by a bold H1 for the name:
|
|
|
26
26
|
```
|
|
27
27
|
# Unified Product Graph
|
|
28
28
|
|
|
29
|
-
The logo is the dot cluster (renders in monospace). The name is a markdown H1 (renders large and bold). Use at the top of `/upg`, `/upg-status`, and `/upg-export`. Other skills don't need the logo; keep it special.
|
|
29
|
+
The logo is the dot cluster (renders in monospace). The name is a markdown H1 (renders large and bold). Use at the top of `/upg`, `/upg-show-status`, and `/upg-sync-export`. Other skills don't need the logo; keep it special.
|
|
30
30
|
|
|
31
31
|
## Section Dividers
|
|
32
32
|
|
|
@@ -194,7 +194,7 @@ After creating entities, the skill should:
|
|
|
194
194
|
1. Call `get_graph_digest()` to check the current state
|
|
195
195
|
2. Determine which of the 8 business areas has the biggest gap
|
|
196
196
|
3. Recommend ONE specific next skill based on that gap
|
|
197
|
-
4. Always offer `/upg-journey` as the "see full picture" fallback
|
|
197
|
+
4. Always offer `/upg-show-journey` as the "see full picture" fallback
|
|
198
198
|
|
|
199
199
|
**Good ending (smart, contextual):**
|
|
200
200
|
```
|
|
@@ -203,19 +203,19 @@ After creating entities, the skill should:
|
|
|
203
203
|
Your graph now covers 6 of 8 business areas.
|
|
204
204
|
The biggest gap: 📣 Reaching; you haven't thought about how people find your product.
|
|
205
205
|
|
|
206
|
-
→ Run /upg-launch to define your positioning and channels.
|
|
206
|
+
→ Run /upg-new-launch to define your positioning and channels.
|
|
207
207
|
|
|
208
|
-
Or /upg-journey to see your full progress across all 7 phases.
|
|
208
|
+
Or /upg-show-journey to see your full progress across all 7 phases.
|
|
209
209
|
```
|
|
210
210
|
|
|
211
211
|
**Bad ending (menu dump; DON'T DO THIS):**
|
|
212
212
|
```
|
|
213
213
|
Next steps:
|
|
214
|
-
- /upg-persona: Add more personas
|
|
215
|
-
- /upg-
|
|
216
|
-
- /upg-hypothesis: Structure a bet
|
|
217
|
-
- /upg-gaps: Check for gaps
|
|
218
|
-
- /upg-status: Health dashboard
|
|
214
|
+
- /upg-new-persona: Add more personas
|
|
215
|
+
- /upg-new-discovery: Run a discovery session
|
|
216
|
+
- /upg-new-hypothesis: Structure a bet
|
|
217
|
+
- /upg-check-gaps: Check for gaps
|
|
218
|
+
- /upg-show-status: Health dashboard
|
|
219
219
|
```
|
|
220
220
|
|
|
221
221
|
The business areas to check (in priority order):
|
|
@@ -229,31 +229,26 @@ The business areas to check (in priority order):
|
|
|
229
229
|
8. 📊 **Learning**: outcome, metric, objective, key_result, retrospective
|
|
230
230
|
|
|
231
231
|
Map each empty/thin area to a skill:
|
|
232
|
-
- Identity → `/upg-strategy`
|
|
233
|
-
- Understanding → `/upg-persona`
|
|
234
|
-
- Discovery → `/upg-
|
|
235
|
-
- Reaching → `/upg-launch` or `/upg-
|
|
236
|
-
- Converting → `/upg-
|
|
237
|
-
- Building → `/upg-
|
|
238
|
-
- Sustaining → `/upg-
|
|
239
|
-
- Learning → `/upg-okr` or `/upg-
|
|
232
|
+
- Identity → `/upg-new-strategy`
|
|
233
|
+
- Understanding → `/upg-new-persona`
|
|
234
|
+
- Discovery → `/upg-new-discovery`
|
|
235
|
+
- Reaching → `/upg-new-launch` or `/upg-walk-region marketing`
|
|
236
|
+
- Converting → `/upg-walk-region business_model`
|
|
237
|
+
- Building → `/upg-walk-region product_spec`
|
|
238
|
+
- Sustaining → `/upg-walk-region business_model`
|
|
239
|
+
- Learning → `/upg-new-okr` or `/upg-walk-region team_org`
|
|
240
240
|
|
|
241
|
-
If ALL areas are covered, celebrate and point to `/upg-journey`.
|
|
241
|
+
If ALL areas are covered, celebrate and point to `/upg-show-journey`.
|
|
242
242
|
|
|
243
243
|
## Footer Pattern
|
|
244
244
|
|
|
245
245
|
After the smart ending, add the standard footer with a dashed divider:
|
|
246
246
|
|
|
247
|
-
```
|
|
248
|
-
┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
|
|
249
|
-
Your .upg file is yours: open standard, portable, git-friendly.
|
|
250
|
-
unifiedproductgraph.org
|
|
251
|
-
```
|
|
252
247
|
|
|
253
|
-
On `/upg-status` and `/upg-gaps` (where maturity is 3+), the footer can be slightly more direct:
|
|
248
|
+
On `/upg-show-status` and `/upg-check-gaps` (where maturity is 3+), the footer can be slightly more direct:
|
|
254
249
|
|
|
255
250
|
```
|
|
256
|
-
can show patterns the CLI can't. → /upg-push to sync
|
|
251
|
+
can show patterns the CLI can't. → /upg-sync-push to sync
|
|
257
252
|
```
|
|
258
253
|
|
|
259
254
|
## Tone
|