Copy Trading Service: MVP Scope

Created by
Nazar Sabardin
Document Status
In progress
Last edited
May 13, 2026
Version
1.1  ·  previous 1.0 (2026-04-27)
Audience
Product · Business · QA · Marketing · Support
MVP Scope Proposal

Copy Trading — what ships, what doesn't.

A non-technical description of the SHIFT Copy Trading Service MVP — covering two product lines (Margin & Spot), three sizing models, the Risk Watchdog differentiator, fees, reliability, and the explicit OUT-OF-SCOPE call-outs that FE, QA and marketing must respect.

2
Product Lines
3
Sizing Models
12
Feature Areas
10+
Explicit Restrictions
Shipped
Full lifecycle live on backend — subscribe, copy, fees, risk control, statistics, withdrawals with history.
Sections §4.1 — §4.11
In flight
FE integrations: allocation modes, advanced risk settings, leader dashboard, mobile parity, close-portfolio UI.
Section §9
Out of MVP
Bot mode, advanced order types, standalone Stop, multi-currency margin, cross-pair spot, trailing stop.
Section §7
Read the full scope (below)
12 sections · changelog · sign-offs · glossary · all WHY rationales

How a leader trade reaches a follower

Two independent product lines. The leader picks the portfolio mode; the follower decides what to copy.

Margin flow
Leveraged
Mirror leveraged orders with TP/SL and slippage protection.
1
Leader places / edits an order
Market or limit. Single TP / single SL. v1.1: TP/SL edits on open positions propagate (single & batch).
2
Event lands in CT gateway
v1.1: Bull-as-inbox with SETNX deduplication (7-day window), gated by outbox_protocol_enabled.
3
Sizing model applied per follower
Progressive / Fixed / Adaptive Scaling — each with explicit, server-enforced ranges (§4.4).
4
Risk Watchdog checks
Max positions, daily loss limit, MCP threshold, max exposure cap, slippage tolerance.
5
Order propagated to follower mirror
Instrument constraints (min/max qty, price step) always applied — never an impossible order.
6
Position lifecycle + real-time PnL
GraphQL subscription pushes live PnL to the follower UI.
7
Close → fee accrual → leader credit
Idempotent fee allocation; settle scheduler credits the leader every minute. Audit log on every accrual.
Spot flow
Cash · Intent-based
Copy the INTENT to buy/sell, not the exact pair.
1
Leader places a spot order
v1.1 constraint: quote currency must equal copy_trading_spot_primary_currency (default USDT).
2
Pair check
Cross-pairs rejected with SPOT_PAIR_QUOTE_MISMATCH — leader's V4 trade is not blocked, only propagation is skipped.
3
Intent inferred
"Buy BTC with USDT" — not "buy BTC/USDT specifically". Follower trades in primary directly; no in-CT conversion step.
4
Holdings + slippage check
If the follower lacks holding for a SELL — silent skip (no spam email). Slippage tolerance applied.
5
Spot order placed for the follower
Holdings updated. v1.1: PnL bridge wired — partial WS parity with margin.
6
Statistics + closed positions
Spot stats are separate from margin. Stay denominated in primary currency.
7
Sell → realized PnL → fee
Same idempotent allocation pipeline as margin. Withdrawal cent-precision (v1.1) ensures V4 wallet stays solvent.

Feature Breakdown

Detailed view of each MVP area — what's in, what's not, and why.

1
Leader Portfolios & Catalog
SHIPPED Catalog Explorer (v1.1) §4.1
Portfolios / leader
5
Visibility
Public + Private
Search
Multi-filter + Sort
What's done
  • Create / edit portfolio (name, description, mode, min investment). Name auto-checked for profanity.
  • Public or private with 8-digit passcode for closed access.
  • Limit of 5 portfolios per leader, globally configurable.
  • Public catalog with separate margin / spot / all / favorites lists.
  • v1.1: advanced catalog — multi-filter + multi-sort + cursor pagination. FE can ship a real catalog explorer.
  • Public social links on portfolios (Twitter / Telegram / leader site) with FE warning modal.
Open scope decision

Close portfolio — BE wind-down (active → closing → archived) shipped. Fanout auto-detaches every follower; reconciler flips to archived. FE flow is not yet built. Spec at docs/frontend-close-portfolio-integration.md. Decision: ship in MVP (recommended) or defer.

2
Follower Volume Sizing — 3 Models
SHIPPED Ranges enforced (v1.1) §4.4
Progressive
(0, 1]
Fixed
> 0
Adaptive Scaling
[0, 3]
How it works
  • Progressive: volume = leader_volume × multiplier. Trusting users — scaled mirror of the leader.
  • Fixed: always a fixed notional per trade. Conservative — same risk every time.
  • Adaptive: leader_vol × (follower_equity / leader_equity) × risk. Auto-scales by balance ratio.
v1.1 fix

Ranges now enforced server-side at copy_portfolio + update_follower. Previously a class-validator chain silently let invalid values through. FE may rely on backend rejection but should mirror bounds in form validation.

v1.1 — TP/SL edit propagation

Edits to TP/SL on an existing leader position (single or batch) now copy to every follower mirror via the new MARGIN_ORDER_UPDATED path. Single-TP / single-SL constraint still applies.

3
Risk Watchdog — The Differentiator
DIFFERENTIATOR Sales: High §4.5
Tick interval
30s
MCP default
110%
DLL reset
Midnight UTC
Why it matters

