Kestrel v2 • Operator
Console

Phase 19M · Operator wireframe · Phase 54 pre-live monitoring

SAFE PARKED STATE

Read only

Parked wireframe: no POST routes, broker mutations, OMS mutations, order submission, or live enablement paths. Telemetry below uses the same read-only GET overview payloads as production fetches. Phase 54 documentation is monitoring and review only — not live approval.

Phase 54 pre-live safety copy

  • Phase 54 pre-live review — not live approval.
  • PAPER ONLY — IBKR paper account active. Live trading is blocked.
  • LIVE TRADING NO-GO — signed approval is missing.
  • Auth/RBAC gap remains: internal routes are not protected by per-operator identity.
  • Phase 54 documentation is not approval to trade live.

Authorization status

LiveOFFOMSOFFBroker SubmitOFFTiny LiveOFFAutonomousOFFOptionsOFFPhase 18S Signedfalse
Risk & Gates
Pipeline posture: runs, OMS counts, incidents, upstream footprint, policy denies — read-only
Latest runs (scanner / strategy / risk)
Scanner
#101 core_scanner_v1@1
2026-05-05T16:27:05.483016+00:00
Strategy
#1 core_intent_v1@1
2026-04-22T22:21:10.110419+00:00
Risk
none
OMS status counts · window 24
submitted: 2approved: 3error: 9canceled: 5filled: 5
Incidents (24h)
window_hours: 24total: 0critical: 0warning: 0ok: 0latest_severity: null
Upstream footprint (gate signal)
SL runs (total)
93
SL runs (latest created)
2026-05-05T16:27:05.579224+00:00
SL decisions (total)
132
SL decisions (latest created)
2026-05-05T16:27:05.579224+00:00
OMS orders (total rows)
24
OMS orders (latest created)
2026-05-20T13:43:51.015110+00:00
Policy denies (latest)
2026-05-02T16:53:12.774824+00:00 · AMD · ord-stratloop-106
Raw: ORDER_CANDIDATE_STALE
Order candidate stale
The OMS order row is older than the policy freshness window for autonomous submit, so the candidate is treated as stale.
Next: Confirm scanner + strategy-loop just ran; check feature timestamps vs decision time; reduce clock skew.
Raw: BROKER_ACCOUNT_STATE_STALE
Broker account snapshot stale
The latest persisted broker account snapshot is older than the policy TTL.
Next: Verify worker-oms / broker-truth snapshot path; check GET /internal/broker-truth/account/latest freshness.
Raw: BROKER_POSITIONS_STATE_STALE
Broker positions snapshot stale
Broker positions used for safety checks are older than the allowed freshness window.
Next: Confirm broker-truth positions snapshots are updating; inspect worker-oms logs and snapshot timestamps.
Raw: BROKER_OPEN_ORDERS_STATE_STALE
Broker open-orders snapshot stale
Open-order snapshots used for duplicate/conflict checks are older than the policy TTL.
Next: Verify broker open-order snapshot ingestion; compare with IBKR Client Portal open orders.
Raw: RECONCILIATION_STATE_STALE
Reconciliation signal stale
Reconciliation inputs used by autonomous policy are older than the configured TTL.
Next: Review /internal/reconciliation-v2/latest and pipeline footprint; run read-only recon preview if configured.
Raw: STRATEGY_LOOP_STATE_STALE
Strategy-loop context stale
Strategy-loop run/decision context is older than the policy freshness window relative to submit time.
Next: Confirm latest strategy-loop run completed; align scanner → loop cadence; check run metadata timestamps.
Raw: MARKET_CLOSED_FOR_STOCK
Market closed
Stock entries are blocked because the session is outside the allowed US equity trading window for this policy.
Next: Wait for regular trading hours or verify market-hours / calendar configuration for paper vs live.
Raw: PAPER_TEST_RTH_REQUIRED
Paper test — RTH only
Paper-test guard requires regular trading hours before allowing this class of entry/submit.
Next: Retry during RTH or adjust paper-test RTH policy only if your playbook explicitly allows off-hours testing.
Raw: DATA_FEATURES_STALE
Feature data stale
Feature snapshots feeding the policy are older than the allowed freshness threshold.
Next: Check market-data / features workers and latest feature snapshot timestamps in pipeline footprint.
Raw: DATA_BROKER_TRUTH_STALE
Broker-truth data stale
Broker-truth inputs (quotes/account/positions) are considered stale for autonomous submit.
Next: Inspect broker-truth snapshot ages and worker-oms reconcile cycles; confirm gateway connectivity.
2026-05-02T16:53:12.741420+00:00 · GOOGL · ord-stratloop-105
Raw: ORDER_CANDIDATE_STALE
Order candidate stale
The OMS order row is older than the policy freshness window for autonomous submit, so the candidate is treated as stale.
Next: Confirm scanner + strategy-loop just ran; check feature timestamps vs decision time; reduce clock skew.
Raw: BROKER_ACCOUNT_STATE_STALE
Broker account snapshot stale
The latest persisted broker account snapshot is older than the policy TTL.
Next: Verify worker-oms / broker-truth snapshot path; check GET /internal/broker-truth/account/latest freshness.
Raw: BROKER_POSITIONS_STATE_STALE
Broker positions snapshot stale
Broker positions used for safety checks are older than the allowed freshness window.
Next: Confirm broker-truth positions snapshots are updating; inspect worker-oms logs and snapshot timestamps.
Raw: BROKER_OPEN_ORDERS_STATE_STALE
Broker open-orders snapshot stale
Open-order snapshots used for duplicate/conflict checks are older than the policy TTL.
Next: Verify broker open-order snapshot ingestion; compare with IBKR Client Portal open orders.
Raw: RECONCILIATION_STATE_STALE
Reconciliation signal stale
Reconciliation inputs used by autonomous policy are older than the configured TTL.
Next: Review /internal/reconciliation-v2/latest and pipeline footprint; run read-only recon preview if configured.
Raw: STRATEGY_LOOP_STATE_STALE
Strategy-loop context stale
Strategy-loop run/decision context is older than the policy freshness window relative to submit time.
Next: Confirm latest strategy-loop run completed; align scanner → loop cadence; check run metadata timestamps.
Raw: MARKET_CLOSED_FOR_STOCK
Market closed
Stock entries are blocked because the session is outside the allowed US equity trading window for this policy.
Next: Wait for regular trading hours or verify market-hours / calendar configuration for paper vs live.
Raw: PAPER_TEST_RTH_REQUIRED
Paper test — RTH only
Paper-test guard requires regular trading hours before allowing this class of entry/submit.
Next: Retry during RTH or adjust paper-test RTH policy only if your playbook explicitly allows off-hours testing.
Raw: DATA_FEATURES_STALE
Feature data stale
Feature snapshots feeding the policy are older than the allowed freshness threshold.
Next: Check market-data / features workers and latest feature snapshot timestamps in pipeline footprint.
Raw: DATA_BROKER_TRUTH_STALE
Broker-truth data stale
Broker-truth inputs (quotes/account/positions) are considered stale for autonomous submit.
Next: Inspect broker-truth snapshot ages and worker-oms reconcile cycles; confirm gateway connectivity.
2026-04-24T17:23:06.627567+00:00 · QQQ · ord-stratloop-48
Raw: RECONCILIATION_STATE_STALE
Reconciliation signal stale
Reconciliation inputs used by autonomous policy are older than the configured TTL.
Next: Review /internal/reconciliation-v2/latest and pipeline footprint; run read-only recon preview if configured.
Raw: STRATEGY_LOOP_STATE_STALE
Strategy-loop context stale
Strategy-loop run/decision context is older than the policy freshness window relative to submit time.
Next: Confirm latest strategy-loop run completed; align scanner → loop cadence; check run metadata timestamps.
2026-04-24T17:23:06.603402+00:00 · SPY · ord-stratloop-47
Raw: RECONCILIATION_STATE_STALE
Reconciliation signal stale
Reconciliation inputs used by autonomous policy are older than the configured TTL.
Next: Review /internal/reconciliation-v2/latest and pipeline footprint; run read-only recon preview if configured.
Raw: STRATEGY_LOOP_STATE_STALE
Strategy-loop context stale
Strategy-loop run/decision context is older than the policy freshness window relative to submit time.
Next: Confirm latest strategy-loop run completed; align scanner → loop cadence; check run metadata timestamps.
2026-04-24T16:09:10.951475+00:00 · AAPL · ord-stratloop-83
Raw: AUTONOMOUS_MAX_CONCURRENT_GLOBAL_REACHED
Policy / guard reason
This reason code is not in the Phase 14B operator glossary yet; the raw code is still authoritative for automation. Raw: AUTONOMOUS_MAX_CONCURRENT_GLOBAL_REACHED.
Next: Inspect GET /internal/autonomous-policy/runs (full detail) or extend apps/web/lib/autonomousReasonLabels.ts.
Raw: AUTONOMOUS_MAX_CONCURRENT_SYMBOL_REACHED
Policy / guard reason
This reason code is not in the Phase 14B operator glossary yet; the raw code is still authoritative for automation. Raw: AUTONOMOUS_MAX_CONCURRENT_SYMBOL_REACHED.
Next: Inspect GET /internal/autonomous-policy/runs (full detail) or extend apps/web/lib/autonomousReasonLabels.ts.
Raw: DUPLICATE_CANDIDATE_FINGERPRINT
Policy / guard reason
This reason code is not in the Phase 14B operator glossary yet; the raw code is still authoritative for automation. Raw: DUPLICATE_CANDIDATE_FINGERPRINT.
Next: Inspect GET /internal/autonomous-policy/runs (full detail) or extend apps/web/lib/autonomousReasonLabels.ts.
2026-04-24T14:24:08.454746+00:00 · SPY · ord-stratloop-75
Raw: BROKER_ACCOUNT_STATE_STALE
Broker account snapshot stale
The latest persisted broker account snapshot is older than the policy TTL.
Next: Verify worker-oms / broker-truth snapshot path; check GET /internal/broker-truth/account/latest freshness.
Raw: BROKER_POSITIONS_STATE_STALE
Broker positions snapshot stale
Broker positions used for safety checks are older than the allowed freshness window.
Next: Confirm broker-truth positions snapshots are updating; inspect worker-oms logs and snapshot timestamps.
Raw: BROKER_OPEN_ORDERS_STATE_STALE
Broker open-orders snapshot stale
Open-order snapshots used for duplicate/conflict checks are older than the policy TTL.
Next: Verify broker open-order snapshot ingestion; compare with IBKR Client Portal open orders.
2026-04-24T13:32:17.384925+00:00 · SPY · ord-stratloop-70
Raw: RECONCILIATION_STATE_STALE
Reconciliation signal stale
Reconciliation inputs used by autonomous policy are older than the configured TTL.
Next: Review /internal/reconciliation-v2/latest and pipeline footprint; run read-only recon preview if configured.
Raw: AUTONOMOUS_MAX_CONCURRENT_GLOBAL_REACHED
Policy / guard reason
This reason code is not in the Phase 14B operator glossary yet; the raw code is still authoritative for automation. Raw: AUTONOMOUS_MAX_CONCURRENT_GLOBAL_REACHED.
Next: Inspect GET /internal/autonomous-policy/runs (full detail) or extend apps/web/lib/autonomousReasonLabels.ts.
Raw: AUTONOMOUS_MAX_CONCURRENT_SYMBOL_REACHED
Policy / guard reason
This reason code is not in the Phase 14B operator glossary yet; the raw code is still authoritative for automation. Raw: AUTONOMOUS_MAX_CONCURRENT_SYMBOL_REACHED.
Next: Inspect GET /internal/autonomous-policy/runs (full detail) or extend apps/web/lib/autonomousReasonLabels.ts.
2026-04-24T13:32:17.340066+00:00 · QQQ · ord-stratloop-69
Raw: RECONCILIATION_STATE_STALE
Reconciliation signal stale
Reconciliation inputs used by autonomous policy are older than the configured TTL.
Next: Review /internal/reconciliation-v2/latest and pipeline footprint; run read-only recon preview if configured.
Raw: AUTONOMOUS_MAX_CONCURRENT_GLOBAL_REACHED
Policy / guard reason
This reason code is not in the Phase 14B operator glossary yet; the raw code is still authoritative for automation. Raw: AUTONOMOUS_MAX_CONCURRENT_GLOBAL_REACHED.
Next: Inspect GET /internal/autonomous-policy/runs (full detail) or extend apps/web/lib/autonomousReasonLabels.ts.
Raw: AUTONOMOUS_MAX_CONCURRENT_SYMBOL_REACHED
Policy / guard reason
This reason code is not in the Phase 14B operator glossary yet; the raw code is still authoritative for automation. Raw: AUTONOMOUS_MAX_CONCURRENT_SYMBOL_REACHED.
Next: Inspect GET /internal/autonomous-policy/runs (full detail) or extend apps/web/lib/autonomousReasonLabels.ts.
Broker Truth
OMS row proof health from replay index (9AU); read-only

