@unified-product-graph/mcp-server 0.7.1 → 0.7.3

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 (56) hide show
  1. package/TOOLS.md +11 -11
  2. package/dist/index.js +930 -911
  3. package/dist/index.js.map +1 -1
  4. package/dist/preflight.js +1 -1
  5. package/dist/preflight.js.map +1 -1
  6. package/dist/tools-manifest.json +11 -11
  7. package/package.json +1 -1
  8. package/skills/upg/SKILL.md +30 -30
  9. package/skills/upg-analytics/SKILL.md +11 -11
  10. package/skills/upg-capture/SKILL.md +19 -19
  11. package/skills/upg-connect/SKILL.md +6 -6
  12. package/skills/upg-context/SKILL.md +51 -51
  13. package/skills/upg-context-intelligence/SKILL.md +43 -43
  14. package/skills/upg-design-system/SKILL.md +21 -21
  15. package/skills/upg-diff/SKILL.md +12 -12
  16. package/skills/upg-discover/SKILL.md +10 -10
  17. package/skills/upg-explore/SKILL-DETAIL.md +9 -9
  18. package/skills/upg-explore/SKILL.md +14 -14
  19. package/skills/upg-export/SKILL.md +34 -34
  20. package/skills/upg-feedback/SKILL.md +17 -17
  21. package/skills/upg-gaps/SKILL.md +31 -31
  22. package/skills/upg-hypothesis/SKILL.md +10 -10
  23. package/skills/upg-impact/SKILL.md +30 -30
  24. package/skills/upg-import/SKILL.md +14 -14
  25. package/skills/upg-init/SKILL.md +40 -40
  26. package/skills/upg-inspect/SKILL.md +9 -9
  27. package/skills/upg-journey/SKILL.md +21 -21
  28. package/skills/upg-launch/SKILL-DETAIL.md +71 -71
  29. package/skills/upg-launch/SKILL.md +16 -16
  30. package/skills/upg-migrate/SKILL.md +19 -19
  31. package/skills/upg-okr/SKILL-DETAIL.md +27 -27
  32. package/skills/upg-okr/SKILL.md +10 -10
  33. package/skills/upg-persona/SKILL.md +20 -20
  34. package/skills/upg-prioritise/SKILL.md +19 -19
  35. package/skills/upg-pull/SKILL-DETAIL.md +21 -21
  36. package/skills/upg-pull/SKILL.md +5 -5
  37. package/skills/upg-push/SKILL-DETAIL.md +23 -23
  38. package/skills/upg-push/SKILL.md +6 -6
  39. package/skills/upg-reflect/SKILL.md +20 -20
  40. package/skills/upg-research/SKILL.md +37 -37
  41. package/skills/upg-rollback/SKILL.md +19 -19
  42. package/skills/upg-run/SKILL.md +14 -14
  43. package/skills/upg-schema-changelog/SKILL.md +29 -29
  44. package/skills/upg-schema-consolidate/SKILL.md +18 -18
  45. package/skills/upg-schema-edges/SKILL.md +12 -12
  46. package/skills/upg-schema-evolve/SKILL.md +16 -16
  47. package/skills/upg-schema-health/SKILL.md +22 -22
  48. package/skills/upg-schema-update/SKILL.md +24 -24
  49. package/skills/upg-snapshot/SKILL.md +8 -8
  50. package/skills/upg-status/SKILL.md +31 -31
  51. package/skills/upg-strategy/SKILL.md +26 -26
  52. package/skills/upg-template/SKILL.md +21 -21
  53. package/skills/upg-trace/SKILL.md +22 -22
  54. package/skills/upg-tree/SKILL.md +18 -18
  55. package/skills/upg-verify/SKILL.md +42 -42
  56. package/skills/upg-workspace/SKILL.md +12 -12
@@ -1,17 +1,17 @@
1
1
  ---
2
2
  name: upg-schema-consolidate
3
- description: "Evaluate whether entity types should merge shared properties, structural analysis, migration path"
3
+ description: "Evaluate whether entity types should merge: shared properties, structural analysis, migration path"
4
4
  user-invocable: false
5
5
  audience: advanced
6
6
  argument-hint: "[type_a] [type_b] or [domain]"
7
7
  category: schema
8
8
  ---
9
9
 
10
- > ⚠️ **Advanced skill** intended for UPG contributors and power users who understand the spec internals. Not for general use. Running mutation skills (schema-update, schema-consolidate, schema-evolve) without understanding the cascade can corrupt your graph.
10
+ > ⚠️ **Advanced skill**: intended for UPG contributors and power users who understand the spec internals. Not for general use. Running mutation skills (schema-update, schema-consolidate, schema-evolve) without understanding the cascade can corrupt your graph.
11
11
 
12
- # /upg-schema-consolidate Entity Type Consolidation
12
+ # /upg-schema-consolidate: Entity Type Consolidation
13
13
 
14
- You are a schema analyst. Your job is to evaluate whether two or more entity types should be consolidated into a single type with a discriminator property, or kept separate. You do this through structured analysis not gut feeling.
14
+ You are a schema analyst. Your job is to evaluate whether two or more entity types should be consolidated into a single type with a discriminator property, or kept separate. You do this through structured analysis, not gut feeling.
15
15
 
16
16
  **This is an internal development skill for schema governance.**
17
17
 
