@unified-product-graph/core 0.12.8 → 0.13.1
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/dist/index.cjs +63 -49
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +31 -10
- package/dist/index.d.ts +31 -10
- package/dist/index.js +63 -49
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -1690,6 +1690,25 @@ var UPG_EDGE_CATALOG = {
|
|
|
1690
1690
|
// the common case where the product lives in another graph; this catalog entry is
|
|
1691
1691
|
// the within-graph degenerate case (a product's own landing page).
|
|
1692
1692
|
screen_markets_product: { forward_verb: "markets", reverse_verb: "marketed_by", classification: "semantic", source_type: "screen", target_type: "product" },
|
|
1693
|
+
// Connective cross-product references (0.13.1, Data's connective-layer brief).
|
|
1694
|
+
// Dual-registered (also in UPG_CROSS_EDGE_TYPES) for the common cross-graph case;
|
|
1695
|
+
// these catalog entries are the within-graph degenerate case.
|
|
1696
|
+
// - screen_targets_competitor: a comparison / "vs" / positioning screen targets a
|
|
1697
|
+
// competitor (the competitor typically lives in a watched competitor-intel graph).
|
|
1698
|
+
// - feature_surfaces_product: a feature surfaces / embeds another product (a "Canvas"
|
|
1699
|
+
// feature that IS the Canvas product embedded). The feature-granular sibling of
|
|
1700
|
+
// depends_on_product; wires the portfolio from islands into a mesh.
|
|
1701
|
+
// - feature_uses_design_component: a feature consumes a shared design_component (the
|
|
1702
|
+
// feature sibling of screen_renders_design_component; the component lives in the
|
|
1703
|
+
// design-system product graph).
|
|
1704
|
+
// - product_implements_design_system: a product adopts / implements the shared design
|
|
1705
|
+
// system (the adoption semantic, mirroring product_implements_specification). Distinct
|
|
1706
|
+
// from the hierarchy `product_systematised_in_design_system` (structural containment):
|
|
1707
|
+
// same pattern as brand (branded_as = hierarchy, expresses = semantic).
|
|
1708
|
+
screen_targets_competitor: { forward_verb: "targets", reverse_verb: "targeted_by", classification: "semantic", source_type: "screen", target_type: "competitor" },
|
|
1709
|
+
feature_surfaces_product: { forward_verb: "surfaces", reverse_verb: "surfaced_by", classification: "semantic", source_type: "feature", target_type: "product" },
|
|
1710
|
+
feature_uses_design_component: { forward_verb: "uses", reverse_verb: "used_by", classification: "semantic", source_type: "feature", target_type: "design_component" },
|
|
1711
|
+
product_implements_design_system: { forward_verb: "implements", reverse_verb: "implemented_by", classification: "semantic", source_type: "product", target_type: "design_system" },
|
|
1693
1712
|
screen_navigates_to_screen: { forward_verb: "navigates_to", reverse_verb: "navigated_from", classification: "hierarchy", source_type: "screen", target_type: "screen" },
|
|
1694
1713
|
screen_surfaces_feature: { forward_verb: "surfaces", reverse_verb: "surfaced_on", classification: "cross-domain", source_type: "screen", target_type: "feature" },
|
|
1695
1714
|
screen_wireframed_as_wireframe: { forward_verb: "wireframed_as", reverse_verb: "wireframes", classification: "hierarchy", source_type: "screen", target_type: "wireframe" },
|
|
@@ -2059,7 +2078,9 @@ var UPG_EDGE_CATALOG = {
|
|
|
2059
2078
|
persona_belongs_to_market_segment: { forward_verb: "belongs_to", reverse_verb: "includes_persona", classification: "cross-domain", source_type: "persona", target_type: "market_segment" },
|
|
2060
2079
|
revenue_stream_priced_by_pricing_strategy: { forward_verb: "priced_by", reverse_verb: "prices", classification: "cross-domain", source_type: "revenue_stream", target_type: "pricing_strategy" },
|
|
2061
2080
|
revenue_stream_drives_outcome: { forward_verb: "drives", reverse_verb: "driven_by", classification: "cross-domain", source_type: "revenue_stream", target_type: "outcome" },
|
|
2062
|
-
revenue_stream_measured_by_metric_cross_domain
|
|
2081
|
+
// revenue_stream_measured_by_metric_cross_domain dropped in 0.13.0 Wave 1 (UPG-685 T0.1):
|
|
2082
|
+
// a cross-domain-classified shadow of revenue_stream_measured_by_metric (same measured_by
|
|
2083
|
+
// verbs); pickCanonicalEdge never returned it. Dual-read to the canonical in UPG_EDGE_MIGRATIONS.
|
|
2063
2084
|
pricing_tier_targets_behavioral_segment: { forward_verb: "targets", reverse_verb: "targeted_by", classification: "cross-domain", source_type: "pricing_tier", target_type: "behavioral_segment" },
|
|
2064
2085
|
key_resource_enables_value_proposition: { forward_verb: "enables", reverse_verb: "enabled_by", classification: "cross-domain", source_type: "key_resource", target_type: "value_proposition" },
|
|
2065
2086
|
// 4.3 Go-To-Market Domain
|
|
@@ -3369,7 +3390,15 @@ var UPG_CROSS_EDGE_TYPES = [
|
|
|
3369
3390
|
"journey_phase_realises_operating_stage",
|
|
3370
3391
|
"screen_markets_product",
|
|
3371
3392
|
"screen_renders_design_component",
|
|
3372
|
-
"product_expresses_brand_identity"
|
|
3393
|
+
"product_expresses_brand_identity",
|
|
3394
|
+
// Connective cross-product layer (0.13.1) — see UPGCrossEdgeType above.
|
|
3395
|
+
"shares_job",
|
|
3396
|
+
"shares_need",
|
|
3397
|
+
"persona_delegates_to_persona",
|
|
3398
|
+
"screen_targets_competitor",
|
|
3399
|
+
"feature_surfaces_product",
|
|
3400
|
+
"feature_uses_design_component",
|
|
3401
|
+
"product_implements_design_system"
|
|
3373
3402
|
];
|
|
3374
3403
|
var REGISTRY_PRODUCT_ID = "registry";
|
|
3375
3404
|
|
|
@@ -3826,7 +3855,12 @@ var UPG_VALID_CHILDREN = {
|
|
|
3826
3855
|
],
|
|
3827
3856
|
// ── Data & Analytics hierarchy ───────────────────────────────────────────────
|
|
3828
3857
|
data_source: ["metric", "data_pipeline", "data_lineage", "event_schema"],
|
|
3829
|
-
|
|
3858
|
+
// UPG-685 T0.4 (0.13.0 Wave 1): `outcome` removed as a metric child. It closed a
|
|
3859
|
+
// containment cycle (outcome ⊃ metric ⊃ outcome) and was backed only by the CAUSAL
|
|
3860
|
+
// `metric_drives_outcome` edge, not a hierarchy edge — the "metric leads to outcome"
|
|
3861
|
+
// meaning lives correctly on that causal edge. The real containment (outcome ⊃ metric)
|
|
3862
|
+
// is kept. Sub-metric trees (metric ⊃ metric) stay.
|
|
3863
|
+
metric: ["metric", "data_quality_rule", "metric_quality_assessment"],
|
|
3830
3864
|
data_domain: ["data_product", "data_source", "glossary_term", "data_model", "dashboard"],
|
|
3831
3865
|
dashboard: ["report", "experiment_run"],
|
|
3832
3866
|
// ── Content & Knowledge hierarchy ────────────────────────────────────────────
|
|
@@ -4229,43 +4263,6 @@ var SOLUTION_LIFECYCLE = {
|
|
|
4229
4263
|
}
|
|
4230
4264
|
]
|
|
4231
4265
|
};
|
|
4232
|
-
var HYPOTHESIS_LIFECYCLE = {
|
|
4233
|
-
entity_type: "hypothesis",
|
|
4234
|
-
initial_phase: "untested",
|
|
4235
|
-
terminal_phases: ["resolved"],
|
|
4236
|
-
phases: [
|
|
4237
|
-
{
|
|
4238
|
-
id: "untested",
|
|
4239
|
-
label: "Untested",
|
|
4240
|
-
description: "The belief is stated. No experiment has been designed or run.",
|
|
4241
|
-
transitions_to: ["testing"]
|
|
4242
|
-
},
|
|
4243
|
-
{
|
|
4244
|
-
id: "testing",
|
|
4245
|
-
label: "Testing",
|
|
4246
|
-
description: "An experiment is actively running to test this hypothesis. Evidence is being gathered.",
|
|
4247
|
-
transitions_to: ["resolved"]
|
|
4248
|
-
},
|
|
4249
|
-
{
|
|
4250
|
-
id: "resolved",
|
|
4251
|
-
label: "Resolved",
|
|
4252
|
-
description: "The hypothesis has been tested and a conclusion reached. The resolved phase has two states: validated (belief held) or invalidated (belief did not hold).",
|
|
4253
|
-
transitions_to: [],
|
|
4254
|
-
core_states: [
|
|
4255
|
-
{
|
|
4256
|
-
id: "validated",
|
|
4257
|
-
label: "Validated",
|
|
4258
|
-
description: "Evidence supports the hypothesis. The belief held. Learnings can inform solution design."
|
|
4259
|
-
},
|
|
4260
|
-
{
|
|
4261
|
-
id: "invalidated",
|
|
4262
|
-
label: "Invalidated",
|
|
4263
|
-
description: "Evidence contradicts the hypothesis. The belief did not hold. Learnings prevent investment in the wrong direction."
|
|
4264
|
-
}
|
|
4265
|
-
]
|
|
4266
|
-
}
|
|
4267
|
-
]
|
|
4268
|
-
};
|
|
4269
4266
|
var HYPOTHESIS_CLAIM_LIFECYCLE = {
|
|
4270
4267
|
entity_type: "hypothesis",
|
|
4271
4268
|
initial_phase: "drafted",
|
|
@@ -6418,9 +6415,7 @@ var UPG_LIFECYCLES = [
|
|
|
6418
6415
|
OPPORTUNITY_LIFECYCLE,
|
|
6419
6416
|
SOLUTION_LIFECYCLE,
|
|
6420
6417
|
HYPOTHESIS_CLAIM_LIFECYCLE,
|
|
6421
|
-
// v0.
|
|
6422
|
-
HYPOTHESIS_LIFECYCLE,
|
|
6423
|
-
// pre-v0.2.8 legacy (retained for migration compat)
|
|
6418
|
+
// canonical 'hypothesis' lifecycle. The pre-v0.2.8 legacy binding (untested → testing → resolved) was removed in 0.13.0 Wave 1 (UPG-685 T0.3): it was a dead second binding for the same entity_type, always shadowed by this one, and the legacy-status remap lives in UPG_*_MIGRATIONS, not a live lifecycle.
|
|
6424
6419
|
EXPERIMENT_LIFECYCLE,
|
|
6425
6420
|
EXPERIMENT_PLAN_LIFECYCLE,
|
|
6426
6421
|
EXPERIMENT_RUN_LIFECYCLE,
|
|
@@ -9028,6 +9023,7 @@ var UPG_EDGE_MIGRATIONS = {
|
|
|
9028
9023
|
{ kind: "rename", from: "value_proposition_targets_persona_cross_domain", to: "value_proposition_targets_persona", requires_source_type: "value_proposition", requires_target_type: "persona", reason: "Duplicate collapse (UPG-677). Byte-identical shadow of value_proposition_targets_persona; the suffixed twin never resolved." },
|
|
9029
9024
|
{ kind: "rename", from: "metric_measures_metric_cross_domain", to: "metric_measures_metric", requires_source_type: "metric", requires_target_type: "metric", reason: "Duplicate collapse (UPG-677). Byte-identical shadow of metric_measures_metric; the suffixed twin never resolved." },
|
|
9030
9025
|
{ kind: "rename", from: "insight_validates_need_cross_domain", to: "insight_validates_need", requires_source_type: "insight", requires_target_type: "need", reason: "Duplicate collapse (UPG-677). Byte-identical shadow of insight_validates_need; the suffixed twin never resolved." },
|
|
9026
|
+
{ kind: "rename", from: "revenue_stream_measured_by_metric_cross_domain", to: "revenue_stream_measured_by_metric", requires_source_type: "revenue_stream", requires_target_type: "metric", reason: "Duplicate collapse (UPG-685 T0.1, 0.13.0 Wave 1). Cross-domain-classified shadow of revenue_stream_measured_by_metric (same measured_by/measures verbs); pickCanonicalEdge never returned it (the semantic key wins the pair; revenue_stream_drives_metric serves the cross-domain ask). Verb-preserving collapse onto the semantic canonical." },
|
|
9031
9027
|
// ── Tier 2: tense / suffix twins ──
|
|
9032
9028
|
{ kind: "rename", from: "metric_decomposed_into_metric", to: "metric_decomposes_into_metric", requires_source_type: "metric", requires_target_type: "metric", reason: "Duplicate collapse (UPG-677). Tense-twin of the active-voice metric_decomposes_into_metric." },
|
|
9033
9029
|
{ kind: "rename", from: "product_decided_via_decision_hierarchy", to: "product_decided_via_decision", requires_source_type: "product", requires_target_type: "decision", reason: "Duplicate collapse (UPG-677). Suffix-twin of product_decided_via_decision." },
|
|
@@ -21097,6 +21093,29 @@ var UPG_TREE_PATTERNS = [
|
|
|
21097
21093
|
// readable money-model overview; `depth` extends into the metric -> metric
|
|
21098
21094
|
// decomposition waterfall.
|
|
21099
21095
|
natural_depth: 3
|
|
21096
|
+
},
|
|
21097
|
+
{
|
|
21098
|
+
id: "north_star",
|
|
21099
|
+
label: "North Star impact",
|
|
21100
|
+
description: "A north-star metric, the input/sub-metrics it decomposes into, and the outcomes it drives. The metric-rooted, leading-indicator view: outcomes hang off the metric by influence (the causal `drives` edge), distinct from the OKR view where the outcome sits on top and the metric measures it.",
|
|
21101
|
+
framework_id: "north-star-metric",
|
|
21102
|
+
region: "strategy_outcomes",
|
|
21103
|
+
gap_policy: "all-optional",
|
|
21104
|
+
anchor_type: "metric",
|
|
21105
|
+
// A north-star tree roots at a metric by definition; no fallback (no metric =
|
|
21106
|
+
// no north-star view, honestly empty rather than rooting elsewhere).
|
|
21107
|
+
fallback_anchors: [],
|
|
21108
|
+
child_map: {
|
|
21109
|
+
// A metric decomposes into its input/sub-metrics (the `metric_decomposes_into_metric`
|
|
21110
|
+
// hierarchy) AND drives the outcomes it predicts (the causal `metric_drives_outcome`).
|
|
21111
|
+
// The outcome is a child by INFLUENCE, not containment — the leading-to-lagging chain.
|
|
21112
|
+
// Following the causal edge by type-adjacency (cf. `strategy`'s initiative -> outcome)
|
|
21113
|
+
// is how the metric-rooted view renders without re-creating the metric ⊃ outcome
|
|
21114
|
+
// containment cycle removed in UPG-685 T0.4. The assembler's `seen` set terminates the
|
|
21115
|
+
// metric -> metric recursion for free.
|
|
21116
|
+
metric: [opt("metric"), opt("outcome")]
|
|
21117
|
+
},
|
|
21118
|
+
natural_depth: 3
|
|
21100
21119
|
}
|
|
21101
21120
|
];
|
|
21102
21121
|
var UPG_TREE_PATTERNS_BY_ID = Object.fromEntries(
|
|
@@ -28505,11 +28524,6 @@ var UPG_REGIONS = [
|
|
|
28505
28524
|
edge_id: "key_result_quantified_by_metric",
|
|
28506
28525
|
crosses_into: "strategy_outcomes"
|
|
28507
28526
|
},
|
|
28508
|
-
{
|
|
28509
|
-
direction: "import",
|
|
28510
|
-
edge_id: "revenue_stream_measured_by_metric_cross_domain",
|
|
28511
|
-
crosses_into: "business_gtm_growth"
|
|
28512
|
-
},
|
|
28513
28527
|
{
|
|
28514
28528
|
direction: "import",
|
|
28515
28529
|
edge_id: "service_level_objective_tracks_metric",
|
|
@@ -29530,7 +29544,7 @@ function isCanonical(text) {
|
|
|
29530
29544
|
}
|
|
29531
29545
|
|
|
29532
29546
|
// src/index.ts
|
|
29533
|
-
var UPG_VERSION = "0.
|
|
29547
|
+
var UPG_VERSION = "0.13.1";
|
|
29534
29548
|
var UPG_FORMAT_VERSION = "0.4.0";
|
|
29535
29549
|
var MARKDOWN_FORMAT_VERSION = "0.1";
|
|
29536
29550
|
var UPG_TYPES = getTypes();
|