@unified-product-graph/core 0.20.0 → 0.20.2

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.d.cts CHANGED
@@ -1148,6 +1148,14 @@ declare const UPG_EDGE_CATALOG: {
1148
1148
  source_type: string;
1149
1149
  target_type: string;
1150
1150
  };
1151
+ strategic_pillar_measured_by_metric: {
1152
+ forward_verb: string;
1153
+ reverse_verb: string;
1154
+ classification: "hierarchy";
1155
+ source_type: string;
1156
+ target_type: string;
1157
+ cross_product_eligible: true;
1158
+ };
1151
1159
  strategic_theme_pursues_initiative: {
1152
1160
  forward_verb: string;
1153
1161
  reverse_verb: string;
@@ -1194,6 +1202,21 @@ declare const UPG_EDGE_CATALOG: {
1194
1202
  source_type: string;
1195
1203
  target_type: string;
1196
1204
  };
1205
+ initiative_advances_key_result: {
1206
+ forward_verb: string;
1207
+ reverse_verb: string;
1208
+ classification: "causal";
1209
+ source_type: string;
1210
+ target_type: string;
1211
+ cross_product_eligible: true;
1212
+ };
1213
+ initiative_delivered_via_roadmap_theme: {
1214
+ forward_verb: string;
1215
+ reverse_verb: string;
1216
+ classification: "semantic";
1217
+ source_type: string;
1218
+ target_type: string;
1219
+ };
1197
1220
  initiative_drives_outcome: {
1198
1221
  forward_verb: string;
1199
1222
  reverse_verb: string;
@@ -9942,8 +9965,8 @@ declare function rotateSlug<T extends Pick<UPGBaseNode, 'slug' | 'aliases'>>(nod
9942
9965
  * eligible" rule over-admits ~5×, because portfolio-shared types also anchor rich
9943
9966
  * within-graph decomposition). So eligibility is a two-layer model:
9944
9967
  *
9945
- * - **curated** — the blessed canonical set (`UPG_CROSS_EDGE_TYPES`, 59 types:
9946
- * 21 portfolio-native + 38 catalog-flagged `cross_product_eligible`).
9968
+ * - **curated** — the blessed canonical set (`UPG_CROSS_EDGE_TYPES`, 61 types:
9969
+ * 21 portfolio-native + 40 catalog-flagged `cross_product_eligible`).
9947
9970
  * Hard-allow at the write surface, no warning.
9948
9971
  * - **provisional** — an unflagged catalog edge that PASSES the shared-tier gate
9949
9972
  * (≥1 endpoint `portfolio_shared`). Allowed at the write surface
@@ -9959,8 +9982,10 @@ declare function rotateSlug<T extends Pick<UPGBaseNode, 'slug' | 'aliases'>>(nod
9959
9982
  *
9960
9983
  * The gate (`isCrossCapable`) is DERIVED from `EntityTypeMeta.portfolio_shared`, so
9961
9984
  * the guardrail is self-maintaining: a new persona/job/need internal edge is
9962
- * auto-rejected with no list to touch. The canonical `UPG_CROSS_EDGE_TYPES` snapshot
9963
- * is UNCHANGED (adapters / portfolio_query / list_cross_edge_types keep reading 59);
9985
+ * auto-rejected with no list to touch. The gate LOGIC itself never changes the
9986
+ * canonical `UPG_CROSS_EDGE_TYPES` snapshot (adapters / portfolio_query /
9987
+ * list_cross_edge_types keep reading whatever it currently is, 61 as of 0.20.1);
9988
+ * only a new `cross_product_eligible` flag or portfolio-native type grows it.
9964
9989
  * `crossProductScope` is a separate predicate the write + read surfaces consult.
9965
9990
  */
9966
9991
  /** The three cross-product states a directed relationship can occupy. */
@@ -9983,7 +10008,7 @@ type CrossProductScope = 'curated' | 'provisional' | 'resident';
9983
10008
  declare function isCrossCapable(sourceType: string, targetType: string): boolean;
9984
10009
  /**
9985
10010
  * True if this cross-edge type is in the curated canonical set (`UPG_CROSS_EDGE_TYPES`,
9986
- * the 59). Distinct from the catalog's `isCrossProductEligible` (the 38 dual-registered
10011
+ * the 61). Distinct from the catalog's `isCrossProductEligible` (the 40 dual-registered
9987
10012
  * flags only): this also covers the 21 portfolio-native cross-only types.
9988
10013
  *
9989
10014
  * @example
@@ -22482,7 +22507,7 @@ declare function isCanonical(text: string): boolean;
22482
22507
  * it stamps the `upg_version` field of every `.upg` file written by the SDK.
22483
22508
  * The `check:version-lockstep` gate enforces this at release time.
22484
22509
  */
22485
- declare const UPG_VERSION: "0.20.0";
22510
+ declare const UPG_VERSION: "0.20.2";
22486
22511
  /**
22487
22512
  * The `.upg` JSON document format version. Written to the `upg_version` field.
22488
22513
  * Evolves independently from `UPG_VERSION` (the catalogue version).
package/dist/index.d.ts CHANGED
@@ -1148,6 +1148,14 @@ declare const UPG_EDGE_CATALOG: {
1148
1148
  source_type: string;
1149
1149
  target_type: string;
1150
1150
  };
1151
+ strategic_pillar_measured_by_metric: {
1152
+ forward_verb: string;
1153
+ reverse_verb: string;
1154
+ classification: "hierarchy";
1155
+ source_type: string;
1156
+ target_type: string;
1157
+ cross_product_eligible: true;
1158
+ };
1151
1159
  strategic_theme_pursues_initiative: {
1152
1160
  forward_verb: string;
1153
1161
  reverse_verb: string;
@@ -1194,6 +1202,21 @@ declare const UPG_EDGE_CATALOG: {
1194
1202
  source_type: string;
1195
1203
  target_type: string;
1196
1204
  };
1205
+ initiative_advances_key_result: {
1206
+ forward_verb: string;
1207
+ reverse_verb: string;
1208
+ classification: "causal";
1209
+ source_type: string;
1210
+ target_type: string;
1211
+ cross_product_eligible: true;
1212
+ };
1213
+ initiative_delivered_via_roadmap_theme: {
1214
+ forward_verb: string;
1215
+ reverse_verb: string;
1216
+ classification: "semantic";
1217
+ source_type: string;
1218
+ target_type: string;
1219
+ };
1197
1220
  initiative_drives_outcome: {
1198
1221
  forward_verb: string;
1199
1222
  reverse_verb: string;
@@ -9942,8 +9965,8 @@ declare function rotateSlug<T extends Pick<UPGBaseNode, 'slug' | 'aliases'>>(nod
9942
9965
  * eligible" rule over-admits ~5×, because portfolio-shared types also anchor rich
9943
9966
  * within-graph decomposition). So eligibility is a two-layer model:
9944
9967
  *
9945
- * - **curated** — the blessed canonical set (`UPG_CROSS_EDGE_TYPES`, 59 types:
9946
- * 21 portfolio-native + 38 catalog-flagged `cross_product_eligible`).
9968
+ * - **curated** — the blessed canonical set (`UPG_CROSS_EDGE_TYPES`, 61 types:
9969
+ * 21 portfolio-native + 40 catalog-flagged `cross_product_eligible`).
9947
9970
  * Hard-allow at the write surface, no warning.
9948
9971
  * - **provisional** — an unflagged catalog edge that PASSES the shared-tier gate
9949
9972
  * (≥1 endpoint `portfolio_shared`). Allowed at the write surface
@@ -9959,8 +9982,10 @@ declare function rotateSlug<T extends Pick<UPGBaseNode, 'slug' | 'aliases'>>(nod
9959
9982
  *
9960
9983
  * The gate (`isCrossCapable`) is DERIVED from `EntityTypeMeta.portfolio_shared`, so
9961
9984
  * the guardrail is self-maintaining: a new persona/job/need internal edge is
9962
- * auto-rejected with no list to touch. The canonical `UPG_CROSS_EDGE_TYPES` snapshot
9963
- * is UNCHANGED (adapters / portfolio_query / list_cross_edge_types keep reading 59);
9985
+ * auto-rejected with no list to touch. The gate LOGIC itself never changes the
9986
+ * canonical `UPG_CROSS_EDGE_TYPES` snapshot (adapters / portfolio_query /
9987
+ * list_cross_edge_types keep reading whatever it currently is, 61 as of 0.20.1);
9988
+ * only a new `cross_product_eligible` flag or portfolio-native type grows it.
9964
9989
  * `crossProductScope` is a separate predicate the write + read surfaces consult.
9965
9990
  */
9966
9991
  /** The three cross-product states a directed relationship can occupy. */
@@ -9983,7 +10008,7 @@ type CrossProductScope = 'curated' | 'provisional' | 'resident';
9983
10008
  declare function isCrossCapable(sourceType: string, targetType: string): boolean;
9984
10009
  /**
9985
10010
  * True if this cross-edge type is in the curated canonical set (`UPG_CROSS_EDGE_TYPES`,
9986
- * the 59). Distinct from the catalog's `isCrossProductEligible` (the 38 dual-registered
10011
+ * the 61). Distinct from the catalog's `isCrossProductEligible` (the 40 dual-registered
9987
10012
  * flags only): this also covers the 21 portfolio-native cross-only types.
9988
10013
  *
9989
10014
  * @example
@@ -22482,7 +22507,7 @@ declare function isCanonical(text: string): boolean;
22482
22507
  * it stamps the `upg_version` field of every `.upg` file written by the SDK.
22483
22508
  * The `check:version-lockstep` gate enforces this at release time.
22484
22509
  */
22485
- declare const UPG_VERSION: "0.20.0";
22510
+ declare const UPG_VERSION: "0.20.2";
22486
22511
  /**
22487
22512
  * The `.upg` JSON document format version. Written to the `upg_version` field.
22488
22513
  * Evolves independently from `UPG_VERSION` (the catalogue version).
package/dist/index.js CHANGED
@@ -1308,6 +1308,10 @@ var UPG_EDGE_CATALOG = {
1308
1308
  strategic_pillar_enables_capability: { forward_verb: "enables", reverse_verb: "enabled_by", classification: "hierarchy", source_type: "strategic_pillar", target_type: "capability" },
1309
1309
  strategic_pillar_delivers_value_stream: { forward_verb: "delivers", reverse_verb: "delivered_by", classification: "hierarchy", source_type: "strategic_pillar", target_type: "value_stream" },
1310
1310
  strategic_pillar_decided_via_decision: { forward_verb: "decided_via", reverse_verb: "decided_for", classification: "hierarchy", source_type: "strategic_pillar", target_type: "decision" },
1311
+ // 0.20.1: the durable pillar's own north-star, mirroring objective_measured_by_metric
1312
+ // one level up the cascade. A strategic_pillar is multi-year and org-wide, so its
1313
+ // measuring metric is portfolio-shared just like the pillar itself.
1314
+ 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 },
1311
1315
  strategic_theme_pursues_initiative: { forward_verb: "pursues", reverse_verb: "pursued_under", classification: "hierarchy", source_type: "strategic_theme", target_type: "initiative", cross_product_eligible: true },
1312
1316
  // v0.9.0 (UPG-660): the soft bridge from the annual strategy focus area to the
1313
1317
  // roadmap grouping that realises it. Semantic, NOT hierarchy: strategic_theme and
@@ -1340,6 +1344,17 @@ var UPG_EDGE_CATALOG = {
1340
1344
  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 },
1341
1345
  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 },
1342
1346
  initiative_assumes_assumption: { forward_verb: "assumes", reverse_verb: "assumed_by", classification: "hierarchy", source_type: "initiative", target_type: "assumption" },
1347
+ // 0.20.1: the G6 alignment-sheet bridge edges — an initiative reaches directly
1348
+ // into the OKR ladder and the roadmap, rather than only via its parent
1349
+ // strategic_theme. `advances_key_result` is intra-strategy execution (both
1350
+ // ends sit in the strategy domain), so causal not cross-domain; the KR is
1351
+ // portfolio-shared like the initiative, so the pair is cross-product-eligible.
1352
+ initiative_advances_key_result: { forward_verb: "advances", reverse_verb: "advanced_by", classification: "causal", source_type: "initiative", target_type: "key_result", cross_product_eligible: true },
1353
+ // `delivered_via_roadmap_theme` mirrors strategic_theme_realised_by_roadmap_theme:
1354
+ // a semantic cross-reference between the strategy spine and the roadmap spine,
1355
+ // not containment. roadmap_theme is not portfolio-shared, so this stays
1356
+ // within-graph (no cross_product_eligible flag).
1357
+ initiative_delivered_via_roadmap_theme: { forward_verb: "delivered_via", reverse_verb: "delivers", classification: "semantic", source_type: "initiative", target_type: "roadmap_theme" },
1343
1358
  initiative_drives_outcome: { forward_verb: "drives", reverse_verb: "driven_by", classification: "cross-domain", source_type: "initiative", target_type: "outcome", cross_product_eligible: true },
1344
1359
  capability_enables_value_stream: { forward_verb: "enables", reverse_verb: "enabled_by", classification: "cross-domain", source_type: "capability", target_type: "value_stream" },
1345
1360
  // v0.5.2 (UPG-528): three capability-anchored edges that complete the
@@ -3599,7 +3614,11 @@ var UPG_VALID_CHILDREN = {
3599
3614
  // That success-measurement asymmetry is the load-bearing distinction.
3600
3615
  vision: ["mission"],
3601
3616
  mission: ["strategic_pillar"],
3602
- strategic_pillar: ["strategic_theme", "capability", "value_stream", "decision"],
3617
+ // 0.20.1: metric added as a strategic_pillar child, backing
3618
+ // strategic_pillar_measured_by_metric (hierarchy) — the pillar's own
3619
+ // north-star, mirrored from objective: ['key_result', 'metric', ...] one
3620
+ // level down the cascade.
3621
+ strategic_pillar: ["strategic_theme", "capability", "value_stream", "decision", "metric"],
3603
3622
  // v0.5.4 (UPG-511): objectives are the specific quarterly bets *within* a
3604
3623
  // strategic theme. The theme is the multi-quarter focus area; objectives are
3605
3624
  // subordinate. Pairs with `strategic_theme_contains_objective` in the edge
@@ -29900,7 +29919,7 @@ function isCanonical(text) {
29900
29919
  }
29901
29920
 
29902
29921
  // src/index.ts
29903
- var UPG_VERSION = "0.20.0";
29922
+ var UPG_VERSION = "0.20.2";
29904
29923
  var UPG_FORMAT_VERSION = "0.4.0";
29905
29924
  var MARKDOWN_FORMAT_VERSION = "0.1";
29906
29925
  var UPG_TYPES = getTypes();