Skip to main content

cTrader 2132 timeout hardening

Summary​

Addressed persistent Pepperstone/cTrader order timeouts where order placement traces showed:

  • open -> 2101 -> 2103 -> 2115 -> 2117 -> 2106 sent -> 2132
  • no terminal execution event before timeout

Changes made​

1) Hardened cTrader order event handling​

Updated services/backend/src/lib/ctrader/ctrader-order.ts:

  • Increased default order placement timeout from 15000 to 30000.
  • Added explicit trace marker when 2106 order submit is sent.
  • Added handling for payload 2132 as an execution-like broker lifecycle event.
  • Added fallback behavior for non-terminal 2132:
    • if explicit error fields exist -> resolve as failed.
    • if broker returns order id but no terminal type -> resolve as open.
    • if no error and no order id -> resolve as open fallback (prevents false timeout classification).
  • Added richer trace diagnostics for unknown 2132 payload shapes.

2) Explicit timeout in Pepperstone adapter​

Updated services/backend/src/lib/brokers/pepperstone-adapter.ts:

  • placeCTraderOrder(..., timeoutMs: 30000) is now passed explicitly.

Deployments​

Deployed backend to both dev and production after each hardening pass.

  • Dev versions observed: 2f999f82-541a-4a9b-89c9-e9e7500ea8d7, 09831898-00a6-489a-afc1-872ed8823b7e, 3610e583-2e52-402d-bda2-ca109bb60bed
  • Prod versions observed: 5ac465d0-9cc7-4c29-b9cc-43ab1125a736, a9bc5bac-5103-4e94-a723-d84a0a5e412b, 631fed4b-36a5-4923-95f6-7f221a2f7e5c

Validation​

  • Backend typecheck passed after each patch.
  • Recent DB traces showed timeout duration changed to 30000ms, confirming updated code path is active.
  • Pending confirmation from fresh post-deploy decision rows that 2132 fallback path suppresses timeout errors in live flow.