Filled rows need broker_order_id and fill fields to PASS. Reference: ord-stratloop-86.

order_idsymbolOMS statusfilled_qtyavg_fill_pricebroker_order_id (OMS)proofproof_reason
ord-manual-6da32de74fc9AAPLsubmitted01211957035
ord-manual-f9b6ddf00a92AAPLapproved0
ord-manual-f7524be6dc81AAPLapproved0
ord-manual-876133187eb8AAPLapproved0
ord-manual-9568712e367bAAPLsubmitted01554758323
ord-manual-de0d40f1df30AAPLerror0
ord-manual-6971d1926b3cAAPLerror0
ord-stratloop-106AMDcanceled0
ord-stratloop-105GOOGLcanceled0
ord-exit-4AAPLcanceled0
ord-exit-2AAPLcanceled0
ord-exit-3AAPLcanceled0
ord-exit-1MSFTfilled2423.291569812048PASS
ord-stratloop-86AAPLfilled3270.1358965319PASS
ord-stratloop-47SPYerror0
ord-stratloop-48QQQerror0
ord-stratloop-83AAPLfilled3271.052142597903PASS
ord-stratloop-81AAPLfilled3271.042142597650PASS
ord-stratloop-79MSFTfilled2420.681467309844PASS
ord-stratloop-75SPYerror0
ord-stratloop-76QQQerror0
ord-stratloop-73QQQerror0
ord-stratloop-69QQQerror0
ord-stratloop-70SPYerror0
Kestrel Ledger
Trade ledger 9AZ (read-only)
Open
0
Closed
4
Generated
2026-06-20T15:47:19.791581+00:00
symbolstatusentryexitrealizedwarnings
AAPLclosedord-stratloop-860
AAPLclosedord-stratloop-830
AAPLclosedord-stratloop-810
MSFTclosedord-stratloop-79ord-exit-15.22
Attention Required
Operational signals — fetch gaps are summarized in the soft panel above
  • All overview feeds returned data for this render.
  • Problem orders in window: 14 — see table below or /operator/orders
  • Autonomous policy denies in sample window: 8
order_idsymstatuscreated
ord-manual-de0d40f1df30AAPLerror2026-05-19T17:54:49.889486+00:00
ord-manual-6971d1926b3cAAPLerror2026-05-19T17:53:31.307310+00:00
ord-stratloop-106AMDcanceled2026-05-02T16:48:24.396792+00:00
ord-stratloop-105GOOGLcanceled2026-05-02T16:48:24.396792+00:00
ord-exit-3AAPLcanceled2026-05-02T14:35:15.025503+00:00
ord-exit-4AAPLcanceled2026-05-02T14:35:15.025503+00:00
ord-exit-2AAPLcanceled2026-05-02T14:35:15.025503+00:00
ord-stratloop-48QQQerror2026-04-24T17:23:06.527944+00:00
ord-stratloop-47SPYerror2026-04-24T17:23:06.527944+00:00
ord-stratloop-75SPYerror2026-04-24T14:24:08.173557+00:00
ord-stratloop-76QQQerror2026-04-24T14:24:08.173557+00:00
ord-stratloop-73QQQerror2026-04-24T13:50:13.921187+00:00
Evidence Chain
Structured read-only path: entrypoint → workers → reconciliation snapshot
  1. Evidence entrypoint

    Open the consolidated operator evidence report (same GET bundle as legacy overview).

    Open /operator/evidence →
  2. Worker freshness (operator evidence)
    Live worker signals
    GET /internal/worker-freshness/report — DB-backed inference; optional Docker via KESTREL_INTERNAL_WORKER_DOCKER_STATUS_ENABLED
    Overall:normalgenerated 2026-06-20T15:47:19.975716+00:00
    No automatic worker restart was performed by this report.
    docker_status_available=false — enable KESTREL_INTERNAL_WORKER_DOCKER_STATUS_ENABLED and ensure read-only docker ps works from the API process to attach container rows.
    Stale data flags
    [
      "market_bars_stale_off_rth_informational",
      "market_quotes_stale_off_rth_informational",
      "feature_snapshots_stale_off_rth_informational",
      "scanner_runs_stale_off_rth_informational",
      "strategy_loop_runs_stale_off_rth_informational"
    ]
    Data freshness
    Table / streamLatest ISOCount
    market_bars2026-05-18T19:59:00+00:0050329
    market_quotes2026-05-19T03:54:41.759396+00:00230867
    feature_snapshots2026-05-18T19:59:00+00:0036892
    scanner_runs2026-05-05T16:27:05.483016+00:00101
    strategy_loop_runs2026-05-05T16:27:05.579224+00:0093
    orders2026-05-20T13:43:51.015110+00:0024
    autonomous_submission_policy_runs2026-05-02T16:53:12.774824+00:0013
    risk_runs0
    broker_account_snapshots2026-06-02T04:30:09.163786+00:0034476
    Expected workers
    ServiceInferredContainer stateExitStatusStartedFinishedImageID
    worker-market-dataok
    worker-featuresok
    worker-omsok
    worker-riskmissing
    worker-broker-ibkrok
    Container name: — · — · — · — · —
    Diagnostics
    worker-market-data (info)

    Market bars look stale relative to thresholds, but the approximate calendar says outside likely RTH — treat as informational.

    Suggested: Optional check of worker-market-data; no automatic restart was performed.

    worker-risk (info)

    No risk_runs rows — risk worker may never have run in this environment or table is empty.

    Suggested: If risk coverage is expected, verify worker-risk deployment and intake wiring.

  3. Reconciliation (latest snapshot)

    No reconciliation_latest in pipeline summary.

Disabled action area
Intentionally inert — every control stays disabled with an explicit reason (Phase 19M)
Enable live tradingDisabled

Live enablement is not exposed in the operator UI. Requires Phase 18S and separate operational gates; this dashboard is read-only GETs.

Submit order to brokerDisabled

Broker submission is disabled here by design. No order submission paths are wired to this console (Phase 19M wireframe; mutations not available).

Enable OMS intakeDisabled

OMS intake and OMS configuration toggles are not available from this page. Mutations are intentionally omitted.

Launch tiny-liveDisabled

Tiny-live launch requires its own approval and runbook. Not authorized from this dashboard (parked state).

Enable autonomous tradingDisabled

Autonomous trading controls are not exposed. Policy denies below are read-only telemetry only.

Enable options tradingDisabled

Options trading enablement is not available in this UI. No trading actions are mounted (read-only overview).

