{
  "format": "siebly-conformance-pack/v1",
  "id": "order-intent-chaser",
  "title": "Order Intent Chasing Conformance Pack",
  "lastReviewed": "2026-05-12",
  "canonicalArtifacts": {
    "guide": "https://siebly.io/ai/order-intent-chaser",
    "recipe": "https://siebly.io/.well-known/recipes/order-intent-chaser.json",
    "schema": "https://siebly.io/.well-known/conformance/order-intent-chaser/v1/schema.json",
    "fixtures": "https://siebly.io/.well-known/conformance/order-intent-chaser/v1/fixtures.json",
    "runner": "https://siebly.io/.well-known/conformance/order-intent-chaser/v1/runner.ts",
    "patternLibrary": "https://siebly.io/ai/patterns"
  },
  "executionChain": [
    "parent intent",
    "risk approval",
    "product/symbol scope",
    "filter trust",
    "market-data trust",
    "child order candidate",
    "child custom order ID",
    "exchange request",
    "REST acceptance",
    "private order/fill event or scoped recovery",
    "remaining quantity",
    "replace, terminal, paused, or abandoned state"
  ],
  "trustRules": [
    "Risk approval proves the parent [order intent](https://siebly.io/reference/glossary#order-intent) may be attempted; it does not prove market data is fresh, filters are hydrated, or child order state is known.",
    "REST acceptance proves only that the exchange accepted the request. The child order remains pending until private order/fill evidence or scoped recovery confirms active, filled, rejected, cancelled, or absent state.",
    "Market-data trust is independent from child-order trust. A reconnect, sequence gap, stale book, or crossed book pauses new price-changing place/amend/replace decisions even if the child order is known.",
    "Durable child-order context is separate from child-order trust. For adapters with an implemented [EXECUTION_MODE](https://siebly.io/reference/glossary#execution-mode)=DEMO, TESTNET, or LIVE submission path, store parent [order intent](https://siebly.io/reference/glossary#order-intent), local generation, scope, and request context before submission; if an app-owned child order has no context, the adapter refuses mutation unless explicit adoption is configured and tested.",
    "Partial fills update remaining quantity before any amend, cancel, replace, timeout, or abandonment decision."
  ],
  "completionGate": "Do not mark a chaser with an implemented [EXECUTION_MODE](https://siebly.io/reference/glossary#execution-mode)=DEMO, TESTNET, or LIVE submission path complete until three consecutive full intent-to-child-order review passes produce no code, tests, fixtures, or documentation changes.",
  "runnerContract": {
    "language": "typescript",
    "version": "order-intent-chaser.workflow.v1",
    "fixtureSource": "JSON fixture set with a TypeScript runner contract for local execution tests",
    "entrypoint": "https://siebly.io/.well-known/conformance/order-intent-chaser/v1/runner.ts",
    "exportedTypes": [
      "OrderIntentChaserFixture",
      "OrderIntentChaserFixtureStep",
      "OrderIntentChaserFixtureExpectation",
      "OrderIntentChaserHarness",
      "OrderIntentChaserFixtureReport",
      "runOrderIntentChaserFixtures"
    ],
    "requiredFixtureFields": [
      "name",
      "intent",
      "scope",
      "initial",
      "steps",
      "expect",
      "forbid"
    ],
    "harnessMethods": [
      "reset(initial, fixture)",
      "applyStep(step, fixture)",
      "snapshot(fixture)"
    ],
    "expectationSemantics": [
      "Object expectations are partial matches.",
      "Array expectations are containment matches that consume one observed item per expected item; an empty expected array requires an empty observed array.",
      "Primitive expectations are exact matches after stable JSON normalization.",
      "Forbidden actions are read from observed.forbiddenObserved and matched against fixture.forbid."
    ],
    "requiredObservedState": "parentIntent, marketDataTrust, childOrderTrust, remainingQuantity, state, actions, blocks, logs, and forbiddenObserved markers."
  },
  "requiredChecks": [
    "chaser_dry_run_buy_candidate_respects_limit_and_filters",
    "chaser_dry_run_sell_exit_preserves_reduce_or_close_semantics",
    "chaser_rest_acceptance_does_not_confirm_child_order_state",
    "chaser_private_fill_before_rest_acceptance_updates_remaining_quantity_once",
    "chaser_cancel_replace_waits_for_terminal_or_recovered_child_state",
    "chaser_stale_market_data_blocks_place_and_replace",
    "chaser_reconnect_requires_market_resync_before_replace",
    "chaser_partial_fill_below_minimum_abandons_or_pauses_by_policy",
    "chaser_duplicate_child_generation_is_blocked_before_exchange_call",
    "chaser_active_app_child_without_parent_context_refuses_mutation",
    "chaser_timeout_cleanup_follows_explicit_policy"
  ],
  "liveGate": [
    "[EXECUTION_MODE](https://siebly.io/reference/glossary#execution-mode)=DRY_RUN_PRIVATE is the default execution mode, where the adapter builds and logs bounded child order candidates without submitting to the exchange. Always handle incoming account state events to keep internal account state in sync with exchange state, so the system is ready to execute live if requested by the user.",
    "EXECUTION_MODE=DEMO, TESTNET, or LIVE submission requires explicit config, scoped credentials, durable child-order context, and passing [behavior-contract fixtures](https://siebly.io/reference/glossary#behavior-contract-fixture).",
    "REST acceptance is pending evidence only; private order/fill events or scoped recovery confirm active, filled, rejected, cancelled, or absent child-order state.",
    "Use fresh top-of-book or book-depth data before price-changing child order place, amend, or replace decisions. A cleanup cancel of a known app-owned child order may proceed from child-order state, timeout, or risk policy without waiting for fresh market data.",
    "EXECUTION_MODE is documented as the only execution-mode switch, with allowed values PUBLIC, READ_ONLY_PRIVATE, DRY_RUN_PRIVATE, DEMO, TESTNET, LIVE. Tests or fixtures prove PUBLIC and READ_ONLY_PRIVATE cannot build or submit exchange writes, DRY_RUN_PRIVATE builds the final request objects without calling exchange mutation endpoints, DEMO and TESTNET refuse unsupported exchange venues and can write only to the selected non-production venue, and LIVE is the only mode that can call production exchange mutation endpoints.",
    "Do not mark a chaser with an implemented [EXECUTION_MODE](https://siebly.io/reference/glossary#execution-mode)=DEMO, TESTNET, or LIVE submission path complete until three consecutive full intent-to-child-order review passes produce no code, tests, fixtures, or documentation changes."
  ]
}
