Skip to content
UPG is in early alpha. The specification is still evolving and may change between versions.
Tools/Workspace & Portfolios/create_cross_product_edge

create_cross_product_edge

Create a cross-product relationship between two entities in different products within a portfolio graph. Types: `shares_persona`, `shares_competitor`, `shares_metric`, `depends_on_product`, `cannibalises`, `succeeds`, `hosts` (host product runs the hosted product inside itself, directed host to hosted), `contributes_to` (a product strategy entity rolls up to a higher-level one, e.g. product objective → company objective; directed subordinate to superior), `rolls_up_to` (a product metric feeds a company/portfolio metric, e.g. a product KPI → a company north-star; directed feeder to feed, same-type metric → metric). For `instance_of` use `register_instance`; for `area_serves_persona` / `area_targets_market_segment` use `link_area_to_audience`.

Workspace & Portfoliosnon-atomic. Portfolio file create (if new) + edge append are separate filesystem operations.

Arguments

source_idstringrequired

Source node ID

target_idstringrequired

Target node ID

typestringrequired

Cross-product relationship type

shares_personashares_competitorshares_metricshares_jobshares_needdepends_on_productcannibalisessucceedshostscontributes_torolls_up_toproduct_implements_specificationproduct_exposes_specificationfeature_conforms_to_specificationapi_contract_speaks_specificationproduct_exposes_primitivefeature_manipulates_primitiveprimitive_stored_as_data_typepersona_delegates_to_personafeature_rivals_competitor_featurecompetitor_signal_maps_to_featurecompetitor_signal_surfaces_opportunitycompetitor_classified_as_classification_valuenode_classified_as_classification_valueproduct_pursues_outcomeproduct_targets_objectiveproduct_guided_by_visionproduct_fulfils_missionproduct_organises_around_strategic_themeproduct_stands_on_strategic_pillarproduct_invests_in_initiativeproduct_measures_with_metricoutcome_measured_by_metricobjective_achieved_through_key_resultobjective_measured_by_metrickey_result_quantified_by_metricstrategic_pillar_measured_by_metricstrategic_theme_pursues_initiativestrategic_theme_delivers_outcomestrategic_theme_measured_by_key_resultstrategic_theme_contains_objectiveinitiative_advances_key_resultinitiative_drives_outcomeproduct_expresses_brand_identityscreen_renders_design_componentscreen_markets_productscreen_targets_competitorfeature_surfaces_productfeature_uses_design_componentproduct_implements_design_systemnode_owned_by_teamnode_owned_by_departmentobjective_advances_outcomejourney_phase_realises_operating_stageobjective_depends_on_dependencydependency_blocks_objectiveobjective_defers_featureobjective_defers_capability
source_product_idstringoptional

Product ID of the source node

target_product_idstringoptional

Product ID of the target node

propertiesobjectoptional

Edge metadata, accepted only for cross-edge types declared carries_properties (e.g. feature_rivals_competitor_feature, carrying the parity assessment parity_status / quality / is_gap / assessed_on / evidence / confidence). Rejected for types that do not carry properties.

dry_runbooleanoptional

Forecast the write without mutating: returns { dry_run: true, would: create | update | unchanged, edge } and writes nothing. Use to reason about a write before running it.

supersedebooleanoptional

Classification edges only. When a classify write moves a source to a new value on a single-select axis, retire the prior same-axis edge (default true) so the source carries one current value. Set false to keep both (additive). A multi-select axis always keeps both.

Returns

Shape
{ edge, portfolio_file }

See Also