On many CT platforms a follower can lose their full balance overnight. Here the system intervenes — background "guardian" running even while the follower sleeps. Marketing should lead with this.

Controls
  • Max concurrent positions (follower-set).
  • Daily loss limit — realized PnL (pause on breach, auto-reset midnight UTC).
  • Daily loss limit — unrealized PnL (pause + force-close, catches drawdowns even without new leader trades).
  • Margin Call Protection — pause near liquidation; per-follower threshold override (conservative 115%, aggressive 103%).
  • Max exposure cap (% of equity) — anti "all-in" guard.
  • Slippage protection — reject if price moved too far from leader's fill.
4
Subscriptions & Isolated Copy Wallets
SHIPPED Isolation by design §4.3 · §4.7
Templates
3 + 5 custom
Wallet per sub
Isolated
Balance cache
2 min
Lifecycle
  • One-click subscribe with amount + template (Conservative / Balanced / Aggressive + up to 5 custom).
  • Isolated copy wallet auto-created — follower's main balance is never exposed.
  • Top up / partial withdraw without unfollowing; settings editable on the fly.
  • Manual pause / resume (vacation, news events).
  • Unfollow: all positions close, funds return to MAIN wallet, tracking rows deleted.
  • Private portfolios joined via 8-digit passcode.
5
Fees & Withdrawal History
SHIPPED History + CSV (v1.1) §4.6 · §4.10
Fee model
Performance
Settle scheduler
Every 1 min
Idempotency
100%
Behaviour
  • Progressive (performance) fee — follower pays only on realized profit; loss trades incur no fee.
  • Fee groups + limits groups — admin caps maximums; discourages predatory leaders.
  • Audit log on every accrual (margin_shared_profit_logs) — support can show the follower where the money went.
  • v1.1: withdrawal precision now respects V4 cent rounding — fixes the sub-cent gap that caused TRANSACTING_ITEM_LOW_BALANCE.
  • v1.1: every leader withdraw is a row in portfolio_withdrawals; paginated dashboard widget; CSV export for finance / tax.
6
Statistics, Ranking & Real-time PnL
SHIPPED Spot WS — partial §4.2 · §4.9
Ranking refresh
Every 2 h
Min activity
≥1 trade / 30d
Margin WS PnL
Live
Score weights (catalog ranking)
  • Win rate — 25% (last 30d).
  • Follower health — 25% (how profitable followers actually are).
  • Profitability — 20% (total PnL as % of portfolio).
  • Consistency — 20% (Sharpe ratio).
  • Activity — 5% (trade count).
  • Popularity — 5% (follower count).

Only portfolios with ≥1 trade in last 30 days enter the ranking. Protects catalog from "dead" / boosted portfolios.

Coverage
  • Portfolio stats: PnL, win rate, trade count, follower count — separate margin vs spot.
  • Follower personal: PnL, fees paid (day / week / month / total).
  • Avg-follower metrics chart per portfolio ("average follower earned X").
  • Real-time margin PnL via GraphQL subscription.
  • v1.1: spot holdings PnL bridge wired — partial WS parity (was NO in v1.0).
7
Reliability & Operational Guarantees
PRODUCTION-GRADE Inbox + SETNX (v1.1) §4.11 · §6
Worker recovery
≤ 10 min
Reconciliation
Every 10 min
Dedup window
7 days
Self-healing primitives
  • Checkpoint system — worker crashes mid-propagation resume from checkpoint, not zero.
  • Reconciliation cron — every 10 min cleans orphaned rows.
  • Idempotent fee allocation — event arrives twice ⇒ follower debited exactly once.
  • Distributed locks — Postgres-based heartbeat coordination.
  • Concurrency pools — caps on concurrent V4 calls; 10 000 followers ≠ outage.
  • Two-process architecture — gateway + worker scale independently.
  • v1.1: Bull-as-inbox + SETNX — closes the loss window between RPC ACK and Bull job creation. Producer-side outbox in margin/v4 is DEFERRED — DIRA #1 — see §7.2.
Honest comms

FE / Marketing should not communicate "exactly-once" — at-least-once with rare deferrals during deploys is the honest story until producer outbox ships.

8
Notifications — Push & Email
High/Critical email only §4.8
Leader
  • New subscription / unsubscribe.
  • Profit credited.
  • Follower hit daily loss.
  • v1.1 BE: portfolio closing started / finalized; final profit credited to MAIN wallet.
Follower
  • Successful subscribe; trade copied (margin/spot); position closed in profit.
  • Daily loss limit triggered (pause + close).
  • Margin call protection triggered (pause).
  • Critical copy error (RPC reject, internal_error).
  • v1.1 BE: portfolio being closed → auto-unsubscribe; copy wallet returned with final balance summary; admin-forced close carries close_reason.

Email only for high/critical. Minor skips (e.g. "no holding to sell") are silent to avoid spam.

9
Admin & Support Tooling
Execution log · CSV reports §4.10 · §5
In Back-Office (MVP)
  • Global system settings — risk watchdog thresholds, min investment, max followers, spot quote currency, outbox toggle, enabled triggers.
  • CRUD on fee groups + limits groups (commercial terms for leaders).
  • Event logs over a period.
  • Jobs errors feed with severity (Low → Critical); BO page in QA.
  • Resolve stuck fee allocation — one-click manual recovery mutation.
  • Toggle follower status — admin pause / unpause.
  • v1.1: CSV reports — leader subscribers + portfolio withdrawals.
  • v1.1 BE: admin force-close portfolio with required close_reason. FE pending.
