@unified-product-graph/core 0.22.1 → 0.23.0

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
@@ -1470,6 +1470,20 @@ declare const UPG_EDGE_CATALOG: {
1470
1470
  source_type: string;
1471
1471
  target_type: string;
1472
1472
  };
1473
+ epic_decomposes_into_task: {
1474
+ forward_verb: string;
1475
+ reverse_verb: string;
1476
+ classification: "hierarchy";
1477
+ source_type: string;
1478
+ target_type: string;
1479
+ };
1480
+ epic_affected_by_bug: {
1481
+ forward_verb: string;
1482
+ reverse_verb: string;
1483
+ classification: "hierarchy";
1484
+ source_type: string;
1485
+ target_type: string;
1486
+ };
1473
1487
  task_has_subtask: {
1474
1488
  forward_verb: string;
1475
1489
  reverse_verb: string;
@@ -15405,7 +15419,7 @@ interface EventSchemaProperties {
15405
15419
  */
15406
15420
  interface DashboardProperties {
15407
15421
  /** Analytics tool hosting this dashboard */
15408
- tool?: 'looker' | 'amplitude' | 'mixpanel' | 'posthog' | 'custom';
15422
+ tool?: 'looker' | 'amplitude' | 'mixpanel' | 'posthog' | 'omni' | 'custom';
15409
15423
  /** URL to the live dashboard */
15410
15424
  url?: string;
15411
15425
  /** Intended audience for this dashboard */
@@ -22518,7 +22532,7 @@ declare function isCanonical(text: string): boolean;
22518
22532
  * it stamps the `upg_version` field of every `.upg` file written by the SDK.
22519
22533
  * The `check:version-lockstep` gate enforces this at release time.
22520
22534
  */
22521
- declare const UPG_VERSION: "0.22.1";
22535
+ declare const UPG_VERSION: "0.23.0";
22522
22536
  /**
22523
22537
  * The `.upg` JSON document format version. Written to the `upg_version` field.
22524
22538
  * Evolves independently from `UPG_VERSION` (the catalogue version).
package/dist/index.d.ts CHANGED
@@ -1470,6 +1470,20 @@ declare const UPG_EDGE_CATALOG: {
1470
1470
  source_type: string;
1471
1471
  target_type: string;
1472
1472
  };
1473
+ epic_decomposes_into_task: {
1474
+ forward_verb: string;
1475
+ reverse_verb: string;
1476
+ classification: "hierarchy";
1477
+ source_type: string;
1478
+ target_type: string;
1479
+ };
1480
+ epic_affected_by_bug: {
1481
+ forward_verb: string;
1482
+ reverse_verb: string;
1483
+ classification: "hierarchy";
1484
+ source_type: string;
1485
+ target_type: string;
1486
+ };
1473
1487
  task_has_subtask: {
1474
1488
  forward_verb: string;
1475
1489
  reverse_verb: string;
@@ -15405,7 +15419,7 @@ interface EventSchemaProperties {
15405
15419
  */
15406
15420
  interface DashboardProperties {
15407
15421
  /** Analytics tool hosting this dashboard */
15408
- tool?: 'looker' | 'amplitude' | 'mixpanel' | 'posthog' | 'custom';
15422
+ tool?: 'looker' | 'amplitude' | 'mixpanel' | 'posthog' | 'omni' | 'custom';
15409
15423
  /** URL to the live dashboard */
15410
15424
  url?: string;
15411
15425
  /** Intended audience for this dashboard */
@@ -22518,7 +22532,7 @@ declare function isCanonical(text: string): boolean;
22518
22532
  * it stamps the `upg_version` field of every `.upg` file written by the SDK.
22519
22533
  * The `check:version-lockstep` gate enforces this at release time.
22520
22534
  */
22521
- declare const UPG_VERSION: "0.22.1";
22535
+ declare const UPG_VERSION: "0.23.0";
22522
22536
  /**
22523
22537
  * The `.upg` JSON document format version. Written to the `upg_version` field.
22524
22538
  * Evolves independently from `UPG_VERSION` (the catalogue version).
package/dist/index.js CHANGED
@@ -1429,6 +1429,17 @@ var UPG_EDGE_CATALOG = {
1429
1429
  bug_affects_feature: { forward_verb: "affects", reverse_verb: "affected_by", classification: "cross-domain", source_type: "bug", target_type: "feature" },
1430
1430
  roadmap_item_references_feature: { forward_verb: "references", reverse_verb: "referenced_by", classification: "cross-domain", source_type: "roadmap_item", target_type: "feature" },
1431
1431
  feature_decomposes_into_task: { forward_verb: "decomposes_into", reverse_verb: "implements", classification: "hierarchy", source_type: "feature", target_type: "task" },
1432
+ // Epic-level mirrors of the feature→task / feature→bug hierarchy (feedback
1433
+ // df99026a). A `feature` is the flat planning root, but an `epic` is a body of
1434
+ // work under it, and real imported ticket sets (Linear/Jira) carry bugs and
1435
+ // pure engineering tasks that belong to ONE epic, not the feature as a whole.
1436
+ // Without these, such tickets had to be mislabelled `user_story` (the only
1437
+ // epic child) to keep the epic grouping. These are additive twins of the
1438
+ // feature-level edges (same verbs/classification), so `pickCanonicalEdge` /
1439
+ // `resolveContainmentEdge('epic', 'task'|'bug')` and the adapter import path
1440
+ // resolve them with no further wiring.
1441
+ epic_decomposes_into_task: { forward_verb: "decomposes_into", reverse_verb: "implements", classification: "hierarchy", source_type: "epic", target_type: "task" },
1442
+ epic_affected_by_bug: { forward_verb: "affected_by", reverse_verb: "affects", classification: "hierarchy", source_type: "epic", target_type: "bug" },
1432
1443
  task_has_subtask: { forward_verb: "has_subtask", reverse_verb: "is_subtask_of", classification: "hierarchy", source_type: "task", target_type: "task" },
1433
1444
  // ── Planning cadence (0.20.0) ────────────────────────────────────────────────
1434
1445
  // The cadence axis. E1 self-nests the interval (a program-increment contains
@@ -3732,7 +3743,10 @@ var UPG_VALID_CHILDREN = {
3732
3743
  // task_implements_user_story edge.
3733
3744
  feature: ["epic", "bug", "task"],
3734
3745
  feature_area: ["feature", "feature_area"],
3735
- epic: ["user_story"],
3746
+ // epic owns user_story (the templated promise) and, mirroring feature, may
3747
+ // also directly contain bug/task — heterogeneous imported tickets that belong
3748
+ // to one epic rather than the feature as a whole (feedback df99026a).
3749
+ epic: ["user_story", "bug", "task"],
3736
3750
  user_story: ["acceptance_criterion"],
3737
3751
  task: ["task"],
3738
3752
  // planning_cycle (0.20.0): the cadence axis self-nests (a program-increment
@@ -10717,7 +10731,7 @@ var UPG_PROPERTY_SCHEMA = {
10717
10731
  },
10718
10732
  // DashboardProperties: Dashboard entity.
10719
10733
  dashboard: {
10720
- tool: { type: "string", enum: ["looker", "amplitude", "mixpanel", "posthog", "custom"], description: "Analytics tool hosting this dashboard" },
10734
+ tool: { type: "string", enum: ["looker", "amplitude", "mixpanel", "posthog", "omni", "custom"], description: "Analytics tool hosting this dashboard" },
10721
10735
  url: { type: "string", description: "URL to the live dashboard", modifier: "volatile" },
10722
10736
  audience: { type: "string", description: "Intended audience for this dashboard" },
10723
10737
  element_count: { type: "number", description: "Number of widgets or panels on the dashboard", modifier: "derived" },
@@ -22876,6 +22890,12 @@ var PRODUCT_SPEC_GUIDE = {
22876
22890
  entity_types: ["feature_area", "feature", "epic", "user_story", "task"],
22877
22891
  edge_chain: ["feature_area_contains_feature", "feature_decomposed_into_epic", "epic_specified_by_user_story", "task_implements_user_story"]
22878
22892
  },
22893
+ {
22894
+ name: "Epic Work Items",
22895
+ description: "A bug or a pure engineering/infra task that belongs to one specific epic (not the feature as a whole) attaches directly to that epic, mirroring how task and bug attach at the feature level. Use this when importing a real tracker (Linear/Jira) whose tickets are heterogeneous: keep genuine stories as user_story, but let bugs, spikes, and engineering tasks nest under their epic with their true type instead of being mislabelled to preserve the grouping.",
22896
+ entity_types: ["epic", "task", "bug"],
22897
+ edge_chain: ["epic_decomposes_into_task", "epic_affected_by_bug"]
22898
+ },
22879
22899
  {
22880
22900
  name: "Planning Cadence",
22881
22901
  description: "The cadence axis. Create a planning_cycle (a sprint, iteration, quarter, or PI), nest finer cycles inside a coarse one, schedule the stories that flow through it, and scope the objectives the cycle serves. Scheduling and scoping are deliberate links, not containment: a story keeps its feature/epic parent.",
@@ -29692,7 +29712,7 @@ function isCanonical(text) {
29692
29712
  }
29693
29713
 
29694
29714
  // src/index.ts
29695
- var UPG_VERSION = "0.22.1";
29715
+ var UPG_VERSION = "0.23.0";
29696
29716
  var UPG_FORMAT_VERSION = "0.4.0";
29697
29717
  var MARKDOWN_FORMAT_VERSION = "0.1";
29698
29718
  var UPG_TYPES = getTypes();