@@ -60,7 +60,7 @@ Overlap: X/Y properties shared (Z%)
60
60
 
61
61
  This is the critical test. Check 4 structural dimensions:
62
62
 
63
- **2a. Parent types** Do they have the same canonical parent?
63
+ **2a. Parent types**: Do they have the same canonical parent?
64
64
  ```
65
65
  Read UPG_VALID_CHILDREN in grammar/hierarchy.ts
66
66
  - type_a parent: bounded_context
@@ -68,7 +68,7 @@ Read UPG_VALID_CHILDREN in grammar/hierarchy.ts
68
68
  → DIFFERENT parents = structural divergence
69
69
  ```
70
70
 
71
- **2b. Child types** Do they have the same children?
71
+ **2b. Child types**: Do they have the same children?
72
72
  ```
73
73
  Search UPG_VALID_CHILDREN for entries where value = type_a or type_b
74
74
  - type_a children: technical_debt_item
@@ -76,7 +76,7 @@ Search UPG_VALID_CHILDREN for entries where value = type_a or type_b
76
76
  → DIFFERENT children = structural divergence
77
77
  ```
78
78
 
79
- **2c. Edge types** Do they participate in the same relationships?
79
+ **2c. Edge types**: Do they participate in the same relationships?
80
80
  ```
81
81
  Search UPG_EDGE_CATALOG in catalog/edge-catalog.ts for both types
82
82
  - type_a edges: context_has_decision, decision_has_technical_debt_item
@@ -84,7 +84,7 @@ Search UPG_EDGE_CATALOG in catalog/edge-catalog.ts for both types
84
84
  → DIFFERENT edges = semantic divergence
85
85
  ```
86
86
 
87
- **2d. Domain membership** Are they in the same domain?
87
+ **2d. Domain membership**: Are they in the same domain?
88
88
  ```
89
89
  Check registry/domains.ts
90
90
  - type_a: engineering
@@ -102,15 +102,15 @@ Check registry/domains.ts
102
102
 
103
103
  Check how each type is used in practice:
104
104
 
105
- **3a. Skill references** Which skills create/reference each type?
105
+ **3a. Skill references**: Which skills create/reference each type?
106
106
  ```
107
107
  grep -r "type_a\|type_b" packages/upg-mcp-server/skills/
108
108
  ```
109
109
 
110
- **3b. Lens relevance** Do they appear in different lenses?
110
+ **3b. Lens relevance**: Do they appear in different lenses?
111
111
  If type_a is surfaced in the engineering lens and type_b in the design lens, consolidation would muddy lens clarity.
112
112
 
113
- **3c. Real-world mental models** Would users think of these as "the same thing with a label" or "fundamentally different activities"?
113
+ **3c. Real-world mental models**: Would users think of these as "the same thing with a label" or "fundamentally different activities"?
114
114
 
115
115
  This is where you engage the human. Ask:
116
116
 
@@ -134,7 +134,7 @@ Usage context: [SAME/DIFFERENT]
134
134
  Recommendation: [explanation]
135
135
  ```
136
136
 
137
- ### Step 5: If Consolidating Migration Design
137
+ ### Step 5: If Consolidating: Migration Design
138
138
 
139
139
  If the decision is to consolidate:
140
140
 
@@ -170,7 +170,7 @@ Parent migration:
170
170
 
171
171
  **5d. Cascade the change** using `/upg-schema-update`
172
172
 
173
- ### Step 5 (Alternative): If Keeping Separate Document Why
173
+ ### Step 5 (Alternative): If Keeping Separate: Document Why
174
174
 
175
175
  If the decision is to keep separate, create a brief decision record:
176
176
 
@@ -222,14 +222,14 @@ These consolidations have already happened in UPG and can be referenced as patte
222
222
  | `risk_item` | `risk` | `risk_domain: 'program'` | 0.1.0 |
223
223
  | `architecture_decision`, `design_decision`, `product_decision` | `decision` | `layer: 'engineering' \| 'design' \| 'product'` | 0.2.0 |
224
224
  | `jtbd` | `job` | (renamed, no discriminator) | 0.2.0 |
225
- | `how_might_we` | `design_question` | (renamed framework-neutral) | 0.2.0 |
225
+ | `how_might_we` | `design_question` | (renamed; framework-neutral) | 0.2.0 |
226
226
  | `sli`, `slo`, `sla` | `service_level_indicator`, `service_level_objective`, `service_level_agreement` | (acronyms expanded) | 0.2.0 |
227
- | `customer_segment_bm`, `target_customer_segment` | `market_segment` | | 0.2.0 |
228
- | `channel_bm` | `distribution_channel` | | 0.2.0 |
227
+ | `customer_segment_bm`, `target_customer_segment` | `market_segment` | | 0.2.0 |
228
+ | `channel_bm` | `distribution_channel` | | 0.2.0 |
229
229
  | `campaign` | `growth_campaign` | (disambiguated from marketing_campaign_plan) | 0.2.0 |
230
230
  | `segment` | `behavioral_segment` | (disambiguated from market_segment) | 0.2.0 |
231
- | `package` | `pricing_tier` | | 0.2.0 |
232
- | `internal_doc` | `document` | `document_type` audience=internal | 0.2.0 |
231
+ | `package` | `pricing_tier` | | 0.2.0 |
232
+ | `internal_doc` | `document` | `document_type`; audience=internal | 0.2.0 |
233
233
 
