@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.
Files changed (61) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/README.md +1 -1
  3. package/TOOLS.md +19 -13
  4. package/dist/index.js +1286 -285
  5. package/dist/index.js.map +1 -1
  6. package/dist/tools-manifest.json +94 -75
  7. package/package.json +1 -1
  8. package/scripts/claudemd-snippet.md +7 -7
  9. package/scripts/install-skills.sh +2 -2
  10. package/skills/upg/SKILL.md +41 -41
  11. package/skills/{upg-gaps → upg-check-gaps}/SKILL.md +40 -43
  12. package/skills/{upg-schema-health → upg-check-schema}/SKILL.md +7 -7
  13. package/skills/{upg-schema-evolve → upg-check-schema-coverage}/SKILL.md +12 -12
  14. package/skills/{upg-schema-edges → upg-check-schema-edges}/SKILL.md +3 -3
  15. package/skills/{upg-schema-consolidate → upg-check-schema-merge}/SKILL.md +5 -5
  16. package/skills/upg-context/SKILL.md +96 -72
  17. package/skills/upg-context-intelligence/SKILL.md +23 -27
  18. package/skills/upg-design-system/SKILL.md +21 -26
  19. package/skills/{upg-verify → upg-find-untracked}/SKILL.md +7 -12
  20. package/skills/{upg-rollback → upg-fix-rollback}/SKILL.md +6 -12
  21. package/skills/{upg-migrate → upg-fix-types}/SKILL.md +5 -9
  22. package/skills/upg-link/SKILL.md +125 -0
  23. package/skills/{upg-discover → upg-new-discovery}/SKILL.md +42 -58
  24. package/skills/{upg-capture → upg-new-from-session}/SKILL.md +13 -15
  25. package/skills/{upg-template → upg-new-from-template}/SKILL.md +8 -12
  26. package/skills/{upg-init → upg-new-graph}/SKILL.md +50 -82
  27. package/skills/{upg-hypothesis → upg-new-hypothesis}/SKILL.md +27 -36
  28. package/skills/{upg-launch → upg-new-launch}/SKILL-DETAIL.md +36 -92
  29. package/skills/{upg-launch → upg-new-launch}/SKILL.md +8 -18
  30. package/skills/{upg-okr → upg-new-okr}/SKILL-DETAIL.md +28 -46
  31. package/skills/{upg-okr → upg-new-okr}/SKILL.md +3 -3
  32. package/skills/{upg-persona → upg-new-persona}/SKILL.md +35 -67
  33. package/skills/{upg-research → upg-new-research}/SKILL.md +25 -33
  34. package/skills/{upg-schema-update → upg-new-schema-type}/SKILL.md +2 -2
  35. package/skills/{upg-strategy → upg-new-strategy}/SKILL.md +21 -27
  36. package/skills/upg-prioritise/SKILL.md +4 -4
  37. package/skills/upg-reflect/SKILL.md +7 -7
  38. package/skills/{upg-feedback → upg-send-feedback}/SKILL.md +30 -51
  39. package/skills/{upg-diff → upg-show-diff}/SKILL.md +6 -12
  40. package/skills/{upg-inspect → upg-show-entity}/SKILL.md +7 -9
  41. package/skills/{upg-impact → upg-show-impact}/SKILL.md +11 -15
  42. package/skills/{upg-journey → upg-show-journey}/SKILL.md +31 -32
  43. package/skills/{upg-analytics → upg-show-metrics}/SKILL.md +9 -12
  44. package/skills/{upg-schema-changelog → upg-show-schema-changelog}/SKILL.md +5 -5
  45. package/skills/{upg-status → upg-show-status}/SKILL.md +39 -40
  46. package/skills/{upg-tree → upg-show-tree}/SKILL.md +15 -15
  47. package/skills/{upg-export → upg-sync-export}/SKILL.md +10 -13
  48. package/skills/{upg-import → upg-sync-import}/SKILL.md +7 -13
  49. package/skills/{upg-pull → upg-sync-pull}/SKILL-DETAIL.md +13 -17
  50. package/skills/{upg-pull → upg-sync-pull}/SKILL.md +3 -3
  51. package/skills/{upg-push → upg-sync-push}/SKILL-DETAIL.md +4 -10
  52. package/skills/{upg-push → upg-sync-push}/SKILL.md +4 -4
  53. package/skills/{upg-snapshot → upg-sync-snapshot}/SKILL.md +2 -6
  54. package/skills/upg-trace/SKILL.md +7 -7
  55. package/skills/{upg-workspace → upg-use-workspace}/SKILL.md +8 -14
  56. package/skills/{upg-run → upg-walk-playbook}/SKILL.md +10 -10
  57. package/skills/upg-walk-region/SKILL-DETAIL.md +320 -0
  58. package/skills/upg-walk-region/SKILL.md +89 -0
  59. package/skills/upg-connect/SKILL.md +0 -167
  60. package/skills/upg-explore/SKILL-DETAIL.md +0 -481
  61. 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: **310 entity types** organised into **10 canonical regions** (Strategy, Users & Needs, Discovery, Market, Experience, Delivery, Engineering, Business GTM, Analytics, Operations), with typed properties and semantic relationships.
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 portable JSON file that holds an entire product graph. It's git-friendly, diffable, open source, and belongs to whoever created it. No vendor lock-in. No cloud required.
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 v0.3 is a **chart** of product knowledge. Two orthogonal organising principles:
44
+ UPG is a **chart** of product knowledge. Two orthogonal organising principles:
31
45
 