Intentionally NOT in BO for MVP

Richer per-portfolio overviews (live PnL, exposure, recent trades) and per-portfolio follower drill-downs (subscribers with copy wallet balance, sizing model, fees paid, risk flags). On the wishlist; deferred to post-launch once we know which views support / finance open most.

10
Margin Restrictions — Out of MVP
CRITICAL FOR FE/QA §7.3.1 — §7.3.5
Hard limits
  • Multi-tier TP / Multi-tier SL — single TP / single SL only. FE hides extra fields.
  • Advanced order types — TWAP / Iceberg / Scaled / OCO / OTO / OSO are NOT copied.
  • Standalone Stop order — NOT copied (position-level Stop Loss IS). Reason code STOP_ORDER_NOT_SUPPORTED_FOR_COPY.
  • Margin order edits — only TP/SL edits propagate. Quantity / leverage / limit-price / side-flip edits do NOT.
  • Multi-currency margin — single primary currency only. Multi-currency exists only on Nexus; not the deployment target.
Why now (not later)

Advanced order types and multi-tier TP/SL are still in active development on margin-service — wiring an in-development primitive into copy-trading multiplies edge cases by the follower count. Multi-currency: operational risks (in-flight FX, inconsistent realized profit, silent money loss) we explicitly avoid.

11
Spot Restriction — Quote-Currency Constraint
v1.1 EXPLICIT §7.3.6
Setting
spot_primary_currency
Default
USDT
Reject code
SPOT_PAIR_QUOTE_MISMATCH
Allowed vs blocked
BTC/USDT ✓ ETH/USDT ✓ AVAX/USDT ✓ SOL/USDT ✓
AVAX/BTC ✗ ETH/BTC ✗ BTC/EUR ✗ SOL/ETH ✗
Why this restriction
  • Single accounting unit — all CT spot dashboards denominated in spot primary.
  • No conversion pipeline at all — follower always trades in primary directly.
  • Cap math assumes one denomination (max exposure %, DLL, max-position counts).
  • Deepest spot liquidity on SHIFT's V4 sits on primary-currency pairs.
  • Predictable reporting — finance / tax / compliance want a single amount column.
  • Double-slippage risk — a second conversion adds a second slippage exposure.
12
Pre-launch Obligations & Open Bugs
Non-engineering blockers §9.2 · §10
Open bugs
12
Open scope decisions
3
Cross-team gates
15
Open bugs (must resolve before launch)
  • Recommended Copy fails with 500 on copyPortfolioByTemplate.
  • Duplicate orders on followers when leader reduces position with opposite order.
  • Position-flip spec clarification (leader opens opposite → 2 follower jobs).
  • Follower limit orders do not update on leader limit-price change.
  • Follower margin currency ≠ global margin currency → friendlier rejection.
  • Profit Share field format bug (decimal vs percentage).
  • Mobile partial close → closes fully instead.
  • Internal wallet remains active after unsubscribe with zero balance.
  • Scroll lock after Follower Settings modal.
  • Alignment + validation polish on stats cards and Advanced Copy/Template modals.
Non-engineering — launch blockers

Sign-off, Legal (profit-sharing in regulated jurisdictions), GTM/Marketing/Sales/Support plans & training, Finance / FinOps, Platform deployment plan, QA Test Plan signed, post-launch monitoring baseline. Tracked in the "To Think Later" lane (§10).

IN MVP / OUT OF MVP — quick reference

The matrix FE / QA / marketing should keep open while building, testing, and communicating.

CapabilityIn MVPNotes
Market & limit order copy (margin + spot)YESBaseline. With slippage protection.
Single TP / Single SLYESOne level each per position.
TP/SL edit propagation (single + batch) v1.1YESRisk-neutral edits copy to follower mirrors.
Risk Watchdog (DLL + MCP + caps)YESUnique selling point.
Performance fee + withdrawal history v1.1YESIdempotent; leader sees full history; CSV.
Real-time PnL — margin (WS)YES
Real-time PnL — spot (WS) v1.1PARTIALBridge wired; full parity with margin pending.
CSV reports (subscribers + withdrawals)YESFor finance / tax.
Multi-tier TP / Multi-tier SLNOFE hides the fields.
TWAP / Iceberg / Scaled / OCO / OTO / OSONOAdvanced orders not copied.
Standalone Stop order v1.1NOPosition-level SL is YES.
Margin order edit — qty / leverage / limit / side flipNOOnly TP/SL edits propagate.
Spot pairs with quote ≠ CT primary v1.1NOOnly USDT pairs (by default).
Cross-collateral / multi-currency marginNOPrimary currency only.
Trailing stop (CT layer) / Bot modeNONot implemented; must not appear in UI.
Leader-initiated portfolio closeBE / —FE integration is the open scope decision.
Admin force-close portfolioBE / —With close_reason. FE pending.
Strategic Summary

Backend MVP is largely feature-complete. Both product lines — margin and spot — have a full lifecycle: subscribe, copy, fee, risk control, statistics, withdrawals.

The competitive edge sits in the Risk Watchdog — daily loss limits + margin call protection ticking every 30s — that most CT platforms lack.

What's NOT in MVP is on purpose: advanced order types, multi-tier TP/SL, multi-currency margin, cross-pair spot, bot mode — each call-out is documented so FE hides it, QA skips it, marketing doesn't sell it.

