@unified-product-graph/core 0.20.0 → 0.20.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/CHANGELOG.md CHANGED
@@ -7,6 +7,17 @@ This project uses [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
8
  ---
9
9
 
10
+ ## [0.20.1] - 2026-07-04
11
+
12
+ **Three edges close the alignment-sheet seam: an initiative can now reach directly into the OKR ladder and the roadmap, and a strategic pillar gets its own north-star metric.** Composed flat region surfaces spanning org/team/product altitudes surfaced two gaps in the strategic cascade: an initiative's only path to a key result or a roadmap theme ran through its parent `strategic_theme`, and `strategic_pillar` — durable, multi-year, org-wide — had no measuring metric of its own, unlike every other rung of the cascade (`objective_measured_by_metric`, `key_result_quantified_by_metric`). Additive; no breaking change.
13
+
14
+ ### Added
15
+ - **`initiative_advances_key_result`** — `initiative` → `key_result`, causal (intra-strategy execution, not cross-domain), cross-product-eligible. Extends the curated OKR laddering DAG that `objective_measured_by_metric` / `key_result_quantified_by_metric` are already part of.
16
+ - **`initiative_delivered_via_roadmap_theme`** — `initiative` → `roadmap_theme`, semantic, within-graph. Mirrors `strategic_theme_realised_by_roadmap_theme`: a cross-reference between the strategy spine and the roadmap spine, not containment, so initiatives can reach the roadmap without routing through their parent theme.
17
+ - **`strategic_pillar_measured_by_metric`** — `strategic_pillar` → `metric`, hierarchy, cross-product-eligible. Mirrors `objective_measured_by_metric` one level up the cascade; `metric` joins `strategic_pillar`'s valid children.
18
+
19
+ ---
20
+
10
21
  ## [0.20.0] - 2026-07-04
11
22
 
12
23
  **A cadence layer for the product-delivery region: one self-nesting `planning_cycle` entity models sprints, iterations, quarters, program increments, and cooldowns, so a Jira or Linear export round-trips its time-boxes losslessly.** The delivery region could describe what ships (feature → epic → story → task) and what governs it (release, roadmap, theme), but had no home for the interval work flows *through*. This release mints `planning_cycle` — a named, dated, self-nesting interval discriminated by `cadence_kind` (period / iteration / buffer) rather than a type per methodology — plus the edges that schedule work into it and scope objectives and themes to it. It also closes the smaller structural gaps a Jira ∪ Linear import hits: polymorphic issue links, a dual-band `workflow_state` that preserves an imported tool's raw states without displacing the canonical `status`, and the task-level planning fields lifted onto `user_story`. Additive; no breaking change.
package/README.md CHANGED
@@ -7,7 +7,7 @@
7
7
 
8
8
  The TypeScript core for the **Unified Product Graph (UPG)**, an open specification that gives product tools a shared vocabulary for entities, edges, and frameworks.
9
9
 
10
- 320 entity types across 37 domains. 1034 typed edges. 46 canonical framework definitions, with more added as each is reviewed.
10
+ 320 entity types across 37 domains. 1037 typed edges. 46 canonical framework definitions, with more added as each is reviewed.
11
11
 
12
12
  ## Install
13
13
 
package/dist/index.cjs CHANGED
@@ -1563,6 +1563,10 @@ var UPG_EDGE_CATALOG = {
1563
1563
  strategic_pillar_enables_capability: { forward_verb: "enables", reverse_verb: "enabled_by", classification: "hierarchy", source_type: "strategic_pillar", target_type: "capability" },
1564
1564
  strategic_pillar_delivers_value_stream: { forward_verb: "delivers", reverse_verb: "delivered_by", classification: "hierarchy", source_type: "strategic_pillar", target_type: "value_stream" },
1565
1565
  strategic_pillar_decided_via_decision: { forward_verb: "decided_via", reverse_verb: "decided_for", classification: "hierarchy", source_type: "strategic_pillar", target_type: "decision" },
1566
+ // 0.20.1: the durable pillar's own north-star, mirroring objective_measured_by_metric
1567
+ // one level up the cascade. A strategic_pillar is multi-year and org-wide, so its
1568
+ // measuring metric is portfolio-shared just like the pillar itself.
1569
+ strategic_pillar_measured_by_metric: { forward_verb: "measured_by", reverse_verb: "measures", classification: "hierarchy", source_type: "strategic_pillar", target_type: "metric", cross_product_eligible: true },
1566
1570
  strategic_theme_pursues_initiative: { forward_verb: "pursues", reverse_verb: "pursued_under", classification: "hierarchy", source_type: "strategic_theme", target_type: "initiative", cross_product_eligible: true },
1567
1571
  // v0.9.0 (UPG-660): the soft bridge from the annual strategy focus area to the
1568
1572
  // roadmap grouping that realises it. Semantic, NOT hierarchy: strategic_theme and
@@ -1595,6 +1599,17 @@ var UPG_EDGE_CATALOG = {
1595
1599
  strategic_theme_measured_by_key_result: { forward_verb: "measured_by", reverse_verb: "measures", classification: "causal", source_type: "strategic_theme", target_type: "key_result", cross_product_eligible: true },
1596
1600
  strategic_theme_contains_objective: { forward_verb: "contains", reverse_verb: "rolls_up_to", classification: "hierarchy", source_type: "strategic_theme", target_type: "objective", cross_product_eligible: true },
1597
1601
  initiative_assumes_assumption: { forward_verb: "assumes", reverse_verb: "assumed_by", classification: "hierarchy", source_type: "initiative", target_type: "assumption" },
1602
+ // 0.20.1: the G6 alignment-sheet bridge edges — an initiative reaches directly
1603
+ // into the OKR ladder and the roadmap, rather than only via its parent
1604
+ // strategic_theme. `advances_key_result` is intra-strategy execution (both
1605
+ // ends sit in the strategy domain), so causal not cross-domain; the KR is
1606
+ // portfolio-shared like the initiative, so the pair is cross-product-eligible.
1607
+ initiative_advances_key_result: { forward_verb: "advances", reverse_verb: "advanced_by", classification: "causal", source_type: "initiative", target_type: "key_result", cross_product_eligible: true },
1608
+ // `delivered_via_roadmap_theme` mirrors strategic_theme_realised_by_roadmap_theme:
1609
+ // a semantic cross-reference between the strategy spine and the roadmap spine,
1610
+ // not containment. roadmap_theme is not portfolio-shared, so this stays
1611
+ // within-graph (no cross_product_eligible flag).
1612
+ initiative_delivered_via_roadmap_theme: { forward_verb: "delivered_via", reverse_verb: "delivers", classification: "semantic", source_type: "initiative", target_type: "roadmap_theme" },
1598
1613
  initiative_drives_outcome: { forward_verb: "drives", reverse_verb: "driven_by", classification: "cross-domain", source_type: "initiative", target_type: "outcome", cross_product_eligible: true },
1599
1614
  capability_enables_value_stream: { forward_verb: "enables", reverse_verb: "enabled_by", classification: "cross-domain", source_type: "capability", target_type: "value_stream" },
1600
1615
  // v0.5.2 (UPG-528): three capability-anchored edges that complete the
@@ -3854,7 +3869,11 @@ var UPG_VALID_CHILDREN = {
3854
3869
  // That success-measurement asymmetry is the load-bearing distinction.
3855
3870
  vision: ["mission"],
3856
3871
  mission: ["strategic_pillar"],
3857
- strategic_pillar: ["strategic_theme", "capability", "value_stream", "decision"],
3872
+ // 0.20.1: metric added as a strategic_pillar child, backing
3873
+ // strategic_pillar_measured_by_metric (hierarchy) — the pillar's own
3874
+ // north-star, mirrored from objective: ['key_result', 'metric', ...] one
3875
+ // level down the cascade.
3876
+ strategic_pillar: ["strategic_theme", "capability", "value_stream", "decision", "metric"],
3858
3877
  // v0.5.4 (UPG-511): objectives are the specific quarterly bets *within* a
3859
3878
  // strategic theme. The theme is the multi-quarter focus area; objectives are
3860
3879
  // subordinate. Pairs with `strategic_theme_contains_objective` in the edge
@@ -30155,7 +30174,7 @@ function isCanonical(text) {
30155
30174
  }
30156
30175
 
30157
30176
  // src/index.ts
30158
- var UPG_VERSION = "0.20.0";
30177
+ var UPG_VERSION = "0.20.1";
30159
30178
  var UPG_FORMAT_VERSION = "0.4.0";
30160
30179
  var MARKDOWN_FORMAT_VERSION = "0.1";
30161
30180
  var UPG_TYPES = getTypes();