{
  "generatedAt": "2026-05-08T15:59:03.716Z",
  "indicators": [
    {
      "key": "move",
      "name": "MOVE",
      "value": 72.23999786376953,
      "displayValue": "72.2",
      "score": 0,
      "interpretation": "Treasury volatility is relatively contained.",
      "detail": "20d change -1.8; 75th pct 100.4; 90th pct 112.0.",
      "thresholds": "Warning if MOVE ≥ 110.0 or 20d change ≥ 5.0. Stress if MOVE ≥ 140.0 or 20d change ≥ 12.0.",
      "source": "^MOVE via Yahoo Finance"
    },
    {
      "key": "hy",
      "name": "US High-Yield OAS",
      "value": 2.79,
      "displayValue": "2.79%",
      "score": 0,
      "interpretation": "Credit spreads are relatively calm.",
      "detail": "20d change -0.11 pts; 75th pct 3.56; 90th pct 4.05.",
      "thresholds": "Warning if OAS ≥ 4.00% or 20d change ≥ 0.25 pts. Stress if OAS ≥ 5.00% or 20d change ≥ 0.75 pts.",
      "source": "FRED BAMLH0A0HYM2"
    },
    {
      "key": "sofrSpread",
      "name": "SOFR - IORB Spread",
      "value": -0.04999999999999982,
      "displayValue": "-5.0 bps",
      "score": 0,
      "interpretation": "Funding spread looks normal.",
      "detail": "Current -0.050%; 60d avg -0.000%; deviation -4.9 bps.",
      "thresholds": "Warning if deviation ≥ 3.0 bps. Stress if deviation ≥ 6.0 bps.",
      "source": "FRED SOFR and IORB"
    },
    {
      "key": "stlfsi",
      "name": "Financial Stress",
      "value": -0.6702,
      "displayValue": "-0.67",
      "score": 0,
      "interpretation": "Broader financial conditions remain calm.",
      "detail": "8w change -0.24; 75th pct 0.25; 90th pct 0.80.",
      "thresholds": "Warning if index ≥ 0.25 or 8w change ≥ 0.15. Stress if index ≥ 0.80 or 8w change ≥ 0.40.",
      "source": "FRED STLFSI4"
    },
    {
      "key": "spxTrend",
      "name": "S&P 500 Trend",
      "value": 7337.11,
      "displayValue": "7337",
      "score": 0,
      "interpretation": "Equity trend remains supportive.",
      "detail": "vs 200d avg 8.7%; 20d change 7.5%.",
      "thresholds": "Warning if S&P 500 falls below its 200d average or drops 2%+ over 20d. Stress if it is 5%+ below the 200d average and down 5%+ over 20d.",
      "source": "FRED SP500"
    }
  ],
  "regime": {
    "regime": "Calm",
    "total": 0,
    "reds": 0,
    "yellows": 0,
    "summary": "Conditions look broadly supportive; no major transition signal yet.",
    "trigger": "No turbulence, speculation, or rebound rule fired, so the system defaults to Calm."
  },
  "cycle": {
    "regime": "Calm",
    "trigger": "Desired Calm because liquidity is still broadly supportive and the warning cluster is not persistent enough to keep the cycle in a late-stage regime.",
    "summary": "The smoothed cycle regime remains in a stable calm phase with no persistent transition signal yet."
  },
  "liquidity": {
    "displayValue": "5,831,742",
    "trend4w": -0.019132546471986145,
    "trend13w": 0.02362745738151273,
    "source": "FRED WALCL - RRPONTSYD - WTREGEN"
  },
  "history": [
    {
      "date": "2026-05-01",
      "regime": "Calm",
      "spy": 7230.12,
      "total": 0,
      "reds": 0,
      "yellows": 0,
      "liquidityTrend13w": 0.009443926361473176,
      "desiredRegime": "Calm",
      "desiredTrigger": "Desired Calm because liquidity is still broadly supportive and the warning cluster is not persistent enough to keep the cycle in a late-stage regime.",
      "nowcast": {
        "regime": "Calm",
        "total": 0,
        "reds": 0,
        "yellows": 0,
        "summary": "Conditions look broadly supportive; no major transition signal yet.",
        "trigger": "No turbulence, speculation, or rebound rule fired, so the system defaults to Calm."
      },
      "cycleRegime": "Calm",
      "cycleTrigger": "Desired Calm because liquidity is still broadly supportive and the warning cluster is not persistent enough to keep the cycle in a late-stage regime."
    },
    {
      "date": "2026-04-24",
      "regime": "Calm",
      "spy": 7165.08,
      "total": 0,
      "reds": 0,
      "yellows": 0,
      "liquidityTrend13w": -0.0024259716933472397,
      "desiredRegime": "Calm",
      "desiredTrigger": "Desired Calm because liquidity is still broadly supportive and the warning cluster is not persistent enough to keep the cycle in a late-stage regime.",
      "nowcast": {
        "regime": "Calm",
        "total": 0,
        "reds": 0,
        "yellows": 0,
        "summary": "Conditions look broadly supportive; no major transition signal yet.",
        "trigger": "No turbulence, speculation, or rebound rule fired, so the system defaults to Calm."
      },
      "cycleRegime": "Speculation",
      "cycleTrigger": "Desired Speculation because liquidity is rolling over (13w 1.6%, 4w -0.3%) while warning signals are active."
    },
    {
      "date": "2026-04-17",
      "regime": "Calm",
      "spy": 7126.06,
      "total": 0,
      "reds": 0,
      "yellows": 0,
      "liquidityTrend13w": 0.026164486034638168,
      "desiredRegime": "Calm",
      "desiredTrigger": "Desired Calm because liquidity is still broadly supportive and the warning cluster is not persistent enough to keep the cycle in a late-stage regime.",
      "nowcast": {
        "regime": "Calm",
        "total": 0,
        "reds": 0,
        "yellows": 0,
        "summary": "Conditions look broadly supportive; no major transition signal yet.",
        "trigger": "No turbulence, speculation, or rebound rule fired, so the system defaults to Calm."
      },
      "cycleRegime": "Speculation",
      "cycleTrigger": "Desired Speculation because liquidity is rolling over (13w 1.6%, 4w -0.3%) while warning signals are active."
    },
    {
      "date": "2026-04-10",
      "regime": "Calm",
      "spy": 6816.89,
      "total": 0,
      "reds": 0,
      "yellows": 0,
      "liquidityTrend13w": 0.029086434660326788,
      "desiredRegime": "Calm",
      "desiredTrigger": "Desired Calm because liquidity is still broadly supportive and the warning cluster is not persistent enough to keep the cycle in a late-stage regime.",
      "nowcast": {
        "regime": "Calm",
        "total": 0,
        "reds": 0,
        "yellows": 0,
        "summary": "Conditions look broadly supportive; no major transition signal yet.",
        "trigger": "No turbulence, speculation, or rebound rule fired, so the system defaults to Calm."
      },
      "cycleRegime": "Speculation",
      "cycleTrigger": "Desired Speculation because liquidity is rolling over (13w 1.6%, 4w -0.3%) while warning signals are active."
    },
    {
      "date": "2026-04-03",
      "regime": "Speculation",
      "spy": 6582.69,
      "total": 4,
      "reds": 1,
      "yellows": 2,
      "liquidityTrend13w": 0.004207654522439208,
      "desiredRegime": "Speculation",
      "desiredTrigger": "Desired Speculation because liquidity is rolling over (13w 0.4%, 4w 0.5%) while warning signals are active.",
      "nowcast": {
        "regime": "Speculation",
        "total": 4,
        "reds": 1,
        "yellows": 2,
        "summary": "This looks like late-cycle speculation: warning signals are present, but the full turbulence cluster is not yet dominant.",
        "trigger": "Speculation triggered because the total stress score reached 4, which is at or above the threshold of 4."
      },
      "cycleRegime": "Speculation",
      "cycleTrigger": "Desired Speculation because liquidity is rolling over (13w 1.6%, 4w -0.3%) while warning signals are active."
    },
    {
      "date": "2026-03-27",
      "regime": "Speculation",
      "spy": 6368.85,
      "total": 6,
      "reds": 2,
      "yellows": 2,
      "liquidityTrend13w": 0.006785568487636562,
      "desiredRegime": "Speculation",
      "desiredTrigger": "Desired Speculation because liquidity is rolling over (13w 0.7%, 4w 1.0%) while warning signals are active.",
      "nowcast": {
        "regime": "Speculation",
        "total": 6,
        "reds": 2,
        "yellows": 2,
        "summary": "This looks like late-cycle speculation: warning signals are present, but the full turbulence cluster is not yet dominant.",
        "trigger": "Speculation triggered because the total stress score reached 6, which is at or above the threshold of 4."
      },
      "cycleRegime": "Speculation",
      "cycleTrigger": "Desired Speculation because liquidity is rolling over (13w 1.6%, 4w -0.3%) while warning signals are active."
    },
    {
      "date": "2026-03-20",
      "regime": "Speculation",
      "spy": 6506.48,
      "total": 5,
      "reds": 1,
      "yellows": 3,
      "liquidityTrend13w": 0.013824600549268595,
      "desiredRegime": "Speculation",
      "desiredTrigger": "Desired Speculation because liquidity is rolling over (13w 1.4%, 4w 1.8%) while warning signals are active.",
      "nowcast": {
        "regime": "Speculation",
        "total": 5,
        "reds": 1,
        "yellows": 3,
        "summary": "This looks like late-cycle speculation: warning signals are present, but the full turbulence cluster is not yet dominant.",
        "trigger": "Speculation triggered because the total stress score reached 5, which is at or above the threshold of 4."
      },
      "cycleRegime": "Speculation",
      "cycleTrigger": "Desired Speculation because liquidity is rolling over (13w 1.6%, 4w -0.3%) while warning signals are active."
    },
    {
      "date": "2026-03-13",
      "regime": "Speculation",
      "spy": 6632.19,
      "total": 5,
      "reds": 1,
      "yellows": 3,
      "liquidityTrend13w": 0.022499572915988475,
      "desiredRegime": "Speculation",
      "desiredTrigger": "Desired Speculation because liquidity is rolling over (13w 2.2%, 4w 1.8%) while warning signals are active.",
      "nowcast": {
        "regime": "Speculation",
        "total": 5,
        "reds": 1,
        "yellows": 3,
        "summary": "This looks like late-cycle speculation: warning signals are present, but the full turbulence cluster is not yet dominant.",
        "trigger": "Speculation triggered because the total stress score reached 5, which is at or above the threshold of 4."
      },
      "cycleRegime": "Speculation",
      "cycleTrigger": "Desired Speculation because liquidity is rolling over (13w 1.6%, 4w -0.3%) while warning signals are active."
    },
    {
      "date": "2026-03-06",
      "regime": "Speculation",
      "spy": 6740.02,
      "total": 4,
      "reds": 1,
      "yellows": 2,
      "liquidityTrend13w": 0.035406749958573513,
      "desiredRegime": "Calm",
      "desiredTrigger": "Desired Calm because liquidity is still broadly supportive and the warning cluster is not persistent enough to keep the cycle in a late-stage regime.",
      "nowcast": {
        "regime": "Speculation",
        "total": 4,
        "reds": 1,
        "yellows": 2,
        "summary": "This looks like late-cycle speculation: warning signals are present, but the full turbulence cluster is not yet dominant.",
        "trigger": "Speculation triggered because the total stress score reached 4, which is at or above the threshold of 4."
      },
      "cycleRegime": "Speculation",
      "cycleTrigger": "Desired Speculation because liquidity is rolling over (13w 1.6%, 4w -0.3%) while warning signals are active."
    },
    {
      "date": "2026-02-27",
      "regime": "Speculation",
      "spy": 6878.88,
      "total": 2,
      "reds": 1,
      "yellows": 0,
      "liquidityTrend13w": 0.01365918690082224,
      "desiredRegime": "Speculation",
      "desiredTrigger": "Desired Speculation because liquidity is rolling over (13w 1.4%, 4w 1.1%) while warning signals are active.",
      "nowcast": {
        "regime": "Speculation",
        "total": 2,
        "reds": 1,
        "yellows": 0,
        "summary": "This looks like late-cycle speculation: warning signals are present, but the full turbulence cluster is not yet dominant.",
        "trigger": "Speculation triggered because at least one indicator scored a red 2 (1 red signal)."
      },
      "cycleRegime": "Speculation",
      "cycleTrigger": "Desired Speculation because liquidity is rolling over (13w 1.6%, 4w -0.3%) while warning signals are active."
    },
    {
      "date": "2026-02-20",
      "regime": "Rebound",
      "spy": 6909.51,
      "total": 1,
      "reds": 0,
      "yellows": 1,
      "liquidityTrend13w": 0.015554202335731349,
      "desiredRegime": "Speculation",
      "desiredTrigger": "Desired Speculation because liquidity is rolling over (13w 1.6%, 4w -0.3%) while warning signals are active.",
      "nowcast": {
        "regime": "Rebound",
        "total": 1,
        "reds": 0,
        "yellows": 1,
        "summary": "Risk conditions appear to be improving from prior stress; that fits a rebound better than a calm plateau.",
        "trigger": "Rebound triggered because the S&P 500 is above its 200-day average while both high-yield spreads and MOVE have been improving over the last 60 trading days."
      },
      "cycleRegime": "Speculation",
      "cycleTrigger": "Desired Speculation because liquidity is rolling over (13w 1.6%, 4w -0.3%) while warning signals are active."
    },
    {
      "date": "2026-02-13",
      "regime": "Speculation",
      "spy": 6836.17,
      "total": 3,
      "reds": 1,
      "yellows": 1,
      "liquidityTrend13w": 0.01429535857462505,
      "desiredRegime": "Speculation",
      "desiredTrigger": "Desired Speculation because liquidity is rolling over (13w 1.4%, 4w -1.6%) while warning signals are active.",
      "nowcast": {
        "regime": "Speculation",
        "total": 3,
        "reds": 1,
        "yellows": 1,
        "summary": "This looks like late-cycle speculation: warning signals are present, but the full turbulence cluster is not yet dominant.",
        "trigger": "Speculation triggered because at least one indicator scored a red 2 (1 red signal)."
      },
      "cycleRegime": "Calm",
      "cycleTrigger": "Desired Calm because liquidity is still broadly supportive and the warning cluster is not persistent enough to keep the cycle in a late-stage regime."
    },
    {
      "date": "2026-02-06",
      "regime": "Rebound",
      "spy": 6932.3,
      "total": 0,
      "reds": 0,
      "yellows": 0,
      "liquidityTrend13w": 0.01161157969654969,
      "desiredRegime": "Calm",
      "desiredTrigger": "Desired Calm because liquidity is still broadly supportive and the warning cluster is not persistent enough to keep the cycle in a late-stage regime.",
      "nowcast": {
        "regime": "Rebound",
        "total": 0,
        "reds": 0,
        "yellows": 0,
        "summary": "Risk conditions appear to be improving from prior stress; that fits a rebound better than a calm plateau.",
        "trigger": "Rebound triggered because the S&P 500 is above its 200-day average while both high-yield spreads and MOVE have been improving over the last 60 trading days."
      },
      "cycleRegime": "Calm",
      "cycleTrigger": "Desired Calm because liquidity is still broadly supportive and the warning cluster is not persistent enough to keep the cycle in a late-stage regime."
    },
    {
      "date": "2026-01-30",
      "regime": "Rebound",
      "spy": 6939.03,
      "total": 0,
      "reds": 0,
      "yellows": 0,
      "liquidityTrend13w": 0.00630667019218456,
      "desiredRegime": "Calm",
      "desiredTrigger": "Desired Calm because liquidity is still broadly supportive and the warning cluster is not persistent enough to keep the cycle in a late-stage regime.",
      "nowcast": {
        "regime": "Rebound",
        "total": 0,
        "reds": 0,
        "yellows": 0,
        "summary": "Risk conditions appear to be improving from prior stress; that fits a rebound better than a calm plateau.",
        "trigger": "Rebound triggered because the S&P 500 is above its 200-day average while both high-yield spreads and MOVE have been improving over the last 60 trading days."
      },
      "cycleRegime": "Calm",
      "cycleTrigger": "Desired Calm because liquidity is still broadly supportive and the warning cluster is not persistent enough to keep the cycle in a late-stage regime."
    },
    {
      "date": "2026-01-23",
      "regime": "Rebound",
      "spy": 6915.61,
      "total": 0,
      "reds": 0,
      "yellows": 0,
      "liquidityTrend13w": 0.0059469320629477185,
      "desiredRegime": "Calm",
      "desiredTrigger": "Desired Calm because liquidity is still broadly supportive and the warning cluster is not persistent enough to keep the cycle in a late-stage regime.",
      "nowcast": {
        "regime": "Rebound",
        "total": 0,
        "reds": 0,
        "yellows": 0,
        "summary": "Risk conditions appear to be improving from prior stress; that fits a rebound better than a calm plateau.",
        "trigger": "Rebound triggered because the S&P 500 is above its 200-day average while both high-yield spreads and MOVE have been improving over the last 60 trading days."
      },
      "cycleRegime": "Calm",
      "cycleTrigger": "Desired Calm because liquidity is still broadly supportive and the warning cluster is not persistent enough to keep the cycle in a late-stage regime."
    },
    {
      "date": "2026-01-16",
      "regime": "Rebound",
      "spy": 6940.01,
      "total": 0,
      "reds": 0,
      "yellows": 0,
      "liquidityTrend13w": 0.0027072148175610877,
      "desiredRegime": "Calm",
      "desiredTrigger": "Desired Calm because liquidity is still broadly supportive and the warning cluster is not persistent enough to keep the cycle in a late-stage regime.",
      "nowcast": {
        "regime": "Rebound",
        "total": 0,
        "reds": 0,
        "yellows": 0,
        "summary": "Risk conditions appear to be improving from prior stress; that fits a rebound better than a calm plateau.",
        "trigger": "Rebound triggered because the S&P 500 is above its 200-day average while both high-yield spreads and MOVE have been improving over the last 60 trading days."
      },
      "cycleRegime": "Calm",
      "cycleTrigger": "Desired Calm because liquidity is still broadly supportive and the warning cluster is not persistent enough to keep the cycle in a late-stage regime."
    },
    {
      "date": "2026-01-09",
      "regime": "Rebound",
      "spy": 6966.28,
      "total": 0,
      "reds": 0,
      "yellows": 0,
      "liquidityTrend13w": -0.0010257581527470805,
      "desiredRegime": "Calm",
      "desiredTrigger": "Desired Calm because liquidity is still broadly supportive and the warning cluster is not persistent enough to keep the cycle in a late-stage regime.",
      "nowcast": {
        "regime": "Rebound",
        "total": 0,
        "reds": 0,
        "yellows": 0,
        "summary": "Risk conditions appear to be improving from prior stress; that fits a rebound better than a calm plateau.",
        "trigger": "Rebound triggered because the S&P 500 is above its 200-day average while both high-yield spreads and MOVE have been improving over the last 60 trading days."
      },
      "cycleRegime": "Calm",
      "cycleTrigger": "Desired Calm because liquidity is still broadly supportive and the warning cluster is not persistent enough to keep the cycle in a late-stage regime."
    },
    {
      "date": "2026-01-02",
      "regime": "Rebound",
      "spy": 6858.47,
      "total": 0,
      "reds": 0,
      "yellows": 0,
      "liquidityTrend13w": 0.0036728289246461543,
      "desiredRegime": "Calm",
      "desiredTrigger": "Desired Calm because liquidity is still broadly supportive and the warning cluster is not persistent enough to keep the cycle in a late-stage regime.",
      "nowcast": {
        "regime": "Rebound",
        "total": 0,
        "reds": 0,
        "yellows": 0,
        "summary": "Risk conditions appear to be improving from prior stress; that fits a rebound better than a calm plateau.",
        "trigger": "Rebound triggered because the S&P 500 is above its 200-day average while both high-yield spreads and MOVE have been improving over the last 60 trading days."
      },
      "cycleRegime": "Calm",
      "cycleTrigger": "Desired Calm because liquidity is still broadly supportive and the warning cluster is not persistent enough to keep the cycle in a late-stage regime."
    },
    {
      "date": "2025-12-26",
      "regime": "Calm",
      "spy": 6929.94,
      "total": 0,
      "reds": 0,
      "yellows": 0,
      "liquidityTrend13w": -0.010235811217790491,
      "desiredRegime": "Calm",
      "desiredTrigger": "Desired Calm because liquidity is still broadly supportive and the warning cluster is not persistent enough to keep the cycle in a late-stage regime.",
      "nowcast": {
        "regime": "Calm",
        "total": 0,
        "reds": 0,
        "yellows": 0,
        "summary": "Conditions look broadly supportive; no major transition signal yet.",
        "trigger": "No turbulence, speculation, or rebound rule fired, so the system defaults to Calm."
      },
      "cycleRegime": "Calm",
      "cycleTrigger": "Desired Calm because liquidity is still broadly supportive and the warning cluster is not persistent enough to keep the cycle in a late-stage regime."
    },
    {
      "date": "2025-12-19",
      "regime": "Calm",
      "spy": 6834.5,
      "total": 1,
      "reds": 0,
      "yellows": 1,
      "liquidityTrend13w": -0.02194888136866835,
      "desiredRegime": "Calm",
      "desiredTrigger": "Desired Calm because liquidity is still broadly supportive and the warning cluster is not persistent enough to keep the cycle in a late-stage regime.",
      "nowcast": {
        "regime": "Calm",
        "total": 1,
        "reds": 0,
        "yellows": 1,
        "summary": "Conditions look broadly supportive; no major transition signal yet.",
        "trigger": "No turbulence, speculation, or rebound rule fired, so the system defaults to Calm."
      },
      "cycleRegime": "Speculation",
      "cycleTrigger": "Desired Speculation because liquidity is rolling over (13w -9.1%, 4w -1.1%) while warning signals are active."
    },
    {
      "date": "2025-12-12",
      "regime": "Calm",
      "spy": 6827.41,
      "total": 0,
      "reds": 0,
      "yellows": 0,
      "liquidityTrend13w": -0.04268979091584402,
      "desiredRegime": "Calm",
      "desiredTrigger": "Desired Calm because liquidity is still broadly supportive and the warning cluster is not persistent enough to keep the cycle in a late-stage regime.",
      "nowcast": {
        "regime": "Calm",
        "total": 0,
        "reds": 0,
        "yellows": 0,
        "summary": "Conditions look broadly supportive; no major transition signal yet.",
        "trigger": "No turbulence, speculation, or rebound rule fired, so the system defaults to Calm."
      },
      "cycleRegime": "Speculation",
      "cycleTrigger": "Desired Speculation because liquidity is rolling over (13w -9.1%, 4w -1.1%) while warning signals are active."
    },
    {
      "date": "2025-12-05",
      "regime": "Calm",
      "spy": 6870.4,
      "total": 0,
      "reds": 0,
      "yellows": 0,
      "liquidityTrend13w": -0.06760361090017253,
      "desiredRegime": "Calm",
      "desiredTrigger": "Desired Calm because liquidity is still broadly supportive and the warning cluster is not persistent enough to keep the cycle in a late-stage regime.",
      "nowcast": {
        "regime": "Calm",
        "total": 0,
        "reds": 0,
        "yellows": 0,
        "summary": "Conditions look broadly supportive; no major transition signal yet.",
        "trigger": "No turbulence, speculation, or rebound rule fired, so the system defaults to Calm."
      },
      "cycleRegime": "Speculation",
      "cycleTrigger": "Desired Speculation because liquidity is rolling over (13w -9.1%, 4w -1.1%) while warning signals are active."
    },
    {
      "date": "2025-11-28",
      "regime": "Speculation",
      "spy": 6849.09,
      "total": 2,
      "reds": 1,
      "yellows": 0,
      "liquidityTrend13w": -0.060586594311529796,
      "desiredRegime": "Speculation",
      "desiredTrigger": "Desired Speculation because liquidity is rolling over (13w -6.1%, 4w 0.4%) while warning signals are active.",
      "nowcast": {
        "regime": "Speculation",
        "total": 2,
        "reds": 1,
        "yellows": 0,
        "summary": "This looks like late-cycle speculation: warning signals are present, but the full turbulence cluster is not yet dominant.",
        "trigger": "Speculation triggered because at least one indicator scored a red 2 (1 red signal)."
      },
      "cycleRegime": "Speculation",
      "cycleTrigger": "Desired Speculation because liquidity is rolling over (13w -9.1%, 4w -1.1%) while warning signals are active."
    },
    {
      "date": "2025-11-21",
      "regime": "Speculation",
      "spy": 6602.99,
      "total": 4,
      "reds": 1,
      "yellows": 2,
      "liquidityTrend13w": -0.07960360532474442,
      "desiredRegime": "Speculation",
      "desiredTrigger": "Desired Speculation because liquidity is rolling over (13w -8.0%, 4w -1.2%) while warning signals are active.",
      "nowcast": {
        "regime": "Speculation",
        "total": 4,
        "reds": 1,
        "yellows": 2,
        "summary": "This looks like late-cycle speculation: warning signals are present, but the full turbulence cluster is not yet dominant.",
        "trigger": "Speculation triggered because the total stress score reached 4, which is at or above the threshold of 4."
      },
      "cycleRegime": "Speculation",
      "cycleTrigger": "Desired Speculation because liquidity is rolling over (13w -9.1%, 4w -1.1%) while warning signals are active."
    },
    {
      "date": "2025-11-14",
      "regime": "Calm",
      "spy": 6734.11,
      "total": 0,
      "reds": 0,
      "yellows": 0,
      "liquidityTrend13w": -0.08349771826781227,
      "desiredRegime": "Calm",
      "desiredTrigger": "Desired Calm because liquidity is still broadly supportive and the warning cluster is not persistent enough to keep the cycle in a late-stage regime.",
      "nowcast": {
        "regime": "Calm",
        "total": 0,
        "reds": 0,
        "yellows": 0,
        "summary": "Conditions look broadly supportive; no major transition signal yet.",
        "trigger": "No turbulence, speculation, or rebound rule fired, so the system defaults to Calm."
      },
      "cycleRegime": "Speculation",
      "cycleTrigger": "Desired Speculation because liquidity is rolling over (13w -9.1%, 4w -1.1%) while warning signals are active."
    },
    {
      "date": "2025-11-07",
      "regime": "Calm",
      "spy": 6728.8,
      "total": 1,
      "reds": 0,
      "yellows": 1,
      "liquidityTrend13w": -0.09453303029432847,
      "desiredRegime": "Calm",
      "desiredTrigger": "Desired Calm because liquidity is still broadly supportive and the warning cluster is not persistent enough to keep the cycle in a late-stage regime.",
      "nowcast": {
        "regime": "Calm",
        "total": 1,
        "reds": 0,
        "yellows": 1,
        "summary": "Conditions look broadly supportive; no major transition signal yet.",
        "trigger": "No turbulence, speculation, or rebound rule fired, so the system defaults to Calm."
      },
      "cycleRegime": "Speculation",
      "cycleTrigger": "Desired Speculation because liquidity is rolling over (13w -9.1%, 4w -1.1%) while warning signals are active."
    },
    {
      "date": "2025-10-31",
      "regime": "Speculation",
      "spy": 6840.2,
      "total": 2,
      "reds": 1,
      "yellows": 0,
      "liquidityTrend13w": -0.10250313816447942,
      "desiredRegime": "Speculation",
      "desiredTrigger": "Desired Speculation because liquidity is rolling over (13w -10.3%, 4w -2.6%) while warning signals are active.",
      "nowcast": {
        "regime": "Speculation",
        "total": 2,
        "reds": 1,
        "yellows": 0,
        "summary": "This looks like late-cycle speculation: warning signals are present, but the full turbulence cluster is not yet dominant.",
        "trigger": "Speculation triggered because at least one indicator scored a red 2 (1 red signal)."
      },
      "cycleRegime": "Speculation",
      "cycleTrigger": "Desired Speculation because liquidity is rolling over (13w -9.1%, 4w -1.1%) while warning signals are active."
    },
    {
      "date": "2025-10-24",
      "regime": "Rebound",
      "spy": 6791.69,
      "total": 1,
      "reds": 0,
      "yellows": 1,
      "liquidityTrend13w": -0.10306052525267018,
      "desiredRegime": "Calm",
      "desiredTrigger": "Desired Calm because liquidity is still broadly supportive and the warning cluster is not persistent enough to keep the cycle in a late-stage regime.",
      "nowcast": {
        "regime": "Rebound",
        "total": 1,
        "reds": 0,
        "yellows": 1,
        "summary": "Risk conditions appear to be improving from prior stress; that fits a rebound better than a calm plateau.",
        "trigger": "Rebound triggered because the S&P 500 is above its 200-day average while both high-yield spreads and MOVE have been improving over the last 60 trading days."
      },
      "cycleRegime": "Speculation",
      "cycleTrigger": "Desired Speculation because liquidity is rolling over (13w -9.1%, 4w -1.1%) while warning signals are active."
    },
    {
      "date": "2025-10-17",
      "regime": "Speculation",
      "spy": 6664.01,
      "total": 3,
      "reds": 0,
      "yellows": 3,
      "liquidityTrend13w": -0.09052159122693015,
      "desiredRegime": "Speculation",
      "desiredTrigger": "Desired Speculation because liquidity is rolling over (13w -9.1%, 4w -1.1%) while warning signals are active.",
      "nowcast": {
        "regime": "Speculation",
        "total": 3,
        "reds": 0,
        "yellows": 3,
        "summary": "This looks like late-cycle speculation: warning signals are present, but the full turbulence cluster is not yet dominant.",
        "trigger": "Speculation triggered because 3 indicators scored a yellow 1, meeting the threshold of 3 warning signals."
      },
      "cycleRegime": "Speculation",
      "cycleTrigger": "Desired Speculation because liquidity is rolling over (13w -9.1%, 4w -1.1%) while warning signals are active."
    },
    {
      "date": "2025-10-10",
      "regime": "Speculation",
      "spy": 6552.51,
      "total": 3,
      "reds": 0,
      "yellows": 3,
      "liquidityTrend13w": -0.0880529714356092,
      "desiredRegime": "Speculation",
      "desiredTrigger": "Desired Speculation because liquidity is rolling over (13w -8.8%, 4w -2.5%) while warning signals are active.",
      "nowcast": {
        "regime": "Speculation",
        "total": 3,
        "reds": 0,
        "yellows": 3,
        "summary": "This looks like late-cycle speculation: warning signals are present, but the full turbulence cluster is not yet dominant.",
        "trigger": "Speculation triggered because 3 indicators scored a yellow 1, meeting the threshold of 3 warning signals."
      },
      "cycleRegime": "Calm",
      "cycleTrigger": "Desired Calm because liquidity is still broadly supportive and the warning cluster is not persistent enough to keep the cycle in a late-stage regime."
    },
    {
      "date": "2025-10-03",
      "regime": "Rebound",
      "spy": 6715.79,
      "total": 1,
      "reds": 0,
      "yellows": 1,
      "liquidityTrend13w": -0.08220438712964306,
      "desiredRegime": "Calm",
      "desiredTrigger": "Desired Calm because liquidity is still broadly supportive and the warning cluster is not persistent enough to keep the cycle in a late-stage regime.",
      "nowcast": {
        "regime": "Rebound",
        "total": 1,
        "reds": 0,
        "yellows": 1,
        "summary": "Risk conditions appear to be improving from prior stress; that fits a rebound better than a calm plateau.",
        "trigger": "Rebound triggered because the S&P 500 is above its 200-day average while both high-yield spreads and MOVE have been improving over the last 60 trading days."
      },
      "cycleRegime": "Calm",
      "cycleTrigger": "Desired Calm because liquidity is still broadly supportive and the warning cluster is not persistent enough to keep the cycle in a late-stage regime."
    },
    {
      "date": "2025-09-26",
      "regime": "Rebound",
      "spy": 6643.7,
      "total": 1,
      "reds": 0,
      "yellows": 1,
      "liquidityTrend13w": -0.07845896612692771,
      "desiredRegime": "Calm",
      "desiredTrigger": "Desired Calm because liquidity is still broadly supportive and the warning cluster is not persistent enough to keep the cycle in a late-stage regime.",
      "nowcast": {
        "regime": "Rebound",
        "total": 1,
        "reds": 0,
        "yellows": 1,
        "summary": "Risk conditions appear to be improving from prior stress; that fits a rebound better than a calm plateau.",
        "trigger": "Rebound triggered because the S&P 500 is above its 200-day average while both high-yield spreads and MOVE have been improving over the last 60 trading days."
      },
      "cycleRegime": "Calm",
      "cycleTrigger": "Desired Calm because liquidity is still broadly supportive and the warning cluster is not persistent enough to keep the cycle in a late-stage regime."
    },
    {
      "date": "2025-09-19",
      "regime": "Rebound",
      "spy": 6664.36,
      "total": 1,
      "reds": 0,
      "yellows": 1,
      "liquidityTrend13w": -0.07738846433802582,
      "desiredRegime": "Calm",
      "desiredTrigger": "Desired Calm because liquidity is still broadly supportive and the warning cluster is not persistent enough to keep the cycle in a late-stage regime.",
      "nowcast": {
        "regime": "Rebound",
        "total": 1,
        "reds": 0,
        "yellows": 1,
        "summary": "Risk conditions appear to be improving from prior stress; that fits a rebound better than a calm plateau.",
        "trigger": "Rebound triggered because the S&P 500 is above its 200-day average while both high-yield spreads and MOVE have been improving over the last 60 trading days."
      },
      "cycleRegime": "Calm",
      "cycleTrigger": "Desired Calm because liquidity is still broadly supportive and the warning cluster is not persistent enough to keep the cycle in a late-stage regime."
    },
    {
      "date": "2025-09-12",
      "regime": "Rebound",
      "spy": 6584.29,
      "total": 1,
      "reds": 0,
      "yellows": 1,
      "liquidityTrend13w": -0.06468820446865253,
      "desiredRegime": "Calm",
      "desiredTrigger": "Desired Calm because liquidity is still broadly supportive and the warning cluster is not persistent enough to keep the cycle in a late-stage regime.",
      "nowcast": {
        "regime": "Rebound",
        "total": 1,
        "reds": 0,
        "yellows": 1,
        "summary": "Risk conditions appear to be improving from prior stress; that fits a rebound better than a calm plateau.",
        "trigger": "Rebound triggered because the S&P 500 is above its 200-day average while both high-yield spreads and MOVE have been improving over the last 60 trading days."
      },
      "cycleRegime": "Calm",
      "cycleTrigger": "Desired Calm because liquidity is still broadly supportive and the warning cluster is not persistent enough to keep the cycle in a late-stage regime."
    },
    {
      "date": "2025-09-05",
      "regime": "Speculation",
      "spy": 6481.5,
      "total": 3,
      "reds": 0,
      "yellows": 3,
      "liquidityTrend13w": -0.04595482223407488,
      "desiredRegime": "Speculation",
      "desiredTrigger": "Desired Speculation because liquidity is rolling over (13w -4.6%, 4w -3.5%) while warning signals are active.",
      "nowcast": {
        "regime": "Speculation",
        "total": 3,
        "reds": 0,
        "yellows": 3,
        "summary": "This looks like late-cycle speculation: warning signals are present, but the full turbulence cluster is not yet dominant.",
        "trigger": "Speculation triggered because 3 indicators scored a yellow 1, meeting the threshold of 3 warning signals."
      },
      "cycleRegime": "Calm",
      "cycleTrigger": "Desired Calm because liquidity is still broadly supportive and the warning cluster is not persistent enough to keep the cycle in a late-stage regime."
    },
    {
      "date": "2025-08-29",
      "regime": "Rebound",
      "spy": 6460.26,
      "total": 1,
      "reds": 0,
      "yellows": 1,
      "liquidityTrend13w": -0.03102147095398,
      "desiredRegime": "Calm",
      "desiredTrigger": "Desired Calm because liquidity is still broadly supportive and the warning cluster is not persistent enough to keep the cycle in a late-stage regime.",
      "nowcast": {
        "regime": "Rebound",
        "total": 1,
        "reds": 0,
        "yellows": 1,
        "summary": "Risk conditions appear to be improving from prior stress; that fits a rebound better than a calm plateau.",
        "trigger": "Rebound triggered because the S&P 500 is above its 200-day average while both high-yield spreads and MOVE have been improving over the last 60 trading days."
      },
      "cycleRegime": "Calm",
      "cycleTrigger": "Desired Calm because liquidity is still broadly supportive and the warning cluster is not persistent enough to keep the cycle in a late-stage regime."
    },
    {
      "date": "2025-08-22",
      "regime": "Rebound",
      "spy": 6466.91,
      "total": 0,
      "reds": 0,
      "yellows": 0,
      "liquidityTrend13w": -0.014010521726900427,
      "desiredRegime": "Calm",
      "desiredTrigger": "Desired Calm because liquidity is still broadly supportive and the warning cluster is not persistent enough to keep the cycle in a late-stage regime.",
      "nowcast": {
        "regime": "Rebound",
        "total": 0,
        "reds": 0,
        "yellows": 0,
        "summary": "Risk conditions appear to be improving from prior stress; that fits a rebound better than a calm plateau.",
        "trigger": "Rebound triggered because the S&P 500 is above its 200-day average while both high-yield spreads and MOVE have been improving over the last 60 trading days."
      },
      "cycleRegime": "Calm",
      "cycleTrigger": "Desired Calm because liquidity is still broadly supportive and the warning cluster is not persistent enough to keep the cycle in a late-stage regime."
    },
    {
      "date": "2025-08-15",
      "regime": "Rebound",
      "spy": 6449.8,
      "total": 0,
      "reds": 0,
      "yellows": 0,
      "liquidityTrend13w": 0.0003250346788039593,
      "desiredRegime": "Calm",
      "desiredTrigger": "Desired Calm because liquidity is still broadly supportive and the warning cluster is not persistent enough to keep the cycle in a late-stage regime.",
      "nowcast": {
        "regime": "Rebound",
        "total": 0,
        "reds": 0,
        "yellows": 0,
        "summary": "Risk conditions appear to be improving from prior stress; that fits a rebound better than a calm plateau.",
        "trigger": "Rebound triggered because the S&P 500 is above its 200-day average while both high-yield spreads and MOVE have been improving over the last 60 trading days."
      },
      "cycleRegime": "Calm",
      "cycleTrigger": "Desired Calm because liquidity is still broadly supportive and the warning cluster is not persistent enough to keep the cycle in a late-stage regime."
    },
    {
      "date": "2025-08-08",
      "regime": "Rebound",
      "spy": 6389.45,
      "total": 1,
      "reds": 0,
      "yellows": 1,
      "liquidityTrend13w": 0.015129881664357026,
      "desiredRegime": "Calm",
      "desiredTrigger": "Desired Calm because liquidity is still broadly supportive and the warning cluster is not persistent enough to keep the cycle in a late-stage regime.",
      "nowcast": {
        "regime": "Rebound",
        "total": 1,
        "reds": 0,
        "yellows": 1,
        "summary": "Risk conditions appear to be improving from prior stress; that fits a rebound better than a calm plateau.",
        "trigger": "Rebound triggered because the S&P 500 is above its 200-day average while both high-yield spreads and MOVE have been improving over the last 60 trading days."
      },
      "cycleRegime": "Calm",
      "cycleTrigger": "Desired Calm because liquidity is still broadly supportive and the warning cluster is not persistent enough to keep the cycle in a late-stage regime."
    },
    {
      "date": "2025-08-01",
      "regime": "Rebound",
      "spy": 6238.01,
      "total": 1,
      "reds": 0,
      "yellows": 1,
      "liquidityTrend13w": 0.025948423743793914,
      "desiredRegime": "Speculation",
      "desiredTrigger": "Desired Speculation because liquidity is rolling over (13w 2.6%, 4w -0.4%) while warning signals are active.",
      "nowcast": {
        "regime": "Rebound",
        "total": 1,
        "reds": 0,
        "yellows": 1,
        "summary": "Risk conditions appear to be improving from prior stress; that fits a rebound better than a calm plateau.",
        "trigger": "Rebound triggered because the S&P 500 is above its 200-day average while both high-yield spreads and MOVE have been improving over the last 60 trading days."
      },
      "cycleRegime": "Calm",
      "cycleTrigger": "Desired Calm because liquidity is still broadly supportive and the warning cluster is not persistent enough to keep the cycle in a late-stage regime."
    },
    {
      "date": "2025-07-25",
      "regime": "Rebound",
      "spy": 6388.64,
      "total": 0,
      "reds": 0,
      "yellows": 0,
      "liquidityTrend13w": 0.035003060443416834,
      "desiredRegime": "Calm",
      "desiredTrigger": "Desired Calm because liquidity is still broadly supportive and the warning cluster is not persistent enough to keep the cycle in a late-stage regime.",
      "nowcast": {
        "regime": "Rebound",
        "total": 0,
        "reds": 0,
        "yellows": 0,
        "summary": "Risk conditions appear to be improving from prior stress; that fits a rebound better than a calm plateau.",
        "trigger": "Rebound triggered because the S&P 500 is above its 200-day average while both high-yield spreads and MOVE have been improving over the last 60 trading days."
      },
      "cycleRegime": "Calm",
      "cycleTrigger": "Desired Calm because liquidity is still broadly supportive and the warning cluster is not persistent enough to keep the cycle in a late-stage regime."
    },
    {
      "date": "2025-07-18",
      "regime": "Rebound",
      "spy": 6296.79,
      "total": 0,
      "reds": 0,
      "yellows": 0,
      "liquidityTrend13w": 0.009319953185050966,
      "desiredRegime": "Calm",
      "desiredTrigger": "Desired Calm because liquidity is still broadly supportive and the warning cluster is not persistent enough to keep the cycle in a late-stage regime.",
      "nowcast": {
        "regime": "Rebound",
        "total": 0,
        "reds": 0,
        "yellows": 0,
        "summary": "Risk conditions appear to be improving from prior stress; that fits a rebound better than a calm plateau.",
        "trigger": "Rebound triggered because the S&P 500 is above its 200-day average while both high-yield spreads and MOVE have been improving over the last 60 trading days."
      },
      "cycleRegime": "Calm",
      "cycleTrigger": "Desired Calm because liquidity is still broadly supportive and the warning cluster is not persistent enough to keep the cycle in a late-stage regime."
    },
    {
      "date": "2025-07-11",
      "regime": "Rebound",
      "spy": 6259.75,
      "total": 0,
      "reds": 0,
      "yellows": 0,
      "liquidityTrend13w": -0.012365783932574703,
      "desiredRegime": "Calm",
      "desiredTrigger": "Desired Calm because liquidity is still broadly supportive and the warning cluster is not persistent enough to keep the cycle in a late-stage regime.",
      "nowcast": {
        "regime": "Rebound",
        "total": 0,
        "reds": 0,
        "yellows": 0,
        "summary": "Risk conditions appear to be improving from prior stress; that fits a rebound better than a calm plateau.",
        "trigger": "Rebound triggered because the S&P 500 is above its 200-day average while both high-yield spreads and MOVE have been improving over the last 60 trading days."
      },
      "cycleRegime": "Calm",
      "cycleTrigger": "Desired Calm because liquidity is still broadly supportive and the warning cluster is not persistent enough to keep the cycle in a late-stage regime."
    },
    {
      "date": "2025-07-04",
      "regime": "Rebound",
      "spy": 6279.35,
      "total": 0,
      "reds": 0,
      "yellows": 0,
      "liquidityTrend13w": -0.017168434383880715,
      "desiredRegime": "Calm",
      "desiredTrigger": "Desired Calm because liquidity is still broadly supportive and the warning cluster is not persistent enough to keep the cycle in a late-stage regime.",
      "nowcast": {
        "regime": "Rebound",
        "total": 0,
        "reds": 0,
        "yellows": 0,
        "summary": "Risk conditions appear to be improving from prior stress; that fits a rebound better than a calm plateau.",
        "trigger": "Rebound triggered because the S&P 500 is above its 200-day average while both high-yield spreads and MOVE have been improving over the last 60 trading days."
      },
      "cycleRegime": "Calm",
      "cycleTrigger": "Desired Calm because liquidity is still broadly supportive and the warning cluster is not persistent enough to keep the cycle in a late-stage regime."
    },
    {
      "date": "2025-06-27",
      "regime": "Rebound",
      "spy": 6173.07,
      "total": 1,
      "reds": 0,
      "yellows": 1,
      "liquidityTrend13w": -0.012887561007656867,
      "desiredRegime": "Calm",
      "desiredTrigger": "Desired Calm because liquidity is still broadly supportive and the warning cluster is not persistent enough to keep the cycle in a late-stage regime.",
      "nowcast": {
        "regime": "Rebound",
        "total": 1,
        "reds": 0,
        "yellows": 1,
        "summary": "Risk conditions appear to be improving from prior stress; that fits a rebound better than a calm plateau.",
        "trigger": "Rebound triggered because the S&P 500 is above its 200-day average while both high-yield spreads and MOVE have been improving over the last 60 trading days."
      },
      "cycleRegime": "Calm",
      "cycleTrigger": "Desired Calm because liquidity is still broadly supportive and the warning cluster is not persistent enough to keep the cycle in a late-stage regime."
    },
    {
      "date": "2025-06-20",
      "regime": "Rebound",
      "spy": 5967.84,
      "total": 0,
      "reds": 0,
      "yellows": 0,
      "liquidityTrend13w": 0.003676719915763904,
      "desiredRegime": "Calm",
      "desiredTrigger": "Desired Calm because liquidity is still broadly supportive and the warning cluster is not persistent enough to keep the cycle in a late-stage regime.",
      "nowcast": {
        "regime": "Rebound",
        "total": 0,
        "reds": 0,
        "yellows": 0,
        "summary": "Risk conditions appear to be improving from prior stress; that fits a rebound better than a calm plateau.",
        "trigger": "Rebound triggered because the S&P 500 is above its 200-day average while both high-yield spreads and MOVE have been improving over the last 60 trading days."
      },
      "cycleRegime": "Calm",
      "cycleTrigger": "Desired Calm because liquidity is still broadly supportive and the warning cluster is not persistent enough to keep the cycle in a late-stage regime."
    },
    {
      "date": "2025-06-13",
      "regime": "Calm",
      "spy": 5976.97,
      "total": 0,
      "reds": 0,
      "yellows": 0,
      "liquidityTrend13w": 0.015557327427376366,
      "desiredRegime": "Calm",
      "desiredTrigger": "Desired Calm because liquidity is still broadly supportive and the warning cluster is not persistent enough to keep the cycle in a late-stage regime.",
      "nowcast": {
        "regime": "Calm",
        "total": 0,
        "reds": 0,
        "yellows": 0,
        "summary": "Conditions look broadly supportive; no major transition signal yet.",
        "trigger": "No turbulence, speculation, or rebound rule fired, so the system defaults to Calm."
      },
      "cycleRegime": "Calm",
      "cycleTrigger": "Desired Calm because liquidity is still broadly supportive and the warning cluster is not persistent enough to keep the cycle in a late-stage regime."
    },
    {
      "date": "2025-06-06",
      "regime": "Rebound",
      "spy": 6000.36,
      "total": 0,
      "reds": 0,
      "yellows": 0,
      "liquidityTrend13w": 0.013767971972269644,
      "desiredRegime": "Calm",
      "desiredTrigger": "Desired Calm because liquidity is still broadly supportive and the warning cluster is not persistent enough to keep the cycle in a late-stage regime.",
      "nowcast": {
        "regime": "Rebound",
        "total": 0,
        "reds": 0,
        "yellows": 0,
        "summary": "Risk conditions appear to be improving from prior stress; that fits a rebound better than a calm plateau.",
        "trigger": "Rebound triggered because the S&P 500 is above its 200-day average while both high-yield spreads and MOVE have been improving over the last 60 trading days."
      },
      "cycleRegime": "Calm",
      "cycleTrigger": "Desired Calm because liquidity is still broadly supportive and the warning cluster is not persistent enough to keep the cycle in a late-stage regime."
    },
    {
      "date": "2025-05-30",
      "regime": "Calm",
      "spy": 5911.69,
      "total": 0,
      "reds": 0,
      "yellows": 0,
      "liquidityTrend13w": 0.019894185451496682,
      "desiredRegime": "Calm",
      "desiredTrigger": "Desired Calm because liquidity is still broadly supportive and the warning cluster is not persistent enough to keep the cycle in a late-stage regime.",
      "nowcast": {
        "regime": "Calm",
        "total": 0,
        "reds": 0,
        "yellows": 0,
        "summary": "Conditions look broadly supportive; no major transition signal yet.",
        "trigger": "No turbulence, speculation, or rebound rule fired, so the system defaults to Calm."
      },
      "cycleRegime": "Calm",
      "cycleTrigger": "Desired Calm because liquidity is still broadly supportive and the warning cluster is not persistent enough to keep the cycle in a late-stage regime."
    },
    {
      "date": "2025-05-23",
      "regime": "Calm",
      "spy": 5802.82,
      "total": 0,
      "reds": 0,
      "yellows": 0,
      "liquidityTrend13w": 0.03226052152875858,
      "desiredRegime": "Calm",
      "desiredTrigger": "Desired Calm because liquidity is still broadly supportive and the warning cluster is not persistent enough to keep the cycle in a late-stage regime.",
      "nowcast": {
        "regime": "Calm",
        "total": 0,
        "reds": 0,
        "yellows": 0,
        "summary": "Conditions look broadly supportive; no major transition signal yet.",
        "trigger": "No turbulence, speculation, or rebound rule fired, so the system defaults to Calm."
      },
      "cycleRegime": "Calm",
      "cycleTrigger": "Desired Calm because liquidity is still broadly supportive and the warning cluster is not persistent enough to keep the cycle in a late-stage regime."
    },
    {
      "date": "2025-05-16",
      "regime": "Calm",
      "spy": 5958.38,
      "total": 0,
      "reds": 0,
      "yellows": 0,
      "liquidityTrend13w": 0.02538127516237232,
      "desiredRegime": "Calm",
      "desiredTrigger": "Desired Calm because liquidity is still broadly supportive and the warning cluster is not persistent enough to keep the cycle in a late-stage regime.",
      "nowcast": {
        "regime": "Calm",
        "total": 0,
        "reds": 0,
        "yellows": 0,
        "summary": "Conditions look broadly supportive; no major transition signal yet.",
        "trigger": "No turbulence, speculation, or rebound rule fired, so the system defaults to Calm."
      },
      "cycleRegime": "Calm",
      "cycleTrigger": "Desired Calm because liquidity is still broadly supportive and the warning cluster is not persistent enough to keep the cycle in a late-stage regime."
    },
    {
      "date": "2025-05-09",
      "regime": "Calm",
      "spy": 5659.91,
      "total": 1,
      "reds": 0,
      "yellows": 1,
      "liquidityTrend13w": 0.02027287142996914,
      "desiredRegime": "Calm",
      "desiredTrigger": "Desired Calm because liquidity is still broadly supportive and the warning cluster is not persistent enough to keep the cycle in a late-stage regime.",
      "nowcast": {
        "regime": "Calm",
        "total": 1,
        "reds": 0,
        "yellows": 1,
        "summary": "Conditions look broadly supportive; no major transition signal yet.",
        "trigger": "No turbulence, speculation, or rebound rule fired, so the system defaults to Calm."
      },
      "cycleRegime": "Calm",
      "cycleTrigger": "Desired Calm because liquidity is still broadly supportive and the warning cluster is not persistent enough to keep the cycle in a late-stage regime."
    }
  ],
  "methodology": {
    "notes": [
      "Nowcasted regime is a fast public-proxy stress model using MOVE, credit, funding, financial-stress, and equity-trend signals.",
      "Cycle regime is a smoothed Howell-style overlay that adds net liquidity and persistence to reduce noisy weekly toggles.",
      "Net liquidity is approximated as WALCL minus RRPONTSYD minus WTREGEN.",
      "Historical rows are sampled from dates where all required series are available, so cadence follows the slowest input series."
    ],
    "scoreGuide": {
      "0": "normal / calm",
      "1": "warning / speculation-like",
      "2": "stress / turbulence-like"
    }
  },
  "title": "Liquidity Dashboard",
  "sourceNote": "Public liquidity, funding, credit, and market data are transformed into a fast nowcast and a slower cycle regime."
}