The remaining work is integration polish, mobile parity, the close-portfolio FE flow, and the pre-launch non-engineering gates (legal, GTM, training, telemetry sign-off).

Jump to the full MVP scope below
All 12 sections · changelog · open bugs · pre-launch obligations · glossary
← Back to overview
v1.1 · 2026-05-13
SHIFT
MVP Scope Document

Copy Trading Service

Non-Technical reference · 12 sections · full scope, sign-offs, and glossary

Document Type
MVP Scope (Non-Technical)
Product
SHIFT Copy Trading Service
Version
1.1 | May 13, 2026
Previous
1.0 (April 27, 2026)
Owner
Nazar Sabardin | Status: In Progress
Audience
Product · Business · QA · Marketing · Support

Contents

0. Changelog vs v1.0

Two-and-a-half weeks of delivery and discovery have shifted the picture. Headlines:

1. Executive Summary

What is this product at a high level?

Copy Trading Service is a SHIFT platform product that lets some users (leaders) share their trading strategy while others (followers) automatically replicate their trades proportionally to their own capital. The service closes the gap between "I have a strategy" and "I want to trade but lack the skill": a follower picks a leader, allocates an amount, and the system mirrors every leader action in real time.

2
Product Lines
3
Sizing Models
11
Feature Subsections
10+
Explicit Restrictions

Key value

What is ALREADY working (production-ready or live)

2. User roles

RoleWho they areWhat they get
LeaderExperienced trader who created a portfolioSubscribers, performance fee on follower profits, statistics, a slot in the public ranking, withdraw-profit flow with history
FollowerUser looking for passive income exposureAutomatic copy of selected leaders' trades into an isolated copy wallet
Admin / SupportInternal staffAccess to copy journals, error monitoring, manual remediation, platform settings, CSV reports

3. Product lines in MVP

The service supports two independent product lines, both included in MVP. The leader picks the portfolio mode; the follower decides what to copy.

TypeWhat is copiedSpecial trait
Margin
leveraged
Margin orders: market and limit, with TP/SL and slippage. v1.1: TP/SL edits on existing positions and batch edits are also copied. Standalone Stop orders, qty / leverage / limit-price edits, and advanced order types are explicitly NOT copied — see §7.3.3, §7.3.4, §7.3.5. Higher reward and risk; requires margin wallets on both sides.
Spot
cash
Buying and selling crypto without leverage. Constraint: only instruments where quote currency = CT spot primary currency (e.g. primary = USDT: BTC/USDT, AVAX/USDT; NOT AVAX/BTC). See §7.3.6. Safer; "intent-based" — we copy the INTENT to buy/sell, not the exact pair.
All Leader trades both margin and spot; follower picks what to copy. Maximum flexibility; portfolio appears in both catalogs.

4. What is included in MVP — functionality

4.1 Leader portfolios

A leader creates a portfolio — their "trading strategy packaged as a product".

CapabilityStatusNotes
Create / edit portfolio (name, description, mode, min investment)DoneName auto-checked for profanity.
Public / private portfolios with 8-digit passcodeDoneFor closed access.
Limit of 5 portfolios per leaderDoneGlobally configurable.
Public portfolio catalog with filters and sortingDoneSeparate margin / spot / all / favorites lists.
Advanced catalog: multi-filter + multi-sort + pagination v1.1DoneCursor pagination. FE can ship a real catalog explorer.
Favorites — followers bookmark portfoliosDone
Public social links on portfolioDoneExternal-link warning modal in FE.
Leader profit dashboard: chart, total earned, follower countDone3-tab layout in FE (in QA).
Close portfolio (leader-initiated lifecycle end)BE done / FE pendingFull BE wind-down pipeline. FE not yet built — see §9.3 and §11.

4.2 Leader ranking and scoring

Every two hours the system recomputes the public-portfolio ranking automatically. This is KEY for marketing: natural selection happens — better leaders rise in the catalog.

Only portfolios with real activity (≥1 trade in the last 30 days) enter the ranking — protects the catalog from "dead" or boosted portfolios.

4.3 Subscribing to a leader (copy flow)

CapabilityStatusNotes
Browse the public portfolio catalogDoneSort by score, profit, follower count.
Subscribe with amount and settings (one-click for standard)DoneIsolated copy wallet auto-created.
Copy templates — Conservative / Balanced / AggressiveDone3 platform defaults + up to 5 custom per portfolio.
Subscribe to a private portfolio via passcodeDone
Top up / partial withdraw of copy wallet fundsDoneNo need to fully unfollow.
Leader: withdraw realized profit + full history v1.1DonePaginated history; CSV export.
Change settings while a copy is activeDoneSwitch copy_type, leverage, risk on the fly.
Manual pause / resume of copyingDoneUseful during vacation or news events.
Stop copying (unfollow)DoneAll positions close, funds return to MAIN wallet.

4.4 How volumes are sized for the follower (3 models)

A follower never copies a leader 1:1 by volume — capital differs. The service supports three transparent sizing models:

ModelPrincipleRange v1.1Best fit
Progressivevolume = leader_volume × multiplier(0, 1]Trusting users — scaled mirror of leader.
FixedAlways a fixed notional per trade> 0Conservative — same risk every time.
Adaptive scalingleader_vol × (follower_equity / leader_equity) × risk[0, 3]Most "fair" — auto-scales by current balance ratio.

Instrument constraints (min/max quantity, price step) are always applied — a follower never receives an impossible order.