32
46
  **Regions**: *where* knowledge lives.
33
- Ten canonical regions roll up 36 atomic domains. Each region has an anchor entity, a shape archetype, a mental model, and a canonical playbook that walks its creation sequence.
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
- 23 in v0.3 (10 canonical, one per region; 13 specialised; e.g. `business-model-bmc`, `experience-design-system`). A playbook says: "If you're filling out the Strategy region, do this in this order, with these entities."
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
- 346 framework definitions (Five Whys lives inside Reflect; RICE lives inside Prioritise; Wardley Map lives inside Plan). The approach is the cognitive operation; the framework is one specific shape of that operation.
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
- 12 anti-patterns codify what *bad* product thinking looks like (personas without jobs, opportunities without needs, etc.). They run inside the Inspect approach.
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-discover`
120
- - Reaching → `/upg-launch` or `/upg-explore marketing`
121
- - Converting → `/upg-explore business_model`
122
- - Building → `/upg-explore product_spec`
123
- - Sustaining → `/upg-explore business_model`
124
- - Learning → `/upg-okr` or `/upg-explore team_org`
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-init` first. If same: continue.
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 `idea`. The stage governs how the session adapts.
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
- | `idea` | Simple, encouraging | Identity + Understanding |
262
- | `mvp` | Practical, momentum-focused | Building + Converting |
263
- | `growth` | Strategic, structured | Reaching + Sustaining |
264
- | `scale` | Precise, systems-aware | All 8 areas active |
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:** `idea`/`mvp` get lightweight frameworks (Lean Canvas, simple persona cards). `growth` gets structured ones (JTBD, growth funnels). `scale` gets the full catalogue.
269
- - **Language complexity:** `idea` = plain language. `mvp` = some product terminology. `growth`/`scale` = assume fluency.
270
- - **Gap analysis:** Only flag missing entities appropriate to the current stage. A solo builder at `idea` with no `compliance_framework` is not a gap.
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 40 thoughtful types feels like possibility. An empty graph with 310 types feels like homework.
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 mvp/growth stage | "Your product is at {stage} stage but has no business model entities. Strategy without economics is a hobby." | BMC: viability matters |
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-explore feature`:
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-capture` and `/upg-discover` often create many entities at once. Nudge once at the end, not per entity.
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-discover` → `/upg-explore business_model` in a single session. Each skill must build on what came before, not start fresh.
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 | Customer Problem | Pain Point | Struggle | Problem |
383
- | `solution` | Solution | Value Proposition | Solution | Idea | MVP |
384
- | `hypothesis` | Assumption | Assumption | | | Riskiest Assumption |
385
- | `opportunity` | Opportunity | | Opportunity | How Might We | Pivot Option |
386
- | `persona` | Customer Segment | Customer Segment | Job Performer | User | Early Adopter |
387
- | `metric` | Key Metric | | Success Metric | | Pirate 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 4 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()`.
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
- | Lens | Protagonist | Session-start skill | Key entity types |
470
- |------|-------------|--------------------|--------------------|
471
- | **product** | The user/persona | `/upg-journey` | persona, job, need, outcome, hypothesis |
472
- | **engineering** | The codebase | `/upg-status` | bug, feature, task, technical_debt_item, investigation, root_cause, fix |
473
- | **design** | The interface | `/upg-explore ux_design` | screen, design_component, user_flow, design_token, decision (layer: design) |
474
- | **growth** | The funnel | `/upg-explore growth` | funnel, acquisition_channel, growth_campaign, positioning |
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
- - **design:** Lead with coverage. "12 screens mapped, 3 missing flows."
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-discover`, `/upg-hypothesis`
488
- - **engineering:** Prioritize resolution. `/upg-impact --upstream`, `/upg-impact`, `/upg-explore engineering`
489
- - **design:** Prioritize coverage. `/upg-explore ux_design` (covers screens, flows, wireframes, audit)
490
- - **growth:** Prioritize reach. `/upg-explore growth`, `/upg-explore marketing`, `/upg-launch`
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
- - **design:** "Screens without flows", "orphan components", "no design system"
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, 🔴 blocker, 🔧 technical_debt_item, 🔍 investigation, 🌿 root_cause, 💊 fix, 🚩 feature_flag, 🚀 deployment
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-init` → `/upg-research` → `/upg-hypothesis`
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. Open beats locked
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
- ### 6. Collaborate, don't interrogate
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
- ### 7. Start simple, scale when ready
88
+ ### 6. Start simple, scale when ready
93
89
 
