{
  "label": "Synthetic offline price-gate verification; not live execution, Paper Account activity, or performance",
  "fixture_observed_at": "2026-09-09T12:00:00Z",
  "generated_at": "2026-09-16T06:21:54.753175+00:00",
  "scope": "Tests the actual price qualification evaluator against injected quotes. Does not evaluate close-time lookup, market resolution, order fills, or account execution.",
  "records": [
    {
      "recipe_id": "paper-limit-hold",
      "recipe_version": 1,
      "parameters": {
        "ticker": "KXRECIPE-26SEP09-DEMO",
        "side": "YES",
        "within_minutes": 60,
        "price_cents": 50,
        "quantity": 1
      },
      "tree": {
        "nl": "Fixed-market rule for exactly KXRECIPE-26SEP09-DEMO, YES side; Paper mode only when created. No rolling market selection.\nOn an engine evaluation within 60 minutes before market close, continue only when YES ask is at or below 50 cents.\nSubmit a simulated ordinary GTC limit buy for 1 contract(s) at 50 cents. It may fill immediately or rest; it is not post-only. Existing account and execution checks still apply.\nHold any filled position to settlement. No stop-loss, take-profit, or timed exit is added.\nKeep one open position at a time. After a position closes, another entry may occur if the conditions still hold and the five-minute action cooldown has elapsed. This is not a one-order lifetime limit.\nCreating this draft does not start it, verify market availability, fund an account, or send orders. Review it in Builder; starting Paper still requires Kalshi keys and a funded Paper Account.",
        "nl_summary": "",
        "dry_run": true,
        "cooldown_seconds": 300,
        "reentry_wait_seconds": 0,
        "nodes": [
          {
            "id": 1,
            "kind": "trigger",
            "type": "time_to_close",
            "label": "Within the selected close window",
            "settings": [
              {
                "k": "market",
                "v": "KXRECIPE-26SEP09-DEMO"
              },
              {
                "k": "within",
                "v": "60 min"
              }
            ]
          },
          {
            "id": 2,
            "kind": "market",
            "type": "series_market",
            "label": "The exact selected contract",
            "settings": [
              {
                "k": "series",
                "v": "KXRECIPE-26SEP09-DEMO"
              },
              {
                "k": "side",
                "v": "YES"
              }
            ]
          },
          {
            "id": 3,
            "kind": "qualification",
            "type": "price_check",
            "label": "Selected ask at or below threshold",
            "settings": [
              {
                "k": "field",
                "v": "ask"
              },
              {
                "k": "op",
                "v": "<="
              },
              {
                "k": "value",
                "v": "50"
              }
            ]
          },
          {
            "id": 4,
            "kind": "action",
            "type": "limit_buy",
            "label": "Paper limit buy",
            "settings": [
              {
                "k": "side",
                "v": "YES"
              },
              {
                "k": "qty",
                "v": "1"
              },
              {
                "k": "price_cap",
                "v": "50"
              },
              {
                "k": "execution",
                "v": "resting"
              },
              {
                "k": "tif",
                "v": "GTC"
              },
              {
                "k": "reentry",
                "v": "single"
              },
              {
                "k": "exit_style",
                "v": "none"
              },
              {
                "k": "execution_policy_version",
                "v": "2"
              },
              {
                "k": "post_only",
                "v": "false"
              },
              {
                "k": "cancel_order_on_pause",
                "v": "true"
              }
            ]
          }
        ],
        "edges": [
          [
            1,
            2
          ],
          [
            2,
            3
          ],
          [
            3,
            4
          ]
        ]
      },
      "tree_fingerprint": "341f1e22c632409f1c5a30f965e60488432b77c5598a73aa6f5543f9f75e4cc1",
      "payload_sha256": "736c37abe5f04ee7ddff8948aa100bbf1504895f4aa5f25b9c7ff16b2c0925a3",
      "node_id": 3,
      "evaluator": "bot_engine.bot_runner._price_check_evaluate",
      "observed_quotes_cents": {
        "yes_ask": 55,
        "yes_bid": 54,
        "no_ask": 46,
        "no_bid": 45
      },
      "output": {
        "passed": false,
        "outcome": "condition_false",
        "detail": "yes_ask 55¢ <= 50¢ → block",
        "error_code": null,
        "data": {}
      },
      "orders_submitted": 0
    },
    {
      "recipe_id": "paper-limit-take-profit",
      "recipe_version": 1,
      "parameters": {
        "ticker": "KXRECIPE-26SEP09-DEMO",
        "side": "YES",
        "within_minutes": 60,
        "price_cents": 50,
        "quantity": 1,
        "exit_cents": 60
      },
      "tree": {
        "nl": "Fixed-market rule for exactly KXRECIPE-26SEP09-DEMO, YES side; Paper mode only when created. No rolling market selection.\nOn an engine evaluation within 60 minutes before market close, continue only when YES ask is at or below 50 cents.\nSubmit a simulated ordinary GTC limit buy for 1 contract(s) at 50 cents. It may fill immediately or rest; it is not post-only. Existing account and execution checks still apply.\nAfter an entry, place its simulated GTC sell at 60 cents. No stop-loss or timed exit is added; an unfilled exit leaves the position open to settlement.\nKeep one open position at a time. After a position closes, another entry may occur if the conditions still hold and the five-minute action cooldown has elapsed. This is not a one-order lifetime limit.\nCreating this draft does not start it, verify market availability, fund an account, or send orders. Review it in Builder; starting Paper still requires Kalshi keys and a funded Paper Account.",
        "nl_summary": "",
        "dry_run": true,
        "cooldown_seconds": 300,
        "reentry_wait_seconds": 0,
        "nodes": [
          {
            "id": 1,
            "kind": "trigger",
            "type": "time_to_close",
            "label": "Within the selected close window",
            "settings": [
              {
                "k": "market",
                "v": "KXRECIPE-26SEP09-DEMO"
              },
              {
                "k": "within",
                "v": "60 min"
              }
            ]
          },
          {
            "id": 2,
            "kind": "market",
            "type": "series_market",
            "label": "The exact selected contract",
            "settings": [
              {
                "k": "series",
                "v": "KXRECIPE-26SEP09-DEMO"
              },
              {
                "k": "side",
                "v": "YES"
              }
            ]
          },
          {
            "id": 3,
            "kind": "qualification",
            "type": "price_check",
            "label": "Selected ask at or below threshold",
            "settings": [
              {
                "k": "field",
                "v": "ask"
              },
              {
                "k": "op",
                "v": "<="
              },
              {
                "k": "value",
                "v": "50"
              }
            ]
          },
          {
            "id": 4,
            "kind": "action",
            "type": "limit_buy",
            "label": "Paper limit buy",
            "settings": [
              {
                "k": "side",
                "v": "YES"
              },
              {
                "k": "qty",
                "v": "1"
              },
              {
                "k": "price_cap",
                "v": "50"
              },
              {
                "k": "execution",
                "v": "resting"
              },
              {
                "k": "tif",
                "v": "GTC"
              },
              {
                "k": "reentry",
                "v": "single"
              },
              {
                "k": "exit_style",
                "v": "resting"
              },
              {
                "k": "exit_limit_cents",
                "v": "60"
              },
              {
                "k": "execution_policy_version",
                "v": "2"
              },
              {
                "k": "post_only",
                "v": "false"
              },
              {
                "k": "cancel_order_on_pause",
                "v": "true"
              }
            ]
          }
        ],
        "edges": [
          [
            1,
            2
          ],
          [
            2,
            3
          ],
          [
            3,
            4
          ]
        ]
      },
      "tree_fingerprint": "01af7db7d3af6e6e043abae1b0588792dbde471ed007bb714d911ab4fc1adf6f",
      "payload_sha256": "ac95346c4c6e705aa50d03a49e0fcc199e9ee0688c6cc4fe54c62f0462777e40",
      "node_id": 3,
      "evaluator": "bot_engine.bot_runner._price_check_evaluate",
      "observed_quotes_cents": {
        "yes_ask": 55,
        "yes_bid": 54,
        "no_ask": 46,
        "no_bid": 45
      },
      "output": {
        "passed": false,
        "outcome": "condition_false",
        "detail": "yes_ask 55¢ <= 50¢ → block",
        "error_code": null,
        "data": {}
      },
      "orders_submitted": 0
    },
    {
      "recipe_id": "paper-price-alert",
      "recipe_version": 1,
      "parameters": {
        "ticker": "KXRECIPE-26SEP09-DEMO",
        "side": "YES",
        "within_minutes": 60,
        "price_cents": 50
      },
      "tree": {
        "nl": "Fixed-market rule for exactly KXRECIPE-26SEP09-DEMO, YES side; Paper mode only when created. No rolling market selection.\nOn an engine evaluation within 60 minutes before market close, continue only when YES ask is at or below 50 cents.\nComplete a notification action, subject to your notification preferences. It may repeat after the five-minute cooldown while the condition remains true. Do not buy or sell any contracts.\nCreating this draft does not start it, verify market availability, fund an account, or send orders. Review it in Builder; starting Paper still requires Kalshi keys and a funded Paper Account.",
        "nl_summary": "",
        "dry_run": true,
        "cooldown_seconds": 300,
        "reentry_wait_seconds": 0,
        "nodes": [
          {
            "id": 1,
            "kind": "trigger",
            "type": "time_to_close",
            "label": "Within the selected close window",
            "settings": [
              {
                "k": "market",
                "v": "KXRECIPE-26SEP09-DEMO"
              },
              {
                "k": "within",
                "v": "60 min"
              }
            ]
          },
          {
            "id": 2,
            "kind": "market",
            "type": "series_market",
            "label": "The exact selected contract",
            "settings": [
              {
                "k": "series",
                "v": "KXRECIPE-26SEP09-DEMO"
              },
              {
                "k": "side",
                "v": "YES"
              }
            ]
          },
          {
            "id": 3,
            "kind": "qualification",
            "type": "price_check",
            "label": "Selected ask at or below threshold",
            "settings": [
              {
                "k": "field",
                "v": "ask"
              },
              {
                "k": "op",
                "v": "<="
              },
              {
                "k": "value",
                "v": "50"
              }
            ]
          },
          {
            "id": 4,
            "kind": "action",
            "type": "notify",
            "label": "Notify only",
            "settings": [
              {
                "k": "message",
                "v": "KXRECIPE-26SEP09-DEMO: YES ask at or below 50 cents within 60 minutes of close."
              }
            ]
          }
        ],
        "edges": [
          [
            1,
            2
          ],
          [
            2,
            3
          ],
          [
            3,
            4
          ]
        ]
      },
      "tree_fingerprint": "65e0aaa4a24c63c819cead30d1a63ac529a58566d6d882c4d25f2fb4eb2822b2",
      "payload_sha256": "147e6d9675e0de74c308dd1d3e5a4c85c9db1b5bcf5609684fb184b161393c35",
      "node_id": 3,
      "evaluator": "bot_engine.bot_runner._price_check_evaluate",
      "observed_quotes_cents": {
        "yes_ask": 55,
        "yes_bid": 54,
        "no_ask": 46,
        "no_bid": 45
      },
      "output": {
        "passed": false,
        "outcome": "condition_false",
        "detail": "yes_ask 55¢ <= 50¢ → block",
        "error_code": null,
        "data": {}
      },
      "orders_submitted": 0
    }
  ]
}
