@unified-product-graph/core 0.9.18 → 0.9.19

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,23 @@ This project uses [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
8
  ---
9
9
 
10
+ ## [0.9.19] - 2026-06-11
11
+
12
+ **The tree-pattern catalogue covers every tree-shaped region, and `delivery` finally roots at the roadmap.** `get_tree` now offers 11 patterns (was 8), one per hierarchical region.
13
+
14
+ ### Changed
15
+ - **`delivery` refined.** The 0.9.17 pattern rooted at the product, not the roadmap: its child map listed `product -> roadmap`, which made the product a superset of the roadmap, so the most-nodes anchor rule chose the product even when a roadmap existed. Dropping that slot lets the roadmap win when present; the product is the fallback root (`product -> release`). Added the missing optional children `roadmap_theme -> feature_area`, `release -> changelog`, and `release -> bug`. Default depth is now 3 (a readable overview to the feature tier; `depth` extends into epic and user story).
16
+
17
+ ### Added
18
+ - **Three new tree patterns**, all-optional (browse views, no gap noise):
19
+ - **`architecture`** (anchor `service`, fallback `bounded_context`): services and the API contracts, endpoints, schemas, queues, deployments, and dependencies they own, grouped by bounded context, with domain aggregates and their members. A DAG: a schema or queue shared by several services renders once, then as a reference.
20
+ - **`journey`** (anchor `user_journey`, fallback `user_flow`): a journey over time, its phases and steps, the actions within each step, and the screens those steps surface.
21
+ - **`design_system`** (anchor `design_system`, fallback `design_component`): a design system, its components, their nested sub-components, and the design tokens they consume.
22
+
23
+ No entity, domain, region, edge, or tool-count change (entities 315, edges 980, local tools 121). The work is in the presentation layer: `UPG_TREE_PATTERNS` (8 to 11) and the pattern lists carried by both servers, the CLI, and the show-tree skill.
24
+
25
+ ---
26
+
10
27
  ## [0.9.18] - 2026-06-11
11
28
 
12
29
  **The CLI help stops drifting, and an unknown `tree` filter stops lying.** The CLI rendered `--help` from a hand-maintained table divorced from each command's own option definitions, so adding a flag silently left its help stale (that is how `tree --pattern` shipped undocumented in 0.9.17). Separately, `upg tree <unknown>` quietly rendered the whole graph mislabeled as the filter. Both are now structural.
package/dist/index.cjs CHANGED
@@ -19975,19 +19975,88 @@ var UPG_TREE_PATTERNS = [
19975
19975
  {
19976
19976
  id: "delivery",
19977
19977
  label: "Delivery roadmap",
19978
- description: "How product work is scheduled and shipped: the roadmap and its themes/items, the releases they schedule, and the features (with optional epic + user story tiers) they deliver.",
19978
+ description: "How product work is scheduled and shipped: the roadmap and its themes/items, the releases they schedule, the features (and the changelog + bugs) those releases deliver, and the feature areas a theme spans. Optional epic + user story tiers appear on request.",
19979
19979
  anchor_type: "roadmap",
19980
- fallback_anchors: ["product", "release"],
19980
+ // Fallback is the product alone: a graph with no roadmap roots at the
19981
+ // product (product -> release -> feature), reported as anchor_resolved_from:
19982
+ // roadmap. `release` is deliberately NOT a fallback root — a 32-release
19983
+ // forest would out-node the product and shadow it under the most-nodes rule.
19984
+ fallback_anchors: ["product"],
19981
19985
  child_map: {
19982
- product: [opt("roadmap"), opt("release")],
19986
+ // product holds releases directly (the delivery axis without a roadmap),
19987
+ // but NOT the roadmap: listing roadmap here made the product a superset of
19988
+ // the roadmap, so the most-nodes anchor rule rooted delivery at the product
19989
+ // even when a roadmap existed. Dropping it lets the roadmap win when present.
19990
+ product: [opt("release")],
19983
19991
  roadmap: [opt("roadmap_theme"), opt("roadmap_item"), opt("release")],
19984
- roadmap_theme: [opt("feature")],
19992
+ roadmap_theme: [opt("feature"), opt("feature_area")],
19985
19993
  roadmap_item: [opt("feature")],
19986
- release: [opt("feature")],
19994
+ release: [opt("feature"), opt("changelog"), opt("bug")],
19987
19995
  feature: [opt("epic")],
19988
19996
  epic: [opt("user_story")]
19989
19997
  },
19990
- natural_depth: 5
19998
+ // Default to 3 tiers (roadmap -> theme/item/release -> feature) for a
19999
+ // readable overview on a many-release roadmap; `depth` extends into
20000
+ // epic -> user_story.
20001
+ natural_depth: 3
20002
+ },
20003
+ {
20004
+ id: "architecture",
20005
+ label: "Architecture",
20006
+ description: "The engineering platform: services and the API contracts, endpoints, schemas, queues, deployments, and dependencies they own, grouped by bounded context, with domain aggregates and their members. A DAG (a schema or queue shared by several services renders once, then as a reference).",
20007
+ anchor_type: "service",
20008
+ fallback_anchors: ["bounded_context"],
20009
+ child_map: {
20010
+ bounded_context: [
20011
+ opt("service"),
20012
+ opt("external_api"),
20013
+ opt("data_flow"),
20014
+ opt("integration_pattern"),
20015
+ opt("code_repository"),
20016
+ opt("api_contract"),
20017
+ opt("aggregate"),
20018
+ opt("domain_event")
20019
+ ],
20020
+ service: [
20021
+ opt("api_contract"),
20022
+ opt("api_endpoint"),
20023
+ opt("database_schema"),
20024
+ opt("queue_topic"),
20025
+ opt("deployment"),
20026
+ opt("build_artifact"),
20027
+ opt("library_dependency"),
20028
+ opt("feature_flag")
20029
+ ],
20030
+ aggregate: [opt("domain_entity"), opt("value_object"), opt("command"), opt("read_model"), opt("domain_event")]
20031
+ },
20032
+ natural_depth: 3
20033
+ },
20034
+ {
20035
+ id: "journey",
20036
+ label: "User journey",
20037
+ description: "A user journey over time: its phases and steps, the actions within each step, and the screens those steps surface. Falls back to a user_flow when journeys are not yet mapped.",
20038
+ anchor_type: "user_journey",
20039
+ fallback_anchors: ["user_flow"],
20040
+ child_map: {
20041
+ user_journey: [opt("journey_phase"), opt("journey_step")],
20042
+ journey_phase: [opt("journey_step")],
20043
+ journey_step: [opt("journey_action"), opt("screen")],
20044
+ user_flow: [opt("screen")],
20045
+ screen: [opt("screen_state")]
20046
+ },
20047
+ natural_depth: 3
20048
+ },
20049
+ {
20050
+ id: "design_system",
20051
+ label: "Design system",
20052
+ description: "A design system broken into its components, their nested sub-components (atom to molecule to organism), and the design tokens they consume.",
20053
+ anchor_type: "design_system",
20054
+ fallback_anchors: ["design_component"],
20055
+ child_map: {
20056
+ design_system: [opt("design_component"), opt("design_token")],
20057
+ design_component: [opt("design_component"), opt("design_token")]
20058
+ },
20059
+ natural_depth: 3
19991
20060
  }
19992
20061
  ];
19993
20062
  var UPG_TREE_PATTERNS_BY_ID = Object.fromEntries(
@@ -28300,7 +28369,7 @@ function isCanonical(text) {
28300
28369
  }
28301
28370
 
28302
28371
  // src/index.ts
28303
- var UPG_VERSION = "0.9.18";
28372
+ var UPG_VERSION = "0.9.19";
28304
28373
  var UPG_FORMAT_VERSION = "0.4.0";
28305
28374
  var MARKDOWN_FORMAT_VERSION = "0.1";
28306
28375
  var UPG_TYPES = getTypes();