94
- The graph grows with the product. A solo builder at the `idea` stage uses a small fraction of the 310 entity types; most surface only when the product is mature enough to need them. Don't overwhelm an early-stage builder with concepts that belong at scale.
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-discover`, `/upg-strategy`, `/upg-explore engineering`, `/upg-explore growth`, `/upg-explore ux_design`
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-explore engineering` (codebase / api / debt / deps), `/upg-explore ux_design` (screens / design-audit), `/upg-verify`, `/upg-explore marketing` (SEO).
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-explore pricing`, `/upg-explore content`, `/upg-explore ux_design` (flows / wireframes), `/upg-explore growth`.
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-init, /upg-strategy
120
- Phase 2: Understanding /upg-persona, /upg-research, /upg-explore ux_design
121
- Phase 3: Discovery /upg-discover, /upg-hypothesis
122
- Phase 4: Business /upg-explore business_model, /upg-explore market_intelligence, /upg-okr, /upg-explore pricing
123
- Phase 5: Reaching /upg-launch, /upg-explore market_intelligence, /upg-explore content, /upg-explore marketing, /upg-explore growth
124
- Phase 6: Building /upg-explore product_spec, /upg-explore engineering, /upg-explore ux_design
125
- Phase 7: Learning /upg-explore team_org, /upg-gaps, /upg-explore engineering (debt + deps)
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-explore engineering` would bring your technical reality into the same picture as your product thinking."
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-init` to start fresh." |
220
- | Doesn't exist | Not available | Suggest `/upg-init` to get started. |
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-discover: Run a discovery session
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-discover`
235
- - Reaching → `/upg-launch` or `/upg-explore marketing`
236
- - Converting → `/upg-explore business_model`
237
- - Building → `/upg-explore product_spec`
238
- - Sustaining → `/upg-explore business_model`
239
- - Learning → `/upg-okr` or `/upg-explore team_org`
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