@unified-product-graph/core 0.12.5 → 0.12.6

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 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: "proposed", since: "0.2.6" },
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: "proposed", since: "0.1.0" },
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: "UPG-571: frozen proposed by the v0.7.0 re-canon contract (story_statement to user_story); user-story-split.test.ts asserts the invariant.",
1174
- experiment_run: "UPG-664: the optional multi-run / replication child; experiment_plan graduated to stable, the run stays proposed.",
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)."
@@ -3616,7 +3617,20 @@ var UPG_VALID_CHILDREN = {
3616
3617
  // ── OKR hierarchy ──────────────────────────────────────────────────────────
3617
3618
  objective: ["key_result", "metric"],
3618
3619
  key_result: ["metric"],
3619
- // ── Strategic cascade: vision → mission → strategic_pillar → … ─────────────
3620
+ // ── Strategic cascade: vision → mission → strategic_pillar → strategic_theme →
3621
+ // { initiative, objective } ───────────────────────────────────────────────
3622
+ //
3623
+ // strategic_pillar vs strategic_theme (UPG-692 T3.3 — distinct cascade levels,
3624
+ // NOT duplicates; sharpened rather than merged):
3625
+ // - strategic_pillar = a DURABLE structural division of the strategy. A
3626
+ // standing area the org organises around for years (e.g. "Structured
3627
+ // content", "Developer experience"). Few, long-lived; time_horizon is
3628
+ // multi-year / open-ended; carries its own `success_indicator`.
3629
+ // - strategic_theme = a TIME-BOUND thrust WITHIN a pillar. The current bet
3630
+ // for a period (e.g. "Go AI-native this year"). More numerous, rotates;
3631
+ // time_horizon is bounded (Q / FY); has NO `success_indicator` because it
3632
+ // is measured through its child objectives (strategic_theme_contains_objective).
3633
+ // That success-measurement asymmetry is the load-bearing distinction.
3620
3634
  vision: ["mission"],
3621
3635
  mission: ["strategic_pillar"],
3622
3636
  strategic_pillar: ["strategic_theme", "capability", "value_stream", "decision"],
@@ -12756,16 +12770,18 @@ var UPG_PROPERTY_SCHEMA = {
12756
12770
  // StrategicPillarProperties: StrategicPillar entity. Durable multi-year direction the product commits to.
12757
12771
  strategic_pillar: {
12758
12772
  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: "What this pillar covers" },
12761
- time_horizon: { type: "string", description: 'Planning horizon. Typically multi-year. @example "3 years", "2026-2028"' },
12762
- success_indicator: { type: "string", description: "How the business knows the pillar is on track. Narrative, not a metric edge." }
12763
- },
12764
- // StrategicThemeProperties: StrategicTheme entity.
12773
+ description: { type: "string", description: "Narrative of the pillar's intent as a durable strategic area" },
12774
+ scope: { type: "string", description: "The standing organisational area this pillar owns" },
12775
+ time_horizon: { type: "string", description: 'Standing / multi-year horizon, often open-ended (a pillar is durable). @example "3 years", "2026-2028", "ongoing"' },
12776
+ 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." }
12777
+ },
12778
+ // StrategicThemeProperties: StrategicTheme entity. A time-bound thrust WITHIN a
12779
+ // strategic_pillar (distinct cascade level, UPG-692 T3.3) — measured through its
12780
+ // child objectives, so it carries no success_indicator of its own.
12765
12781
  strategic_theme: {
12766
12782
  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: 'Planning horizon. @example "Q1 2026", "FY26"' },
12768
- description: { type: "string", description: "Short narrative of what the theme is about" },
12783
+ time_horizon: { type: "string", description: 'Bounded period this theme is active (a theme is time-bound, within a pillar). @example "Q1 2026", "FY26"' },
12784
+ description: { type: "string", description: "Short narrative of this time-bound thrust within its pillar" },
12769
12785
  scope: { type: "string", description: "What the theme explicitly includes or excludes" }
12770
12786
  },
12771
12787
  // SubscriptionProperties: Subscription.
@@ -29437,7 +29453,7 @@ function isCanonical(text) {
29437
29453
  }
29438
29454
 
29439
29455
  // src/index.ts
29440
- var UPG_VERSION = "0.12.5";
29456
+ var UPG_VERSION = "0.12.6";
29441
29457
  var UPG_FORMAT_VERSION = "0.4.0";
29442
29458
  var MARKDOWN_FORMAT_VERSION = "0.1";
29443
29459
  var UPG_TYPES = getTypes();