{
  "format": "siebly-conformance-pack/v1",
  "id": "bybit-position-manager",
  "title": "Bybit Manual Position Manager Conformance Pack",
  "lastReviewed": "2026-05-01",
  "package": {
    "ecosystem": "npm",
    "name": "bybit-api",
    "install": "npm install bybit-api",
    "versionPolicy": "Use the latest available bybit-api package in the generated project. Record the installed version for source verification only."
  },
  "canonicalArtifacts": {
    "manifest": "https://siebly.io/.well-known/agent-manifests/bybit-position-manager/latest.json",
    "integrationKit": "https://siebly.io/.well-known/integration-kits/bybit-position-manager/latest.json",
    "recipe": "https://siebly.io/.well-known/recipes/bybit-position-manager.json",
    "guide": "https://siebly.io/ai/position-manager/bybit",
    "bybitTutorial": "https://siebly.io/sdk/bybit/javascript/tutorial"
  },
  "schema": {
    "fixture": {
      "name": "string",
      "category": "spot | linear | inverse | multi",
      "given": "hydration snapshots, private events, in-memory state, intents, or REST responses",
      "expect": "planner outputs, REST calls, state transitions, log markers, active counts, and blocked actions"
    }
  },
  "criticalLiveConformance": {
    "mustPassBeforeLive": [
      "bybit_manual_open_reacts_without_timer",
      "bybit_retcode_nonzero_aborts_batch",
      "bybit_conditional_sl_requires_trigger_direction",
      "bybit_hydrated_defaults_do_not_churn",
      "bybit_duplicate_order_link_id_preflights_batch",
      "bybit_accepted_submissions_settle_to_zero_intents",
      "bybit_deferred_replan_owner_only",
      "bybit_private_stream_exception_prevents_service_ready"
    ],
    "mustLogFields": [
      "event",
      "category",
      "symbol",
      "positionIdx",
      "intentCount",
      "activeOrders",
      "bufferedEventCount",
      "readiness",
      "retCode",
      "orderLinkId"
    ],
    "mustNeverLogRawFields": [
      "apiKey",
      "apiSecret",
      "signature",
      "signedUrl",
      "websocketUrl",
      "rawOrderIntent",
      "rawPrivatePayload"
    ]
  },
  "fixtures": [
    {
      "name": "bybit_manual_open_reacts_without_timer",
      "category": "linear",
      "given": {
        "initialHydration": {
          "positions": [],
          "activeOrders": [],
          "instruments": [
            {
              "symbol": "BTCUSDT",
              "tickSize": "0.1",
              "qtyStep": "0.001"
            }
          ]
        },
        "events": [
          {
            "topic": "execution",
            "symbol": "BTCUSDT",
            "category": "linear"
          },
          {
            "topic": "position",
            "symbol": "BTCUSDT",
            "positionIdx": 0,
            "size": "0.01"
          }
        ],
        "postEventHydration": {
          "positions": [
            {
              "symbol": "BTCUSDT",
              "positionIdx": 0,
              "side": "Buy",
              "size": "0.01"
            }
          ],
          "activeOrders": []
        }
      },
      "expect": {
        "scheduledDelayMs": 0,
        "firstIntentRoles": [
          "SL",
          "TP",
          "DCA"
        ],
        "noTimerWait": true
      }
    },
    {
      "name": "bybit_retcode_nonzero_aborts_batch",
      "category": "linear",
      "given": {
        "batch": [
          {
            "action": "place",
            "role": "SL",
            "orderLinkId": "pm-btc-l-sl-e1-g0"
          },
          {
            "action": "place",
            "role": "TP",
            "orderLinkId": "pm-btc-l-tp-e1-g0"
          },
          {
            "action": "place",
            "role": "DCA",
            "orderLinkId": "pm-btc-l-dca1-e1-g0"
          }
        ],
        "firstResponse": {
          "retCode": 110092,
          "retMsg": "expect Rising, but trigger_price",
          "result": {}
        }
      },
      "expect": {
        "exchangeCalls": 1,
        "batchAborted": true,
        "productPaused": true,
        "structuredRetCodeLogged": true
      }
    },
    {
      "name": "bybit_conditional_sl_requires_trigger_direction",
      "category": "linear",
      "given": {
        "longStopIntent": {
          "side": "Sell",
          "triggerPrice": "95000.0",
          "currentPrice": "100000.0",
          "positionIdx": 0
        },
        "requestWithoutTriggerDirection": true
      },
      "expect": {
        "localValidationFails": true,
        "correctedTriggerDirection": 2,
        "correctedOrderFilter": "StopOrder",
        "correctedCloseOnTrigger": true
      }
    },
    {
      "name": "bybit_hydrated_defaults_do_not_churn",
      "category": "linear",
      "given": {
        "desiredOrders": [
          {
            "role": "TP",
            "orderLinkId": "pm-btc-l-tp-e1-g0",
            "price": "105000",
            "qty": "0.01"
          },
          {
            "role": "DCA",
            "orderLinkId": "pm-btc-l-dca1-e1-g0",
            "price": "97000",
            "qty": "0.005"
          }
        ],
        "hydratedActiveOrders": [
          {
            "orderLinkId": "pm-btc-l-tp-e1-g0",
            "price": "105000.0",
            "qty": "0.010",
            "reduceOnly": false,
            "closeOnTrigger": false,
            "triggerPrice": "",
            "triggerDirection": 0
          },
          {
            "orderLinkId": "pm-btc-l-dca1-e1-g0",
            "price": "97000.0",
            "qty": "0.005",
            "reduceOnly": false,
            "closeOnTrigger": false,
            "triggerPrice": ""
          }
        ]
      },
      "expect": {
        "cancelIntents": 0,
        "placeIntents": 0,
        "plannerIntentCount": 0
      }
    },
    {
      "name": "bybit_duplicate_order_link_id_preflights_batch",
      "category": "linear",
      "given": {
        "recentlyAcceptedOrderLinkIds": [
          "pm-btc-l-sl-e1-g0"
        ],
        "batch": [
          {
            "action": "cancel",
            "orderLinkId": "pm-btc-l-sl-e1-g0"
          },
          {
            "action": "place",
            "orderLinkId": "pm-btc-l-sl-e1-g0"
          }
        ]
      },
      "expect": {
        "preflightFailsBeforeExchangeCall": true,
        "exchangeSubmitCalls": 0,
        "pauseReason": "duplicate_order_link_id_guard"
      }
    },
    {
      "name": "bybit_accepted_submissions_settle_to_zero_intents",
      "category": "linear",
      "given": {
        "acceptedResponses": [
          {
            "retCode": 0,
            "result": {
              "orderLinkId": "pm-btc-l-sl-e1-g0"
            }
          },
          {
            "retCode": 0,
            "result": {
              "orderLinkId": "pm-btc-l-tp-e1-g0"
            }
          },
          {
            "retCode": 0,
            "result": {
              "orderLinkId": "pm-btc-l-dca1-e1-g0"
            }
          }
        ],
        "nextHydration": {
          "activeOrders": [
            {
              "role": "SL",
              "orderLinkId": "pm-btc-l-sl-e1-g0",
              "orderFilter": "StopOrder"
            },
            {
              "role": "TP",
              "orderLinkId": "pm-btc-l-tp-e1-g0"
            },
            {
              "role": "DCA",
              "orderLinkId": "pm-btc-l-dca1-e1-g0"
            }
          ]
        }
      },
      "expect": {
        "activeOrders": 3,
        "plannerIntentCount": 0,
        "provisionalInserted": true
      }
    },
    {
      "name": "bybit_deferred_replan_owner_only",
      "category": "linear",
      "given": {
        "workflowOwnerActive": true,
        "incomingReasons": [
          "private_order",
          "private_execution",
          "subscription_response",
          "timer"
        ]
      },
      "expect": {
        "nonOwnerStarts": 0,
        "boundedReasons": true,
        "recursiveReasonStrings": false,
        "deferredReconcileRunsAfterOwner": 1
      }
    },
    {
      "name": "bybit_private_stream_exception_prevents_service_ready",
      "category": "linear",
      "given": {
        "requiredPrivateStream": true,
        "websocketEvent": {
          "event": "exception",
          "topic": "private"
        }
      },
      "expect": {
        "serviceReadyLogged": false,
        "productPaused": true,
        "liveSubmissionEnabled": false
      }
    }
  ],
  "finalAcceptanceGate": [
    "SOURCE_VERIFICATION.md records the latest installed SDK version as metadata plus exact declarations inspected.",
    "A local checklist generated from the manifest is completed before demo/live execution.",
    "Critical fixtures from this conformance pack pass before live-capable submission is enabled.",
    "retCode handling, triggerDirection, hydrated default normalization, owner-only deferred replans, and duplicate orderLinkId preflight have direct tests.",
    "Demo/live order placement remains disabled until explicit user configuration and reviewed code."
  ]
}