Developer payloads (optional)
Lower priority — collapsible JSON for debugging; same read-only data as cards above
Pipeline summary (JSON)
{
  "latest_scanner_run": {
    "id": 101,
    "created_at_iso": "2026-05-05T16:27:05.483016+00:00",
    "name": "core_scanner_v1",
    "version": "1",
    "interval": "1m",
    "metadata": {
      "universe_size": 7,
      "scored_size": 7,
      "missing_features": [],
      "scanner_clean_universe": true,
      "allowed_symbols_count": 7,
      "symbols_requested": [
        "META",
        "AMZN",
        "MSFT",
        "NVDA",
        "GOOGL",
        "TSLA",
        "AMD"
      ],
      "symbols_scanned": [
        "META",
        "AMZN",
        "MSFT",
        "NVDA",
        "GOOGL",
        "TSLA",
        "AMD"
      ],
      "symbols_with_features": [
        "NVDA",
        "META",
        "AMD",
        "GOOGL",
        "MSFT",
        "AMZN",
        "TSLA"
      ],
      "symbols_missing_features": [],
      "feature_set_name": "core_bars_v1",
      "feature_set_version": "1"
    }
  },
  "latest_strategy_run": {
    "id": 1,
    "created_at_iso": "2026-04-22T22:21:10.110419+00:00",
    "name": "core_intent_v1",
    "version": "1",
    "interval": "1m",
    "metadata": {
      "scanner_run_id": 1,
      "universe_size": 2,
      "candidates_considered": 2,
      "intents_proposed": 0,
      "missing_features": [],
      "rejected": [
        {
          "symbol": "SPY",
          "reason": {
            "close_return_1": -0.00010537408049537955,
            "sma_5": 711.1749998,
            "sma_20": 710.77246395,
            "realized_vol_20": 0.0001270275992512768,
            "rule_close_return_1_gt_0": false,
            "rule_sma5_gt_sma20": true,
            "rule_realized_vol_20_lt": 0.05
          }
        },
        {
          "symbol": "QQQ",
          "reason": {
            "close_return_1": -0.000045744990438634225,
            "sma_5": 655.0349974000001,
            "sma_20": 654.69226985,
            "realized_vol_20": 0.00019266996063774147,
            "rule_close_return_1_gt_0": false,
            "rule_sma5_gt_sma20": true,
            "rule_realized_vol_20_lt": 0.05
          }
        }
      ]
    }
  },
  "latest_risk_run": null,
  "oms_orders": {
    "window": 24,
    "total": 24,
    "status_counts": {
      "submitted": 2,
      "approved": 3,
      "error": 9,
      "canceled": 5,
      "filled": 5
    },
    "recent_problem_orders": [
      {
        "order_id": "ord-manual-de0d40f1df30",
        "symbol": "AAPL",
        "status": "error",
        "broker_order_id": null,
        "filled_quantity": 0,
        "avg_fill_price": null,
        "risk_decision_id": null,
        "strategy_loop_decision_id": null,
        "strategy_loop_run_id": null,
        "created_at_iso": "2026-05-19T17:54:49.889486+00:00",
        "last_fill_at_iso": null
      },
      {
        "order_id": "ord-manual-6971d1926b3c",
        "symbol": "AAPL",
        "status": "error",
        "broker_order_id": null,
        "filled_quantity": 0,
        "avg_fill_price": null,
        "risk_decision_id": null,
        "strategy_loop_decision_id": null,
        "strategy_loop_run_id": null,
        "created_at_iso": "2026-05-19T17:53:31.307310+00:00",
        "last_fill_at_iso": null
      },
      {
        "order_id": "ord-stratloop-106",
        "symbol": "AMD",
        "status": "canceled",
        "broker_order_id": null,
        "filled_quantity": 0,
        "avg_fill_price": null,
        "risk_decision_id": null,
        "strategy_loop_decision_id": 106,
        "strategy_loop_run_id": 90,
        "created_at_iso": "2026-05-02T16:48:24.396792+00:00",
        "last_fill_at_iso": null
      },
      {
        "order_id": "ord-stratloop-105",
        "symbol": "GOOGL",
        "status": "canceled",
        "broker_order_id": null,
        "filled_quantity": 0,
        "avg_fill_price": null,
        "risk_decision_id": null,
        "strategy_loop_decision_id": 105,
        "strategy_loop_run_id": 90,
        "created_at_iso": "2026-05-02T16:48:24.396792+00:00",
        "last_fill_at_iso": null
      },
      {
        "order_id": "ord-exit-3",
        "symbol": "AAPL",
        "status": "canceled",
        "broker_order_id": null,
        "filled_quantity": 0,
        "avg_fill_price": null,
        "risk_decision_id": null,
        "strategy_loop_decision_id": null,
        "strategy_loop_run_id": null,
        "created_at_iso": "2026-05-02T14:35:15.025503+00:00",
        "last_fill_at_iso": null
      },
      {
        "order_id": "ord-exit-4",
        "symbol": "AAPL",
        "status": "canceled",
        "broker_order_id": null,
        "filled_quantity": 0,
        "avg_fill_price": null,
        "risk_decision_id": null,
        "strategy_loop_decision_id": null,
        "strategy_loop_run_id": null,
        "created_at_iso": "2026-05-02T14:35:15.025503+00:00",
        "last_fill_at_iso": null
      },
      {
        "order_id": "ord-exit-2",
        "symbol": "AAPL",
        "status": "canceled",
        "broker_order_id": null,
        "filled_quantity": 0,
        "avg_fill_price": null,
        "risk_decision_id": null,
        "strategy_loop_decision_id": null,
        "strategy_loop_run_id": null,
        "created_at_iso": "2026-05-02T14:35:15.025503+00:00",
        "last_fill_at_iso": null
      },
      {
        "order_id": "ord-stratloop-48",
        "symbol": "QQQ",
        "status": "error",
        "broker_order_id": null,
        "filled_quantity": 0,
        "avg_fill_price": null,
        "risk_decision_id": null,
        "strategy_loop_decision_id": 48,
        "strategy_loop_run_id": 24,
        "created_at_iso": "2026-04-24T17:23:06.527944+00:00",
        "last_fill_at_iso": null
      },
      {
        "order_id": "ord-stratloop-47",
        "symbol": "SPY",
        "status": "error",
        "broker_order_id": null,
        "filled_quantity": 0,
        "avg_fill_price": null,
        "risk_decision_id": null,
        "strategy_loop_decision_id": 47,
        "strategy_loop_run_id": 24,
        "created_at_iso": "2026-04-24T17:23:06.527944+00:00",
        "last_fill_at_iso": null
      },
      {
        "order_id": "ord-stratloop-75",
        "symbol": "SPY",
        "status": "error",
        "broker_order_id": null,
        "filled_quantity": 0,
        "avg_fill_price": null,
        "risk_decision_id": null,
        "strategy_loop_decision_id": 75,
        "strategy_loop_run_id": 38,
        "created_at_iso": "2026-04-24T14:24:08.173557+00:00",
        "last_fill_at_iso": null
      },
      {
        "order_id": "ord-stratloop-76",
        "symbol": "QQQ",
        "status": "error",
        "broker_order_id": null,
        "filled_quantity": 0,
        "avg_fill_price": null,
        "risk_decision_id": null,
        "strategy_loop_decision_id": 76,
        "strategy_loop_run_id": 38,
        "created_at_iso": "2026-04-24T14:24:08.173557+00:00",
        "last_fill_at_iso": null
      },
      {
        "order_id": "ord-stratloop-73",
        "symbol": "QQQ",
        "status": "error",
        "broker_order_id": null,
        "filled_quantity": 0,
        "avg_fill_price": null,
        "risk_decision_id": null,
        "strategy_loop_decision_id": 73,
        "strategy_loop_run_id": 37,
        "created_at_iso": "2026-04-24T13:50:13.921187+00:00",
        "last_fill_at_iso": null
      },
      {
        "order_id": "ord-stratloop-70",
        "symbol": "SPY",
        "status": "error",
        "broker_order_id": null,
        "filled_quantity": 0,
        "avg_fill_price": null,
        "risk_decision_id": null,
        "strategy_loop_decision_id": 70,
        "strategy_loop_run_id": 35,
        "created_at_iso": "2026-04-24T13:32:17.175047+00:00",
        "last_fill_at_iso": null
      },
      {
        "order_id": "ord-stratloop-69",
        "symbol": "QQQ",
        "status": "error",
        "broker_order_id": null,
        "filled_quantity": 0,
        "avg_fill_price": null,
        "risk_decision_id": null,
        "strategy_loop_decision_id": 69,
        "strategy_loop_run_id": 35,
        "created_at_iso": "2026-04-24T13:32:17.175047+00:00",
        "last_fill_at_iso": null
      }
    ],
    "approved_not_submitted_count": 3,
    "recent_approved_not_submitted": [
      {
        "order_id": "ord-manual-f9b6ddf00a92",
        "symbol": "AAPL",
        "status": "approved",
        "oms_lifecycle_stage": "approved_not_submitted",
        "broker_order_id": null,
        "filled_quantity": 0,
        "strategy_loop_decision_id": null,
        "strategy_loop_run_id": null,
        "created_at_iso": "2026-05-19T20:54:33.970750+00:00"
      },
      {
        "order_id": "ord-manual-f7524be6dc81",
        "symbol": "AAPL",
        "status": "approved",
        "oms_lifecycle_stage": "approved_not_submitted",
        "broker_order_id": null,
        "filled_quantity": 0,
        "strategy_loop_decision_id": null,
        "strategy_loop_run_id": null,
        "created_at_iso": "2026-05-19T20:06:19.343206+00:00"
      },
      {
        "order_id": "ord-manual-876133187eb8",
        "symbol": "AAPL",
        "status": "approved",
        "oms_lifecycle_stage": "approved_not_submitted",
        "broker_order_id": null,
        "filled_quantity": 0,
        "strategy_loop_decision_id": null,
        "strategy_loop_run_id": null,
        "created_at_iso": "2026-05-19T20:05:42.099650+00:00"
      }
    ]
  },
  "reconciliation_latest": null,
  "incidents_last_24h": {
    "window_hours": 24,
    "total": 0,
    "critical": 0,
    "warning": 0,
    "ok": 0,
    "latest_severity": null
  },
  "upstream_footprint": {
    "market_bars_count": 50329,
    "market_bars_latest_ts_iso": "2026-05-18T19:59:00+00:00",
    "market_quotes_count": 230867,
    "market_quotes_latest_ts_iso": "2026-05-19T03:54:41.759396+00:00",
    "feature_snapshots_count": 36892,
    "feature_snapshots_latest_ts_iso": "2026-05-18T19:59:00+00:00",
    "scanner_runs_count": 101,
    "scanner_runs_latest_created_at_iso": "2026-05-05T16:27:05.483016+00:00",
    "strategy_runs_count": 1,
    "strategy_runs_latest_created_at_iso": "2026-04-22T22:21:10.110419+00:00",
    "strategy_loop_runs_count": 93,
    "strategy_loop_runs_latest_created_at_iso": "2026-05-05T16:27:05.579224+00:00",
    "strategy_loop_decisions_count": 132,
    "strategy_loop_decisions_latest_created_at_iso": "2026-05-05T16:27:05.579224+00:00",
    "orders_count": 24,
    "orders_latest_created_at_iso": "2026-05-20T13:43:51.015110+00:00",
    "autonomous_submission_policy_runs_count": 13,
    "autonomous_submission_policy_runs_latest_ts_iso": "2026-05-02T16:53:12.774824+00:00"
  }
}
Operator evidence report (JSON)
{
  "generated_at_iso": "2026-06-20T15:47:19.790645+00:00",
  "health_summary": {
    "ok": true,
    "components": {
      "database": "ok",
      "redis": "ok"
    }
  },
  "latest_scanner_run": {
    "run_id": 101,
    "created_at_iso": "2026-05-05T16:27:05.483016+00:00",
    "name": "core_scanner_v1",
    "version": "1",
    "interval": "1m",
    "universe_size": 7,
    "symbols_requested": [
      "META",
      "AMZN",
      "MSFT",
      "NVDA",
      "GOOGL",
      "TSLA",
      "AMD"
    ],
    "symbols_scanned": [
      "META",
      "AMZN",
      "MSFT",
      "NVDA",
      "GOOGL",
      "TSLA",
      "AMD"
    ],
    "symbols_with_features": [
      "NVDA",
      "META",
      "AMD",
      "GOOGL",
      "MSFT",
      "AMZN",
      "TSLA"
    ],
    "symbols_missing_features": []
  },
  "latest_strategy_loop": {
    "run_id": 93,
    "created_at_iso": "2026-05-05T16:27:05.579224+00:00",
    "scanner_run_id": 101,
    "decisions_total": 7,
    "trade_decisions": 2,
    "skip_decisions": 5,
    "candidates_considered": 7,
    "strategy_name": "formal_loop_v1",
    "strategy_version": "1",
    "control_state": {
      "strategy_loop_intake_paused": false,
      "autonomous_submission_held": false,
      "governance_ts_iso": "2026-05-02T16:00:56.266375+00:00"
    }
  },
  "oms_lifecycle": {
    "approved_not_submitted_count": 3,
    "recent_approved_not_submitted": [
      {
        "order_id": "ord-manual-f9b6ddf00a92",
        "symbol": "AAPL",
        "status": "approved",
        "oms_lifecycle_stage": "approved_not_submitted",
        "broker_order_id": null,
        "filled_quantity": 0,
        "strategy_loop_decision_id": null,
        "strategy_loop_run_id": null,
        "created_at_iso": "2026-05-19T20:54:33.970750+00:00"
      },
      {
        "order_id": "ord-manual-f7524be6dc81",
        "symbol": "AAPL",
        "status": "approved",
        "oms_lifecycle_stage": "approved_not_submitted",
        "broker_order_id": null,
        "filled_quantity": 0,
        "strategy_loop_decision_id": null,
        "strategy_loop_run_id": null,
        "created_at_iso": "2026-05-19T20:06:19.343206+00:00"
      },
      {
        "order_id": "ord-manual-876133187eb8",
        "symbol": "AAPL",
        "status": "approved",
        "oms_lifecycle_stage": "approved_not_submitted",
        "broker_order_id": null,
        "filled_quantity": 0,
        "strategy_loop_decision_id": null,
        "strategy_loop_run_id": null,
        "created_at_iso": "2026-05-19T20:05:42.099650+00:00"
      }
    ],
    "status_counts": {
      "submitted": 2,
      "approved": 3,
      "error": 9,
      "canceled": 5,
      "filled": 5
    },
    "problem_orders_count": 14,
    "recent_problem_orders": [
      {
        "order_id": "ord-manual-de0d40f1df30",
        "symbol": "AAPL",
        "status": "error",
        "broker_order_id": null,
        "filled_quantity": 0,
        "avg_fill_price": null,
        "risk_decision_id": null,
        "strategy_loop_decision_id": null,
        "strategy_loop_run_id": null,
        "created_at_iso": "2026-05-19T17:54:49.889486+00:00",
        "last_fill_at_iso": null
      },
      {
        "order_id": "ord-manual-6971d1926b3c",
        "symbol": "AAPL",
        "status": "error",
        "broker_order_id": null,
        "filled_quantity": 0,
        "avg_fill_price": null,
        "risk_decision_id": null,
        "strategy_loop_decision_id": null,
        "strategy_loop_run_id": null,
        "created_at_iso": "2026-05-19T17:53:31.307310+00:00",
        "last_fill_at_iso": null
      },
      {
        "order_id": "ord-stratloop-106",
        "symbol": "AMD",
        "status": "canceled",
        "broker_order_id": null,
        "filled_quantity": 0,
        "avg_fill_price": null,
        "risk_decision_id": null,
        "strategy_loop_decision_id": 106,
        "strategy_loop_run_id": 90,
        "created_at_iso": "2026-05-02T16:48:24.396792+00:00",
        "last_fill_at_iso": null
      },
      {
        "order_id": "ord-stratloop-105",
        "symbol": "GOOGL",
        "status": "canceled",
        "broker_order_id": null,
        "filled_quantity": 0,
        "avg_fill_price": null,
        "risk_decision_id": null,
        "strategy_loop_decision_id": 105,
        "strategy_loop_run_id": 90,
        "created_at_iso": "2026-05-02T16:48:24.396792+00:00",
        "last_fill_at_iso": null
      },
      {
        "order_id": "ord-exit-3",
        "symbol": "AAPL",
        "status": "canceled",
        "broker_order_id": null,
        "filled_quantity": 0,
        "avg_fill_price": null,
        "risk_decision_id": null,
        "strategy_loop_decision_id": null,
        "strategy_loop_run_id": null,
        "created_at_iso": "2026-05-02T14:35:15.025503+00:00",
        "last_fill_at_iso": null
      },
      {
        "order_id": "ord-exit-4",
        "symbol": "AAPL",
        "status": "canceled",
        "broker_order_id": null,
        "filled_quantity": 0,
        "avg_fill_price": null,
        "risk_decision_id": null,
        "strategy_loop_decision_id": null,
        "strategy_loop_run_id": null,
        "created_at_iso": "2026-05-02T14:35:15.025503+00:00",
        "last_fill_at_iso": null
      },
      {
        "order_id": "ord-exit-2",
        "symbol": "AAPL",
        "status": "canceled",
        "broker_order_id": null,
        "filled_quantity": 0,
        "avg_fill_price": null,
        "risk_decision_id": null,
        "strategy_loop_decision_id": null,
        "strategy_loop_run_id": null,
        "created_at_iso": "2026-05-02T14:35:15.025503+00:00",
        "last_fill_at_iso": null
      },
      {
        "order_id": "ord-stratloop-48",
        "symbol": "QQQ",
        "status": "error",
        "broker_order_id": null,
        "filled_quantity": 0,
        "avg_fill_price": null,
        "risk_decision_id": null,
        "strategy_loop_decision_id": 48,
        "strategy_loop_run_id": 24,
        "created_at_iso": "2026-04-24T17:23:06.527944+00:00",
        "last_fill_at_iso": null
      },
      {
        "order_id": "ord-stratloop-47",
        "symbol": "SPY",
        "status": "error",
        "broker_order_id": null,
        "filled_quantity": 0,
        "avg_fill_price": null,
        "risk_decision_id": null,
        "strategy_loop_decision_id": 47,
        "strategy_loop_run_id": 24,
        "created_at_iso": "2026-04-24T17:23:06.527944+00:00",
        "last_fill_at_iso": null
      },
      {
        "order_id": "ord-stratloop-75",
        "symbol": "SPY",
        "status": "error",
        "broker_order_id": null,
        "filled_quantity": 0,
        "avg_fill_price": null,
        "risk_decision_id": null,
        "strategy_loop_decision_id": 75,
        "strategy_loop_run_id": 38,
        "created_at_iso": "2026-04-24T14:24:08.173557+00:00",
        "last_fill_at_iso": null
      },
      {
        "order_id": "ord-stratloop-76",
        "symbol": "QQQ",
        "status": "error",
        "broker_order_id": null,
        "filled_quantity": 0,
        "avg_fill_price": null,
        "risk_decision_id": null,
        "strategy_loop_decision_id": 76,
        "strategy_loop_run_id": 38,
        "created_at_iso": "2026-04-24T14:24:08.173557+00:00",
        "last_fill_at_iso": null
      },
      {
        "order_id": "ord-stratloop-73",
        "symbol": "QQQ",
        "status": "error",
        "broker_order_id": null,
        "filled_quantity": 0,
        "avg_fill_price": null,
        "risk_decision_id": null,
        "strategy_loop_decision_id": 73,
        "strategy_loop_run_id": 37,
        "created_at_iso": "2026-04-24T13:50:13.921187+00:00",
        "last_fill_at_iso": null
      },
      {
        "order_id": "ord-stratloop-70",
        "symbol": "SPY",
        "status": "error",
        "broker_order_id": null,
        "filled_quantity": 0,
        "avg_fill_price": null,
        "risk_decision_id": null,
        "strategy_loop_decision_id": 70,
        "strategy_loop_run_id": 35,
        "created_at_iso": "2026-04-24T13:32:17.175047+00:00",
        "last_fill_at_iso": null
      },
      {
        "order_id": "ord-stratloop-69",
        "symbol": "QQQ",
        "status": "error",
        "broker_order_id": null,
        "filled_quantity": 0,
        "avg_fill_price": null,
        "risk_decision_id": null,
        "strategy_loop_decision_id": 69,
        "strategy_loop_run_id": 35,
        "created_at_iso": "2026-04-24T13:32:17.175047+00:00",
        "last_fill_at_iso": null
      }
    ],
    "window": 24,
    "total": 24
  },
  "autonomous_denial": {
    "enabled": true,
    "recent_deny_runs": [
      {
        "id": 13,
        "ts_iso": "2026-05-02T16:53:12.774824+00:00",
        "order_id": "ord-stratloop-106",
        "symbol": "AMD",
        "account_id": "DUP667958",
        "decision": "deny",
        "reasons_raw": [
          "ORDER_CANDIDATE_STALE",
          "BROKER_ACCOUNT_STATE_STALE",
          "BROKER_POSITIONS_STATE_STALE",
          "BROKER_OPEN_ORDERS_STATE_STALE",
          "RECONCILIATION_STATE_STALE",
          "STRATEGY_LOOP_STATE_STALE",
          "MARKET_CLOSED_FOR_STOCK",
          "PAPER_TEST_RTH_REQUIRED",
          "DATA_FEATURES_STALE",
          "DATA_BROKER_TRUTH_STALE"
        ],
        "reasons_with_labels": [
          {
            "raw": "ORDER_CANDIDATE_STALE",
            "label": "Order candidate stale",
            "explanation": "The OMS order row is older than the policy freshness window for autonomous submit, so the candidate is treated as stale.",
            "action": "Confirm scanner + strategy-loop just ran; check feature timestamps vs decision time; reduce clock skew."
          },
          {
            "raw": "BROKER_ACCOUNT_STATE_STALE",
            "label": "Broker account snapshot stale",
            "explanation": "The latest persisted broker account snapshot is older than the policy TTL.",
            "action": "Verify worker-oms / broker-truth snapshot path; check GET /internal/broker-truth/account/latest freshness."
          },
          {
            "raw": "BROKER_POSITIONS_STATE_STALE",
            "label": "Broker positions snapshot stale",
            "explanation": "Broker positions used for safety checks are older than the allowed freshness window.",
            "action": "Confirm broker-truth positions snapshots are updating; inspect worker-oms logs and snapshot timestamps."
          },
          {
            "raw": "BROKER_OPEN_ORDERS_STATE_STALE",
            "label": "Broker open-orders snapshot stale",
            "explanation": "Open-order snapshots used for duplicate/conflict checks are older than the policy TTL.",
            "action": "Verify broker open-order snapshot ingestion; compare with IBKR Client Portal open orders."
          },
          {
            "raw": "RECONCILIATION_STATE_STALE",
            "label": "Reconciliation signal stale",
            "explanation": "Reconciliation inputs used by autonomous policy are older than the configured TTL.",
            "action": "Review /internal/reconciliation-v2/latest and pipeline footprint; run read-only recon preview if configured."
          },
          {
            "raw": "STRATEGY_LOOP_STATE_STALE",
            "label": "Strategy-loop context stale",
            "explanation": "Strategy-loop run/decision context is older than the policy freshness window relative to submit time.",
            "action": "Confirm latest strategy-loop run completed; align scanner → loop cadence; check run metadata timestamps."
          },
          {
            "raw": "MARKET_CLOSED_FOR_STOCK",
            "label": "Market closed",
            "explanation": "Stock entries are blocked because the session is outside the allowed US equity trading window for this policy.",
            "action": "Wait for regular trading hours or verify market-hours / calendar configuration for paper vs live."
          },
          {
            "raw": "PAPER_TEST_RTH_REQUIRED",
            "label": "Paper test — RTH only",
            "explanation": "Paper-test guard requires regular trading hours before allowing this class of entry/submit.",
            "action": "Retry during RTH or adjust paper-test RTH policy only if your playbook explicitly allows off-hours testing."
          },
          {
            "raw": "DATA_FEATURES_STALE",
            "label": "Feature data stale",
            "explanation": "Feature snapshots feeding the policy are older than the allowed freshness threshold.",
            "action": "Check market-data / features workers and latest feature snapshot timestamps in pipeline footprint."
          },
          {
            "raw": "DATA_BROKER_TRUTH_STALE",
            "label": "Broker-truth data stale",
            "explanation": "Broker-truth inputs (quotes/account/positions) are considered stale for autonomous submit.",
            "action": "Inspect broker-truth snapshot ages and worker-oms reconcile cycles; confirm gateway connectivity."
          }
        ],
        "submit_attempted": false,
        "submit_outcome": "skipped"
      },
      {
        "id": 12,
        "ts_iso": "2026-05-02T16:53:12.741420+00:00",
        "order_id": "ord-stratloop-105",
        "symbol": "GOOGL",
        "account_id": "DUP667958",
        "decision": "deny",
        "reasons_raw": [
          "ORDER_CANDIDATE_STALE",
          "BROKER_ACCOUNT_STATE_STALE",
          "BROKER_POSITIONS_STATE_STALE",
          "BROKER_OPEN_ORDERS_STATE_STALE",
          "RECONCILIATION_STATE_STALE",
          "STRATEGY_LOOP_STATE_STALE",
          "MARKET_CLOSED_FOR_STOCK",
          "PAPER_TEST_RTH_REQUIRED",
          "DATA_FEATURES_STALE",
          "DATA_BROKER_TRUTH_STALE"
        ],
        "reasons_with_labels": [
          {
            "raw": "ORDER_CANDIDATE_STALE",
            "label": "Order candidate stale",
            "explanation": "The OMS order row is older than the policy freshness window for autonomous submit, so the candidate is treated as stale.",
            "action": "Confirm scanner + strategy-loop just ran; check feature timestamps vs decision time; reduce clock skew."
          },
          {
            "raw": "BROKER_ACCOUNT_STATE_STALE",
            "label": "Broker account snapshot stale",
            "explanation": "The latest persisted broker account snapshot is older than the policy TTL.",
            "action": "Verify worker-oms / broker-truth snapshot path; check GET /internal/broker-truth/account/latest freshness."
          },
          {
            "raw": "BROKER_POSITIONS_STATE_STALE",
            "label": "Broker positions snapshot stale",
            "explanation": "Broker positions used for safety checks are older than the allowed freshness window.",
            "action": "Confirm broker-truth positions snapshots are updating; inspect worker-oms logs and snapshot timestamps."
          },
          {
            "raw": "BROKER_OPEN_ORDERS_STATE_STALE",
            "label": "Broker open-orders snapshot stale",
            "explanation": "Open-order snapshots used for duplicate/conflict checks are older than the policy TTL.",
            "action": "Verify broker open-order snapshot ingestion; compare with IBKR Client Portal open orders."
          },
          {
            "raw": "RECONCILIATION_STATE_STALE",
            "label": "Reconciliation signal stale",
            "explanation": "Reconciliation inputs used by autonomous policy are older than the configured TTL.",
            "action": "Review /internal/reconciliation-v2/latest and pipeline footprint; run read-only recon preview if configured."
          },
          {
            "raw": "STRATEGY_LOOP_STATE_STALE",
            "label": "Strategy-loop context stale",
            "explanation": "Strategy-loop run/decision context is older than the policy freshness window relative to submit time.",
            "action": "Confirm latest strategy-loop run completed; align scanner → loop cadence; check run metadata timestamps."
          },
          {
            "raw": "MARKET_CLOSED_FOR_STOCK",
            "label": "Market closed",
            "explanation": "Stock entries are blocked because the session is outside the allowed US equity trading window for this policy.",
            "action": "Wait for regular trading hours or verify market-hours / calendar configuration for paper vs live."
          },
          {
            "raw": "PAPER_TEST_RTH_REQUIRED",
            "label": "Paper test — RTH only",
            "explanation": "Paper-test guard requires regular trading hours before allowing this class of entry/submit.",
            "action": "Retry during RTH or adjust paper-test RTH policy only if your playbook explicitly allows off-hours testing."
          },
          {
            "raw": "DATA_FEATURES_STALE",
            "label": "Feature data stale",
            "explanation": "Feature snapshots feeding the policy are older than the allowed freshness threshold.",
            "action": "Check market-data / features workers and latest feature snapshot timestamps in pipeline footprint."
          },
          {
            "raw": "DATA_BROKER_TRUTH_STALE",
            "label": "Broker-truth data stale",
            "explanation": "Broker-truth inputs (quotes/account/positions) are considered stale for autonomous submit.",
            "action": "Inspect broker-truth snapshot ages and worker-oms reconcile cycles; confirm gateway connectivity."
          }
        ],
        "submit_attempted": false,
        "submit_outcome": "skipped"
      },
      {
        "id": 10,
        "ts_iso": "2026-04-24T17:23:06.627567+00:00",
        "order_id": "ord-stratloop-48",
        "symbol": "QQQ",
        "account_id": "DUP667958",
        "decision": "deny",
        "reasons_raw": [
          "RECONCILIATION_STATE_STALE",
          "STRATEGY_LOOP_STATE_STALE"
        ],
        "reasons_with_labels": [
          {
            "raw": "RECONCILIATION_STATE_STALE",
            "label": "Reconciliation signal stale",
            "explanation": "Reconciliation inputs used by autonomous policy are older than the configured TTL.",
            "action": "Review /internal/reconciliation-v2/latest and pipeline footprint; run read-only recon preview if configured."
          },
          {
            "raw": "STRATEGY_LOOP_STATE_STALE",
            "label": "Strategy-loop context stale",
            "explanation": "Strategy-loop run/decision context is older than the policy freshness window relative to submit time.",
            "action": "Confirm latest strategy-loop run completed; align scanner → loop cadence; check run metadata timestamps."
          }
        ],
        "submit_attempted": false,
        "submit_outcome": "skipped"
      },
      {
        "id": 9,
        "ts_iso": "2026-04-24T17:23:06.603402+00:00",
        "order_id": "ord-stratloop-47",
        "symbol": "SPY",
        "account_id": "DUP667958",
        "decision": "deny",
        "reasons_raw": [
          "RECONCILIATION_STATE_STALE",
          "STRATEGY_LOOP_STATE_STALE"
        ],
        "reasons_with_labels": [
          {
            "raw": "RECONCILIATION_STATE_STALE",
            "label": "Reconciliation signal stale",
            "explanation": "Reconciliation inputs used by autonomous policy are older than the configured TTL.",
            "action": "Review /internal/reconciliation-v2/latest and pipeline footprint; run read-only recon preview if configured."
          },
          {
            "raw": "STRATEGY_LOOP_STATE_STALE",
            "label": "Strategy-loop context stale",
            "explanation": "Strategy-loop run/decision context is older than the policy freshness window relative to submit time.",
            "action": "Confirm latest strategy-loop run completed; align scanner → loop cadence; check run metadata timestamps."
          }
        ],
        "submit_attempted": false,
        "submit_outcome": "skipped"
      },
      {
        "id": 8,
        "ts_iso": "2026-04-24T16:09:10.951475+00:00",
        "order_id": "ord-stratloop-83",
        "symbol": "AAPL",
        "account_id": "DUP667958",
        "decision": "deny",
        "reasons_raw": [
          "AUTONOMOUS_MAX_CONCURRENT_GLOBAL_REACHED",
          "AUTONOMOUS_MAX_CONCURRENT_SYMBOL_REACHED",
          "DUPLICATE_CANDIDATE_FINGERPRINT"
        ],
        "reasons_with_labels": [
          {
            "raw": "AUTONOMOUS_MAX_CONCURRENT_GLOBAL_REACHED",
            "label": "Policy / guard reason",
            "explanation": "This reason code is not in the Phase 14B operator glossary yet; the raw code is still authoritative for automation. Raw: AUTONOMOUS_MAX_CONCURRENT_GLOBAL_REACHED.",
            "action": "Inspect GET /internal/autonomous-policy/runs (full detail) or extend kestrel_oms.operator_evidence_report."
          },
          {
            "raw": "AUTONOMOUS_MAX_CONCURRENT_SYMBOL_REACHED",
            "label": "Policy / guard reason",
            "explanation": "This reason code is not in the Phase 14B operator glossary yet; the raw code is still authoritative for automation. Raw: AUTONOMOUS_MAX_CONCURRENT_SYMBOL_REACHED.",
            "action": "Inspect GET /internal/autonomous-policy/runs (full detail) or extend kestrel_oms.operator_evidence_report."
          },
          {
            "raw": "DUPLICATE_CANDIDATE_FINGERPRINT",
            "label": "Policy / guard reason",
            "explanation": "This reason code is not in the Phase 14B operator glossary yet; the raw code is still authoritative for automation. Raw: DUPLICATE_CANDIDATE_FINGERPRINT.",
            "action": "Inspect GET /internal/autonomous-policy/runs (full detail) or extend kestrel_oms.operator_evidence_report."
          }
        ],
        "submit_attempted": false,
        "submit_outcome": "skipped"
      },
      {
        "id": 4,
        "ts_iso": "2026-04-24T14:24:08.454746+00:00",
        "order_id": "ord-stratloop-75",
        "symbol": "SPY",
        "account_id": "DUP667958",
        "decision": "deny",
        "reasons_raw": [
          "BROKER_ACCOUNT_STATE_STALE",
          "BROKER_POSITIONS_STATE_STALE",
          "BROKER_OPEN_ORDERS_STATE_STALE"
        ],
        "reasons_with_labels": [
          {
            "raw": "BROKER_ACCOUNT_STATE_STALE",
            "label": "Broker account snapshot stale",
            "explanation": "The latest persisted broker account snapshot is older than the policy TTL.",
            "action": "Verify worker-oms / broker-truth snapshot path; check GET /internal/broker-truth/account/latest freshness."
          },
          {
            "raw": "BROKER_POSITIONS_STATE_STALE",
            "label": "Broker positions snapshot stale",
            "explanation": "Broker positions used for safety checks are older than the allowed freshness window.",
            "action": "Confirm broker-truth positions snapshots are updating; inspect worker-oms logs and snapshot timestamps."
          },
          {
            "raw": "BROKER_OPEN_ORDERS_STATE_STALE",
            "label": "Broker open-orders snapshot stale",
            "explanation": "Open-order snapshots used for duplicate/conflict checks are older than the policy TTL.",
            "action": "Verify broker open-order snapshot ingestion; compare with IBKR Client Portal open orders."
          }
        ],
        "submit_attempted": false,
        "submit_outcome": "skipped"
      },
      {
        "id": 2,
        "ts_iso": "2026-04-24T13:32:17.384925+00:00",
        "order_id": "ord-stratloop-70",
        "symbol": "SPY",
        "account_id": "DUP667958",
        "decision": "deny",
        "reasons_raw": [
          "RECONCILIATION_STATE_STALE",
          "AUTONOMOUS_MAX_CONCURRENT_GLOBAL_REACHED",
          "AUTONOMOUS_MAX_CONCURRENT_SYMBOL_REACHED"
        ],
        "reasons_with_labels": [
          {
            "raw": "RECONCILIATION_STATE_STALE",
            "label": "Reconciliation signal stale",
            "explanation": "Reconciliation inputs used by autonomous policy are older than the configured TTL.",
            "action": "Review /internal/reconciliation-v2/latest and pipeline footprint; run read-only recon preview if configured."
          },
          {
            "raw": "AUTONOMOUS_MAX_CONCURRENT_GLOBAL_REACHED",
            "label": "Policy / guard reason",
            "explanation": "This reason code is not in the Phase 14B operator glossary yet; the raw code is still authoritative for automation. Raw: AUTONOMOUS_MAX_CONCURRENT_GLOBAL_REACHED.",
            "action": "Inspect GET /internal/autonomous-policy/runs (full detail) or extend kestrel_oms.operator_evidence_report."
          },
          {
            "raw": "AUTONOMOUS_MAX_CONCURRENT_SYMBOL_REACHED",
            "label": "Policy / guard reason",
            "explanation": "This reason code is not in the Phase 14B operator glossary yet; the raw code is still authoritative for automation. Raw: AUTONOMOUS_MAX_CONCURRENT_SYMBOL_REACHED.",
            "action": "Inspect GET /internal/autonomous-policy/runs (full detail) or extend kestrel_oms.operator_evidence_report."
          }
        ],
        "submit_attempted": false,
        "submit_outcome": "skipped"
      },
      {
        "id": 1,
        "ts_iso": "2026-04-24T13:32:17.340066+00:00",
        "order_id": "ord-stratloop-69",
        "symbol": "QQQ",
        "account_id": "DUP667958",
        "decision": "deny",
        "reasons_raw": [
          "RECONCILIATION_STATE_STALE",
          "AUTONOMOUS_MAX_CONCURRENT_GLOBAL_REACHED",
          "AUTONOMOUS_MAX_CONCURRENT_SYMBOL_REACHED"
        ],
        "reasons_with_labels": [
          {
            "raw": "RECONCILIATION_STATE_STALE",
            "label": "Reconciliation signal stale",
            "explanation": "Reconciliation inputs used by autonomous policy are older than the configured TTL.",
            "action": "Review /internal/reconciliation-v2/latest and pipeline footprint; run read-only recon preview if configured."
          },
          {
            "raw": "AUTONOMOUS_MAX_CONCURRENT_GLOBAL_REACHED",
            "label": "Policy / guard reason",
            "explanation": "This reason code is not in the Phase 14B operator glossary yet; the raw code is still authoritative for automation. Raw: AUTONOMOUS_MAX_CONCURRENT_GLOBAL_REACHED.",
            "action": "Inspect GET /internal/autonomous-policy/runs (full detail) or extend kestrel_oms.operator_evidence_report."
          },
          {
            "raw": "AUTONOMOUS_MAX_CONCURRENT_SYMBOL_REACHED",
            "label": "Policy / guard reason",
            "explanation": "This reason code is not in the Phase 14B operator glossary yet; the raw code is still authoritative for automation. Raw: AUTONOMOUS_MAX_CONCURRENT_SYMBOL_REACHED.",
            "action": "Inspect GET /internal/autonomous-policy/runs (full detail) or extend kestrel_oms.operator_evidence_report."
          }
        ],
        "submit_attempted": false,
        "submit_outcome": "skipped"
      }
    ],
    "grouped_by_order_id": {
      "ord-stratloop-106": [
        {
          "id": 13,
          "ts_iso": "2026-05-02T16:53:12.774824+00:00",
          "order_id": "ord-stratloop-106",
          "symbol": "AMD",
          "account_id": "DUP667958",
          "decision": "deny",
          "reasons_raw": [
            "ORDER_CANDIDATE_STALE",
            "BROKER_ACCOUNT_STATE_STALE",
            "BROKER_POSITIONS_STATE_STALE",
            "BROKER_OPEN_ORDERS_STATE_STALE",
            "RECONCILIATION_STATE_STALE",
            "STRATEGY_LOOP_STATE_STALE",
            "MARKET_CLOSED_FOR_STOCK",
            "PAPER_TEST_RTH_REQUIRED",
            "DATA_FEATURES_STALE",
            "DATA_BROKER_TRUTH_STALE"
          ],
          "reasons_with_labels": [
            {
              "raw": "ORDER_CANDIDATE_STALE",
              "label": "Order candidate stale",
              "explanation": "The OMS order row is older than the policy freshness window for autonomous submit, so the candidate is treated as stale.",
              "action": "Confirm scanner + strategy-loop just ran; check feature timestamps vs decision time; reduce clock skew."
            },
            {
              "raw": "BROKER_ACCOUNT_STATE_STALE",
              "label": "Broker account snapshot stale",
              "explanation": "The latest persisted broker account snapshot is older than the policy TTL.",
              "action": "Verify worker-oms / broker-truth snapshot path; check GET /internal/broker-truth/account/latest freshness."
            },
            {
              "raw": "BROKER_POSITIONS_STATE_STALE",
              "label": "Broker positions snapshot stale",
              "explanation": "Broker positions used for safety checks are older than the allowed freshness window.",
              "action": "Confirm broker-truth positions snapshots are updating; inspect worker-oms logs and snapshot timestamps."
            },
            {
              "raw": "BROKER_OPEN_ORDERS_STATE_STALE",
              "label": "Broker open-orders snapshot stale",
              "explanation": "Open-order snapshots used for duplicate/conflict checks are older than the policy TTL.",
              "action": "Verify broker open-order snapshot ingestion; compare with IBKR Client Portal open orders."
            },
            {
              "raw": "RECONCILIATION_STATE_STALE",
              "label": "Reconciliation signal stale",
              "explanation": "Reconciliation inputs used by autonomous policy are older than the configured TTL.",
              "action": "Review /internal/reconciliation-v2/latest and pipeline footprint; run read-only recon preview if configured."
            },
            {
              "raw": "STRATEGY_LOOP_STATE_STALE",
              "label": "Strategy-loop context stale",
              "explanation": "Strategy-loop run/decision context is older than the policy freshness window relative to submit time.",
              "action": "Confirm latest strategy-loop run completed; align scanner → loop cadence; check run metadata timestamps."
            },
            {
              "raw": "MARKET_CLOSED_FOR_STOCK",
              "label": "Market closed",
              "explanation": "Stock entries are blocked because the session is outside the allowed US equity trading window for this policy.",
              "action": "Wait for regular trading hours or verify market-hours / calendar configuration for paper vs live."
            },
            {
              "raw": "PAPER_TEST_RTH_REQUIRED",
              "label": "Paper test — RTH only",
              "explanation": "Paper-test guard requires regular trading hours before allowing this class of entry/submit.",
              "action": "Retry during RTH or adjust paper-test RTH policy only if your playbook explicitly allows off-hours testing."
            },
            {
              "raw": "DATA_FEATURES_STALE",
              "label": "Feature data stale",
              "explanation": "Feature snapshots feeding the policy are older than the allowed freshness threshold.",
              "action": "Check market-data / features workers and latest feature snapshot timestamps in pipeline footprint."
            },
            {
              "raw": "DATA_BROKER_TRUTH_STALE",
              "label": "Broker-truth data stale",
              "explanation": "Broker-truth inputs (quotes/account/positions) are considered stale for autonomous submit.",
              "action": "Inspect broker-truth snapshot ages and worker-oms reconcile cycles; confirm gateway connectivity."
            }
          ],
          "submit_attempted": false,
          "submit_outcome": "skipped"
        }
      ],
      "ord-stratloop-105": [
        {
          "id": 12,
          "ts_iso": "2026-05-02T16:53:12.741420+00:00",
          "order_id": "ord-stratloop-105",
          "symbol": "GOOGL",
          "account_id": "DUP667958",
          "decision": "deny",
          "reasons_raw": [
            "ORDER_CANDIDATE_STALE",
            "BROKER_ACCOUNT_STATE_STALE",
            "BROKER_POSITIONS_STATE_STALE",
            "BROKER_OPEN_ORDERS_STATE_STALE",
            "RECONCILIATION_STATE_STALE",
            "STRATEGY_LOOP_STATE_STALE",
            "MARKET_CLOSED_FOR_STOCK",
            "PAPER_TEST_RTH_REQUIRED",
            "DATA_FEATURES_STALE",
            "DATA_BROKER_TRUTH_STALE"
          ],
          "reasons_with_labels": [
            {
              "raw": "ORDER_CANDIDATE_STALE",
              "label": "Order candidate stale",
              "explanation": "The OMS order row is older than the policy freshness window for autonomous submit, so the candidate is treated as stale.",
              "action": "Confirm scanner + strategy-loop just ran; check feature timestamps vs decision time; reduce clock skew."
            },
            {
              "raw": "BROKER_ACCOUNT_STATE_STALE",
              "label": "Broker account snapshot stale",
              "explanation": "The latest persisted broker account snapshot is older than the policy TTL.",
              "action": "Verify worker-oms / broker-truth snapshot path; check GET /internal/broker-truth/account/latest freshness."
            },
            {
              "raw": "BROKER_POSITIONS_STATE_STALE",
              "label": "Broker positions snapshot stale",
              "explanation": "Broker positions used for safety checks are older than the allowed freshness window.",
              "action": "Confirm broker-truth positions snapshots are updating; inspect worker-oms logs and snapshot timestamps."
            },
            {
              "raw": "BROKER_OPEN_ORDERS_STATE_STALE",
              "label": "Broker open-orders snapshot stale",
              "explanation": "Open-order snapshots used for duplicate/conflict checks are older than the policy TTL.",
              "action": "Verify broker open-order snapshot ingestion; compare with IBKR Client Portal open orders."
            },
            {
              "raw": "RECONCILIATION_STATE_STALE",
              "label": "Reconciliation signal stale",
              "explanation": "Reconciliation inputs used by autonomous policy are older than the configured TTL.",
              "action": "Review /internal/reconciliation-v2/latest and pipeline footprint; run read-only recon preview if configured."
            },
            {
              "raw": "STRATEGY_LOOP_STATE_STALE",
              "label": "Strategy-loop context stale",
              "explanation": "Strategy-loop run/decision context is older than the policy freshness window relative to submit time.",
              "action": "Confirm latest strategy-loop run completed; align scanner → loop cadence; check run metadata timestamps."
            },
            {
              "raw": "MARKET_CLOSED_FOR_STOCK",
              "label": "Market closed",
              "explanation": "Stock entries are blocked because the session is outside the allowed US equity trading window for this policy.",
              "action": "Wait for regular trading hours or verify market-hours / calendar configuration for paper vs live."
            },
            {
              "raw": "PAPER_TEST_RTH_REQUIRED",
              "label": "Paper test — RTH only",
              "explanation": "Paper-test guard requires regular trading hours before allowing this class of entry/submit.",
              "action": "Retry during RTH or adjust paper-test RTH policy only if your playbook explicitly allows off-hours testing."
            },
            {
              "raw": "DATA_FEATURES_STALE",
              "label": "Feature data stale",
              "explanation": "Feature snapshots feeding the policy are older than the allowed freshness threshold.",
              "action": "Check market-data / features workers and latest feature snapshot timestamps in pipeline footprint."
            },
            {
              "raw": "DATA_BROKER_TRUTH_STALE",
              "label": "Broker-truth data stale",
              "explanation": "Broker-truth inputs (quotes/account/positions) are considered stale for autonomous submit.",
              "action": "Inspect broker-truth snapshot ages and worker-oms reconcile cycles; confirm gateway connectivity."
            }
          ],
          "submit_attempted": false,
          "submit_outcome": "skipped"
        }
      ],
      "ord-stratloop-48": [
        {
          "id": 10,
          "ts_iso": "2026-04-24T17:23:06.627567+00:00",
          "order_id": "ord-stratloop-48",
          "symbol": "QQQ",
          "account_id": "DUP667958",
          "decision": "deny",
          "reasons_raw": [
            "RECONCILIATION_STATE_STALE",
            "STRATEGY_LOOP_STATE_STALE"
          ],
          "reasons_with_labels": [
            {
              "raw": "RECONCILIATION_STATE_STALE",
              "label": "Reconciliation signal stale",
              "explanation": "Reconciliation inputs used by autonomous policy are older than the configured TTL.",
              "action": "Review /internal/reconciliation-v2/latest and pipeline footprint; run read-only recon preview if configured."
            },
            {
              "raw": "STRATEGY_LOOP_STATE_STALE",
              "label": "Strategy-loop context stale",
              "explanation": "Strategy-loop run/decision context is older than the policy freshness window relative to submit time.",
              "action": "Confirm latest strategy-loop run completed; align scanner → loop cadence; check run metadata timestamps."
            }
          ],
          "submit_attempted": false,
          "submit_outcome": "skipped"
        }
      ],
      "ord-stratloop-47": [
        {
          "id": 9,
          "ts_iso": "2026-04-24T17:23:06.603402+00:00",
          "order_id": "ord-stratloop-47",
          "symbol": "SPY",
          "account_id": "DUP667958",
          "decision": "deny",
          "reasons_raw": [
            "RECONCILIATION_STATE_STALE",
            "STRATEGY_LOOP_STATE_STALE"
          ],
          "reasons_with_labels": [
            {
              "raw": "RECONCILIATION_STATE_STALE",
              "label": "Reconciliation signal stale",
              "explanation": "Reconciliation inputs used by autonomous policy are older than the configured TTL.",
              "action": "Review /internal/reconciliation-v2/latest and pipeline footprint; run read-only recon preview if configured."
            },
            {
              "raw": "STRATEGY_LOOP_STATE_STALE",
              "label": "Strategy-loop context stale",
              "explanation": "Strategy-loop run/decision context is older than the policy freshness window relative to submit time.",
              "action": "Confirm latest strategy-loop run completed; align scanner → loop cadence; check run metadata timestamps."
            }
          ],
          "submit_attempted": false,
          "submit_outcome": "skipped"
        }
      ],
      "ord-stratloop-83": [
        {
          "id": 8,
          "ts_iso": "2026-04-24T16:09:10.951475+00:00",
          "order_id": "ord-stratloop-83",
          "symbol": "AAPL",
          "account_id": "DUP667958",
          "decision": "deny",
          "reasons_raw": [
            "AUTONOMOUS_MAX_CONCURRENT_GLOBAL_REACHED",
            "AUTONOMOUS_MAX_CONCURRENT_SYMBOL_REACHED",
            "DUPLICATE_CANDIDATE_FINGERPRINT"
          ],
          "reasons_with_labels": [
            {
              "raw": "AUTONOMOUS_MAX_CONCURRENT_GLOBAL_REACHED",
              "label": "Policy / guard reason",
              "explanation": "This reason code is not in the Phase 14B operator glossary yet; the raw code is still authoritative for automation. Raw: AUTONOMOUS_MAX_CONCURRENT_GLOBAL_REACHED.",
              "action": "Inspect GET /internal/autonomous-policy/runs (full detail) or extend kestrel_oms.operator_evidence_report."
            },
            {
              "raw": "AUTONOMOUS_MAX_CONCURRENT_SYMBOL_REACHED",
              "label": "Policy / guard reason",
              "explanation": "This reason code is not in the Phase 14B operator glossary yet; the raw code is still authoritative for automation. Raw: AUTONOMOUS_MAX_CONCURRENT_SYMBOL_REACHED.",
              "action": "Inspect GET /internal/autonomous-policy/runs (full detail) or extend kestrel_oms.operator_evidence_report."
            },
            {
              "raw": "DUPLICATE_CANDIDATE_FINGERPRINT",
              "label": "Policy / guard reason",
              "explanation": "This reason code is not in the Phase 14B operator glossary yet; the raw code is still authoritative for automation. Raw: DUPLICATE_CANDIDATE_FINGERPRINT.",
              "action": "Inspect GET /internal/autonomous-policy/runs (full detail) or extend kestrel_oms.operator_evidence_report."
            }
          ],
          "submit_attempted": false,
          "submit_outcome": "skipped"
        }
      ],
      "ord-stratloop-75": [
        {
          "id": 4,
          "ts_iso": "2026-04-24T14:24:08.454746+00:00",
          "order_id": "ord-stratloop-75",
          "symbol": "SPY",
          "account_id": "DUP667958",
          "decision": "deny",
          "reasons_raw": [
            "BROKER_ACCOUNT_STATE_STALE",
            "BROKER_POSITIONS_STATE_STALE",
            "BROKER_OPEN_ORDERS_STATE_STALE"
          ],
          "reasons_with_labels": [
            {
              "raw": "BROKER_ACCOUNT_STATE_STALE",
              "label": "Broker account snapshot stale",
              "explanation": "The latest persisted broker account snapshot is older than the policy TTL.",
              "action": "Verify worker-oms / broker-truth snapshot path; check GET /internal/broker-truth/account/latest freshness."
            },
            {
              "raw": "BROKER_POSITIONS_STATE_STALE",
              "label": "Broker positions snapshot stale",
              "explanation": "Broker positions used for safety checks are older than the allowed freshness window.",
              "action": "Confirm broker-truth positions snapshots are updating; inspect worker-oms logs and snapshot timestamps."
            },
            {
              "raw": "BROKER_OPEN_ORDERS_STATE_STALE",
              "label": "Broker open-orders snapshot stale",
              "explanation": "Open-order snapshots used for duplicate/conflict checks are older than the policy TTL.",
              "action": "Verify broker open-order snapshot ingestion; compare with IBKR Client Portal open orders."
            }
          ],
          "submit_attempted": false,
          "submit_outcome": "skipped"
        }
      ],
      "ord-stratloop-70": [
        {
          "id": 2,
          "ts_iso": "2026-04-24T13:32:17.384925+00:00",
          "order_id": "ord-stratloop-70",
          "symbol": "SPY",
          "account_id": "DUP667958",
          "decision": "deny",
          "reasons_raw": [
            "RECONCILIATION_STATE_STALE",
            "AUTONOMOUS_MAX_CONCURRENT_GLOBAL_REACHED",
            "AUTONOMOUS_MAX_CONCURRENT_SYMBOL_REACHED"
          ],
          "reasons_with_labels": [
            {
              "raw": "RECONCILIATION_STATE_STALE",
              "label": "Reconciliation signal stale",
              "explanation": "Reconciliation inputs used by autonomous policy are older than the configured TTL.",
              "action": "Review /internal/reconciliation-v2/latest and pipeline footprint; run read-only recon preview if configured."
            },
            {
              "raw": "AUTONOMOUS_MAX_CONCURRENT_GLOBAL_REACHED",
              "label": "Policy / guard reason",
              "explanation": "This reason code is not in the Phase 14B operator glossary yet; the raw code is still authoritative for automation. Raw: AUTONOMOUS_MAX_CONCURRENT_GLOBAL_REACHED.",
              "action": "Inspect GET /internal/autonomous-policy/runs (full detail) or extend kestrel_oms.operator_evidence_report."
            },
            {
              "raw": "AUTONOMOUS_MAX_CONCURRENT_SYMBOL_REACHED",
              "label": "Policy / guard reason",
              "explanation": "This reason code is not in the Phase 14B operator glossary yet; the raw code is still authoritative for automation. Raw: AUTONOMOUS_MAX_CONCURRENT_SYMBOL_REACHED.",
              "action": "Inspect GET /internal/autonomous-policy/runs (full detail) or extend kestrel_oms.operator_evidence_report."
            }
          ],
          "submit_attempted": false,
          "submit_outcome": "skipped"
        }
      ],
      "ord-stratloop-69": [
        {
          "id": 1,
          "ts_iso": "2026-04-24T13:32:17.340066+00:00",
          "order_id": "ord-stratloop-69",
          "symbol": "QQQ",
          "account_id": "DUP667958",
          "decision": "deny",
          "reasons_raw": [
            "RECONCILIATION_STATE_STALE",
            "AUTONOMOUS_MAX_CONCURRENT_GLOBAL_REACHED",
            "AUTONOMOUS_MAX_CONCURRENT_SYMBOL_REACHED"
          ],
          "reasons_with_labels": [
            {
              "raw": "RECONCILIATION_STATE_STALE",
              "label": "Reconciliation signal stale",
              "explanation": "Reconciliation inputs used by autonomous policy are older than the configured TTL.",
              "action": "Review /internal/reconciliation-v2/latest and pipeline footprint; run read-only recon preview if configured."
            },
            {
              "raw": "AUTONOMOUS_MAX_CONCURRENT_GLOBAL_REACHED",
              "label": "Policy / guard reason",
              "explanation": "This reason code is not in the Phase 14B operator glossary yet; the raw code is still authoritative for automation. Raw: AUTONOMOUS_MAX_CONCURRENT_GLOBAL_REACHED.",
              "action": "Inspect GET /internal/autonomous-policy/runs (full detail) or extend kestrel_oms.operator_evidence_report."
            },
            {
              "raw": "AUTONOMOUS_MAX_CONCURRENT_SYMBOL_REACHED",
              "label": "Policy / guard reason",
              "explanation": "This reason code is not in the Phase 14B operator glossary yet; the raw code is still authoritative for automation. Raw: AUTONOMOUS_MAX_CONCURRENT_SYMBOL_REACHED.",
              "action": "Inspect GET /internal/autonomous-policy/runs (full detail) or extend kestrel_oms.operator_evidence_report."
            }
          ],
          "submit_attempted": false,
          "submit_outcome": "skipped"
        }
      ]
    },
    "raw_reason_codes_seen": [
      "ORDER_CANDIDATE_STALE",
      "BROKER_ACCOUNT_STATE_STALE",
      "BROKER_POSITIONS_STATE_STALE",
      "BROKER_OPEN_ORDERS_STATE_STALE",
      "RECONCILIATION_STATE_STALE",
      "STRATEGY_LOOP_STATE_STALE",
      "MARKET_CLOSED_FOR_STOCK",
      "PAPER_TEST_RTH_REQUIRED",
      "DATA_FEATURES_STALE",
      "DATA_BROKER_TRUTH_STALE",
      "AUTONOMOUS_MAX_CONCURRENT_GLOBAL_REACHED",
      "AUTONOMOUS_MAX_CONCURRENT_SYMBOL_REACHED",
      "DUPLICATE_CANDIDATE_FINGERPRINT"
    ]
  },
  "open_trades": {
    "enabled": true,
    "account_id": "DUP667958",
    "count": 0,
    "rows": []
  },
  "terminal_control": {
    "enabled": true,
    "persisted_state": "normal",
    "reason_summary": "effective=normal | gov=normal | ops=normal | recon=normal | inc=normal",
    "effective_resolved_state": "normal",
    "effective_reason_summary": "effective=normal | gov=normal | ops=normal | recon=normal | inc=normal",
    "submissions_blocked": false,
    "submit_guard_env_enabled": true,
    "stale_warning": true,
    "live_mismatch": false,
    "persisted_age_seconds": 2807556.865443,
    "blocked_submissions_recent": [
      {
        "id": 3,
        "ts_iso": "2026-05-02T14:38:51.291754+00:00",
        "order_id": "ord-exit-4",
        "symbol": "AAPL",
        "reason_code": "paper_test_rth_required",
        "reason_labels": {
          "label": "Paper test — RTH only",
          "explanation": "Paper-test guard requires regular trading hours before allowing this class of entry/submit.",
          "action": "Retry during RTH or adjust paper-test RTH policy only if your playbook explicitly allows off-hours testing."
        }
      },
      {
        "id": 2,
        "ts_iso": "2026-05-02T14:38:51.287902+00:00",
        "order_id": "ord-exit-3",
        "symbol": "AAPL",
        "reason_code": "paper_test_rth_required",
        "reason_labels": {
          "label": "Paper test — RTH only",
          "explanation": "Paper-test guard requires regular trading hours before allowing this class of entry/submit.",
          "action": "Retry during RTH or adjust paper-test RTH policy only if your playbook explicitly allows off-hours testing."
        }
      },
      {
        "id": 1,
        "ts_iso": "2026-05-02T14:38:51.277890+00:00",
        "order_id": "ord-exit-2",
        "symbol": "AAPL",
        "reason_code": "paper_test_rth_required",
        "reason_labels": {
          "label": "Paper test — RTH only",
          "explanation": "Paper-test guard requires regular trading hours before allowing this class of entry/submit.",
          "action": "Retry during RTH or adjust paper-test RTH policy only if your playbook explicitly allows off-hours testing."
        }
      }
    ]
  },
  "safety": {
    "no_open_trades": true,
    "submissions_blocked": false,
    "has_approved_not_submitted": true
  },
  "operator_narrative": {
    "what_happened": "Latest scanner run id=101 at 2026-05-05T16:27:05.483016+00:00 (universe_size=7). Latest strategy-loop run id=93 with 7 decisions (2 trade, 5 skip). OMS window: 24 orders; approved_not_submitted=3; problem sample count=14.",
    "why_broker_submission_may_not_have_happened": "Autonomous submission policy recorded 8 recent deny evaluation(s); see reasons_with_labels. There are OMS orders in approved_not_submitted (approved locally, no broker id / zero fills) — broker submission did not complete for those rows.",
    "open_trades_answer": "No open trades for account 'DUP667958'.",
    "suggested_next_steps": [
      "Refresh or recompute system control state — persisted control row looks stale.",
      "Review autonomous_policy/runs for snapshot_json on the top deny order_ids.",
      "Inspect approved_not_submitted rows and broker-truth / policy freshness."
    ]
  },
  "worker_freshness": {
    "available": true,
    "generated_at_iso": "2026-06-20T15:47:19.975716+00:00",
    "overall_state": "normal",
    "stale_data_flags": [
      "market_bars_stale_off_rth_informational",
      "market_quotes_stale_off_rth_informational",
      "feature_snapshots_stale_off_rth_informational",
      "scanner_runs_stale_off_rth_informational",
      "strategy_loop_runs_stale_off_rth_informational"
    ],
    "docker_status_available": false,
    "data_freshness": {
      "market_bars": {
        "latest_ts_iso": "2026-05-18T19:59:00+00:00",
        "count": 50329
      },
      "market_quotes": {
        "latest_ts_iso": "2026-05-19T03:54:41.759396+00:00",
        "count": 230867
      },
      "feature_snapshots": {
        "latest_ts_iso": "2026-05-18T19:59:00+00:00",
        "count": 36892
      },
      "scanner_runs": {
        "latest_created_at_iso": "2026-05-05T16:27:05.483016+00:00",
        "count": 101
      },
      "strategy_loop_runs": {
        "latest_created_at_iso": "2026-05-05T16:27:05.579224+00:00",
        "count": 93
      },
      "orders": {
        "latest_created_at_iso": "2026-05-20T13:43:51.015110+00:00",
        "count": 24
      },
      "autonomous_submission_policy_runs": {
        "latest_ts_iso": "2026-05-02T16:53:12.774824+00:00",
        "count": 13
      },
      "risk_runs": {
        "latest_created_at_iso": null,
        "count": 0
      },
      "broker_account_snapshots": {
        "latest_ts_iso": "2026-06-02T04:30:09.163786+00:00",
        "count": 34476
      }
    },
    "services": [
      {
        "service_name": "worker-market-data",
        "docker_status_available": false,
        "container_state": null,
        "exit_code": null,
        "status_message": null,
        "started_at_iso": null,
        "finished_at_iso": null,
        "inferred_health": "ok",
        "inference_source": "market_bars"
      },
      {
        "service_name": "worker-features",
        "docker_status_available": false,
        "container_state": null,
        "exit_code": null,
        "status_message": null,
        "started_at_iso": null,
        "finished_at_iso": null,
        "inferred_health": "ok",
        "inference_source": "feature_snapshots"
      },
      {
        "service_name": "worker-oms",
        "docker_status_available": false,
        "container_state": null,
        "exit_code": null,
        "status_message": null,
        "started_at_iso": null,
        "finished_at_iso": null,
        "inferred_health": "ok",
        "inference_source": "orders+autonomous_submission_policy_runs"
      },
      {
        "service_name": "worker-risk",
        "docker_status_available": false,
        "container_state": null,
        "exit_code": null,
        "status_message": null,
        "started_at_iso": null,
        "finished_at_iso": null,
        "inferred_health": "missing",
        "inference_source": "risk_runs"
      },
      {
        "service_name": "worker-broker-ibkr",
        "docker_status_available": false,
        "container_state": null,
        "exit_code": null,
        "status_message": null,
        "started_at_iso": null,
        "finished_at_iso": null,
        "inferred_health": "ok",
        "inference_source": "broker_account_snapshots"
      }
    ],
    "diagnostics": [
      {
        "subject": "worker-market-data",
        "severity": "info",
        "explanation": "Market bars look stale relative to thresholds, but the approximate calendar says outside likely RTH — treat as informational.",
        "suggested_action": "Optional check of worker-market-data; no automatic restart was performed.",
        "details": {
          "last_data_age_seconds": 2836100.059792
        }
      },
      {
        "subject": "worker-risk",
        "severity": "info",
        "explanation": "No risk_runs rows — risk worker may never have run in this environment or table is empty.",
        "suggested_action": "If risk coverage is expected, verify worker-risk deployment and intake wiring.",
        "details": {}
      }
    ],
    "no_automatic_restart_note": "No automatic worker restart was performed by this report."
  }
}
Replay orders (first 20 rows, JSON)
[
  {
    "order_id": "ord-manual-6da32de74fc9",
    "symbol": "AAPL",
    "status": "submitted",
    "broker": "ibkr",
    "account_id": "DUP667958",
    "broker_order_id": "1211957035",
    "filled_quantity": 0,
    "avg_fill_price": null,
    "risk_decision_id": null,
    "option_spread_risk_decision_id": null,
    "strategy_intent_id": null,
    "strategy_run_id": null,
    "scanner_run_id": null,
    "strategy_loop_decision_id": null,
    "strategy_loop_run_id": null,
    "created_at_iso": "2026-05-20T13:43:51.015110+00:00",
    "last_fill_at_iso": null
  },
  {
    "order_id": "ord-manual-f9b6ddf00a92",
    "symbol": "AAPL",
    "status": "approved",
    "broker": "ibkr",
    "account_id": "DUP667958",
    "broker_order_id": null,
    "filled_quantity": 0,
    "avg_fill_price": null,
    "risk_decision_id": null,
    "option_spread_risk_decision_id": null,
    "strategy_intent_id": null,
    "strategy_run_id": null,
    "scanner_run_id": null,
    "strategy_loop_decision_id": null,
    "strategy_loop_run_id": null,
    "created_at_iso": "2026-05-19T20:54:33.970750+00:00",
    "last_fill_at_iso": null
  },
  {
    "order_id": "ord-manual-f7524be6dc81",
    "symbol": "AAPL",
    "status": "approved",
    "broker": "ibkr",
    "account_id": "DUP667958",
    "broker_order_id": null,
    "filled_quantity": 0,
    "avg_fill_price": null,
    "risk_decision_id": null,
    "option_spread_risk_decision_id": null,
    "strategy_intent_id": null,
    "strategy_run_id": null,
    "scanner_run_id": null,
    "strategy_loop_decision_id": null,
    "strategy_loop_run_id": null,
    "created_at_iso": "2026-05-19T20:06:19.343206+00:00",
    "last_fill_at_iso": null
  },
  {
    "order_id": "ord-manual-876133187eb8",
    "symbol": "AAPL",
    "status": "approved",
    "broker": "ibkr",
    "account_id": "DUP667958",
    "broker_order_id": null,
    "filled_quantity": 0,
    "avg_fill_price": null,
    "risk_decision_id": null,
    "option_spread_risk_decision_id": null,
    "strategy_intent_id": null,
    "strategy_run_id": null,
    "scanner_run_id": null,
    "strategy_loop_decision_id": null,
    "strategy_loop_run_id": null,
    "created_at_iso": "2026-05-19T20:05:42.099650+00:00",
    "last_fill_at_iso": null
  },
  {
    "order_id": "ord-manual-9568712e367b",
    "symbol": "AAPL",
    "status": "submitted",
    "broker": "ibkr",
    "account_id": "DUP667958",
    "broker_order_id": "1554758323",
    "filled_quantity": 0,
    "avg_fill_price": null,
    "risk_decision_id": null,
    "option_spread_risk_decision_id": null,
    "strategy_intent_id": null,
    "strategy_run_id": null,
    "scanner_run_id": null,
    "strategy_loop_decision_id": null,
    "strategy_loop_run_id": null,
    "created_at_iso": "2026-05-19T17:57:38.636404+00:00",
    "last_fill_at_iso": null
  },
  {
    "order_id": "ord-manual-de0d40f1df30",
    "symbol": "AAPL",
    "status": "error",
    "broker": "ibkr",
    "account_id": "PUT_REAL_RETURNED_ACCOUNT_ID_HERE",
    "broker_order_id": null,
    "filled_quantity": 0,
    "avg_fill_price": null,
    "risk_decision_id": null,
    "option_spread_risk_decision_id": null,
    "strategy_intent_id": null,
    "strategy_run_id": null,
    "scanner_run_id": null,
    "strategy_loop_decision_id": null,
    "strategy_loop_run_id": null,
    "created_at_iso": "2026-05-19T17:54:49.889486+00:00",
    "last_fill_at_iso": null
  },
  {
    "order_id": "ord-manual-6971d1926b3c",
    "symbol": "AAPL",
    "status": "error",
    "broker": "ibkr",
    "account_id": "DU867958",
    "broker_order_id": null,
    "filled_quantity": 0,
    "avg_fill_price": null,
    "risk_decision_id": null,
    "option_spread_risk_decision_id": null,
    "strategy_intent_id": null,
    "strategy_run_id": null,
    "scanner_run_id": null,
    "strategy_loop_decision_id": null,
    "strategy_loop_run_id": null,
    "created_at_iso": "2026-05-19T17:53:31.307310+00:00",
    "last_fill_at_iso": null
  },
  {
    "order_id": "ord-stratloop-106",
    "symbol": "AMD",
    "status": "canceled",
    "broker": "ibkr",
    "account_id": "DUP667958",
    "broker_order_id": null,
    "filled_quantity": 0,
    "avg_fill_price": null,
    "risk_decision_id": null,
    "option_spread_risk_decision_id": null,
    "strategy_intent_id": null,
    "strategy_run_id": null,
    "scanner_run_id": null,
    "strategy_loop_decision_id": 106,
    "strategy_loop_run_id": 90,
    "created_at_iso": "2026-05-02T16:48:24.396792+00:00",
    "last_fill_at_iso": null
  },
  {
    "order_id": "ord-stratloop-105",
    "symbol": "GOOGL",
    "status": "canceled",
    "broker": "ibkr",
    "account_id": "DUP667958",
    "broker_order_id": null,
    "filled_quantity": 0,
    "avg_fill_price": null,
    "risk_decision_id": null,
    "option_spread_risk_decision_id": null,
    "strategy_intent_id": null,
    "strategy_run_id": null,
    "scanner_run_id": null,
    "strategy_loop_decision_id": 105,
    "strategy_loop_run_id": 90,
    "created_at_iso": "2026-05-02T16:48:24.396792+00:00",
    "last_fill_at_iso": null
  },
  {
    "order_id": "ord-exit-4",
    "symbol": "AAPL",
    "status": "canceled",
    "broker": "ibkr",
    "account_id": "DUP667958",
    "broker_order_id": null,
    "filled_quantity": 0,
    "avg_fill_price": null,
    "risk_decision_id": null,
    "option_spread_risk_decision_id": null,
    "strategy_intent_id": null,
    "strategy_run_id": null,
    "scanner_run_id": null,
    "strategy_loop_decision_id": null,
    "strategy_loop_run_id": null,
    "created_at_iso": "2026-05-02T14:35:15.025503+00:00",
    "last_fill_at_iso": null
  },
  {
    "order_id": "ord-exit-2",
    "symbol": "AAPL",
    "status": "canceled",
    "broker": "ibkr",
    "account_id": "DUP667958",
    "broker_order_id": null,
    "filled_quantity": 0,
    "avg_fill_price": null,
    "risk_decision_id": null,
    "option_spread_risk_decision_id": null,
    "strategy_intent_id": null,
    "strategy_run_id": null,
    "scanner_run_id": null,
    "strategy_loop_decision_id": null,
    "strategy_loop_run_id": null,
    "created_at_iso": "2026-05-02T14:35:15.025503+00:00",
    "last_fill_at_iso": null
  },
  {
    "order_id": "ord-exit-3",
    "symbol": "AAPL",
    "status": "canceled",
    "broker": "ibkr",
    "account_id": "DUP667958",
    "broker_order_id": null,
    "filled_quantity": 0,
    "avg_fill_price": null,
    "risk_decision_id": null,
    "option_spread_risk_decision_id": null,
    "strategy_intent_id": null,
    "strategy_run_id": null,
    "scanner_run_id": null,
    "strategy_loop_decision_id": null,
    "strategy_loop_run_id": null,
    "created_at_iso": "2026-05-02T14:35:15.025503+00:00",
    "last_fill_at_iso": null
  },
  {
    "order_id": "ord-exit-1",
    "symbol": "MSFT",
    "status": "filled",
    "broker": "ibkr",
    "account_id": "DUP667958",
    "broker_order_id": "1569812048",
    "filled_quantity": 2,
    "avg_fill_price": 423.29,
    "risk_decision_id": null,
    "option_spread_risk_decision_id": null,
    "strategy_intent_id": null,
    "strategy_run_id": null,
    "scanner_run_id": null,
    "strategy_loop_decision_id": null,
    "strategy_loop_run_id": null,
    "created_at_iso": "2026-04-27T14:32:11.055632+00:00",
    "last_fill_at_iso": "2026-04-27T14:32:12+00:00"
  },
  {
    "order_id": "ord-stratloop-86",
    "symbol": "AAPL",
    "status": "filled",
    "broker": "ibkr",
    "account_id": "DUP667958",
    "broker_order_id": "358965319",
    "filled_quantity": 3,
    "avg_fill_price": 270.1,
    "risk_decision_id": null,
    "option_spread_risk_decision_id": null,
    "strategy_intent_id": null,
    "strategy_run_id": null,
    "scanner_run_id": null,
    "strategy_loop_decision_id": 86,
    "strategy_loop_run_id": 83,
    "created_at_iso": "2026-04-24T17:39:02.725933+00:00",
    "last_fill_at_iso": "2026-04-24T17:39:08.067393+00:00"
  },
  {
    "order_id": "ord-stratloop-47",
    "symbol": "SPY",
    "status": "error",
    "broker": "ibkr",
    "account_id": "DUP667958",
    "broker_order_id": null,
    "filled_quantity": 0,
    "avg_fill_price": null,
    "risk_decision_id": null,
    "option_spread_risk_decision_id": null,
    "strategy_intent_id": null,
    "strategy_run_id": null,
    "scanner_run_id": null,
    "strategy_loop_decision_id": 47,
    "strategy_loop_run_id": 24,
    "created_at_iso": "2026-04-24T17:23:06.527944+00:00",
    "last_fill_at_iso": null
  },
  {
    "order_id": "ord-stratloop-48",
    "symbol": "QQQ",
    "status": "error",
    "broker": "ibkr",
    "account_id": "DUP667958",
    "broker_order_id": null,
    "filled_quantity": 0,
    "avg_fill_price": null,
    "risk_decision_id": null,
    "option_spread_risk_decision_id": null,
    "strategy_intent_id": null,
    "strategy_run_id": null,
    "scanner_run_id": null,
    "strategy_loop_decision_id": 48,
    "strategy_loop_run_id": 24,
    "created_at_iso": "2026-04-24T17:23:06.527944+00:00",
    "last_fill_at_iso": null
  },
  {
    "order_id": "ord-stratloop-83",
    "symbol": "AAPL",
    "status": "filled",
    "broker": "ibkr",
    "account_id": "DUP667958",
    "broker_order_id": "2142597903",
    "filled_quantity": 3,
    "avg_fill_price": 271.05,
    "risk_decision_id": null,
    "option_spread_risk_decision_id": null,
    "strategy_intent_id": null,
    "strategy_run_id": null,
    "scanner_run_id": null,
    "strategy_loop_decision_id": 83,
    "strategy_loop_run_id": 81,
    "created_at_iso": "2026-04-24T16:09:09.997181+00:00",
    "last_fill_at_iso": "2026-04-24T16:49:30.016138+00:00"
  },
  {
    "order_id": "ord-stratloop-81",
    "symbol": "AAPL",
    "status": "filled",
    "broker": "ibkr",
    "account_id": "DUP667958",
    "broker_order_id": "2142597650",
    "filled_quantity": 3,
    "avg_fill_price": 271.04,
    "risk_decision_id": null,
    "option_spread_risk_decision_id": null,
    "strategy_intent_id": null,
    "strategy_run_id": null,
    "scanner_run_id": null,
    "strategy_loop_decision_id": 81,
    "strategy_loop_run_id": 80,
    "created_at_iso": "2026-04-24T16:00:16.724448+00:00",
    "last_fill_at_iso": "2026-04-24T16:49:30.007022+00:00"
  },
  {
    "order_id": "ord-stratloop-79",
    "symbol": "MSFT",
    "status": "filled",
    "broker": "ibkr",
    "account_id": "DUP667958",
    "broker_order_id": "1467309844",
    "filled_quantity": 2,
    "avg_fill_price": 420.68,
    "risk_decision_id": null,
    "option_spread_risk_decision_id": null,
    "strategy_intent_id": null,
    "strategy_run_id": null,
    "scanner_run_id": null,
    "strategy_loop_decision_id": 79,
    "strategy_loop_run_id": 79,
    "created_at_iso": "2026-04-24T15:40:03.201654+00:00",
    "last_fill_at_iso": "2026-04-24T16:49:29.888166+00:00"
  },
  {
    "order_id": "ord-stratloop-75",
    "symbol": "SPY",
    "status": "error",
    "broker": "ibkr",
    "account_id": "DUP667958",
    "broker_order_id": null,
    "filled_quantity": 0,
    "avg_fill_price": null,
    "risk_decision_id": null,
    "option_spread_risk_decision_id": null,
    "strategy_intent_id": null,
    "strategy_run_id": null,
    "scanner_run_id": null,
    "strategy_loop_decision_id": 75,
    "strategy_loop_run_id": 38,
    "created_at_iso": "2026-04-24T14:24:08.173557+00:00",
    "last_fill_at_iso": null
  }
]
Trade ledger (JSON)
{
  "phase": "9AZ",
  "generated_at": "2026-06-20T15:47:19.791581+00:00",
  "summary": {
    "open_trades": 0,
    "closed_trades": 4,
    "partial_trades": 0,
    "inconsistent_trades": 0,
    "realized_pnl": 5.22,
    "unrealized_pnl": null
  },
  "trades": [
    {
      "trade_id": "tr-4",
      "id": 4,
      "account_id": "DUP667958",
      "symbol": "AAPL",
      "asset_type": "stock",
      "entry_order_id": "ord-stratloop-86",
      "entry_side": "buy",
      "entry_quantity": 3,
      "entry_avg_fill_price": 270.1,
      "entry_filled_at": "2026-04-24T17:39:08.067393+00:00",
      "exit_order_id": null,
      "exit_side": "sell",
      "exit_quantity": 3,
      "exit_avg_fill_price": null,
      "exit_filled_at": "2026-05-02T14:54:33.350039+00:00",
      "status": "closed",
      "db_status": "closed",
      "realized_pnl": 0,
      "unrealized_pnl": null,
      "mark_price": null,
      "last_price": null,
      "broker_order_ids": [
        "358965319"
      ],
      "entry_broker_order_id": "358965319",
      "exit_broker_order_id": null,
      "valuation": {},
      "warnings": []
    },
    {
      "trade_id": "tr-3",
      "id": 3,
      "account_id": "DUP667958",
      "symbol": "AAPL",
      "asset_type": "stock",
      "entry_order_id": "ord-stratloop-83",
      "entry_side": "buy",
      "entry_quantity": 3,
      "entry_avg_fill_price": 271.05,
      "entry_filled_at": "2026-04-24T16:49:30.016138+00:00",
      "exit_order_id": null,
      "exit_side": "sell",
      "exit_quantity": 3,
      "exit_avg_fill_price": null,
      "exit_filled_at": "2026-05-02T14:54:33.350039+00:00",
      "status": "closed",
      "db_status": "closed",
      "realized_pnl": 0,
      "unrealized_pnl": null,
      "mark_price": null,
      "last_price": null,
      "broker_order_ids": [
        "2142597903"
      ],
      "entry_broker_order_id": "2142597903",
      "exit_broker_order_id": null,
      "valuation": {},
      "warnings": []
    },
    {
      "trade_id": "tr-2",
      "id": 2,
      "account_id": "DUP667958",
      "symbol": "AAPL",
      "asset_type": "stock",
      "entry_order_id": "ord-stratloop-81",
      "entry_side": "buy",
      "entry_quantity": 3,
      "entry_avg_fill_price": 271.04,
      "entry_filled_at": "2026-04-24T16:49:30.007022+00:00",
      "exit_order_id": null,
      "exit_side": "sell",
      "exit_quantity": 3,
      "exit_avg_fill_price": null,
      "exit_filled_at": "2026-05-02T14:54:33.350039+00:00",
      "status": "closed",
      "db_status": "closed",
      "realized_pnl": 0,
      "unrealized_pnl": null,
      "mark_price": null,
      "last_price": null,
      "broker_order_ids": [
        "2142597650"
      ],
      "entry_broker_order_id": "2142597650",
      "exit_broker_order_id": null,
      "valuation": {},
      "warnings": []
    },
    {
      "trade_id": "tr-1",
      "id": 1,
      "account_id": "DUP667958",
      "symbol": "MSFT",
      "asset_type": "stock",
      "entry_order_id": "ord-stratloop-79",
      "entry_side": "buy",
      "entry_quantity": 2,
      "entry_avg_fill_price": 420.68,
      "entry_filled_at": "2026-04-24T16:49:29.888166+00:00",
      "exit_order_id": "ord-exit-1",
      "exit_side": "sell",
      "exit_quantity": 2,
      "exit_avg_fill_price": 423.29,
      "exit_filled_at": "2026-04-27T14:32:12+00:00",
      "status": "closed",
      "db_status": "closed",
      "realized_pnl": 5.22,
      "unrealized_pnl": null,
      "mark_price": null,
      "last_price": null,
      "broker_order_ids": [
        "1467309844",
        "1569812048"
      ],
      "entry_broker_order_id": "1467309844",
      "exit_broker_order_id": "1569812048",
      "valuation": {},
      "warnings": []
    }
  ]
}