{
  "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-897d2346352e",
    "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": "680d6ed5fa05f9f71a2a1a0bdf9f143dce31782cf807893a95c358efa9dccc15"
        },
        {
          "dayOffset": 1,
          "endTime": "2026-06-05T00:00:00.000Z",
          "decision": "APPROVE",
          "exitReason": "stop_loss",
          "tradeReturnPct": -2,
          "checksum": "b929978401f030925cde32a120ab0f92a55a143c2209b2a71c8d65f0b707b4d9"
        },
        {
          "dayOffset": 2,
          "endTime": "2026-06-04T00:00:00.000Z",
          "decision": "APPROVE",
          "exitReason": "stop_loss",
          "tradeReturnPct": -2,
          "checksum": "eea30742de03ea85d6295b1d845f99efac0e9f8364bf0d68fb8548f36225e7ab"
        },
        {
          "dayOffset": 3,
          "endTime": "2026-06-03T00:00:00.000Z",
          "decision": "APPROVE",
          "exitReason": "stop_loss",
          "tradeReturnPct": -2,
          "checksum": "b4d5582a18d367d9e6676a5ed9ca7bd9bfe1c418d45c7666bc7e07296f33f52c"
        },
        {
          "dayOffset": 4,
          "endTime": "2026-06-02T00:00:00.000Z",
          "decision": "APPROVE",
          "exitReason": "stop_loss",
          "tradeReturnPct": -2,
          "checksum": "8de928380445397e0aef684e773f589ef602d6f2382c4b6f343a0a9cc6194c89"
        },
        {
          "dayOffset": 5,
          "endTime": "2026-06-01T00:00:00.000Z",
          "decision": "APPROVE",
          "exitReason": "window_close",
          "tradeReturnPct": 1.537,
          "checksum": "a6edeacef166acd66f06a92f88ee48dcd32fd82d3e35faedb34d9a44b6a6751d"
        }
      ]
    },
    "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-08T22:18:23.362Z",
    "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-897d2346352e completed on SOLUSDT: Sharpe 2.635, max drawdown 4.82%, win rate 70%, trades 20.",
        "raw": {
          "proofType": "catalyst.getagent.playbook.run.v1",
          "runId": "pbrun-897d2346352e",
          "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-897d2346352e 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-897d2346352e 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-08T22:18:23.362Z",
    "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-897d2346352e 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": "dc2a03be82792da3dcb1c3e40f63ecb46678bf0597bc58de389340cb04a93f8a"
}