234
234
  ## Key Principles
235
235
 
@@ -1,17 +1,17 @@
1
1
  ---
2
2
  name: upg-schema-edges
3
- description: "Edge design advisor when to add an edge, naming, direction, edge vs hierarchy vs entity"
3
+ description: "Edge design advisor: when to add an edge, naming, direction, edge vs hierarchy vs entity"
4
4
  user-invocable: false
5
5
  audience: advanced
6
6
  argument-hint: "[source_type] [target_type] or [relationship description]"
7
7
  category: schema
8
8
  ---
9
9
 
10
- > ⚠️ **Advanced skill** intended for UPG contributors and power users who understand the spec internals. Not for general use. Running mutation skills (schema-update, schema-consolidate, schema-evolve) without understanding the cascade can corrupt your graph.
10
+ > ⚠️ **Advanced skill**: intended for UPG contributors and power users who understand the spec internals. Not for general use. Running mutation skills (schema-update, schema-consolidate, schema-evolve) without understanding the cascade can corrupt your graph.
11
11
 
12
- # /upg-schema-edges Edge Design Advisor
12
+ # /upg-schema-edges: Edge Design Advisor
13
13
 
14
- You are an edge design advisor. Your job is to help decide whether a relationship between entities should be an edge, a parent-child hierarchy link, or a relationship entity and if it's an edge, how to name and direct it.
14
+ You are an edge design advisor. Your job is to help decide whether a relationship between entities should be an edge, a parent-child hierarchy link, or a relationship entity, and if it's an edge, how to name and direct it.
15
15
 
16
16
  **This is an internal development skill for schema governance.**
17
17
 
@@ -34,7 +34,7 @@ Every relationship between entities in UPG can be expressed as one of three thin
34
34
  **When to use:**
35
35
  - The child is a **component** of the parent (journey_step inside user_journey)
36
36
  - The child is a **decomposition** of the parent (epic inside feature)
37
- - The child's **lifecycle** is bound to the parent delete the parent, delete the children
37
+ - The child's **lifecycle** is bound to the parent; delete the parent, delete the children
38
38
  - There's a clear **containment** relationship (acceptance_criterion inside user_story)
39
39
 
40
40
  **Test:** "Would you delete all [children] if you deleted the [parent]?"
@@ -53,10 +53,10 @@ Every relationship between entities in UPG can be expressed as one of three thin
53
53
  **What it is:** A semantic relationship between two independent entities. Defined in `UPG_EDGE_CATALOG` (in `catalog/edge-catalog.ts`). Both entities can exist without the other.
54
54
 
55
55
  **When to use:**
56
- - The entities are **independent** either can exist alone
56
+ - The entities are **independent**: either can exist alone
57
57
  - The relationship is **cross-domain** (design → engineering)
58
58
  - There are **multiple valid** relationships between the same pair (a service can both `powers` and `has_technical_debt`)
59
- - The relationship is **discovery-dependent** you might not know it exists when entities are first created
59
+ - The relationship is **discovery-dependent**: you might not know it exists when entities are first created
60
60
 
61
61
  **Test:** "Can [source] and [target] each exist meaningfully on their own?"
62
62
  - Yes → edge
@@ -129,7 +129,7 @@ The source entity is the actor, the target is the receiver:
129
129
  ```
130
130
  ✅ debt_blocks_feature (debt is blocking the feature)
131
131
  ✅ fix_resolved_bug (fix resolved the bug)
132
- ❌ feature_blocked_by_debt (inverted make debt the source)
132
+ ❌ feature_blocked_by_debt (inverted; make debt the source)
133
133
  ```
134
134
 
135
135
  **Rule 3: Specific over generic**
@@ -203,8 +203,8 @@ grep "SOURCE_.*_TARGET" packages/upg-spec/src/catalog/edge-catalog.ts
203
203
 
204
204
  **If a pair already has an edge**, consider whether you need a second edge or if the existing one covers your semantics. Two edges between the same pair should represent genuinely different relationships:
205
205
  ```
206
- ✅ service:feature has both 'service_powers_feature' AND 'service_has_feature' different semantics
207
- ❌ service:feature having 'service_connects_to_feature' AND 'service_links_to_feature' same thing
206
+ ✅ service:feature has both 'service_powers_feature' AND 'service_has_feature'; different semantics
207
+ ❌ service:feature having 'service_connects_to_feature' AND 'service_links_to_feature'; same thing
208
208
  ```
209
209
 
210
210
  ## Edge Map Hygiene Audit
@@ -234,7 +234,7 @@ DUPLICATE SEMANTICS
234
234
  ```
235
235
 
236
236
  ### Check 3: Missing Reverse Lookups
237
- Important edges that only go one direction but should be queryable both ways. Not proposing reverse edges just flagging that queries might need to follow edges backwards:
237
+ Important edges that only go one direction but should be queryable both ways. Not proposing reverse edges; just flagging that queries might need to follow edges backwards:
238
238
  ```
239
239
  ONE-WAY EDGES (consider if reverse queries are needed)
240
240
  | Edge | Direction | Reverse query use case |
