@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 +11 -0
- package/README.md +1 -1
- package/dist/index.cjs +21 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +31 -6
- package/dist/index.d.ts +31 -6
- package/dist/index.js +21 -2
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
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`,
|
|
9946
|
-
* 21 portfolio-native +
|
|
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
|
|
9963
|
-
*
|
|
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
|
|
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.
|
|
22510
|
+
declare const UPG_VERSION: "0.20.1";
|
|
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`,
|
|
9946
|
-
* 21 portfolio-native +
|
|
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
|
|
9963
|
-
*
|
|
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
|
|
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.
|
|
22510
|
+
declare const UPG_VERSION: "0.20.1";
|
|
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
|
-
|
|
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.
|
|
29922
|
+
var UPG_VERSION = "0.20.1";
|
|
29904
29923
|
var UPG_FORMAT_VERSION = "0.4.0";
|
|
29905
29924
|
var MARKDOWN_FORMAT_VERSION = "0.1";
|
|
29906
29925
|
var UPG_TYPES = getTypes();
|