v1.1: the 3 ranges above are now enforced server-side at both copy_portfolio and update_follower. Previously a class-validator @ValidateIf chain silently AND-combined and let invalid values through. FE may rely on backend rejection but should mirror bounds in form validation.
v1.1 (Margin): Edits to TP/SL on an existing leader position (single or batch) are now copied to every follower with an active mirror. Update flows via a new MARGIN_ORDER_UPDATED propagation path. Single-TP / single-SL constraint from §7.3.2 still applies.

4.5 Risk control — Risk Watchdog

Risk Watchdog is a background "guardian" running even while the follower sleeps. Competitive edge: on many CT platforms a follower can lose their full balance overnight — here the system intervenes.

CapabilityStatusNotes
Maximum concurrent open positions (max_positions)DoneSet by follower in advanced settings.
Daily loss limit on realized PnL — pause on breachDoneAuto-reset at midnight UTC.
Daily loss limit on unrealized PnL — pause + force-closeDoneWatchdog ticks every 30s.
Margin Call Protection (MCP) — pause near liquidation (110%)DonePause-only; does not force-close.
Per-follower MCP threshold overrideDoneConservative 115%, aggressive 103%.
Max exposure cap (% of equity)DoneAnti "all-in" guard.
Slippage protectionDoneReject if price moved too far.
v1.1 note: Asana epic "[CT] Copy Trading — Advanced Risk Settings" with subtasks (Max Positions, Daily Loss Limit, Max Exposure %, Leverage Per-Follower Override) is in Ready-For-QA — FE/UX integrations of the BE capabilities above, not new BE features. Auto Convert subtask is dropped — see §7.3.6.

4.6 Fees and profit sharing

CapabilityStatusNotes
Progressive fee — leader earns % of follower profit on closed positionsDonePerformance-based; follower pays only on realized profit.
Fee groups — configurable fee tiersDoneAdmin sets global maximums.
Limits groups — caps on follower count and max fee %DoneDiscourages predatory leaders.
Settle leader profit scheduler — auto credit to leaderDoneEvery minute; idempotent.
Audit log of all accruals (margin_shared_profit_logs)DoneEvery debit has a record.
Withdrawal precision honoring V4 cent rounding v1.1DoneEliminates sub-cent gap that caused TRANSACTING_ITEM_LOW_BALANCE.
Portfolio withdrawals table + history v1.1DoneEvery withdraw is a row; paginated dashboard widget.

4.7 Wallets

Every subscription creates a SEPARATE isolated copy wallet. This is foundational: the follower does not risk their main balance — only the amount they explicitly committed to a leader.

4.8 Notifications

Users receive push and email notifications in key scenarios:

Email is sent only for important events (high/critical). Minor skips (e.g. "no holding to sell") are NOT emailed to avoid spam.

v1.1 note: two follow-up tasks marked POST RELEASE — enabling email triggers for all users by default; migrating trigger config to global enabled_triggers. Backend is ready; toggle is operational, not feature work.

4.9 Statistics and analytics

CapabilityStatusNotes
Portfolio statistics: PnL, win rate, trade count, follower countDoneSeparate for margin and for spot.
Follower statistics: personal PnL, fees paidDonePeriods: day / week / month / total.
Leader profitability chartDoneFor the leader dashboard.
Avg-follower metrics chart per portfolioDoneFor catalog: "average follower earned X".
Real-time PnL on open margin positions (GraphQL sub)DoneNo refresh — auto-updates.
Real-time PnL bridge for spot holdings v1.1PartialBridge wired; full WS parity with margin pending. Was NO in v1.0.
Closed margin/spot positions per portfolioDoneTransparent history for leader and followers.

4.10 Execution journal & support tooling

CapabilityStatusNotes
Execution log — every copy attempt with reason_codeDoneAdmin sees exactly why a follower didn't get a trade.
Jobs errors — separate error feed with severityDoneLow / Medium / High / Critical.
Resolve stuck fee allocation — manual recoveryDoneSupport can close an incident in one click.
Audit trail — log of changes to portfolio/leader settingsDoneFor compliance and investigations.
Reports endpoint — leader→followers detail reportDoneFor finance / tax reporting.
CSV export for portfolio withdrawals report v1.1DoneNew report-query DTO + CSV builder.
CSV export error handling hardened v1.1DoneAuth resolver consolidated; CSV errors no longer leak internals.

4.11 Reliability and operational guarantees

MVP already includes a serious reliability layer — this is not a proof of concept but a production-ready system with self-healing mechanisms:

5. Admin capabilities (in MVP)

v1.1 — what is intentionally NOT in BO for MVP. Richer per-portfolio overview views (live PnL, exposure, recent trades) and per-portfolio follower drill-downs (subscribed-followers list with copy wallet balance, sizing model, fees paid, risk-status flags) are on the wishlist but explicitly NOT planned at this stage. Today's BO surface is limited to what is listed above — see §7.1 for the deferral rationale.

6. Non-functional requirements (MVP)

ParameterValueWhy it matters
Copy latencyHundreds of ms to a few seconds from leader trade to followerFollower doesn't "lag" the market.
Concurrent followers per leaderThousands without degradationA leader with 5000 subscribers doesn't break the system.
Recovery from worker crash≤ 10 minutesReconciliation cron picks up orphaned rows; v1.1 inbox de-dup makes re-delivery safe.
Fee idempotency100% (repeat event does not duplicate debit)Legal / financial safety.
API availabilityTwo processes (gateway + worker), isolated failure domainsWorker outage doesn't take API down and vice versa.
ScalabilityWorker sharding via Postgres locksAdd workers without reconfiguration.
— Phase 1 Sign-Off · Strategic Approval
By signing below, stakeholders confirm alignment on the Executive Summary, User Roles, Product Lines, Functionality, Admin Capabilities, and Non-Functional Requirements. This approves the strategic direction and authorizes proceeding into detailed scope (Section 7 onward).
Name
Role
Signature
Date

