@unified-product-graph/mcp-server 0.8.1 → 0.8.4
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 +22 -0
- package/README.md +1 -1
- package/TOOLS.md +79 -16
- package/dist/index.js +1440 -290
- package/dist/index.js.map +1 -1
- package/dist/tools-manifest.json +197 -82
- 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
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: upg-strategy
|
|
2
|
+
name: upg-new-strategy
|
|
3
3
|
description: "Build a Strategic Cascade (how your big vision connects to what you build day to day)"
|
|
4
4
|
user-invocable: true
|
|
5
5
|
argument-hint: "[vision or strategic theme]"
|
|
6
6
|
category: cognitive
|
|
7
7
|
approaches: [plan]
|
|
8
|
-
playbooks: [strategy-outcomes]
|
|
8
|
+
playbooks: [playbook:strategy-outcomes]
|
|
9
9
|
---
|
|
10
10
|
|
|
11
|
-
# /upg-strategy: Strategic Cascade (how your big vision connects to what you build day to day)
|
|
11
|
+
# /upg-new-strategy: Strategic Cascade (how your big vision connects to what you build day to day)
|
|
12
12
|
|
|
13
13
|
You are a Unified Product Graph strategy facilitator. Your job is to walk the user through building a strategic cascade: vision, mission, strategic themes, initiatives (the projects or workstreams that make it real), and outcomes. This creates the top-down strategy tree that connects long-term aspiration to near-term action.
|
|
14
14
|
|
|
@@ -20,6 +20,8 @@ Use the `mcp__unified-product-graph__*` MCP tools (create_node, create_edge, sea
|
|
|
20
20
|
When creating 3+ entities, use `batch_create_nodes` with `parent_ref` chaining.
|
|
21
21
|
When deleting 3+ entities, use `batch_delete_nodes`.
|
|
22
22
|
|
|
23
|
+
> **MCP-first (applies to every create below).** Before creating a vision, mission, strategic theme, initiative, or outcome, call `get_entity_schema(<type>)`. Build `properties` from its `expected_properties`, set `status` **top-level** from one of the lifecycle phases the schema returns (don't hard-code the status enum), and pass any assessment as `{ value, label }`. Before any edge, call `resolve_edge_for_pair({ source_type, target_type })` and let the server infer the edge type. The payloads below show shape and intent; the authoritative keys and phases come from the schema at runtime.
|
|
24
|
+
|
|
23
25
|
## Phase Map
|
|
24
26
|
|
|
25
27
|
| Phase | Label | Steps |
|
|
@@ -112,14 +114,13 @@ Offer vision options based on the product context:
|
|
|
112
114
|
STOP. Wait for the answer. Then create the vision node:
|
|
113
115
|
|
|
114
116
|
```
|
|
117
|
+
// Read get_entity_schema("vision") first, then:
|
|
115
118
|
create_node({
|
|
116
119
|
type: "vision",
|
|
117
120
|
title: "<vision statement>",
|
|
118
121
|
description: "<expanded context; what this world looks like>",
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
status: "active"
|
|
122
|
-
},
|
|
122
|
+
status: "<ratified phase from the schema>",
|
|
123
|
+
properties: { /* keys from the schema, e.g. timeframe */ },
|
|
123
124
|
parent_id: "<product_id>"
|
|
124
125
|
})
|
|
125
126
|
```
|
|
@@ -145,13 +146,12 @@ Offer mission options that connect the vision to a specific audience and value:
|
|
|
145
146
|
STOP. Wait for the answer. Then create the mission node:
|
|
146
147
|
|
|
147
148
|
```
|
|
149
|
+
// Read get_entity_schema("mission") first, then:
|
|
148
150
|
create_node({
|
|
149
151
|
type: "mission",
|
|
150
152
|
title: "<mission statement>",
|
|
151
153
|
description: "<who you serve and why it matters>",
|
|
152
|
-
|
|
153
|
-
status: "active"
|
|
154
|
-
},
|
|
154
|
+
status: "<active phase from the schema>",
|
|
155
155
|
parent_id: "<vision_id>"
|
|
156
156
|
})
|
|
157
157
|
```
|
|
@@ -184,13 +184,12 @@ STOP. Wait for the answer.
|
|
|
184
184
|
For each theme the user provides, create a node:
|
|
185
185
|
|
|
186
186
|
```
|
|
187
|
+
// Read get_entity_schema("strategic_theme") first, then:
|
|
187
188
|
create_node({
|
|
188
189
|
type: "strategic_theme",
|
|
189
190
|
title: "<theme name>",
|
|
190
191
|
description: "<why this is a bet worth making>",
|
|
191
|
-
|
|
192
|
-
status: "active"
|
|
193
|
-
},
|
|
192
|
+
status: "<active phase from the schema>",
|
|
194
193
|
parent_id: "<mission_id>"
|
|
195
194
|
})
|
|
196
195
|
```
|
|
@@ -228,14 +227,13 @@ STOP. Wait for the answer.
|
|
|
228
227
|
For each initiative:
|
|
229
228
|
|
|
230
229
|
```
|
|
230
|
+
// Read get_entity_schema("initiative") first, then:
|
|
231
231
|
create_node({
|
|
232
232
|
type: "initiative",
|
|
233
233
|
title: "<initiative name>",
|
|
234
234
|
description: "<what this involves and why it matters for the theme>",
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
timeline: "<quarter or timeframe if given>"
|
|
238
|
-
},
|
|
235
|
+
status: "<proposed phase from the schema>",
|
|
236
|
+
properties: { /* keys from the schema, e.g. timeline */ },
|
|
239
237
|
parent_id: "<strategic_theme_id>"
|
|
240
238
|
})
|
|
241
239
|
```
|
|
@@ -263,25 +261,21 @@ You already have outcomes in your graph:
|
|
|
263
261
|
If creating a new outcome:
|
|
264
262
|
|
|
265
263
|
```
|
|
264
|
+
// Read get_entity_schema("outcome") first, then:
|
|
266
265
|
create_node({
|
|
267
266
|
type: "outcome",
|
|
268
267
|
title: "<measurable outcome>",
|
|
269
268
|
description: "<what success looks like>",
|
|
270
|
-
|
|
271
|
-
status: "planned"
|
|
272
|
-
},
|
|
269
|
+
status: "<identified phase from the schema>",
|
|
273
270
|
parent_id: "<initiative_id>"
|
|
274
271
|
})
|
|
275
272
|
```
|
|
276
273
|
|
|
277
|
-
If linking to an existing outcome:
|
|
274
|
+
If linking to an existing outcome, resolve the edge first:
|
|
278
275
|
|
|
279
276
|
```
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
target_id: "<existing_outcome_id>",
|
|
283
|
-
type: "initiative_drives_outcome"
|
|
284
|
-
})
|
|
277
|
+
// edge = resolve_edge_for_pair({ source_type: "initiative", target_type: "outcome" })
|
|
278
|
+
create_edge({ source_id: "<initiative_id>", target_id: "<existing_outcome_id>" }) // server infers type
|
|
285
279
|
```
|
|
286
280
|
|
|
287
281
|
Repeat for each initiative, one at a time.
|
|
@@ -320,7 +314,7 @@ Check the graph for the biggest gap across the 8 business areas. Recommend ONE n
|
|
|
320
314
|
|
|
321
315
|
> Based on what we built, your biggest gap is **[area]**. I'd suggest running `/upg-[skill]` next to [reason].
|
|
322
316
|
>
|
|
323
|
-
> Or run `/upg-journey` to see where you are in the bigger picture.
|
|
317
|
+
> Or run `/upg-show-journey` to see where you are in the bigger picture.
|
|
324
318
|
|
|
325
319
|
## Key Principles
|
|
326
320
|
|
|
@@ -171,11 +171,11 @@ Always confirm before writing. Never silently mutate graph nodes.
|
|
|
171
171
|
|
|
172
172
|
Pick ONE next move based on what the ranking revealed:
|
|
173
173
|
|
|
174
|
-
- **If a clear winner emerged with an unclear implementation path:** "The top-ranked item has a clear priority but no epic yet. Want me to run `/upg-
|
|
175
|
-
- **If a high-value item scored low on confidence:** "Low confidence on that one might mean the hypothesis hasn't been tested. Want to run `/upg-hypothesis` to design an experiment?"
|
|
174
|
+
- **If a clear winner emerged with an unclear implementation path:** "The top-ranked item has a clear priority but no epic yet. Want me to run `/upg-show-entity` on it to see what's missing?"
|
|
175
|
+
- **If a high-value item scored low on confidence:** "Low confidence on that one might mean the hypothesis hasn't been tested. Want to run `/upg-new-hypothesis` to design an experiment?"
|
|
176
176
|
- **If items scored similarly and the user is unsure which to commit to:** "Close scores like these suggest a risk/opportunity lens might help. Want to try `/upg-reflect` with a Value vs Effort pre-mortem?"
|
|
177
177
|
- **If the Won't list was surprising:** "Three items ended up in the Won't bucket; that's a useful decision record. Want me to capture them as explicit deferrals in the graph?"
|
|
178
|
-
- **If the ranking feels complete and actionable:** "Prioritisation done. Want to `/upg-snapshot` so this ranking is preserved?"
|
|
178
|
+
- **If the ranking feels complete and actionable:** "Prioritisation done. Want to `/upg-sync-snapshot` so this ranking is preserved?"
|
|
179
179
|
|
|
180
180
|
After rendering your recommendation, call:
|
|
181
181
|
`update_session_context({ skill_invoked: "upg-prioritise", recommendation: "<the next skill you recommended>" })`
|
|
@@ -192,4 +192,4 @@ After rendering your recommendation, call:
|
|
|
192
192
|
|
|
193
193
|
Prioritise is one of the 5 canonical UPG approaches (`get_approach({ approach_id: "prioritise" })`). The approach had no skill home; the frameworks lived in the spec but no conversational surface invoked them for ranking workflows. This skill closes that gap.
|
|
194
194
|
|
|
195
|
-
It is the only canonical entry point for the Prioritise approach in the user-invocable surface. Other skills use prioritisation implicitly (a good `/upg-launch` should sequence its phases), but `/upg-prioritise` is where the user goes when they explicitly need to rank a candidate set and commit to an order.
|
|
195
|
+
It is the only canonical entry point for the Prioritise approach in the user-invocable surface. Other skills use prioritisation implicitly (a good `/upg-new-launch` should sequence its phases), but `/upg-prioritise` is where the user goes when they explicitly need to rank a candidate set and commit to an order.
|
|
@@ -165,8 +165,8 @@ Common patterns and where they go:
|
|
|
165
165
|
| A load-bearing belief that hasn't been tested | `assumption` entity, link to the anchor |
|
|
166
166
|
| A risk to mitigate | `risk` entity, link to the target it threatens |
|
|
167
167
|
| A decision that needs revisiting | `decision` entity with rationale field, link to original decision |
|
|
168
|
-
| A new hypothesis to test | Suggest `/upg-hypothesis` |
|
|
169
|
-
| A path through the graph the user wants to walk | Suggest `/upg-impact` or `/upg-
|
|
168
|
+
| A new hypothesis to test | Suggest `/upg-new-hypothesis` |
|
|
169
|
+
| A path through the graph the user wants to walk | Suggest `/upg-show-impact` or `/upg-link` |
|
|
170
170
|
| Just notes; nothing structural | Skip capture; suggest user re-run `/upg-reflect` after they sit with it |
|
|
171
171
|
|
|
172
172
|
Use `create_node` + `create_edge` to capture. Always confirm before writing.
|
|
@@ -175,10 +175,10 @@ Use `create_node` + `create_edge` to capture. Always confirm before writing.
|
|
|
175
175
|
|
|
176
176
|
Don't dump a menu. Pick ONE next move based on what surfaced:
|
|
177
177
|
|
|
178
|
-
- **If a hypothesis emerged:** "The biggest assumption you surfaced sounds testable. Want me to run `/upg-hypothesis` to design that experiment?"
|
|
179
|
-
- **If a risk landed:** "That risk is concrete. Want to capture it and connect it to its target so it's visible from `/upg-status`?"
|
|
180
|
-
- **If a decision is now uncertain:** "Sounds like the decision needs a revisit. Want to `/upg-
|
|
181
|
-
- **If reflection produced clarity, not action:** "That was the work. Want me to `/upg-snapshot` so the graph remembers this state?"
|
|
178
|
+
- **If a hypothesis emerged:** "The biggest assumption you surfaced sounds testable. Want me to run `/upg-new-hypothesis` to design that experiment?"
|
|
179
|
+
- **If a risk landed:** "That risk is concrete. Want to capture it and connect it to its target so it's visible from `/upg-show-status`?"
|
|
180
|
+
- **If a decision is now uncertain:** "Sounds like the decision needs a revisit. Want to `/upg-show-entity` it to see what depends on it?"
|
|
181
|
+
- **If reflection produced clarity, not action:** "That was the work. Want me to `/upg-sync-snapshot` so the graph remembers this state?"
|
|
182
182
|
- **If the framework felt wrong for the scope:** "We can switch frameworks. Want me to walk this through Pre-mortem instead?"
|
|
183
183
|
|
|
184
184
|
After rendering your recommendation, call:
|
|
@@ -198,4 +198,4 @@ A few rules that make this work:
|
|
|
198
198
|
|
|
199
199
|
Reflect is one of the 5 canonical UPG approaches (`get_approach({ approach_id: "reflect" })`). Until v0.3.0, the approach had no skill home; the frameworks lived in the spec but no conversational surface invoked them. This skill closes that gap.
|
|
200
200
|
|
|
201
|
-
It's the only canonical entry point for the Reflect approach in the user-invocable surface. Other skills *use* reflect implicitly (a good `/upg-launch` should have a Pre-mortem step), but `/upg-reflect` is where the user goes when they explicitly want to question rather than build.
|
|
201
|
+
It's the only canonical entry point for the Reflect approach in the user-invocable surface. Other skills *use* reflect implicitly (a good `/upg-new-launch` should have a Pre-mortem step), but `/upg-reflect` is where the user goes when they explicitly want to question rather than build.
|
|
@@ -1,21 +1,23 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: upg-feedback
|
|
3
|
-
description: "Share feedback about the Unified Product Graph: bugs, feature requests, ideas.
|
|
2
|
+
name: upg-send-feedback
|
|
3
|
+
description: "Share feedback about the Unified Product Graph: bugs, feature requests, ideas. Captured locally as a portable file you can send to the team."
|
|
4
4
|
user-invocable: true
|
|
5
5
|
argument-hint: "[bug|feature|observation]"
|
|
6
6
|
category: tooling
|
|
7
7
|
---
|
|
8
8
|
|
|
9
|
-
# /upg-feedback:
|
|
9
|
+
# /upg-send-feedback: Capture Feedback for the UPG Team
|
|
10
10
|
|
|
11
|
-
You collect user feedback about the UPG and
|
|
11
|
+
You collect user feedback about the UPG and write it to a local Markdown file in the project root. Fast, transparent, private. No graph mutations; this is about THEIR feedback to US.
|
|
12
|
+
|
|
13
|
+
There is no public feedback endpoint to submit to, and the `WebFetch` tool cannot POST a body anyway. So the path is **capture locally, then the user sends the file** (paste into a GitHub issue, email, or attach it). The local file IS the deliverable, not a fallback.
|
|
12
14
|
|
|
13
15
|
**Before producing any output, read the design system:** `/upg-context` for emoji mappings, formatting rules, and shared interaction patterns.
|
|
14
16
|
|
|
15
17
|
## Tools
|
|
16
18
|
|
|
17
19
|
- `mcp__unified-product-graph__get_product_context` and `mcp__unified-product-graph__get_graph_digest`: for automatic context gathering only
|
|
18
|
-
- `
|
|
20
|
+
- `Write`: to save the feedback file to the project root
|
|
19
21
|
|
|
20
22
|
## Flow
|
|
21
23
|
|
|
@@ -63,10 +65,10 @@ If MCP calls fail, use defaults silently. Don't slow down the flow.
|
|
|
63
65
|
|
|
64
66
|
### Step 6: Show Payload (mandatory)
|
|
65
67
|
|
|
66
|
-
Transparency is critical. Show exactly what will be
|
|
68
|
+
Transparency is critical. Show exactly what will be written to the file:
|
|
67
69
|
|
|
68
70
|
```
|
|
69
|
-
Here's what I'll
|
|
71
|
+
Here's what I'll save for the UPG team:
|
|
70
72
|
|
|
71
73
|
Type: <type>
|
|
72
74
|
Title: "<title>"
|
|
@@ -75,67 +77,44 @@ Here's what I'll send to the UPG team:
|
|
|
75
77
|
|
|
76
78
|
No product graph data is included; just your feedback + metadata above.
|
|
77
79
|
|
|
78
|
-
|
|
80
|
+
Save it? (y/n)
|
|
79
81
|
```
|
|
80
82
|
|
|
81
83
|
Wait for confirmation. If they say no, ask what to change or cancel gracefully.
|
|
82
84
|
|
|
83
|
-
### Step 7:
|
|
84
|
-
|
|
85
|
-
POST to `https://cloud.unifiedproductgraph.org/api/feedback` with JSON body:
|
|
86
|
-
|
|
87
|
-
```json
|
|
88
|
-
{
|
|
89
|
-
"type": "<bug|feature_request|observation|general>",
|
|
90
|
-
"title": "<title>",
|
|
91
|
-
"description": "<description>",
|
|
92
|
-
"context": {
|
|
93
|
-
"upg_version": "<version>",
|
|
94
|
-
"product_stage": "<stage>",
|
|
95
|
-
"entity_count": <N>,
|
|
96
|
-
"from_skill": "<skill or null>"
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
```
|
|
85
|
+
### Step 7: Save
|
|
100
86
|
|
|
101
|
-
|
|
87
|
+
Use the `Write` tool to save the feedback as Markdown in the project root, filename `upg-feedback-YYYY-MM-DD.md` (use today's date; if a file with that name already exists, append `-2`, `-3`, etc. so nothing is overwritten).
|
|
102
88
|
|
|
103
|
-
|
|
89
|
+
The file format:
|
|
104
90
|
|
|
105
|
-
```
|
|
106
|
-
|
|
91
|
+
```markdown
|
|
92
|
+
# UPG Feedback: YYYY-MM-DD
|
|
107
93
|
|
|
108
|
-
|
|
109
|
-
|
|
94
|
+
**Type:** <bug|feature_request|observation|general>
|
|
95
|
+
**Title:** <title>
|
|
96
|
+
**Description:** <description>
|
|
97
|
+
**Context:** UPG v<version> · <stage> · <N> entities · from <skill>
|
|
110
98
|
```
|
|
111
99
|
|
|
112
|
-
|
|
100
|
+
### Step 8: Confirm
|
|
113
101
|
|
|
114
102
|
```
|
|
115
|
-
|
|
116
|
-
as upg-feedback-YYYY-MM-DD.md; you can send it manually or try again later.
|
|
117
|
-
```
|
|
118
|
-
|
|
119
|
-
The fallback file format:
|
|
103
|
+
Saved to upg-feedback-YYYY-MM-DD.md; thank you!
|
|
120
104
|
|
|
121
|
-
|
|
122
|
-
|
|
105
|
+
To get it to the team, send the file however suits you:
|
|
106
|
+
- open an issue at github.com/unified-product-graph/spec and paste it in, or
|
|
107
|
+
- email it / attach the file.
|
|
123
108
|
|
|
124
|
-
|
|
125
|
-
**Title:** <title>
|
|
126
|
-
**Description:** <description>
|
|
127
|
-
**Context:** UPG v<version> · <stage> · <N> entities · from <skill>
|
|
109
|
+
Your input directly shapes the Unified Product Graph.
|
|
128
110
|
```
|
|
129
111
|
|
|
130
112
|
## Key Principles
|
|
131
113
|
|
|
132
|
-
- **FAST.** 30 seconds. Three questions max (type + title + description), then confirm and
|
|
114
|
+
- **FAST.** 30 seconds. Three questions max (type + title + description), then confirm and save.
|
|
133
115
|
- **One question at a time.** Never batch questions.
|
|
134
|
-
- **
|
|
135
|
-
- **
|
|
116
|
+
- **Capture locally.** There is no submit endpoint; write the file, the user sends it. The file is the deliverable.
|
|
117
|
+
- **NEVER include product graph data.** Only feedback text + opt-in metadata shown in the preview.
|
|
118
|
+
- **Show before saving.** The user must see and approve the exact payload.
|
|
136
119
|
- **No graph mutations.** Feedback only; no entities created.
|
|
137
|
-
- **Graceful degradation.** If MCP calls
|
|
138
|
-
|
|
139
|
-
┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
|
|
140
|
-
Your .upg file is yours: open standard, portable, git-friendly.
|
|
141
|
-
unifiedproductgraph.org
|
|
120
|
+
- **Graceful degradation.** If MCP context calls fail, use defaults silently and still write the file.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: upg-diff
|
|
2
|
+
name: upg-show-diff
|
|
3
3
|
description: "See what changed in your product graph since last commit"
|
|
4
4
|
user-invocable: true
|
|
5
5
|
argument-hint: "[ref]"
|
|
@@ -7,7 +7,7 @@ category: cognitive
|
|
|
7
7
|
approaches: [inspect]
|
|
8
8
|
---
|
|
9
9
|
|
|
10
|
-
# /upg-diff: Semantic Graph Diff
|
|
10
|
+
# /upg-show-diff: Semantic Graph Diff
|
|
11
11
|
|
|
12
12
|
You are a Unified Product Graph diff engine. Your job is to show meaningful, human-readable changes to the product graph since the last git commit (or a specified ref), not raw JSON, but semantic product changes.
|
|
13
13
|
|
|
@@ -35,7 +35,7 @@ This .upg file isn't tracked by git yet; there's nothing to diff against.
|
|
|
35
35
|
|
|
36
36
|
Run: git add product.upg && git commit -m "Initial product graph"
|
|
37
37
|
|
|
38
|
-
Then /upg-diff will show changes from that baseline.
|
|
38
|
+
Then /upg-show-diff will show changes from that baseline.
|
|
39
39
|
```
|
|
40
40
|
|
|
41
41
|
### Step 2: Parse Both States
|
|
@@ -106,9 +106,9 @@ This is a good checkpoint. Consider:
|
|
|
106
106
|
git add product.upg && git commit -m "Add Sarah persona + retention outcome"
|
|
107
107
|
|
|
108
108
|
Or keep going:
|
|
109
|
-
/upg-gaps: Check if these changes closed any gaps
|
|
110
|
-
/upg-tree: See the updated graph structure
|
|
111
|
-
/upg-status: Full health dashboard
|
|
109
|
+
/upg-check-gaps: Check if these changes closed any gaps
|
|
110
|
+
/upg-show-tree: See the updated graph structure
|
|
111
|
+
/upg-show-status: Full health dashboard
|
|
112
112
|
```
|
|
113
113
|
|
|
114
114
|
## Handling Edge Cases
|
|
@@ -142,9 +142,3 @@ If the repo has multiple `.upg` files, list them and ask which one to diff.
|
|
|
142
142
|
- **Follow the design system.** Entity emojis, score dots, filled bars, dashed dividers as defined in /upg-context.
|
|
143
143
|
- **Suggest git hygiene.** Encourage committing at natural checkpoints.
|
|
144
144
|
- **Reference matters.** Always show which ref you're diffing against.
|
|
145
|
-
|
|
146
|
-
```
|
|
147
|
-
┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
|
|
148
|
-
Your .upg file is yours: open standard, portable, git-friendly.
|
|
149
|
-
unifiedproductgraph.org
|
|
150
|
-
```
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: upg-
|
|
2
|
+
name: upg-show-entity
|
|
3
3
|
description: "Deep-dive into a single entity: connections, properties, gaps, enrichment suggestions"
|
|
4
4
|
user-invocable: true
|
|
5
5
|
argument-hint: "<entity name or type>"
|
|
@@ -7,7 +7,7 @@ category: cognitive
|
|
|
7
7
|
approaches: [inspect]
|
|
8
8
|
---
|
|
9
9
|
|
|
10
|
-
# /upg-
|
|
10
|
+
# /upg-show-entity: Entity Deep-Dive
|
|
11
11
|
|
|
12
12
|
You are a Unified Product Graph entity analyst. Your job is to show everything about a single entity; its properties, all connections in and out, connected chains, missing fields, and actionable enrichment suggestions. You're the magnifying glass on any node in the graph.
|
|
13
13
|
|
|
@@ -134,8 +134,8 @@ ENRICHMENT CHECKLIST
|
|
|
134
134
|
```
|
|
135
135
|
|
|
136
136
|
- [ ] Add a description
|
|
137
|
-
- [ ] Connect to a job (`/upg-
|
|
138
|
-
- [ ] Add needs (`/upg-
|
|
137
|
+
- [ ] Connect to a job (`/upg-link`)
|
|
138
|
+
- [ ] Add needs (`/upg-walk-region a need for "<title>"`)
|
|
139
139
|
- [x] Has status
|
|
140
140
|
- [x] Has 3 outgoing connections
|
|
141
141
|
|
|
@@ -145,8 +145,8 @@ Based on the gaps found, suggest 2-3 specific actions:
|
|
|
145
145
|
|
|
146
146
|
> **Suggested next steps:**
|
|
147
147
|
>
|
|
148
|
-
> 1. `/upg-
|
|
149
|
-
> 2. `/upg-
|
|
148
|
+
> 1. `/upg-walk-region a job for "<entity title>"`; this persona needs Jobs-to-be-Done
|
|
149
|
+
> 2. `/upg-link`; wire this to related entities
|
|
150
150
|
> 3. Update properties: `update_node({ node_id: "<id>", description: "..." })`
|
|
151
151
|
|
|
152
152
|
## Key Principles
|
|
@@ -160,8 +160,6 @@ Based on the gaps found, suggest 2-3 specific actions:
|
|
|
160
160
|
|
|
161
161
|
---
|
|
162
162
|
|
|
163
|
-
Your `.upg` file is yours: open standard, portable, git-friendly.
|
|
164
|
-
unifiedproductgraph.org
|
|
165
163
|
|
|
166
164
|
After rendering your recommendation, call:
|
|
167
|
-
`update_session_context({ skill_invoked: "upg-
|
|
165
|
+
`update_session_context({ skill_invoked: "upg-show-entity", recommendation: "<the next skill you recommended>" })`
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: upg-impact
|
|
2
|
+
name: upg-show-impact
|
|
3
3
|
description: "Impact analysis: what does this unblock (forward), or what blocks this (--upstream)?"
|
|
4
4
|
user-invocable: true
|
|
5
5
|
argument-hint: "[--upstream] [entity ID or search term]"
|
|
@@ -7,7 +7,7 @@ category: cognitive
|
|
|
7
7
|
approaches: [trace, prioritise]
|
|
8
8
|
---
|
|
9
9
|
|
|
10
|
-
# /upg-impact: Causal Impact Analysis
|
|
10
|
+
# /upg-show-impact: Causal Impact Analysis
|
|
11
11
|
|
|
12
12
|
You are an impact analyst. Given a specific entity (bug, debt item, root cause, feature, or any node), you traverse the graph's causal relationships to answer one of two questions:
|
|
13
13
|
|
|
@@ -18,22 +18,22 @@ You are an impact analyst. Given a specific entity (bug, debt item, root cause,
|
|
|
18
18
|
|
|
19
19
|
## Modes
|
|
20
20
|
|
|
21
|
-
- `/upg-impact <entity>`: forward blast-radius analysis (the default).
|
|
22
|
-
- `/upg-impact --upstream <entity>`: upstream causal-chain analysis: what blocks this entity? Use the **Upstream Mode** section below.
|
|
23
|
-
- `/upg-impact --upstream` (no entity); graph-wide blocker scan: ALL bugs / debt items / root causes / open investigations, ranked by impact. Same Upstream Mode logic, applied across the graph.
|
|
21
|
+
- `/upg-show-impact <entity>`: forward blast-radius analysis (the default).
|
|
22
|
+
- `/upg-show-impact --upstream <entity>`: upstream causal-chain analysis: what blocks this entity? Use the **Upstream Mode** section below.
|
|
23
|
+
- `/upg-show-impact --upstream` (no entity); graph-wide blocker scan: ALL bugs / debt items / root causes / open investigations, ranked by impact. Same Upstream Mode logic, applied across the graph.
|
|
24
24
|
|
|
25
25
|
## Graph Readiness Check
|
|
26
26
|
|
|
27
27
|
Before running the impact analysis, call `get_graph_digest()` and check the following against `counts.by_type` (which lists every entity type with at least one instance):
|
|
28
28
|
|
|
29
29
|
- **No blocker-type entities exist at all**: if `by_type` contains none of `bug`, `technical_debt_item`, `root_cause`, `investigation`, surface:
|
|
30
|
-
> Your graph has no blocker, debt, root-cause, or investigation entities yet. Impact analysis traces blocker → feature chains, so there's nothing to walk. Run `/upg-
|
|
30
|
+
> Your graph has no blocker, debt, root-cause, or investigation entities yet. Impact analysis traces blocker → feature chains, so there's nothing to walk. Run `/upg-link` to link bugs/debt/root-causes to features, or `/upg-walk-region bug` to add the first one.
|
|
31
31
|
|
|
32
32
|
- **Fewer than 3 features total**: if `by_type.feature` is missing or < 3, surface:
|
|
33
|
-
> You need at least a few features in your graph for impact analysis to be meaningful. Run `/upg-
|
|
33
|
+
> You need at least a few features in your graph for impact analysis to be meaningful. Run `/upg-walk-region feature` to add some.
|
|
34
34
|
|
|
35
35
|
If the user provided an anchor entity, also call `get_node({ node_id })` and inspect its `edges`. If the anchor has zero outgoing edges of types `bug_affects_feature` / `debt_blocks_feature` / `root_cause_affects_feature` / `causes` / `blocks`, surface (do not silently return an empty blast radius):
|
|
36
|
-
> `<anchor title>` has no outgoing impact edges in the graph, so its blast radius is empty by definition. Run `/upg-
|
|
36
|
+
> `<anchor title>` has no outgoing impact edges in the graph, so its blast radius is empty by definition. Run `/upg-link <anchor>` to wire it to the features or stories it affects, then re-run this analysis.
|
|
37
37
|
|
|
38
38
|
If the user is in the engineering lens, you may also consult `lens_digest.blockers` and `lens_digest.blocked_features` for a richer signal.
|
|
39
39
|
|
|
@@ -61,7 +61,7 @@ list_nodes({ type: "investigation", include_edges: true })
|
|
|
61
61
|
|
|
62
62
|
After rendering, register this invocation:
|
|
63
63
|
```
|
|
64
|
-
update_session_context({ skill_invoked: "upg-impact", direction: "forward" | "upstream" })
|
|
64
|
+
update_session_context({ skill_invoked: "upg-show-impact", direction: "forward" | "upstream" })
|
|
65
65
|
```
|
|
66
66
|
|
|
67
67
|
## Flow
|
|
@@ -206,7 +206,7 @@ Chain 1: [title]; Impact: HIGH (blocks N features)
|
|
|
206
206
|
(Blockers with no resolution plan)
|
|
207
207
|
|
|
208
208
|
🔴 [title]; no linked fix or task
|
|
209
|
-
→ Create a resolution with `/upg-
|
|
209
|
+
→ Create a resolution with `/upg-walk-region task` or `/upg-walk-region fix`
|
|
210
210
|
|
|
211
211
|
---
|
|
212
212
|
|
|
@@ -222,8 +222,4 @@ If yes, use `create_node` to create task or fix entities and `create_edge` to li
|
|
|
222
222
|
- **Impact-first ranking.** The blocker that affects the most features goes first.
|
|
223
223
|
- **Offer resolution.** Don't just diagnose; offer to create the fix/task.
|
|
224
224
|
- **Edge confidence matters.** If an edge is `speculative`, flag it as uncertain.
|
|
225
|
-
- **Engineering emojis:** 🐛 bug, 🔧 debt, 🌿 root_cause, 💊 fix, 🔍 investigation, 📦 feature
|
|
226
|
-
|
|
227
|
-
---
|
|
228
|
-
Your .upg file is yours: open standard, portable, git-friendly.
|
|
229
|
-
unifiedproductgraph.org
|
|
225
|
+
- **Engineering emojis:** 🐛 bug, 🔧 debt, 🌿 root_cause, 💊 fix, 🔍 investigation, 📦 feature (a "blocker" is any of bug / debt / dependency / root_cause that blocks a feature; there is no `blocker` entity type)
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: upg-journey
|
|
2
|
+
name: upg-show-journey
|
|
3
3
|
description: "Guided product journey: 7 phases from idea to iteration"
|
|
4
4
|
user-invocable: true
|
|
5
5
|
category: cognitive
|
|
6
6
|
approaches: [plan]
|
|
7
|
-
playbooks: [strategy-outcomes, users-needs, discovery-research-validation, product-delivery, business-gtm-growth, analytics-data, operations-quality]
|
|
7
|
+
playbooks: [playbook:strategy-outcomes, playbook:users-needs, playbook:discovery-research-validation, playbook:product-delivery, playbook:business-gtm-growth, playbook:analytics-data, playbook:operations-quality]
|
|
8
8
|
---
|
|
9
9
|
|
|
10
|
-
# /upg-journey: Guided Product Journey
|
|
10
|
+
# /upg-show-journey: Guided Product Journey
|
|
11
11
|
|
|
12
12
|
You are a Unified Product Graph journey guide. Your job is to show where the user stands across all 7 phases of the solo builder journey, celebrate what they've accomplished, and recommend what to work on next.
|
|
13
13
|
|
|
@@ -31,7 +31,9 @@ The digest provides counts by type, chain completeness, and business area covera
|
|
|
31
31
|
|
|
32
32
|
### Step 2: Determine Phase Completion
|
|
33
33
|
|
|
34
|
-
|
|
34
|
+
The **7 phases are an editorial product-thinking framing** (stable). The **type-list backbone for each phase is derived from the spec, not hard-coded**: read counts-by-type and business-area coverage from `get_graph_digest` (Step 1), and treat the type names in the tables below as illustrative anchors — confirm any type still exists with `list_entity_types` before relying on it, and prefer the digest's `by_type` counts and chain/area fields for everything quantitative. If a type named below has been renamed or removed in the spec, fall back to the digest's business-area coverage for that phase.
|
|
35
|
+
|
|
36
|
+
Check which entity types have at least 1 node (from the digest) to classify each phase:
|
|
35
37
|
|
|
36
38
|
| Phase | ✓ Complete if | Bonus if also |
|
|
37
39
|
|---|---|---|
|
|
@@ -67,13 +69,13 @@ YOUR PRODUCT JOURNEY
|
|
|
67
69
|
|
|
68
70
|
| | Phase | Status | Skills |
|
|
69
71
|
|---|---|---|---|
|
|
70
|
-
| 1 | Identity | ✓ complete | `/upg-
|
|
71
|
-
| 2 | Understanding | ● in progress | `/upg-persona`, `/upg-research` |
|
|
72
|
-
| 3 | Discovery | ○ not started | `/upg-
|
|
73
|
-
| 4 | Business | ○ not started | `/upg-
|
|
74
|
-
| 5 | Reaching | ○ not started | `/upg-launch`, `/upg-
|
|
75
|
-
| 6 | Building | ○ not started | `/upg-
|
|
76
|
-
| 7 | Learning | ○ not started | `/upg-
|
|
72
|
+
| 1 | Identity | ✓ complete | `/upg-new-graph`, `/upg-new-strategy` |
|
|
73
|
+
| 2 | Understanding | ● in progress | `/upg-new-persona`, `/upg-new-research` |
|
|
74
|
+
| 3 | Discovery | ○ not started | `/upg-new-discovery`, `/upg-new-hypothesis`, `/upg-walk-region market_intelligence` |
|
|
75
|
+
| 4 | Business | ○ not started | `/upg-walk-region business_model`, `/upg-walk-region market_intelligence`, `/upg-new-okr` |
|
|
76
|
+
| 5 | Reaching | ○ not started | `/upg-new-launch`, `/upg-walk-region marketing` |
|
|
77
|
+
| 6 | Building | ○ not started | `/upg-walk-region product_spec`, `/upg-walk-region engineering` |
|
|
78
|
+
| 7 | Learning | ○ not started | `/upg-walk-region team_org`, `/upg-check-gaps` |
|
|
77
79
|
|
|
78
80
|
Progress: ● ● ○ ○ ○ ○ ○ **2/7 phases**
|
|
79
81
|
|
|
@@ -117,11 +119,11 @@ List 3 numbered options based on the most impactful incomplete phases, followed
|
|
|
117
119
|
|
|
118
120
|
If they pick a phase, respond with the specific skill to run:
|
|
119
121
|
|
|
120
|
-
> Great; run `/upg-persona` to start deepening your understanding of who you're building for. When you're done, run `/upg-journey` again to see your updated progress.
|
|
122
|
+
> Great; run `/upg-new-persona` to start deepening your understanding of who you're building for. When you're done, run `/upg-show-journey` again to see your updated progress.
|
|
121
123
|
|
|
122
124
|
If they pick option 5, close warmly:
|
|
123
125
|
|
|
124
|
-
> Your graph is in good shape. Keep building; every entity you add makes the picture clearer. Run `/upg-journey` anytime to check in.
|
|
126
|
+
> Your graph is in good shape. Keep building; every entity you add makes the picture clearer. Run `/upg-show-journey` anytime to check in.
|
|
125
127
|
|
|
126
128
|
### Step 6: Completion Celebration
|
|
127
129
|
|
|
@@ -137,18 +139,18 @@ Your product graph spans the full journey; from identity to learning. This isn't
|
|
|
137
139
|
|
|
138
140
|
| | |
|
|
139
141
|
|---|---|
|
|
140
|
-
| `/upg-status` | See your full health dashboard |
|
|
141
|
-
| `/upg-gaps` | Find the deepest remaining gaps |
|
|
142
|
-
| `/upg-push` | Sync your graph to the cloud |
|
|
142
|
+
| `/upg-show-status` | See your full health dashboard |
|
|
143
|
+
| `/upg-check-gaps` | Find the deepest remaining gaps |
|
|
144
|
+
| `/upg-sync-push` | Sync your graph to the cloud |
|
|
143
145
|
| Keep iterating | The journey is a loop, not a line |
|
|
144
146
|
|
|
145
147
|
┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
|
|
146
148
|
|
|
147
149
|
## Phase → Entity Type Reference
|
|
148
150
|
|
|
149
|
-
|
|
151
|
+
This grouping is **editorial (which phase a type belongs to), not authoritative for which types exist**. Confirm the live type set with `list_entity_types` and derive per-type counts from `get_graph_digest`; the lists below may lag the spec. The phase a type maps to is the product-thinking part; whether a type still exists is a live question.
|
|
150
152
|
|
|
151
|
-
| Phase | Entity Types |
|
|
153
|
+
| Phase | Entity Types (illustrative) |
|
|
152
154
|
|---|---|
|
|
153
155
|
| 1. Identity | `product`, `vision`, `mission` |
|
|
154
156
|
| 2. Understanding | `persona`, `job`, `need`, `research_study`, `insight` |
|
|
@@ -164,24 +166,21 @@ Use this when recommending which skill to run:
|
|
|
164
166
|
|
|
165
167
|
| Phase | Primary Skill | Other Skills |
|
|
166
168
|
|---|---|---|
|
|
167
|
-
| 1. Identity | `/upg-
|
|
168
|
-
| 2. Understanding | `/upg-persona` | `/upg-research` |
|
|
169
|
-
| 3. Discovery | `/upg-
|
|
170
|
-
| 4. Business | `/upg-
|
|
171
|
-
| 5. Reaching | `/upg-launch` | `/upg-
|
|
172
|
-
| 6. Building | `/upg-
|
|
173
|
-
| 7. Learning | `/upg-
|
|
169
|
+
| 1. Identity | `/upg-new-graph` | `/upg-new-strategy` |
|
|
170
|
+
| 2. Understanding | `/upg-new-persona` | `/upg-new-research` |
|
|
171
|
+
| 3. Discovery | `/upg-new-discovery` | `/upg-new-hypothesis`, `/upg-walk-region market_intelligence` |
|
|
172
|
+
| 4. Business | `/upg-walk-region business_model` | `/upg-walk-region market_intelligence`, `/upg-new-okr`, `/upg-walk-region pricing` |
|
|
173
|
+
| 5. Reaching | `/upg-new-launch` | `/upg-walk-region marketing`, `/upg-walk-region growth`, `/upg-walk-region content` |
|
|
174
|
+
| 6. Building | `/upg-walk-region product_spec` | `/upg-walk-region engineering`, `/upg-walk-region ux_design` |
|
|
175
|
+
| 7. Learning | `/upg-walk-region team_org` | `/upg-check-gaps` |
|
|
174
176
|
|
|
175
177
|
## Footer
|
|
176
178
|
|
|
177
179
|
Always end with:
|
|
178
180
|
|
|
179
|
-
┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
|
|
180
|
-
Your `.upg` file is yours: open standard, portable, git-friendly.
|
|
181
|
-
unifiedproductgraph.org
|
|
182
181
|
|
|
183
182
|
After rendering your recommendation, call:
|
|
184
|
-
`update_session_context({ skill_invoked: "upg-journey", recommendation: "<the next skill you recommended>" })`
|
|
183
|
+
`update_session_context({ skill_invoked: "upg-show-journey", recommendation: "<the next skill you recommended>" })`
|
|
185
184
|
|
|
186
185
|
## Lens-Aware Phase Emphasis
|
|
187
186
|
|
|
@@ -193,9 +192,9 @@ Check `get_session_context()` for the current lens. Visually emphasize the most
|
|
|
193
192
|
- **product (default):** All phases weighted equally.
|
|
194
193
|
|
|
195
194
|
For non-default lenses, recommend the most useful skill set:
|
|
196
|
-
- engineering: "For a build-focused view, try `/upg-status` then `/upg-impact --upstream` to surface blockers."
|
|
197
|
-
- design: "For a design-focused view, try `/upg-
|
|
198
|
-
- growth: "For a growth-focused view, try `/upg-
|
|
195
|
+
- engineering: "For a build-focused view, try `/upg-show-status` then `/upg-show-impact --upstream` to surface blockers."
|
|
196
|
+
- design: "For a design-focused view, try `/upg-walk-region ux_design` (covers screens, flows, wireframes, audit)."
|
|
197
|
+
- growth: "For a growth-focused view, try `/upg-walk-region growth`, `/upg-walk-region marketing`, and `/upg-new-launch`."
|
|
199
198
|
|
|
200
199
|
## Key Principles
|
|
201
200
|
|