{
  "version": "catalyst.evaluator-proof.v1",
  "generatedAt": "2026-07-24T21:33:19.058Z",
  "project": {
    "name": "Catalyst",
    "track": "Bitget AI Base Camp S1 / Track 1 Trading Agent",
    "liveUrl": "https://trycatalyst.vercel.app",
    "repoUrl": "https://github.com/dolepee/catalyst",
    "oneLine": "Governed Bitget Playbook agent: Qwen writes the thesis, deterministic risk decides, every approval or refusal becomes a public receipt."
  },
  "latestCycle": {
    "generatedAt": "2026-07-24T21:31:50.850Z",
    "symbol": "BTCUSDT",
    "qwenAction": "NO_TRADE",
    "governorDecision": "STAND_DOWN",
    "reason": "Low conviction defaults to NO_TRADE.",
    "checksum": "3a65843fe20c0628523ef822803cec652ba005dc8b18eb570a858945ec573c73",
    "receiptUrl": "https://trycatalyst.vercel.app/demo-data/latest-cycle.json"
  },
  "agentHub": {
    "signalCount": 6,
    "liveSignals": 0,
    "sources": [
      {
        "source": "bitget-market-candles",
        "status": "recorded",
        "signal": "bearish",
        "evidence": "24h momentum -1.54%, 72h momentum -3.18%"
      },
      {
        "source": "bitget-market-candles",
        "status": "recorded",
        "signal": "unclear",
        "evidence": "realized volatility proxy 1.33%, regime range"
      },
      {
        "source": "agent-hub-technical-analysis",
        "status": "recorded",
        "signal": "bearish",
        "evidence": "Agent Hub technical-analysis verdict BEARISH; RSI 37.41; MACD death_cross; MA trend mixed; ATR 0.93%"
      },
      {
        "source": "fallback-bitget-market-regime",
        "status": "recorded",
        "signal": "neutral",
        "evidence": "Agent Hub macro feed unavailable; fallback uses Bitget market regime range, market-intel unclear, technical bearish. This is context only and does not count as an independent convergence source."
      },
      {
        "source": "fallback-news-no-confirmation",
        "status": "recorded",
        "signal": "neutral",
        "evidence": "Agent Hub news feed unavailable or empty for BTCUSDT; Catalyst treats this as no catalyst confirmation instead of inventing a headline."
      },
      {
        "source": "bitget-derivatives-market",
        "status": "recorded",
        "signal": "neutral",
        "evidence": "Funding 0.0100%, open interest 35.79K contracts; Bitget derivatives positioning is balanced"
      }
    ]
  },
  "sourceHealth": {
    "liveMembers": 4,
    "totalMembers": 6,
    "agentHubLiveMembers": 1,
    "members": [
      {
        "name": "Chart Scout",
        "source": "agent-hub-technical-analysis",
        "sourceStatus": "live",
        "vote": "TRADE",
        "direction": "short"
      },
      {
        "name": "Flow Scout",
        "source": "bitget-market-candles",
        "sourceStatus": "live",
        "vote": "WATCH",
        "direction": "flat"
      },
      {
        "name": "Macro Scout",
        "source": "fallback-bitget-market-regime",
        "sourceStatus": "fallback",
        "vote": "WATCH",
        "direction": "flat"
      },
      {
        "name": "Narrative Scout",
        "source": "fallback-news-no-confirmation",
        "sourceStatus": "fallback",
        "vote": "WATCH",
        "direction": "flat"
      },
      {
        "name": "Positioning Scout",
        "source": "bitget-derivatives-market",
        "sourceStatus": "live",
        "vote": "WATCH",
        "direction": "flat"
      },
      {
        "name": "Qwen Strategist",
        "source": "bitget-qwen",
        "sourceStatus": "live",
        "vote": "STAND_DOWN",
        "direction": "flat"
      }
    ]
  },
  "council": {
    "version": "catalyst.agent-council.v1",
    "liveMembers": 4,
    "requiredLiveMembers": 3,
    "consensus": "WATCH",
    "voteCounts": {
      "trade": 1,
      "standDown": 1,
      "watch": 4
    },
    "governor": {
      "name": "Risk Governor",
      "decision": "STAND_DOWN",
      "approved": false,
      "reason": "Low conviction defaults to NO_TRADE.",
      "failedChecks": [
        "conviction_floor"
      ]
    }
  },
  "forwardLedger": {
    "updatedAt": "2026-07-24T21:33:19.058Z",
    "cycles": 671,
    "resolved": 670,
    "pending": 1,
    "approved": 70,
    "vetoed": 409,
    "standDown": 191,
    "vetoedStopCrossings": 227,
    "approvedWinRatePct": 62.8571,
    "disciplineAlphaPct": 26.0111,
    "headline": "70 approved trades resolved at 62.8571% win; discipline added +26.0111% over 409 refused setups across 671 cycles. Simulation shadow, every decision reconcilable.",
    "ledgerUrl": "https://trycatalyst.vercel.app/demo-data/forward-ledger.json",
    "csvUrl": "https://trycatalyst.vercel.app/demo-data/discipline-alpha.csv"
  },
  "paperTradingLog": {
    "count": 70,
    "startingBalance": 100,
    "endingBalance": 140.510829,
    "latestTrade": {
      "timestamp": "2026-07-21T14:27:14.498Z",
      "tradingPair": "ETHUSDT",
      "direction": "long",
      "price": 1845.27,
      "quantity": 0.00886139,
      "accountBalanceBefore": 139.757814,
      "accountBalanceChange": 0.753015,
      "accountBalanceAfter": 140.510829,
      "accountBalanceChangePct": 0.5388,
      "exitPrice": 1930.24,
      "entryTimestamp": "2026-07-18T17:00:00.000Z",
      "exitTimestamp": "2026-07-21T14:00:00.000Z",
      "status": "APPROVED_PAPER_TRADE",
      "source": "committed receipt shadowLedger",
      "receiptChecksum": "19a18cb08102b8d351c890416a6472ba16671d7cb45f2343a850cb9ec7c5dd70",
      "receiptFile": "receipts/cycles/20260721-142714498Z-19a18cb081.json"
    },
    "jsonUrl": "https://trycatalyst.vercel.app/demo-data/paper-trading-log.json",
    "csvUrl": "https://trycatalyst.vercel.app/demo-data/paper-trading-log.csv",
    "requiredColumns": "timestamp, tradingPair, direction, price, quantity, accountBalanceBefore, accountBalanceChange, accountBalanceAfter"
  },
  "playbook": {
    "status": "completed",
    "runId": "pbrun-b8eb40e05307",
    "playbookId": "ca1f5ab9-bdfe-4517-b1ac-dae398078239",
    "versionId": "",
    "symbol": "SOLUSDT",
    "action": "long",
    "publishStatus": "not_claimed",
    "publishUrl": "",
    "totalReturnPct": 0.0291,
    "accountTotalReturnPct": 0.1456,
    "sharpe": 2.635,
    "maxDrawdownPct": 4.82,
    "accountMaxDrawdownPct": 0.0241,
    "winRate": 0.7,
    "totalTrades": 20,
    "profitFactor": 7.5477,
    "metricsBasis": "strategy",
    "period": {
      "start": "2026-03-01T00:00:00+00:00",
      "end": "2026-06-06T00:00:00+00:00"
    },
    "proofUrl": "https://trycatalyst.vercel.app/playbook-proof.json"
  },
  "publicArtifacts": [
    {
      "label": "Evaluator proof JSON",
      "url": "https://trycatalyst.vercel.app/demo-data/evaluator-proof.json"
    },
    {
      "label": "Latest receipt",
      "url": "https://trycatalyst.vercel.app/demo-data/latest-cycle.json"
    },
    {
      "label": "Forward ledger",
      "url": "https://trycatalyst.vercel.app/demo-data/forward-ledger.json"
    },
    {
      "label": "Per-decision CSV",
      "url": "https://trycatalyst.vercel.app/demo-data/discipline-alpha.csv"
    },
    {
      "label": "Paper trading log JSON",
      "url": "https://trycatalyst.vercel.app/demo-data/paper-trading-log.json"
    },
    {
      "label": "Paper trading log CSV",
      "url": "https://trycatalyst.vercel.app/demo-data/paper-trading-log.csv"
    },
    {
      "label": "GetAgent Playbook proof",
      "url": "https://trycatalyst.vercel.app/playbook-proof.json"
    }
  ],
  "localVerification": {
    "commands": [
      "npm ci",
      "npm test",
      "npm run build",
      "npm run verify:all"
    ],
    "verifyAllCovers": [
      "latest receipt checksum",
      "decision-pair proof",
      "discipline-alpha drift",
      "calibration drift",
      "council drift",
      "paper-trading-log drift",
      "evaluator-pack drift"
    ]
  },
  "caveats": [
    "Simulation shadow, not real-capital PnL.",
    "No profit guarantee and not financial advice.",
    "Agent Hub fallback rows are labeled and do not count as live convergence.",
    "The latest cycle can approve, veto, or stand down; the proof is the recorded decision path."
  ]
}