Major feature sprint: IRL Engine gains a deep audit endpoint for L2 subscribers. The signal package now includes an LLM-generated narrative via Claude Haiku. The 5-day ARIMA forecast is live and auth-gated. Regime transitions fire real-time alerts to X and Discord. A new unauthenticated endpoint exposes the live regime to the public as a free-tier entry point. Weekly digest email ships to all subscribers every Monday morning.
GET /v1/irl/audit — IRL Engine L2 deep decomposition: PCA factor attribution (PC1–PC4 with directional scores), stress indicator z-scores (VIX, HY spread, yield curve, DXY, net liquidity), liquidity attribution in $bn, HMM transition probability matrix, model drift health flags. Requires irl_audit tier.GET /v1/public/regime — unauthenticated endpoint returning the live regime, risk score, equity exposure recommendation, plain-English interpretation, and an upgrade CTA. Free-tier entry point, no API key required.GET /v1/account — returns tier, product line, agent count, payment status, daily request usage, feature entitlements, Stripe billing portal link, and docs URL. Works with any valid API key.GET /v1/signals/history?days=N — regime history with probabilities for all tiers. Returns up to 90 days of {date, regime, risk_score, prob_*} rows./v1/signals/latest as narrative. Falls back to rule-based text if API is unavailable.GET /v1/forecast was returning 500 due to a missing await on the DB query and missing auth. Both fixed — now requires Paid tier and returns correctly.macropulse.live/irl-welcome.html.GET /v1/irl/heartbeat was open to all keys. Now requires an IRL-tier key (irl_sidecar, irl_audit, or owner).await calls on DB queries resolved; no longer returns stale/empty data.run_coroutine_threadsafe — no more asyncio.run() conflict inside the scheduler thread..env.example. Lemon Squeezy and Paddle references removed — Stripe is the sole billing provider.