7. OUT OF SCOPE for MVP (post-launch / future)

This is not "never" — it's "explicitly NOT promised in v1.0" so we keep focus.

7.1 Not in MVP — product capabilities

7.2 Known constraints (acceptable in MVP)

FE / Marketing should NOT communicate "exactly-once" — at-least-once with rare deferrals during deploys is the honest story until producer outbox ships.

7.3 Explicit MVP limitations — critical for FE, QA, and marketing

These limitations are imposed by the fact that neither margin-service nor copy-service in v1.0 covers the full feature set of a derivatives exchange. FE must hide the corresponding UI, QA must not test these scenarios, and marketing must not communicate them as "features".

7.3.1 Single-currency constraint on margin

Margin-service in MVP runs against ONE global primary currency (default USD/USDT, configured in settings.primary_currency). This means:

Why we are not adapting to multi-currency margin in this MVP, and why we don't intend to revisit:

v1.1: Open Asana bug "Portfolio copy fails when follower margin currency differs from global margin currency" is an enforcement bug, not a feature gap — the constraint is by design; the failure mode needs a friendlier reason_code and earlier rejection. Tracked in §9.2.

7.3.2 Multi TP / Multi SL — NOT supported

In MVP each position has AT MOST one Take Profit and one Stop Loss. If the leader places a multi-step TP at margin-service (e.g. 30% at +2%, 30% at +5%, 40% at +10%), the follower gets only ONE TP/SL level.

Why: multi-tier TP/SL on margin-service is itself still under active development by the derivatives team. The feature has not yet been validated against real client traffic and has not been released to production. Wiring an in-development primitive into copy-trading — where one leader action fans out to thousands of follower mirrors — multiplies any unresolved edge case by the follower count. Once the derivatives team graduates multi-tier TP/SL to GA with confirmed production behaviour, copy-service will revisit propagation.

7.3.3 Advanced order types — NOT copied in MVP

Margin-service supports seven "advanced" order types (margin_order.advanced_type). In MVP NONE are propagated — only plain market and limit orders are copied.

TypeWhat it isCopy-service behavior
TWAPTime-Weighted Average Price — splits a large order into time-spaced slicesNOT copied; FE hides on leader form.
IcebergLarge order with only a small visible sliceNOT copied
Stop OrderTriggered at a stop price (separate from position-level stop_loss)NOT copied
Scaled OrderSeries of limit orders across a price rangeNOT copied
OCOOne-Cancels-Other — two linked orders; one fills → the other cancelsNOT copied
OTOOne-Triggers-Other — filling one activates anotherNOT copied
OSOOne-Sends-Other — composite multi-leg orderNOT copied

An order with advanced_type !== null reaches the copy-service as an event but does not trigger propagation. QA must verify that such orders are NOT copied and that the execution log carries a clear reason_code.

v1.1: Asana tickets "[Derivatives] Restrict some functionality on BE for leaders" + "Advanced derivatives orders functionality should be disabled for Leader wallets" + "[Mobile] Hide functionality on the mobile for leader wallets" reinforce this on BE and mobile FE side.

7.3.4 Margin order modifications — only TP/SL edits propagate v1.1

Margin-service permits a leader to edit several fields on an existing order or open position. In MVP, copy-service propagates only a narrow subset of those edits.

Leader-side editPropagated?Notes
TP / SL change on an open positionYES (single or batch)Shipped in v1.1 via MARGIN_ORDER_UPDATED. Risk-neutral.
Order quantity change (partial reduce, size up)NOWould require per-follower re-sizing + risk + balance re-checks. Related bug — §9.2.
Limit price change on an open limit orderNOEach follower's mirrored limit would need re-evaluation. §9.2.
Leverage change mid-tradeNOChanges follower margin requirements per position.
Side flip on an existing positionNO (handled as close + new open)Spec clarification ticket in §9.2.

Why: the v1.1 edit-propagation pipeline is scoped to risk-neutral mutations where size and exposure do NOT change on the follower side. Any edit that changes size, leverage, or open-order pricing requires a per-follower re-sizing pass (sizing model → instrument constraints → V4 price discovery → risk + balance checks) — that is a second propagation pipeline, not a small extension. Explicitly out of MVP scope.

FE: on a leader portfolio with active subscribers, edit controls for quantity / leverage / limit price should either be disabled or display a "this edit will NOT propagate to followers" warning. QA: assert via execution log that such edits produce zero follower-side propagation jobs.

7.3.5 Stop orders — explicitly restricted v1.1

"Stop Order" here means the standalone trigger-based order type from margin-service — NOT the position-level Stop Loss attached to an open position. The two are different primitives that often get conflated:

BE: if a leader places one outside CT scope, execution log carries STOP_ORDER_NOT_SUPPORTED_FOR_COPY. Marketing: do NOT communicate "conditional order copying" — Stop Loss yes, Stop Order no.

7.3.6 Spot pair constraint — quote currency must equal CT spot primary currency v1.1

