create_portfolio_variant
Deep-copy a source chat or deployed portfolio into a new ChatPortfolio with fresh strategy IDs. Omit patches for a clone-only draft, or apply JSON-Pointer patches (replace/add/remove) for surgical edits. Atomic: unresolved patch paths are hard errors. dry_run validates without persisting. Zero research token cost.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Required new portfolio name. | |
| dry_run | No | true → resolve + diff + validate, persist nothing. | |
| patches | No | Optional RFC6902-style ops against canonical IPortfolio JSON. Omit or pass [] for an exact semantic clone. Sizing fields are action-type-specific: DynamicRebalance uses /strategies/N/action/deploymentPercent (0–100 number); RebalanceOption uses /strategies/N/action/totalBudget/amount. Do not patch totalBudget onto DynamicRebalance or deploymentPercent onto RebalanceOption. | |
| source_portfolio_id | Yes | Source portfolio ID (live, paper, or chat) to deep-copy. |