@unified-product-graph/core 0.9.7 → 0.9.8

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 CHANGED
@@ -7,9 +7,28 @@ This project uses [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
8
  ---
9
9
 
10
+ ## [0.9.8] - 2026-06-10
11
+
12
+ **Registry lifecycle + portfolio-tier audience and metric edges (batch 5).** Closes the lifecycle gaps found while standing up a real shared-entity registry: canonicals can now be edited, batch-created, and promoted from existing nodes; deliberate name divergences can be sanctioned; and two new portfolio edges connect the org axis to its audience and complete the measurement cascade.
13
+
14
+ ### Added
15
+ - **Three cross-edge types** (`UPG_CROSS_EDGE_TYPES` 9 to 12): `area_serves_persona` and `area_targets_market_segment` (a `product_area` to a canonical registry persona / market_segment, carrying optional primary/secondary `relevance` and an `audience_role`), and `rolls_up_to` (a product metric feeds a company/portfolio metric: the measurement cascade, mirroring `contributes_to` for the OKR cascade).
16
+ - **Optional `UPGCrossEdge` qualifiers**: `alias` (sanction a deliberate instance title divergence), `relevance`, and `audience_role`. The canonical serialiser round-trips all three.
17
+ - **Five MCP tools** (113 to 118): `update_canonical_entity` (edit a canonical without disturbing its instances), `batch_define_canonical_entity` and `batch_register_instance` (atomic registry stand-up), `promote_to_canonical` (lift an existing node into the registry), and `link_area_to_audience` (create the area audience edges with qualifiers).
18
+ - **`get_node` resolves `registry/{id}`**: registry entities are first-class for reads, returning the canonical plus its instances.
19
+
20
+ ### Changed
21
+ - **`register_instance` accepts `alias`**, and `portfolio_validate`'s `registry_drift` honours it: a sanctioned divergence leaves the drift count (a new `sanctioned` tally), so `clean: true` means "no unexpected drift".
22
+ - **`create_edge` / `batch_create_edges` error hints**: a `p_` product-header id used where an in-graph node id is expected returns a targeted identity error, and an unknown explicit edge type returns a `did_you_mean` resolved from the endpoint types.
23
+ - **Generic `create_cross_product_edge`** accepts `rolls_up_to` and rejects the registry/area edge types (directing to `register_instance` / `link_area_to_audience`).
24
+
25
+ No entity, domain, or within-product edge-catalogue count change. The area-anchored edges carry a portfolio `product_area` id as their source: the only cross-edge source that is not a `{product_id}/{node_id}` pair.
26
+
27
+ ---
28
+
10
29
  ## [0.9.7] - 2026-06-10
11
30
 
12
- **Domain-wiring remediation (UPG-666 epic, passes F1–F8) + saturated-fixture refresh.** A spec-integrity hardening cut: eight remediation passes from the 36-domain wiring audit, each shipping its own machine-checkable gate so the class of drift it fixes cannot silently recur. No new tools and no breaking API surface — additive edges/properties plus integrity gates. Audit ledger: `TPC-context/upg/07-initiatives/domain-wiring-audit/`.
31
+ **Domain-wiring remediation (passes F1–F8) + saturated-fixture refresh.** A spec-integrity hardening cut: eight remediation passes from a 36-domain wiring audit, each shipping its own machine-checkable gate so the class of drift it fixes cannot silently recur. No new tools and no breaking API surface — additive edges/properties plus integrity gates.
13
32
 
14
33
  ### Added
15
34
  - **Region/manifest integrity gate** (F1): `region-integrity.test.ts` proves the 10 canonical regions cover every active entity type exactly once, with the Nucleus tier explicitly exempt via `NUCLEUS_DOMAINS` / `SHARED_TYPES`. Reconciles all 10 region rosters against the domain registry (un-orphaning the entities that had drifted out of their region — the P-H pattern) and corrects 7 phantom intra/boundary edge references. Decisions: `2026-06-10-nucleus-region-exemption.md` plus three model-reconciliation ADRs.
package/dist/index.cjs CHANGED
@@ -3086,7 +3086,10 @@ var UPG_CROSS_EDGE_TYPES = [
3086
3086
  "succeeds",
3087
3087
  "hosts",
3088
3088
  "contributes_to",
3089
- "instance_of"
3089
+ "instance_of",
3090
+ "area_serves_persona",
3091
+ "area_targets_market_segment",
3092
+ "rolls_up_to"
3090
3093
  ];
3091
3094
  var REGISTRY_PRODUCT_ID = "registry";
3092
3095
 
@@ -26795,7 +26798,7 @@ var NODE_KEY_ORDER = [
26795
26798
  "properties"
26796
26799
  ];
26797
26800
  var EDGE_KEY_ORDER = ["id", "source", "target", "type", "mapping_confidence", "properties"];
26798
- var CROSS_EDGE_KEY_ORDER = ["id", "source", "target", "type", "source_product_id", "target_product_id", "mapping_confidence"];
26801
+ var CROSS_EDGE_KEY_ORDER = ["id", "source", "target", "type", "source_product_id", "target_product_id", "mapping_confidence", "alias", "relevance", "audience_role"];
26799
26802
  var PRODUCT_KEY_ORDER = ["id", "title", "description", "stage", "properties"];
26800
26803
  function canonicalNode(node) {
26801
26804
  const repaired = repairNodeDrift(node);
@@ -26988,7 +26991,7 @@ function isCanonical(text) {
26988
26991
  }
26989
26992
 
26990
26993
  // src/index.ts
26991
- var UPG_VERSION = "0.9.7";
26994
+ var UPG_VERSION = "0.9.8";
26992
26995
  var UPG_FORMAT_VERSION = "0.4.0";
26993
26996
  var MARKDOWN_FORMAT_VERSION = "0.1";
26994
26997
  var UPG_TYPES = getTypes();