Setting settings.copy_trading_spot_primary_currency (default USDT). For spot copy-trading, the leader may only place orders on instruments where the quote currency equals this setting. Cross-pairs are out of scope.

InstrumentAllowed?Reason
BTC/USDTYESQuote = USDT ✓
AVAX/USDTYESQuote = USDT ✓
ETH/USDTYESQuote = USDT ✓
SOL/USDTYESQuote = USDT ✓
AVAX/BTCNOQuote = BTC ≠ USDT
ETH/BTCNOQuote = BTC ≠ USDT
BTC/EURNOQuote = EUR ≠ USDT
SOL/ETHNOQuote = ETH ≠ USDT

Enforcement: copy-service rejects propagation with SPOT_PAIR_QUOTE_MISMATCH. The leader's own trade on V4 is not blocked — only the propagation to followers is skipped.

Why this restriction exists in MVP:

7.3.7 Frontend cleanup — derivative functionality hidden

Beyond multi TP/SL and advanced orders, the frontend must hide / disable the following for MVP:

Principle: if a feature is not propagated by copy-service, it must not appear in the UI as a "copy setting". Otherwise followers form wrong expectations and support tickets pile up.

7.3.8 Summary table — IN MVP / OUT OF MVP

CapabilityIn MVP?Notes
Market order copy (margin + spot)YESBaseline.
Limit order copy (margin + spot)YESWith slippage protection.
Single TP / Single SLYESOne level each.
TP/SL edit propagation (single + batch) v1.1YESEdits copy to follower mirrors.
Multi-tier TP / Multi-tier SLNOFE hides the fields.
TWAP / Iceberg / Scaled / OCO / OTO / OSONOAdvanced orders not copied — §7.3.3.
Standalone Stop order v1.1NOPosition-level SL is YES — §7.3.5.
Margin order edit — qty / leverage / limit price / side flip v1.1NOOnly TP/SL edits propagate — §7.3.4.
Spot pairs where quote ≠ CT spot primary v1.1NOOnly quote = primary (e.g. USDT pairs) — §7.3.6.
Cross-collateral / multi-currency marginNOPrimary currency only — §7.3.1.
Trailing stop (CT layer)NONot in backend.
Bot modeNOBlocked.
Leader-initiated portfolio close v1.1BE: YES / FE: NOFE integration is the open scope question — §4.1, §9.3.
Admin force-close portfolio v1.1BE: YES / FE: NOAdmin emergency variant — §5.
Risk Watchdog (DLL + MCP)YESUnique selling point.
Performance fee + withdrawal history v1.1YESWith idempotency.
Real-time PnL margin (WS)YES
Real-time PnL spot (WS) v1.1PARTIALBridge wired; full parity pending.
CSV reports (leader-followers + withdrawals)YESFor finance / tax.

8. Release readiness criteria

8.1 Product

8.2 QA scenarios (must pass before launch)

8.3 Operational

9. Work in flight (as of 2026-05-13)

Bridge between "scope" and "ship date". Backend MVP is largely feature-complete; the remaining work is integration, polish, mobile, and pre-launch QA.

9.1 Actively in progress

ItemOwnerNotes
[CT] SPOT integrationNazar SabardinBackend feature-complete; ongoing integration polish.
Tabs + additional info on follower dashboardVitalii PolishchukSubtask of Follower Capital & Lifecycle Management.
Allocation Modes (FE integration of 3 sizing models)Tetiana KlapchenkoBE done; FE binding to progressive / fixed / adaptive_scaling.
Backoffice: Event CopyTrading Logs PageAnastasiia HuzeiAdmin UI on top of execution log API.
Adapt all pages for mobile/tablet viewRoman LesovoyCross-cutting mobile responsiveness sweep.
[FE] Delete Portfolio Copy TemplateAnna PodolianSubtask of Copy Templates epic.
[Mobile] Nickname field missing on Profile pageAnton KovtunSubtask of Nickname Functionality.
Codebase decomposition waveBackend (arch-bot)DEC-002 / 003 / 004 / 019 still proposed. Behaviour-preserving.

9.2 Open bugs — must be resolved before launch

BugOwnerNotes
Recommended Copy fails with 500 on copyPortfolioByTemplateNazar Sabardin (INBOX 2026-05-13)Production-path bug on primary onboarding flow. Triage urgent
Duplicate orders on followers when leader reduces position with opposite orderTetiana KlapchenkoRelated to position-flip behaviour.
Position Flip Behavior — leader opens opposite → follower receives 2 jobsTetiana KlapchenkoSpec needed before fix lands.
Follower limit orders do not update when leader modifies limit priceTetiana KlapchenkoTP/SL edits ship in v1.1; limit-price edits don't yet.
Portfolio copy fails when follower margin currency differs from globalTetiana KlapchenkoEnforcement bug, §7.3.1.
Profit Share field uses incorrect format (decimal vs %)Roman LesovoyFE form bug on high-visibility field.
Follower partial position close on mobile closes fullyAnton KovtunMobile-only regression.
Internal wallet remains active after unsubscribe despite zero balanceTetiana MnoholitniaLifecycle hygiene.
Page scrolling disabled after opening Follower Settings modalRoman LesovoyFE modal bug.
Alignment issues in Statistics Cards on My Lead Trading PageTetiana MnoholitniaFE polish.
Portfolio description breaks short text on mobileAnton KovtunMobile polish.
Incorrect field validation in Advanced Copy / Create Template modalsTetiana MnoholitniaFE validation.

9.3 Backlog — explicit scope decision needed

