get_portfolio_tree
Assemble a portfolio-grain tree from `.upg/portfolio.upg` (the portfolio complement to `get_tree`, which is product-scoped). `shape: "landscape"` (default) walks the shared classification registry and the `*_classified_as_classification_value` cross edges: classification axis to its values to the nodes classified at each value, every leaf carrying `confidence` / `assessed_on`; anchor at one axis or value with `from_id`, or omit for the whole portfolio. `shape: "competitor_profile"` returns one node (a competitor) and its position on every axis it has been graded against; `from_id` required. `shape: "structure"` returns the org chart from the portfolio DOCUMENT FIELDS (organisation to product areas / portfolios to their member products, nested), no graph traversal; areas are the ownership axis and portfolios the strategic axis, so a product can appear under both. Titles resolve to entity names (e.g. "Directus"), not opaque ids. Values with no wired axis surface under an `unaxed` bucket. Read-only.
Arguments
shapestringoptionallandscape (axis to value to classified members, default), competitor_profile (one node to its per-axis positions), or structure (org to areas / portfolios to products, from document fields).
from_idstringoptionalAnchor node id (qualified or bare). Optional for landscape (a classification axis or value); required for competitor_profile (the node to profile).
include_propertiesarrayoptionalClassification-edge property keys to inline on each leaf, in addition to the always-included confidence / assessed_on.
include_membersbooleanoptionalLandscape only. Force classified members to inline on the whole-portfolio overview (counts-only by default). Subject to the payload guard.
Returns
JSON: the landscape or profile structure (see the SDK shapes).