Validated primary market states

The primary map uses causal 90-day exponentially weighted factor returns, trailing BTC 45-day return and trailing BTC 45-day realized volatility. PCA compresses that panel and KMeans partitions it into two descriptive states. A trailing 14-day mode suppresses one-day label churn; future days never rewrite past labels.

The build fails if any state occupies less than 10% or more than 70% of the sample, or if adjacent states differ by less than three percentage points of mean trailing BTC return. That rejects outlier-only clusterings before export.

StateUTC daysOccupancyMean BTC 45d returnMean BTC 30d ann. vol.
Low-Trend / Risk-Off 929 61.7% -0.0% 41.9%
Strong-Trend / Risk-On 576 38.3% +13.6% 53.4%