create_parity_edge
Create the parity / rivalry edge `feature_rivals_competitor_feature` from our `feature` to a `competitor_feature`, carrying the assessment (parity_status / quality / is_gap / assessed_on / evidence / confidence) as edge metadata. A typed convenience over the generic edge writers: it fixes the edge type, validates the parity enums, derives `is_gap` from `parity_status` when omitted, and routes automatically. Within the active graph it writes a catalogue edge (like `create_edge`); cross-product (their `competitor_feature` in a separate watched intelligence graph) it writes a cross-edge (like `create_cross_product_edge`), with the our-side product defaulting to the active product. The edge is authoritative; the node `parity_status` is a denormalised single-rival cache that `validate_graph` checks for divergence.
Arguments
feature_idstringrequiredOur feature node id (the rivalry edge source). Bare, or {product_id}/{node_id} in cross mode.
competitor_feature_idstringrequiredTheir competitor_feature node id (the target). Bare for within-graph, or {product_id}/{node_id} for a competitor in a separate watched graph.
parity_statusstringrequiredOur standing versus theirs on this feature.
qualitystringoptionalRelative quality of our equivalent.
is_gapbooleanoptionalGap in our offering. Defaults to true when parity_status is behind or unique_to_them.
assessed_onstringoptionalISO date the assessment was made.
evidencestringoptionalFree text, or an evidence / competitor_signal node id backing the assessment.
confidencestringoptionalConfidence in the assessment.
feature_product_idstringoptionalCross mode: product id of our feature (defaults to the active product).
competitor_product_idstringoptionalCross mode: product id of the watched graph holding the competitor_feature.
auto_create_portfoliobooleanoptionalCross mode only: create an empty portfolio document if none exists (default false).
Returns
JSON: the created edge (within-graph create_edge shape, or the cross-product { edge, portfolio_file } shape).