@unified-product-graph/core 0.8.10 → 0.8.12

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,6 +7,20 @@ This project uses [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
8
  ---
9
9
 
10
+ ## [0.8.12] - 2026-06-04
11
+
12
+ A co-versioned patch. The catalogue is unchanged; the fix is in the canonical serialiser.
13
+
14
+ ### Fixed
15
+ - `serializeCanonical` now reconciles the root product summary from its canonical `type: 'product'` node when one is present. The product is denormalised twice (the root `doc.product`, mirrored into the `$upg` header, and a product node sharing its id); graph edits touched the node while the root summary and header drifted (e.g. a header reading `stage: concept` while the node already said `launch`). The header, the derived summary, and the body product block now re-derive from the node's live title/description/stage on every write, with the integrity checksum kept consistent. Self-healing on the next write; root-only products are unchanged. (#1981)
16
+
17
+ ## [0.8.11] - 2026-06-03
18
+
19
+ A co-versioned patch. The catalogue, entity types, and edges are unchanged; the fix lands in `@unified-product-graph/mcp-server`.
20
+
21
+ ### Fixed
22
+ - MCP server startup no longer prints an inverted deprecation warning for canonical types. The check sourced deprecation from the historical migration union, which still lists `hypothesis` from the v0.2.8 split even though it was re-promoted to canonical-stable at v0.4.0, so graphs holding canonical `hypothesis` nodes were flagged and pointed at a deprecated type. Detection and the suggested replacement now read from entity-meta (`isDeprecatedType` / `getReplacementType`), the source of truth for current maturity. (#1976)
23
+
10
24
  ## [0.8.10] - 2026-06-03
11
25
 
12
26
  A patch release. Fixes a false-positive in framework-score validation.
package/dist/index.cjs CHANGED
@@ -25716,9 +25716,20 @@ function canonicalCrossEdge(edge) {
25716
25716
  function canonicalProduct(product) {
25717
25717
  return orderedObject(product, PRODUCT_KEY_ORDER, { forceKeys: ["id", "title"], openKeys: ["properties"] });
25718
25718
  }
25719
+ function effectiveRootProduct(doc) {
25720
+ const node = doc.nodes?.find((n) => n.type === "product" && n.id === doc.product.id);
25721
+ if (!node) return doc.product;
25722
+ return {
25723
+ ...doc.product,
25724
+ title: node.title ?? doc.product.title,
25725
+ description: node.description ?? doc.product.description,
25726
+ // A product's lifecycle status IS its stage, the same axis (grammar/lifecycles).
25727
+ stage: node.status ?? doc.product.stage
25728
+ };
25729
+ }
25719
25730
  function singleBody(doc) {
25720
25731
  return {
25721
- product: canonicalProduct(doc.product),
25732
+ product: canonicalProduct(effectiveRootProduct(doc)),
25722
25733
  nodes: sortNodes(doc.nodes ?? []).map(canonicalNode),
25723
25734
  edges: sortEdges(doc.edges ?? []).map(canonicalEdge)
25724
25735
  };
@@ -25767,7 +25778,7 @@ function buildProvenance(doc, opts) {
25767
25778
  }
25768
25779
  function serializeSingleWithHeader(doc, opts) {
25769
25780
  const body = singleBody(doc);
25770
- const product = doc.product;
25781
+ const product = effectiveRootProduct(doc);
25771
25782
  const header = {
25772
25783
  format_version: UPG_CANONICAL_FORMAT_VERSION,
25773
25784
  spec_version: doc.upg_version,
@@ -25859,7 +25870,7 @@ function isCanonical(text) {
25859
25870
  }
25860
25871
 
25861
25872
  // src/index.ts
25862
- var UPG_VERSION = "0.8.10";
25873
+ var UPG_VERSION = "0.8.12";
25863
25874
  var UPG_FORMAT_VERSION = "0.4.0";
25864
25875
  var MARKDOWN_FORMAT_VERSION = "0.1";
25865
25876
  var UPG_TYPES = getTypes();