{
  "version": "catalyst.receipt.v1",
  "generatedAt": "2026-06-01T00:00:00.000Z",
  "proofMode": "historical_replay",
  "replay": {
    "type": "trade_cleared_replay",
    "label": "Historical trade-cleared replay",
    "source": "real-bitget-candles-plus-getagent-playbook-proof",
    "caveat": "This is not the latest live cycle. It replays a historical Bitget candle window with Catalyst's same deterministic risk governor to prove the agent can clear trades when risk passes.",
    "playbookRunId": "pbrun-b8eb40e05307",
    "playbookStatus": "completed",
    "playbookSymbol": "SOLUSDT",
    "playbookPeriod": {
      "start": "2026-03-01T00:00:00+00:00",
      "end": "2026-06-06T00:00:00+00:00"
    },
    "selection": {
      "policy": "first non-stop-loss approved replay within 14 daily windows ending at the Playbook period close",
      "baseEndTime": "2026-06-06T00:00:00.000Z",
      "maxDays": 14,
      "selectedDayOffset": 5,
      "attempts": [
        {
          "dayOffset": 0,
          "endTime": "2026-06-06T00:00:00.000Z",
          "decision": "APPROVE",
          "exitReason": "stop_loss",
          "tradeReturnPct": -2,
          "checksum": "a2cd137b27b797f6ecca3d03e8566a1b7ecb08dd3e6fd7b410d68136e74e7f2e"
        },
        {
          "dayOffset": 1,
          "endTime": "2026-06-05T00:00:00.000Z",
          "decision": "APPROVE",
          "exitReason": "stop_loss",
          "tradeReturnPct": -2,
          "checksum": "76bcc9cc3921c2726f44c4f792e0d27529086f0bd483b480c852f055b8adeb8e"
        },
        {
          "dayOffset": 2,
          "endTime": "2026-06-04T00:00:00.000Z",
          "decision": "APPROVE",
          "exitReason": "stop_loss",
          "tradeReturnPct": -2,
          "checksum": "63fd74be52fc1f140d75b6e4299d8819910928f97bb7f152b0d125755d10fdfb"
        },
        {
          "dayOffset": 3,
          "endTime": "2026-06-03T00:00:00.000Z",
          "decision": "APPROVE",
          "exitReason": "stop_loss",
          "tradeReturnPct": -2,
          "checksum": "30ae4afe8b1147c64ca5b0880f219477e9184fc1fae91de3842f64bb982189c4"
        },
        {
          "dayOffset": 4,
          "endTime": "2026-06-02T00:00:00.000Z",
          "decision": "APPROVE",
          "exitReason": "stop_loss",
          "tradeReturnPct": -2,
          "checksum": "0d4f8b3255968e9260da9b2954142adf9d61e1ca712d059a26e639fdb7c4ab5d"
        },
        {
          "dayOffset": 5,
          "endTime": "2026-06-01T00:00:00.000Z",
          "decision": "APPROVE",
          "exitReason": "window_close",
          "tradeReturnPct": 1.537,
          "checksum": "d9f7f3733a738175b277a4dd0d1e981fe0e019f60fe0faf2f3094021e23d920b"
        }
      ]
    },
    "playbookMetrics": {
      "sharpeRatio": 2.635,
      "maxDrawdownPct": 4.82,
      "winRate": 0.7,
      "totalTrades": 20,
      "profitFactor": 7.5477
    }
  },
  "market": {
    "source": "bitget-mix-usdt-futures",
    "symbol": "SOLUSDT",
    "granularity": "1H",
    "candleCount": 200,
    "firstTs": 1779555600000,
    "lastTs": 1780272000000,
    "latestPrice": 82.777
  },
  "signals": {
    "asset": "SOLUSDT",
    "latestPrice": 82.777,
    "generatedAt": "2026-06-22T09:50:51.675Z",
    "regime": "range",
    "convergence": {
      "bullishCount": 1,
      "bearishCount": 0,
      "realSignalCount": 3,
      "requiredForTrade": 3
    },
    "signals": [
      {
        "source": "bitget-market-candles",
        "kind": "technical-analysis",
        "signal": "neutral",
        "score": -0.0615,
        "evidence": "24h momentum -0.25%, 72h momentum 0.75%"
      },
      {
        "source": "bitget-market-candles",
        "kind": "market-intel",
        "signal": "unclear",
        "score": 0.8881,
        "evidence": "realized volatility proxy 1.34%, regime range"
      },
      {
        "source": "fallback-bitget-market-regime",
        "kind": "macro-analyst",
        "signal": "neutral",
        "score": 0,
        "countsForConvergence": false,
        "evidence": "Agent Hub macro feed unavailable; fallback uses Bitget market regime range, market-intel unclear, technical neutral. This is context only and does not count as an independent convergence source."
      },
      {
        "source": "fallback-news-no-confirmation",
        "kind": "news-briefing",
        "signal": "neutral",
        "score": 0,
        "countsForConvergence": false,
        "evidence": "Agent Hub news feed unavailable or empty for SOLUSDT; Catalyst treats this as no catalyst confirmation instead of inventing a headline."
      },
      {
        "source": "pending-agent-hub-skill",
        "kind": "sentiment-analyst",
        "signal": "unavailable",
        "score": 0,
        "evidence": "Bitget derivatives positioning unavailable; Agent Hub sentiment skill not connected yet"
      },
      {
        "source": "getagent-playbook-cloud-run",
        "kind": "market-intel",
        "signal": "trend_confirmed",
        "score": 0.6587,
        "evidence": "GetAgent Playbook run pbrun-b8eb40e05307 completed on SOLUSDT: Sharpe 2.635, max drawdown 4.82%, win rate 70%, trades 20.",
        "raw": {
          "proofType": "catalyst.getagent.playbook.run.v1",
          "runId": "pbrun-b8eb40e05307",
          "status": "completed",
          "metrics": {
            "totalReturnPct": 0.0291,
            "accountTotalReturnPct": 0.1456,
            "sharpeRatio": 2.635,
            "maxDrawdownPct": 4.82,
            "accountMaxDrawdownPct": 0.0241,
            "winRate": 0.7,
            "totalTrades": 20,
            "profitFactor": 7.5477,
            "netPnl": 0.14557766300000366,
            "marginBudget": 500,
            "metricsBasis": "strategy"
          },
          "period": {
            "start": "2026-03-01T00:00:00+00:00",
            "end": "2026-06-06T00:00:00+00:00"
          }
        }
      }
    ]
  },
  "qwen": {
    "provider": "getagent-replay-thesis",
    "model": "catalyst-risk-layer",
    "realQwen": false,
    "thesis": {
      "asset": "SOLUSDT",
      "action": "TRADE",
      "direction": "long",
      "conviction": 0.7961,
      "rationale": "Historical replay: GetAgent run pbrun-b8eb40e05307 showed a disciplined LONG setup while Catalyst had 3/3 real replay sources. The same deterministic governor cleared a bounded position instead of forcing full exposure.",
      "invalidation": "Replay invalidates if live source coverage drops below threshold, conviction falls below 0.65, volatility exceeds the cap, or the stop-loss band is crossed."
    }
  },
  "thesis": {
    "asset": "SOLUSDT",
    "action": "TRADE",
    "direction": "long",
    "conviction": 0.7961,
    "rationale": "Historical replay: GetAgent run pbrun-b8eb40e05307 showed a disciplined LONG setup while Catalyst had 3/3 real replay sources. The same deterministic governor cleared a bounded position instead of forcing full exposure.",
    "invalidation": "Replay invalidates if live source coverage drops below threshold, conviction falls below 0.65, volatility exceeds the cap, or the stop-loss band is crossed."
  },
  "risk": {
    "approved": true,
    "decision": "APPROVE",
    "reason": "All deterministic risk checks passed.",
    "positionPct": 0.1433,
    "stopLossPct": 0.02,
    "checks": [
      {
        "name": "live_signal_coverage",
        "pass": true,
        "value": "3/3",
        "reason": "Catalyst requires enough live signal sources before trading."
      },
      {
        "name": "conviction_floor",
        "pass": true,
        "value": 0.7961,
        "reason": "Low conviction defaults to NO_TRADE."
      },
      {
        "name": "volatility_cap",
        "pass": true,
        "value": 0.01743,
        "reason": "Volatility above cap makes the setup unstable."
      },
      {
        "name": "momentum_not_extreme",
        "pass": true,
        "value": -0.00147,
        "reason": "Avoid chasing a move after an extreme 24h impulse."
      }
    ]
  },
  "sim": {
    "engine": "self-hosted-sim",
    "action": "TRADE",
    "inSample": {
      "pnlPct": -3.1448,
      "sharpe": -0.2219,
      "maxDrawdownPct": 7.3357,
      "winRate": 0.4884,
      "bars": 130
    },
    "outOfSample": {
      "pnlPct": 1.4623,
      "sharpe": 0.3047,
      "maxDrawdownPct": 1.9726,
      "winRate": 0.5072,
      "bars": 70,
      "tradeReturnPct": 1.537,
      "portfolioReturnPct": 0.2202
    },
    "fills": [
      {
        "asset": "SOLUSDT",
        "direction": "long",
        "entry": 81.524,
        "entryTs": 1780023600000,
        "exit": 82.777,
        "exitTs": 1780272000000,
        "exitReason": "window_close",
        "positionPct": 0.1433,
        "stop": 79.89352,
        "takeProfit": 84.37733999999999
      }
    ]
  },
  "council": {
    "version": "catalyst.agent-council.v1",
    "generatedAt": "2026-06-22T09:50:51.675Z",
    "requiredLiveMembers": 3,
    "liveMembers": 2,
    "consensus": "WATCH",
    "voteCounts": {
      "trade": 1,
      "standDown": 0,
      "watch": 5
    },
    "members": [
      {
        "id": "chart-scout",
        "name": "Chart Scout",
        "role": "Reads Bitget candles and Agent Hub technicals",
        "source": "bitget-market-candles",
        "sourceStatus": "live",
        "signal": "neutral",
        "vote": "WATCH",
        "direction": "flat",
        "confidence": 0.4838,
        "reason": "24h momentum -0.25%, 72h momentum 0.75%"
      },
      {
        "id": "flow-scout",
        "name": "Flow Scout",
        "role": "Checks market structure and volatility",
        "source": "bitget-market-candles",
        "sourceStatus": "live",
        "signal": "unclear",
        "vote": "WATCH",
        "direction": "flat",
        "confidence": 0.9385,
        "reason": "realized volatility proxy 1.34%, regime range"
      },
      {
        "id": "macro-scout",
        "name": "Macro Scout",
        "role": "Looks for broad risk-on or risk-off context",
        "source": "fallback-bitget-market-regime",
        "sourceStatus": "fallback",
        "signal": "neutral",
        "vote": "WATCH",
        "direction": "flat",
        "confidence": 0.12,
        "reason": "Agent Hub macro feed unavailable; fallback uses Bitget market regime range, market-intel unclear, technical neutral. This is context only and does not count as an independent convergence so..."
      },
      {
        "id": "narrative-scout",
        "name": "Narrative Scout",
        "role": "Checks whether news confirms the setup",
        "source": "fallback-news-no-confirmation",
        "sourceStatus": "fallback",
        "signal": "neutral",
        "vote": "WATCH",
        "direction": "flat",
        "confidence": 0.12,
        "reason": "Agent Hub news feed unavailable or empty for SOLUSDT; Catalyst treats this as no catalyst confirmation instead of inventing a headline."
      },
      {
        "id": "positioning-scout",
        "name": "Positioning Scout",
        "role": "Reads funding and derivatives positioning",
        "source": "pending-agent-hub-skill",
        "sourceStatus": "unavailable",
        "signal": "unavailable",
        "vote": "WATCH",
        "direction": "flat",
        "confidence": 0,
        "reason": "Bitget derivatives positioning unavailable; Agent Hub sentiment skill not connected yet"
      },
      {
        "id": "qwen-strategist",
        "name": "Qwen Strategist",
        "role": "Synthesizes the thesis in plain language",
        "source": "getagent-replay-thesis",
        "sourceStatus": "fallback",
        "signal": "TRADE",
        "vote": "TRADE",
        "direction": "long",
        "confidence": 0.7961,
        "reason": "Historical replay: GetAgent run pbrun-b8eb40e05307 showed a disciplined LONG setup while Catalyst had 3/3 real replay sources. The same deterministic governor cleared a bounded position ins..."
      }
    ],
    "governor": {
      "name": "Risk Governor",
      "decision": "APPROVE",
      "approved": true,
      "reason": "All deterministic risk checks passed.",
      "failedChecks": []
    }
  },
  "shadowLedger": {
    "version": "catalyst.shadow-ledger.v1",
    "simulationOnly": true,
    "status": "APPROVED_REFERENCE",
    "label": "What the governor allowed",
    "reason": "The setup cleared the governor; this shadow row mirrors the approved reference trade.",
    "rawDirection": "long",
    "entry": 81.524,
    "exit": 82.777,
    "entryTs": 1780023600000,
    "exitTs": 1780272000000,
    "positionPct": 0.1433,
    "rawReturnPct": 1.537,
    "portfolioReturnPct": 0.2202,
    "riskControlledReturnPct": 1.537,
    "riskControlledPortfolioReturnPct": 0.2202,
    "maxAdversePct": 1.4842,
    "stopLossPct": 2,
    "exitReason": "window_close",
    "actualSimAction": "TRADE",
    "failedRiskChecks": []
  },
  "checksum": "be5409cd3c8f12b51ec79b64ca52e1432d57d09bdb1a5d1008097aa42207d10f"
}