@unified-product-graph/mcp-server 0.8.5 → 0.8.7
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 +4 -0
- package/TOOLS.md +6 -4
- package/dist/index.js +478 -25
- package/dist/index.js.map +1 -1
- package/dist/tools-manifest.json +44 -41
- package/package.json +2 -1
- package/skills/upg-prioritise/SKILL.md +23 -8
package/dist/index.js
CHANGED
|
@@ -7923,7 +7923,6 @@ function migrateStatusValue(entityType, currentStatus) {
|
|
|
7923
7923
|
if (!typeMap) return null;
|
|
7924
7924
|
return typeMap[currentStatus] ?? null;
|
|
7925
7925
|
}
|
|
7926
|
-
var crossProductEdgeTypeSet = new Set(UPG_CROSS_EDGE_TYPES);
|
|
7927
7926
|
var UPG_PROPERTY_SCHEMA = {
|
|
7928
7927
|
// A11yAnnotationProperties: Accessibility annotation.
|
|
7929
7928
|
a11y_annotation: {
|
|
@@ -11080,6 +11079,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11080
11079
|
function getPropertySchema(entityType) {
|
|
11081
11080
|
return UPG_PROPERTY_SCHEMA[entityType];
|
|
11082
11081
|
}
|
|
11082
|
+
var crossProductEdgeTypeSet = new Set(UPG_CROSS_EDGE_TYPES);
|
|
11083
11083
|
var UPG_FRAMEWORKS = [
|
|
11084
11084
|
{
|
|
11085
11085
|
"id": "opportunity-solution-tree",
|
|
@@ -12315,7 +12315,7 @@ var UPG_FRAMEWORKS = [
|
|
|
12315
12315
|
],
|
|
12316
12316
|
"name": "RICE Scoring",
|
|
12317
12317
|
"version": "1.0.0",
|
|
12318
|
-
"description": "Score features and
|
|
12318
|
+
"description": "Score features, opportunities, and needs by Reach, Impact, Confidence, and Effort to produce a ranked priority list.",
|
|
12319
12319
|
"category": "prioritization",
|
|
12320
12320
|
"origin": {
|
|
12321
12321
|
"type": "practitioner",
|
|
@@ -12333,7 +12333,17 @@ var UPG_FRAMEWORKS = [
|
|
|
12333
12333
|
{
|
|
12334
12334
|
"label": "Items to score",
|
|
12335
12335
|
"entityTypeId": "feature",
|
|
12336
|
-
"description": "Features, opportunities, or
|
|
12336
|
+
"description": "Features, opportunities, or needs being evaluated"
|
|
12337
|
+
},
|
|
12338
|
+
{
|
|
12339
|
+
"label": "Opportunities to score",
|
|
12340
|
+
"entityTypeId": "opportunity",
|
|
12341
|
+
"description": "Opportunities scored on the same RICE Scoring inputs as features."
|
|
12342
|
+
},
|
|
12343
|
+
{
|
|
12344
|
+
"label": "Needs to score",
|
|
12345
|
+
"entityTypeId": "need",
|
|
12346
|
+
"description": "Needs scored on the same RICE Scoring inputs as features."
|
|
12337
12347
|
}
|
|
12338
12348
|
],
|
|
12339
12349
|
"data": {
|
|
@@ -12341,6 +12351,14 @@ var UPG_FRAMEWORKS = [
|
|
|
12341
12351
|
{
|
|
12342
12352
|
"type": "feature",
|
|
12343
12353
|
"role": "scored_item"
|
|
12354
|
+
},
|
|
12355
|
+
{
|
|
12356
|
+
"type": "opportunity",
|
|
12357
|
+
"role": "scored_item"
|
|
12358
|
+
},
|
|
12359
|
+
{
|
|
12360
|
+
"type": "need",
|
|
12361
|
+
"role": "scored_item"
|
|
12344
12362
|
}
|
|
12345
12363
|
],
|
|
12346
12364
|
"required_properties": {
|
|
@@ -12381,6 +12399,82 @@ var UPG_FRAMEWORKS = [
|
|
|
12381
12399
|
"label": "Effort",
|
|
12382
12400
|
"description": "How much work is required to build and ship this, on the effort scale?"
|
|
12383
12401
|
}
|
|
12402
|
+
],
|
|
12403
|
+
"opportunity": [
|
|
12404
|
+
{
|
|
12405
|
+
"property": "reach",
|
|
12406
|
+
"type": "assessment",
|
|
12407
|
+
"scale_id": "reach_5",
|
|
12408
|
+
"required": true,
|
|
12409
|
+
"scope": "framework",
|
|
12410
|
+
"label": "Reach",
|
|
12411
|
+
"description": "How many users will this impact per quarter?"
|
|
12412
|
+
},
|
|
12413
|
+
{
|
|
12414
|
+
"property": "impact",
|
|
12415
|
+
"type": "assessment",
|
|
12416
|
+
"scale_id": "impact_5",
|
|
12417
|
+
"required": true,
|
|
12418
|
+
"scope": "framework",
|
|
12419
|
+
"label": "Impact",
|
|
12420
|
+
"description": "How much will this impact each user, on the impact scale?"
|
|
12421
|
+
},
|
|
12422
|
+
{
|
|
12423
|
+
"property": "confidence",
|
|
12424
|
+
"type": "assessment",
|
|
12425
|
+
"scale_id": "confidence_5",
|
|
12426
|
+
"required": true,
|
|
12427
|
+
"scope": "framework",
|
|
12428
|
+
"label": "Confidence",
|
|
12429
|
+
"description": "How confident are you in the reach, impact, and effort estimates?"
|
|
12430
|
+
},
|
|
12431
|
+
{
|
|
12432
|
+
"property": "effort",
|
|
12433
|
+
"type": "assessment",
|
|
12434
|
+
"scale_id": "effort_5",
|
|
12435
|
+
"required": true,
|
|
12436
|
+
"scope": "framework",
|
|
12437
|
+
"label": "Effort",
|
|
12438
|
+
"description": "How much work is required to build and ship this, on the effort scale?"
|
|
12439
|
+
}
|
|
12440
|
+
],
|
|
12441
|
+
"need": [
|
|
12442
|
+
{
|
|
12443
|
+
"property": "reach",
|
|
12444
|
+
"type": "assessment",
|
|
12445
|
+
"scale_id": "reach_5",
|
|
12446
|
+
"required": true,
|
|
12447
|
+
"scope": "framework",
|
|
12448
|
+
"label": "Reach",
|
|
12449
|
+
"description": "How many users will this impact per quarter?"
|
|
12450
|
+
},
|
|
12451
|
+
{
|
|
12452
|
+
"property": "impact",
|
|
12453
|
+
"type": "assessment",
|
|
12454
|
+
"scale_id": "impact_5",
|
|
12455
|
+
"required": true,
|
|
12456
|
+
"scope": "framework",
|
|
12457
|
+
"label": "Impact",
|
|
12458
|
+
"description": "How much will this impact each user, on the impact scale?"
|
|
12459
|
+
},
|
|
12460
|
+
{
|
|
12461
|
+
"property": "confidence",
|
|
12462
|
+
"type": "assessment",
|
|
12463
|
+
"scale_id": "confidence_5",
|
|
12464
|
+
"required": true,
|
|
12465
|
+
"scope": "framework",
|
|
12466
|
+
"label": "Confidence",
|
|
12467
|
+
"description": "How confident are you in the reach, impact, and effort estimates?"
|
|
12468
|
+
},
|
|
12469
|
+
{
|
|
12470
|
+
"property": "effort",
|
|
12471
|
+
"type": "assessment",
|
|
12472
|
+
"scale_id": "effort_5",
|
|
12473
|
+
"required": true,
|
|
12474
|
+
"scope": "framework",
|
|
12475
|
+
"label": "Effort",
|
|
12476
|
+
"description": "How much work is required to build and ship this, on the effort scale?"
|
|
12477
|
+
}
|
|
12384
12478
|
]
|
|
12385
12479
|
},
|
|
12386
12480
|
"computed_properties": [
|
|
@@ -12390,8 +12484,75 @@ var UPG_FRAMEWORKS = [
|
|
|
12390
12484
|
"entity_type": "feature",
|
|
12391
12485
|
"label": "RICE Score",
|
|
12392
12486
|
"format": "number"
|
|
12487
|
+
},
|
|
12488
|
+
{
|
|
12489
|
+
"property": "rice_score",
|
|
12490
|
+
"expression": "(reach * impact * confidence) / effort",
|
|
12491
|
+
"entity_type": "opportunity",
|
|
12492
|
+
"label": "RICE Score",
|
|
12493
|
+
"format": "number"
|
|
12494
|
+
},
|
|
12495
|
+
{
|
|
12496
|
+
"property": "rice_score",
|
|
12497
|
+
"expression": "(reach * impact * confidence) / effort",
|
|
12498
|
+
"entity_type": "need",
|
|
12499
|
+
"label": "RICE Score",
|
|
12500
|
+
"format": "number"
|
|
12393
12501
|
}
|
|
12394
|
-
]
|
|
12502
|
+
],
|
|
12503
|
+
"scoring_lens": {
|
|
12504
|
+
"applies_to": [
|
|
12505
|
+
"feature",
|
|
12506
|
+
"opportunity",
|
|
12507
|
+
"need"
|
|
12508
|
+
],
|
|
12509
|
+
"inputs": [
|
|
12510
|
+
{
|
|
12511
|
+
"property": "reach",
|
|
12512
|
+
"type": "assessment",
|
|
12513
|
+
"scale_id": "reach_5",
|
|
12514
|
+
"required": true,
|
|
12515
|
+
"scope": "framework",
|
|
12516
|
+
"label": "Reach",
|
|
12517
|
+
"description": "How many users will this impact per quarter?"
|
|
12518
|
+
},
|
|
12519
|
+
{
|
|
12520
|
+
"property": "impact",
|
|
12521
|
+
"type": "assessment",
|
|
12522
|
+
"scale_id": "impact_5",
|
|
12523
|
+
"required": true,
|
|
12524
|
+
"scope": "framework",
|
|
12525
|
+
"label": "Impact",
|
|
12526
|
+
"description": "How much will this impact each user, on the impact scale?"
|
|
12527
|
+
},
|
|
12528
|
+
{
|
|
12529
|
+
"property": "confidence",
|
|
12530
|
+
"type": "assessment",
|
|
12531
|
+
"scale_id": "confidence_5",
|
|
12532
|
+
"required": true,
|
|
12533
|
+
"scope": "framework",
|
|
12534
|
+
"label": "Confidence",
|
|
12535
|
+
"description": "How confident are you in the reach, impact, and effort estimates?"
|
|
12536
|
+
},
|
|
12537
|
+
{
|
|
12538
|
+
"property": "effort",
|
|
12539
|
+
"type": "assessment",
|
|
12540
|
+
"scale_id": "effort_5",
|
|
12541
|
+
"required": true,
|
|
12542
|
+
"scope": "framework",
|
|
12543
|
+
"label": "Effort",
|
|
12544
|
+
"description": "How much work is required to build and ship this, on the effort scale?"
|
|
12545
|
+
}
|
|
12546
|
+
],
|
|
12547
|
+
"computed": [
|
|
12548
|
+
{
|
|
12549
|
+
"property": "rice_score",
|
|
12550
|
+
"expression": "(reach * impact * confidence) / effort",
|
|
12551
|
+
"label": "RICE Score",
|
|
12552
|
+
"format": "number"
|
|
12553
|
+
}
|
|
12554
|
+
]
|
|
12555
|
+
}
|
|
12395
12556
|
},
|
|
12396
12557
|
"structure": {
|
|
12397
12558
|
"pattern": "table"
|
|
@@ -14516,7 +14677,7 @@ var UPG_FRAMEWORKS = [
|
|
|
14516
14677
|
"entity_types": [
|
|
14517
14678
|
{
|
|
14518
14679
|
"type": "team",
|
|
14519
|
-
"role": "
|
|
14680
|
+
"role": "item"
|
|
14520
14681
|
},
|
|
14521
14682
|
{
|
|
14522
14683
|
"type": "retrospective",
|
|
@@ -14773,6 +14934,16 @@ var UPG_FRAMEWORKS = [
|
|
|
14773
14934
|
"label": "Ease",
|
|
14774
14935
|
"entityTypeId": "feature",
|
|
14775
14936
|
"description": "How easy is this to implement?"
|
|
14937
|
+
},
|
|
14938
|
+
{
|
|
14939
|
+
"label": "Opportunities to score",
|
|
14940
|
+
"entityTypeId": "opportunity",
|
|
14941
|
+
"description": "Opportunities scored on the same ICE Scoring inputs as features."
|
|
14942
|
+
},
|
|
14943
|
+
{
|
|
14944
|
+
"label": "Needs to score",
|
|
14945
|
+
"entityTypeId": "need",
|
|
14946
|
+
"description": "Needs scored on the same ICE Scoring inputs as features."
|
|
14776
14947
|
}
|
|
14777
14948
|
],
|
|
14778
14949
|
"data": {
|
|
@@ -14788,6 +14959,14 @@ var UPG_FRAMEWORKS = [
|
|
|
14788
14959
|
{
|
|
14789
14960
|
"type": "assumption",
|
|
14790
14961
|
"role": "item"
|
|
14962
|
+
},
|
|
14963
|
+
{
|
|
14964
|
+
"type": "opportunity",
|
|
14965
|
+
"role": "scored_item"
|
|
14966
|
+
},
|
|
14967
|
+
{
|
|
14968
|
+
"type": "need",
|
|
14969
|
+
"role": "scored_item"
|
|
14791
14970
|
}
|
|
14792
14971
|
],
|
|
14793
14972
|
"required_properties": {
|
|
@@ -14816,6 +14995,58 @@ var UPG_FRAMEWORKS = [
|
|
|
14816
14995
|
"label": "Ease",
|
|
14817
14996
|
"description": "Ease of implementation (1-10)"
|
|
14818
14997
|
}
|
|
14998
|
+
],
|
|
14999
|
+
"opportunity": [
|
|
15000
|
+
{
|
|
15001
|
+
"property": "impact",
|
|
15002
|
+
"type": "number",
|
|
15003
|
+
"required": true,
|
|
15004
|
+
"scope": "framework",
|
|
15005
|
+
"label": "Impact",
|
|
15006
|
+
"description": "Expected impact on the target metric (1-10)"
|
|
15007
|
+
},
|
|
15008
|
+
{
|
|
15009
|
+
"property": "confidence",
|
|
15010
|
+
"type": "number",
|
|
15011
|
+
"required": true,
|
|
15012
|
+
"scope": "framework",
|
|
15013
|
+
"label": "Confidence",
|
|
15014
|
+
"description": "Confidence in the impact estimate (1-10)"
|
|
15015
|
+
},
|
|
15016
|
+
{
|
|
15017
|
+
"property": "ease",
|
|
15018
|
+
"type": "number",
|
|
15019
|
+
"required": true,
|
|
15020
|
+
"scope": "framework",
|
|
15021
|
+
"label": "Ease",
|
|
15022
|
+
"description": "Ease of implementation (1-10)"
|
|
15023
|
+
}
|
|
15024
|
+
],
|
|
15025
|
+
"need": [
|
|
15026
|
+
{
|
|
15027
|
+
"property": "impact",
|
|
15028
|
+
"type": "number",
|
|
15029
|
+
"required": true,
|
|
15030
|
+
"scope": "framework",
|
|
15031
|
+
"label": "Impact",
|
|
15032
|
+
"description": "Expected impact on the target metric (1-10)"
|
|
15033
|
+
},
|
|
15034
|
+
{
|
|
15035
|
+
"property": "confidence",
|
|
15036
|
+
"type": "number",
|
|
15037
|
+
"required": true,
|
|
15038
|
+
"scope": "framework",
|
|
15039
|
+
"label": "Confidence",
|
|
15040
|
+
"description": "Confidence in the impact estimate (1-10)"
|
|
15041
|
+
},
|
|
15042
|
+
{
|
|
15043
|
+
"property": "ease",
|
|
15044
|
+
"type": "number",
|
|
15045
|
+
"required": true,
|
|
15046
|
+
"scope": "framework",
|
|
15047
|
+
"label": "Ease",
|
|
15048
|
+
"description": "Ease of implementation (1-10)"
|
|
15049
|
+
}
|
|
14819
15050
|
]
|
|
14820
15051
|
},
|
|
14821
15052
|
"computed_properties": [
|
|
@@ -14825,8 +15056,63 @@ var UPG_FRAMEWORKS = [
|
|
|
14825
15056
|
"entity_type": "feature",
|
|
14826
15057
|
"label": "ICE Score",
|
|
14827
15058
|
"format": "number"
|
|
15059
|
+
},
|
|
15060
|
+
{
|
|
15061
|
+
"property": "ice_score",
|
|
15062
|
+
"expression": "impact * confidence * ease",
|
|
15063
|
+
"entity_type": "opportunity",
|
|
15064
|
+
"label": "ICE Score",
|
|
15065
|
+
"format": "number"
|
|
15066
|
+
},
|
|
15067
|
+
{
|
|
15068
|
+
"property": "ice_score",
|
|
15069
|
+
"expression": "impact * confidence * ease",
|
|
15070
|
+
"entity_type": "need",
|
|
15071
|
+
"label": "ICE Score",
|
|
15072
|
+
"format": "number"
|
|
14828
15073
|
}
|
|
14829
|
-
]
|
|
15074
|
+
],
|
|
15075
|
+
"scoring_lens": {
|
|
15076
|
+
"applies_to": [
|
|
15077
|
+
"feature",
|
|
15078
|
+
"opportunity",
|
|
15079
|
+
"need"
|
|
15080
|
+
],
|
|
15081
|
+
"inputs": [
|
|
15082
|
+
{
|
|
15083
|
+
"property": "impact",
|
|
15084
|
+
"type": "number",
|
|
15085
|
+
"required": true,
|
|
15086
|
+
"scope": "framework",
|
|
15087
|
+
"label": "Impact",
|
|
15088
|
+
"description": "Expected impact on the target metric (1-10)"
|
|
15089
|
+
},
|
|
15090
|
+
{
|
|
15091
|
+
"property": "confidence",
|
|
15092
|
+
"type": "number",
|
|
15093
|
+
"required": true,
|
|
15094
|
+
"scope": "framework",
|
|
15095
|
+
"label": "Confidence",
|
|
15096
|
+
"description": "Confidence in the impact estimate (1-10)"
|
|
15097
|
+
},
|
|
15098
|
+
{
|
|
15099
|
+
"property": "ease",
|
|
15100
|
+
"type": "number",
|
|
15101
|
+
"required": true,
|
|
15102
|
+
"scope": "framework",
|
|
15103
|
+
"label": "Ease",
|
|
15104
|
+
"description": "Ease of implementation (1-10)"
|
|
15105
|
+
}
|
|
15106
|
+
],
|
|
15107
|
+
"computed": [
|
|
15108
|
+
{
|
|
15109
|
+
"property": "ice_score",
|
|
15110
|
+
"expression": "impact * confidence * ease",
|
|
15111
|
+
"label": "ICE Score",
|
|
15112
|
+
"format": "number"
|
|
15113
|
+
}
|
|
15114
|
+
]
|
|
15115
|
+
}
|
|
14830
15116
|
},
|
|
14831
15117
|
"structure": {
|
|
14832
15118
|
"pattern": "table"
|
|
@@ -14928,6 +15214,11 @@ var UPG_FRAMEWORKS = [
|
|
|
14928
15214
|
"label": "Job Size",
|
|
14929
15215
|
"entityTypeId": "metric",
|
|
14930
15216
|
"description": "Estimated effort (story points, t-shirt size, or person-weeks)"
|
|
15217
|
+
},
|
|
15218
|
+
{
|
|
15219
|
+
"label": "Opportunities to score",
|
|
15220
|
+
"entityTypeId": "opportunity",
|
|
15221
|
+
"description": "Opportunities scored on the same WSJF (Weighted Shortest Job First) inputs as features."
|
|
14931
15222
|
}
|
|
14932
15223
|
],
|
|
14933
15224
|
"data": {
|
|
@@ -14939,6 +15230,10 @@ var UPG_FRAMEWORKS = [
|
|
|
14939
15230
|
{
|
|
14940
15231
|
"type": "metric",
|
|
14941
15232
|
"role": "item"
|
|
15233
|
+
},
|
|
15234
|
+
{
|
|
15235
|
+
"type": "opportunity",
|
|
15236
|
+
"role": "scored_item"
|
|
14942
15237
|
}
|
|
14943
15238
|
],
|
|
14944
15239
|
"required_properties": {
|
|
@@ -14975,6 +15270,40 @@ var UPG_FRAMEWORKS = [
|
|
|
14975
15270
|
"label": "Job Size",
|
|
14976
15271
|
"description": "Estimated effort (story points, t-shirt size, or person-weeks)"
|
|
14977
15272
|
}
|
|
15273
|
+
],
|
|
15274
|
+
"opportunity": [
|
|
15275
|
+
{
|
|
15276
|
+
"property": "user_value",
|
|
15277
|
+
"type": "number",
|
|
15278
|
+
"required": true,
|
|
15279
|
+
"scope": "framework",
|
|
15280
|
+
"label": "User/Business Value",
|
|
15281
|
+
"description": "Relative value to users and the business if delivered"
|
|
15282
|
+
},
|
|
15283
|
+
{
|
|
15284
|
+
"property": "time_criticality",
|
|
15285
|
+
"type": "number",
|
|
15286
|
+
"required": true,
|
|
15287
|
+
"scope": "framework",
|
|
15288
|
+
"label": "Time Criticality",
|
|
15289
|
+
"description": "How much value decays if delivery is delayed (deadlines, competition, seasonal windows)"
|
|
15290
|
+
},
|
|
15291
|
+
{
|
|
15292
|
+
"property": "risk_reduction",
|
|
15293
|
+
"type": "number",
|
|
15294
|
+
"required": true,
|
|
15295
|
+
"scope": "framework",
|
|
15296
|
+
"label": "Risk Reduction / Opportunity Enablement",
|
|
15297
|
+
"description": "Value from reducing risk or enabling future opportunities"
|
|
15298
|
+
},
|
|
15299
|
+
{
|
|
15300
|
+
"property": "job_size",
|
|
15301
|
+
"type": "number",
|
|
15302
|
+
"required": true,
|
|
15303
|
+
"scope": "framework",
|
|
15304
|
+
"label": "Job Size",
|
|
15305
|
+
"description": "Estimated effort (story points, t-shirt size, or person-weeks)"
|
|
15306
|
+
}
|
|
14978
15307
|
]
|
|
14979
15308
|
},
|
|
14980
15309
|
"computed_properties": [
|
|
@@ -14984,8 +15313,63 @@ var UPG_FRAMEWORKS = [
|
|
|
14984
15313
|
"entity_type": "feature",
|
|
14985
15314
|
"label": "WSJF Score",
|
|
14986
15315
|
"format": "number"
|
|
15316
|
+
},
|
|
15317
|
+
{
|
|
15318
|
+
"property": "wsjf_score",
|
|
15319
|
+
"expression": "(user_value + time_criticality + risk_reduction) / job_size",
|
|
15320
|
+
"entity_type": "opportunity",
|
|
15321
|
+
"label": "WSJF Score",
|
|
15322
|
+
"format": "number"
|
|
14987
15323
|
}
|
|
14988
|
-
]
|
|
15324
|
+
],
|
|
15325
|
+
"scoring_lens": {
|
|
15326
|
+
"applies_to": [
|
|
15327
|
+
"feature",
|
|
15328
|
+
"opportunity"
|
|
15329
|
+
],
|
|
15330
|
+
"inputs": [
|
|
15331
|
+
{
|
|
15332
|
+
"property": "user_value",
|
|
15333
|
+
"type": "number",
|
|
15334
|
+
"required": true,
|
|
15335
|
+
"scope": "framework",
|
|
15336
|
+
"label": "User/Business Value",
|
|
15337
|
+
"description": "Relative value to users and the business if delivered"
|
|
15338
|
+
},
|
|
15339
|
+
{
|
|
15340
|
+
"property": "time_criticality",
|
|
15341
|
+
"type": "number",
|
|
15342
|
+
"required": true,
|
|
15343
|
+
"scope": "framework",
|
|
15344
|
+
"label": "Time Criticality",
|
|
15345
|
+
"description": "How much value decays if delivery is delayed (deadlines, competition, seasonal windows)"
|
|
15346
|
+
},
|
|
15347
|
+
{
|
|
15348
|
+
"property": "risk_reduction",
|
|
15349
|
+
"type": "number",
|
|
15350
|
+
"required": true,
|
|
15351
|
+
"scope": "framework",
|
|
15352
|
+
"label": "Risk Reduction / Opportunity Enablement",
|
|
15353
|
+
"description": "Value from reducing risk or enabling future opportunities"
|
|
15354
|
+
},
|
|
15355
|
+
{
|
|
15356
|
+
"property": "job_size",
|
|
15357
|
+
"type": "number",
|
|
15358
|
+
"required": true,
|
|
15359
|
+
"scope": "framework",
|
|
15360
|
+
"label": "Job Size",
|
|
15361
|
+
"description": "Estimated effort (story points, t-shirt size, or person-weeks)"
|
|
15362
|
+
}
|
|
15363
|
+
],
|
|
15364
|
+
"computed": [
|
|
15365
|
+
{
|
|
15366
|
+
"property": "wsjf_score",
|
|
15367
|
+
"expression": "(user_value + time_criticality + risk_reduction) / job_size",
|
|
15368
|
+
"label": "WSJF Score",
|
|
15369
|
+
"format": "number"
|
|
15370
|
+
}
|
|
15371
|
+
]
|
|
15372
|
+
}
|
|
14989
15373
|
},
|
|
14990
15374
|
"structure": {
|
|
14991
15375
|
"pattern": "table"
|
|
@@ -15058,7 +15442,7 @@ var UPG_FRAMEWORKS = [
|
|
|
15058
15442
|
],
|
|
15059
15443
|
"name": "Cost of Delay",
|
|
15060
15444
|
"version": "1.0.0",
|
|
15061
|
-
"description": "Quantify the economic cost of not shipping a feature to drive priority decisions. Combines urgency with value.",
|
|
15445
|
+
"description": "Quantify the economic cost of not shipping a feature or opportunity to drive priority decisions. Combines urgency with value.",
|
|
15062
15446
|
"category": "prioritization",
|
|
15063
15447
|
"origin": {
|
|
15064
15448
|
"type": "practitioner",
|
|
@@ -15091,6 +15475,11 @@ var UPG_FRAMEWORKS = [
|
|
|
15091
15475
|
"label": "Risk Reduction",
|
|
15092
15476
|
"entityTypeId": "risk",
|
|
15093
15477
|
"description": "What risk does this mitigate?"
|
|
15478
|
+
},
|
|
15479
|
+
{
|
|
15480
|
+
"label": "Opportunities to score",
|
|
15481
|
+
"entityTypeId": "opportunity",
|
|
15482
|
+
"description": "Opportunities scored on the same Cost of Delay inputs as features."
|
|
15094
15483
|
}
|
|
15095
15484
|
],
|
|
15096
15485
|
"data": {
|
|
@@ -15110,6 +15499,10 @@ var UPG_FRAMEWORKS = [
|
|
|
15110
15499
|
{
|
|
15111
15500
|
"type": "risk",
|
|
15112
15501
|
"role": "item"
|
|
15502
|
+
},
|
|
15503
|
+
{
|
|
15504
|
+
"type": "opportunity",
|
|
15505
|
+
"role": "scored_item"
|
|
15113
15506
|
}
|
|
15114
15507
|
],
|
|
15115
15508
|
"required_properties": {
|
|
@@ -15130,6 +15523,24 @@ var UPG_FRAMEWORKS = [
|
|
|
15130
15523
|
"label": "Job Size",
|
|
15131
15524
|
"description": "Weeks of development effort"
|
|
15132
15525
|
}
|
|
15526
|
+
],
|
|
15527
|
+
"opportunity": [
|
|
15528
|
+
{
|
|
15529
|
+
"property": "cost_of_delay",
|
|
15530
|
+
"type": "number",
|
|
15531
|
+
"required": true,
|
|
15532
|
+
"scope": "framework",
|
|
15533
|
+
"label": "Cost of Delay",
|
|
15534
|
+
"description": "Weekly revenue impact of not shipping"
|
|
15535
|
+
},
|
|
15536
|
+
{
|
|
15537
|
+
"property": "job_size",
|
|
15538
|
+
"type": "number",
|
|
15539
|
+
"required": true,
|
|
15540
|
+
"scope": "framework",
|
|
15541
|
+
"label": "Job Size",
|
|
15542
|
+
"description": "Weeks of development effort"
|
|
15543
|
+
}
|
|
15133
15544
|
]
|
|
15134
15545
|
},
|
|
15135
15546
|
"computed_properties": [
|
|
@@ -15139,8 +15550,47 @@ var UPG_FRAMEWORKS = [
|
|
|
15139
15550
|
"entity_type": "feature",
|
|
15140
15551
|
"label": "WSJF Score",
|
|
15141
15552
|
"format": "number"
|
|
15553
|
+
},
|
|
15554
|
+
{
|
|
15555
|
+
"property": "wsjf_score",
|
|
15556
|
+
"expression": "cost_of_delay / job_size",
|
|
15557
|
+
"entity_type": "opportunity",
|
|
15558
|
+
"label": "WSJF Score",
|
|
15559
|
+
"format": "number"
|
|
15142
15560
|
}
|
|
15143
|
-
]
|
|
15561
|
+
],
|
|
15562
|
+
"scoring_lens": {
|
|
15563
|
+
"applies_to": [
|
|
15564
|
+
"feature",
|
|
15565
|
+
"opportunity"
|
|
15566
|
+
],
|
|
15567
|
+
"inputs": [
|
|
15568
|
+
{
|
|
15569
|
+
"property": "cost_of_delay",
|
|
15570
|
+
"type": "number",
|
|
15571
|
+
"required": true,
|
|
15572
|
+
"scope": "framework",
|
|
15573
|
+
"label": "Cost of Delay",
|
|
15574
|
+
"description": "Weekly revenue impact of not shipping"
|
|
15575
|
+
},
|
|
15576
|
+
{
|
|
15577
|
+
"property": "job_size",
|
|
15578
|
+
"type": "number",
|
|
15579
|
+
"required": true,
|
|
15580
|
+
"scope": "framework",
|
|
15581
|
+
"label": "Job Size",
|
|
15582
|
+
"description": "Weeks of development effort"
|
|
15583
|
+
}
|
|
15584
|
+
],
|
|
15585
|
+
"computed": [
|
|
15586
|
+
{
|
|
15587
|
+
"property": "wsjf_score",
|
|
15588
|
+
"expression": "cost_of_delay / job_size",
|
|
15589
|
+
"label": "WSJF Score",
|
|
15590
|
+
"format": "number"
|
|
15591
|
+
}
|
|
15592
|
+
]
|
|
15593
|
+
}
|
|
15144
15594
|
},
|
|
15145
15595
|
"structure": {
|
|
15146
15596
|
"pattern": "table"
|
|
@@ -23728,7 +24178,7 @@ function serializePortfolioWithHeader(doc, opts) {
|
|
|
23728
24178
|
header.integrity = { algorithm: INTEGRITY_ALGORITHM, body: computeBodyChecksum(doc) };
|
|
23729
24179
|
return JSON.stringify({ $upg: header, ...body }, null, 2) + "\n";
|
|
23730
24180
|
}
|
|
23731
|
-
var UPG_VERSION = "0.8.
|
|
24181
|
+
var UPG_VERSION = "0.8.7";
|
|
23732
24182
|
var MARKDOWN_FORMAT_VERSION = "0.1";
|
|
23733
24183
|
var UPG_TYPES = getTypes();
|
|
23734
24184
|
var UPG_TYPES_SET = new Set(UPG_TYPES);
|
|
@@ -26237,6 +26687,7 @@ var getEntitySchema = (args, _ctx) => {
|
|
|
26237
26687
|
// src/tools/frameworks.ts
|
|
26238
26688
|
import {
|
|
26239
26689
|
applyFramework as applyFrameworkLib,
|
|
26690
|
+
applyFrameworkEnvelope,
|
|
26240
26691
|
scoreEntity as scoreEntityLib
|
|
26241
26692
|
} from "@unified-product-graph/sdk";
|
|
26242
26693
|
var applyFramework = (args, ctx) => {
|
|
@@ -26252,18 +26703,7 @@ var applyFramework = (args, ctx) => {
|
|
|
26252
26703
|
entity_ids: args.entity_ids ?? [],
|
|
26253
26704
|
status: args.status
|
|
26254
26705
|
});
|
|
26255
|
-
return text(
|
|
26256
|
-
JSON.stringify(
|
|
26257
|
-
{
|
|
26258
|
-
exercise_id: result.exercise.id,
|
|
26259
|
-
exercise: result.exercise,
|
|
26260
|
-
included: result.edges.map((e) => ({ edge_id: e.id, entity_id: e.target })),
|
|
26261
|
-
warnings: result.warnings
|
|
26262
|
-
},
|
|
26263
|
-
null,
|
|
26264
|
-
2
|
|
26265
|
-
)
|
|
26266
|
-
);
|
|
26706
|
+
return text(JSON.stringify(applyFrameworkEnvelope(result), null, 2));
|
|
26267
26707
|
} catch (err) {
|
|
26268
26708
|
return textError(err.message);
|
|
26269
26709
|
}
|
|
@@ -27010,10 +27450,19 @@ var listFrameworks = (args) => {
|
|
|
27010
27450
|
const slice = pool.slice(cursorOffset, cursorOffset + limit);
|
|
27011
27451
|
const nextOffset = cursorOffset + slice.length;
|
|
27012
27452
|
const nextCursor = nextOffset < total ? encodeCursor(nextOffset) : void 0;
|
|
27453
|
+
const frameworks = slice.map((f) => ({
|
|
27454
|
+
id: f.id,
|
|
27455
|
+
name: f.name,
|
|
27456
|
+
category: f.category,
|
|
27457
|
+
description: f.description,
|
|
27458
|
+
tags: f.tags,
|
|
27459
|
+
approach_ids: f.approach_ids,
|
|
27460
|
+
structure_pattern: f.structure?.pattern
|
|
27461
|
+
}));
|
|
27013
27462
|
const body = {
|
|
27014
27463
|
total,
|
|
27015
27464
|
count: slice.length,
|
|
27016
|
-
frameworks
|
|
27465
|
+
frameworks
|
|
27017
27466
|
};
|
|
27018
27467
|
if (nextCursor) body.next_cursor = nextCursor;
|
|
27019
27468
|
return text(JSON.stringify(body, null, 2));
|
|
@@ -27022,7 +27471,10 @@ var getFramework = (args) => {
|
|
|
27022
27471
|
const id = args.id;
|
|
27023
27472
|
if (!id) return textError("Missing required parameter: id");
|
|
27024
27473
|
const framework = UPG_FRAMEWORKS_BY_ID[id];
|
|
27025
|
-
if (!framework)
|
|
27474
|
+
if (!framework)
|
|
27475
|
+
return textError(
|
|
27476
|
+
`Unknown framework id: "${id}". Pass a framework id from the catalog (e.g. 'moscow', 'rice-scoring', 'kano-model'). See list_frameworks for the full list.`
|
|
27477
|
+
);
|
|
27026
27478
|
return text(JSON.stringify(framework, null, 2));
|
|
27027
27479
|
};
|
|
27028
27480
|
function buildEdgeEntries(filterSource, filterTarget) {
|
|
@@ -28713,7 +29165,7 @@ var TOOL_DEFINITIONS = [
|
|
|
28713
29165
|
},
|
|
28714
29166
|
{
|
|
28715
29167
|
name: "list_frameworks",
|
|
28716
|
-
description: "List the canonical `UPGFramework` definitions
|
|
29168
|
+
description: "List the canonical `UPGFramework` definitions: the curated, famous product frameworks that anchor the public catalog (spanning strategy, discovery, prioritisation, design, growth, engineering, and reflection classics). Returns a lightweight summary per framework (id, name, category, description, tags, approach_ids, structure_pattern); call `get_framework(id)` for the full record. Paginated (default 50, max 200). Cursor is opaque: pass `next_cursor` from a previous response. Optional `category` is exact-match against `UPGFramework.category` and applies before pagination.",
|
|
28717
29169
|
inputSchema: {
|
|
28718
29170
|
type: "object",
|
|
28719
29171
|
properties: {
|
|
@@ -29642,6 +30094,7 @@ async function runMcpServer() {
|
|
|
29642
30094
|
}
|
|
29643
30095
|
}
|
|
29644
30096
|
const store = new UPGFileStore();
|
|
30097
|
+
store.setWriter("upg-mcp-local", SERVER_VERSION);
|
|
29645
30098
|
await store.load(resolvedPath);
|
|
29646
30099
|
const deprecated = getDeprecatedTypes();
|
|
29647
30100
|
const nodes = store.getAllNodes();
|