@unified-product-graph/core 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,375 @@
1
+ {
2
+ "upg_version": "0.4.0",
3
+ "exported_at": "2026-04-07T10:00:00Z",
4
+ "source": {
5
+ "tool": "upg-spec",
6
+ "tool_version": "0.2.0",
7
+ "workspace_id": "spec_examples"
8
+ },
9
+ "product": {
10
+ "id": "entopo",
11
+ "title": "Entopo",
12
+ "description": "The product creation tool. Structure your product knowledge as a typed graph — queryable, traversable, AI-readable.",
13
+ "stage": "mvp"
14
+ },
15
+ "nodes": [
16
+ {
17
+ "id": "persona_alex-senior-pm",
18
+ "type": "persona",
19
+ "title": "Alex the Senior PM",
20
+ "description": "A senior product manager leading a 12-person team at a mid-size B2B SaaS company (50-200 employees). Advanced experience. Primary persona.",
21
+ "status": "active",
22
+ "tags": [
23
+ "primary",
24
+ "enterprise"
25
+ ],
26
+ "properties": {
27
+ "is_primary": true,
28
+ "experience_level": "advanced",
29
+ "context": "Leads 12-person team at mid-size B2B SaaS (50-200 employees)",
30
+ "motivation": "Making confident, evidence-based decisions",
31
+ "goals": [
32
+ "Make confident, evidence-based product decisions",
33
+ "Keep the team aligned on priorities",
34
+ "See the full picture before committing to a direction"
35
+ ],
36
+ "frustrations": [
37
+ "No single source of truth for product decisions",
38
+ "Different teams use different tools and terminology",
39
+ "Can't easily show stakeholders what we've decided and why"
40
+ ]
41
+ }
42
+ },
43
+ {
44
+ "id": "job_keep-team-aligned",
45
+ "type": "jtbd",
46
+ "title": "Keep my team aligned on what matters",
47
+ "description": "When priorities shift or new information surfaces, I need everyone to see the same picture so we don't waste cycles on misaligned work.",
48
+ "status": "active",
49
+ "tags": [
50
+ "core-job"
51
+ ],
52
+ "properties": {
53
+ "job_type": "functional",
54
+ "importance": {
55
+ "value": 5,
56
+ "label": "Critical",
57
+ "scale_id": "importance_5"
58
+ },
59
+ "current_satisfaction": {
60
+ "value": 2,
61
+ "label": "Unsatisfied",
62
+ "scale_id": "satisfaction_5"
63
+ }
64
+ }
65
+ },
66
+ {
67
+ "id": "need_no-single-source-of-truth",
68
+ "type": "need",
69
+ "title": "No single source of truth for product decisions",
70
+ "description": "Product knowledge is scattered across Notion pages, Jira boards, Slack threads, Google Docs, and tribal memory. No single place shows what we know, what we've decided, and why.",
71
+ "status": "validated",
72
+ "tags": [
73
+ "high-value",
74
+ "core"
75
+ ],
76
+ "properties": {
77
+ "valence": "pain",
78
+ "severity": {
79
+ "value": 4,
80
+ "label": "Significant",
81
+ "scale_id": "severity_5"
82
+ },
83
+ "frequency": {
84
+ "value": 4,
85
+ "label": "Often",
86
+ "scale_id": "frequency_5"
87
+ },
88
+ "importance": {
89
+ "value": 5,
90
+ "label": "Critical",
91
+ "scale_id": "importance_5"
92
+ },
93
+ "motivation": "functional"
94
+ }
95
+ },
96
+ {
97
+ "id": "need_context-loss-between-sprints",
98
+ "type": "need",
99
+ "title": "Teams lose product context between sprint boundaries",
100
+ "description": "When a sprint ends and a new one begins, context about why decisions were made, what was learned, and what changed gets lost. Teams re-derive context instead of building on it.",
101
+ "status": "discovered",
102
+ "tags": [
103
+ "pilot-discovery"
104
+ ],
105
+ "properties": {
106
+ "valence": "pain",
107
+ "severity": {
108
+ "value": 3,
109
+ "label": "Moderate",
110
+ "scale_id": "severity_5"
111
+ },
112
+ "frequency": {
113
+ "value": 4,
114
+ "label": "Often",
115
+ "scale_id": "frequency_5"
116
+ },
117
+ "discovered_in": "enterprise-pilot-q2",
118
+ "mentioned_by": "4 of 5 pilot teams"
119
+ }
120
+ },
121
+ {
122
+ "id": "insight_tool-fragmentation",
123
+ "type": "insight",
124
+ "title": "PMs at 50+ person companies use 5+ tools with no shared context",
125
+ "description": "Across 8 interviews, a consistent pattern emerged: product managers at companies with 50+ employees use 5 or more tools daily (Jira, Notion, Figma, Slack, analytics) with no shared data model between them. Each tool holds a partial picture.",
126
+ "status": "active",
127
+ "tags": [
128
+ "research",
129
+ "validated"
130
+ ],
131
+ "properties": {
132
+ "source_study": "enterprise-pm-interviews-r1",
133
+ "observation_count": 8,
134
+ "confidence": "high"
135
+ }
136
+ },
137
+ {
138
+ "id": "opportunity_unified-knowledge",
139
+ "type": "opportunity",
140
+ "title": "No single source of truth for product knowledge",
141
+ "description": "Teams lack a unified, queryable model of their product knowledge. Decisions, research, strategy, and execution live in disconnected tools. An opportunity exists to connect these into a single graph.",
142
+ "status": "validated",
143
+ "tags": [
144
+ "top-opportunity",
145
+ "core"
146
+ ],
147
+ "properties": {
148
+ "reach": {
149
+ "value": 4,
150
+ "label": "Most",
151
+ "scale_id": "reach_5",
152
+ "normalized": 0.75
153
+ },
154
+ "frequency": {
155
+ "value": 4,
156
+ "label": "Often",
157
+ "scale_id": "frequency_5",
158
+ "normalized": 0.75
159
+ },
160
+ "pain": {
161
+ "value": 4,
162
+ "label": "Significant",
163
+ "scale_id": "pain_5",
164
+ "normalized": 0.75
165
+ },
166
+ "opportunity_score": 0.42
167
+ }
168
+ },
169
+ {
170
+ "id": "solution_unified-product-graph",
171
+ "type": "solution",
172
+ "title": "Unified Product Graph",
173
+ "description": "A typed knowledge graph that models all product entities — personas, needs, opportunities, solutions, hypotheses, experiments, features, metrics — as nodes with semantic edges. Queryable, traversable, AI-readable.",
174
+ "status": "active",
175
+ "tags": [
176
+ "primary-solution"
177
+ ],
178
+ "properties": {
179
+ "timeline": "Q2 2026",
180
+ "reach": {
181
+ "value": 4,
182
+ "label": "Most",
183
+ "scale_id": "reach_5",
184
+ "normalized": 0.75
185
+ },
186
+ "impact": {
187
+ "value": 5,
188
+ "label": "Transformative",
189
+ "scale_id": "impact_5",
190
+ "normalized": 1
191
+ },
192
+ "confidence": {
193
+ "value": 3,
194
+ "label": "Some evidence",
195
+ "scale_id": "confidence_5",
196
+ "normalized": 0.5
197
+ },
198
+ "effort": {
199
+ "value": 4,
200
+ "label": "Significant",
201
+ "scale_id": "effort_5",
202
+ "normalized": 0.75
203
+ },
204
+ "rice_score": 0.5
205
+ }
206
+ },
207
+ {
208
+ "id": "hypothesis_structured-knowledge-reduces-planning",
209
+ "type": "hypothesis",
210
+ "title": "Structured knowledge reduces planning time by 30%",
211
+ "description": "We believe that a graph-based product model will reduce quarterly planning time by 30%, measured by comparing planning hours before and after adoption over 2 quarters.",
212
+ "status": "validated",
213
+ "tags": [
214
+ "validated",
215
+ "core"
216
+ ],
217
+ "properties": {
218
+ "we_believe": "A graph-based product model",
219
+ "will_result_in": "30% reduction in quarterly planning time",
220
+ "we_know_when": "Planning cycle time drops in the first 2 quarters",
221
+ "we_test_by": "Measuring planning hours before and after adoption",
222
+ "phase": "resolved"
223
+ }
224
+ },
225
+ {
226
+ "id": "experiment_enterprise-pilot-q2",
227
+ "type": "experiment",
228
+ "title": "Enterprise pilot Q2",
229
+ "description": "A controlled pilot with 5 enterprise teams over 8 weeks. Teams adopted the Unified Product Graph for their quarterly planning cycle. Planning time was measured before and after.",
230
+ "status": "complete",
231
+ "tags": [
232
+ "pilot",
233
+ "enterprise"
234
+ ],
235
+ "properties": {
236
+ "method": "controlled_pilot",
237
+ "sample_size": 5,
238
+ "duration": "8 weeks",
239
+ "expected_lift": 30,
240
+ "expected_lift_unit": "percentage",
241
+ "actual_lift": 22,
242
+ "phase": "done"
243
+ }
244
+ },
245
+ {
246
+ "id": "learning_planning-time-reduction",
247
+ "type": "learning",
248
+ "title": "22% reduction — below target but statistically significant",
249
+ "description": "Teams reduced planning time by 22% (target was 30%). 3 of 5 teams exceeded the 20% threshold. The result is statistically significant and directionally positive, strengthening confidence in the hypothesis.",
250
+ "status": "active",
251
+ "tags": [
252
+ "positive",
253
+ "validated"
254
+ ],
255
+ "properties": {
256
+ "result": "Teams reduced planning time by 22%. 3 of 5 teams exceeded 20% threshold.",
257
+ "result_direction": "positive",
258
+ "confidence_impact": "strengthens",
259
+ "teams_above_threshold": 3,
260
+ "teams_total": 5
261
+ }
262
+ },
263
+ {
264
+ "id": "metric_planning-time",
265
+ "type": "metric",
266
+ "title": "Quarterly planning time",
267
+ "description": "Hours spent per team on quarterly planning activities: prioritisation meetings, strategy alignment, roadmap construction, stakeholder reviews.",
268
+ "status": "active",
269
+ "tags": [
270
+ "core-metric",
271
+ "efficiency"
272
+ ],
273
+ "properties": {
274
+ "unit": "percentage_reduction",
275
+ "current_value": 22,
276
+ "target_value": 30,
277
+ "direction": "positive",
278
+ "measurement_frequency": "quarterly"
279
+ }
280
+ },
281
+ {
282
+ "id": "objective_reduce-context-switching",
283
+ "type": "objective",
284
+ "title": "Reduce context-switching for product teams",
285
+ "description": "Product teams should spend less time switching between tools and re-deriving context, and more time making decisions and building product.",
286
+ "status": "active",
287
+ "tags": [
288
+ "north-star",
289
+ "h2-2026"
290
+ ],
291
+ "properties": {
292
+ "time_horizon": "H2 2026",
293
+ "owner": "product"
294
+ }
295
+ }
296
+ ],
297
+ "edges": [
298
+ {
299
+ "id": "e_alex_job",
300
+ "source": "persona_alex-senior-pm",
301
+ "target": "job_keep-team-aligned",
302
+ "type": "persona_pursues_job"
303
+ },
304
+ {
305
+ "id": "e_job_need",
306
+ "source": "job_keep-team-aligned",
307
+ "target": "need_no-single-source-of-truth",
308
+ "type": "job_surfaces_need"
309
+ },
310
+ {
311
+ "id": "e_insight_opp",
312
+ "source": "insight_tool-fragmentation",
313
+ "target": "opportunity_unified-knowledge",
314
+ "type": "insight_informs_opportunity"
315
+ },
316
+ {
317
+ "id": "e_need_opp",
318
+ "source": "need_no-single-source-of-truth",
319
+ "target": "opportunity_unified-knowledge",
320
+ "type": "need_grounds_opportunity"
321
+ },
322
+ {
323
+ "id": "e_opp_sol",
324
+ "source": "opportunity_unified-knowledge",
325
+ "target": "solution_unified-product-graph",
326
+ "type": "opportunity_drives_solution"
327
+ },
328
+ {
329
+ "id": "e_sol_hyp",
330
+ "source": "solution_unified-product-graph",
331
+ "target": "hypothesis_structured-knowledge-reduces-planning",
332
+ "type": "solution_proposes_hypothesis"
333
+ },
334
+ {
335
+ "id": "e_hyp_exp",
336
+ "source": "hypothesis_structured-knowledge-reduces-planning",
337
+ "target": "experiment_enterprise-pilot-q2",
338
+ "type": "hypothesis_requires_experiment"
339
+ },
340
+ {
341
+ "id": "e_exp_learning",
342
+ "source": "experiment_enterprise-pilot-q2",
343
+ "target": "learning_planning-time-reduction",
344
+ "type": "experiment_produces_learning"
345
+ },
346
+ {
347
+ "id": "e_exp_need_discovery",
348
+ "source": "experiment_enterprise-pilot-q2",
349
+ "target": "need_context-loss-between-sprints",
350
+ "type": "experiment_surfaces_need",
351
+ "properties": {
352
+ "note": "Discovered during pilot — not part of original hypothesis"
353
+ }
354
+ },
355
+ {
356
+ "id": "e_sol_metric",
357
+ "source": "solution_unified-product-graph",
358
+ "target": "metric_planning-time",
359
+ "type": "solution_tracks_metric"
360
+ },
361
+ {
362
+ "id": "e_objective_metric",
363
+ "source": "objective_reduce-context-switching",
364
+ "target": "metric_planning-time",
365
+ "type": "objective_measures_metric"
366
+ }
367
+ ],
368
+ "metadata": {
369
+ "export_name": "Enterprise Pilot — UPG Markdown Spec Reference Graph",
370
+ "exported_by": "mr-data",
371
+ "node_count": 12,
372
+ "edge_count": 11,
373
+ "purpose": "Companion graph for UPG-MARKDOWN-v0.1.upg.md — provides resolvable entities for the spec's worked example"
374
+ }
375
+ }
@@ -0,0 +1,61 @@
1
+ ---
2
+ title: "Decision — Ship Smart Search before Q3 Planning"
3
+ upg_product: entopo
4
+ upg_version: "0.4.0"
5
+ entity_type: document
6
+ entity_id: doc_decision_smart_search_q2
7
+ author: Morgan Lee
8
+ created_at: 2026-04-28
9
+ status: published
10
+ composition_pattern: decision_record
11
+ tags: [decision, q2, search]
12
+ ---
13
+
14
+ # Decision: Ship Smart Search before Q3 Planning
15
+
16
+ ## Context
17
+
18
+ [[persona:alex-senior-pm|"Alex"]] surfaced repeatedly that search-by-id was slowing her team down during the v0.2 pilot. The pain pattern showed up in 4 of 5 pilot teams.
19
+
20
+ ## Decision
21
+
22
+ We're shipping [[+feature:smart-search|"Smart Search"]] in the v0.2.10 release window. Status: scoped + scheduled.
23
+
24
+ The rationale chain:
25
+
26
+ - [[need:no-single-source-of-truth]] surfaces during planning (every quarter).
27
+ - {{feature:smart-search → metric:weekly-actives|drives}} — we expect a 12% lift in weekly actives based on pilot interviews.
28
+ - {{decision:ship-smart-search-q2 → feature:smart-search|approves}} — this decision authorises the work.
29
+
30
+ ## Structural properties
31
+
32
+ The decision record has properties that don't fit cleanly inline — stakeholders, alternatives considered, blast radius. We use a fenced block:
33
+
34
+ ```upg
35
+ {
36
+ "declarations": [
37
+ {
38
+ "type": "decision",
39
+ "id": "ship-smart-search-q2",
40
+ "title": "Ship Smart Search before Q3 Planning",
41
+ "properties": {
42
+ "layer": "product",
43
+ "status": "approved",
44
+ "decided_on": "2026-04-28",
45
+ "stakeholders": ["alex-senior-pm", "sarah-vp-product"],
46
+ "alternatives_considered": [
47
+ "defer-to-q3",
48
+ "ship-search-without-ranking"
49
+ ]
50
+ }
51
+ }
52
+ ],
53
+ "edges": [
54
+ { "src": "decision:ship-smart-search-q2", "tgt": "feature:smart-search", "verb": "approves" }
55
+ ]
56
+ }
57
+ ```
58
+
59
+ ## What this unblocks
60
+
61
+ Once Smart Search ships, the v0.3 backlog is cleared to absorb the [[+opportunity:unified-knowledge|score:0.42]] work that the pilot data also surfaced.
@@ -0,0 +1,75 @@
1
+ ---
2
+ title: "Metric Tracking — Planning Time Reduction (Q2)"
3
+ upg_product: entopo
4
+ upg_version: "0.4.0"
5
+ entity_type: document
6
+ entity_id: doc_metric_planning_time_q2
7
+ author: Sam Patel
8
+ created_at: 2026-04-28
9
+ updated_at: 2026-04-28
10
+ status: published
11
+ tags: [metric, q2, validation]
12
+ graph_source: ../enterprise-pilot.upg
13
+ ---
14
+
15
+ # Planning Time Reduction — Q2 Tracking
16
+
17
+ ## Headline
18
+
19
+ [[metric:planning-time|current:22%|target:30%|designation:north_star]] is the metric we set in Q1 and are tracking against the Q2 pilot.
20
+
21
+ We're below target but trending positive. Statistical significance is confirmed (p < 0.05).
22
+
23
+ ## Inputs
24
+
25
+ The metric decomposes into two input metrics:
26
+
27
+ - [[metric:meeting-count-per-sprint|current:4.2|target:3.0|designation:input]] — how many planning meetings each team holds per sprint.
28
+ - [[metric:context-handoff-time|current:18m|target:10m|designation:input]] — time spent re-establishing context at sprint boundaries.
29
+
30
+ Both are moving in the right direction. Meeting count is at 4.2 (down from 6.1 baseline); context handoff is at 18 minutes (down from 27 minutes).
31
+
32
+ ## Cross-product comparison
33
+
34
+ The {{metric:planning-time → benchmark:industry-avg-planning-reduction@analytics|compared_with}} edge surfaces the cross-product reference: our analytics graph carries an industry benchmark we're tracking against.
35
+
36
+ ## Discovery
37
+
38
+ During pilot week 6, the team surfaced a previously unknown input we should add to the model:
39
+
40
+ [[+metric:re-planning-incidents|current:1.4|target:0.5|designation:input|"Times per sprint a team has to redo planning because of context loss"]].
41
+
42
+ This is a creation reference — first occurrence in this document declares the metric. It enters the graph at next sync.
43
+
44
+ ## Quality assessment
45
+
46
+ | Quality dimension | Score | Notes |
47
+ |---|---|---|
48
+ | Correlated with outcome | 4 | Strongly tracks team velocity. |
49
+ | Actionable | 5 | Direct levers in our control. |
50
+ | Sensitive to change | 3 | Moves on monthly cadence. |
51
+ | Comparative | 4 | Has baseline + benchmark. |
52
+
53
+ The structured assessment lives on the paired entity:
54
+
55
+ ```upg
56
+ {
57
+ "declarations": [
58
+ {
59
+ "type": "metric_quality_assessment",
60
+ "id": "planning-time-quality-q2",
61
+ "properties": {
62
+ "quality_correlated": 4,
63
+ "quality_actionable": 5,
64
+ "quality_sensitive": 3,
65
+ "quality_comparative": 4,
66
+ "quality_score": 4.0,
67
+ "assessed_on": "2026-04-28"
68
+ }
69
+ }
70
+ ],
71
+ "edges": [
72
+ { "src": "metric:planning-time", "tgt": "metric_quality_assessment:planning-time-quality-q2", "verb": "assessed_by" }
73
+ ]
74
+ }
75
+ ```
@@ -0,0 +1,22 @@
1
+ ---
2
+ title: "Alex (Senior PM) — Persona Profile"
3
+ upg_product: entopo
4
+ upg_version: "0.4.0"
5
+ entity_type: document
6
+ entity_id: doc_persona_alex
7
+ author: Alice Chen
8
+ created_at: 2026-04-28
9
+ status: published
10
+ ---
11
+
12
+ # Alex (Senior PM)
13
+
14
+ [[+persona:alex-senior-pm|"Alex"]] is a senior product manager at a 200-person SaaS company. She leads a 12-person team and is the primary buyer for tools that improve product alignment.
15
+
16
+ ## What she pursues
17
+
18
+ {{persona:alex-senior-pm → job:keep-team-aligned|pursues}} as her core job-to-be-done. Alignment, in her language, means *every engineer knows why they're building what they're building*.
19
+
20
+ ## What gets in her way
21
+
22
+ The biggest blocker is [[need:no-single-source-of-truth|valence:pain|severity:Significant]] — context lives in seven tools and nobody owns reconciling them.