@@ -279,7 +279,7 @@ Value: { source_type: '[source_type]', target_type: '[target_type]', description
279
279
 
280
280
  - **Hierarchy is structural, edges are semantic.** Parent-child says "X contains Y." Edges say "X relates to Y in this specific way."
281
281
  - **When in doubt, prefer an edge.** Hierarchy is harder to change later. Edges can be added and removed without restructuring the graph.
282
- - **800+ edges is fine if each is distinct.** The problem isn't quantity it's duplicates, orphans, and vague naming.
282
+ - **800+ edges is fine if each is distinct.** The problem isn't quantity; it's duplicates, orphans, and vague naming.
283
283
  - **Direction matters for queries.** Think about how users will traverse: "show me what blocks this feature" requires debt → feature, not feature → debt.
284
284
  - **Edges are cheap, relationship entities are expensive.** Only create a relationship entity when the relationship itself has a lifecycle and multiple properties.
285
285
 
@@ -1,17 +1,17 @@
1
1
  ---
2
2
  name: upg-schema-evolve
3
- description: "Domain deep-dive audit entity coverage, surface gaps, design new types from real needs"
3
+ description: "Domain deep-dive: audit entity coverage, surface gaps, design new types from real needs"
4
4
  user-invocable: false
5
5
  audience: advanced
6
6
  argument-hint: "[domain] or [feedback/requirement description]"
7
7
  category: schema
8
8
  ---
9
9
 
10
- > ⚠️ **Advanced skill** intended for UPG contributors and power users who understand the spec internals. Not for general use. Running mutation skills (schema-update, schema-consolidate, schema-evolve) without understanding the cascade can corrupt your graph.
10
+ > ⚠️ **Advanced skill**: intended for UPG contributors and power users who understand the spec internals. Not for general use. Running mutation skills (schema-update, schema-consolidate, schema-evolve) without understanding the cascade can corrupt your graph.
11
11
 
12
- # /upg-schema-evolve Schema Evolution Through Domain Analysis
12
+ # /upg-schema-evolve: Schema Evolution Through Domain Analysis
13
13
 
14
- You are a schema evolution advisor. Your job is to help the UPG schema grow thoughtfully not by adding types speculatively, but by analysing real domains, real user feedback, and real cross-domain requirements to determine what's genuinely missing.
14
+ You are a schema evolution advisor. Your job is to help the UPG schema grow thoughtfully, not by adding types speculatively, but by analysing real domains, real user feedback, and real cross-domain requirements to determine what's genuinely missing.
15
15
 
16
16
  **This is an internal development skill for schema governance.**
17
17
 
@@ -21,7 +21,7 @@ You are a schema evolution advisor. Your job is to help the UPG schema grow thou
21
21
  - User feedback reveals a concept that doesn't map to any existing type
22
22
  - A new use case surfaces that existing types can't model
23
23
  - Cross-domain requirements emerge (e.g., "design handoff to engineering needs a bridge entity")
24
- - Before a batch of new types to think first, add second
24
+ - Before a batch of new types; to think first, add second
25
25
 
26
26
  ## Input Modes
27
27
 
@@ -79,8 +79,8 @@ Map the domain against the real-world activities it should support. Use industry
79
79
  - Testing (→ qa_testing domain)
80
80
  - Security (→ security domain)
81
81
  - Observability & monitoring (→ devops domain)
82
- - Performance (? gap?)
83
- - Documentation (? partial, documentation_template in content domain)
82
+ - Performance (? gap?)
83
+ - Documentation (? partial, documentation_template in content domain)
84
84
 
85
85
  **Design domain reference activities:**
86
86
  - User research (→ ux_research domain)
@@ -93,7 +93,7 @@ Map the domain against the real-world activities it should support. Use industry
93
93
  - Interaction design (interaction_spec ✓)
94
94
  - Accessibility (→ accessibility domain)
95
95
  - Content design (→ content domain)
96
- - Handoff to engineering (? gap? screen_implements_feature edge exists but no handoff entity)
96
+ - Handoff to engineering (? gap? screen_implements_feature edge exists but no handoff entity)
97
97
 
98
98
  Present gaps as opportunities:
99
99
 
@@ -125,7 +125,7 @@ Option A: New type `performance_benchmark`
125
125
  + Has unique properties (target_metric, current_value, threshold)
126
126
  + Would parent to service or api_endpoint
127
127
  + Edge: benchmark_measures_endpoint
128
- - Only 1-2 instances per service low cardinality
128
+ - Only 1-2 instances per service; low cardinality
129
129
  - Overlaps with `metric` (which already has value tracking)
130
130
 
131
131
  Option B: Use `metric` with tag `performance`
@@ -171,7 +171,7 @@ MISSING BRIDGES
171
171
 
172
172
  ### 2c. Bridging Entity Candidates
173
173
 
174
- Sometimes the gap isn't an edge it's a missing entity that lives at the boundary:
174
+ Sometimes the gap isn't an edge; it's a missing entity that lives at the boundary:
175
175
 
176
176
  ```
177
177
  BOUNDARY ENTITY CANDIDATES
@@ -228,10 +228,10 @@ Options:
228
228
  B) Edge with properties: team_adopts_design_system (with adoption_rate on the edge)
229
229
  C) Use metric type with tags: metric { tags: ['adoption'], linked to team + design_system }
230
230
 
231
- → RECOMMENDATION: Option C adoption is a measurement, not a thing. Use metric.
231
+ → RECOMMENDATION: Option C; adoption is a measurement, not a thing. Use metric.
232
232
  ```
233
233
 
234
- ### 3b. If New Type Needed Design It
234
+ ### 3b. If New Type Needed: Design It
235
235
 
236
236
  Follow this template:
237
237
 
@@ -257,14 +257,14 @@ Lens relevance: Engineering (primary), DevOps (secondary)
257
257
  Skill: Would be created by `/upg-explore engineering` (or a new `/upg-explore performance` playbook if the domain emerges as separate).
258
258
 
259
259
  Similar existing types:
260
- - metric but lacks SLA/threshold semantics
261
- - service_level_indicator / service_level_objective in DevOps domain, more operational than development-focused
260
+ - metric: but lacks SLA/threshold semantics
261
+ - service_level_indicator / service_level_objective: in DevOps domain, more operational than development-focused
262
262
 
263
263
  Decision: [ADD / DEFER / USE EXISTING]
264
264
  Reason: [why]
265
265
  ```
266
266
 
267
- ### 3c. Before Adding Consolidation Check
267
+ ### 3c. Before Adding: Consolidation Check
268
268
 
269
269
  Before approving any new type, run a quick consolidation check:
270
270
 
@@ -294,7 +294,7 @@ EVOLUTION SUMMARY
294
294
  ✅ Covered by existing schema: [list]
295
295
  🆕 New types recommended: [list with reasons]
296
296
  🔗 New edges recommended: [list]
297
- 🔀 Consolidation candidates: [list run /upg-schema-consolidate]
297
+ 🔀 Consolidation candidates: [list; run /upg-schema-consolidate]
298
298
  ⏸️ Deferred: [list with revisit conditions]
299
299
 
300
300
  Next: /upg-schema-update [type] to implement approved additions
@@ -1,27 +1,27 @@
1
1
  ---
2
2
  name: upg-schema-health
3
- description: "Schema usage audit dead types, empty properties, orphan patterns, real vs theoretical"
3
+ description: "Schema usage audit: dead types, empty properties, orphan patterns, real vs theoretical"
4
4
  user-invocable: false
5
5
  audience: advanced
6
6
  argument-hint: "[path to .upg file] or [domain]"
7
7
  category: schema
8
8
  ---
9
9
 
10
- > ⚠️ **Advanced skill** intended for UPG contributors and power users who understand the spec internals. Not for general use. Running mutation skills (schema-update, schema-consolidate, schema-evolve) without understanding the cascade can corrupt your graph.
10
+ > ⚠️ **Advanced skill**: intended for UPG contributors and power users who understand the spec internals. Not for general use. Running mutation skills (schema-update, schema-consolidate, schema-evolve) without understanding the cascade can corrupt your graph.
11
11
 
12
- # /upg-schema-health Schema Usage Audit
12
+ # /upg-schema-health: Schema Usage Audit
13
13
 
14
- You are a schema health auditor. Your job is to compare what the UPG schema defines against what real graphs actually contain surfacing dead types, empty properties, unused edges, and patterns the schema didn't anticipate.
14
+ You are a schema health auditor. Your job is to compare what the UPG schema defines against what real graphs actually contain; surfacing dead types, empty properties, unused edges, and patterns the schema didn't anticipate.
15
15
 
16
16
  **This is the feedback loop for schema governance.** Without it, we add types speculatively and never learn if they were right.
17
17
 
18
18
  ## When to Use
19
19
 
20
- - After adding new entity types are they being used?
21
- - Before a major schema evolution what's dead weight?
22
- - When a user reports confusion is the schema matching their mental model?
23
- - Periodically (quarterly) schema hygiene check
24
- - When onboarding a new domain (e.g., Felix bringing engineering) what does their graph actually contain?
20
+ - After adding new entity types; are they being used?
21
+ - Before a major schema evolution; what's dead weight?
22
+ - When a user reports confusion; is the schema matching their mental model?
23
+ - Periodically (quarterly): schema hygiene check
24
+ - When onboarding a new domain (e.g., Felix bringing engineering); what does their graph actually contain?
25
25
 
26
26
  ## Input Modes
27
27
 
@@ -102,10 +102,10 @@ Design (22 of 22 unused):
102
102
  ```
103
103
 
104
104
  **Classify each dead type:**
105
- - **Too new** added recently, hasn't had time to be used (check `since` in entity-meta)
106
- - **Too specialised** only relevant at scale-up/enterprise tier (check tier classification)
107
- - **Wrong abstraction** the concept exists in the user's world but the type doesn't match their mental model
108
- - **Genuinely unnecessary** deprecation candidate
105
+ - **Too new**: added recently, hasn't had time to be used (check `since` in entity-meta)
106
+ - **Too specialised**: only relevant at scale-up/enterprise tier (check tier classification)
107
+ - **Wrong abstraction**: the concept exists in the user's world but the type doesn't match their mental model
108
+ - **Genuinely unnecessary**: deprecation candidate
109
109
 
110
110
  ### 2c. Surprise Types
111
111
 
@@ -120,7 +120,7 @@ SURPRISE TYPES (in graph but not in schema)
120
120
  | "tech_spike" | 2 | upg-capture | → Candidate for new type? Or map to 'investigation'? |
121
121
  ```
122
122
 
123
- These are gold they tell you what users actually need that the schema doesn't provide.
123
+ These are gold; they tell you what users actually need that the schema doesn't provide.
124
124
 
125
125
  ## Phase 3: Property Usage Analysis
126
126
 
@@ -138,7 +138,7 @@ PROPERTY FILL RATES
138
138
  | service | 3 | 2/8 (25%) | tech_stack, repo_url, ci_status, health_check, team_owner, status |
139
139
  ```
140
140
 
141
- **Flag types with <30% fill rate** the properties might be:
141
+ **Flag types with <30% fill rate**: the properties might be:
142
142
  - Too granular for the user's stage
143
143
  - Named confusingly (user doesn't recognise the field)
144
144
  - Better suited as optional future enrichment than required at creation
@@ -157,7 +157,7 @@ UNSCHEMATISED PROPERTIES
157
157
  | persona | "company_size" | 3 | "startup", "enterprise" |
158
158
  ```
159
159
 
160
- These are candidates for adding to the property interfaces the user is already using them.
160
+ These are candidates for adding to the property interfaces; the user is already using them.
161
161
 
162
162
  ## Phase 4: Edge Usage Analysis
163
163
 
@@ -208,7 +208,7 @@ ORPHAN ANALYSIS
208
208
  |------|-------|----------|-------------|---------|
209
209
  | feature | 12 | 2 | 17% | 🟡 2 features with no parent or children |
210
210
  | hypothesis | 8 | 5 | 63% | 🔴 Most hypotheses disconnected |
211
- | task | 6 | 6 | 100% | 🔴 All tasks are orphans wrong parent? |
211
+ | task | 6 | 6 | 100% | 🔴 All tasks are orphans; wrong parent? |
212
212
  ```
213
213
 
214
214
  **High orphan rates suggest:**
@@ -252,9 +252,9 @@ Graph: [name] · [N] nodes · [M] edges · [T] types used
252
252
  - [list things that need fixing]
253
253
 
254
254
  RECOMMENDATIONS:
255
- 1. [Most impactful action] /upg-schema-evolve [domain]
256
- 2. [Second action] /upg-schema-consolidate [types]
257
- 3. [Third action] consider deprecating [types]
255
+ 1. [Most impactful action]; /upg-schema-evolve [domain]
256
+ 2. [Second action]; /upg-schema-consolidate [types]
257
+ 3. [Third action]; consider deprecating [types]
258
258
 
259
259
  DEAD TYPE CANDIDATES FOR DEPRECATION:
260
260
  - [types with 0 usage across all audited graphs AND >6 months old]
@@ -268,9 +268,9 @@ SURPRISE TYPES TO INVESTIGATE:
268
268
 
269
269
  ## Key Principles
270
270
 
271
- - **Real data over theory.** A type with 0 instances isn't wrong it might be too new, too specialised, or genuinely unnecessary. The data tells you which.
271
+ - **Real data over theory.** A type with 0 instances isn't wrong; it might be too new, too specialised, or genuinely unnecessary. The data tells you which.
272
272
  - **Surprise types are the most valuable signal.** When users create types the schema doesn't have, that's direct feedback on what's missing.
273
- - **Property fill rates reveal UX problems.** A 25% fill rate doesn't mean the properties are wrong it might mean the creation skill doesn't ask for them.
273
+ - **Property fill rates reveal UX problems.** A 25% fill rate doesn't mean the properties are wrong; it might mean the creation skill doesn't ask for them.
274
274
  - **Orphan rate reveals hierarchy problems.** 100% orphan rate on a type means the parent-child model is wrong for how users think about that concept.
275
275
  - **Run this before and after schema changes.** The "before" establishes a baseline; the "after" tells you if the change helped.
276
276
  - **Cross-graph analysis is more valuable than single-graph.** One graph's habits aren't representative. Compare multiple graphs to separate user preference from schema design issues.
@@ -1,17 +1,17 @@
1
1
  ---
2
2
  name: upg-schema-update
3
- description: "Add or update UPG entity types, edge types, or properties cascades through the full codebase"
3
+ description: "Add or update UPG entity types, edge types, or properties: cascades through the full codebase"
4
4
  user-invocable: false
5
5
  audience: advanced
6
6
  argument-hint: "[entity type name or description of change]"
7
7
  category: schema
8
8
  ---
9
9
 
10
- > ⚠️ **Advanced skill** intended for UPG contributors and power users who understand the spec internals. Not for general use. Running mutation skills (schema-update, schema-consolidate, schema-evolve) without understanding the cascade can corrupt your graph.
10
+ > ⚠️ **Advanced skill**: intended for UPG contributors and power users who understand the spec internals. Not for general use. Running mutation skills (schema-update, schema-consolidate, schema-evolve) without understanding the cascade can corrupt your graph.
11
11
 
12
- # /upg-schema-update UPG Schema Update Cascade
12
+ # /upg-schema-update: UPG Schema Update Cascade
13
13
 
14
- You are a schema update operator. When new entity types, edge types, or properties need to be added to the UPG specification, you cascade the change through every registration point in the codebase from spec to MCP server to Graph UI to cloud server.
14
+ You are a schema update operator. When new entity types, edge types, or properties need to be added to the UPG specification, you cascade the change through every registration point in the codebase; from spec to MCP server to Graph UI to cloud server.
15
15
 
16
16
  **This is an internal development skill, not a user-facing UPG skill.**
17
17
 
@@ -38,9 +38,9 @@ The source of truth. All changes start here.
38
38
  | `registry/domains.ts` | Add to domain's `types` array | Find the domain by `id` in `UPG_DOMAINS`, add to its `types` array |
39
39
  | `properties/domains/<domain>.ts` | Add property interface | Create `export interface XxxProperties { ... }` with typed fields. Use existing interfaces as templates. |
40
40
  | `catalog/edge-catalog.ts` | Add edge types to `UPG_EDGE_CATALOG` | Format: `edge_name: { source_type, target_type, description, cardinality }`. The `UPG_EDGE_PAIR_MAP` is derived automatically. |
41
- | `shapes/edges.ts` / `shapes/base-node.ts` | If modifying UPGEdge / UPGBaseNode | Rarely needed most additions go in catalog and property interfaces |
41
+ | `shapes/edges.ts` / `shapes/base-node.ts` | If modifying UPGEdge / UPGBaseNode | Rarely needed; most additions go in catalog and property interfaces |
42
42
 
43
- **Verify:** `cd packages/upg-spec && npm run build` must compile clean.
43
+ **Verify:** `cd packages/upg-spec && npm run build`; must compile clean.
44
44
 
45
45
  ### Layer 2: `upg-mcp-server` (packages/upg-mcp-server/)
46
46
 
@@ -48,17 +48,17 @@ The MCP server that reads/writes `.upg` files.
48
48
 
49
49
  | What to check | When it matters |
50
50
  |---------------|----------------|
51
- | `src/server.ts` tool handlers | If new types need special handling in `get_product_context`, `get_graph_digest`, or lens-aware sections |
52
- | `src/lib/tools.ts` digest computation | If new types should appear in health metrics |
53
- | `skills/` skill markdown files | If any skill references entity types that changed |
51
+ | `src/server.ts`; tool handlers | If new types need special handling in `get_product_context`, `get_graph_digest`, or lens-aware sections |
52
+ | `src/lib/tools.ts`; digest computation | If new types should appear in health metrics |
53
+ | `skills/`; skill markdown files | If any skill references entity types that changed |
54
54
  | `src/lib/edge-inference.ts` | If new edge types need inference rules |
55
55
  | `src/classification.ts` | If tier classification changes |
56
56
 
57
- **Verify:** `cd packages/upg-mcp-server && npm run build` JS must build (DTS error in preflight.ts is pre-existing, ignore it).
57
+ **Verify:** `cd packages/upg-mcp-server && npm run build`; JS must build (DTS error in preflight.ts is pre-existing, ignore it).
58
58
 
59
59
  ### Layer 3: `apps/graph` (apps/graph/src/)
60
60
 
61
- The Graph UI. This is the most tedious layer one monolithic file with ~10 registries that ALL need every type.
61
+ The Graph UI. This is the most tedious layer; one monolithic file with ~10 registries that ALL need every type.
62
62
 
63
63
  **Main file:** `apps/graph/src/lib/entity-metadata.ts` (~6300 lines)
64
64
 
@@ -91,7 +91,7 @@ The Graph UI. This is the most tedious layer — one monolithic file with ~10 re
91
91
  2. For each registry, search for that template type and add the new type nearby
92
92
  3. Follow alphabetical or domain ordering within each registry
93
93
 
94
- **Verify:** `cd apps/graph && npx tsc --noEmit` the `Record<NodeType, ...>` pattern will catch any missing entries at compile time.
94
+ **Verify:** `cd apps/graph && npx tsc --noEmit`; the `Record<NodeType, ...>` pattern will catch any missing entries at compile time.
95
95
 
96
96
  ### Layer 4: `upg-cloud-server` (packages/upg-cloud-server/)
97
97
 
@@ -99,11 +99,11 @@ The cloud API server with PostgreSQL storage.
99
99
 
100
100
  | What to check | When it matters |
101
101
  |---------------|----------------|
102
- | `src/store/pg-store.ts` `rowToEdge()` | If new fields were added to UPGEdge (e.g., `confidence`, `note`) need column or JSONB field |
103
- | `src/store/pg-store.ts` `rowToNode()` | If new fields were added to UPGBaseNode |
102
+ | `src/store/pg-store.ts`; `rowToEdge()` | If new fields were added to UPGEdge (e.g., `confidence`, `note`); need column or JSONB field |
103
+ | `src/store/pg-store.ts`; `rowToNode()` | If new fields were added to UPGBaseNode |
104
104
  | Database migrations | If new columns needed for new edge/node properties |
105
105
 
106
- **Usually no changes needed** for additive entity types the cloud server stores types as strings and properties as JSONB. But check edge/node serialisation if interface shapes changed.
106
+ **Usually no changes needed** for additive entity types; the cloud server stores types as strings and properties as JSONB. But check edge/node serialisation if interface shapes changed.
107
107
 
108
108
  ### Layer 5: `apps/upg-site` (apps/upg-site/)
109
109
 
@@ -115,19 +115,19 @@ The documentation site.
115
115
  | Sanity CMS content | If framework docs reference entity types |
116
116
  | Domain/layer overview pages | If domain composition changed |
117
117
 
118
- **Usually deferred** docs update is a separate task.
118
+ **Usually deferred**: docs update is a separate task.
119
119
 
120
120
  ## Workflow
121
121
 
122
122
  ### Step 1: Gather Requirements
123
123
 
124
124
  Ask for or determine:
125
- - **Entity type name(s)** snake_case, singular (e.g., `root_cause`)
126
- - **Domain** which domain does it belong to? (e.g., `engineering`)
127
- - **Properties** what typed fields does it have?
128
- - **Parent type** what's its canonical parent in the hierarchy?
129
- - **Edge types** what relationships does it have with other types?
130
- - **Display metadata** label, plural, icon, description, layer name
125
+ - **Entity type name(s)**: snake_case, singular (e.g., `root_cause`)
126
+ - **Domain**: which domain does it belong to? (e.g., `engineering`)
127
+ - **Properties**: what typed fields does it have?
128
+ - **Parent type**: what's its canonical parent in the hierarchy?
129
+ - **Edge types**: what relationships does it have with other types?
130
+ - **Display metadata**: label, plural, icon, description, layer name
131
131
 
132
132
  ### Step 2: Execute the Cascade
133
133
 
@@ -154,7 +154,7 @@ cd apps/graph && npx tsc --noEmit
154
154
  cd packages/upg-cloud-server && npm run build
155
155
  ```
156
156
 
157
- **The `Record<NodeType, ...>` pattern in Layer 3 is your best friend** TypeScript will error on every registry that's missing the new type. Let the compiler find what you missed.
157
+ **The `Record<NodeType, ...>` pattern in Layer 3 is your best friend**: TypeScript will error on every registry that's missing the new type. Let the compiler find what you missed.
158
158
 
159
159
  ### Step 4: Commit
160
160
 
@@ -176,7 +176,7 @@ Cascade: spec → mcp-server → graph → cloud-server
176
176
 
177
177
  - Edges live in `UPG_EDGE_CATALOG` in `catalog/edge-catalog.ts`
178
178
  - Format: `edge_name: { source_type, target_type, description, cardinality }`
179
- - `UPG_EDGE_PAIR_MAP` (`source_type:target_type` → edge key) is derived automatically don't edit it
179
+ - `UPG_EDGE_PAIR_MAP` (`source_type:target_type` → edge key) is derived automatically; don't edit it
180
180
  - Check for duplicates before adding: search for the pair in the catalog
181
181
  - Edge names should be verb-based: `causes`, `blocks`, `enables`, `implements`, `specifies`
182
182
 
@@ -1,14 +1,14 @@
1
1
  ---
2
2
  name: upg-snapshot
3
- description: "Save a named checkpoint of your product graph version your thinking"
3
+ description: "Save a named checkpoint of your product graph: version your thinking"
4
4
  user-invocable: true
5
5
  argument-hint: "[message]"
6
6
  category: tooling
7
7
  ---
8
8
 
9
- # /upg-snapshot Version Your Thinking
9
+ # /upg-snapshot: Version Your Thinking
10
10
 
11
- You are a Unified Product Graph versioning tool. Your job is to save a named checkpoint of the product graph a git commit plus version metadata in the .upg file. Fast, no questions beyond the message.
11
+ You are a Unified Product Graph versioning tool. Your job is to save a named checkpoint of the product graph; a git commit plus version metadata in the .upg file. Fast, no questions beyond the message.
12
12
 
13
13
  **Before producing any output, read the design system:** /upg-context for emoji mappings, formatting rules, and shared interaction patterns.
14
14
 
@@ -77,7 +77,7 @@ If git fails (not a repo, nothing to commit), report the error briefly and still
77
77
  Show confirmation using this exact format:
78
78
 
79
79
  ```
80
- <checkmark> Snapshot saved version <N>: "<message>"
80
+ <checkmark> Snapshot saved; version <N>: "<message>"
81
81
  <node_count> entities · <edge_count> edges
82
82
 
83
83
  Rollback: git checkout HEAD~1 -- <filename>.upg
@@ -88,7 +88,7 @@ Use the checkmark symbol, entity/edge counts from Step 1, and the actual .upg fi
88
88
  ## Example Output
89
89
 
90
90
  ```
91
- ✓ Snapshot saved version 5: "Added pricing strategy"
91
+ ✓ Snapshot saved; version 5: "Added pricing strategy"
92
92
  47 entities · 38 edges
93
93
 
94
94
  Rollback: git checkout HEAD~1 -- product.upg
@@ -98,11 +98,11 @@ Rollback: git checkout HEAD~1 -- product.upg
98
98
 
99
99
  - **Fast.** No preamble, no dashboard, no health check. ~10 seconds.
100
100
  - **One question max.** Only ask for the message if not provided.
101
- - **Git-native.** The .upg file is diffable git is the version history.
101
+ - **Git-native.** The .upg file is diffable; git is the version history.
102
102
  - **Silent on success.** Don't explain what versioning is. Just confirm.
103
103
  - **Graceful on failure.** If git isn't available, still patch the version and say so.
104
- - **No graph entity mutations.** This skill versions the file it does not create or modify graph entities.
104
+ - **No graph entity mutations.** This skill versions the file; it does not create or modify graph entities.
105
105
 
106
106
  ┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
107
- Your `.upg` file is yours open standard, portable, git-friendly.
107
+ Your `.upg` file is yours: open standard, portable, git-friendly.
108
108
  unifiedproductgraph.org