list_portfolio_cross_edges
List cross-product edges stored in the portfolio document (`.upg/portfolio.upg`), optionally filtered, grouped, title-resolved, property-projected, freshness-filtered, and paginated. Empty list when the portfolio document is absent. Use `type` + `group_by` to read a focused comparison matrix; `resolve_titles` (default on) names entities ("Sitecore") instead of opaque ids; `property_include` trims heavy edge properties; `older_than_days` / `assessed_before` return the stale set (edges whose assessed_on is old or absent); `limit` / `offset` page the flat list. For the nested axis to value to members view use `get_portfolio_tree`.
Arguments
typestringoptionalFilter to one cross-edge type (e.g. competitor_classified_as_classification_value).
source_product_idstringoptionalFilter to edges whose source node is in this product.
group_bystringoptionalGroup edges by source or target endpoint (the comparison matrix) instead of a flat list.
resolve_titlesbooleanoptionalAdd source_title / target_title to each edge, resolved from the registry and instance_of registrations. Default true.
property_includearrayoptionalKeep only these keys of each edge properties object (e.g. ["confidence"]). Pass [] to drop properties entirely.
older_than_daysnumberoptionalFreshness filter: keep only edges whose properties.assessed_on is older than this many days (the stale set). An edge with no assessed_on counts as stale. Wins over assessed_before.
assessed_beforestringoptionalFreshness filter: keep only edges assessed before this ISO date (e.g. 2026-06-15). An edge with no assessed_on counts as stale.
limitnumberoptionalMax edges to return in the flat list (ignored when group_by is set).
offsetnumberoptionalSkip this many edges before the page (flat list only).
Returns
JSON: flat { cross_edges, total, returned, offset?, has_more?, portfolio_file? }, or when grouped { grouped_by, groups, total, group_count }.