ItemOwnerQuestion
Close Portfolio — FE integration (leader + admin force-close) BE done / FE pendingFE — owner TBDShip in MVP (recommended) or defer to v1.1 post-launch?
Advanced Portfolio Search & Multi-Sort (FE/UX integration)Anton KovtunBE shipped; FE catalog explorer in backlog.
Align Copy Trading Wallets Display with Wallets UX MOVED INTO MVP v1.1FE — owner TBDUX unification so followers don't see two divergent layouts.
Add Follower Execution Logs Page to Back OfficeNazar SabardinAPI exists; admin UI not yet.
BE Fixes v1Nazar SabardinBatched backend polish; scope TBD.
Display Copy Logs errors with user-friendly viewRoman LesovoyImproves support / leader debugging UX.
Limit nickname changes to 3 timesNazar SabardinAnti-abuse rule.
Core Telemetry & Grafana DashboardOperational readiness: needs owner.
ROI Percentage Tracking and VisualizationExternal request, planned NEXT sprint.
TP/SL logics in percentageNazar Sabardin (waiting on other teams)Margin-service dependency.
Display Email/Username as Actor in Admin Audit TrailNazar SabardinAdmin UX; waiting on other teams.
[Mobile] Save CT subpages in local storeAnton KovtunMobile UX.

9.4 Post-MVP / Post-release (explicitly deferred)

10. Pre-launch obligations (non-engineering)

These items live in the "To Think Later" lane on the Asana board. They are NOT engineering blockers but ARE launch blockers. Without owners and dates, "ship date" is undefined regardless of the engineering status.

ItemDisciplineSuggested owner
Sign-Off for LaunchProduct / LeadershipProduct lead
Consult with Legal on launch requirements (esp. profit-sharing in regulated jurisdictions — §11)LegalCompliance
Document user flows and flow diagramsProduct / UXProduct lead
File PRD and GTM Plan in correct databasesProductProduct lead
Work with Marketing on Launch DateMarketingMarketing lead
Consult with Marketing on Marketing PlanMarketingMarketing lead
Create Sales-Marketing CollateralMarketing / SalesMarketing lead
Consult with CS and Sales on Sales PlanSales / CSSales lead
Consult with Support on issue routing & trainingSupportSupport lead
Consult with Finance on required FinOps actFinanceFinance lead
Consult with Platform Engineering on Deployment PlanPlatformPlatform lead
Train relevant teams as defined by GTM & Ops PlanCross-functionalProduct / GTM lead
Provide Fully Featured Demo to SalesProduct / EngineeringProduct + Nazar
QA Test Cases in TestRail; QA Test Plan signedQAQA lead
Monitoring Performance & Collecting Data (post-launch baseline)Engineering / ProductNazar + Product

11. Risks & open business questions

Risk / questionWhat it meansSuggestion
Hot market: thousands of followers × dozens of leadersPossible load spike on V4 and margin RPCConcurrency pools already exist; before launch — load testing with production-like data.
Premature close on daily lossWatchdog closes a position at the bottom; price reboundsBy design: the follower set the limit. Marketing must communicate this clearly.
Fee groups pricing policyCurrently 0–100% — needs a product policyRecommend a 10–30% corridor at launch.
Leader verificationAnyone can become a leader — reputation riskOut of MVP; mitigated by score (no trades → not in catalog).
Legal status of "profit sharing"Some jurisdictions may treat it as an investment serviceCompliance review before public launch — §10.
v1.1 Producer-side outbox debt in margin/vakotradeSocket-flap windows can drop events silently (§7.2)Ship MVP with reconciliation as safety net; producer outbox as first post-launch cross-repo work.
v1.1 Architectural decomposition regression risk~13 refactor PRs merged 2-3 May; behaviour-preserving but high blast radiusDedicated regression sweep on copy / fee / risk flows before public launch (§8.3).

12. Glossary

TermMeaning
LeaderUser who created a portfolio and trades — their orders are copied.
FollowerUser who subscribed to a leader's portfolio.
Portfolio"Container" of a leader's trading strategy: mode (margin/spot/all), fees, limits.
Copy walletSeparate isolated wallet under one specific subscription.
MarginLeveraged trading; higher reward and risk.
SpotCash buy/sell of an asset without leverage.
PropagationProcess of copying one leader order into N follower orders.
Daily Loss Limit (DLL)Daily loss cap for the follower; on breach, copying is paused.
Margin Call Protection (MCP)Liquidation safeguard; pause when margin level approaches the threshold.
SlippageAcceptable deviation between the follower's fill price and the leader's price.
ScorePortfolio ranking value for the catalog (0–1).
Progressive feeLeader's fee taken from follower's realized profit (performance fee).
Execution logJournal of every copy attempt with a reason_code.
Outbox / Inbox v1.1Resilience pattern: producer durably queues outbound events (outbox); consumer durably queues inbound and deduplicates (inbox). Reduces "silent event loss" during deploys / socket flaps.
DIRA v1.1"Distributed Reliability Anomaly" — internal shorthand for cross-service event-delivery gaps. DIRA #1 = producer-side outbox gap; post-launch work.
— Phase 2 Sign-Off · Launch Approval
By signing below, stakeholders confirm review of OUT-OF-SCOPE limitations, release readiness criteria, work-in-flight status, open bugs, pre-launch obligations, risks, and glossary. This approves the launch plan as currently scoped and authorizes release once §8 criteria are met.
Name
Role
Signature
Date