@unified-product-graph/core 0.12.5 → 0.12.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/dist/index.cjs +43 -15
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +16 -2
- package/dist/index.d.ts +16 -2
- package/dist/index.js +43 -15
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -793,7 +793,7 @@ var UPG_ENTITY_META = [
|
|
|
793
793
|
// (method / success_criteria / sample_size) when `test_plan` re-homed to the
|
|
794
794
|
// QA/testing domain (UPG-678).
|
|
795
795
|
{ name: "experiment_plan", type_id: "ent_340", maturity: "stable", since: "0.2.6" },
|
|
796
|
-
{ name: "experiment_run", type_id: "ent_341", maturity: "
|
|
796
|
+
{ name: "experiment_run", type_id: "ent_341", maturity: "stable", since: "0.2.6" },
|
|
797
797
|
{ name: "learning", type_id: "ent_029", maturity: "stable", since: "0.1.0" },
|
|
798
798
|
// test_plan re-homed validation → testing/QA (UPG-678). It is the QA
|
|
799
799
|
// verification-procedure plan (test scope / environments / pass criteria);
|
|
@@ -881,7 +881,7 @@ var UPG_ENTITY_META = [
|
|
|
881
881
|
// asserts `proposed` as the post-re-canon invariant. Graduating here would
|
|
882
882
|
// break that contract; promotion is a separate, ticketed decision once the
|
|
883
883
|
// story_statement → user_story migration has fully aged out.
|
|
884
|
-
{ name: "user_story", type_id: "ent_073", maturity: "
|
|
884
|
+
{ name: "user_story", type_id: "ent_073", maturity: "stable", since: "0.1.0" },
|
|
885
885
|
{ name: "story_statement", type_id: "ent_342", maturity: "deprecated", since: "0.2.7", deprecated_in: "0.7.0", replacement: "user_story" },
|
|
886
886
|
{ name: "story_task", type_id: "ent_343", maturity: "deprecated", since: "0.2.7", deprecated_in: "0.4.0", replacement: "task" },
|
|
887
887
|
{ name: "acceptance_criterion", type_id: "ent_074", maturity: "stable", since: "0.1.0" },
|
|
@@ -1170,8 +1170,9 @@ var UPG_ENTITY_META = [
|
|
|
1170
1170
|
{ name: "framework_exercise", type_id: "ent_350", maturity: "proposed", since: "0.8.4" }
|
|
1171
1171
|
];
|
|
1172
1172
|
var DEFERRED_PROPOSED_BY_CONTRACT = {
|
|
1173
|
-
user_story
|
|
1174
|
-
|
|
1173
|
+
// user_story (UPG-571) and experiment_run (UPG-664) graduated to stable in
|
|
1174
|
+
// 0.12.6 — Captain lifted both freezes ("we are using them"). Their contracts
|
|
1175
|
+
// are settled; they are now stable, not deferred.
|
|
1175
1176
|
ai_experiment: "UPG-665: AI prompt/model restructure (open ADR).",
|
|
1176
1177
|
ai_dataset: "UPG-665: AI prompt/model restructure (open ADR).",
|
|
1177
1178
|
ai_trace: "UPG-665: AI prompt/model restructure (open ADR)."
|
|
@@ -1658,6 +1659,11 @@ var UPG_EDGE_CATALOG = {
|
|
|
1658
1659
|
design_system_defines_design_token: { forward_verb: "defines", reverse_verb: "defined_in", classification: "hierarchy", source_type: "design_system", target_type: "design_token" },
|
|
1659
1660
|
design_system_codified_in_design_guideline: { forward_verb: "codified_in", reverse_verb: "codifies", classification: "hierarchy", source_type: "design_system", target_type: "design_guideline" },
|
|
1660
1661
|
design_system_expresses_brand_identity: { forward_verb: "expresses", reverse_verb: "expressed_in", classification: "hierarchy", source_type: "design_system", target_type: "brand_identity" },
|
|
1662
|
+
// Product expresses the brand (0.12.7, UPG-698). A product references the shared
|
|
1663
|
+
// brand_identity. Dual-registered: also a cross-edge for the common case where the
|
|
1664
|
+
// brand is a registry singleton in another graph (the ratified pattern: brand is a
|
|
1665
|
+
// singleton expressed, not instance_of-d); this catalog entry is the within-graph case.
|
|
1666
|
+
product_expresses_brand_identity: { forward_verb: "expresses", reverse_verb: "expressed_by", classification: "semantic", source_type: "product", target_type: "brand_identity" },
|
|
1661
1667
|
design_system_encompasses_user_journey: { forward_verb: "encompasses", reverse_verb: "encompassed_in", classification: "hierarchy", source_type: "design_system", target_type: "user_journey" },
|
|
1662
1668
|
design_system_encompasses_user_flow: { forward_verb: "encompasses", reverse_verb: "encompassed_in", classification: "hierarchy", source_type: "design_system", target_type: "user_flow" },
|
|
1663
1669
|
design_system_informed_by_insight: { forward_verb: "informed_by", reverse_verb: "informs", classification: "hierarchy", source_type: "design_system", target_type: "insight" },
|
|
@@ -1670,6 +1676,11 @@ var UPG_EDGE_CATALOG = {
|
|
|
1670
1676
|
design_component_composes_design_component: { forward_verb: "composes", reverse_verb: "composed_in", classification: "hierarchy", source_type: "design_component", target_type: "design_component" },
|
|
1671
1677
|
prototype_annotated_with_annotation: { forward_verb: "annotated_with", reverse_verb: "annotates", classification: "hierarchy", source_type: "prototype", target_type: "annotation" },
|
|
1672
1678
|
screen_renders_design_component: { forward_verb: "renders", reverse_verb: "rendered_on", classification: "hierarchy", source_type: "screen", target_type: "design_component" },
|
|
1679
|
+
// Marketing surface to product (0.12.7, UPG-696/698). A marketing/landing screen
|
|
1680
|
+
// markets a product. Dual-registered: also a cross-edge (UPG_CROSS_EDGE_TYPES) for
|
|
1681
|
+
// the common case where the product lives in another graph; this catalog entry is
|
|
1682
|
+
// the within-graph degenerate case (a product's own landing page).
|
|
1683
|
+
screen_markets_product: { forward_verb: "markets", reverse_verb: "marketed_by", classification: "semantic", source_type: "screen", target_type: "product" },
|
|
1673
1684
|
screen_navigates_to_screen: { forward_verb: "navigates_to", reverse_verb: "navigated_from", classification: "hierarchy", source_type: "screen", target_type: "screen" },
|
|
1674
1685
|
screen_surfaces_feature: { forward_verb: "surfaces", reverse_verb: "surfaced_on", classification: "cross-domain", source_type: "screen", target_type: "feature" },
|
|
1675
1686
|
screen_wireframed_as_wireframe: { forward_verb: "wireframed_as", reverse_verb: "wireframes", classification: "hierarchy", source_type: "screen", target_type: "wireframe" },
|
|
@@ -3347,7 +3358,9 @@ var UPG_CROSS_EDGE_TYPES = [
|
|
|
3347
3358
|
"competitor_classified_as_classification_value",
|
|
3348
3359
|
"node_classified_as_classification_value",
|
|
3349
3360
|
"journey_phase_realises_operating_stage",
|
|
3350
|
-
"screen_markets_product"
|
|
3361
|
+
"screen_markets_product",
|
|
3362
|
+
"screen_renders_design_component",
|
|
3363
|
+
"product_expresses_brand_identity"
|
|
3351
3364
|
];
|
|
3352
3365
|
var REGISTRY_PRODUCT_ID = "registry";
|
|
3353
3366
|
|
|
@@ -3616,7 +3629,20 @@ var UPG_VALID_CHILDREN = {
|
|
|
3616
3629
|
// ── OKR hierarchy ──────────────────────────────────────────────────────────
|
|
3617
3630
|
objective: ["key_result", "metric"],
|
|
3618
3631
|
key_result: ["metric"],
|
|
3619
|
-
// ── Strategic cascade: vision → mission → strategic_pillar →
|
|
3632
|
+
// ── Strategic cascade: vision → mission → strategic_pillar → strategic_theme →
|
|
3633
|
+
// { initiative, objective } ───────────────────────────────────────────────
|
|
3634
|
+
//
|
|
3635
|
+
// strategic_pillar vs strategic_theme (UPG-692 T3.3 — distinct cascade levels,
|
|
3636
|
+
// NOT duplicates; sharpened rather than merged):
|
|
3637
|
+
// - strategic_pillar = a DURABLE structural division of the strategy. A
|
|
3638
|
+
// standing area the org organises around for years (e.g. "Structured
|
|
3639
|
+
// content", "Developer experience"). Few, long-lived; time_horizon is
|
|
3640
|
+
// multi-year / open-ended; carries its own `success_indicator`.
|
|
3641
|
+
// - strategic_theme = a TIME-BOUND thrust WITHIN a pillar. The current bet
|
|
3642
|
+
// for a period (e.g. "Go AI-native this year"). More numerous, rotates;
|
|
3643
|
+
// time_horizon is bounded (Q / FY); has NO `success_indicator` because it
|
|
3644
|
+
// is measured through its child objectives (strategic_theme_contains_objective).
|
|
3645
|
+
// That success-measurement asymmetry is the load-bearing distinction.
|
|
3620
3646
|
vision: ["mission"],
|
|
3621
3647
|
mission: ["strategic_pillar"],
|
|
3622
3648
|
strategic_pillar: ["strategic_theme", "capability", "value_stream", "decision"],
|
|
@@ -12756,16 +12782,18 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12756
12782
|
// StrategicPillarProperties: StrategicPillar entity. Durable multi-year direction the product commits to.
|
|
12757
12783
|
strategic_pillar: {
|
|
12758
12784
|
owner: { type: "string", description: "Owning person or team. Promote to a `node_owned_by_person` edge if ownership must be queryable." },
|
|
12759
|
-
description: { type: "string", description: "Narrative of the pillar's intent" },
|
|
12760
|
-
scope: { type: "string", description: "
|
|
12761
|
-
time_horizon: { type: "string", description: '
|
|
12762
|
-
success_indicator: { type: "string", description: "How the business knows
|
|
12763
|
-
},
|
|
12764
|
-
// StrategicThemeProperties: StrategicTheme entity.
|
|
12785
|
+
description: { type: "string", description: "Narrative of the pillar's intent as a durable strategic area" },
|
|
12786
|
+
scope: { type: "string", description: "The standing organisational area this pillar owns" },
|
|
12787
|
+
time_horizon: { type: "string", description: 'Standing / multi-year horizon, often open-ended (a pillar is durable). @example "3 years", "2026-2028", "ongoing"' },
|
|
12788
|
+
success_indicator: { type: "string", description: "How the business knows this durable pillar is on track. Narrative, not a metric edge. A strategic_theme deliberately has no success_indicator: it is measured through its child objectives, not on its own." }
|
|
12789
|
+
},
|
|
12790
|
+
// StrategicThemeProperties: StrategicTheme entity. A time-bound thrust WITHIN a
|
|
12791
|
+
// strategic_pillar (distinct cascade level, UPG-692 T3.3) — measured through its
|
|
12792
|
+
// child objectives, so it carries no success_indicator of its own.
|
|
12765
12793
|
strategic_theme: {
|
|
12766
12794
|
owner: { type: "string", description: "Owning person or team. Promote to a `node_owned_by_person` edge if ownership must be queryable." },
|
|
12767
|
-
time_horizon: { type: "string", description: '
|
|
12768
|
-
description: { type: "string", description: "Short narrative of
|
|
12795
|
+
time_horizon: { type: "string", description: 'Bounded period this theme is active (a theme is time-bound, within a pillar). @example "Q1 2026", "FY26"' },
|
|
12796
|
+
description: { type: "string", description: "Short narrative of this time-bound thrust within its pillar" },
|
|
12769
12797
|
scope: { type: "string", description: "What the theme explicitly includes or excludes" }
|
|
12770
12798
|
},
|
|
12771
12799
|
// SubscriptionProperties: Subscription.
|
|
@@ -29437,7 +29465,7 @@ function isCanonical(text) {
|
|
|
29437
29465
|
}
|
|
29438
29466
|
|
|
29439
29467
|
// src/index.ts
|
|
29440
|
-
var UPG_VERSION = "0.12.
|
|
29468
|
+
var UPG_VERSION = "0.12.7";
|
|
29441
29469
|
var UPG_FORMAT_VERSION = "0.4.0";
|
|
29442
29470
|
var MARKDOWN_FORMAT_VERSION = "0.1";
|
|
29443
29471
|
var UPG_TYPES = getTypes();
|