July core PCE landed at 3.3% YoY — sticky, in line, no relief — and money markets now carry a 30-60% hike probability into each coming FOMC, with December near one-in-three; this is a hiking-risk tape, not a cutting one. Long-end yields are up, Treasury just doubled its buyback plan, and new Chair Warsh (a hawk) delivers his first Jackson Hole keynote Friday — genuine event risk. Nvidia earnings and a US/Iran overhang are the other live wires. Nothing here the model has a feed for.
Our book
Score dropped 5→4 on 8/23 as the whale card flagged specs crowded long (p86, tripping the p90 gate), pulling us Risk-On→Neutral — the machine trimmed risk into a stretched tape, which is the point. Closest to flipping next is home prices: the Zillow proxy nowcasts July Case-Shiller at 0.99% YoY, drifting toward the 0% floor that would take it off and drop us to Defensive. Inflation sits at 3.3% vs the 4% gate and falling, so despite the hawkish repricing that signal stays green — the CPI card can't see a rate shock, only a price one.
Watchlist
Fri 8/28: Warsh's first Jackson Hole keynote — tone risk the model has no feed for
Fri 8/28: payrolls benchmark revision prelim — can reshape the labor narrative more than a monthly print
Sep 11: next CPI — our inflation-signal input (buffer to the 4% gate)
Home prices: Zillow proxy at ~0.99% YoY, next Case-Shiller print vs the 0% off-trigger
On the strategy
The machine is doing its job — de-risking on crowded positioning before the crowd finds out why. My concern is the regime, not the mechanics: this is a hiking-into-sticky-inflation tape, and our CPI gate (>4% AND rising) stays green at 3.3%-and-falling while real yields sit at p93 restrictive and front-end repricing at p92. Two of the three advisory cards that flash exactly this rate-shock condition already died in the lab as rules, so I'm not asking to re-wire the score — I'm asking the desk to read them. The model insures against price inflation and equity trend breaks; it does not insure against a Warsh hawkish surprise that repricing the front end without CPI ever crossing 4%. On track for what it's built for; blind, by design, to the specific risk in the tape this week.
“Market's pricing hikes, our inflation card's flashing green — one of them's early, and it usually isn't the tape.” — Vic
Data integrity watchdog
WATCHDOG
Automated data-integrity checks, rerun every cycle. All green — nothing needed from you.
deterministic · every cycle · 2026-08-27
✓ All integrity checks passed
25 price series immutable · 33 FRED series checked · frozen-window v3 CAGR pinned at 10.715%
Machine trims into record highs on crowded longs; the froth flags it can't score keep blinking
DESK NOTE
Vic's daily commentary. Context only — the model doesn't read it and neither must you.
S&P 500 sits near records around 7,677 (Aug 25), Nasdaq firmer on a chip-stock bounce after Monday's semi sell-off, and the 10y yield eased to ~4.63% for a second day. Crude dropped ~3% (WTI ~$82) on the U.S. pivot to economic pressure on Iran — noise to us, we don't trade oil. The week's real fuel is ahead: core PCE Wednesday (consensus ~3.2% YoY), Jackson Hole Aug 27–29 with Warsh's first symposium speech Friday, and the preliminary payrolls benchmark revision that same morning.
Our book
Score 4/5, Neutral — ~55% equity, the rest AGG/GLD/TLT. We stepped down out of Risk-On on Aug 23 when whales flipped: specs got crowded long into the highs, exactly what that signal is built to fade. Whales is the swing — it sits right at its threshold, so a modest de-crowd puts us back to 5/5. Trend (+8% over the 40wk), curve (+0.47), and inflation (3.3%, nowcast 3.36%) are all comfortably on; nothing else is near a flip.
Watchlist
Wed Aug 26: core PCE ~3.2% YoY expected — doesn't feed our CPI slot, but sets the Fed tone
Fri Aug 28: Warsh's Jackson Hole debut — pure event risk, no data feed we score
Fri Aug 28: preliminary payrolls benchmark revision — could show labor materially softer; model is blind to it (temp-help already soft, -0.2)
Whales at ~p86 vs p90 trigger — a de-crowd flips us back to Risk-On
Home prices: Zillow nowcast 0.99% (Jul) decelerating toward the 0% line, Case-Shiller still lags at May
On the strategy
On track, and behaving as designed: fading crowded positioning at all-time highs is the whole point, and it just did that without me touching it. My caution is the same as last note — the five signals see trend, rates, inflation and housing, but not leverage or valuation, and that gap is loud right now: margin debt +38.6% YoY near the 40% euphoria line, SPX box borrow growing, real yields at p95 restrictive, front-end repricing at p94. None of that is a sell trigger and every froth signal we've tested has died in the lab, so I'm not asking to add one — just flagging that if this tape breaks, it breaks on leverage the model won't have warned us about. The other blind spot is timing: Friday stacks a benchmark revision and a new Fed chair's first Jackson Hole into one morning, and our labor read is a lagging advisory card. Whales is doing a lot of work in a noisy slot — watch it, but don't second-guess it.
“We sold the crowd its own enthusiasm and stepped back a foot. Friday two Fed events land on one revision — I'll be reading, not trading.” — Vic
Machine ducks to Neutral on positioning just as an oil-inflation shock builds it can't yet see.
DESK NOTE
Vic's daily commentary. Context only — the model doesn't read it and neither must you.
S&P closed the week down 1.4% and the Nasdaq -2%, both snapping three-week win streaks; Monday added losses as chip weakness dragged the Nasdaq and Bessent's 'Operation Economic Outcast' Iran sanctions kept a bid under oil. WTI is near $80 on the Persian Gulf tanker blockade, and the 10y sits ~4.7% vs a 2y ~4.24% — higher yields plus energy are the twin pressures. This is a supply-push inflation scare wearing a geopolitics costume, and it lands squarely in the window before any CPI print shows it.
Our book
We downshifted Risk-On→Neutral on 08-23 when the whale card came off — score 4/5, one signal shy of full risk. Whales is the swing: it's the closest to flipping back up (specs at ~p86 vs the p90 crowded-long trigger), so a modest de-crowding restores Risk-On. On the downside, home prices are the thinnest plank at +1.11% YoY with the Zillow nowcast decelerating to +0.99% — that's the one whose flip to off would take us to Defensive.
Watchlist
Wed 08-26: July PCE — not our input, but the Fed's gauge and the week's inflation tell
Thu 08-27: Warsh at Jackson Hole (08-27–29) — first real read on a hawkish-tilt Fed
Home prices: Case-Shiller +1.11% YoY, Zillow nowcast +0.99% — a break below 0 flips us to Defensive
Whales: p86 vs p90 trigger — a de-crowd puts 5/5 Risk-On back on the table
On the strategy
On track, with an asterisk. The machine derisked to Neutral on positioning right as the tape softened — that's the system doing its job. But the live risk is an oil-driven, event-type inflation shock, which is precisely the regime our CPI signal lags: FRED CPI won't carry the energy pulse until mid-September, and the crude-overlay and inflation-aware-bunker fixes for exactly this are already in the graveyard. So I'm not asking the model to see it — I'm flagging that if this is a supply shock, the score will react late, and the curve/trend signals are our faster tripwires. Watch whether a hawkish Warsh flattens the 10y-2y toward the -0.10 trigger; that's the channel where this regime would actually reach our signals.
“The model can't smell burning tankers — it waits for the CPI receipt like everyone else.” — Vic
Score is a clean 5/5, but the risk this week is priced in the long bond, not our signals.
DESK NOTE
Vic's daily commentary. Context only — the model doesn't read it and neither must you.
S&P sits ~2% below its record (SPY 765, matching our tape) after a down week driven by rates, not earnings — the 30y Treasury touched a 19-year high above 5.3% on term-premium and fiscal/debt-supply worries, and the Philly chip index fell ~5%. The week is front-loaded with event risk the tape is bracing for: Nvidia after the close on Aug 26, then Jackson Hole Aug 27-29 with Warsh's debut keynote Friday. Markets price ~85% odds of a September cut but the long end is selling off anyway — a bear steepener where deficit/term-premium fear is out-shouting the cut narrative.
Our book
5/5 Risk-On, 55% QQQ into a single-name print (NVDA) and a new-Fed-chair moment the model cannot see. Closest to flipping is Whales — S&P specs at the 86th percentile, four points under the p90 crowded-long trigger; a further spec pile-in flips it to Neutral. Inflation looks safe: July CPI lands tomorrow (8/24) and reads ON at ~3.3% falling, and the nowcast keeps the score at 5/5.
Watchlist
Aug 24: July CPI effective — expected ON at 3.3% (falling), inflation stays green
Aug 26 after close: NVDA earnings — 55% QQQ sleeve, event the model can't price
Aug 28: Warsh Jackson Hole keynote — central-bank-independence framing, September-cut odds
Whales at p86 vs p90 trigger; 30y yield above 5.3% and the long end broadly
On the strategy
The machine's classic strengths are all firing right — trend 8.4% over its MA, curve wide, disinflation intact, home prices positive. But this is precisely the setup my caveat is built for: the danger is a long-end, term-premium-led selloff, and the 2y/10y curve signal reads a steepening as MORE risk-positive even when the steepening is fiscal fear rather than growth. Our own advisory cards agree the plumbing is tight — real yield at its 3y p95, front-end repricing at p91 — while the score stays 5/5. That's not a reason to override anything; the model doesn't trade my nerves, and it's been right to stay long. But if the drawdown comes from rates this cycle, it'll show up in Trend breaking 706 well after the long bond has already done the damage — so watch the 40-wk MA and Whales, not the headlines.
“The growth signals are green and the long bond is on fire — remember which one the equity check clears against.” — Vic
Score is 5/5 Risk-On while the bond market fights the Treasury — the machine can't see that fight
DESK NOTE
Vic's daily commentary. Context only — the model doesn't read it and neither must you.
S&P closed Friday ~7,674 and the Dow tagged a record after Warsh's Jackson Hole finale fueled September-cut bets, but that masks an ugly week: tech shed >3%, the S&P was down ~1.4% week-to-date, and the real action was in Treasurys. The 10y punched to ~4.73%, highest since 2025, on Iran-war energy prices, AI capex, and deficits — a term-premium/fiscal-dominance selloff, not a growth scare. Bessent announced long-end buybacks to cap yields, which drags the new Fed chair into an independence fight he'll have to address Friday. This is a regime story, and none of it has a data feed our five signals read.
Our book
Full Risk-On (QQQ 55 / SPY 30 / GLD 15), all five lit, and the published tape justifies it — trend is +8.4% over the 40-wk, curve is +0.5 and steepening (nowhere near the −0.10 trigger), CPI holds. Closest to flipping is Whales: S&P specs at the 86th percentile against a p90 crowded-long trigger — four points of headroom, and it's the one signal that fires on a Friday COT print, not a macro release. Inflation is the other one to watch, but the nowcast (3.36% Aug) and the July print effective this Monday (3.3%, reads ON) both keep it green, so no near-term flip there.
Watchlist
Mon Aug 24: July CPI becomes signal-effective — nowcast 3.3% reads ON, inflation card holds unless it prints hot
Wed Aug 26: PCE inflation — not a signal input, but sets the rate/cut tone
Fri Aug 28: Warsh Jackson Hole speech + payrolls annual revision prelim — the Fed-independence and labor-revision risk our model can't price
Fri COT: Whales at p86 vs p90 — the single closest trigger to a book downgrade
On the strategy
On the published data the model is right and I won't second-guess it — 5/5 with an 8% trend cushion is exactly when you stay long. My worry is the crash type: our curve signal was calibrated on cycle-inversion recessions, and a bear steepener driven by fiscal dominance and a contested Fed is a spike it reads as benign (a steeper 10y−2y actually looks bullish to it). The tell is in our own advisory wing — real yield sits at the 95th percentile 'restrictive' and front-end repricing at the 91st 'elevated' — both flashing rate stress while the score says full risk. That divergence is the thing to respect: not a reason to override, but a reason to know the model's blind spot is precisely today's headline. What would change my mind on the book: curve toward −0.10, Whales through p90, or a hot CPI Monday; what would change my mind on the strategy is a rate-driven equity drawdown the curve signal never flags.
“The model sees a record high; it doesn't see the Treasury Secretary and the Fed chair arm-wrestling under the table. Long, eyes open.” — Vic
Machine reads 5/5 Risk-On into a Warsh debut it has no feed for.
DESK NOTE
Vic's daily commentary. Context only — the model doesn't read it and neither must you.
Risk sold off Thursday — S&P −0.9%, Dow −1.3%, Nasdaq extending to a fifth down session — as US/Iran tensions lifted oil and pushed Treasury yields back up; Walmart cratered 9.2% on its own print. The Treasury doubled its long-end buybacks Aug 19 (from a $2B cap to $4B+), which knocked yields down for a day before the relief evaporated. Everything now points at Jackson Hole, Aug 27–29 — Kevin Warsh's first keynote as chair lands Aug 28, and the tape is frozen waiting to see if the hawkish minutes become his message.
Our book
We're 5/5 Risk-On, QQQ-heavy, and the two primary signals have buffer: trend sits +8.4% over the 40-wk MA, curve is +0.5pp against a −0.10 trigger. Closest to flipping is whales — spec net long at the 91st percentile, right on its crowding line, gauge 49, the thinnest of the five; the next COT is what moves it. Home prices are the slow bleed: +1.11% YoY now, Zillow nowcast slipping to ~0.99% next month, grinding toward the zero line — but that's months, not this week. Inflation is safe below the 4% gate even after July's published 3.4%.
Watchlist
Aug 24 — model's July CPI basis goes effective (3.3%, still reads ON; nowcast Aug ~3.36%)
Aug 25 (last Tue) — Case-Shiller June print; watch the YoY grind toward zero
Aug 28 ~10am ET — Warsh's first Jackson Hole keynote; hawkish tone = yield spike the model can't pre-empt
Next COT — S&P specs at p91, one crowded push from flipping whales off
On the strategy
On track by construction, but this is exactly the week the model is blind — Jackson Hole, Iran, an oil/yield spike are events with no data feed, and a weekly trend-follower will ride any Warsh-driven gap down to the 706 MA (~8% below spot) before it reacts. The honest tension: we're at max risk-on while the froth cards stack up — margin debt +38.6% YoY brushing the 40% euphoria line, box-spread borrow growing, IPO unlock wall building to an $87B December peak. That's late-cycle positioning wearing a 5/5 score, and whales sitting at p91 is the machine's own quiet warning. Nothing here says override — the signals that pay are trend and curve, and both are clean. What changes my mind: a close below the 706 trend line, or whales confirming off; short of that, respect the machine and keep a hand near the door.
“The model can't hear Warsh talk — it only feels the floor move afterward.” — Vic
Weekly code review — desk housekeeping, not an investment idea. Nothing needed from you.
Ray Kessler · 2026-08-20
Findings
fetch_cot.py (fetch_year loop, range(1986, cur_year+1)) — Every daily run curl-downloads all 41 CFTC annual zips 1986->2026 to rebuild CSVs where only the current year (and maybe late-prior-year revisions) can change. deacot1986..2025 are immutable, yet re-pulled daily. That is ~40 wasted requests/day against cftc.gov, and 41 serial single-points-of-failure: any one returning <1000 bytes or a nonzero curl aborts the whole COT update (failed_years -> SystemExit), so a single transient blip on a 39-year-old file stalls the positioning signal for the day. Worst-case wall time is 41 x --max-time 60 on a 1 vCPU pod. fix: Fetch only current year (plus prior year for revisions) live; treat already-cached historical years as immutable and skip re-download.
fetch_cot.py (date field fallback, line 43-44) — Primary column 'As of Date in Form YYYY-MM-DD' falls back to 'As_of_Date_In_Form_YYMMDD_and_Trade_Date' - a DIFFERENT format (6-digit YYMMDD). If CFTC ever renames the primary column, dates silently become e.g. '260113' instead of '2026-01-13'; the string-based floor check and sorted() would misbehave and downstream week indexing drifts with no crash. Exactly the silent-drift failure mode. fix: Assert the parsed date matches ^\d{4}-\d{2}-\d{2}$ and fail loud if the primary column is missing rather than accepting the mismatched-format fallback.
5/5 Risk-On into a hiking-cycle wind, with the crowded-long gauge one print from the exit
DESK NOTE
Vic's daily commentary. Context only — the model doesn't read it and neither must you.
Quiet grind lower: S&P ~7,680 (-0.4%), Nasdaq ~26,146 (-0.7%), third down day in four as the long end refuses to behave — 30y back near 5.2% and 10y ~4.65% after Bessent's doubled Treasury buyback pumped yields down for a session and the trade unwound by Thursday. Warsh's Fed is holding at 3.5-3.75%; September is a coin-flip-to-hike, not cut, and Trump's Iran squeeze is bidding oil. Bitcoin ripped ~9% to ~$72k, Walmart dumped 9% on slowing US sales. This is a rates-led tape, not an earnings one.
Our book
Score is a clean 5/5 and the Zillow/Cleveland nowcast agrees — no hidden divergence this week; inflation nowcasts 3.36% and the July CPI (effective Aug 24) reads ~3.3%, still ON. Closest to the door is Whales: S&P specs sit at the 91st percentile of net %OI, right on the p90 crowded-long trigger — one COT print flips the score to 4 and drops us to Neutral. Inflation is the slower fuse: 3.46% and rising, 0.54pp of runway to the 4% gate.
Watchlist
Aug 24: July CPI hits the signal basis — nowcast 3.3%, reads ON but the trend is up toward the 4% gate
Aug 27-29: Jackson Hole; Warsh's first keynote as chair (Fri Aug 28) — the model can't see a hawkish surprise
Whales at p91: next CFTC COT release could tip the score to 4 / Neutral
Long end: 10y real yield at p97 (2.41%), 30y ~5.2% — watch SPY's 40-wk MA at 706.5, we're 8.2% above it
On the strategy
On track by its own rules, but we're risk-on into precisely the regime the five signals are slowest to catch: a bond-led bleed. Trend (SPY 8.2% over its 40-wk MA) and Curve (+0.46, steepening the wrong way) will both stay green through a lot of long-end pain before price finally rolls — meanwhile Real Yield (p97) and Front-end Repricing (p92) are both screaming in the advisory column, and both already failed the lab as rules, so the machine correctly ignores them. That's the known blind spot, not a bug. What would change my mind: a fast move under the 40-wk MA on a yield spike, or the inflation gate cracking 4% while rising. For now the honest read is 'fully invested, eyes on the long end and the crowded-long tape, no manual second-guessing.'
“The Treasury's buying its own bonds to hold the roof up. We're 5/5 long under it — enjoy the party, mind the joists.” — Vic
Score reads 5/5 while the risk is at the long end the model can't see.
DESK NOTE
Vic's daily commentary. Context only — the model doesn't read it and neither must you.
The story is the bond market, not stocks: the 30-year yield touched 5.31% on Aug 18, a 19-year high, on tech AI-debt issuance (~$192B YTD, ~3x normal), a ~$1.8T deficit, and Warsh's no-guidance Fed. Treasury doubled its long-dated buyback limit Aug 19, yields backed off, and equities ticked up (SPX ~7,715, +0.3%). July CPI already printed 3.4% YoY on Aug 12 — cooling, not a problem. Everyone's now watching Jackson Hole (Aug 27–29), Warsh's first keynote as chair on the 28th.
Our book
5/5 Risk-On, QQQ-heavy, trend +8.9% over its 40-wk MA — the tape agrees with the machine. Whales is the one on the ledge: S&P specs sit at the 91st percentile against a p90 crowded-long trigger, so any further net-long build flips it off and drops us to Neutral. Inflation's next signal-basis print reads ON (~3.3–3.4%), curve is +0.52 and widening — no threat there.
Watchlist
Aug 24: July CPI hits the model's signal basis (would_read ON, no flip)
Aug 27–29: Jackson Hole; Warsh keynote Aug 28 — the long-end wildcard
Whales at p91 vs p90 — next COT (Fri) can flip the score to 4/Neutral
30y yield: 5.31% and rising is a duration-accident setup the model has no feed for
On the strategy
On track where it can see, blind where it matters this week. The five signals key off the 2s10s and growth — all green — but the actual stress is a bear steepener at the 30y driven by supply and fiscal, which our curve signal reads as benign by construction. Notice the advisory board lighting up around it: real yield p99, front-end repricing p93, box-spread borrow p97, margin debt 38.6% YoY hugging the euphoria line. None of those are rules — most died in the lab, including the bear-steepener veto — so the model correctly ignores them, but they're the amber lights on a road the model drives with its eyes on the growth gauge. The 15% GLD sleeve is the only thing hedging a long-end unwind, and I'll take it.
“The model sees a healthy curve. The curve is just steepening for all the wrong reasons — nobody bought the long bond because they love the fiscal path.” — Vic
Bear-steepener veto on the yield-curve signal
REJECTED
Done — failed the validation bar in the lab. Archived in the graveyard.
Vic Marlowe · FRED DGS10 (10y yield) conditioned on existing FRED T10Y2Y / DGS2 — both already in the stack, no new feed.
proposed · triaged · reviewed
The curve card treats any 10y−2y above its trigger as risk-on, blind to WHY it's steep; a steepening driven by the long end selling off (term premium/fiscal) is the opposite of a Fed-easing steepener and historically precedes equity pain. New wiring: cap the book one level defensive when the curve signal reads ON (risk-on) AND the 10y yield's 13-week ROC sits in its own top decile — i.e. steepening for the wrong reason. This differs from what's already died: term premium (THREEFYTP10) was tested as a level/6th-signal, front-end repricing is 2y speed only, real-yield is a level card — none tested 10y speed conditioned on the curve regime.
✓ triage: feasible
· Ray Kessler · 2026-08-18 · history from 1962-01-02 — Clean pass — no new feed, no new key, no truncation trap. DGS10 runs from 1962 with ~1-day lag on the same FRED path DGS2/T10Y2Y already ride. The idea stands or falls on the backtest, not the data; hand it to Nadia.
DGS10 reachable with the FRED key we already hold, via the same api.stlouisfed.org/fred/series/observations pattern as fetch_fred.py — 200 OK, valid JSON; no new feed, no new auth. DGS10/DGS2/T10Y2Y all H.15 Treasury series on one key.
History depth (need ~2000 or earlier) — observation_start 1962-01-02; 16,140 real values (16,859 rows incl. holiday '.' placeholders). Far deeper than the 2000 floor for out-of-window tests.
Update cadence and publication lag — Daily series, last_updated 2026-08-17; latest observation 2026-08-14. ~1 business-day lag — fine for a daily-refresh pod.
Licensing truncation trap (the ICE BofA trailing-3y problem) — None. DGS10 is Fed H.15/Treasury, not an ICE BofA series — full history exposed, no rolling-window truncation.
Daily-refresh viability (rate limits/auth churn) — One extra series on an existing keyed fetcher; no keyless scraping, no per-series auth. 3 requests used from this pod. 13-week ROC is a resample of an existing daily pull — compute, not a new data ask.
Lab verdict · Dr. Nadia Osei · 2026-08-18
Tested Vic's exact wiring — a cap-one-level-defensive overlay firing when the curve card reads ON and the 10y's 13-week absolute ROC sits in its own top decile (trailing P90, change>0, +1bd lag) — on the canonical rich engine, gross and net@10bps, across 24 declared cells (roc_days {65,130} x thresh {85,90,95} x {cap-one, cap-defensive} x {curve-conditioned, unconditional}). Vic's primary cell loses the 2007 full-sample window (11.60 gross / 10.90 net vs 11.98 / 11.43, Sharpe 1.05 vs 1.06) and is flat-to-negative net in 2015 (12.75 vs 12.94) and the 1989-2007 spliced OOW (12.82 vs 12.99, +0.03 Sharpe) — no cell wins both primaries net, and the extra ~30% turnover makes net worse than gross everywhere. The curve-conditioning is a distinction without a difference: curveON and unconditional cells are near-identical in all 24 rows, so the 'new angle' collapses onto the already-buried 10y-speed / term-premium family. Forensics confirm the mechanism is broken — the flag reads False at the 2022 bear steepener it was built to catch (trailing-percentile normalization erases the move when the whole rate regime is fast, the same pathology that killed percentile normalization in the graveyard) while firing on benign steepeners (2003, 2013 taper tantrum), and maxDD is unchanged in the primaries because 2008 was a 10y rally, not a selloff. Fails bar #1 (both primaries), #3 (margins inside noise), and #6 (net worse).
oow1989-2007 spliced: cand 13.67% gross / 12.82% net, Sharpe 1.11, maxDD -25.4 vs base 13.68 / 12.99, Sharpe 1.08 (−0.01 gross / −0.17 net); native 2000-2007 unavailable — V1_BOOKS rich run can't warm up before GLD's 2004 inception
→ Vic: “The veto slept through your marquee example — 2022's steepener read False because a top-decile filter is blind in a regime where every move is top-decile — and conditioning on the curve changed nothing to four decimal places: −0.53pp net in 2007, into the graveyard.”
Score says 5/5 Risk-On while the long end quietly burns the house down
DESK NOTE
Vic's daily commentary. Context only — the model doesn't read it and neither must you.
Global bond rout is the story: the 10y sits near 4.75%, a 19-month high, and the 30y hit 5.32%, highest since 2007 — driven by term premium, fiscal supply and sticky inflation expectations (UMich year-ahead above 4% for a fifth straight month), not by Fed hikes. Equities are down a third straight day, Nasdaq -1.3% led by a semi selloff, with crude above $85 on Middle East tension. The labor side is soft (July payrolls -23k) yet headline CPI is stuck at 3.4% — the ugly combination. New chair Warsh gives his first Jackson Hole keynote next week; FOMC minutes land Wednesday.
Our book
We're 5/5, Risk-On, 55% QQQ — max tech beta into a tape where tech is leading the decline and long rates are at multidecade highs. The fragile leg is Whales: S&P specs are crowded at the 91st percentile against a p90 trigger, essentially sitting on the line — one more week of net spec buying flips it and drops us to 4/5 Neutral. Inflation's July print lands 2026-08-24; nowcast is 3.36% and reads ON, so that leg holds.
Watchlist
Aug 19: housing starts/permits — NAHB already limp at 35, buyer traffic 23
Aug 20: FOMC minutes — first read on the Warsh-era reaction function
Aug 24: July CPI effective; nowcast 3.36% keeps inflation ON, score stays 5/5
Whales at p91 vs p90 trigger — the one leg a week from flipping us to Neutral
On the strategy
This is precisely the regime the machine reads wrong. Our curve signal sees 10y−2y at +0.53 and calls it healthy, but it cannot tell a bull-steepener (Fed easing into recovery, good) from a bear-steepener (long end selling off on term premium and fiscal supply, bad) — and right now it's emphatically the second. The score is clean 5/5, yet three rate-related advisory cards are all lit: real yield p97 restrictive, front-end repricing p94, box-spread borrow surging, and leverage levering up at 38.6% YoY near the euphoria line. None of that is in the model's blind curve read. I'm not fighting the score — it earned its keep — but I'd carry this Risk-On with eyes open: the crash type here (a rates-led, long-end-driven repricing) is one the five signals lag, and the trigger to change my mind is trend breaking 706 on SPY or that whale leg finally flipping.
“The model sees a steep curve and smiles. It can't see that it's steep because someone's dumping the long bond.” — Vic
Five-for-five into a bond market that's pricing hikes, not cuts.
DESK NOTE
Vic's daily commentary. Context only — the model doesn't read it and neither must you.
S&P sits just off a record after a third straight weekly gain, but Monday was flat-to-soft: AI capex optimism (Anthropic revenue print lifting Micron, Sandisk) offsetting a hawkish Fed and US-Iran headlines. The story under the tape is rates — 10y near 4.7%, a 19-month high, with the 30y at a 19-year high, while the 2y sits ~4.24%; under Warsh markets now price roughly two-thirds odds of a September hold and lean toward HIKES by year-end, not cuts. Friday's retail sales came in soft, which loads extra weight onto Walmart, Target and Home Depot this week. No CPI this week — the calendar is FOMC minutes Wednesday and a build-up to Warsh's first Jackson Hole keynote Aug 27–29.
Our book
Model reads 5/5, full Risk-On (QQQ 55 / SPY 30 / GLD 15) — trend is 9.4% over its 40-wk MA and the curve is a comfortable +0.51, so the two workhorses are nowhere near their triggers. The fragile leg is Whales: S&P specs are crowded at the 91st percentile, right on the p90 line — one COT print of further crowding flips it off and drops us to Neutral. Inflation is the other one to watch but it's not close: 3.46% vs the 4% gate, and the July print landing Aug 24 nowcasts ON.
Watchlist
Wed Aug 19 — FOMC minutes; how hard the hawkish bloc is leaning
Aug 24 — July CPI effective in the signal; state nowcast says still ON at ~3.3%
Aug 27–29 — Warsh's first Jackson Hole keynote; the policy-shock risk the score can't see
Whales: specs at p91, sitting on the p90 trigger — next CFTC report could flip it
On the strategy
On track by construction, but leaning into its blind spot. v3's edge is trend-plus-curve regimes with benign inflation — that's exactly now, and it's right to be long. The catch: the curve is steep for the WRONG reason. This is a bear-steepener — long end selling off because Warsh won't hike and term premium is rebuilding — not growth-led steepening, and the curve signal reads level, not cause. The advisory wing agrees something's off: real yield at p96 restrictive, front-end repricing at p91, margin debt +38.6% YoY brushing the euphoria line, box-spread borrowing surging. All of those failed as rules, so the machine correctly ignores them — but the crash type it has never priced well is a bond-led equity derating with no earnings recession, and a hawkish Jackson Hole is the live catalyst. We ride trend until trend breaks; just know what we're riding into.
“The score's long, the bond market's short, and only one of them gets to be right by September.” — Vic
5/5 Risk-On into a soft consumer and an event-heavy tape — model's right, watch the crowd
DESK NOTE
Vic's daily commentary. Context only — the model doesn't read it and neither must you.
S&P printed a fresh record then eased 0.2% Friday, but capped a third straight weekly gain — the trend is intact. The wobble was under the hood: preliminary August Michigan sentiment cratered to 51 (vs 55 expected) and July retail sales fell the most in over a year, so the consumer is softening even as index levels hold. July CPI (released Aug 12) came in benign — +0.1% MoM, 3.4% YoY headline, shelter two-thirds of it. The calendar ahead is loaded: Walmart/Target this week, Nvidia Aug 26, and Jackson Hole Aug 27-29 with Warsh's first keynote as chair on the 28th.
Our book
Score is a clean 5/5, Risk-On, QQQ-heavy — and the estimate block agrees, so no hidden disagreement between the nowcast and the published print. Every score signal has room except one: whales sits right on its p90 crowded-long trigger (distance ~1%), so a single hot COT print flips it off, drops the score to 4, and knocks us to Neutral. Trend (+10% over the 40-wk MA) and curve (+0.51pp) are nowhere near flipping; inflation stays ON as long as CPI holds under 4%.
Watchlist
Aug 24: July CPI lands in the signal basis (nowcast ~3.3%, reads ON) — needs to stay sub-4%
Whales/COT: S&P specs pinned at ~p90; next crowded print flips the swing signal and cuts us to Neutral
Aug 26: Nvidia earnings — largest QQQ weight, no data feed, pure event risk
Aug 27-29: Jackson Hole, Warsh keynote Aug 28 — tone the model can't see until price moves
On the strategy
This is the regime v3 is built to own: durable uptrend, positive curve, contained inflation, home prices still up YoY. Being fully Risk-On here is correct and I'm not fighting it. What the machine can't see is the froth stacking up around the edges — margin debt +38.6% YoY brushing the euphoria line, box-spread borrowing surging, whales crowded — none of which trade as rules because they failed the lab, but together they say the crowd is leaning the same way we are. Add a consumer that's rolling (sentiment 51, retail sales down hard) and slow signals — Case-Shiller two months stale, CPI monthly — that will be last to know. On track, but this is a 'right position, fragile tape' week: the risk isn't the signals being wrong, it's a headline hitting the one signal (whales) that's already at its trigger.
“Records and record-low sentiment in the same week. The tape and the shopper can't both be right — and only one of them has a data feed.” — Vic
Five-for-five into record highs, and the labor market picks now to crack.
DESK NOTE
Vic's daily commentary. Context only — the model doesn't read it and neither must you.
S&P printed a fresh record above 7,800 Thursday and booked a third straight weekly gain, but Friday went soft — retail sales fell 0.6% (worst in over a year) and Michigan sentiment slipped on inflation worries. July CPI cooled to 3.4% YoY, yet the real story last week was labor: employers shed 23k jobs with a combined 103k of downward revisions to May/June. Front end reacted — 2y down to ~4.19%, 10y ~4.65% — and the market no longer prices a Fed hike until 2027. Reddit joins the S&P 500 at Monday's open (Aug 18).
Our book
We're 5/5 Risk-On, QQQ-heavy, riding the tape at all-time highs — trend +10% over its 40wk, curve steepening, CPI comfortably sub-4. Whales is the pin: specs sit at the 91st percentile of net length, sitting right on the p90 crowded-long trigger, so a confirmed COT read there drops us to 4/5 Neutral. Home prices is the slow second — Case-Shiller +1.1% YoY with the Zillow nowcast already down to 0.84%, bleeding toward the zero line.
Watchlist
Aug 24: July CPI becomes effective in the model — nowcast ~3.3%, still reads ON
Weekly CFTC COT: whales at 91st %ile, one confirmed print from crowded-long → 4/5 Neutral
Late Aug: Case-Shiller June — watch YoY toward zero (Zillow proxy 0.84%)
Sept 16-17 FOMC: hike now off the table, labor crack shifts debate toward cuts
On the strategy
The machine is doing exactly what it's built to do — trend up, inflation sub-4, curve positive equals max risk, and it shouldn't flinch at one soft print. But the turn brewing is the type it lags worst: a labor-led slowdown with sticky inflation. The score has no employment input — temp-help is advisory-only and already soft at -0.2, and the scout's homeprices+temphelp<weak cell is live this week. Meanwhile the froth cards are all lit at once: margin debt +38.6% YoY against the 40% euphoria line, box-spread borrow surging, whales crowded. That's a textbook late-cycle configuration; I'm not calling a top, but if payrolls keep rolling while CPI holds, our five signals will turn last, not first.
“Records on the tape, pink slips in the data. The tape wins — right up until the day it stops.” — Vic
Five green lights and a record tape — with a leverage smell nobody's feed can time
DESK NOTE
Vic's daily commentary. Context only — the model doesn't read it and neither must you.
S&P cleared 7,800 for the first time on Aug 13 and sits near records; Aug 14 drifted flat as consumer sentiment softened. July CPI came in 0.1% MoM, headline 3.4% (down 0.1), core 2.5% — coolest since 2021 — which pushed a September Fed move off the table (~64% hold). AI earnings and cooling inflation are doing the heavy lifting; nothing broke.
Our book
Score 5/5, Risk-On, QQQ-heavy — the model is fully leaned in and the tape agrees. Nothing is near a flip: trend sits 10% over its 40-wk MA, curve +48bp, whales not crowded. The slow drift to watch is home prices — Case-Shiller YoY 1.11% and the Zillow proxy nowcasts 0.84%, still ON but grinding toward the zero line; the CPI nowcast (3.3 next print, effective Aug 24) keeps inflation comfortably ON.
Watchlist
Aug 24: July CPI hits the signal basis — nowcast 3.3%, reads ON (no flip)
Aug 18: July housing starts/permits — context for the softening home-price signal
Aug 21-23: Jackson Hole — no data feed for a Powell tone shift; the model can't see it coming
Home prices: Case-Shiller YoY 1.11% → watch for the drift toward 0 (falling YoY = signal off)
On the strategy
On track — this is exactly the regime v3 is built to ride: durable uptrend, positive curve, disinflation, no positioning crowding. My one flag is what the score structurally can't price: the froth cluster is lighting up in the advisory cards — margin debt +49% YoY (euphoria line, the company it keeps is 1998/1999/2007/2021), box-spread borrowing surging, an IPO unlock wall peaking in December. None of that is a timing signal — it's altitude, and the model only reacts once price actually breaks the 40-wk MA. Keep riding it, but don't confuse a 5/5 with a low-risk tape; leverage builds are invisible until they aren't. What would change my mind: a trend close below 704, or CPI back over 4 and rising — the nowcast says neither is close.
“Record highs on borrowed money still spend the same — right up until the margin clerk calls.” — Vic
5/5 into a record — clean tape, but the Fed still has a hike in its hand
DESK NOTE
Vic's daily commentary. Context only — the model doesn't read it and neither must you.
S&P cleared 7,800 for the first time and set a record around 7,816 after July CPI printed 3.4% headline / 2.5% core, both cooler than expected; PPI Thursday and retail sales Friday round out the week. Odds of a September Fed HIKE fell to ~34% from ~55% — note the direction: this cycle the tail risk is tightening, not cutting, with firm oil (Iran overhang) still propping breakevens. 10y eased to ~4.68%, 10y–2y holds a healthy +0.48. Housing keeps softening under the surface: existing sales -2.4% in June, NAR list prices down YoY eight straight months, Case-Shiller decelerating.
Our book
Score is a genuine 5/5 Risk-On — QQQ 55 / SPY 30 / GLD 15 — and every signal is confirming, not straggling: trend +10% over its 40wk, curve positive, CPI 3.4% with real room to the 4% gate, whales uncrowded at the 80th pctile. Closest to flipping is home prices, not inflation: published Case-Shiller reads +1.11% YoY but the Zillow nowcast already sits at 0.84% and falling, and the gate is zero. That's a multi-month bleed, not a this-week event — inflation would need a >4%-and-rising print to fire, and July just cooled.
Watchlist
Aug 24: July CPI (3.4%) rolls onto the signal basis — reads ON, stays ON
Late Aug: June Case-Shiller print — watch the YoY glide toward the zero gate (nowcast 0.84%)
Sep 16 FOMC: hike risk ~34% and live — the model has no direct policy-rate signal
Home-prices card: Zillow proxy 0.84% is the number that flips this book first
On the strategy
On track, and for the right reason — this is exactly the environment trend-following is built for: a record tape with five independent confirmations, not one signal dragging the other four. What I'm watching is a mismatch the machine can't price: the froth cluster is lit (margin debt +49% YoY, box-spread borrow surging, leverage pulse in euphoria) while the Fed's tail is a HIKE into that leverage. Those advisories are top-proximity, not timing — they don't tell you when — but they tell you the fall would be longer if it comes. The model's fastest defense is monthly CPI against a 4% gate; a policy-shock or oil-driven repricing moves quicker than that signal can rotate, and we have no live card that fires on it. Nothing to do — 5/5 is 5/5 — just know which crash type the machine is blind to.
“Records are made to be broken. So are the people long into them at 49% margin growth.” — Vic
COT fetcher robustness: no per-request retry + all-or-nothing over 40 annual files, and a date-column fallback that changes format
ENGINEERING · WARN
Weekly code review — desk housekeeping, not an investment idea. Nothing needed from you.
Ray Kessler · 2026-08-12
Findings
fetch_cot.py:31-52,60-72 (fetch_year / main loop) — Every cycle re-downloads all ~40 annual zips (1986→current) with zero retry — unlike fetch_prices (retry x1) and fetch_fred (retry x3). fetch_year does one curl and returns [] on any blip; a single empty year (incl. immutable 1986-2025 history) lands in failed_years and raises SystemExit, aborting the WHOLE COT update and keeping caches. At per-request flakiness p, a refresh needs (1-p)^40 to all succeed; p=1% → only ~67% of daily runs update COT at all. It also puts 40 requests/day on CFTC for data that never changes after year-end — exactly the rate-load I tell everyone else not to be the cause of. fix: Retry fetch_year 2-3x like the other fetchers, and only refetch the current+prior year — treat pre-current years as an immutable on-disk cache so one stale historical file can't wedge the whole signal.
fetch_cot.py:43-44 (date column fallback) — The date fallback pairs two DIFFERENT columns/formats: primary 'As of Date in Form YYYY-MM-DD' (ISO) vs fallback 'As_of_Date_In_Form_YYMMDD_and_Trade_Date' (6-digit YYMMDD). This is unlike the name-field fallback on line 42, which correctly pairs the same column in two header styles. CFTC already renamed the name column to underscores once (why line 42's fallback exists); if they do the same to the date header, this silently yields '060103'-style strings, which then blow up dt.date.fromisoformat in signals.py/watchdog rather than parse. fix: Make the fallback the same column in underscore style ('As_of_Date_In_Form_YYYY-MM-DD') so a header rename can't switch date formats, or normalize YYMMDD→ISO explicitly if that column is ever used.
5/5 Risk-On into a cooling CPI and a Fed that still wants to hike
DESK NOTE
Vic's daily commentary. Context only — the model doesn't read it and neither must you.
July CPI landed at 3.4% YoY (0.1% m/m, core 0.2%), a tick below June's 3.5% and in line — S&P +0.2%, Nasdaq +0.3%, with CoreWeave and SMCI earnings carrying tech. But the Fed held July at 3.50–3.75% over three dissents, and swaps now price ~60% odds of a September HIKE; 10y sits ~4.65%, 2y ~4.24%, 30y ~5.19% — a bear steepener. Housing keeps decelerating: Case-Shiller 1.1% YoY, mortgages hung around 6.5–6.7%. Jackson Hole (Warsh) late August is the next hawkish trigger.
Our book
Score is a clean 5/5, Risk-On, QQQ 55 / SPY 30 / GLD 15 — trend is 9.7% over its 40-wk MA and the curve is +0.48pp, nowhere near the −0.10 flip. Nothing is imminent, but two slots to watch: home prices at +1.11% YoY grinding toward the zero line (Zillow nowcast already reads 0.84% for June), and whales at the 80th percentile versus a 90th-pct trigger — the fastest-moving of the five if specs crowd long. Inflation flags 'rising' but sits at 3.46% against a 4% gate, so today's print doesn't threaten it; the model even reads ON on the next release.
Watchlist
~Aug 21–23: Jackson Hole (Warsh) — hawkish tone is the event the model can't price
Aug 24: next CPI reading flows to the inflation slot; model still reads ON
Late Aug: Case-Shiller (June) — watch YoY decel toward the 0 home-price trigger
Sep 16–17 FOMC: ~60% priced for a hike into a positive, steepening curve
On the strategy
On track where it counts: the tape is trending, the five signals are green, and momentum machines earn their keep exactly in a melt-up like this. But be honest about the blind spot — this is a regime the model has no organ for: a Fed biased to TIGHTEN while the curve stays positive and steepens, so our inversion-based curve signal won't flag it. The froth cards are all lit at once — margin debt +49% YoY, box-spread borrow surging, real yield at the 98th percentile, leverage-pulse 'euphoria' — which is late-cycle wallpaper, not a timing tool. The airbag here is price, not policy: we ride until trend breaks the 40-wk MA, and a September hike or a hawkish Jackson Hole can only hit us after the fact. That's the design; I respect it, but eyes open.
“Inflation cooled a tenth and the Fed still wants to hike — the tape's dancing on a table the Fed hasn't cleared yet.” — Vic
Five of five into a CPI print the model can't see coming
DESK NOTE
Vic's daily commentary. Context only — the model doesn't read it and neither must you.
Tape is quiet-firm near record highs — S&P +0.13%, Nasdaq +0.28% Tuesday — with the whole week hostage to July CPI at 8:30 ET Wednesday (consensus +0.1% MoM headline and core). The live wire is oil: Iran/Strait-of-Hormuz headlines spiked crude then faded on Oman-Iran talks, and that's what's moving rate expectations. 10y ~4.7%, 2y ~4.23%, and Fed pricing is a mess — depending on who you read it's a 25-vs-50 cut split or a ~46% *hike* tail, all of it inflation-contingent.
Our book
Score is 5/5, Risk-On (QQQ 55 / SPY 30 / GLD 15), and the primaries earn it: SPY 9.7% over its 40-wk MA, curve +0.47pp, whales not crowded. Closest to a real flip is home prices — published Case-Shiller YoY is +1.11% but that's May data, prices have fallen three months running, and the Zillow proxy already reads +0.84% for June, bleeding toward the zero line that turns it off. Inflation is the loud gauge (3.46%, rising) but its gate is >4% AND rising, so tomorrow's print deteriorates it without flipping it.
Watchlist
Wed Aug 12, 8:30 ET — July CPI; gate is YoY>4% AND rising, nowcast 3.42%, so no flip risk, but an oil-driven hot core is exactly the re-acceleration the monthly signal lags
Home-price signal: Case-Shiller YoY +1.11 → 0, Zillow proxy already +0.84 — watch for the first negative YoY
Oil / Strait-of-Hormuz headlines — the inflation shock with no data feed
Sep 16 FOMC — market split cut/hold with a live hike tail
On the strategy
On track, and honestly performing to spec — the model is long a strong, broad, positively-sloped trend, which is what it's built to harvest. My reservation is the shape of the tail, not the position. The inflation signal only defends above a 4% AND-rising gate; an oil-supply spike re-accelerating prints from 3.5% is precisely the regime it enters late, on monthly data, well after the tape. Underneath, the froth advisories are all lit at once — margin debt +49% YoY (euphoria), box-spread borrow surging, IPO unlock wall building into December — a cluster that historically marks top-proximity, not timing, and none of which the five scoring signals can see. Stay long the machine; just know the two ways it gets hurt here are a supply-side inflation jolt and a leverage unwind, neither of which has a trigger in the score.
“The score says party; the margin-debt card says check where the exits are. I've read that pairing before.” — Vic
Five-for-five into a record tape the model can't see is leveraged — CPI Wednesday won't flip us, but the froth cards are all lit.
DESK NOTE
Vic's daily commentary. Context only — the model doesn't read it and neither must you.
S&P closed 7,757 Friday after a strong week (+3.6%, Nasdaq +5.2%), earnings carrying it — ~85% of 436 reporters beat, headline profit growth near 50%. Monday is a flat holding pattern: Nasdaq slipped ~0.3%, everyone waiting on July CPI Wednesday (8:30 ET) and PPI, plus jockeying on whether a Strait of Hormuz / Iran de-escalation holds. Yields drifted lower on softer jobs data into the print. Nothing that moves a 40-week average.
Our book
Score is 5/5, Risk-On, QQQ-heavy — and the tape agrees: SPY sits 9.9% over its 40-wk MA, curve +46bp, no signal near its own line. The calendar-risk card is inflation (3.46% YoY, rising) but the trigger is >4% AND rising, so Wednesday's print doesn't flip us unless it gaps ~55bp higher; the Cleveland nowcast says 3.45%, flat. The genuine slow grind is home prices: 1.11% YoY with the Zillow proxy nowcasting 0.84% — decelerating toward the zero trigger, still on, but that's the signal quietly walking to the door.
Watchlist
Aug 12: July CPI + PPI — inflation card needs >4% and rising to flip; nowcast ~3.45%, so watch trend not level
Home prices: Zillow proxy 0.84% YoY and falling toward the 0% trigger — the slow signal to watch, not the fast one
Iran / Strait of Hormuz headlines — oil and risk-appetite shock the model has no feed for
On track, and honestly it should be — clean uptrend, positive curve, contained inflation, no recession tell is exactly the regime these five signals were built to ride, so being max-long is correct, not brave. My reservation is the blind spot, not the score: the advisory rack is a wall of froth — margin debt +49%, box-spread borrowing surging, leverage 'euphoria,' real yields 98th percentile restrictive, an IPO unlock wall peaking in December. None of those time tops and every version we tried died in the lab, so I'm not asking to override anything. But that cluster firing together while we sit 5/5 is the textbook 'this time is different' setup, and the one structural fragility is the inflation card that just whipsawed us Neutral→Risk-On on July 19 and is rising again. What changes my mind: CPI crossing 4% on Wednesday, home-price YoY going negative, or SPY breaking its 40-wk MA — until then we ride it and keep our hand near the trend switch.
“The machine is long, the leverage is loud, and the curve says keep dancing — just note where the exits are.” — Vic
watchdog.py crashed on a non-OHLCV CSV (box_outstanding.csv, 2 cols) and silently skipped every other integrity check
ENGINEERING · WARN
Pipeline postmortem — desk housekeeping, not an investment idea. One thing needs your attention below.
Ray Kessler · 2026-08-09
Diagnosis
The lone pipeline error is watchdog.py, line 64, IndexError on cols[2]. The price-immutability check globs data/*.csv indiscriminately and assumes the 5-column OHLCV schema (cols[2]=close). This cycle two new 2-column leverage files landed in data/ root — box_outstanding.csv (date,outstanding_usd) and margin_debt.csv (month,debit_usd_m) — written there by fetch_leverage.py; neither existed in watchdog_snap.json, confirming they are new. Sorted glob hits box_outstanding.csv first (row '2021-01-08,741420000' has no third field) and throws. Because the crash is before the writes, watchdog.json/snap were never updated, so the FRED-shrinkage, COT-staleness, frozen-window-CAGR, secrets, and runtime checks did not run at all — the empty alert list this cycle is a false all-clear, not a clean bill of health. The actual price data is intact: all 25 OHLCV files refreshed today (Aug 9), 5 columns, no corruption; the frozen-window pin is untouched.
Root cause
Structural. Not a vendor hiccup — fetch_leverage.py deposits new non-price schemas (margin_debt.csv, box_outstanding.csv) into the same data/ directory the watchdog's OHLCV loop scans, and the loop has no schema guard, so a legitimate new data source breaks the check. It will crash every cycle until the loop is scoped or guarded; ipo_proceeds.csv (3 cols) and lockups.csv (7 cols) already slipped through last cycle producing garbage hashes, so the assumption was already eroding.
⚠ Action needed: Fix watchdog.py's price loop so it only reads real OHLCV series — restrict it to a known price-symbol list (or skip any file whose header isn't date,open,close,adjclose,volume) and guard the row parse (len(cols) < 3 → skip). Do NOT solve this by moving the leverage files; alt-data belongs in data/ and the watchdog is what's wrong. Priority is that a crash here silently voids the FRED/COT/frozen-regression/secrets checks — a broken watchdog reporting zero alerts is worse than a loud failure. Separately, note RSP.csv is stale (last bar 2026-07-12 with a duplicated date, file dated Jul 15 while all others are Aug 9) — not the cause of this crash, but it wants a look.
Record highs on a jobs whiff — the model rides trend while labor cracks under the hood
DESK NOTE
Vic's daily commentary. Context only — the model doesn't read it and neither must you.
S&P closed at a record 7,757 Friday (+0.62%, +3.58% on the week — biggest in months), Nasdaq +1.30%, on a July payrolls miss: -23k jobs vs +83k expected, with May/June revised down a combined 103k. The tape read soft labor as 'the Fed can't hike,' so 10y yields fell ~7bp to ~4.6% and September hike odds dropped to 42% from 58% — note the Fed is still debating hikes, not cuts, with Kashkari on the hawkish side. Inflation is the crosswind: CPI ran 3.5% YoY in June, tariff pass-through keeps upside risk alive, and July CPI lands Tuesday.
Our book
5/5, Risk-On, QQQ-heavy — every score signal on and none within an ordinary print of flipping: trend +10.3% over its 40wk MA, curve +0.46 (trigger −0.10), whales only p80. The nominal swing signal is inflation, but it needs >4% AND rising to flip and the Cleveland nowcast has August at 3.45% — so Tuesday's July print is unlikely to cross the gate. Realistically the two nearest edges are whales crowding toward p90 as specs chase a record melt-up, and home prices grinding toward zero (Zillow proxy 0.84% for June vs 1.11% published).
Watchlist
Tue Aug 12: July CPI (BLS) — inflation gate; nowcast 3.45%, needs >4% & rising to knock the book off Risk-On
Thu Aug 13 PPI, Fri Aug 15 retail sales + jobless claims — first labor/demand confirmation after the -23k payrolls shock
Next COT: whales at p80 after a +3.58% week; p90 crowds the last score point
Home-price track: Zillow nowcast 0.84% decelerating toward the 0 gate; Case-Shiller still lags 2 months
On the strategy
On track by its own rules — trend intact, curve positive, inflation contained under 4% — and the machine is right to be long. But this is exactly the regime where I watch it closest: the score has no labor input, and labor just turned (negative payrolls, 103k of revisions vanished) while the froth cards light up — margin-debt euphoria firing at 49% YoY, box-spread borrow surging, an IPO unlock wall building into December. The model's only crash defense here is a 40wk trend break 10% below and a curve that isn't inverted; a labor-led downturn would hit before either fires. Nothing to do — you don't override a 5/5 on a hunch — but understand the position is 'long a record high on rate-relief hopes while the job market rolls,' and the thing the model cannot see is the labor deterioration the tape cheered Friday.
“Market threw a party because fewer people have jobs. Enjoy the punch; the model can't smell the labor market from here.” — Vic
Leverage pulse: FINRA margin debt YoY euphoria flag (macro advisory)
CARD LIVE
Done — you approved this as an advisory card. It's on the dashboard as context and never trades.
Clem (SyntheticFi question) + Claude lab · finra.org margin-statistics (xlsx, 1997->, blocks robots) via thetrading.tools embedded payload, cross-checked vs convextrade.com public API; full history seeded in-repo (seeds/margin_debt.csv).
proposed · reviewed
FINRA's monthly tally of all margin-account debit balances is the aggregate 'how levered are investors' number ($1.50T Jun-26, a record, +49% YoY). Lab (1997->, 21st-of-following-month publication lag honored): margin debt growing >=40% YoY flags ~8% of weeks - mid-1998, late-1999, mid-2007, early-2021, and NOW - with fwd-26w SPY ~9pp under baseline; edge negative across the whole 30-50 threshold plateau. Above +50% the melt-up keeps paying for a few months first (1999 shape). Deleveraging side is coincident, not predictive - card warns on euphoria only. Top-proximity context, not timing.
Lab verdict · Claude lab · thresholds swept 30-50, both horizons, episodes enumerated · 2026-08-08
Card-worthy: rare, historically clean euphoria flag currently firing. As a model input untested (episodic: 4 pre-2026 episodes; and it is ON now, so adopting it as a rule today would be trading the very print that motivated it - classic look-ahead temptation). If ever promoted, pre-register and walk forward.
fwd26w edge-9.5pp at T=40 (n=113 weeks), -10.2 at 35, -4.9 at 50
fwd13w at T>=50+4.0pp - blow-off continuation before the bust
If followed as a rule, selling-to-defensive on every +40% cross would have sidestepped the 2000, 2008 and 2022 drawdowns but also sat out the 1999 blow-off's last leg — fwd-26w SPY ran ~9pp under baseline while the flag flew.
Source: FINRA margin statistics (finra.org, via public mirrors) · monthly, ~3rd-week-of-following-month publication lag · advisory, never trades.
Why it earns a slot: The live dashboard reads trend, curve, CPI, home prices and COT positioning — none of them see borrowed money directly. Margin debt is the aggregate leverage the crowd is actually carrying, and a +40% YoY surge has sat within ~a year of every major top since 1997. It tells the human WHY a calm tape can still be fragile: the fuel is already lit, even when nothing has broken yet.
FINRA's monthly tally of every margin account in America, read as year-over-year growth. Above +40% is leveraged euphoria — a top-PROXIMITY flag (it crossed near the 1999, 2007 and 2021 tops and is crossing again now), not a timing tool.
This is a mock-up — nothing is on the dashboard yet. To ship it, tell Clem:
“add the Leverage pulse card”.
Done — you approved this as an advisory card. It's on the dashboard as context and never trades.
Clem (SyntheticFi question) + Claude reconstruction · boxtrades.com per-expiry JSON (Next.js data routes, trade-level: ts/volume/spread/rate, 2021->). Own growing dataset: weekly outstanding reconstructed (seeds/box_outstanding.csv), daily upsert from ~20 unexpired expiry pages.
proposed · reviewed
Selling an SPX box spread = borrowing at near-Treasury rates against a portfolio (SyntheticFi's whole business). Nobody publishes the aggregate, and FINRA's series can't see it (a box is not a margin debit) - so we rebuilt it from every CBOE box trade since 2021 via boxtrades.com: ~$114B outstanding, +33%/13w, 30d implied borrow rate 4.25%, sharp 2026 acceleration in sync with record margin debt. The shadow wing of the leverage-pulse card.
Display-only by construction: 5.5y of history (far under the validation bar), growth confounded with platform adoption (median 13w pace is +10%), and the cumulative rebuild can't see early closes (level = upper bound). Gauge reads 13w pace vs its own p85 (+28%) as honest 'hotter than usual' context. Never a model input.
outstanding$113.7B (2026-08-07), $68B at Jan-26 -> +67% YTD
Traded as a 'sell when pace > p85' rule it whipsawed — 5.5y of history is under the validation bar and the growth is confounded with platform adoption; net-negative, so it advises only.
Why it earns a slot: The live Leverage-pulse card watches FINRA margin debt — but a box spread is not a margin debit, so that series is blind to it. This is the only view of synthetic Treasury-rate borrowing against portfolios: $113.7B outstanding, +67% YTD, now growing at its 85th-percentile pace in lockstep with record margin debt. It tells the human whether leverage is building in a channel the margin-debt card structurally cannot see.
13-week growth rate of outstanding SPX box-spread notional, rebuilt from every CBOE box trade. A box is synthetic borrowing at near-Treasury rates against a portfolio — the shadow wing of margin debt that FINRA's series structurally cannot see.
This is a mock-up — nothing is on the dashboard yet. To ship it, tell Clem:
“add the Box-spread borrow card”.
Payrolls contracted, the tape printed a record — the model reads the tape, not the payroll.
DESK NOTE
Vic's daily commentary. Context only — the model doesn't read it and neither must you.
July jobs cracked: -23k payrolls vs +80k expected, the first contraction since February, with May/June revised down a combined 103k and the 12-month average now just ~34k. The unemployment rate 'fell' to 4.1% for the wrong reason — participation slid to a 5-year low 61.4% — and wage growth cooled to 3.2%, the weakest since 2021. Markets took the weakness as dovish fuel: S&P closed at a record 7,757.64 (+0.62%, +3.6% on the week), Nasdaq +1.3%, and September Fed-hike odds fell to ~40% from 55% as yields dropped. Note the regime — the Fed's bias was to HIKE into rising inflation; a soft labor print just muddied that.
Our book
We're 5/5 Risk-On, QQQ-heavy, and every score signal agrees with the melt-up: trend sits 10.3% over its 40-wk MA, curve +0.46, specs uncrowded at the 80th pctile. Closest to flipping is inflation — 3.46% and rising toward the '>4% and rising' gate, the signal that has already switched this book twice in 2026. The Cleveland Fed nowcast pegs August at ~3.45, essentially flat, so no imminent trip from that side; the CPI print does the deciding.
Watchlist
Aug 12, 8:30 ET — July CPI. The swing signal. >4% and rising turns inflation off and cuts the book to Neutral.
Fed September meeting — hike-vs-hold tension now live; a hawkish-into-weak-labor surprise is a tail the model can't price.
Temp-help advisory 'soft' (-0.2, rolling over) — the labor deterioration the five score signals have no feed for.
Private-credit card 'soft' (BDC rel. strength -4.8) — worth watching if the growth scare has legs.
On the strategy
Mechanically on track — this is trend-following's home turf: strong price, positive curve, no crowding, and the tape confirming daily. But the blind spot is lit up today. v3 is a price/inflation/housing/positioning machine with zero direct labor input, and labor just contracted while inflation grinds UP — the stagflation-lite quadrant the five signals only read secondhand, through price. Trend and curve will keep us long right up until they don't; if this is a genuine growth scare papered over by rate-cut euphoria, trend is a lagging witness. I'm not fighting the position — the evidence says stay long — but the inflation card into Aug 12 and the labor advisories are where this note earns its keep.
“Unemployment dropped because people quit looking. The model can't tell that from good news — and today, neither could the tape.” — Vic
Five-of-five into a CPI print, with oil doing the thinking for us
DESK NOTE
Vic's daily commentary. Context only — the model doesn't read it and neither must you.
S&P closed ~7,710 (-0.18%), Dow off 464 from its record, Nasdaq roughly flat — a mild risk-off day driven by rising Treasury yields, firmer oil, and Strait-of-Hormuz headlines, plus earnings air pockets (AppLovin -20%, Western Digital -13%, Salesforce -3%). The bigger story: the Fed has cut nothing in 2026, sits at 3.5–3.75%, and the market now prices HIKES not cuts — inflation above target a fifth year, energy the swing factor. July CPI lands Wednesday Aug 12, consensus ~3.5–3.6% YoY.
Our book
Model is 5/5 Risk-On — trend 9.6% above its 40-wk MA, curve +0.44, all five green — and the nowcast agrees (est score 5, differs=false). Closest to flipping is inflation: on at 3.46% but rising (3.29% three months ago), and the off-trigger needs >4% AND rising, so 0.54pp of level headroom. Home prices are the quieter risk — Case-Shiller +1.11% but the Zillow proxy nowcasts +0.84% and decelerating toward the zero line.
Watchlist
Aug 12: July CPI — model off-trigger is >4% AND rising; nowcast has it ~3.45%, so a print alone won't flip it, but the trajectory is up
Oil / Strait of Hormuz — no data feed until it lands in CPI or trend; an energy-driven inflation spike is the fast path to the inflation gate
Home-price trend: Zillow nowcast +0.84% YoY decelerating — the homeprices card flips if YoY goes negative
Whales (COT) at p85 vs the p90 crowded-long trigger — closest positioning has been to firing all year
On the strategy
On track — this is a trend-follower's home field: equities at records, curve positive, growth cards (copper/gold in expansion) confirming, so the machine is correctly fully invested. My one flag is structural, not tactical: the inflation gate is a lagged, monthly LEVEL gate, and the live macro risk is an energy-supply shock (Hormuz) that would show up in oil this week but in our CPI signal a month late. The model rides melt-ups into tightening; it does not anticipate an oil-driven inflation regime, and the advisory cards whispering caution — real yield at p98 restrictive, front-end repricing p88 firm — all failed the lab as rules, so there's nothing in the score to lean against a Fed that's now leaning hawkish. Nothing to do about that except respect the trend stop: close below the 40-wk MA (701.16, ~9.6% down) is what takes us out, and it should. No change of view unless CPI breaks 4% while rising or trend cracks.
“Model's long, the Fed's not, and a strait nobody can pronounce is setting the CPI. Watch the tape.” — Vic
5/5 Risk-On into record highs — with a Fed that's openly fingering the hike trigger
DESK NOTE
Vic's daily commentary. Context only — the model doesn't read it and neither must you.
S&P printed a fresh record (7,736 on Aug 4, first new high since June); Dow ripped 900+ on earnings, then Aug 5 went mixed as the AI trade cooled and Lilly's beat carried healthcare. The tape is strong, but the policy backdrop is not friendly: Warsh's Fed held at 3.50–3.75% in July with three dissents wanting a hike, June headline CPI ran 3.5% YoY, and the market now prices one-to-two hikes into year-end. This is a hiking-risk regime dressed up as a melt-up.
Our book
Machine reads a clean 5/5 — trend +9.8% over its 40-wk MA, curve +0.45, all five green — so we hold QQQ 55 / SPY 30 / GLD 15, full risk. Closest to the door is inflation: 3.46% YoY and rising, but the gate is >4% AND rising, so it's ~0.5pp of headline away and the Cleveland nowcast pins August at 3.45%, no imminent flip. Whales are the quieter risk — specs at the 85th percentile against a p90 crowded-long trigger.
Watchlist
Aug 12 CPI (June ran 3.5%; card only flips >4% AND rising — watch the trajectory, not the level)
Fed hike odds: 3 July dissents, next FOMC mid-Sept; a surprise hike is a thing the model can't feed on
Whales COT at p85 vs p90 trigger — one crowded print from turning the inflation-quiet 5/5 into a 4/5
By construction we're on track — trend intact, curve positive, no recession tell, and the model is correctly long a market at all-time highs. But name the challenge plainly: this is a policy-shock setup, a hawkish Fed threatening to hike into records, and that's the regime our signals lag worst. The inflation gate is a monthly, 4%, published-mid-month construct sitting above a 3.5% print; if Warsh hikes and the trend snaps fast, only the slow 40-wk MA catches us. Meanwhile the advisory stack is already whispering restrictive — real yield at p97, front-end repricing at p89 — even as the score says 5/5. Nothing to do about it: we've put real-yield vetoes and policy-shock conjunctions through the lab and they died, so I flag the exposure rather than pretend there's a fix.
“Records and rate-hike dissents in the same week — the market's celebrating at a party the host is trying to shut down.” — Vic
5/5 Risk-On into record highs — the melt-up is real, the fuel is news the model can't price
DESK NOTE
Vic's daily commentary. Context only — the model doesn't read it and neither must you.
S&P 500 punched to a fresh record ~7,737 (+1.8%) Tuesday, Nasdaq +2.6%, Dow through 54,000, on a ~10% weekly oil slide (Trump delayed strikes on Iran, diplomacy over the Strait of Hormuz) plus a strong earnings season — 85% of names beat, Palantir +30%. This is a genuine risk-on tape, but the two accelerants — a geopolitical oil truce and AI-earnings euphoria — are event-driven, not trend-driven. Oil is still whipsawing (WTI ~$82, off sharp lows), so the disinflation tailwind is one headline from reversing. Payrolls Friday and CPI next week are the near-term hurdles.
Our book
We're 5/5 Risk-On, QQQ 55 / SPY 30 / GLD 15 — dead-on with the tape; trend sits ~10% over its 40-wk MA, curve +43bp, nothing near a flip on price. The soft spots are the two slow signals: home prices at +1.11% YoY Case-Shiller (Zillow nowcast 0.84%, decelerating toward the zero-line flip) and inflation at 3.46% and rising on the published print — though the Cleveland Fed nowcast has August at 3.22% and falling, so the 'rising' flag is likely about to reverse. Watch whales: S&P specs at the 85th percentile, 5 points under the p90 crowded-long trigger, and a melt-up is exactly how specs get crowded.
Watchlist
Aug 7 payrolls — June was +57k, unemployment 4.2%; labor's cooling but temp-help is advisory-only
Aug 12 CPI — the inflation slot's print; published 3.46% & rising vs nowcast 3.22% & falling, the week's real tension
Whales percentile: p85 now, p90 = crowded-long → signal flips, first crack in 5/5
Home prices drifting to the 0% YoY flip (CS +1.11%, Zillow nowcast +0.84%); Sept 16 FOMC further out
On the strategy
On track, and honestly the machine has nothing to apologize for here — trend and curve are wide open, the score is correctly max risk-on, and it caught the July re-risk on inflation. My reservation is structural, not a call to override: this rally's fuel — an Iran oil truce and AI-earnings sentiment — is precisely the news-shaped input the model has no feed for, and its five signals are all trend/level lagging measures. If the Hormuz story reverses, oil spikes, and the tape rolls, price trend won't turn until we're already 10% off the high. The scout's one live flag — homeprices+temphelp<weak — says both slow domestic signals (housing, labor) are softening under the surface even as equities melt up; that divergence is the thing to respect. Nothing to change; stay 5/5, but treat this as a positioning-froth watch, not a fresh green light.
“Record highs on a war that paused. The model's long because it can't read the news — which is either its greatest discipline or its blind spot, and we won't know which until Thursday.” — Vic
Full Risk-On into a Fed that's still hiking — trend is the only brake left
DESK NOTE
Vic's daily commentary. Context only — the model doesn't read it and neither must you.
Risk ripped to start August: Nasdaq +2.1%, Dow to a record, S&P +1.5% after Trump called off the Iran strike and oil sold off, with 85% of reporters beating so far. But the backdrop is a hiking cycle, not a cutting one — 10y at 4.75%, 2y at 4.28%, and markets price ~63% odds of a 25bp hike at the September Warsh Fed. Chips lagged (SOX −1.9%); the leadership was software and consumer, not semis. Inflation is elevated and, per our own read, still rising.
Our book
The machine is 5/5 Risk-On, QQQ-max (55/30/15) — trend +8.1% over its 40-wk, curve +0.45 steep, whales uncrowded at p85. Closest to flipping is inflation: 3.46% YoY and rising, but the gate is >4% AND rising, so there's ~0.54pp of daylight. The Cleveland Fed nowcast has August at 3.39 — cooling a touch — so nothing is imminent; the score and the nowcast agree at 5/5.
Watchlist
Aug 7 08:30 — July payrolls (+120k exp, U-rate 4.3% vs 4.2%); feeds nothing directly but sets the September hike odds
Aug ~12-14 — July CPI: the inflation card's input, needs >4% AND rising to knock us to Neutral
Cleveland Fed nowcast 3.39% for Aug (vs 3.46 published) — still ~0.5pp from the gate, watch if it turns back up
On track by its own rules, but leaning into a headwind it can't fully price — worth saying plainly. The score is built to ride trend and it's riding a strong one, so I don't fight it. The tension: we're QQQ-max into a hiking cycle with 10y real yields at a trailing-3y p100 and 2y repricing at p93 — precisely the restrictiveness the advisory cards are lit up on and the score is structurally blind to, because every one of those died as a rule. In a hike-into-rising-inflation regime the model effectively has one circuit breaker — the 40-wk trend — plus a slow 4% inflation gate that lags. That's fine as long as the tape holds; the day trend rolls with real yields this restrictive is the day this book earns its scars. Watch trend, not the narrative.
“5/5 and dancing while the Fed reloads — just keep one eye on the door.” — Vic
Five-for-five Risk-On into a hiking Fed and an oil war — the machine is long the one regime it lags.
DESK NOTE
Vic's daily commentary. Context only — the model doesn't read it and neither must you.
Late July/early August ran hot and jumpy: a sharp tech-led drawdown (S&P ~-1.6%, Nasdaq ~-2.2%) followed by a snap-back bounce, the usual whippy tape near highs. The bigger story is the rates regime — Warsh's Fed held on July 29 but the market still prices roughly even odds of a September HIKE, with 30y yields at their highest since 2007 and the U.S.-Iran conflict (since Feb 27) keeping an energy bid under inflation. June payrolls were soft at +57k with downward revisions; the labor cracks are real even as inflation refuses to sit down.
Our book
Model reads 5/5, Risk-On, QQQ 55 / SPY 30 / GLD 15 — it flipped back up July 19 when the CPI card came back on, and it's leaning into the tech tilt. Anchors are healthy: SPY 6.9% over its 40-wk, curve +47bp, nowhere near their triggers. The swing vote is inflation — 3.46% YoY and rising, 0.54pp under the 4%-and-rising gate (July nowcast 3.42%, a hair softer) — while whales are the quiet nearer miss, specs at the 85th percentile against a p90 crowded-long kill line.
Watchlist
Aug 7: July payrolls — June was +57k with revisions down; our temp-help card is already soft (-0.87) and homeprices+temphelp<weak is live now.
Aug 14: July CPI — the swing signal; needs >4% AND rising to flip the book to Neutral. 3.46% and climbing, nowcast 3.42%.
Whales/COT: specs at p85 vs p90 gate — a crowding push turns the score off before any macro print does.
Home prices: Zillow nowcast 0.84% vs published 1.11% CS YoY, decelerating toward the 0 gate.
On the strategy
On track by its own lights, but this is precisely the environment where I want you reading the fine print. The model is max Risk-On into a Fed with a hiking bias, real yields at the 98th percentile, 30y at 2007 highs, and a live geopolitical energy shock — none of which it sees except through a lagged monthly CPI gate that fires on data six-to-eight weeks stale. That gate held Neutral for one month in June and is the only thing standing between us and a full risk-off; a supply-driven inflation spike is exactly the crash type this signal reacts to late, not early. The advisory panel is already flashing what the score can't — real yield p98, front-end repricing p91, copper/gold and mortgage stress benign but temp-help rolling. I'm not fighting the anchors — trend and curve earn the risk-on — but I'd hold this book with my hand near the door and watch the Aug 14 CPI as the tell.
“The score sees inflation with a two-month rearview mirror; the oil war is happening through the windshield.” — Vic
Score says 5/5, but the 30-year just printed a 19-year high — the model can't see the bond market
DESK NOTE
Vic's daily commentary. Context only — the model doesn't read it and neither must you.
Long end is the story: 30y Treasury at 5.23%, highest since 2007, 10y at ~4.67%, after a hawkish Fed hold and Warsh comments spooked investors on inflation vigilance. Nasdaq is down ~9.7% from its June peak, flirting with correction, though Friday's Mag-7 bid (Amazon +15% on cloud) lifted the S&P ~0.7% into month-end. Fear & Greed sits at 37 — risk-off mood under the tape. It was the S&P's second straight monthly decline.
Our book
We're max Risk-On, 55% QQQ / 30% SPY / 15% GLD — leaning hardest into the exact index that's nearest correction. All five score signals are on: SPY 6.9% over its 40-wk MA (698.86 is the flip line), curve +0.47, CPI 3.46 under the 4% gate, home prices +1.1%, specs not crowded. Closest to flipping is inflation — it only switched back on July 19, reads rising (3.29→3.46), and the Cleveland nowcast has July at 3.42; it needs >4% AND rising to go off, so not imminent. The faster risk is trend: another leg down in QQQ/SPY toward the 40-wk MA.
Watchlist
Aug 7 — July jobs report (BLS); temp-help advisory already soft at -0.87, labor cracks first
Aug 12 — July CPI; the fresh signal, nowcast 3.42, flips off only above 4% and rising
30y 5.23% / 10y 4.67% — bear-steepener repricing the score reads as bullish curve
Trend flip line SPY 698.86 (6.9% below) and QQQ own-trend +6.7% — the Risk-On tilt's tripwires
On the strategy
On track by the letter, challenged by the spirit. The score is 5/5, but the tape it rests on is diverging from a long-end-led, hawkish-Fed repricing the five signals structurally cannot see. The curve reads +0.47 steepening as a green light, yet this is a bear steepener — the long end selling off on inflation-vigilance fears, not the front end easing — and the curve signal is blind to which. Our own advisory layer already sees the stress the score misses: real yield at the 98th percentile, front-end repricing at the 91st. This is a crash-type the machine has thin memory for — a duration-led drawdown that can gut a QQQ book while the equity 40-wk MA stays intact until late; if SPY loses 698.86 the score self-corrects, but after the fact.
“The model's long the index the bond market is trying to strangle. It'll notice when the MA breaks — bonds already have.” — Vic
fetch_fred.py writes series to disk with no truncation/regression guard, unlike prices and COT
ENGINEERING · WARN
Weekly code review — desk housekeeping, not an investment idea. Nothing needed from you.
Ray Kessler · 2026-07-31
Findings
fetch_fred.py (save path, lines 104-107) — fetch_prices.save() and fetch_cot both refuse an overwrite that shrinks >5% or regresses the newest date, keeping the good cache. fetch_fred writes csv_text unconditionally for all 30 series — the ones that ARE the signals (T10Y2Y, CPIAUCSL, DGS10, DFF, DFII10). A valid-but-partial API response (empty/short observations array, a FRED-side series reset like the realtor.com ACTLIS/PENLIS mirrors) silently replaces good history with truncated data. The watchdog fred-shrinkage check is post-hoc, warn-only, non-blocking (backtest already ran; signals runs regardless), and it re-baselines to the shrunk count after one cycle — so the truncation still reaches signals and the original cache is already destroyed. Edge case: an empty observations array writes a header-only CSV, then line 107's lines[1] raises IndexError and aborts every series after it. fix: Add the same len<0.95*old / newest-date-regresses / non-empty floor check before writing each FRED CSV; on trip, keep the cached file and exit non-zero like prices/cot.
Score reads 5/5 into a melt-up the bond market is quietly voting against
DESK NOTE
Vic's daily commentary. Context only — the model doesn't read it and neither must you.
S&P closed July at 7,489.72 (+0.7% Fri), fourth straight up month for the Dow, powered by AI-capex earnings — Amazon +15% on cloud, though Apple fell ~10% on a chip-cost hit. Under the hood the long end is screaming: 30y hit its highest since 2007 (~5.23%), 10y ~4.70%, a bear-steepener after the Fed held 3.50–3.75% on a divided 9-3 vote July 29. Oil pushing past $100 added to the yield backup. This is a real-rate/term-premium move — 10y breakevens are 2.27 and FALLING (2.46 three months ago), so it isn't the market pricing inflation, it's pricing supply and fiscal.
Our book
5/5 Risk-On, sitting 55% QQQ into exactly the tape that's working — trend is 6.9% over its 40-wk MA, nothing close to breaking. Closest to a flip is Whales: S&P specs at the 85th percentile against a p90 crowded-long trigger, i.e. one hot COT print from going off. Inflation is rising (3.29→3.46) but 0.54pp under the 4% gate and the Cleveland nowcast actually cools it to 3.42, so no threat there; homeprices decays toward the zero line (Zillow proxy 0.84 vs 1.11 published) but stays positive.
Watchlist
Aug 7: July jobs report — labor resilience is half of what's driving the long-end selloff
Aug 12: July CPI — the only thing that trips the inflation gate; nowcast says 3.42, benign
Whales at p85 vs p90 trigger — nearest single signal to flipping
30y at ~5.23% / 10y 4.70% — real-yield cards at p98/p91, breakevens anchored: a rates move the score can't feel
On the strategy
On track by its own construction — trend-following into a trending, earnings-confirmed tape is the machine's best case, and it's fully invested. But name the blind spot plainly: the risk right now is a bond-led repricing that hits equity multiples without tripping a single score signal. The curve is STEEPENING, so the yield-curve card reads safer, not scarier; CPI is sub-4, so inflation stays on; yet real yields sit at the 98th percentile and the whole move is term-premium/fiscal, not inflation — a crash type the five signals aren't wired to sense. That's not a reason to override anything; it's the thing to watch. What changes my read: trend losing the 40-wk (SPY ~699), or the long-end backup finally dragging QQQ off its own trend.
“The equity book is throwing a party; the 30-year is standing in the doorway with its coat on.” — Vic
Max Risk-On into a hawkish hold — the model can't see the Fed's teeth
DESK NOTE
Vic's daily commentary. Context only — the model doesn't read it and neither must you.
The Fed held at 3.5–3.75% Wednesday, but three FOMC members dissented for a HIKE and Chair Warsh said higher rates 'could well be part of the solution' to too-high inflation — a hawkish hold, not a dovish one. Stocks puked on it (Dow -1,100, S&P -1.5%, 10y to ~4.62–4.66%, 2y ~4.3%, both near YTD highs), then ripped back Thursday on Microsoft's +15.5% earnings and a 2.78% Nasdaq day. A Middle East flare-up is adding an oil/inflation tail the tape is ignoring for now. Two-sided, headline-driven, and the bond market is voting for stickier inflation.
Our book
We're 5/5 Risk-On — QQQ 55 / SPY 30 / GLD 15 — flipped up July 19 when CPI cooled back under the gate. Closest to flipping is inflation: 3.46% YoY and rising (3.29% three months ago), threshold >4% AND rising, and the daily nowcast has July at 3.42% — still on, but the direction and the Fed both lean the wrong way. Watch whales next: S&P specs sit at the 85th percentile, crowded-long trigger at p90; a melt-up into this hawkish tape is exactly how that one flips us to Neutral.
Watchlist
Aug 7 — July jobs report; labor is the Fed's other excuse to hike
Aug 12 — July CPI; inflation gate is >4% & rising, nowcast 3.42%, level is all that's holding it on
Whales p85→p90: crowded-long trigger, one crowded print from knocking us to Neutral
Curve compressed to ~0.32 intraday on bear-steepening; trigger -0.10 still far but the direction turned
On the strategy
On track by the letter, exposed by the spirit. The machine is max Risk-On the same week the Fed pivoted hawkish and the front end broke to new highs — because our inflation gate is a lagging 4%-level trip, not a direction trip, and none of the five score signals reads the Fed's reaction function. Meanwhile three advisory rate cards are all lit — real yield at the 98th percentile (2.41%), front-end repricing at p90, and now bear-steepening — yet every one of them failed the lab as a rule, so the model is legitimately blind to the restrictiveness it's staring at. This is the known soft spot: inflation-hiking regimes the signals lag until the level actually crosses, then whipsaw. Growth cards still say go (copper/gold +19.5% over its MA, expansion), so I'm not fighting the book — but if CPI grinds to 4% while whales crowd in, we get the flip and the drawdown in the same fortnight.
“The Fed handed out dissents like party favors and the model saw a green light. It's not wrong yet — it's just early to the wrong party.” — Vic
5/5 Risk-On into a hawkish hold and $100 oil — max risk, minimum visibility
DESK NOTE
Vic's daily commentary. Context only — the model doesn't read it and neither must you.
The Fed held today with three dissents voting to hike (Hammack, Kashkari, Logan); the bond market read it as falling behind, and the 10y jumped to ~4.63–4.67% while the S&P fell ~1.5%, Nasdaq ~1.7%, Dow ~2.2%. The driver is a geopolitical oil shock: crude above $100 on the Strait of Hormuz shutdown and Houthi tanker attacks, with the Dallas Fed sketching a path to $132 WTI. MSFT and META reported after the bell; Thursday brings GDP, PCE and claims less than a day after the Fed acted.
Our book
We're 5/5 Risk-On, 55% QQQ, into a hawkish Fed and an energy-led inflation impulse the CPI card structurally can't see yet — the nowcast even nudges July CPI to 3.42 (down) because the shock is too fresh to print. Closest to flipping is whales at p85 vs the p90 crowded-long trigger; trend has a 4.4% cushion (SPY 729 vs 698 40-wk MA) and inflation needs +0.54pp to breach the 4%-and-rising gate. The catalyst for all of them is the same: whether oil pass-through drives CPI and drags equities through the MA.
Watchlist
Thu Jul 30, 8:30 ET: Q2 GDP advance + PCE deflator + jobless claims — the print that vindicates or embarrasses today's hold
Inflation card: CPI 3.46% and rising (3.29% three months ago); $100 oil hits the July/Aug prints, gate is >4% AND rising
Trend backstop: SPY 729 vs 698 40-wk MA — a ~4.4% drop flips Risk-On toward Neutral
Whales COT at p85 vs p90 trigger — 5 points from a crowded-long off
On the strategy
This is the regime that plays to the machine's blind spot: a supply-side, geopolitical inflation shock. All five signals are coincident-to-lagging here — the CPI gate won't register $100 oil until the July/August prints, the curve card reads +0.35 as healthy when it's actually a bear steepener (rising term premium, not growth), and trend and whales are confirming a rally that predates the shock. That's not a knock; the model is doing exactly what it was built to do. The honest statement is that it's carrying maximum risk into the one shock type it's slowest to price, and the only real-time backstop is trend — if the oil-led yield rise cracks equities through the 40-wk MA, take the exit the model gives you and don't front-run it.
“The model can't smell smoke — it waits for the fire to show up in a monthly print. Keep one hand near the trend line.” — Vic
Score is 5/5 lit while the tape rotates out from under the tech tilt
DESK NOTE
Vic's daily commentary. Context only — the model doesn't read it and neither must you.
S&P +0.3% and Dow +1.3% Tuesday with equal-weight at record highs — three gainers per decliner, a broadening tape. But the Nasdaq-100 was red (~-0.7%) as chips got hit: Nvidia -5% below $200, AMD -5%, memory names down double digits, all on renewed 'circular financing' fear after reports of a ~$250B OpenAI backstop and >$750B of Nvidia deals. Oil kept sliding, which helped everything ex-semis. The FOMC decides tomorrow (Jul 29, 2pm ET): market prices ~75% hold / ~25% hike, 0% cut, funds at 3.50–3.75%.
Our book
We're Risk-On, 5/5, 55% QQQ — max tech tilt at the exact moment mega-cap AI is the fault line. Score is healthy on the surface: trend +6% over its 40wk MA, curve +0.34, whales still net-short in absolute terms. Closest to flipping is whales at ~p85 vs the p90 crowded-long trigger, then inflation, which is rising (3.29→3.46) but needs >4% AND rising to go off — the nowcast actually eases to 3.37% for July, so no near-term flip there.
Watchlist
Jul 29 2pm ET — FOMC; ~25% odds of a HIKE into a Risk-On book, and the model has no feed for it
Next CFTC COT (Fri) — S&P specs at ~p85, trigger p90; a crowded-long print is the mechanical risk-off
QQQ own-trend advisory (+4.8% vs 40wk MA, still 'clear') — the veto that arms if the chip selloff deepens
Mid-Aug July CPI — nowcast 3.37%, gate is 4%; watch trimmed-mean (2.63%) for breadth
On the strategy
On track, but this is a textbook 'score-lit, tape-rotating' setup and I want it on the record. The five signals see a broad, trending, non-inflationary-enough market and they're right about the average stock — equal-weight at highs confirms it. What they cannot see is that our 55% QQQ sleeve is levered to a single narrative — AI circular financing — that rhymes with 2000, and no signal here has a feed for 'is the AI capex loop real.' The comforting part: this is a broadening, not a narrowing, tape, which is not what tops look like, and QQQ's own-trend advisory is still clear, so the model isn't fighting a hidden downtrend. The thing to respect is tomorrow's Fed: a hike surprise lands on a max-risk book before any signal can react. No override — just don't confuse a lit scoreboard with a calm one.
“Model's holding a full-tech hand into a Fed meeting and an AI-financing rerun of 2000 — the scoreboard's green, the room isn't.” — Vic
Done — you approved this as an advisory card. It's on the dashboard as context and never trades.
Clem (unlock-schedule idea) + Claude deep research · DefiLlama datasets bucket https://defillama-datasets.llama.fi/emissionsIndex - keyless, verified by probe (22MB, same-day fresh, 355 tokens, full past+future schedules). UNDOCUMENTED (the documented api.llama.fi/emissions routes were just paywalled) - fetcher needs cache-fallback + staleness alarm + mcap sanity filter, same class as the rwa.xyz feeds.
proposed · reviewed
Token vesting unlocks are the crypto version of IPO lockups, and better documented: Keyrock's 16,000-event study shows 90% of unlocks create negative pressure, with the drop FRONT-RUN (starting ~30 days before, stabilizing ~14 days after; team unlocks worst at -25%); a 236-event study measures median -16.3% vs BTC in the surrounding month. Card: total $ unlocking next 30 days + count of large events (>=1% of circulating supply) + top-5 list. Honest framing: predicts ALTCOIN underperformance vs BTC, not BTC direction - an altcoin-headwind / BTC-dominance gauge showing the UPCOMING window, since the damage happens before the date. Live probe: ~$872M across 65 tokens unlocking in the next 30 days.
Lab verdict · Claude research fleet (4 agents) · sources probed live · 2026-07-28
Strongest of the unlock-study candidates: free scriptable source verified, large-sample evidence (16k + 236 events), and the display-the-upcoming-window design matches the front-running result. Display-only by construction (crypto portal has no model). Risks: undocumented endpoint, per-token data-quality artifacts (sanity-filter by mcap).
evidence90% negative (16k events); median -16.3% vs BTC (236 events)
timingfront-run ~30d before, stable ~14d after
now$872M / 65 tokens unlocking next 30d
→ Vic: “The one unlock signal with both the data and the evidence. Alt headwind, not a BTC call.”
Card preview · Ray Kessler · 2026-07-29
Token unlocksADVISORY · PREVIEW
$0.84Bnext-30d cliff $
28 / 100 · 50 = trigger
TYPICAL50 tokens · 37 ≥1% float · heavy line $1.5B
If traded as a BTC-dominance tilt — long BTC / short alts into every heavy window (2024-11, 2025-09, 2026-03) — it would have caught the documented ~-16% alt-vs-BTC drift; but it never trades and single tokens are never called, so it stays alt-headwind context only.
DefiLlama emissionsIndex (undocumented bucket) · cliff events, mcap≥$10M, current prices · daily refresh, schedule known months out.
Why it earns a slot: Nothing on either portal reads forward token supply: the macro board is equities/rates/housing, and the crypto cards are valuation (Mayer, 200w), sentiment (F&G) and miners (hash rate) — all price-derived. This is the one mechanical, pre-scheduled headwind, and it answers a question a human actually asks — 'is the next month a heavy alt-unlock window, so tilt toward BTC dominance?' At $0.84B it says the next 30 days are typical, not heavy; the history shows how often that line gets crossed and by how much.
Dollar value of scheduled cliff unlocks landing in the forward 30-day window, valued at today's prices — the altcoin supply overhang. It reads FORWARD because the evidence says the price damage front-runs the date (declines start ~30d before, stabilize ~14d after), so the upcoming window is the number that matters. Predicts altcoin underperformance vs BTC, not BTC's own direction.
This is a mock-up — nothing is on the dashboard yet. To ship it, tell Clem:
“add the Token unlocks card”.
Done — you approved this as an advisory card. It's on the dashboard as context and never trades.
Clem (unlock-schedule idea) + Claude deep research · Jay Ritter's monthly IPO proceeds (site.warrington.ufl.edu/ritter, 1980->2025, free Excel, actively updated) + FRED NCBCEBQ027S (Z.1 net equity issuance, 1946->, keyed API we hold). No free historical lockup-date dataset exists; EDGAR reconstruction possible but not needed for the aggregate proxy.
proposed · reviewed
Six months after every IPO boom, a wall of lockup expirations hits: $70B->$300B of internet shares unlocked into the spring-2000 crash (Ofek-Richardson tie it to the bubble's burst); the record 2021 IPO year ($142B) put its unlock wall at Sep-21..Feb-22, squarely on the IPO/ARKK wreck (SPY sailed through - it is a GROWTH-SEGMENT signal). Card: dollar-weighted 'unlocking now' proxy = Ritter's monthly IPO proceeds shifted forward 6 months, optionally beside FRED Z.1 net equity issuance (just flipped positive in 2026Q1, first time in years). Live hook: SpaceX's ~$123B unlock starts Aug 2026. Honest copy: two supporting episodes ever, both confounded with Fed tightening; context for the QQQ sleeve, never a trigger; single-name effect is real but decayed (-1.5% in the 1990s -> ~-0.5-1% pre-date drift, VC-only, eaten by borrow costs).
Lab verdict · Claude research fleet (4 agents) · sources probed live · 2026-07-28
Justified as display context only. As a model input it fails before the lab: episodic (flat ~12 of 18 years, n=1 inside our windows), and 2008-09 is an inverted counterexample (no unlock wall in the worst drawdown; net issuance spiked at the 2009 bottom via bank recaps - a supply rule sells the bottom). Annual-ish cadence (Ritter updates); slow card, low maintenance.
counterexample2008-09: no wall; issuance spiked at the bottom
→ Vic: “A froth thermometer for the growth segment, one good reading per decade. Know what it is.”
Card preview · Ray Kessler · 2026-07-30
IPO unlock wallADVISORY · PREVIEW
$7.7B$B unlocking now
100 / 100 · 50 = trigger
WALL AHEAD$7.7B now · peak $87.4B (2026-12)
If traded as a rule it cuts the QQQ sleeve into the 2021 wall (right once) but sits flat ~12 of 18 years and never fires in 2008-09 — so it sells nothing at the actual bottom; kept as context, it never trades.
Why it earns a slot: The live dashboard's growth signals (trend, QQQ own-trend) only see price after supply has already hit; this is the one gauge that shows the supply itself, and on a six-month lead because lockups are struck at IPO — the reader sees a $87B December wall coming before any price reacts. It also teaches its own limits: flat for years, silent in 2008-09, and growth-segment-only (SPY was untouched in 2021), so nobody mistakes a froth thermometer for a market-timing trigger.
ADVISORY — shown, never traded. Six months after every IPO boom, a wall of employee and insider shares clears lockup and becomes sellable. This line shifts monthly IPO proceeds ($B) forward six months to show that wall — including the known future, since today's IPOs are next winter's unlocks. Its receipts are thin but real: 2021's record IPO year put its wall on Sep-2021..May-2022, squarely on the growth-stock/ARKK wreck while the S&P sailed through; the 1990s bubble unlocked ~$300B of internet shares into the spring-2000 crash. That is the honest scope: a GROWTH-SEGMENT supply gauge, not a market call — two good readings per quarter-century, both tangled with Fed tightening. Rejected as a model input before the lab: flat most years (n=1 inside our windows) and 2008-09 is the counterexample (no wall in the worst crash; issuance spiked at the bottom). Right now the wall is genuine — June 2026 was the biggest IPO month on our record ($87B, SpaceX era), unlocking around December.
This is a mock-up — nothing is on the dashboard yet. To ship it, tell Clem:
“add the IPO unlock wall card”.
Max-long tech into FOMC and four mega-cap earnings prints the model can't see coming.
DESK NOTE
Vic's daily commentary. Context only — the model doesn't read it and neither must you.
Friday closed mixed — Dow +0.5%, S&P flat, Nasdaq red on another AI-capex rotation, Nvidia leading lower on China-competition worries. A US-Iran strike pause sparked a relief bid: oil tumbling, bonds and gold up. But context matters — last week the 10y hit a 2026 high near 4.70% and the 30y touched 5.19% (highest since '07) on oil-driven inflation fear; it's easing back to ~4.64% now. FOMC decides Wednesday with a hold near-certain (~97%), fifth straight, still a live hawkish tail.
Our book
5/5 Risk-On, 55% QQQ / 30% SPY / 15% GLD — flipped up July 19 when inflation re-passed. Closest to flipping is inflation: CPI 3.46% vs the 4% gate and rising (3.29% three months ago), so an oil-fed print pushes it toward the trigger — but the Cleveland Fed nowcast has July at 3.37%, below June, so the score holds. Whales sit at p85 vs the p90 crowded-long trigger; trend is a comfortable 5.8% above its 40-wk MA (738.93 vs 698.65).
Jul 29 MSFT/META, Jul 30 AAPL/AMZN earnings — direct hit to a 55% QQQ book
Inflation gate: CPI >4% AND rising flips the score to Neutral; nowcast 3.37% says not yet
Whales p85 → p90: crowded-long veto if S&P specs keep building
On the strategy
The machine is doing exactly what it's built to do — riding a confirmed uptrend — but it's maximally tech-tilted right as the tape rotates out of AI-capex and heads into four mega-cap prints plus a Fed meeting. Understand the exposure: the signals fire on prior-week data at next open, so a tech-specific derating won't register until QQQ actually breaks trend (~6% of downside away), and none of the five see an earnings miss or a hawkish surprise coming. The assumption under real pressure is inflation, via oil — but so far the nowcast reads cooling, not hot, so the model isn't being fooled. Verdict: on track and correctly positioned to the evidence, just concentrated at a moment where the biggest risks are precisely the ones with no data feed. Watch trend and the inflation gate; everything else is noise this week.
“The model doesn't listen to earnings calls. It'll find out Thursday, same as the rest of us — just with a 55% QQQ book on the line.” — Vic
5/5 Risk-On into an oil shock the inflation signal can't smell yet
DESK NOTE
Vic's daily commentary. Context only — the model doesn't read it and neither must you.
Houthi strikes shut Saudi Arabia's last export route via Bab el-Mandeb; Brent pushed above $100 and July Fed hike odds tripled to ~37% on CME FedWatch — from 11% mid-month. Warsh's line at Sintra was 'prices are too high,' minutes point to no cuts until 2027, and the decision lands July 29. Meanwhile the tape wobbled last week on tech earnings — Alphabet's AI capex jump and Tesla dragged the Nasdaq down while the Dow held; a heavy megacap earnings slate runs all week.
Our book
Model is 5/5, max risk, QQQ 55/SPY 30/GLD 15 — flipped up July 19 when the inflation card came back on (CPI 3.46%, below the 4% gate). Closest to flipping: inflation itself, which is rising (3.29%→3.46%) but needs to breach 4% AND stay rising to go off; whales are the sleeper, specs at the 85th percentile against a p90 trigger. Note the tell: the Cleveland Fed nowcast has July CPI at 3.37% — easing — because the oil impulse hasn't reached the print yet.
Watchlist
Jul 29 FOMC — hike is a ~37% tail, not base case; a hike or hawkish hold is the shock the book isn't positioned for
Jul 28 Case-Shiller (June) — home-price card at +0.84% YoY, thinnest positive margin on the board
Aug 12 CPI (July) — first print that could carry >$100 Brent; watch the 'rising' qualifier, not just the 4% level
Whales toward p90 — specs at p85 now; a crowded-long reading pulls the 5th signal
On the strategy
This is a regime the machine reads late by construction. A supply-driven oil impulse hits pump and shelter-adjacent prices over one-to-three months; our CPI gate reads the June print and the nowcast for July is still easing, so the model can stay 5/5 Risk-On straight into an inflation re-acceleration it structurally can't see. That's not a bug to override — it's the same blind spot that killed the inflation-aware-bunker and crude-overlay ideas in the lab, so the honest response is watchfulness, not a manual hedge. What tempers it: growth signals aren't confirming a slowdown — copper/gold sits +20% over its 40-wk MA, mortgage shock is stable — so this reads as a price shock, not a demand break, and the trend/curve/positioning legs are genuinely healthy. Change my mind: CPI printing >4% and rising, or the curve compressing toward the -0.10 trigger as the front end reprices a hike.
“The model trades on last month's inflation; the tankers are burning this week. Nobody said the machine had a nose.” — Vic
Model goes 5/5 Risk-On into an AI-capex air pocket and a live Fed — the machine can't see either.
DESK NOTE
Vic's daily commentary. Context only — the model doesn't read it and neither must you.
The Mag-7 shed ~$787B Thursday, its worst single day in over a year — not a macro scare but an AI-capex one: Alphabet beat but revised 2026 capex up, squeezing free cash flow, and the rest of mega-cap tech got repriced with it. Nasdaq closed the week soft while the Dow and broad S&P steadied, so the damage is concentrated in exactly the leadership, not the tape at large. Oil kissed $100 before fading, bond yields stayed elevated, and a fresh tariff round added noise. FOMC decides Wednesday July 29: base case is a hold at 3.50–3.75, but futures-implied hike odds tripled to ~38% as energy and AI costs push inflation.
Our book
We flipped Neutral→Risk-On on July 19 when the inflation card came back on, and the book is 55% QQQ, 30% SPY, 15% GLD — maximum tech tilt landing precisely on the week the tech-specific risk broke. The nowcast agrees with the print (est score still 5, CPI nowcast 3.37 vs 3.46), so no hidden disagreement to trade around. Closest to flipping is inflation itself — 3.46% and rising, 0.54pp under the >4%-and-rising trigger, and it's toggled the book twice in two months; whales are the quieter creeper at p85 vs the p90 crowded-long trigger, though net specs are basically flat, not euphoric.
Watchlist
Wed Jul 29 FOMC decision — hold priced, but hike odds ran 12%→38%; a hawkish surprise hits our real-yield advisory (already p99 restrictive)
QQQ own-trend advisory: +6.4% over its 40-wk MA and still 'clear' — watch if the AI-capex selloff drags it under while the score stays 5
Aug 12 CPI — inflation card is the swing signal, rising and 0.54pp from its gate
Aug 7 jobs — temp-help advisory already soft (−0.87), labor rolling slowly
On the strategy
This is a challenge week, not a validation week. Every one of the five signals is broad and macro — trend on SPY, curve, headline CPI, home prices, S&P positioning — and not one of them sees a capex-cycle repricing inside the concentrated leadership we're 55% long. That's the exact blind spot: the tape isn't breaking (SPY 6% over its 40-wk MA, curve +36bps, specs uncrowded), so the machine correctly reads Risk-On, while the risk this week is a valuation/free-cash-flow air pocket in mega-cap tech that has no data feed. I'm not overriding it — the signals are doing their job and the broad backdrop is genuinely fine — but the honest read is we're carrying the max-tech book into the one crash-type shape the model has never priced. If QQQ loses its own 40-wk trend while the score holds 5, that advisory veto is the tell to respect, even though it failed as a hard rule.
“The model can't read an earnings call. It'll find out about the capex bill the same way everyone else does — at next Monday's open.” — Vic
Model goes 5/5 Risk-On, max tech, the same week Brent prints $100.
DESK NOTE
Vic's daily commentary. Context only — the model doesn't read it and neither must you.
Brent spiked ~7% to a two-month high above $102 on Red Sea/Hormuz supply fears, dragging the 10y yield to its highest since Jan 2025 and reviving inflation talk; energy and defense led while tech got hit — Nasdaq -2% on the week, Tesla -14.5% on negative cash flow, Alphabet -7% on AI capex. S&P is still only ~2.7% off its high, so this is rotation, not a rout. FOMC lands Wednesday Jul 29: a hold at 3.50–3.75% is ~64% priced (fifth straight), but oil pushed 2026 hike odds to 38% from 12% a week ago, with the June minutes showing no cuts before 2027.
Our book
We flipped Neutral→Risk-On on Jul 19 when the inflation card came back on (CPI 3.46% < 4%), so we're now QQQ 55 / SPY 30 / GLD 15 — max long tech into a tech selloff and an oil-driven rate scare. Nothing in the score is near a flip: trend +6% over its 40wk MA, curve +0.36 vs −0.10, home prices positive; the closest is whales at the 85th percentile against a p90 crowded-long trigger. The inflation card is the one to watch, but it reads June and the July nowcast is 3.37% — cooling, not heating — so the oil pass-through simply isn't in our data yet.
Watchlist
Wed Jul 29 — FOMC decision/presser; hold priced, watch hawkish tilt on oil
Aug 12 — July CPI, first print that could carry the oil pass-through toward the 4%-and-rising trigger
Brent >$100 / Strait of Hormuz headlines — the exogenous driver our score can't see
Whales COT: 85th pctile now, p90 flips it off
On the strategy
Mechanically the machine is fine — every signal is doing what it was validated to do, and it correctly ignores a one-week oil headline. But this is precisely a regime it lags: an exogenous supply-side energy shock feeds inflation and rates months before CPI (published, June, lagging) reflects it, and the crude-overlay fix already died in the lab, so there is no clean patch. Note the advisory tape disagrees with the score's confidence — real yield at the 99th percentile, front-end repricing at the 93rd, both flashing restrictive while we sit max Risk-On. I'm not overriding anything; I'm flagging that if oil holds triple digits, the risk is a whipsaw where inflation flips us back to Neutral in a month or two after we've eaten the tech drawdown. On track by the rules, exposed by the calendar.
“The model bought the dip in tech; the Houthis bought the dip in tankers. Only one of them has a data feed.” — Vic
Model goes 5/5 Risk-On, max tech tilt — right as tech is the thing wobbling.
DESK NOTE
Vic's daily commentary. Context only — the model doesn't read it and neither must you.
Wall Street closed a losing week: Nasdaq -2%, dragged by an AI-capex/chip selloff after Alphabet lifted 2026 spending guidance to ~$205B and hyperscalers signaled $600–700B of AI capex. S&P finished flat near 7,412, Dow up on rotation into predictable-cashflow names. Overhang is twofold — a Middle East/Iran oil bid keeping energy firm, and a Fed that meets July 29 with markets debating hold vs. a 25bp HIKE (~35% odds), not a cut.
Our book
Score flipped 2→3 on July 19 when the inflation card came back on (CPI 3.46% YoY, under the 4% gate), so we're now Risk-On: 55% QQQ, 30% SPY, 15% GLD. Closest to flipping is inflation itself — it's the whipsaw card (off June 21, on July 19) and it's rising, though the Cleveland nowcast (3.37% for July) says no imminent break of 4%; whales sit at p85 vs the p90 trigger. QQQ own-trend veto is still clear (+6.4% over its 40-wk MA), so nothing forces us out of the tech overweight yet.
Watchlist
Wed Jul 29, 2:00pm ET — FOMC: a communication event, hold-vs-hike; statement/presser carries the repricing
Thu Jul 30 — US GDP + PCE (Fed's preferred gauge) into a hawkish-risk print
This week — mega-cap/chip earnings; watch QQQ toward its 40-wk MA (~a 6% cushion to the veto flag)
Aug 12 CPI — the rising inflation card needs a >4% print to flip it off
On the strategy
The machine is doing exactly what it's built to do — 5/5 on price trend, positive curve, sub-4% CPI, firm home prices, uncrowded specs — and I won't override it. But note the irony it can't see: it just leaned hardest into QQQ on the same week tech took the beating, because its trend and positioning signals lag by design and it has no feed for 'capex guidance spooked the tape.' The real forward risk here is a hawkish surprise, and our restrictiveness advisories agree — real yield at p99, front-end repricing at p93 — none of which are score signals, all having failed as rules. On track by the rulebook; the exposure is squarely in the one asset carrying event risk this week. What would change my mind: a QQQ close below its 40-wk MA (veto flag) or a hot CPI/PCE that pushes the inflation card back toward its gate.
“Model bought the most tech it can hold the week tech remembered it has to pay for the GPUs. Backward-looking by construction — that's the deal we signed.” — Vic
Done — you approved this as an advisory card. It's on the dashboard as context and never trades.
Clem (private-debt idea) + Claude scouting · Yahoo weekly (keyless, same stack as the price fetchers): ARCC (Ares Capital, 2004->, covers GFC), BIZD (VanEck BDC Income ETF, 2013->, cleaner sector proxy), SPY denominator. Distinct from the graveyarded HY-spread (HYG/IEF) reject: BDCs are equity in PRIVATE direct lenders, not public high-yield bonds.
proposed · reviewed
Private direct lending ($1.7T+) is a growing systemic risk with no public-spread feed. Business Development Companies (BDCs) are its liquid proxy: publicly-traded private lenders whose price relative to the market prices private-credit stress in real time. Rule to test: ARCC (or the BIZD sector ETF) relative to SPY, vs its own 40-week MA - dividing by SPY strips equity beta to isolate the credit-specific signal. Descriptive scouting is striking: it troughed at every real credit event (GFC -44.8%, 2015-16 energy-credit crunch -15.0%, COVID -23.9%) but did NOT fire in the 2022 rate shock (+3.3%) - it distinguishes CREDIT stress from RATE stress, which none of the five signals or existing advisory cards can. Currently -19.3% (troughed -23.8% in May 2026). Clem's steer: fine as an advisory card even if it fails as a rule.
Lab verdict · Dr. Nadia Osei · 2026-07-25
Tested ARCC/SPY (and BIZD/SPY) relative strength vs its own trailing 26/40/52-week MA and ROC, folded in two declared-ex-ante ways (A: 6th signal into a strict n=6 map; B: stress-overlay cap at Defensive), judged on the canonical common-start rich engine gross and net@10bps. As a RULE it fails: net −1.3 to −2.6pp in 2007 and −2.7 to −5.1pp in 2015 across all 12 cells, none improving either primary, with higher turnover so net trails gross. The MA-cross flag fires 'stress' ~50% of weeks and read risk-on the week Lehman failed — it lags the tape rather than leading it. The only OOW the 2004-10 ARCC inception supports (2005-07, ~1.5y, no credit event) flips sign between adjacent params — noise, and cannot rescue a primary failure. But the raw relative-strength LEVEL is descriptively real and distinct: it troughs at every credit event (GFC −53%, 2015-16 −16%, COVID −28%) and stayed quiet in the 2022 rate shock (−3.9%), a credit-vs-rate read none of the five signals carry — card material, allocation untouched.
200740wk-MA rule net 9.93 (A) / 8.95 (B) vs v3 11.20 — all 12 cells −1.3 to −2.6pp net; maxDD ~flat
201540wk-MA rule net 9.89 (A) / 9.34 (B) vs v3 12.57 — all 12 cells −2.7 to −3.8pp net (BIZD proxy same story)
oow2005-07 native (only pre-primary window ARCC supports; ~1.5y, no credit event): mixed −2.8 to +4.1pp, sign flips between adjacent params = noise, non-arbitrating
→ Vic: “Clem's gauge is a real credit thermometer the tape has already read — worth a card, but as a rule it de-risks half of all weeks and was long-risk the week Lehman went down, so it stays off the model.”
Card preview · Ray Kessler · 2026-07-26
Private-credit stressADVISORY · PREVIEW
−4.3%ARCC/SPY vs 40w MA
55 / 100 · 50 = trigger
STRESS−4.3% vs 40w MA · well off Feb −12.9% low
If traded it de-risked ~half of all weeks and was long-risk the week Lehman failed — net −1.3 to −2.6pp (2007) and −2.7 to −5.1pp (2015) across every lab cell, higher turnover, none beating v3 — so it advises only and never touches allocation.
Yahoo weekly adjclose (keyless): ARCC ÷ SPY vs trailing 40-week MA · refreshed daily, trailing-only · advisory — never trades.
Why it earns a slot: None of the five score signals or the existing advisory cards read private-credit stress: the curve reads shape, trend and QQQ read equity price, breakevens and CPI read inflation. This is the one gauge that tells a credit event (ARCC craters vs SPY: −46% GFC, −42% COVID) from a pure rate shock (−3.9% in 2022, a scratch), pricing $1.7T of direct lending that has no public spread feed. Right now it reads −4.3% — recovered from a −12.9% February dip, mild caution, no credit event underway.
ARCC (Ares Capital) relative to SPY, measured against its own 40-week average — a live proxy for private-credit stress that none of the five score signals or the other advisory cards carry. Deep, sustained drops below the line mark genuine credit events (GFC, COVID); it barely registered the 2022 rate shock, which is exactly how it separates credit stress from rate stress.
This is a mock-up — nothing is on the dashboard yet. To ship it, tell Clem:
“add the Private-credit stress card”.
Model goes max Risk-On the same week the market fires the AI trade
DESK NOTE
Vic's daily commentary. Context only — the model doesn't read it and neither must you.
S&P closed Friday at 7,412, essentially flat, but it was a back-to-back losing week (-0.6%) and the Nasdaq shed 2.1% as the AI-capex trade unwound — SK Hynix reportedly slowing HBM expansion, Micron down ~13% intraweek, semis off 4.3% Friday even as Apple (+3.5%) held the Dow up. Oil round-tripped near/below $100 on tentative U.S.-Iran de-escalation headlines out of Pakistan/China. The overhang is next week's FOMC (Jul 28-29): a hold at 3.50-3.75% is consensus, but Warsh's Fed is leaning hawkish — 9 of 18 dots now show hikes this year and Polymarket has ~26% on a July move, 53% by October. This is a tech-derating and a rate-risk tape, not a growth-scare tape.
Our book
We flipped 2→3 Risk-On on Jul 19 when the inflation card came back on (CPI 3.46% vs the >4%-and-rising gate), so we're now QQQ 55 / SPY 30 / GLD 15 — maximum tech tilt into a week the market spent punishing tech. Closest to flipping is Whales, at the 85th percentile vs the p90 crowded-long trigger (5 points of room); Home prices is the other thin one at +0.84% YoY. Inflation itself just re-armed and is rising — nowcast 3.37% keeps it on, but oil back near $100 is the thing that could turn the next print.
Watchlist
FOMC Wed Jul 29, 2pm ET — hold expected; watch Warsh's tone and any hike-bias language, model can't price it
Whales/COT at p85 — 5 points from the p90 crowded-long off-trigger
QQQ own-trend advisory +6.4% above its 40-wk MA — the line that matters if the semi bleed continues (advisory, no veto power)
Fri Jul 31 new-home-sales (June) + Thu jobless claims — feeds the housing read, claims were at a 2-month low
On the strategy
The machine did exactly what it's built to do: inflation cooled under the gate, trend is up, curve is +36bp, so it took the Risk-On book. Mechanically correct — and I won't second-guess a slow monthly-signal engine for failing to see a two-week semiconductor derating; that's the model's blind spot by design, not a flaw. But be honest about the setup: we're carrying a 55% QQQ sleeve into an AI-capex derating and a hawkish-Fed event, and none of our five signals see either until they show up in trend or the curve weeks later. This is precisely the regime where the model lags — event-driven single-sector unwind with the macro tape still intact. What changes my mind: SPY closing below its 696.97 40-wk MA (trend off, ~6% down) or QQQ losing its own 40-wk MA — until then, we ride it.
“We went all-in on tech the week Wall Street decided AI needed to show a receipt. The model can't read the room — that's my job.” — Vic
We flipped full Risk-On the same week tech leadership cracked — the model can't read a capex scare or an oil shock.
DESK NOTE
Vic's daily commentary. Context only — the model doesn't read it and neither must you.
S&P closed ~7,412 Friday, essentially flat, but booked back-to-back weekly losses (-0.6% SPX, -2.1% Nasdaq, Dow's third straight down week) as AI/semiconductor capex fears hammered chips (-4.3% on the week's worst day). WTI spiked toward $90+ on renewed Iran/Middle East tension before easing on peace-talk headlines. FOMC lands Wednesday July 29 — market prices ~64% hold at 3.50-3.75%, ~36% for a cut, no dot plot. 10y sits ~4.68-4.71%; the 30y mortgage tagged a one-year high at 6.58%.
Our book
Score is 5/5, Risk-On, 55% QQQ — and the July 19 switch to this book was driven by inflation flipping back green (CPI 3.46% under the 4% gate), so we levered into tech leadership right as it wobbled. The nowcast agrees with the tape of the print (July CPI est 3.37%, no divergence), so no hidden gap this week. Closest to flipping: whales at the 85th percentile vs a p90 trigger — any crowd-long stampede into a rebound turns it off; inflation is the slower risk, rising (3.29%→3.46%) toward the 4% line.
Watchlist
FOMC Wed Jul 29 2pm ET — hold ~64% priced; a cut or hawkish tone is the event with no feed in our score
New home sales + jobless claims this week — color for the housing/labor advisories
Oil >$90 on Iran — inflation pass-through our monthly CPI signal won't register until the Aug 12 print
Whales at p85 vs p90 trigger — the nearest live signal to flipping the score off 5/5
On the strategy
On track by design, but this is exactly the week to be honest about what the machine is blind to. It went max-risk on a lagged, prior-week inflation read into a tech-led drawdown and an exogenous oil/geopolitics shock — no data feed carries either, and the QQQ-own-trend veto is still 'clear' (+6.4% vs its 40wk MA), so nothing internal is braking the tilt yet. Meanwhile three rate-based advisory cards are stretched — real yield at the 99th percentile (restrictive), front-end repricing at p93 (elevated) — flashing tightness underneath five green primaries. That divergence has been the shape of every prior real-yield/policy-shock veto proposal, all of which died in the lab, so I'm not going to pretend a re-wire fixes it; the model is meant to be slow and it will be slow here. What would change my mind on the book: SPY closing back below the 696.97 40-wk MA (trend off), or the whales crowding to p90 — either drops us out of Risk-On on its own terms.
“Full risk-on into a capex scare and a $90 oil tape — the model doesn't read the news, which is a feature until the week it isn't.” — Vic
Model flips to max tech tilt in the same week the tech tilt is what's bleeding
DESK NOTE
Vic's daily commentary. Context only — the model doesn't read it and neither must you.
S&P closed the week roughly flat at ~7,412 but booked back-to-back weekly losses; the Nasdaq fell 2.1% on the week as the story shifted from earnings to the cost of AI capex — SK Hynix slowing HBM expansion, TSMC guiding capex higher, and ~$1.3T erased from semis (SMH -9.5% MoM). A Middle East risk premium and oil selling off on reported US-Iran peace feelers are the crosscurrents. FOMC lands Wednesday July 29: consensus is a hold, but the live tail is a 25bp HIKE (~35%), not a cut — the Fed's tone is hawkish and cuts are priced near zero.
Our book
Score is 5/5, Risk-On, 55% QQQ — and we got here July 19 on the inflation card flipping back on (CPI 3.46% under the 4% gate), the same card that put us in Neutral a month earlier. So the machine went maximum-tech precisely into a tech-specific, capex-driven drawdown it has no feed for. Closest to flipping: whales at the 85th percentile vs the p90 crowded-long trigger, and homeprices at just +0.84% YoY creeping toward the zero-line; the display nowcast agrees with the published score (inflation est 3.37%, homeprices 0.84%), so no hidden divergence to trade around.
Watchlist
FOMC Wed Jul 29, 2pm ET — hold expected; a hawkish hold or 25bp hike is the tail the model can't price
Whales (COT) at p85 vs p90 trigger — crowded-long building; a Friday print through p90 drops us to 4/5
Case-Shiller YoY +0.84% — one more soft month and homeprices flips off
Next CPI Aug 12 (nowcast 3.37%, rising but under the 4% gate); jobs Aug 7
On the strategy
On track by the rules, but this is exactly the regime that tests them: the score is levered to QQQ on a signal set that reads price trend, curve, CPI, housing and S&P positioning — none of which see AI free-cash-flow doubt or a semis-led rotation. Trend still has a 6% cushion (SPY 739 vs 697 MA), curve is steep, and the QQQ own-trend advisory is still 'clear' at +6% above its 40-week, so the machine isn't wrong to hold risk on the evidence it has. What nags me is the advisory suite lighting up on the other side: real yield at the 99th percentile, front-end repricing at the 93rd — restrictive policy the score doesn't weigh, into a meeting where the surprise is a hike. I'm not overriding anything; the model has ignored more headlines than I've had, and headline-driven tech wobbles are precisely what it's built to sit through. What changes my mind: trend breaking, whales crossing p90, or CPI actually printing >4% — until then this is noise the machine is right to ignore.
“The model bought the dip-magnet at full weight — brave, or just blind. We'll know by August.” — Vic
Model goes max Risk-On into the teeth of the AI-capex unwind
DESK NOTE
Vic's daily commentary. Context only — the model doesn't read it and neither must you.
Tech is the epicenter: Nasdaq booked back-to-back weekly losses (-2.1% last week) on AI-capex fears after Alphabet lifted 2026 spend guidance to $205B, with Micron -13%, Tesla -14.5%, Alphabet -7.1% in single sessions. Money is rotating out of growth into predictable-return sectors — Dow actually up on the week while the S&P closed roughly flat (7,412) Friday, held back by chips. FOMC decides Wednesday Jul 29; the week is otherwise light — no CPI until Aug 12, no jobs until Aug 7.
Our book
We flipped 2→3 Risk-On on Jul 19 as inflation ticked back under the 4% gate (CPI 3.46%), which lands us 55% QQQ / 30% SPY / 15% GLD — max tech tilt, straight into the asset taking the beating. Closest to flipping on fast data is whales (specs at p85 vs the p90 crowded-long trigger); on level, homeprices sits barely above the line at +0.84% YoY. The market-relevant backstop is trend: SPY would need to close below its 40-wk MA (~697, -6% from 739) to knock us off 5/5.
Watchlist
Wed Jul 29 2pm ET — FOMC decision, only macro event before Aug prints
Thu Jul 30 — jobless claims (last was lowest since mid-May)
Fri Jul 31 — June new home sales, feeds housing advisory
Trend/QQQ-veto line: SPY 40wk MA ~697; QQQ still +6.4% over its own MA — watch if it rolls under while score stays 5/5
On the strategy
The machine leaned hardest into QQQ at the exact moment tech became the pain trade — that's the structural blind spot: it can't see earnings-driven capex fears, and Risk-On concentrates 55% in the Nasdaq regardless of whether tech is leading or bleeding. But look at what its signals actually track: curve +36bp, CPI easing under threshold, specs NOT crowded long (p85 — positioning is near-neutral, not frothy), trend +6%. So far this reads as a narrative-and-positioning shock in a few mega-caps, not a macro-regime break, and the model is right to stay long the fundamentals. The tell to watch is breadth of the unwind: if QQQ drops under its own 40-wk MA while the score holds 5/5, that advisory veto flag is the signal the machine is offside and the trend backstop is about to earn its keep. On track, but this is precisely the crash-type it lags — I'm watching, not overriding.
“It bought the dip in the one thing everyone's selling. Discipline or punchline — the 40-week MA settles the bet.” — Vic
Model goes max Risk-On the same week tech rolls and the Fed debates a hike
DESK NOTE
Vic's daily commentary. Context only — the model doesn't read it and neither must you.
S&P closed ~7,412 Friday, flat after a 1.2% drop Thursday; the Nasdaq lost 2.1% on the week — back-to-back weekly losses — on tech capex fears (Sandisk -11%, chip names heavy). Oil whipsawed: a Middle East supply scare spiked crude Thursday, then Brent fell ~4% below $96 Friday to ease the pressure. The July 29 FOMC is the event — pricing is ~64% hold vs ~36% for a 25bp HIKE under Chair Warsh, with zero cut odds, because May CPI ran 4.2% YoY on a 23.5% energy surge.
Our book
We flipped to 5/5 Risk-On on July 19 when the inflation card came back on (CPI 3.46 < 4%), putting us in the QQQ-55% book right into a tech-led pullback the signals can't see. Closest to flipping is inflation: 3.46% and rising (3.29 three months back), threshold 4% AND rising — the energy channel is the live threat, though the Cleveland Fed nowcast has July at 3.37, keeping the card safe near-term. Trend is 6% above its 40-wk MA (738.93 vs 696.97) and whales sit at the 85th pctile vs a p90 trigger — both intact but no longer slack.
Watchlist
Wed Jul 29 2pm ET — FOMC decision; debate is hold vs 25bp hike, not a cut
Fri Jul 31 — June new home sales; feeds the housing/home-price complex
Aug 12 CPI — first print to carry July energy pass-through; inflation card 4%+rising gate
On the strategy
By its own rules the machine is doing exactly what it should — five green lights, max tilt — and I won't second-guess the map. But this is textbook blind-spot terrain: it went to peak QQQ weight off a slow monthly CPI reading right as the Nasdaq is derating on capex and an energy-driven inflation scare could push the very card that just turned it green. The lag cuts both ways — the 40-wk MA won't register a tech drawdown until it's well underway, and the CPI gate reads June while oil is moving now. That's not a flaw to fix, it's the cost of a trend-follower, and it's why 5/5 is the most fragile score, not the safest. What would change my read: trend closing below 697, or the CPI nowcast turning up through the energy channel toward the 4% gate — then the model catches down to the tape it's been ignoring.
“Five green lights is when the machine is proudest and the road is darkest — mind the oil slick.” — Vic
Model buys the tech tilt the same week the tech tilt breaks.
DESK NOTE
Vic's daily commentary. Context only — the model doesn't read it and neither must you.
Thursday the Mag 7 shed ~$797B — worst day since the April 2025 tariff tantrum — after Alphabet lifted 2026 capex guidance to $205B and Tesla dropped 13%, both printing negative free cash flow; the AI-spend-vs-payoff debate is now the tape. Nasdaq fell 2.1% on the week and the S&P booked back-to-back weekly losses, closing ~7,412 Friday. Overlay: Iran conflict resurfacing, oil whippy (Brent -4% Friday, back below $96). This is an earnings/positioning wobble in the mega-caps, not yet a macro breakdown.
Our book
We flipped Neutral→Risk-On on 7/19 when the inflation card came back on (CPI 3.46%, under the 4% gate), so we're now QQQ 55 / SPY 30 / GLD 15 — max tech exposure into a tech-led selloff the model can't see, because it reads prior-week data and has no AI-capex feed. Closest to flipping is whales at the 85th percentile of S&P spec length vs the p90 crowded-long trigger, and inflation is on but rising (3.29→3.46, nowcast 3.37 for July). Trend still has a fat +6% cushion (SPY 738.93 vs 40-wk MA 696.97), so nothing flips on price this week barring a real leg down.
Whales: p85 now, p90 = card off → drops us to 4/5, Neutral
Trend trigger: SPY weekly close below 696.97 (−6% away)
Fri Jul 31 new home sales (June); Thu jobless claims — feeds our lagged housing/labor cards
Next hard prints: jobs Aug 7, CPI Aug 12
On the strategy
On track by construction, exposed by timing. The machine is doing exactly what it should — 5/5 means Risk-On, full stop — but it's leaning hardest into QQQ precisely when leadership is narrow and cracking, and it has no signal for 'the biggest names told you cash flow just went negative.' The flag I'd stare at is the tension between the score and the advisory board: real yield sits at the 99th percentile (2.43%) and front-end repricing at the 93rd, i.e. we're long duration-sensitive growth into the most restrictive policy setting in years with a live hike tail on Wednesday. None of that is a reason to override — it's a reason to know your book. What would change my read: SPY losing the 40-wk MA, or whales tripping p90; either takes us off max risk and I'd stop worrying about the concentration.
“We went all-in on the AI trade the week the AI trade discovered depreciation. The model can't blush — good thing, because I can.” — Vic
Machine goes max tech tilt the same week tech is what's cracking
DESK NOTE
Vic's daily commentary. Context only — the model doesn't read it and neither must you.
Thursday brought the S&P's worst day in a month, -1.2% to 7,408, on AI-capex fears off Alphabet's print and a chip-led selloff (Sandisk -11%); Friday clawed back to flat at 7,412, still -0.6% on the week. Overlaid on that: Brent briefly topped $100 for the first time since May after attacks on Saudi tankers in the Red Sea, then eased back under $100. Front and center next week is the July 28-29 FOMC — consensus is a hold at 3.50-3.75%, but prediction markets are pricing ~24% odds of a HIKE, which is not nothing.
Our book
We flipped Neutral→Risk-On on 2026-07-19 when the inflation card came back on (CPI YoY 3.46 vs the 4% off-trigger), so we're now QQQ 55 / SPY 30 / GLD 15 — peak tech exposure into a tape whose wobble is specifically AI-capex and chips. Closest to flipping is inflation itself: 3.46 and rising (3.29 three months back), nowcast 3.37 still on but this signal already whipsawed off-then-on inside a month, and a sustained oil spike feeds it with a lag. Whales are the second watch — specs at the 85th percentile, trigger p90, crowding into the long side.
Watchlist
Wed Jul 29, 2pm ET FOMC: hold ~75% priced, but a ~24% hike tail — hawkish surprise is the risk our rates signals lag
Fri Aug 1: July NFP + Trump trade-deadline — twin event risk the model can't pre-price
Brent >$100 / Red Sea tankers: oil pass-through to CPI while our inflation card is already rising toward the 4% gate
Whales at p85 vs p90 crowded-long trigger — one hot COT print from firing
On the strategy
This is exactly the setup where I trust the machine's rules but not its blind spots: it's long the maximum tech sleeve because trend (+6% over the 40-wk MA) and the score say so, right as the crack is AI capex and chips — a narrative with no data feed until it shows up in price. The signals aren't wrong yet; the QQQ own-trend advisory is still +6.4% clear, so the tape hasn't broken, and 5/5 has earned the benefit of the doubt. My concern is churn quality: inflation flipped off (Jun 21) and back on (Jul 19) in a month, and it's rising, not falling — a genuine oil-fed CPI leg would flip it a third time and we'd have paid two round-trips of tech beta for it. The advisory panel is also whispering caution the score can't hear — real yield at the 99th percentile and 2y repricing at the 93rd both scream restrictive into a possible hike. On track, but this is a lean-forward book at a lean-back moment; watch trend and the inflation gate, not the headlines.
“We're all-in on the Nasdaq the week the Nasdaq started coughing — the model can't read Alphabet's slide deck, so that's my job, and my job is to tell you it's coughing.” — Vic
Withheld-tax receipts as a daily labor nowcast
REJECTED
Done — failed the validation bar in the lab. Archived in the graveyard.
Vic Marlowe · US Treasury Daily Treasury Statement, 'Withheld Income and Employment Taxes' line — free via the Fiscal Data API (fiscaldata.treasury.gov/services/api/fiscal_service/v1/accounting/dts/...)
proposed · reviewed
Our labor read (temp-help) is monthly with a ~40-day lag; nothing in the stack sees employment income in real time. Federal withheld income & employment taxes move daily with payrolls × wages, so a de-seasonalized withholding trend nowcasts labor deterioration weeks before BLS confirms it — directly answering Clem's ask for a fast lead on the slow labor input. New information: real-time payroll-income momentum, distinct from the five signals and from the monthly temp-help card.
Lab verdict · Dr. Nadia Osei · 2026-07-25
Tested a de-seasonalized withholding nowcast (YoY of a trailing 3-/6-month receipt sum, trailing-only, T+1-lagged) two ways -- as a 6th score signal and as a slowdown overlay -- across 24 pre-declared cells (W in {92,183}d x threshold in {0,2,4}% x design {A,B}). Not one cell improves v3 net in either primary: 2007 best is 10.72% vs 10.85% (-0.13pp) with the rest down to -2.6pp; 2015 best is 12.74% vs 13.67% (-0.93pp) down to -4.96pp, and every cell also adds switches so net trails gross. The proposal fails rule 1 outright. It also cannot satisfy rule 2: DTS withholding starts 2005-10 (the clean 'Withheld Individual/FICA' line only 2023-02), so no independent pre-2007 OOW exists and the walk-forward substitute swings -7.02pp on COVID base effects. Forensics show the momentum genuinely flags 2008/2020 labor turns, but the specific clean series Vic cited spans 29 unbroken expansion months with zero recessions to certify, and the only proxy reaching the windows (aggregate FTD receipts) is contaminated by quarterly corporate estimated taxes.
2007best cell (6th-signal, 6mo sum, +4% thr) net 10.72% vs v3 10.85% = -0.13pp; all 12 cells <= baseline, overlay design to -2.61pp; Sharpe flat-to-up but CAGR never wins
2015best cell net 12.74% vs v3 13.67% = -0.93pp; every one of 12 cells negative, overlay to -4.96pp net, Sharpe -0.02 to -0.25
oownone exists -- DTS data starts 2005-10, clean withheld line 2023-02; walk-forward sub-period net deltas 2007-2026 = -1.65/+1.06/+0.26/-7.02/-0.01, unstable and base-effect-driven
→ Vic: “Your nowcast does see the payroll turn in real time -- 2008 and 2020 both printed red -- but the tape says selling that turn costs 0.1 to 5 points a year, and the clean series you named only exists for 29 months of unbroken expansion, so there's nothing yet to prove it leads anything.”
T10Y2Y 'shrinkage' is missing-value rows dropped by the API endpoint, not lost history
ENGINEERING · INFO
Pipeline postmortem — desk housekeeping, not an investment idea. Nothing needed from you.
Ray Kessler · 2026-07-25
Diagnosis
One warn, no pipeline errors. T10Y2Y.csv went 13083→12533 rows, but the file is intact and fresh: it starts 1976-06-01 (FRED's true series start, unchanged) and ends 2026-07-24, written 2026-07-25 01:04. I pulled the keyless fredgraph.csv endpoint myself: 13084 data rows, of which 551 have an empty/missing value and 12533 are numeric — 13084-551=12533, an exact match to what's on disk. fetch_fred.py's API path (fetch_api, line 71) drops rows where value=='.', while the keyless fallback keeps a row for every business day including holidays. So a prior cycle wrote the keyless form (13083, placeholders included) and this cycle a working FRED_API_KEY routed through fetch_api, which stripped the 551 placeholder rows. DGS2 already sits at 12532 in the snapshot for the same reason — the API form is the canonical one; the keyless-padded T10Y2Y was the outlier that just got corrected.
Root cause
Structural but benign: endpoint switch, not data loss. The fetch flipped from the keyless fredgraph.csv path (emits blank-value rows on holidays) to the official JSON API (filters value=='.'), removing 551 placeholder rows. watchdog.py's fred-shrinkage check counts raw rows and cannot distinguish placeholder removal from real truncation, so it fired on a file that is complete and one day fresh.
We flip to 5/5 Risk-On the same week the market starts pricing Fed hikes
DESK NOTE
Vic's daily commentary. Context only — the model doesn't read it and neither must you.
Tech is under the tape: Nasdaq -0.64% Friday, Alphabet dragging on a capex hike to $195-205B, memory names (Sandisk -11%, Intel -6.5%) hammered even on beats. The bigger story is macro — WTI near $90 on the US-Iran conflict has flipped the rates narrative hard: markets now price better-than-1-in-3 odds of a HIKE at the July 29 FOMC and ~78% for September, with the 10y at 4.69% and 2s at 4.33%. Oil-driven inflation fear, not growth fear, is running the show.
Our book
The score is 5/5 Risk-On — QQQ 55 / SPY 30 / GLD 15 — because inflation flipped back ON this week (CPI 3.46% vs the 4% gate), taking us Neutral→Risk-On. Closest to flipping is that same inflation card: it's below 4% but rising (3.29 three months ago), and the trigger is >4% AND rising. The Cleveland Fed nowcast reads 3.37% for July, so the model would still hold 5/5 — but that's the line to watch. Whales are the other near-miss, specs at p85 vs the p90 crowded-long trigger.
Watchlist
FOMC Wed Jul 29 — hold expected but hike optionality live; model can't see it
PCE Jul 31 + NFP Aug 1 — first read on whether oil is bleeding into inflation/labor
CPI Aug 12 — the print our inflation gate actually trades; >4% and rising drops us to Neutral
SPY 40wk MA at 696.97 (6% below) and curve trigger at -10bps (now +36bps)
On the strategy
The machine is doing exactly what it's built to do and I won't fight it — but be clear-eyed about the setup: it's putting on max tech risk into a hawkish Fed and a supply-side oil shock it has no feed for. Its inflation gate is a lagging monthly 4% level; if crude keeps pushing prints toward 4%, we don't learn it until Aug 12 and trade the next open — the model is structurally late to a fast oil-inflation impulse. The advisory tells are already lit: front-end repricing at p93 and real yield at p99, both flashing restrictive, even as copper/gold still says expansion. This is a 2022-family regime the signals have seen, but the SPEED of a geopolitical oil spike can outrun a monthly gate — that's the specific vulnerability this week. On track, not complacent: I'd want to see either the curve or trend confirm before I'd call the risk-on stance well-anchored.
“We're wearing our lightest jacket into a week the weatherman keeps whispering 'hike.'” — Vic
Done — you approved this as an advisory card. It's on the dashboard as context and never trades.
Clem + Claude deep research (rwa.xyz hunt) · DefiLlama stablecoins API (keyless, daily, 0-1d lag; chart from 2020 - earlier backfill broken at source)
proposed · reviewed
Total stablecoin supply is crypto's parked buying power - the only capital-flow read available keylessly. 13w growth, 7d-smoothed, 0% = trigger. Crossed negative 4 days after UST depegged (2022-05), stayed negative 78 weeks through FTX/SVB; crossed positive 2 months before the spot-ETF approval; crossed negative again 2026-06-19 - now -3.7% on $306.9B, the first sustained contraction since the 2022-23 bear.
Lab verdict · Claude research fleet · 14 agents, adversarially verified · 2026-07-25
Verified to the decimal from independent fetches. Regime read (0-line, sustained runs) and the froth tail (>+10-11% growth preceded the 2021-11 top: +22.6% then BTC -34.5% in 13w) are robust; the graded IC claim did NOT survive re-measurement (~-0.18, indistinguishable from zero) and is excluded from the card. Confirms regimes, does not call tops (supply peaked 5mo after the 2021 price top). Crypto portal is display-only - no model bar applies; 3 real regime flips + 2 whipsaws of history.
froth tail2021-11-07 +22.6% -> BTC -34.5% next 13w
→ Vic: “The first non-price layer for the crypto portal: capital flow, not price dressed up.”
Card preview · Ray Kessler · 2026-07-25
Stablecoin pulseADVISORY · PREVIEW
-3.7%13w growth · 7d-sma
69 / 100 · 50 = trigger
CONTRACTION6 wks negative · $306.9B parked · flow, not price
If it had gated crypto risk: negative growth kept you out through the 78-week 2022-23 bear and back in at the 2023-11 flip (~2 months before the spot-ETF approval), but two early-2026 whipsaws confirm it reads regime, not tops - and it never trades here.
Source: DefiLlama stablecoins API (keyless, daily, 0-1d lag); 13w growth of 7d-smoothed USD-pegged supply, recomputed every cycle.
Why it earns a slot: Every card on the live board is price or macro; this is the one keyless read on capital *flow* - whether money is entering or leaving crypto - which price alone can't show (BTC can rally on shrinking float). It cleanly separates the 3 real regime flips (2022-05 out, 2023-11 in, 2026-06 out) from the noise, and the current -3.7% on $306.9B is the first sustained contraction since the 2022-23 bear. Honest limits shown on the tile: it lags the price top by months and whipsawed twice in early 2026, which is exactly why it advises and never trades.
Total USD-pegged stablecoin supply is crypto's parked buying power. The line is its 13-week growth rate, smoothed over 7 days: above 0 = coins being minted, capital flowing in; below 0 = redemptions, capital leaving. It reads regime (risk-on vs risk-off flow) - it does not call tops (supply peaked ~5 months after the Nov-2021 price high).
This is a mock-up — nothing is on the dashboard yet. To ship it, tell Clem:
“add the Stablecoin pulse card”.
T-bill share of on-chain cash: yield-rotation gauge (crypto portal)
CARD LIVE
Done — you approved this as an advisory card. It's on the dashboard as context and never trades.
Clem + Claude deep research (rwa.xyz hunt) · rwa.xyz tRPC endpoint (unofficial, Referer-gated, obfuscated - decode recipe in the findings doc; ships with a staleness alarm) + DefiLlama denominator
proposed · reviewed
Tokenized Treasuries / (Treasuries + stablecoins): of every on-chain cash dollar, the share choosing 4%+ yield over zero-yield readiness. Self-normalizes the adoption ramp; the gauge reads the PACE of rotation (trailing-2y percentile of the 90d share change) because the share rose on 93% of all days. 0.08% Jan-2023 -> 5.02% today; drawdowns rotate ~2x faster than rallies.
Lab verdict · Claude research fleet · 14 agents, adversarially verified · 2026-07-25
Numbers reproduced independently: share 5.02% ($16.3B/$308.5B), 90d change +0.48pp = 65th pct of trailing 2y (mild), corr(90d dShare, BTC 90d ret) = -0.31 since 2024. Honesty rules baked in: gauge reads pace never direction; share also rises on stablecoin shrink (off-ramp) - read beside the Pulse; the whole class exists because T-bills yield >4%. Fragile numerator endpoint is the ranked risk.
now5.02% share, 90d +0.48pp (p65 of 2y)
2026 bear+2.06pp of share added
historyJan-2023 -> (class de-minimis before)
→ Vic: “Balance-sheet allocation - a kind of information neither portal has ever carried.”
Card preview · Ray Kessler · 2026-07-25
On-chain T-bill paceADVISORY · PREVIEW
+0.60pp90d Δ share
42 / 100 · 50 = trigger
FIRM+0.60pp · p76 of 2y · share 4.1%
Treating a p90 pace-spike as a risk-off cue would have de-risked late and into 2025's rebounds (90d change vs BTC 90d return corr ≈ −0.31) — real information, not a tradeable trigger, which is why it failed the lab and only advises.
DefiLlama (keyless), daily: tokenized-Treasury AUM ÷ (AUM + USD stablecoins). Curated Treasury set ≈ $13.2B vs rwa.xyz $16.3B (Referer-gated, not reproduced here); ships with a DefiLlama-staleness alarm.
Why it earns a slot: It is the one balance-sheet-allocation read on the board: where on-chain cash is choosing 4%+ yield over zero-yield readiness, a kind of information neither the five-signal score nor the crypto portal carries. The gauge reads pace, not direction, and that pace has historically quickened into crypto drawdowns — so it is an early context flag for risk-off, not a trade. Read it beside the BTC-cycle card, and remember the share can also rise when stablecoins shrink (an off-ramp), not only when Treasuries grow.
Of every on-chain cash dollar, the share sitting in tokenized Treasuries rather than zero-yield stablecoins — charted as its trailing 90-day change, so the line reads the PACE of rotation, not the level. It spikes when crypto de-risks into yield and sags when cash rushes back to stablecoin readiness; the score and the crypto portal carry no balance-sheet-allocation read like it.
This is a mock-up — nothing is on the dashboard yet. To ship it, tell Clem:
“add the On-chain T-bill pace card”.
Done — you approved this as an advisory card. It's on the dashboard as context and never trades.
Clem + Claude deep research (rwa.xyz hunt) · CoinGecko market-chart (XAUT, PAXG, keyless, rate-limited) or rwa.xyz commodities class; gold price from data/GC=F.csv already fetched
proposed · reviewed
Market cap / gold price = OUNCES held on-chain - a quantity, not a price, so it is decisively not BTC beta (ounces shrank 496k->365k through 2023-24 while BTC ran $16k->$100k). Rising ounces = fear-driven physical-gold demand inside crypto rails. Now 1,048k oz vs the 1,129k Apr-2026 peak, four straight month-end contractions.
Lab verdict · Claude research fleet · 14 agents, adversarially verified · 2026-07-25
Verified non-beta and original, but MEDIUM confidence stands: two issuers only, Tether mints in chunks (+38.3% in one month, Oct-2025) so the smoothing convention is load-bearing (rolling-daily -0.7% vs month-end -3.9% right now), and sources truncate real history to ~one cycle. Ranked third of three - first to cut if the portal feels crowded.
now1,048k oz vs 1,129k peak (Apr-2026); 3m -0.7% rolling / -3.9% month-end
non-beta proof2023-24: ounces -26% while BTC +525%
history~2021 -> (one full cycle)
→ Vic: “Overlaps GLD/copper-gold in spirit, but on-chain ounces are demand INSIDE crypto rails - different animal.”
Card preview · Ray Kessler · 2026-07-25
On-chain gold demandADVISORY · PREVIEW
+0.2%implied oz · 3m ROC
51 / 100 · 50 = trigger
FLAT1.05M oz on-chain · plateaued at cycle high
As a rule it whipsaws — the 2025 mint-driven ramp reads as a permanent 'fear-on', and it failed OOW in Nadia's lab; as context it simply says crypto-native gold demand has stopped growing but has not reversed.
Source: CoinGecko /market_chart (XAUT tether-gold, PAXG pax-gold; keyless, rate-limited) ÷ GC=F gold; daily, ~1-day lag. Two issuers only, history ~2021→. My 2-issuer read = +0.2% 3m, NOT the proposal's rwa.xyz -3.9%.
Why it earns a slot: The live dashboard holds gold as a static 10–25% GLD sleeve and has nothing that reads gold DEMAND — this card shows whether crypto-native capital is still rotating into gold (fear building) or has stopped. It is genuinely non-BTC-beta (ounces −26% while BTC +525% across 2023–24), so it carries information the trend/curve/price signals cannot. Right now it earns its keep by contradicting the pitch: demand did not contract −3.9%, it plateaued at a cycle high — a stall, not a reversal — and the honest weakness (two issuers, one-cycle history, mint-driven ramp) is visible right there in the chart.
Troy ounces of gold implied by the XAUT+PAXG market cap divided by spot gold — a quantity, not a price — shown as its trailing 3-month change. Rising ounces = capital fleeing into gold inside crypto rails (a fear tell); the line has stalled near zero after a 2025 adoption ramp carried holdings from ~520k to ~1.05M oz.
This is a mock-up — nothing is on the dashboard yet. To ship it, tell Clem:
“add the On-chain gold demand card”.
Machine goes 5/5 Risk-On into an oil shock it has no feed for.
DESK NOTE
Vic's daily commentary. Context only — the model doesn't read it and neither must you.
Houthis hit two Saudi tankers in the Red Sea Thursday, blockading Bab el-Mandeb — the backup route after Hormuz — and Brent briefly cleared $100 before fading to ~$96. Equities took their worst day in a month Thursday (Alphabet -7%, Tesla -14%, both posting negative Q2 free cash flow) on twin AI-capex and geopolitics worries, then bounced Friday as oil eased. The 2y jumped to ~4.30% and the 10y hit an 8-month high; futures repriced the July 29 FOMC from a lock-hold to a coin toss, with roughly 37% now pricing a 25bp HIKE.
Our book
We flipped to 5/5 Risk-On on July 19 when the inflation card came back on, and the book is 55% QQQ — max tech, exactly as the AI trade wobbles and an oil-inflation shock lands. Closest to flipping is home prices: Case-Shiller YoY is +0.84% and decelerating, so one soft print rolls it negative and drops us to 4/5 Neutral. Inflation is the narrative risk — 3.46% and rising, but 54bps under the 4%-and-rising gate, and the Cleveland nowcast (3.37% for July) still says cooling near-term; it takes an oil-driven print to close that gap.
Watchlist
FOMC Wed Jul 29 — hike now ~37% priced vs a hold a week ago; the model reads none of this directly
Brent $100 line — sustained hold there is what threatens the CPI card two prints out
Trend trigger: SPY 738 vs 40wk MA 696.96, ~5.9% cushion before Risk-On breaks
Aug 1 payrolls + ISM; next Case-Shiller for the +0.84% home-price card sitting on zero
On the strategy
This is the model's designed blind spot in full view: a geopolitical supply shock with no data feed, hitting while we're maximally tech-tilted. Crude, broad-USD and net-liquidity overlays all died in the lab, so there is no honest bolt-on for precisely this event — proposing another one this week would just be recency bias wearing a lab coat. The machine trades confirmed trend and lagged prints, not torpedoes; if the Brent spike stays transient — and it's already fading — the signals never need to move and we're fine. What earns a flag is the confluence: 55% QQQ into an AI-capex crack AND a live Fed hike AND front-end repricing already at p92, real yield at p98. On track by its own rules, but this is the kind of week where, if the note ages badly, it'll be because the one variable that mattered never had a column in the score.
“Oil doesn't come with a data feed. Neither did the torpedo.” — Vic
Machine goes 5/5 Risk-On the same week oil breaks $100 and the megacaps get taken to the woodshed
DESK NOTE
Vic's daily commentary. Context only — the model doesn't read it and neither must you.
Thursday was the S&P's worst day in a month, -1.2% to ~7,408, led by a 7% drop in Alphabet and 14% in Tesla on AI-capex jitters. The bigger story is energy: Houthi strikes on two Saudi tankers pushed Brent above $100 for the first time since May — crude is up more than 30% this month, from ~$72. Friday futures are trying to bounce (Dow +0.4%), but the setup is a geopolitical supply shock stacked on a tech de-risking. FOMC lands July 29; markets price ~74% hold and, notably, a 25% chance of a hike versus <1% for a cut.
Our book
We flipped Neutral→Risk-On on July 19 when the inflation card came back on (CPI 3.46% YoY, under the 4% gate), so we re-risked into a QQQ-heavy book (55%) right as the megacaps rolled and oil spiked — the model can't see either. The nearest flip is inflation itself: it's the signal that just switched on, it's rising (3.29→3.46), and it only needs to clear 4% and stay rising to knock us back to Neutral. Trend still carries a +5.9% cushion over the 40-wk MA and QQQ sits +7.6% over its own — buffers, not immunity.
Watchlist
FOMC Jul 29: hold priced, but 25% hike-probability and elevated real yield (p98) mean a hawkish surprise bites the QQQ tilt
Brent/$100 and the Red Sea: sustained energy shock is the vector that pushes lagged CPI toward the 4% gate
Aug 12 (July CPI print): first read that could carry oil pass-through; watch the Cleveland nowcast drift up before it
QQQ 40-wk MA buffer (+7.6%): AI-capex derisk is the thing that erodes it fastest
On the strategy
This is the model's classic blind spot on display, not a failure of it: a geopolitical energy shock and a single-week factor unwind are exactly the inputs a weekly 5-signal machine reading month-old CPI cannot price. The inflation card is backward-looking by construction — July CPI won't print until Aug 12, so if the oil move sticks we could be sitting Risk-On for weeks on data that's already stale. I'm not second-guessing the switch; every signal earned its slot and the whipsaw guards died in the lab for good reason. But respect the lag: the score says go, the tape and the tanker map say the risk isn't in any of our feeds yet. Watch inflation and the QQQ trend cushion, in that order.
“We bought the tech tilt the week the tankers caught fire — the model reads last month's inflation, the Houthis are writing next month's.” — Vic
Model went 5/5 Risk-On on an inflation whipsaw, buying a 55% QQQ book into tech's fifth ugly week
DESK NOTE
Vic's daily commentary. Context only — the model doesn't read it and neither must you.
S&P fell 1.21% Thursday (7/23) to ~7,408 — its worst day in a month — as Alphabet dropped 7% and Tesla 14% on earnings; Nasdaq shed 2.15% and growth is now down a fifth straight week on AI-capex sustainability fears, with a global semi selloff piling on. Oil jumped on Houthi tanker attacks in the Red Sea. Overriding it all: a hawkish Warsh Fed into the July 28-29 FOMC — a hold is near-certain and 2026 cuts are effectively off the table, even with headline CPI at 3.5% and June payrolls at just 57k.
Our book
We flipped Neutral→Risk-On on 7/19 when the inflation card came back on (CPI 3.46%, under the 4% gate), landing us in QQQ 55 / SPY 30 / GLD 15 — max tech tilt, exactly as megacap tech rolls over. Inflation is the swing card and it's noisy: off in June, on in July, and CPI is rising (3.29→3.46 over three months) — the July nowcast at 3.37% keeps it on for now, so no score/nowcast disagreement. Whales are nowhere near the p90 crowded-long trigger — specs are actually net short, which is contrarian support, not risk.
Watchlist
Wed 7/29 FOMC — hold priced; watch Warsh's tone on the tightening bias, real yields sit at a 3yr p98 and front-end repricing at p92
Aug 12 CPI — inflation is the only card that's flipped twice this year; a >4%-and-rising print pulls us back to Neutral
QQQ own-trend advisory: still +7.6% over its 40wk MA — the tell for whether the 55% tech weight is fighting its own tape
Aug 7 payrolls — after 57k in June; temp-help advisory already soft (-0.87)
On the strategy
On track by construction, but this is a week to be honest about what the machine can't see. It bought maximum tech tilt on a single CPI-card flip, straight into an AI-capex-driven growth drawdown and a Fed that won't cut — none of the five signals reads megacap earnings quality, concentration risk, or a hawkish dot plot. Price-trend is our only backstop there and it lags: SPY is still 5.9% over its 40wk MA, so trend won't defend us until damage is already done. The inflation whipsaw (off/on in consecutive months) is exactly the noise the whipsaw-guard proposal tried to tame — and that died in the lab for good reasons, so I wear it. If tech leadership genuinely breaks, the 55% QQQ is the whole story; QQQ's own-trend advisory is what I'm watching to know when the tilt is lying to us.
“The model bought the tech tilt the same week the market started asking whether the AI capex was ever coming back. It can't read an earnings call — that's still my job.” — Vic
Global Supply Chain Pressure Index as an inflation lead
REJECTED
Done — failed the validation bar in the lab. Archived in the graveyard.
Vic Marlowe · NY Fed Global Supply Chain Pressure Index (GSCPI), monthly, published free by the Federal Reserve Bank of New York (newyorkfed.org/research/policy/gscpi; also mirrored on YCharts/MacroMicro)
proposed · triaged · reviewed
The five signals see inflation only through the coincident CPI print; they carry zero information about supply-side pressure — delivery times, backlogs, freight — which leads goods inflation by a few months and is exactly the blind spot this week's Red Sea/Hormuz disruption exposes. GSCPI is quantity/logistics stress, not spot oil price, so it is orthogonal to the crude overlay that already died in the lab (that tested WTI momentum; this is not a price series). Worth testing as an advisory inflation-lead card or a rising-pressure confirmation on the CPI gate.
✓ triage: feasible
· Ray Kessler · 2026-07-24 · history from 1998-01-31 — Feasible — pass to the lab. Keyless, free, deep to 1998 (pre-2000), full history in one file with no truncation trap, and genuinely a logistics/quantity series, not a price overlay. Two build caveats for Clem, neither a blocker: it's a binary .xls needing a parser dep added to our slim image, and it's a single Akamai-fronted source with no FRED mirror, so harden the fetch (UA + retry + keep-cache-on-fail).
FRED series search for GSCPI via our FRED_API_KEY (api.stlouisfed.org/fred/series/search) — count:0, empty seriess[] — GSCPI is NOT on FRED. No official FRED series, so the keyless fredgraph fallback path does not apply; sole source is newyorkfed.org.
Reachability of NY Fed primary file (…/gscpi/downloads/gscpi_data.xlsx and .xls) — Both HTTP/2 200, keyless, 182,272 bytes, content-disposition gscpi_data.xls. Served behind Akamai bot manager (sets _abck/bm_sz); returned 200 on first hit with a Mozilla UA. Low volume (4 fetches/day) won't rate-limit, but it's a bot-managed edge — fetch needs a UA header + retry + keep-cache-on-fail like fetch_fred.py.
File format + parse deps in this pod — Legacy OLE2 .xls (magic d0cf11e0), NOT csv/xlsx. python:3.12-slim here has no pandas/openpyxl/xlrd. Parsed with a throwaway `pip install xlrd` in /tmp: sheet 'GSCPI Monthly Data', 347 rows × 2 cols. Build note: Clem must add a small parser dep (xlrd) — none of our current fetchers touch Excel.
History depth (earliest/latest observation) — First obs 1998-01-31 (= -1.092), last 2026-06-30 (= 1.249). Dates stored as text 'DD-Mon-YYYY' end-of-month, values as floats. ~28 yrs / ~340 monthly points — pre-2000, ample for out-of-window tests.
Cadence, lag, truncation traps — Monthly; as of 2026-07-24 the latest row is 2026-06 (July publishes early Aug), so ~1-month + few-days publication lag. Full 1998→present history sits in ONE file — no FRED-style trailing-window truncation. 6h refresh is redundant (monthly data) but harmless; no auth churn.
Lab verdict · Dr. Nadia Osei · 2026-07-24
Sourced GSCPI from the NY Fed (342 monthly obs 1998-2026, real path is .../interactives/... not .../policy/...; parsed the OLE2 .xls, 15d publication lag). Tested ex-ante as Design A (6th strict-map signal) and Design B (pressure-veto overlay capping at Defensive), thresholds {0.0, 0.5, 1.0}, gross and net@10bps. Every cell loses in BOTH primaries: best case net -1.06pp/Sharpe 0.97 in 2007 and -1.99pp/Sharpe 1.05 in 2015 vs baseline 10.86/1.01 and 13.69/1.13; the veto overlay bleeds up to -5.52pp. The OOW 2000-2007 is flat only because GSCPI never crossed +0.5 pre-2008 (presWk 0) — the signal is dormant in the one untouched window, so its non-harm there is absence of information, not skill. Mechanism is a coincident de-risk: pressure peaked at 4.35 as stocks bottomed in 2022 and stayed elevated through the recovery, braking the model into the rally — fails rule 1 outright.
2007A thr+1.00 (least-bad): net 9.80 vs 10.86 (-1.06pp), Sh 0.97 vs 1.01; all cells net -1.06 to -3.02pp
2015A thr+1.00 (least-bad): net 11.70 vs 13.69 (-1.99pp), Sh 1.05 vs 1.13; all cells net -1.99 to -5.52pp
oowOOW 2000-2007 native: +0.06pp net at thr>=0.5 but signal inert (presWk 0); 1998-2007 splice +0.16 to +0.44pp net at thr0 — all within noise, dormant flag
→ Vic: “The blind spot is real, Vic, but GSCPI hit 4.35 the same month equities bottomed and stayed pinned through the whole recovery — as a rule it de-risks you into the rally, and it was a corpse in the only window you didn't already know the answer to.”
5/5 Risk-On, max tech tilt — into an oil war and an AI-capex air pocket the model can't see
DESK NOTE
Vic's daily commentary. Context only — the model doesn't read it and neither must you.
Thursday was ugly: S&P −1.2% to ~7,408, Nasdaq −2.2%, dragged by Alphabet −7% (2026 capex guided up to $195–205B, spooking the AI-spend trade) and Tesla −14% on earnings. The bigger tape driver is exogenous: Middle East escalation has Brent past $100 for the first time since May, the Strait of Hormuz effectively closed and Houthi strikes on Saudi tankers in the Red Sea, with U.S.–Iran operations running 12 straight days. This is a supply-shock backdrop — none of it sits in a data feed our five signals read.
Our book
We flipped to 5/5 Risk-On last week (July 19) when the inflation card came back on, so we're carrying 55% QQQ into a tech-led selloff and an oil-driven inflation risk — worst-case timing for the tilt. Closest to flipping is inflation itself: CPI 3.46% and rising, nowcast 3.37% for July, but a $100 crude run passes into headline CPI with a lag the model won't register for months; the gate needs >4% AND rising. Trend is the backstop — SPY sits 5.9% over its 40-wk MA (~697), so a break would have to be violent and sustained to take the card off.
Watchlist
FOMC July 29 — decision into an oil shock; no data feed, watch for a hawkish inflation-risk lean
Brent/WTI — sustained >$100 is the inflation-passthrough trigger our CPI card lags
SPY 40-wk MA ~697 (currently 738): the trend card's off-switch
Aug 12 CPI (July print) — first read that could start absorbing energy passthrough
On the strategy
This is precisely the regime where the machine is blind, and it's worth saying plainly. The model is coincident-to-lagging on inflation and has no war/oil/shipping input, so it just went max-risk on the inflation card exactly as a supply shock and an AI-capex scare hit — the trade could be right if the shock fades, or a textbook whipsaw if it doesn't. I'm not overriding it: trend hasn't broken, the curve is healthy at +0.34, and the model has earned the benefit of the doubt on not front-running headlines. But the honest read is conditions now challenge its assumptions — an energy-led inflation impulse is the one crash type the CPI signal reacts to months late. Watch trend and crude, not narratives.
“The model can't read a war headline — but crude at a hundred writes its own CPI print, eventually.” — Vic
Model flips 5/5 Risk-On into a $100 oil shock its signals can't smell yet
DESK NOTE
Vic's daily commentary. Context only — the model doesn't read it and neither must you.
Brent broke $100 (+7%) on Houthi strikes against Saudi tankers and a 12th night of US strikes on Iran; the tape sold tech and bonds together — S&P −1.4%, Nasdaq −2.3%, Dow −611, with Alphabet −6.5% on AI capex and Tesla −14%. The 10-year ran to ~4.7%, highest since January 2025, as oil rekindled inflation fear. Fed funds futures now price ~82% odds of a September HIKE — the market is re-arming the hiking narrative, not the cutting one.
Our book
We went 5/5 Risk-On on the July 19 data — QQQ 55 / SPY 30 / GLD 15 — and trade it right into an oil-and-rates shock that postdates every input. Nearest to flipping by distance is the curve (10y−2y at 0.36, needs ≤−0.10; a hike-driven bear-flattener in the 2y is the live threat with Sept hike odds at 82%). But the fragile one is inflation: it just flipped back on this week, CPI is 3.46% and already rising, and $100 crude feeds it — though not until the Aug 12 print, lagged, after the move.
Watchlist
FOMC Jul 29 — statement/dots vs the 82% Sept-hike pricing
Brent $100+ and 10y ~4.7% — sustained or a June-style round-trip
CPI Jul print Aug 12 — first read on oil passthrough (nowcast still 3.37)
SPY 40-wk MA at 696.92 — 5.7% below spot; trend flip needs a real break
On the strategy
This is the exact regime that tests the machine: a supply-side geopolitical oil shock arriving in real time, while the five signals read prior-week and monthly data that won't register it for weeks. The two advisory cards already screaming — real yield at the 98th percentile, front-end repricing at the 91st — are lit precisely because they see the rate stress the score is blind to; that gap IS the story. I'm not touching the book: the model held Risk-On correctly through the June wobble, and oil shocks reverse violently (June 24 it round-tripped to pre-war on a peace headline). But say it plainly — we're maximally long tech into a shock the signals lag, and what would change my mind is a curve flip on hike repricing or a trend break through 697, not the headlines.
“The machine bought the dip a week before the world remembered oil comes from a war zone. It reads the past; the past looked great.” — Vic
^GSPC fetch refused: Yahoo dropped the in-progress week bar; guard held the good cache
ENGINEERING · INFO
Pipeline postmortem — desk housekeeping, not an investment idea. Nothing needed from you.
Ray Kessler · 2026-07-23
Diagnosis
fetch_prices.py raised on one ticker, ^GSPC. The cached data/_GSPC.csv is intact: 2952 weekly rows, 1969-12-28 -> 2026-07-19, written 00:36 this cycle. A live probe of the same Yahoo endpoint just now returned 2951 valid rows ending 2026-07-12 - one week short of the cache. That trips the newest-date-regresses branch of save() (line 78), not the >5% shrink branch (row counts differ by exactly one). The missing row is the current in-progress week (2026-07-19; today is 2026-07-23), which Yahoo's chart endpoint appends or omits depending on when you hit it. The overwrite guard did exactly its job - kept the fuller cache - and watchdog returned zero alerts, so every downstream stage consumed good data.
Root cause
Transient. Yahoo's /v8/finance/chart weekly series intermittently includes vs. drops the live in-progress week bar; the 00:36 fetch got it, the 06:41 fetch didn't, so the new set's newest date regressed by one week and the guard refused. No schema change (adjclose present, one trailing None as usual), no drift, no bug. Self-heals: next fetch that includes the current-week bar - or once the Jul 19-25 week completes and Yahoo returns a settled 2026-07-19 bar - writes normally.
Score back to 5/5 as inflation flickers on — but it's rising into an oil bid the model can't yet see
DESK NOTE
Vic's daily commentary. Context only — the model doesn't read it and neither must you.
S&P sits near highs (~7,499, SPY ~747) but momentum is fading — Monday's chip-led rally fizzled, Nasdaq slipped 0.57%, and rising oil is capping equities as earnings season floods in. Macro week is quiet: jobless claims Thursday, June new-home sales Friday, no CPI until Aug 12. The main event is next week's FOMC (Jul 28–29): ~80% priced for a hold at 3.50–3.75%, a non-trivial ~19% hike tail, and no dot plot — 'higher-for-longer' remains the consensus. Housing stays sluggish: June existing sales -2.4% m/m, pending -5.4%, 30y fixed stuck ~6.5%, prices at record highs but demand thin.
Our book
We flipped Neutral→Risk-On on 7/19 when the inflation card came back on; QQQ 55 / SPY 30 / GLD 15, and the daily nowcast (est CPI 3.37% for July) agrees we stay 5/5. Inflation is the swing signal by a mile: CPI 3.46% YoY and explicitly rising (3.29% three months back), trips off only above 4% AND rising. Home prices are the quieter fragility — Case-Shiller +0.84% YoY on April data, a thin cushion above the zero line, with Redfin nowcast still +2.21% for now.
Watchlist
FOMC Jul 28–29 (statement 7/29 2pm ET): hold priced ~80%, hike tail ~19%, no dots — event risk with no data feed until it lands
Oil bid: crude climbing now, but our CPI signal reads June and won't price it until Aug 12
Jun new-home sales Fri 7/24 + jobless claims Thu 7/23 — labor/housing texture ahead of the Fed
Inflation card: >4% YoY and rising = flips off → back to Neutral (currently 3.46%)
On the strategy
Environment broadly plays to the machine's strengths: trend +7.2% over the 40-wk, curve positive at +36bp, Cu/Au in expansion, whales only p77 — this is a real Risk-On tape, not a crowded-long trap. My reservation is the quality of the 5th vote. Inflation flipped off 6/21 and back on 7/19 — one signal churning month-to-month on lagged June data, and it's the single point of failure holding the tech tilt while oil bids and the Fed carries a live hike tail. The model is long-and-right on today's data but blind to two things without a feed: next week's FOMC and an energy-driven CPI it won't ingest until mid-August. On track, but this is a 5/5 leaning on its most fragile, most-lagged vote — I'd treat the Risk-On as earned, not durable.
“We're 5/5 because June said so. Oil and the Fed haven't filed their paperwork yet.” — Vic
Machine goes 5/5 Risk-On as an oil shock quietly reloads the one signal that lags it
DESK NOTE
Vic's daily commentary. Context only — the model doesn't read it and neither must you.
S&P closed 22 Jul near 7,499 (-0.14%), Nasdaq -0.57%, chopping ahead of Tesla and Alphabet earnings this week. The tape's real driver is energy: Brent up ~3% to the mid-$90s and WTI to ~$87 on renewed US-Iran/Strait of Hormuz tension, with crude now roughly +$20/bbl year-over-year after April's spike toward $120. Rates markets have flipped hawkish on the back of it — 10y near 4.6% and roughly 50-60% odds priced for a September Fed HIKE, not a cut, into the 28-29 Jul FOMC.
Our book
We're 5/5 Risk-On (QQQ 55 / SPY 30 / GLD 15), switched up from Neutral on 19 Jul when the inflation card turned back on at 3.46% CPI. That inflation signal is both the reason we're here and the closest to flipping out: it's rising (3.29→3.46 over three months) and needs >4% AND rising to go off — 0.54pp of headroom, and the July nowcast (3.37%) buys us no cushion while oil pass-through builds. Everything else has room: trend +7.2% over its 40-wk MA, curve +0.36pp, whales at the 77th pctile vs a p90 trigger.
Watchlist
FOMC 28-29 Jul — tone on an energy-driven inflation impulse; Sept hike odds
Case-Shiller May print 28 Jul — home signal thin at +0.84% YoY over a zero threshold
Brent/WTI + Strait of Hormuz headlines — the CPI card reads this with a 1-2mo lag
July CPI (mid-Aug) — first print to carry the oil pass-through into our inflation gate
On the strategy
The model is doing exactly what it's built to do, and that's the discomfort: it went max Risk-On on cooling headline CPI at the precise moment an energy shock is reloading the inflation it can't yet see. This is the 2008-summer failure mode in miniature — CPI benign-and-rising into a supply shock the price-trend and CPI signals lag. The saving grace is that the advisory panel isn't confirming panic: 10y breakevens are anchored at 2.28% and FALLING (2.38→2.28), and trimmed-mean CPI is calm at 2.63%, both saying the market reads oil as a level shock, not a regime change. So I'm not fighting the book — I'm watching whether breakevens de-anchor and whether the next CPI validates the nowcast. On track, but this is a geopolitical/supply crash type the signals weren't trained on; respect the lag.
“The model can't smell cordite in the Strait of Hormuz — it just reads last month's gas receipt and calls it calm.” — Vic
Model maxes to 5/5 Risk-On into an oil shock it can't smell yet
DESK NOTE
Vic's daily commentary. Context only — the model doesn't read it and neither must you.
S&P sits ~7,499 after a flat Wednesday; Nasdaq slipped 0.6% as Alphabet's $500B cloud backlog and ballooning AI capex spooked the payoff crowd, and Tesla missed. The tape's real driver is energy and geopolitics: renewed US-Iran strikes and a revoked sanctions waiver pushed Brent ~3.4% to $94 and WTI to ~$87, and 10y/30y Treasury yields hit two-month highs on oil-driven inflation fears. Notably, 10y breakevens are anchored and falling (2.38→2.28) — the bond market is pricing demand destruction, not an inflation spiral.
Our book
We flipped Neutral→Risk-On on 2026-07-19 when the inflation card came back on (June CPI 3.46%, under the 4% gate), so we're QQQ 55 / SPY 30 / GLD 15 at full risk. Closest to flipping: home prices, at just +0.84% Case-Shiller YoY and decelerating — one negative print drops us to Neutral; the inflation card is the other, at 3.46% and rising, needing >4% AND still rising to trip. The July CPI nowcast (3.37%) keeps both green, so the score is stable near-term.
Watchlist
FOMC July 29, 2pm ET — Warsh Fed, first decision into an oil-inflation backdrop
Oil: WTI ~$87 / Brent $94 — a sustained push past $100 is the threat to the CPI gate
Next CPI Aug 12 (July print) — inflation card 3.46% and rising, nowcast 3.37%
Home-price signal: Case-Shiller +0.84% YoY (Apr), Redfin nowcast +2.21% — nearest to the zero line
10y breakevens 2.28% — anchored/falling now; de-anchoring would confirm oil is persistent, not transitory
On the strategy
The machine reads the tape correctly — trend +7.2% over the 40wk, curve positive, whales not crowded — so being risk-on is defensible. But it went max-risk exactly as a supply-side energy shock builds, and that's a textbook blind spot: the CPI signal is June data, lagged and demand-agnostic, and only fires above 4%, so an oil-driven inflation impulse won't register until it's already in the rearview. The advisory panel is the tell here — real yield at the 98th percentile and front-end repricing at the 91st both flag a restrictive stance the score doesn't weigh, while copper/gold still says expansion. What keeps me from crying wolf: breakevens are falling, not de-anchoring — the market is treating oil as growth-negative, which historically hurts the tape through demand, not the CPI gate. On track, but watching energy and the long end, not the equity trend.
“The model bought the top tick of calm; the tape just needs oil to remember it's a tax.” — Vic
Model goes 5/5 Risk-On on the inflation card — right as an oil shock it can't see starts building
DESK NOTE
Vic's daily commentary. Context only — the model doesn't read it and neither must you.
S&P is roughly flat midday July 22 with chips carrying the tape (Super Micro +24%, Nvidia +1.2%), while Alphabet, Tesla and IBM report after the close. The overhang is energy and geopolitics: Brent is back above $92 on the 11th straight night of US strikes on Iran, reviving the inflation/hike narrative. Rates reflect it — 10y at 4.63%, 2y ~4.18%, curve still positive ~0.37pp. New Fed Chair Warsh keeps repeating 'prices are too high' ahead of the July 28-29 FOMC.
Our book
We're 5/5 Risk-On, QQQ-heavy (55/30/15 QQQ/SPY/GLD), having flipped up from Neutral on 2026-07-19 when the inflation card turned back on. That card is also the one closest to flipping off: CPI is 3.46% YoY, under the 4% gate but rising (3.29 three months ago), and the July nowcast at 3.37% keeps it on for now. To flip it needs headline >4% AND rising — an oil-fed reacceleration is the path, but CPI won't show June/July gasoline for weeks.
Watchlist
FOMC Jul 28-29 — Warsh presser; hold expected, but ~25% priced for a hike and a hawkish tone risk
Tonight (Jul 22): Alphabet/Tesla/IBM earnings — sets the QQQ tape we're 55% into
Brent holding $90+ — the input our inflation signal is structurally a month blind to
Whales COT at 77th pctile (trigger p90); mid-Aug July CPI print is the real test
On the strategy
By its own rules the machine is fine — trend (+7.3% over the 40wk), a positive curve, and uncrowded specs genuinely support Risk-On, and I'm not overriding any of it. But flag the wiring: the inflation card has now chattered off-then-on across June and July on the same 4% gate, and it just re-risked us into an energy-driven inflation impulse it cannot register for another print or two. This is the exact crash type it lags — a supply/geopolitical shock, not a demand cycle. The advisories are quietly consistent with 'late, not broken': real yield 98th-pctile restrictive, front-end repricing 89th, breakevens still anchored and falling. What would change my mind toward caution: Brent sustained above $90 into the mid-August CPI, or trend/curve cracking; absent that, ride it and watch the nowcast.
“The model can't smell burning oil — it reads the receipt six weeks later. We're long tech into an earnings night and a war premium; the machine calls that clarity.” — Vic
Score prints 5/5 Risk-On as inflation flips back on — clean signal, dirty backdrop.
DESK NOTE
Vic's daily commentary. Context only — the model doesn't read it and neither must you.
Tuesday closed green with tech leading (S&P +0.9%, Nasdaq +1.3%) on chip/AI strength and a strong earnings open — ~88% of the first ~66 S&P names beat. Wednesday futures softened into Alphabet and Tesla after the close, with rising oil and fresh tariff headlines the swing factor. The June CPI dip to 3.5% was energy-driven, and that energy tailwind is already reversing as Iran-related supply attacks resume — the disinflation was borrowed, not earned.
Our book
We're 5/5 Risk-On (QQQ 55 / SPY 30 / GLD 15) after inflation flipped back on 2026-07-19 — the same signal that flipped us OUT on June 21, so this month's churn is one card oscillating at its threshold. Inflation is the closest to flipping: 3.46% CPI, rising (3.29% three months ago), gate is >4% AND rising. Trend is firm (+7.3% over the 40-wk MA) and the curve is a comfortable +0.37, so nothing else is near a trigger; only an energy-led CPI reacceleration above 4% breaks the score.
Watchlist
FOMC Jul 28-29: ~83% priced for a hold at 3.50-3.75%, non-SEP meeting — tone only
July CPI (mid-August): Cleveland nowcast says 3.32% and cooling, but that predates the oil reversal
Oil / Iran supply flare-up: the inflation card reads this late, only after it hits CPI
Alphabet + Tesla earnings tonight — tech is 55% of our book
On the strategy
Environment mostly plays to the machine's strengths: trend and curve are unambiguous, breakevens are anchored (2.26%, falling) and trimmed-mean CPI is calm at 2.63% — so the broad-inflation cards say June's headline was narrow and oil-driven, not a re-acceleration. That's the reassuring read behind a fragile-looking Risk-On. The caution: the model is fully risk-on into the most restrictive real-rate backdrop it tracks (10y real yield p98, front-end repricing p89) — conditions it holds as advisory, not gates — and its one live inflation input is a backward-looking headline print that will see an energy reversal only after the fact. It's on track, but it's leaning into a signal that lags exactly the shock now brewing. Watch whether headline and trimmed-mean diverge; if breadth stays calm, the whipsaw was just noise around a threshold.
“Five-of-five feels great until you remember June's disinflation was a rental, and Tehran holds the lease.” — Vic
Five-for-five into a clean tape, and the Iran ceasefire is doing the inflation math
DESK NOTE
Vic's daily commentary. Context only — the model doesn't read it and neither must you.
Broad rally to break a three-day slide: S&P +0.9%, Nasdaq +1.3%, chips leading on renewed AI-trade bets. June CPI cooled to 3.5% YoY (vs 3.8% expected), core to 2.6%, the biggest one-month drop since April 2020 — energy -5.7% on the US-Iran ceasefire did most of the work. 10y sits ~4.60% after last week's dip; oil ticked back up today on peace-talk pessimism. FOMC 7/28-29 is ~89% priced for a hold at 3.50-3.75%, no dot plot.
Our book
Score is 5/5 Risk-On, flipped up 7/19 as the inflation card came back on — QQQ 55 / SPY 30 / GLD 15. The nowcast has July CPI easing to 3.32%, moving away from the 4% line, so inflation isn't the near-term risk despite whipsawing twice in a month. Closest to flipping is home prices: Case-Shiller +0.84% YoY is the thinnest cushion in the score, and it's off the moment it prints negative — though Redfin nowcast (+2.21%) and Zillow (steady) say that's not imminent.
Watchlist
FOMC 7/29 2pm ET — hold priced; watch tone and any QT language (real yield already p98 restrictive)
July CPI (mid-Aug) — nowcast 3.32%, energy-led; a ceasefire reversal re-firms the swing signal
Case-Shiller May print (~late July) — home-price card at +0.84% has the least room
Oil/US-Iran headlines — the disinflation that put us at 5/5 is partly geopolitical
On the strategy
On track — this is the regime the machine is built to be long. Trend +7.3% over its 40wk MA, curve +0.37, disinflation is broad not just energy (trimmed-mean 2.63%, median 2.71%, both well under the 4% gate), Cu/Au +21% over its MA says growth is fine, and whales are uncrowded at p77. Two things it can't vote on: the 5/5 leans on an energy-driven CPI drop from the ceasefire, and inflation is the signal that just whipsawed twice — if peace frays and oil re-firms, that's the swing vote. Second, real yield sits p98 restrictive while we run max risk; the model doesn't score policy tightness, and that's the gap I'd watch if the tape wobbles. Neither changes today's read — long is correct — but they're the reasons to keep a hand near the door.
“The ceasefire lowered the CPI. Ceasefires don't have a data feed — enjoy the tape, keep one eye on the crude.” — Vic
fetch_prices.py has the overwrite guard but not the per-symbol isolation the COT/FRED fetchers got
ENGINEERING · WARN
Weekly code review — desk housekeeping, not an investment idea. Nothing needed from you.
Ray Kessler · 2026-07-22
Findings
fetch_prices.py (__main__ loop, lines 116-122) — The fetch loop has no per-symbol try/except. fetch_weekly raises on a null chart.result (throttled/bad symbol), a missing adjclose block (price-only splice sources ^GSPC/^SP500TR/HG=F/GC=F/^NDX), or a transient socket error. Any single failure aborts the whole loop, so every ticker after it in dict order keeps its stale cache while earlier ones refresh — a mixed-as-of-date price panel. fetch_fred.py fixed exactly this with per-series isolation after the 2026-07-16 stale-tail incident; fetch_prices.py never got the same treatment. fix: Wrap fetch_weekly()+save() per symbol in try/except, append failures to the existing refused list and continue, so one bad ticker degrades to one stale symbol instead of a partial-refresh tail (still SystemExit at the end to fail loud).
Machine goes 5/5 into an oil war it can't see — Risk-On by the book, eyes open by hand
DESK NOTE
Vic's daily commentary. Context only — the model doesn't read it and neither must you.
S&P 500 closed 7,509 Tuesday (+0.89%), grinding higher as chips led and traders looked past the US-Israel-Iran war to a heavy earnings slate — Alphabet, Tesla, IBM this week. The war itself is the tape's swing factor: Brent slid below $71 on de-escalation talk, but there've been ~49 vessel attacks in the Strait of Hormuz and Bloomberg's rewiring-the-oil-market piece says the ceasefire is anything but sealed. Housing came in soft — June existing sales -2.4% to 4.09m, new-home sales -6.8%, yet median price a record $440,600 on tight inventory. Data week is light; the real events sit next week.
Our book
Score ticked to 5/5 Friday and the book went Neutral→Risk-On (QQQ 55/SPY 30/GLD 15) as the inflation card came back on at CPI 3.46% — under the 4% gate but rising (3.29% three months ago). That same inflation slot is the swing signal and the one closest to flipping: it flip-flopped the book three times in five weeks. Home prices is the quiet second risk — only +0.84% Case-Shiller YoY with the housing tape rolling; a print through zero pulls the score to 4/5 and back to Neutral.
Watchlist
Inflation card: CPI >4% AND rising flips it off; nowcast has July at 3.32%, still on but no cushion if oil re-spikes
Thu Jul 23: New Home Sales (June) — confirms the -6.8% housing softening the home-price signal lags
Fri Jul 24: S&P Global flash PMIs (July) — first read on post-war activity
Next week Jul 28-29 FOMC, then Q2 GDP and July jobs — the model trades none of it, but it sets the regime
On the strategy
On track, with a caveat I'd underline in red. The core environment is exactly what these five signals were built to catch: price 7.3% above its 40-week line, curve +37bps, inflation contained, no recession signature — re-risking here is correct. But the model just put on its most tech-heavy book right as a live shooting war sits over the Strait of Hormuz with no data feed, and while my advisory cards flash restrictive backdrop — real yield at the 98th percentile, front-end repricing at the 89th. The score sees none of that, and it can't: an oil-shock inflation spike is precisely the crash type the CPI signal lags by a month. This isn't a reason to override — it's a reason to know the inflation card is knife-edging and a Hormuz closure would hit the tape before it ever hits a CPI print.
“The machine bought the dip in a war zone. It's not wrong — it just can't read the newspaper.” — Vic
Inflation card flips back on — clean 5/5 Risk-On, just as the machine's blind spot lights up over the Gulf
DESK NOTE
Vic's daily commentary. Context only — the model doesn't read it and neither must you.
June CPI came in cool — headline 3.5%, core flat on the month and 2.6% YoY, both below consensus — and the tape ran with it: Nasdaq +1.3% Tuesday, chips reviving into a heavy Big Tech earnings week, 10y easing to ~4.52%. The offset nobody's model reads: the US is ten consecutive nights into strikes on Iran, with ceasefire chatter the only thing capping oil. So we have a cooling-inflation rally sitting on top of a live geopolitical oil risk.
Our book
We flipped Neutral→Risk-On on 7/19 (QQQ 55 / SPY 30 / GLD 15) when the inflation signal came back on, and it's a full 5/5. Closest to flipping is home prices: Case-Shiller YoY is +0.84%, a hair above the zero trigger — one negative print takes it off. Nowcasts don't corroborate an imminent roll (Redfin +2.2%, Zillow proxy +0.84% flat), so the score-vs-nowcast gap is nil this week; the fragility is real but not firing.
Watchlist
FOMC Jul 28-29, decision 7/29 — ~87% priced for a hold at 3.50-3.75%, non-SEP meeting
Big Tech earnings this week — the tape's driver, and nothing we score sees it
US-Iran strikes / WTI — no data feed; an oil spike hits our CPI signal with a ~6wk lag
Next Case-Shiller print — homeprices at +0.84% YoY, thinnest cushion of the five
On the strategy
Environment plays to the machine's strengths: trend +7.3% over its MA, curve +0.39, inflation cooling, positioning uncrowded — a clean uptrend is exactly what these five signals are built to ride, and 5/5 is the honest read. Two caveats keep me from cheerleading. First, the inflation card has now whipsawed Neutral↔Risk-On four times since last November — it's the swing vote and it's noisy around a single monthly print. Second, the signal scout's one live cell is homeprices+temphelp<weak: housing at +0.84% and temp-help rolling over (-0.87) means the real economy's leading edges are soft even as the tape rips — the setup for a top made on price while the plumbing quietly fades. What changes my mind: a negative Case-Shiller YoY, or an oil-driven CPI reacceleration that the June cool number is hiding.
“Buying the dip the model couldn't see and selling the news it'll read in six weeks — same as it ever was.” — Vic
Done — failed the validation bar in the lab. Archived in the graveyard.
Vic Marlowe · FRED DFII10 (10y real yield) and FRED DGS2 (2y) — both already live advisory cards, no new feed needed
proposed · triaged · reviewed
The standalone real-yield veto (cap Risk-On to Neutral when 10y real yield is restrictive) already died in the lab — its failure mode is persistence: real yields sit at p95+ for years and cap you out of good tape. The front-end repricing rule failed OOW alone because speed alone whipsaws. Wire them as an AND: cap the book one level defensive only when real yield is restrictive (DFII10 ≥ trailing-3y p95) AND 2y ROC is elevated (DGS2 126d ROC ≥ p90) in the same week — isolating the rare window where rates are both high AND accelerating, i.e. an acute policy tightening in progress. That conjunction is what neither card carries alone and what the rejected single-veto never tested; it addresses the exact persistence flaw that killed it.
✓ triage: feasible
· Ray Kessler · 2026-07-21 · history from 2003-01-02 — Feasible — pass to the lab. Data is reachable on a key we already hold, daily, cleanly updated, no truncation trap. One caveat Nadia must design around: DFII10 begins 2003-01-02, so the OOW test cannot reach pre-2000 tape; the effective validation window is 2003→present, which still contains 2018 and 2022-23 acute-tightening episodes — enough to test a rare AND-conjunction, but she should scope OOW claims to 2003+ and not pretend otherwise.
Reachability with our FRED_API_KEY via the exact endpoint fetch_fred.py already uses (api.stlouisfed.org/fred/series) — Both series resolve. DFII10 and DGS2 are already in our SERIES dict and refreshed every 6h — no new feed, no new auth.
History depth — DFII10 (10y real yield, the veto's restrictive-level leg) — observation_start = 2003-01-02. This is a hard floor: TIPS-derived real yields do not exist earlier, so no free or paid source pushes DFII10 before 2003. True pre-2000 OOW is impossible for this leg.
History depth — DGS2 (2y, the front-end-speed leg) — observation_start = 1976-06-01. Deep enough; DFII10 is the binding constraint for the AND.
Update cadence and publication lag — Both daily (freq=D). Latest obs 2026-07-17 (Fri), last_updated 2026-07-20 (Mon) — ~1 business-day lag, fine for a weekly model on 6h refresh.
Licensing truncation trap (the ICE BofA trailing-3y problem) — Not present. DFII10/DGS2 are Treasury/Fed source series with full history exposed, unlike our BAMLH0A0HYM2-class ICE series. No silent 3y window.
6h-refresh viability — No issue — we already pull both every cycle via the keyed JSON path; no rate-limit or auth-churn risk from adding a derived conjunction on top of series we hold.
Lab verdict · Dr. Nadia Osei · 2026-07-21
Tested Vic's AND-conjunction as declared: cap the book one level defensive only when DFII10 >= trailing-3y p95 AND DGS2 126d change >= trailing p90 (change>0), trailing-percentile only, +1bd lagged, evaluated at i-1 close / traded at i open, across a fully-reported real{95,90} x roc{126,63} x speed{90,85} grid plus a hard-cap variant. On the declared primary cell the conjunction fires 27/1748 weeks (1.5%) and moves gross +0.01pp (2007) and +0.03pp (2015) -- an order of magnitude inside the 0.3pp noise floor -- while adding switches (125->139, 79->93) that push NET to -0.04pp and -0.06pp in the two primaries; maxDD changes +0.1pp, so the defensive veto delivers no protection. OOW 2005-07 is +0.09/+0.08pp net, also sub-noise, and WF 2011/2019 both go net-negative. The AND does isolate acute tightening as designed (2018, 2022, today fire), but by rule 6 the verdict is decided on net, and net is flat-to-negative in every window that matters; fixing the persistence flaw made the rule rare enough to be harmless, not additive.
2007gross 11.87 vs 11.86 (+0.01pp), Sharpe 1.06 vs 1.05; NET 11.26 vs 11.30 (-0.04pp), +14 switches -- sub-noise, net-negative
2015gross 13.42 vs 13.39 (+0.03pp), Sharpe 1.08 vs 1.06; NET 12.69 vs 12.75 (-0.06pp), +14 switches -- sub-noise, net-negative
oow2005-07 native: gross 6.77 vs 6.68 (+0.09pp), NET 5.64 vs 5.56 (+0.08pp), Sharpe 0.72 vs 0.71 -- positive but well under the 0.3pp noise floor; WF2011/2019 net -0.10/-0.13pp
→ Vic: “The AND cured the persistence disease by making the patient too small to treat -- 27 weeks, +0.02pp gross, net-negative once you pay for the extra switches; real information, no edge.”
Machine flips to full Risk-On on a cooling CPI print, right into a mega-cap earnings and FOMC minefield it can't see.
DESK NOTE
Vic's daily commentary. Context only — the model doesn't read it and neither must you.
Tape is grinding up on Q2 earnings optimism (S&P blended EPS growth pegged ~22-23% YoY) with semis reviving ahead of the megacap slate — Alphabet Wed 7/22, Microsoft on FOMC day 7/29, Apple ~7/30. Offsetting it: ten straight nights of US strikes on Iran keeping oil bid, with ceasefire-mediation headlines the only thing capping crude. Fed is 7/28-29 and priced as a hold — the desk survey sees no cut before Q2 2027, so this is a language-and-dots meeting, not an action one.
Our book
We went 5/5 Risk-On on 7/19 — QQQ 55/SPY 30/GLD 15 — when the inflation card flipped back on at 3.46% CPI, under the 4% gate but rising (3.29 three months ago). That card is the swing vote and the fragile one: it's toggled three times in a year on this same signal, and the full score hangs on it staying green. Nothing else is close — trend sits +7.4% over its 40wk MA, curve +0.39, whales at the 77th pctile vs a p90 trigger. The Cleveland Fed nowcast has July CPI easing to 3.32%, so the estimate agrees with the published score — no gap this week.
Watchlist
Wed 7/22: Alphabet earnings — first Mag-7 read on ad/cloud/AI capex, tone-setter for our 55% QQQ sleeve
Tue-Wed 7/28-29: FOMC (hold expected) + Microsoft after the close, same day — event risk stacked
Inflation card: 4%-and-rising trigger; CPI at 3.46 and rising, nowcast 3.32 for July (prints Aug 12)
Oil/Iran: the model has no feed for a geopolitical crude spike — watch it as the exogenous tail
On the strategy
On track, and honestly — the environment is what this machine is built for: uptrend intact, curve positive, growth proxies expansionary (Cu/Au), inflation contained. My reservation is timing, not design: the score maxed out the day before a week that's all headline risk it structurally cannot price — two Mag-7 prints, an FOMC, and a live oil war — with the tech tilt at its heaviest. It's also worth naming that 5/5 is currently balanced on the single most whipsaw-prone card; if CPI re-accelerates the whole book unwinds in one move. Two advisory tells to respect quietly: real yield is p96-restrictive and front-end repricing p89-firm — both failed OOW as rules, but as color they say policy is still tight under a benign-looking headline. The soft-data underbelly (home prices +0.84 YoY, temp-help rolling over -0.87) is the scout's only live cell; not tradable, but it's where the next crack shows first.
“Full Risk-On the day before four earnings calls and a Fed meeting — the model doesn't get nervous, so I do it for it.” — Vic
Model goes 5/5 Risk-On into a Fed that's debating hikes, not cuts
DESK NOTE
Vic's daily commentary. Context only — the model doesn't read it and neither must you.
S&P +0.6%, Nasdaq +1% Tuesday as chips led and a pushed 10-day Iran ceasefire eased oil off Monday's spike; earnings season is the tape's focus. The real macro event is nine days out: Warsh's FOMC lands July 28-29 with funds at 3.50-3.75%, and the last dot plot showed the committee leaning toward at least one HIKE this year (median end-26 at 3.8%), CME still pricing ~37% odds of a July move. Warsh keeps saying prices are too high and won't bless anything above 2%. Housing stays subdued — 30y fixed ~6.5%, Case-Shiller +0.8% YoY, real home values down an 11th straight month.
Our book
Score flipped 2→3 last week on inflation coming back onside (CPI 3.46% YoY, under the 4% gate) — we're max Risk-On, QQQ 55/SPY 30/GLD 15. The nearest mover is the same inflation slot that's toggled our last two switches: it's rising (3.29→3.46) but the Cleveland Fed nowcast pegs July at 3.32, so no near-term flip and the gate needs >4% AND rising. Thinner margin sits under home prices (+0.84% YoY, 0.84pp from falling) — the slow one to respect.
Watchlist
Jul 28-29 FOMC (Warsh) — model can't see it; a hawkish hold or hike guidance is the event
Front-end repricing card at p89 (2y ROC 0.62 vs 0.64 p90) — a hawkish Fed tips it to 'elevated'
Real-yield card p96 restrictive (2.31%) — tightening cluster is flashing under a Risk-On score
Next CPI Aug 12 — inflation slot is rising and it's our serial flipper
On the strategy
On track by the letter, exposed by the spirit. The two primary engines — price trend (+7.4% over the 40wk) and a +39bp curve — are genuinely healthy, and the model is right to be long a tape that's making highs. My unease is the regime: we're maxing risk into a hawkish Warsh Fed openly weighing hikes while CPI rises and the advisory tightening cluster (real yield p96, repricing p89) lights up — that's the policy/duration-shock crash type this machine has never actually traded, as opposed to the earnings recessions its signals were built on. The inflation gate at a flat >4% may be too slow for a shock that arrives through the front end and real yields, not headline CPI. Watch whether the repricing and real-yield cards fire together after the 28th; that pair, not the score, is where the risk lives this month.
“The model bought the highs. Warsh is on deck asking who left the risk on.” — Vic
Full Risk-On, eight days before a Fed chair who says prices are too high
DESK NOTE
Vic's daily commentary. Context only — the model doesn't read it and neither must you.
S&P closed off 0.19% Monday as U.S.–Iran strikes ran a tenth straight night and oil rallied; Tuesday futures are up ~0.2% (Nasdaq +0.4%, chips leading) on reports of a push for a 10-day ceasefire. It's a heavy earnings week — Alphabet, Tesla and IBM report, the AI-capex tell. 10y eased to ~4.52% on cooler price data, but the tape is being run by an oil-and-geopolitics narrative the model has no feed for.
Our book
5/5, Risk-On, QQQ 55% — flipped up from Neutral on 7/19 when the inflation card came back under its 4% gate. Thinnest cushions are homeprices (Case-Shiller +0.84% YoY, just 0.84pp above the falling-YoY trigger) and inflation itself (3.46% and rising 3.29→3.46, only 0.54pp under the gate). Nowcast agrees — est CPI 3.32%, no divergence — so no hidden story in the slow prints this week.
Watchlist
FOMC Jul 28–29: Warsh, no forward guidance, ~20% priced for a HIKE — model can't see it and just went max-risk into it
Oil / Iran ceasefire: an energy spike is the mechanism that pushes CPI back >4% AND rising, flipping the exact signal that just gave us Risk-On
Inflation gate: 0.54pp of headroom, momentum pointed the wrong way; next CPI Aug 12
Homeprices: 0.84pp from turning off; Redfin nowcast +2.21% still positive, but scout has homeprices+temphelp<weak live now
On the strategy
Trend (+6.5% over the 40wk) and curve (+0.39) are comfortable — the machine's bread-and-butter regime, and I'm fine holding what it holds. My reservation is the seam it just crossed: this is the second inflation-driven flip in a month (Risk-On→Neutral 6/21, back 7/19), whipsaw around the 4% gate, and it re-risked into a supply-shock oil impulse rather than the demand-led hiking cycle its inflation rule was validated on. That's the crash type it lags — energy re-inflation, not a growth roll. I'm not overriding it; the level is genuinely benign and the rule is the rule. But this is the week to respect that the model is trading yesterday's CPI while oil and Warsh are writing next month's.
“The model went all-in on tech the same week the Fed chair and the oil market both cleared their throats. Nothing to do but watch — and keep the Bunker's coordinates handy.” — Vic
Breadth-confirmed CPI gate (headline AND trimmed-mean must both be benign to fire)
REJECTED
Done — failed the validation bar in the lab. Archived in the graveyard.
Vic Marlowe · Cleveland Fed 16% trimmed-mean and median CPI, already in our stack for the cpibreadth advisory card — FRED TRMMEANCPIM159SFRBCLE and MEDCPIM158SFRBCLE
proposed · triaged · reviewed
Today's re-risk hinges entirely on headline CPI slipping under the 4% gate — but headline can dip on a handful of volatile components while underlying inflation stays broad, which is exactly the false all-clear the gate can't distinguish. Wire the existing trimmed-mean card as a CONJUNCTION on the inflation signal: it fires ON only when BOTH headline is benign AND 16%-trimmed-mean YoY is below its own gate; either one hot keeps the signal OFF. This differs from the prior 'inflation breadth' test (which REPLACED the headline gate) and from the rejected temp-help conjunction (labor, book-level cap) — it's a breadth-confirmation AND-veto at the signal level, keeping headline primary.
✓ triage: feasible
· Ray Kessler · 2026-07-21 · history from 1983-12-01 — Feasible — this is a series we already fetch every cycle, back to 1983, monthly, ~2-week lag, on our existing FRED key. One flag for the lab, not a blocker: the proposal names MEDCPIM158SFRBCLE for the median, but the conjunction only needs the trimmed-mean (TRMMEANCPIM159SFRBCLE), which it names correctly and which is already in our stack as YoY (…159…). Pass it to Nadia.
Reachability with keys we already hold (FRED_API_KEY, official api.stlouisfed.org) — TRMMEANCPIM159SFRBCLE and MEDCPIM159SFRBCLE both return 200 JSON. Note: no /app/.env exists; key is in the env var (32 chars), which fetch_fred.py already falls back to via os.environ.get. Both series are already wired in fetch_fred.py lines 34-35.
History depth (earliest observation) via series metadata — Both trimmed-mean and median start 1983-12-01 — comfortably deep for pre-2000 out-of-window validation.
Update cadence and publication lag — Monthly (freq M). Latest obs 2026-06-01, last_updated 2026-07-14 — roughly a two-week lag after month-end, consistent with Cleveland Fed's CPI-day release.
Licensing truncation / 6h-cadence traps — No trailing-window truncation — that trap is the ICE BofA/BAML series, not Cleveland Fed. A monthly series refreshed once/month sits trivially under 6h polling; no rate-limit or auth-churn risk on a key we already hold.
Lab verdict · Dr. Nadia Osei · 2026-07-21
Ex-ante design: AND-veto on the inflation slot, infl_ok = headline_cpi_ok AND trimmed_ok, with trimmed_ok tested as a pure LEVEL gate (literal reading) and a live-mirroring level-OR-falling gate, over a declared T-grid {2.5,3.0,3.5,4.0} on trimmed-mean and median YoY, all cells reported, 2000-2006 OOW arbitrating. In both primary windows every cell where the veto actually bites loses: literal trimmed LEVEL runs -0.33 to -2.96pp gross in 2007 and -0.58 to -2.96pp in 2015 (net tracks within a bp of gross), and the only cells that match baseline are the ones where the trimmed gate never fires. The veto helps solely in the 2000-2006 OOW (+1.6 to +4.0pp on the aggressive low-T cells) — but those are exactly the cells that cost the most in both primaries, so the OOW gain and the primary requirement are mutually exclusive. Fails bar rule 1 (no cell improves both primaries) decisively; the OOW behavior is real de-risking information but directionally wrong, already carried by the existing cpibreadth advisory. Rejected.
2007trimmed LEVEL T3.5: gross 11.25% vs 11.80% (-0.55), net 10.72% vs 11.24% (-0.52), Sharpe 1.01 vs 1.05; T4.0 barely bites (-0.33)
2015trimmed LEVEL T3.5: gross 12.34% vs 13.29% (-0.95), net 11.74% vs 12.64% (-0.90), Sharpe 0.99 vs 1.05
oow2000-2006 (spliced): +0.00 at T3.5 (veto never bites); OOW only gains at low T (T2.5 +1.62 gross), the same cell that costs -1.91/-2.96 in the primaries
→ Vic: “Your breadth instinct is sound, Vic — it just pays in the 2000-2006 bear and bills you 0.5-3pp through every bull since, which is the opposite of the trade you wanted.”
Machine goes 5/5 into an oil shock and a Fed that might hike — the swing signal is a backward-looking CPI print
DESK NOTE
Vic's daily commentary. Context only — the model doesn't read it and neither must you.
S&P 500 sits ~7,443, a hair off highs, after slipping Monday as US-Iran exchanges pushed oil to a 6-month high (Brent >$90, WTI ~$84) with Strait of Hormuz disruption in play; a July 21 bounce came on peace-talk headlines and a chip rebound. It's megacap earnings week — ~15% of the index reports including Tesla, IBM and GM — the tape's swing factor. New Fed Chair Warsh is overtly hawkish ('no tolerance for persistently elevated inflation'), with markets pricing ~36% odds of a July 29 hike and ~65% by September; 10y ~4.55%, 2y ~4.13%.
Our book
We flipped to full Risk-On on 2026-07-19 (QQQ 55 / SPY 30 / GLD 15) purely because the inflation gate switched back on — that's the signal to watch, and it's the fragile one. It reads June CPI at 3.46% vs the 4% gate, but the extra flags it as RISING (3.29% three months ago), so it's the closest to flipping off; a re-break above 4% and still rising takes us back to Neutral. Every other signal has room: trend +6.5% over its 40wk MA, curve +0.39pp, whales at the 77th pctile vs a p90 trigger.
Watchlist
Jul 29 FOMC (Warsh): ~36% hike-priced; a hike into a positively-sloped curve is a regime our curve signal won't flag
Aug 12 CPI: first print to absorb the July oil spike — the inflation gate's re-flip risk (>4% and rising)
Oil / Hormuz: Brent >$90 is an inflation impulse the CPI gate reads ~2 months late
Megacap earnings this week (TSLA/IBM/GM): trend/QQQ risk that has no data feed
On the strategy
Mechanically the model is fine — it caught the June CPI dip and re-risked on the rules, as designed. My concern is timing, not obedience: we went maximally long the day an oil-driven inflation impulse and a hawkish Fed that may HIKE are both building, and the signal that put us here is a monthly, backward-looking headline gate that won't see the July oil pass-through until August 12. Watch for a headline-only dip: if a few volatile components dragged June under 4% while underlying pressure stayed broad, this re-risk is on thin ice and we whipsaw back to Neutral in weeks — the inflation card has already toggled off-then-on inside a month. This is the CPI gate's known blind spot, not a flaw to override. The book is long into a two-sided event it can't price; respect the signal, but don't mistake 5/5 for all-clear.
“The gate says the coast is clear; the tanker on fire in Hormuz hasn't filed its BLS paperwork yet.” — Vic
validate.py PARITY false-fail: stale state.json vs fresh engine on a legit score flip (June CPI, inflation on, 4→5)
ENGINEERING · WARN
Pipeline postmortem — desk housekeeping, not an investment idea. One thing needs your attention below.
Ray Kessler · 2026-07-20
Diagnosis
Only one problem, and it is a false alarm. The June 2026 CPI print arrived (CPIAUCSL 2026-06-01=332.568), dropping headline YoY from 4.17% in May to 3.46% in June, back under the 4% gate. That flips the inflation signal ON: engine score this cycle = 5, book Neutral→Risk-On, switch dated 2026-07-19. validate.py (pipeline step 7) reads site/state.json, but that file is written by signals.py (step 9), so at validate time it still holds last cycle's score of 4. The parity assertion compares last-cycle live (4) against this-cycle engine (5) and fails. signals.py then rewrote state.json to 5; on disk now live==engine==5, and the empty watchdog confirms the data itself is clean. No bad fetch, no schema change, no drift — the score genuinely and correctly moved.
Root cause
Structural bug in the guard, not the data. The parity check compares two different epochs — the previous cycle's live state.json against the current cycle's engine score — because validate.py runs before signals.py refreshes state.json. It assumes the live score was computed from the same completed-week/print vintage as the engine. Any cycle where the score legitimately changes (new completed week, or a monthly print like this CPI landing mid-week) will false-fail exactly once, then self-heal next cycle. The code comment already half-knows this ('scores use completed weeks, so they must agree') but only guards the cold-volume case, not the warm-volume score-change case.
✓ Resolved: the parity assertion moved into signals.py, comparing this cycle's live score against this cycle's engine (same data vintage) - no more one-cycle false fails on legitimate score flips (shipped 2026-07-21).
Original ask: Fix the parity assertion in validate.py so it compares like-for-like. Preferred: make it basis-aware — look up the engine's score for the date matching state.json's as_of_week (metrics carry score_dates/score_recent) and only fail if they disagree for the SAME week; if live.as_of_week is older than the engine's latest score date, skip (new week, expected to differ). Alternatively move the parity check to after signals.py, or drop the single-scalar compare entirely. Reason: as written it fails the whole pipeline (exit 1) and flips /ready to 503 every time the model does its job and changes score — that's recurring false-positive noise that will bury a real parity break when one actually happens. Do NOT touch the data; the CPI print and the 4→5 flip are correct.
Machine goes 5/5 Risk-On into an oil-fired geopolitical week it can't see
DESK NOTE
Vic's daily commentary. Context only — the model doesn't read it and neither must you.
S&P closed ~7,443 Monday, down 0.19%, with the Dow off 0.59% as fresh US-Iran military exchanges pushed crude higher and dragged Apple down ~2%; a midday diplomatic headline capped the damage. No tier-one prints this week — the calendar is Big Tech earnings (Intel Thursday), the new Fed Chair Warsh's first Congressional testimony, and July consumer sentiment Friday, with FOMC not until July 29. June existing-home sales fell 2.4% to 4.09m even as the median hit a record $440,600 and inventory kept building — housing is cooling at the margin, not the price line yet.
Our book
Score flipped 2→3 on July 19 as the inflation card came back on (CPI 3.46% YoY, under the 4% gate), putting us at 5/5 Risk-On: QQQ 55 / SPY 30 / GLD 15. The swing signal is also the fragile one — inflation is rising (3.29→3.46 over three months) and sits only 0.54pp under the >4%-and-rising trigger, though the Cleveland Fed nowcast sees July at 3.32, i.e. cooling. Home prices are the thinnest cushion at +0.84% YoY into a softening housing tape; whales at the 77th percentile are the next structural worry toward the p90 crowded-long trigger.
Watchlist
Inflation card: rising but nowcast 3.32 for July — oil spike is the wildcard, next CPI Aug 12
FOMC July 29 + Warsh testimony this week — no data trigger, pure narrative risk
Home prices +0.84% YoY: existing sales -2.4%, thinnest margin to the zero-line trigger
Whales at p77 vs p90 crowded-long trigger; Intel earnings Thu Jul 23
On the strategy
On track, but eyes open. The model did its job — five signals green, so it takes max risk, and I don't override that. My honest flag: inflation has now toggled this book twice in a month (off June 21, on July 19), and it's the twitchiest input driving the biggest position, exactly the whipsaw the lab already told us we can't cheaply guard against. The bigger blind spot is Iran — the strategy has no feed for geopolitical shock or a crude spike that could re-lift CPI through the 4% gate with a lag, and the oil overlay already died in the graveyard. What would change my mind: the July CPI nowcast turning back up through 3.46, or the trend card losing its 6.5% cushion above the 40-week line on a geopolitical air-pocket.
“Five for five, and the model's staring at a chart while the Strait of Hormuz stares back.” — Vic
Done — failed the validation bar in the lab. Archived in the graveyard.
Vic Marlowe · FRED TEMPHELPS (temp-help payrolls, already fetched for the advisory card) crossed with the existing CPI signal — no new feed, a new conjunction rule. Differs from the failed single-card temphelp promotion (no inflation interaction term) and the rejected inflation-aware bunker (that swapped assets inside Bunker; this is a level-cap gated on labor across all four books).
proposed · triaged · reviewed
The scout shows inflation+temphelp<off live now at -46.8% ann. forward-13w (n=30), and inflation+temphelp<weak at -33% (n=57) — the worst clusters in the scan sit where a red CPI coincides with temp-help rolling over. Wire it as a compound book-cap: when the CPI card is OFF and temp-help 3mma is below a year ago, cap the book one level more defensive than the score dictates. That carries information the five live signals don't — it separates benign high-inflation (labor still firm, ride it) from stagflationary rollover (labor cracking under sticky prices), the distinction our single CPI gate is blind to.
✓ triage: feasible
· Ray Kessler · 2026-07-20 · history from 1990-01-01 — Feasible — same FRED series we already pull for the advisory card, no new feed, key we hold. History back to 1990-01-01 is deeper than we need, monthly cadence with a clean ~1-month lag. This is a rule change, not a data problem; the only real question is whether the conjunction holds up out-of-window, and that's Nadia's cycle to spend. Pass it to the lab.
Endpoint reachability from this pod (FRED API, key we already hold, same pattern as /app/fetch_fred.py) — 200 on api.stlouisfed.org/fred/series and /observations for TEMPHELPS; no new feed, no new auth. 3 requests used.
History depth (earliest observation) — observation_start 1990-01-01, first value 1160.2. 438 monthly obs. Well before the 2000 cutoff, so pre-window validation and the year-ago/3mma derivations both have full runway.
Update cadence and publication lag — Monthly, SA (BLS CES code CES6056132001). Latest obs 2026-06-01, last_updated 2026-07-02 — ~1-month lag, tracks the monthly Employment Situation release. New print roughly first business week of each month.
Licensing truncation trap — None. Full 1990-present exposed — not an ICE BofA-style trailing-3y restricted series. Nothing gets silently clipped.
6h-refresh cadence viability — No problem. Monthly series means the 6h job re-fetches an unchanged file ~99% of the time; API key path has ample headroom, no rate-limit or auth-churn risk at this volume.
Lab verdict · Dr. Nadia Osei · 2026-07-20
Ex-ante design: keep v3 scoring/mapping unchanged, then cap the book one level more defensive whenever the CPI card is OFF and temp-help 3mma sits below its year-ago value (trailing MA, 45-day publication lag, Friday known-through boundary, tested gross and net at 10bps on common-start curves). The gate fires 34 weeks across all of history — 2 in 2007, 28 in 2008, 4 live in 2026 — and never once in the 2000–2006 out-of-window period. Consequently the 2007 primary shows +0.71pp gross / +0.69pp net (Sharpe 1.05→1.12, maxDD unchanged), but that is one 2008 episode; the 2015 primary is +0.06pp (below the ~0.3pp noise floor), and the OOW delta is exactly +0.00pp because the rule is inert through the dot-com bust and 2001 recession. A rule that only acts in a single recession and produces zero out-of-window evidence cannot clear the bar — it fails BOTH the second primary (noise) and the OOW arbiter (no events to validate on). This is the n=1 stagflation-overlay pattern already in the graveyard, not a validated conjunction.
2007candidate gross 12.54% / net 11.97% / Sharpe 1.12 vs baseline gross 11.83% / net 11.28% / Sharpe 1.05 (+0.71pp gross, maxDD -21.9% both) — entirely from 28 gate-weeks in 2008
2015candidate gross 13.41% / net 12.77% / Sharpe 1.06 vs baseline 13.35% / 12.71% / 1.06 (+0.06pp, noise; only the 4 live 2026 firings touch this window)
oow2000-2006 (spliced proxy): candidate 2.78% gross / 2.09% net / Sharpe 0.29 vs baseline identical — +0.00pp, zero gate events fired
→ Vic: “Good nose for 2008, Vic, but a gate that only opens once in thirty-six years is a photograph of the last crisis, not a rule for the next one.”
Real-yield veto on the Risk-On tech tilt (cap to Neutral)
REJECTED
Done — failed the validation bar in the lab. Archived in the graveyard.
Vic Marlowe · FRED DFII10 (10y TIPS real yield) — already fetched for the realyield advisory card; veto logic is internal to the book selector.
proposed · reviewed
When the score reads 5/5 Risk-On but the 10y real yield sits at/above its trailing-3y p95, hold Neutral instead of Risk-On — a veto on the specific book, not a general cap. The Risk-On sleeve is ~70% equity and 55% QQQ, the most duration-sensitive tilt we run, so a restrictive real-rate regime is exactly where that tilt is most exposed; none of the five live signals see the discount rate. This differs from the prior real-yield tests (6th strict-mapped signal, and a Defensive-cap overlay) and from the QQQ-own-trend veto: it fires only on the Risk-On book, uses the actual driver (real yield) rather than QQQ price, and downgrades one notch rather than capping to Defensive.
Lab verdict · Dr. Nadia Osei · 2026-07-20
Tested Vic's declared design ex-ante: on the canonical common-start rich engine (gross + net@10bps), when the 5-signal score reads 5/5 Risk-On AND DFII10 sits at/above its trailing-3y (756-bday) p95 — lagged 1 bday, trailing-only percentile, no lookahead — downgrade that one book from Risk-On to Neutral. It fires on just 30 of 495 Risk-On weeks. Both primaries improve with the correct sign but within noise: 2007 net +0.12pp (11.40 vs 11.28, Sharpe 1.05→1.07), 2015 net +0.19pp (12.90 vs 12.71, Sharpe 1.06→1.08) — both under the ~0.3pp floor (rule 3). The native OOW (2005-2007, the only slice DFII10+GLD support) is strongly positive (+2.75pp net, Sharpe 0.71→1.05, maxDD −12.0→−6.0) but is a thin ~2yr window and cannot elevate a rule that is noise where adoption is decided; the 2000-2002 tech bear the thesis targets is unreachable pre-2003. Right idea, clean sign, no harm to maxDD — but sub-noise in both primaries, so not adoptable, and the real-yield restrictiveness read already lives on the existing advisory card.
2007gross 11.94 vs 11.83 (+0.11pp), net 11.40 vs 11.28 (+0.12pp), Sharpe 1.07 vs 1.05, maxDD -21.9 flat
2015gross 13.53 vs 13.35 (+0.18pp), net 12.90 vs 12.71 (+0.19pp), Sharpe 1.08 vs 1.06, maxDD -21.9 flat
oowOOW 2005-01→2007-01 native (DFII10 has no pre-2003 data): net 8.31 vs 5.56 (+2.75pp), Sharpe 1.05 vs 0.71, maxDD -6.0 vs -12.0 — thin 2yr, cannot arbitrate for a sub-noise primary result
→ Vic: “The real driver beats the QQQ-price proxy and never bites the hand, but 30 vetoes in 33 years buys you +0.12/+0.19pp — a correctly-signed whisper, not a signal, and the desk already hears it on the advisory card.”
24 'price-immutability' criticals are a watchdog false alarm — the 42-day frozen window slid forward one weekly bar; data on disk is correct
ENGINEERING · WARN
Pipeline postmortem — desk housekeeping, not an investment idea. One thing needs your attention below.
Ray Kessler · 2026-07-20
Diagnosis
All 24 price CSVs alerted with an identical +1 frozen-row delta (e.g. SPY 1741→1742, BTC-USD 612→613, _GSPC 2945→2946). The watchdog's immutable set is 'bars older than today−42d' — a rolling boundary. This cycle it sat at 2026-06-08, so the 2026-06-07 weekly bar aged into the frozen set for every series simultaneously. The check sha256's the whole frozen list, so appending one legitimate aged bar changes every hash even though no historical value was rewritten. RSP.csv is the proof: its file was not rewritten this cycle (mtime Jul 15), yet its frozen count still rose 1206→1207 — impossible if a fetcher splice/timezone/split had touched it. Pipeline errors were empty and the on-disk bars around the boundary (2026-05-31, 2026-06-07, 2026-06-14) are normal, monotonic, and unchanged. This is the same false-positive family already documented for the runtime-growth check.
Root cause
Structural — but in watchdog.py, not in the price data or fetcher. Hashing a set defined by a rolling boundary (today−42d) means the frozen set gains one weekly bar roughly every 7 days, so the hash legitimately changes and fires 'critical' on every series about once a week regardless of data integrity. The immutability comparison should be scoped to the intersection of dates present in both snapshots (alert only when an already-frozen date's close changes), or the boundary should be pinned to a fixed date rather than today−42d.
✓ Resolved: watchdog now compares the PREFIX of frozen bars covered by the previous snapshot, so bars aging into the rolling 42-day window pass and only genuine rewrites alert (shipped 2026-07-21).
Original ask: Fix watchdog.py section 1 (I do not edit code): compare only dates common to the prior snapshot — alert when an already-frozen (date,close) pair *changes or disappears*, not when the frozen set merely grows by newly-aged bars. Until then this critical fires ~weekly on all 24 series, which is dangerous: alert fatigue on the one check meant to catch a real splice/UTC incident. No price-data action needed — the CSVs are correct. Separately, minor and non-blocking: RSP.csv is a week stale (newest bar 2026-07-12, not refetched since Jul 15) and carries a duplicate 2026-07-12 row; worth checking why its fetch/save isn't landing, but it is not the cause of these alerts.
QQQ-own-trend veto on the Risk-On tech tilt
CARD LIVE
Done — you approved this as an advisory card. It's on the dashboard as context and never trades.
Vic Marlowe · Yahoo Finance QQQ weekly closes → 40-week MA; identical mechanics and stack to the existing SPY trend signal, no new feed.
proposed · triaged · reviewed
The trend signal earns its keep on SPY, but the Risk-On book overweights QQQ to 55% — and in tech-led drawdowns (2000, 2022) the Nasdaq breaks its own 40-wk MA well before SPY breaks its. Rule: when the score says 5/5 Risk-On but QQQ is below its 40-wk MA, hold Neutral instead of rotating to the tech-heavy book. This carries information the five signals don't — whether the specific instrument we're about to concentrate into is itself in a downtrend — and differs from the rejected Cu/Au re-entry gate (macro confirm, not price) and the whipsaw guards (time persistence, not a second-asset trend).
✓ triage: feasible
· Ray Kessler · 2026-07-17 · history from 1999-03-07 — Feasible with no new plumbing — QQQ weekly is the identical Yahoo endpoint and stack we already run for SPY, and we're already caching it. History starts 1999-03-07, which covers the 2000 and 2022 tech drawdowns; if Nadia wants a pre-2000 out-of-window test she should splice ^NDX (to 1985), which is also already in the fetcher. Pass to the lab.
Reachability from this pod — GET query1.finance.yahoo.com/v8/finance/chart/QQQ?interval=1wk (same endpoint fetch_prices.py already hits) — HTTP 200, 154 KB, keyless with UA header. No new feed, no new auth.
History depth via the exact parse mechanics of fetch_weekly() — 1428 weekly bars, earliest 1999-03-07, latest 2026-07-12. instrumentType ETF, adjclose present.
Out-of-window coverage for the named regimes (2000, 2022) — QQQ inception 1999-03-07 gives a valid 40-wk MA by ~Dec 1999, so it covers the Mar-2000 Nasdaq top and all of 2022. It does NOT extend before 2000 — for a clean pre-2000 out-of-window test, ^NDX (Nasdaq-100 index, already a splice source in fetch_prices.py, history to 1985) is available.
Already in production fetch set — QQQ is line 91 of fetch_prices.py TICKERS and cached at data/QQQ.csv (dated to 2026-07-12). This adds zero new fetch calls at 6h refresh — the bar is already pulled every run.
Licensing truncation trap — None. The trailing-3y truncation risk is a FRED ICE BofA issue; Yahoo weekly chart returns full history, and save() already guards against silent shrink/regression overwrites.
Lab verdict · Dr. Nadia Osei · 2026-07-17
Tested Vic's rule as a book-level veto on the canonical v3 engine: when the score is 5/5 Risk-On but QQQ (spliced QQQX=QQQ<-_NDX for pre-2004) is below its own trailing 40-wk MA, hold Neutral(2) instead of the 55%-QQQ Risk-On(3) book; identical mechanic and lag as the live SPY trend, trailing MA only, no lookahead. In both primaries the veto is noise-negative and buys nothing: 2007 -0.05pp gross/-0.07pp net, 2015 -0.09pp/-0.12pp, maxDD unchanged at -21.9 in each. In the 2000-2006 out-of-window dot-com bear it is materially positive: +1.35pp gross/+1.39pp net and maxDD -26.5 -> -20.5, and it fired 76 of 917 Risk-On weeks. The information is real and lands precisely in the tech-led drawdown regime the thesis targets, but the bar requires improvement in BOTH primaries and it improves NEITHER while adding turnover, so it fails adoption and is filed as a card.
2007veto 11.78 gross / 11.21 net, Sharpe 1.05, maxDD -21.9 vs v3 11.83 / 11.28, Sharpe 1.05, maxDD -21.9 (delta -0.05pp / -0.07pp, within noise, no DD benefit)
→ Vic: “Your Nasdaq-breaks-first instinct is correct where it counts — it cut 6 points of drawdown and added 1.4pp in the dot-com bear — but it earns nothing in either priced-in window and left the 2022 maxDD untouched, so it's a card, not a live change.”
Card preview · Ray Kessler · 2026-07-17
QQQ own-trend vetoADVISORY · PREVIEW
+8.46%QQQ vs 40-wk MA
22 / 100 · 50 = trigger
CLEARQQQ +8.46% above 40-wk MA · veto off
If it had vetoed the 55%-QQQ Risk-On book whenever QQQ was below its own 40-wk MA, the dot-com bear (2000-06 OOW) returns +1.39pp/yr net with maxDD 6pp shallower (-20.5 vs -26.5) — but it added nothing in the 2007 or 2015 primaries and left 2022's drawdown untouched, which is why it advises and never trades.
Yahoo Finance QQQ weekly adjclose → 40-wk MA · refreshed every 6h · history to 1999-03-07 (1428 bars).
Why it earns a slot: The five scoring signals read SPY and macro; none check whether QQQ — the instrument the Risk-On book concentrates 55% into — is itself in a downtrend. When the score says 5/5 Risk-On but this tile is red (QQQ below its 40-wk MA), you are about to overweight tech into its own breakdown, the precise 2000 and 2022 setup that the SPY trend line misses because the Nasdaq rolls first. It's context for sizing conviction on a Risk-On rotation, not a trade — Nadia's lab confirmed the information is real but it clears no primary window.
QQQ's distance from its own 40-week moving average, same mechanic as the live SPY trend signal but on the instrument the Risk-On book overweights to 55%. Below the line, the Nasdaq is in its own downtrend — in tech-led drawdowns (2000, 2022) QQQ breaks this line well before SPY breaks its, which is the exact information the five scoring signals don't carry.
This is a mock-up — nothing is on the dashboard yet. To ship it, tell Clem:
“add the QQQ own-trend veto card”.
Indeed Hiring Lab job-postings index (real-time labor lead)
NO DATA
Done — killed at triage: no free, deep-enough data source exists. Never reached the lab.
Vic Marlowe · Indeed Hiring Lab, US Job Postings Index — published openly and free (hiring-lab GitHub data repo / Indeed Hiring Lab site), weekly, no key required.
proposed · triaged
Our five signals carry zero labor input and the only labor advisory, temp-help, is BLS monthly with a ~40-day lag. Indeed's job-postings index measures hiring demand in near-real-time — the leading edge of the labor cycle, distinct from jobless claims (separations) — and would give a nowcast-grade read on the one macro axis the model is currently deaf to. New information: weekly hiring demand weeks before payrolls confirm it.
✗ triage: infeasible
· Ray Kessler · 2026-07-17 · history from 2020-02-01 — Source is genuinely free, keyless, and stable — no infrastructure objection. But it starts 2020-02-01 at index=100 and has no history before that; six years all inside the COVID-and-after regime is far too shallow for the ~2000-or-earlier out-of-window validation. Infeasible on history depth, not on plumbing.
Reachability/keyless — curl raw GitHub US aggregate CSV — HTTP 200, 195KB, 4705 rows, no key/auth; header date,jobcountry,indeed_job_postings_index_SA,indeed_job_postings_index_NSA,variable
History depth — earliest observation — First row 2020-02-01, both SA and NSA = 100 (index baseline); series is built from Indeed postings starting Feb 2020, no pre-2020 data exists
Update cadence and lag — Daily rows; last row 2026-07-10 vs today 2026-07-17 = ~7-day lag, effectively weekly refresh
6h-refresh viability — GitHub raw endpoint, no rate-limit or auth churn concerns for a single 6h poll
Nasdaq-100 whale positioning (COT on tech, not just S&P)
REJECTED
Done — failed the validation bar in the lab. Archived in the graveyard.
Vic Marlowe · CFTC Commitments of Traders, Traders in Financial Futures report — CME Nasdaq-100 e-mini (leveraged funds / managed money net as %OI), same weekly CFTC feed and mechanic as the existing S&P whales signal
proposed · triaged · reviewed
Our whales signal reads S&P e-mini specs, currently a benign 77th percentile — but the crowding that just detonated this week was tech-specific, and blending it into the S&P contract washes it out. A Nasdaq-100 e-mini COT positioning read carries new information the five live signals don't: contract-level divergence flagging when leveraged/managed-money crowding is concentrated in the AI complex the broad tape hides.
✓ triage: feasible
· Ray Kessler · 2026-07-17 — Source works and is free/keyless via the same mechanic as our S&P whales signal. The catch: Vic's specific leveraged-funds/managed-money (TFF) read only goes back to 2006 — ~2010 from this pod — so it can't do pre-2000 out-of-window tests on its own. The Nasdaq-100/S&P divergence idea is still buildable to ~1999 using the legacy Noncommercial breakdown fetch_cot.py already pulls. Pass to lab; Nadia should decide up front which breakdown the backtest needs, because that choice sets the usable history.
Reachability/auth of TFF file from this pod (curl fut_fin_txt_2024.zip) — 200, 563KB zip, keyless — identical cftc.gov/files/dea/history mechanic to the live es whales signal; no key, no auth churn at 6h refresh
Columns carry the thesis read — 87-col TFF layout includes Lev_Money_Positions_Long/Short_All (leveraged funds) and Asset_Mgr_Positions_Long/Short_All (managed money) — the exact %OI decomposition Vic wants; can derive net %OI
Nasdaq-100 e-mini present — Yes — 'NASDAQ MINI - CHICAGO MERCANTILE EXCHANGE' (2024), plus a Micro and a Consolidated line; name drifts to 'NASDAQ-100 STOCK INDEX (MINI)' in 2010 vintage — alias-matching needed like the es patterns
History depth of the TFF split — Too shallow for pre-2000: TFF started 2006-06, and from this pod annual files only resolve to 2010 (fut_fin_txt_2006/2007/2008 = 404 page). Fails the ~2000 out-of-window need for the leveraged/MM read specifically
Deep-history fallback — Legacy Noncommercial net-%OI (deacot<year>.zip, the report fetch_cot.py already uses) covers Nasdaq-100 e-mini back to ~1999 launch — same mechanic, gives pre-2000 depth if the lab uses the broad spec breakdown instead of the TFF split
Cadence/rate limits — Weekly release (Fri for Tue positions); static yearly zips, no rate-limit exposure at 6h refresh — only the current year's file changes
Lab verdict · Dr. Nadia Osei · 2026-07-17
Sourced CFTC legacy Noncommercial net %OI for the CME e-mini Nasdaq-100, 1999-06 to 2026-07 (1,412 weeks), and applied the live whale mechanic (net %OI below the trailing-3y 90th percentile, 5d lag, expanding window, no lookahead). Two ex-ante designs: A = a 6th signal with strict map generalized to n=6; B = Vic's divergence read, the whale flag green only if NEITHER S&P nor Nasdaq is crowded. Both LOSE both primaries by far more than the 0.3pp noise floor — 2007 A -0.95pp / B -0.78pp gross (worse net, turnover up ~50%), 2015 A -1.50pp / B -1.34pp gross — and win only a thin ~1.6y OOW (all the ETF sleeve supports, GLD launched 2004). The Nasdaq read genuinely diverges from S&P (crowded an extra 143 weeks, 10.1% of the sample), so the information is real, but acting on it cuts QQQ exposure through tech-led bulls, which is exactly why it bleeds most in the QQQ decade. Fails bar #1 outright; the isolated OOW win is the mirage the protocol exists to reject.
2007A 10.88/10.03 (Sh 0.99) · B 11.05/10.25 (Sh 1.01) vs v3 11.83/11.28 gross/net (Sh 1.05)
2015A 11.85/11.00 (Sh 0.97) · B 12.01/11.19 (Sh 0.98) vs v3 13.35/12.71 gross/net (Sh 1.06)
oow2005-06→2007: A/B 9.05/7.79 vs v3 7.83/6.70 gross/net (+1.22pp gross, +1.09pp net) — thin 1.6y window, contradicts both primaries
→ Vic: “The tech-vs-S&P divergence is real — 143 extra crowded weeks — but a contrarian whale rule sells QQQ into the AI complex it's meant to police, and it costs the most in the decade tech led.”
cto.mjs 551.7s warn is agent-workload variance, not a data fault — and it's the exact non-incident I flagged 6h ago, now recurring
ENGINEERING · INFO
Pipeline postmortem — desk housekeeping, not an investment idea. One thing needs your attention below.
Ray Kessler · 2026-07-17
Diagnosis
The only alert is runtime-growth on cto.mjs (551.7s vs a 71.9s EMA), which is the wall-clock of the Opus agent wrapper itself — its duration is set by which job it drew this cycle (a postmortem/card_spec that curls a source and reasons over many turns), not by any infrastructure change. Every deterministic data-integrity check passed: run_status errors:[], 23 price series hash-stable, 28 FRED series with no shrinkage or date-order breaks, frozen-window v3 CAGR steady at 10.715% (unchanged from the 06:39 cycle), and no secrets leak. The real fetchers were all nominal (prices 3.8s, fred 14.1s, cot 28.1s) — no fetch failed and nothing on disk looks wrong. This is the same finding as my 2026-07-17T06:39 note, which diagnosed identical runtime-growth warns on cto.mjs and quant.mjs as workload variance; that one carried two alerts (signature [[],["runtime-growth","runtime-growth"]]), this one carries one ([[],["runtime-growth"]]), so the signature differs and the queue re-fired a fresh Opus postmortem for a known non-incident. I deliberately ran zero endpoint probes: the 'incident' is our own clock, so probing would only inflate cto's runtime for no diagnostic gain.
Root cause
Transient in reality, structural in the watchdog. The runtime-growth check (4x + >120s, EMA baseline) is correct for the deterministic Python steps but wrong for the LLM wrappers, whose runtime is workload-driven; an EMA polluted by skip/idle cycles means any heavy active cycle trivially clears 4x. Worse, it's self-feeding: each warn spawns a postmortem, the postmortem is itself a long cto run, which raises the next EMA-relative spike — and because the incident signature keys on the exact set of alert checks, one-wrapper vs two-wrapper warns are treated as distinct and re-diagnosed rather than deduped.
✓ Resolved: watchdog.py now excludes the agent wrappers (advisor/cto/quant) from the runtime-growth check - their runtime is workload-driven (shipped 2026-07-17, commit 8a32eda).
Original ask: Watchdog tuning, now upgraded from non-urgent to please-actually-do-this since it's recurred within 6h and burns an Opus cycle each time: in watchdog.py exclude the agentic wrappers (cto.mjs, quant.mjs, advisor.mjs) from the runtime-growth check, or give them a workload-aware baseline instead of a raw EMA. Keep the check as-is for the deterministic Python steps, where a 4x spike genuinely signals something changed. Optional but related: the postmortem dedupe in cto.mjs keys on the exact alert-check set, so single- vs multi-wrapper runtime warns don't dedupe against each other — worth coarsening if you don't fix the check itself.
Both runtime-growth warns are workload variance on the agentic wrappers, not data trouble — disk is clean
ENGINEERING · INFO
Pipeline postmortem — desk housekeeping, not an investment idea. One thing needs your attention below.
Ray Kessler · 2026-07-17
Diagnosis
Neither alert touches data integrity. cto.mjs ran 125.1s vs an 18.6s EMA because this cycle it did a real job (a card_spec/postmortem that curls a source and computes a ~30-point series), whereas the baseline is dominated by cycles where cto skips or does trivial work. quant.mjs ran 534.7s vs a 74.8s EMA because it ran one genuinely heavy review — the Redfin weekly-median idea — which downloaded a 637KB external TSV and iterated a lab script; it finished cleanly (verdict advisory-candidate, no last_error). The deterministic checks that would catch actual corruption all passed: 23 price series hash-stable, 28 FRED series no shrinkage/order breaks, frozen-window v3 CAGR steady at 10.715%, no secrets leak, and run_status errors:[]. The real fetchers were all nominal (prices 3.7s, fred 8.2s, cot 28.9s). No fetch failed and nothing on disk looks wrong.
Root cause
Transient/expected: runtime of the cto/quant/advisor agent processes is a function of workload (which job ran, how complex the idea, how much iteration), not infrastructure. The EMA baseline is polluted by idle/skip cycles, so any active cycle trivially clears the >4x threshold. This is the check measuring the wrong thing for these three steps, not a bug, drift, or schema change.
✓ Resolved: watchdog.py now excludes the agent wrappers (advisor/cto/quant) from the runtime-growth check - their runtime is workload-driven (shipped 2026-07-17, commit 8a32eda).
Original ask: Non-urgent watchdog tuning: exclude the agentic wrappers (cto.mjs, quant.mjs, advisor.mjs) from the runtime-growth check, or gate them on a workload-aware baseline. As written, their runtime is workload-driven, so this warn will recur most active cycles and keep feeding the CTO postmortem queue — a heavy opus cycle spent diagnosing a non-incident, which itself raises cto's future runtime. Keep the check for the deterministic Python steps where a 4x spike genuinely means something changed.
Redfin weekly median sale price (nowcast lead for the home-price signal)
CARD LIVE
Done — you approved this as an advisory card. It's on the dashboard as context and never trades.
Vic Marlowe · Redfin Data Center — weekly national/metro housing market TSV (redfin.com/news/data-center), free download; median sale price, homes sold, pending sales, updated weekly
proposed · triaged · reviewed
Our Case-Shiller home signal is structurally 2–3 months stale (currently April data in mid-July); Zillow ZHVI helps but is a monthly model-valuation, and the realtor.com card is listing activity, not transacted price. Redfin's weekly series is actual transacted median sale price at ~1–2 week lag — a genuine price nowcast that would flag a YoY roll toward zero weeks before Case-Shiller confirms it. This is exactly the fast-feed-for-a-slow-signal Clem asked for, and it's transaction price, not the activity/valuation angles already on the board.
✓ triage: feasible
· Ray Kessler · 2026-07-17 · history from 2015-01-04 — Pass it to the lab — but scoped as a nowcast/display lead, same class as the existing ZHVI feed that never touches the model, score, or trades. The bucket is keyless, reachable, and cadence-safe; the win (weekly transacted price at ~1–2 week lag) is real. Two hard caveats for Nadia: (1) history starts ~2015, so this is USELESS for pre-2000 out-of-window tests — validate it only as a lead vs Case-Shiller turning points over the 2015+ overlap; (2) Vic's filename is wrong (weekly_national_market_tracker 403s), Clem needs the actual weekly_housing_market_data key. Not infeasible — no paywall, no auth, adequate depth for a nowcast.
Reachability of Redfin S3 bucket, keyless, from this pod (curl) — redfin-public-data.s3.us-west-2.amazonaws.com is anonymously reachable — GET of the documented example key redfin_market_tracker/zip_code_market_tracker.tsv000.gz returned HTTP 206 with valid gzip bytes on a range request. No auth, no key, no egress block.
The exact key Vic named: weekly_national_market_tracker.tsv000.gz — 403 AccessDenied on 4 tries (plain, range, browser UA + redfin referer). Since the same bucket serves the zip file fine, this is masked-NoSuchKey (ListBucket denied), i.e. the proposed filename is WRONG. Redfin's weekly dataset is a distinct object (weekly_housing_market_data_most_recent.tsv000.gz pattern), not a *_market_tracker monthly file. Filename fix for Clem, not a blocker.
History depth vs our pre-2000 out-of-window requirement — Redfin weekly transacted series begins ~2015 (documented; I did not read the earliest row directly — wrong key + request budget spent). There is NO 2000-or-earlier history and never will be. Fails out-of-window validation outright.
Update cadence and publication lag — Documented: refreshed weekly on Wednesdays for the prior week, ~1–2 week lag, rolling 1/4/12-week windows. Genuinely faster than Case-Shiller's 2–3 month stale April print. Matches the nowcast thesis.
6h-refresh cadence: rate limits / auth churn / licensing truncation — It's a single static S3 object — no API key, no token rotation, no per-request quota, and range/conditional GET works. Refetching a static gz every 6h is trivial and immune to the FRED-style trailing-3y truncation trap. No cadence risk.
Lab verdict · Dr. Nadia Osei · 2026-07-17
Ex-ante design: (A) measure whether Redfin national weekly transacted median-sale-price YoY (period_end +14d) leads the live cs_ok home signal (Case-Shiller YoY>0, +90d) over the 2017-2026 overlap; (B) illustratively swap the Redfin-led flag into cs_ok and slice both primary windows. The nowcast information is real — Redfin YoY tracks Case-Shiller YoY at corr 0.866 and flagged the 2023 roll-through-zero ~4 months before Case-Shiller's single sub-zero print — but it is not a model input: as a rule it loses -0.52pp gross/-0.53pp net in 2015-> (Sharpe 1.06->1.02), it cannot be tested in the 2007 window (data starts 2017), and the 2000-2006 OOW is permanently unobtainable, so it fails the bar three ways. Verdict is advisory: a genuine transacted-price display lead in the ZHVI class that never touches score or trades, on n=1 turning event, not an adoptable signal.
2007untestable as a signal (Redfin national weekly starts 2017-01); illustrative swap 11.55g/11.00n vs 11.86g/11.31n baseline (-0.31pp, driven wholly by the 2018+ overlap)
201512.87g/12.23n vs 13.39g/12.76n baseline, -0.52pp gross / -0.53pp net, Sharpe 1.02 vs 1.06, maxDD -21.9 unchanged
oow2000-2006 unobtainable — no pre-2017 history exists and never will; fails OOW by construction
→ Vic: “Your instinct is right and your filename was wrong — the transacted-price lead is real at 0.866 corr and ~4 months on the one turn we can see, but faster into a binary gate is worse, so it lives on a card next to ZHVI, not in the model.”
Card preview · Ray Kessler · 2026-07-17
Home-price nowcastADVISORY · PREVIEW
+2.37%Redfin YoY · 4wk
35 / 100 · 50 = trigger
FIRMTransacted price YoY · leads Case-Shiller
If we'd traded the Redfin-led flag into the homes gate, the book would have gone OFF ~4 months earlier at the 2023 turn — and lost -0.53pp net over 2015→ (Sharpe 1.06→1.02): real information, no edge.
Source: Redfin Data Center weekly TSV, keyless S3 (National = 'All Redfin Metros', 4-week window). Nominal cadence weekly (Wed); reachable object froze at LAST_UPDATED 2026-04-29 — see plumbing.
Why it earns a slot: The live dashboard's home read is Case-Shiller — structurally 2–3 months stale (April data in mid-July) — plus a ZHVI model-valuation and a realtor.com listing-activity card; none of them is a transacted PRICE at weekly cadence. This card shows the human when actual sale prices are rolling toward zero weeks-to-months before Case-Shiller confirms (it flagged the 2023 dip ~4 months early at 0.866 corr), so a home-price signal flip stops being a surprise. It earns the slot as context only — Nadia's lab killed it as a rule (-0.53pp net, untestable pre-2017, permanently no pre-2000 OOW) — and it must ship with the staleness caveat visible, or it will quietly advertise a freshness it doesn't currently have.
Redfin's national weekly median SALE price — actual transacted, not listings or a model valuation — as year-over-year change. It turns months before Case-Shiller: it rolled below zero at 2023-03-19 and stayed negative into late June, while the Case-Shiller tile was still printing positive YoY. Below the 0 line means homes are transacting cheaper than a year ago.
This is a mock-up — nothing is on the dashboard yet. To ship it, tell Clem:
“add the Home-price nowcast card”.
30y mortgage rate as a leading input to the home-price signal
CARD LIVE
Done — you approved this as an advisory card. It's on the dashboard as context and never trades.
Vic Marlowe · FRED MORTGAGE30US (Freddie Mac PMMS 30y fixed), weekly, free/keyless
proposed · triaged · reviewed
Case-Shiller reaches us two months stale, and the score's home-price signal is the closest ON signal to its zero trigger. The 30y mortgage rate leads home-price turns by months via the demand channel — and its spread over the 10y is variable enough that it carries information the curve/real-yield signals don't. It answers 'when does Case-Shiller cross zero' before the data does, which the Zillow display-proxy (a faster current-price read, not a leading driver) doesn't.
✓ triage: feasible
· Ray Kessler · 2026-07-16 · history from 1971-04-02 — Feasible — clean pass. MORTGAGE30US is reachable on the exact keyed FRED path we already run, 1971→present with no licensing truncation, weekly with same-day publish. No hard blockers; hand it to Nadia. One caveat for the lab, not for me: Freddie changed PMMS methodology on 2022-11-17, so there's a series break to be aware of in any long backtest.
Reachability via the exact path fetch_fred.py already uses (api.stlouisfed.org/fred/series/observations, FRED_API_KEY, file_type=json, limit=100000) — 200 OK, series_id=MORTGAGE30US returns clean CSV-able JSON. Same key we already hold (32-char), same fetcher pattern — no new auth.
History depth (need ~2000 or earlier for out-of-window tests) — observation_start 1971-04-02; 2886 weekly obs; 2000-01-07 present. Full history exposed by the API, not a trailing window.
Licensing truncation trap (the ICE BofA / BAMLxxx trailing-3y problem) — None. Freddie Mac PMMS data carries a copyright/as-is notice but FRED serves the entire 1971→present run. Truncation trap is specific to the ICE BofA OAS series (e.g. BAMLH0A0HYM2), not this one.
Update cadence and publication lag — Weekly, ending Thursday, NSA. last_updated 2026-07-16 11:03 CT with observation_end 2026-07-16 — same-day publish, effectively zero lag. Contrast Case-Shiller's ~2-month stale that motivated the idea.
6h-refresh survivability (rate limits / auth churn) — One keyed request per cycle for a weekly series that changes at most once a week — trivial load, no rate-limit or auth-churn risk. Fits existing per-series-isolation loop; a bad fetch keeps cached file.
Lab verdict · Dr. Nadia Osei · 2026-07-16
Tested the 30y mortgage rate as the home signal via three ex-ante designs (A: pure-mortgage replacement, B: CS-AND-mortgage veto, C: mortgage-minus-10y spread), each over a W∈{26,52}wk trailing change and thr∈{0.0,0.5,1.0}pp grid, replacing only cs_ok in the strict 5/5 score, judged gross and net@10bps on common-start curves. No single declared cell clears the bar: the cells that beat 2007 net (A/C W26 thr+1.0, +0.7–0.8pp) only tie 2015 within noise (12.68–12.80 vs 12.76) and are completely inert in the OOW, while the aggressive thr+0.0 cells that genuinely help the 2000–2007 housing-bust OOW (+2.2pp net, DD −26.5→−22.5) lose both primaries by 0.6–2.0pp net by de-risking through the 2015/2019 bulls. Forensics show the leading information is real — the mortgage read flipped red in 2022-08 and 2023-04 while the stale Case-Shiller signal was still green — but the same read fires false reds through every hiking-into-strength cycle (2004–06, 2018), so the primary-winning and OOW-winning cells are disjoint. Verdict advisory: the demand-channel lead is documented card material, but no rule harvests it without paying it back in bull markets, so it fails rule 1 (both primaries, net, above noise) as a score input.
2007best cell A/C W26 thr+1.0 net 12.03/12.10% vs base 11.31% (+0.7pp, Sh 0.97 vs 1.01); OOW-winning cell A W52 thr+0.0 net 10.90% (−0.41)
2015thr+1.0 cells net 12.68–12.80% vs base 12.76% (tie, within noise); aggressive thr+0.0 cells net 11.04% (−1.72pp, Sh 0.94 vs 1.02)
oow2000–2007 spliced (SPLICED_BOOKS): A W52 thr+0.0 net 4.29% Sh 0.47 DD −22.5 vs base 2.09% Sh 0.23 DD −26.5 (+2.20pp) — but that cell loses both primaries; the 2007-winning thr+1.0 cell is inert here (2.09%, = baseline)
→ Vic: “Your mortgage rate genuinely leads the home turn — it called 2022 and 2023 before Case-Shiller did — but the same read shorts every rate-hike-into-a-bull, so it's a card, not a sixth signal.”
Card preview · Ray Kessler · 2026-07-16
Mortgage-rate impulseADVISORY · PREVIEW
+0.49pp30y rate · 26w Δ
33 / 100 · 50 = trigger
FIRM26w Δ +0.49pp · shock line +1.0pp · rate 6.55%
Wired in as a rule (A/C W26 thr+1.0) it added +0.7pp net in 2007 but only tied 2015 within noise and did nothing in the 2000–07 housing bust — a real lead that pays no edge, so it advises only.
Source: FRED MORTGAGE30US (Freddie Mac PMMS 30y fixed), weekly Thu, same-day publish · refreshed every 6h · verified live 2026-07-16.
Why it earns a slot: The live board's home signal is Case-Shiller YoY, which reaches the desk ~2 months stale and sits closest to its zero trigger of any score signal — so the reader is flying blind on the one signal most likely to flip next. This card shows the demand-side driver that leads that turn: the +1pp line fired in March 2022 and held through December, months before Case-Shiller printed negative and longer before we saw it, and it correctly stayed quiet through 2018's hike-into-strength. It answers 'is a home-price turn being set up right now' that the stale index cannot yet.
The trailing 26-week change in the Freddie Mac 30y fixed mortgage rate — the demand-channel driver that leads Case-Shiller home-price turns by months. A fast repricing up (past +1pp) chokes buyer demand well before the home-price index we score on reaches us, and that index lands two months stale.
This is a mock-up — nothing is on the dashboard yet. To ship it, tell Clem:
“add the Mortgage-rate impulse card”.
Leadership breadth via equal-weight/cap-weight ratio (RSP/SPY)
REJECTED
Done — failed the validation bar in the lab. Archived in the graveyard.
Vic Marlowe · Yahoo Finance: RSP (Invesco S&P 500 Equal Weight) and SPY, daily closes; signal = RSP/SPY ratio vs its 40-wk MA, trailing-only
proposed · reviewed
The five signals see index price and futures positioning but not participation — whether a rally is broad or three megacaps masking a weak tape. RSP/SPY relative to its own trend measures that directly: it falls when leadership narrows, exactly the divergence showing up today. Note: 'breadth divergence' died at Ray's fetchability gate ($SPXA200R unavailable), never in the lab — this is the same concept in a clean, free-fetchable form, so the idea gets its actual test.
Lab verdict · Dr. Nadia Osei · 2026-07-16
Tested Vic's RSP/SPY equal-weight/cap-weight ratio vs its trailing 40-wk MA two ways declared ex-ante: (A) a 6th strict signal, (B) a divergence veto capping the book at Defensive; robustness grid ma{26,40} x buf{0,0.02}, measured on the canonical common-start engine with net-of-cost. Every cell loses CAGR — gross AND net — in both primary windows and the native OOW, all beyond the 0.3pp noise floor: Vic's named ma40 design A runs -0.55pp gross / -0.57pp net in 2007, -2.87 / -2.86 in 2015, -0.58 / -0.59 OOW. Design A's +0.16-0.18 Sharpe is mechanical de-risking (the 6th signal can only lower the book), not breadth timing; design B's veto reads divergence=True at nearly every reference week but False at the Sep-2008 crisis — a permanent bearish tilt that missed the one event it existed to catch. maxDD improves ~1pp but never enough to rescue the CAGR loss. Fails bar #1 in both primaries and the OOW; additionally a re-run of the graveyarded 'S&P-breadth divergence,' already lab-tested in this exact RSP/SPY form.
2007cand (A,ma40) 11.02% gross / 10.46% net vs v3 11.57 / 11.03 = -0.55/-0.57pp; Sharpe 1.21 vs 1.03
2015cand (A,ma40) 10.14% gross / 9.53% net vs v3 13.01 / 12.39 = -2.87/-2.86pp; Sharpe 1.05 vs 1.03
oowOOW 2005 native (GLD-bound): cand (A,ma40) 10.64% gross / 10.05% net vs v3 11.22 / 10.64 = -0.58/-0.59pp; Sharpe 1.17 vs 1.01
→ Vic: “It got its actual test, Vic — same as the last time it got its actual test under a different name; a signal that flags divergence at every top and also every non-top isn't reading participation, it's just short the tape.”
Copper/Gold re-entry gate: delay re-risking when Cu/Au fails to confirm
REJECTED
Done — failed the validation bar in the lab. Archived in the graveyard.
External review (2026-07-16) · Existing feeds (HG=F/GC=F weekly, already fetched for the advisory card).
proposed · reviewed
LONG SHOT, flagged as such. When the score indicates re-risking but the Copper/Gold ratio is still below its 40-week MA, delay the upgrade by N weeks {2, 4} (exits stay immediate). Idea: Cu/Au is a leading growth read, so an unconfirmed breakout is more likely false. KNOWN BAD PRECEDENT the review must beat: the asymmetric guard's slow-re-entry leg collapsed OOW 2000-2006 (6.64% -> 4.90% CAGR) by re-entering at the top of bear rallies - any positive sweep cell MUST be validated on 2000-2006 before a verdict.
Lab verdict · Dr. Nadia Osei · 2026-07-16
Tested the declared asymmetric re-entry gate: when the v3 score wants to re-risk (target book above the held book) while Copper/Gold sits below its trailing 40-week MA, delay the upgrade N∈{2,4} weeks; exits/downgrades stay immediate. Because the gate only ever postpones upside, it fails the bar on rule 1 in BOTH primaries: 2007-> gross 11.45%/11.03%→net vs baseline 11.57/11.03 (N=2 −0.12pp gross, −0.03 net; N=4 −0.70/−0.57), and 2015-> gross 12.47% vs 13.01 (N=2 −0.54 gross, −0.43 net; N=4 −1.38/−1.22, Sharpe 1.03→0.97). MaxDD is unchanged (−21.9%) since exits are untouched, so there is no drawdown compensation for the lost return. The one bright spot — OOW 2000-2007 spliced +0.33pp gross and maxDD −26.5→−22.7 — shows the Cu/Au conditioning genuinely dodged the precedent's bear-rally trap, but a rule that improves only the untouched arbiter while degrading both primaries is not adoptable. Rejected.
2007gross 11.45%/11.03% net (N=2, −0.12/−0.03pp) → 10.87%/10.46% (N=4, −0.70/−0.57pp) vs baseline 11.57%/11.03%; Sharpe flat-to-down
2015gross 12.47%/11.96% net (N=2, −0.54/−0.43pp) → 11.63%/11.17% (N=4, −1.38/−1.22pp) vs baseline 13.01%/12.39%; Sharpe 1.03→0.97
oow2000-2007 spliced: gross 3.31%/net 2.69% (N=2, +0.33/+0.37pp), maxDD −26.5%→−22.7% vs baseline 2.98%/2.32% — the only window it helps
→ Vic: “Your conditioning worked exactly where you feared — it beat the slow-entry graveyard trap OOW by +0.33pp instead of collapsing to 4.9% — but delaying re-risking in the two bull windows it has to live in costs up to 1.38pp, so the smart guard still buys nothing you can keep.”
Volatility targeting: scale equity sleeve inversely to trailing realized vol
REJECTED
Done — failed the validation bar in the lab. Archived in the graveyard.
External review (2026-07-16) · Existing daily prices only (SPY/QQQ closes) - no new feeds.
proposed · triaged · reviewed
Instead of fixed capital weights, scale the equity sleeve of each book by target_vol / trailing realized vol (capped at 1.0), parking the remainder in cash. Vol clusters and rises BEFORE crashes, so the position shrinks weeks ahead of the slower 40-week trend break (e.g. March 2020). Grid to sweep: vol window {20d, 30d, 60d} x target {10%, 12%, 15%}, applied per-book equity sleeve. Watch for: extra turnover under 10bps costs, and overlap with the trend signal (it may just re-time what trend already catches). Standard gates: both primaries + OOW above the 0.3pp noise floor, net of costs.
✓ triage: feasible
· Ray Kessler · 2026-07-16 · history from 1993-01-29 — Feasible. No new feed and no key - it's daily instead of weekly on the same Yahoo endpoint we already hit, SPY back to 1993 (QQQ 1999). Only build note for Clem: our fetcher caches weekly, so a daily pull needs adding; and the trailing bar can be intraday/partial, so vol should compute on completed closes. Pass it to Nadia.
Read /app/fetch_prices.py to confirm our existing endpoint pattern — We only cache WEEKLY bars (interval=1wk) from Yahoo query1 chart API, keyless. This idea's 20d/30d/60d realized vol needs DAILY closes we don't currently pull. The proposer's 'existing daily prices' is inaccurate - but it's the same endpoint with interval=1d, same (no) auth, not a new feed.
SPY daily via query1 chart API, interval=1d, period1=0 — 200 OK, 8422 daily bars, adjclose non-null on all, first=1993-01-29, last=2026-07-16 (today). Deep enough for pre-2000 out-of-window tests.
QQQ daily, same endpoint — 200 OK, 6880 bars, first=1999-03-10, last=2026-07-16. Sits right on the 2000 OOW boundary; if a deeper equity-sleeve proxy is wanted, ^GSPC/^NDX splice sources already in the repo go back further.
Cadence / lag / 6h-refresh churn — Daily close, current same-day. Keyless so no auth churn, no FRED-style 3y licensing truncation trap. 6h refresh just re-reads the same completed daily bar until the next close - a couple requests per cycle, no rate-limit risk.
Lab verdict · Dr. Nadia Osei · 2026-07-16
Tested the declared overlay: scale each v3 book's equity sleeve (SPY/QQQ) by min(1, target_vol/trailing-realized-SPY-vol), remainder to T-bill cash; grid 20/30/60d x 10/12/15%, weekly and coarse cadence, 10bps, SPY daily vol sourced back to 1993. All 9 cells lose BOTH primaries net-of-cost: 2007 net CAGR 11.03%->7.4-9.5% (Sharpe 1.03->~1.00), 2015 net 12.37%->7.2-9.9% (Sharpe 1.03->0.85-0.96); maxDD improves 2-4pp but CAGR and Sharpe do not, so Rule 1 is not met. The only window it helps is OOW 2000-06 (net 2.12%->up to 3.22%, Sharpe 0.29->0.53), which is the mechanical reward for being chronically under-invested through two bear markets, not a robust edge. Verdict follows from the bar: a rule must lift CAGR or Sharpe in BOTH primaries above the 0.3pp floor; this one is a 1.5-5.2pp net drag there, and the vol spike arrives with the crash (COVID rv30 11.8% pre-, 57% during), re-timing what the 40-week trend already catches.
2007best cell W30/15% net 9.52% vs 11.03% baseline (-1.51pp), Sharpe 1.02 vs 1.03, maxDD -19.7% vs -22.0%; all cells net -1.5 to -3.7pp
2015best cell W30/15% net 9.88% vs 12.37% baseline (-2.49pp), Sharpe 0.96 vs 1.03, maxDD -19.7% vs -22.0%; all cells net -2.5 to -5.2pp
oowOOW 2000-06 spliced: W60/10% net 3.22% vs 2.12% baseline (+1.10pp), Sharpe 0.53 vs 0.29, maxDD -14.0% vs -27.6% — the lone win, and a bear-regime artifact
→ Vic: “Vic — it does shave drawdowns and it shines in the 2000-06 graveyard, but it costs 1.5-5.2pp a year in both live windows and only fires when the trend signal already has; the vol didn't rise ahead of March 2020, it rose with it.”
10y Treasury term premium (discount-rate stress)
REJECTED
Done — failed the validation bar in the lab. Archived in the graveyard.
Vic Marlowe · FRED series THREEFYTP10 (Kim-Wright 10y term premium), daily; alternative is the NY Fed ACM term-premium CSV (Adrian-Crump-Moench), freely downloadable.
proposed · triaged · reviewed
The five signals read the curve only as a level (10y−2y) and equities only as trend; neither captures the risk compensation embedded in long rates. A re-inflating term premium — the bond bear-steepener of 2022 and 2023-Q3 — is a distinct discount-rate stress channel that front-ran equity de-rating those signals caught late, and it's exactly the supply/inflation-driven rate regime we're in now. New orthogonal information: why long yields are rising, not just that the curve is positive.
✓ triage: feasible
· Ray Kessler · 2026-07-16 · history from 1990-01-02 — Feasible, no caveats. THREEFYTP10 rides our existing FRED key and fetcher, full history back to 1990, updates daily with a 2-4 day lag — clean fit for a weekly model on 6h refresh. Pass it to the lab.
Reachable with our existing FRED_API_KEY via api.stlouisfed.org (same fetch_api pattern as fetch_fred.py) — 200 OK, JSON parsed clean; no new auth or vendor needed
History depth (need ~2000 or earlier) — THREEFYTP10 observation_start 1990-01-02, 9116 non-empty daily rows through 2026-07-10 — 10 years of pre-2000 runway for out-of-window tests
Update cadence and publication lag — Daily series; observation_end 2026-07-10, last_updated 2026-07-14, i.e. ~2-4 business-day lag. Trivially inside a weekly model on a 6h refresh
Licensing truncation trap (the ICE BofA/BAML 3y-trailing problem) — None. Kim-Wright is Fed-published; full 1990-present exposed, not a trailing window. Truncation only bites the BAML* series
6h-refresh cadence risk (rate limits/auth churn) — One keyed request per refresh for a daily series that moves once/day — no churn, well under any FRED limit
Lab verdict · Dr. Nadia Osei · 2026-07-16
Tested THREEFYTP10 (Kim-Wright 10y term premium, 1990-present) as a 6th signal (design A, strict n=6 map) and as a Defensive-cap overlay (design B), each on two readings declared ex-ante: a trailing-percentile 'high' reading (756d, p85/90/95) and the thesis's 'rising' bear-steepener reading (63/126/252d), gross and net@10bps on canonical common-start curves. The percentile reading is inert in both primaries (2007: p95 11.55 vs 11.58 baseline gross; 2015: 12.43 vs 13.03) — under the 0.3pp noise floor and mostly negative. The rising reading actively loses both primaries (2007 −2.5pp, 2015 −2.4pp gross) and 'wins' only the thin 2005-07 OOW (13.49 vs 7.71, Sharpe 1.86), a regime artifact: the flag is ~always-on in the bear-steepener era so the book parks defensive through a benign window, and it was OFF at both the 2008 and 2020 crashes. Fails bar rules 1 (no improvement in either primary), 3 (noise), and is the textbook OOW-mirage-that-loses-primaries.
2007best cell pct-p95 gross 11.55 / Sh 1.05 vs v3 11.58 / 1.03 (net 10.95 vs 11.04); rising-126d 9.06 / 0.98 — candidate ≤ baseline
2015pct-p95 gross 12.43 / Sh 1.01 vs v3 13.03 / 1.03 (net 11.75 vs 12.41); rising-126d 10.60 / 1.04 — all cells lose
oowOOW 2005-07 common-start: rising-126d gross 13.49 / Sh 1.86 vs v3 7.71 / 0.82 — a mirage win (flag always-on, regime coincidence) that contradicts both primaries; pct cells inert (7.81 vs 7.71)
→ Vic: “Your bear-steepener channel was silent at both 2008 and COVID and only 'worked' in a calm 2005-06 window it happened to sit out — a discount-rate stress signal that misses the discount-rate stresses is a chart, not an edge.”
Temp-help employment (leading labor signal)
CARD LIVE
Done — you approved this as an advisory card. It's on the dashboard as context and never trades.
Vic Marlowe · FRED series TEMPHELPS (BLS, Temporary Help Services employment, monthly)
proposed · reviewed
The five signals carry zero labor-market information — price, curve, CPI, housing, positioning, no employment anywhere. Temporary-help payrolls roll over months before broad payrolls or the unemployment rate, so they'd flag a labor turn earlier than any card we hold. Distinct from the rejected Sahm (coincident, unemployment-based) and jobless-claims (weekly-noisy) probes: this is a smoothed, leading monthly cut, the earliest-turning slice of the labor cycle.
Lab verdict · Dr. Nadia Osei · 2026-07-16
Tested TEMPHELPS 3mma momentum (6- and 12-month horizons, thresholds {0, -1, +1}) two ways: as a 6th score signal (design A) and as a slowdown overlay capping the book at Defensive (design B), 40-day publication lag, fixed pre-declared thresholds, trailing-only momentum — no lookahead. Every one of the 24 cells LOSES both primaries: 2007-> the thesis cell (N12, 6th-signal, thr0) nets 8.44% vs 10.71% baseline (-2.27pp), and no cell beats -1.74pp; 2015-> nets 8.62% vs 13.50% (-4.88pp), no cell beats -3.97pp. The signal drags books defensive through the 2010s bull (297-457 defensive weeks in 2015) because temp-help momentum wobbles below zero mid-cycle. It fails bar #1 outright, so it never approaches the live model. But the information is real — forensics flag 2001/2008/2019/2020, and the recession-spanning 1993-2007 splice gains +1.01pp net with maxDD cut from -26.5 to -12.1 across all cells — which is card material, not model material: advisory-candidate.
2007candidate 8.44% net / Sh 0.96 vs base 10.71% net / Sh 0.99 = -2.27pp (all 12 cells -1.74 to -4.50pp net)
2015candidate 8.62% net / Sh 0.95 vs base 13.50% net / Sh 1.11 = -4.88pp (all 12 cells -3.97 to -7.55pp net)
oow1993-2007 splice: candidate 14.74% net / Sh 1.21 / maxDD -12.1 vs base 13.73% / Sh 1.07 / maxDD -26.5 = +1.01pp, maxDD +14.4pp; 2000-2007 native ~flat (+0.08pp, noise)
→ Vic: “Your instinct that temp-help leads the labor turn is correct — it caught 2001, 2008 and 2020 cleanly — but a signal that's right at four recessions and wrong through fifteen years of bull market costs 2 to 5 points a year in both live windows; it's a warning card, not a rotation input.”
Card preview · Ray Kessler · 2026-07-16
Temp-help turnADVISORY · PREVIEW
-0.87%3mma · 12m ROC
54 / 100 · 50 = trigger
SOFT−0.87% · below 0 = labor rolling over, off a −3.2 low
Wired into the score it lost 2.27pp/yr in 2007→ and 4.88pp/yr in 2015→ — right at four recessions, wrong through fifteen years of bull — so it advises only, never trades.
FRED TEMPHELPS (BLS Temp Help Services), monthly · 40-day publication lag · refreshed every 6h.
Why it earns a slot: The five scoring signals carry zero labor-market information — price, curve, CPI, housing, positioning, no employment anywhere. This is the earliest-turning slice of the labor cycle: it crossed below zero cleanly ahead of 2001 (−10.7), 2008 (−10.8), the 2019 late-cycle wobble (−0.86) and 2020 (−22.6), months before broad payrolls or unemployment moved. Right now it reads −0.87% — still below the rollover line but climbing off a −3.2 January low, which is exactly the ambiguous labor read the dashboard otherwise can't show.
Year-over-year growth of temporary-help payrolls, smoothed over 3 months. Temp staff are the first workers cut and the first rehired, so this slice of the labor market turns months before broad payrolls or the unemployment rate — the model carries no labor read at all.
This is a mock-up — nothing is on the dashboard yet. To ship it, tell Clem:
“add the Temp-help turn card”.
Inflation breadth (median / trimmed-mean CPI)
CARD LIVE
Done — you approved this as an advisory card. It's on the dashboard as context and never trades.
Vic Marlowe · FRED: MEDCPIM158SFRBCLE (Cleveland Fed median CPI, MoM) and TRMMEANCPIM158SFRBCLE (16% trimmed-mean CPI), monthly, same cadence as CPI
proposed · triaged · reviewed
The live CPI signal sees only headline YoY level versus 4% — it can't tell a narrow energy spike (transitory, mean-reverts) from broad price pressure passing through the basket (sticky, demands a policy response). Median and 16%-trimmed-mean CPI measure exactly that breadth, which is the question Waller just named out loud and the one thing the headline gate hides below its threshold. Distinct from the rejected nowcast, which chased timeliness of headline; this carries persistence/breadth, not speed.
✓ triage: feasible
· Ray Kessler · 2026-07-16 · history from 1983-01-01 — Feasible — pass it to the lab. Data we already have the key for, clean 1983 history, monthly at CPI cadence, no licensing truncation. One thing to hand Nadia: the …158… series are month-over-month annualized, not YoY, so the breadth signal needs its own scaling rather than being dropped straight onto the headline's 4% gate.
Auth path — FRED_API_KEY in env, same api.stlouisfed.org pattern as fetch_fred.py — Key present (32 chars). Official JSON API answers both series; no keyless fallback needed.
Reachability + history depth via /fred/series metadata (2 requests) — MEDCPIM158SFRBCLE and TRMMEANCPIM158SFRBCLE both observation_start 1983-01-01 -> end 2026-06-01. Deep enough for out-of-window tests before 2000.
Truncation trap (the ICE BofA trailing-3y problem) — None. These are Cleveland Fed series, not ICE/BofA. Pulled earliest observations asc: 1983-01-01=5.01, 1983-02=4.95, 1983-03=3.61 — full history exposed, not a trailing window.
Cadence + publication lag — Monthly. last_updated 2026-07-14 with June 2026 already posted — Cleveland Fed ships these within ~1-2 weeks of the CPI print, same monthly rhythm as CPIAUCSL we already carry.
6h-refresh safety — Fine. Monthly series means 6h polling re-fetches an unchanged file ~120x between prints; keyed API is 120 req/min, so two more series is noise. No auth churn.
Units sanity — Both report 'Percent Change at Annual Rate' (MoM annualized), NOT a YoY level. If Nadia wants a headline-style level-vs-threshold gate, the 12-month variants (…159… suffix) exist — flagging so the backtest doesn't silently compare a MoM number against a 4% YoY line.
Lab verdict · Dr. Nadia Osei · 2026-07-16
Ex-ante design: replace the headline CPI gate (YoY<=4% OR falling-vs-3mo) with an identical-form gate on Cleveland Fed median and 16%-trimmed-mean CPI YoY (…159… variants, not Ray-flagged …158… MoM), same 45-day publication lag, same strict 5/5=Risk-On map; declared grid T in {3.0,3.5,4.0} x {SWAP, AND}, every cell reported, 2000-2006 spliced-proxy OOW as the untouched arbiter, judged on net@10bps. The breadth swap wins the OOW decisively (+0.75 to +1.28pp net across cells, maxDD equal-or-better) and clears the noise floor in 2015 (best cell SWAP-trimmed-T4.0 +0.49pp net, Sharpe +0.03) with turnover and drawdown essentially unchanged, and the forensics confirm Vic's mechanism — 61-87 weeks where breadth stayed calm while the headline energy spike fired. But no threshold, series, or design moves the 2007 full window beyond noise: the best 2007 cell is +0.23pp net / +0.01 Sharpe, inside the ~0.3pp bar. Rule 1 demands a beyond-noise win in BOTH primaries and 2007 is a wash, so it fails the adoption bar; because the OOW is the strongest window rather than a collapse, this is real information that fails the rule, not a mirage. Advisory-candidate: card material, live model untouched.
2007SWAP trimmed T4.0: net 11.28% vs 11.05% (+0.23pp, within 0.3pp noise), Sharpe 1.04 vs 1.03, maxDD -21.9 vs -21.9
2015net 12.91% vs 12.42% (+0.49pp), Sharpe 1.06 vs 1.03, maxDD -21.9 vs -21.9
oow2000-2006 (spliced proxy): net 3.09% vs 2.32% (+0.77pp), Sharpe 0.36 vs 0.30, maxDD -26.5 vs -26.5
→ Vic: “Your breadth read is real where it costs least to prove — +0.77pp out-of-window and a clean 2015 — but across 2007 the book can't tell your median CPI from the headline it replaced, and +0.23pp is a rounding error, not an adoption.”
Card preview · Ray Kessler · 2026-07-16
Inflation breadthADVISORY · PREVIEW
2.63%16% trim-mean YoY
27 / 100 · 50 = trigger
CALMMedian 2.71% · both well under the 4% gate
If the headline 4% gate were swapped for this breadth gate, the book would have de-risked across the 24 months (Oct-2021→Sep-2023) breadth actually topped 4% and ignored narrow energy scares elsewhere — worth +0.77pp net out-of-window and +0.49pp in 2015, but 2007 came in +0.23pp (inside the 0.3pp noise bar), so Rule 1 keeps it advisory and it never trades.
FRED TRMMEANCPIM159SFRBCLE + MEDCPIM159SFRBCLE (Cleveland Fed), monthly YoY, 45-day publication lag · last obs 2026-06-01, updated 2026-07-14.
Why it earns a slot: The live Inflation tile shows one number — headline CPI YoY vs 4% — and by construction can't say whether that number is a narrow energy spike (transitory) or broad basket pressure (sticky). This card puts the breadth read next to it: right now trimmed-mean 2.63% and median 2.71% are both well under 4%, confirming the calm is broad, not a masked spike. It's the question Waller named out loud, and the lab proved the read is real (+0.77pp OOW, clean 2015) — it just couldn't clear the 2007 bar to trade, which is exactly what an advisory card is for.
The 16%-trimmed-mean CPI year-over-year — headline inflation with the noisiest 8% of the basket on each tail thrown out, so it reads how BROADLY prices are rising, not how fast one component (energy) is spiking. It matters because the live model's headline CPI gate can't tell a narrow, mean-reverting energy shock from sticky pressure passing through the whole basket; this line can. Above the 4% gate = broad, sticky pressure (the flag side); below = the scare is narrow and cooling.
This is a mock-up — nothing is on the dashboard yet. To ship it, tell Clem:
“add the Inflation breadth card”.
Fed net liquidity (system plumbing filter)
REJECTED
Done — failed the validation bar in the lab. Archived in the graveyard.
Vic Marlowe · FRED, weekly: WALCL (Fed total assets) − RRPONTSYD (overnight reverse repo) − WTREGEN (Treasury General Account); all keyless, aligns to the weekly score cadence.
proposed · triaged · reviewed
None of the five signals see the size of the monetary plumbing — the reserves actually available to bid up risk assets. Net liquidity (Fed balance sheet minus reverse-repo minus the Treasury General Account) has led SPX inflections around debt-ceiling refills and QT that trend, curve, CPI, housing, and positioning all miss until after the fact. It's weekly, orthogonal to the live five, and distinct from the rejected broad-USD ROC (that was FX funding; this is domestic reserve supply).
✓ triage: feasible
· Ray Kessler · 2026-07-16 · history from 2003-02-07 — Feasible — reachable on the API key we hold, no paid source, no licensing truncation, trivial at 6h cadence. One hard caveat for Nadia: usable history starts 2003-02-07, not 2000, because the Fed weekly balance sheet doesn't exist before then — if the out-of-window test genuinely needs pre-2003 this source can't deliver it. One build note for Clem: RRP is in billions while WALCL/WTREGEN are in millions, so the subtraction needs unit alignment or it fails silently.
Reachable with keys we already hold — official API /fred/series/observations pattern from fetch_fred.py, FRED_API_KEY present in env (32-char key) — All three series returned metadata cleanly on first request each. Same keyless fredgraph.csv?id= fallback also exists. No paid tier, no new auth.
History depth vs the ~2000-or-earlier requirement — WALCL start 2002-12-18, WTREGEN start 2002-12-18, RRPONTSYD start 2003-02-07. Binding common start for the composite is 2003-02-07. Pre-2003 does NOT exist — the Fed's H.4.1 weekly balance sheet only begins Dec 2002, so ~2000 out-of-window tests are impossible with this source, period.
Update cadence and publication lag — WALCL and WTREGEN are Weekly (as-of Wednesday); RRPONTSYD is Daily. Data through 2026-07-08 was published/last_updated 2026-07-09 — ~1-day lag, Thursday H.4.1 release. Aligns fine to a weekly score cadence.
Licensing / trailing-window truncation trap — None. These are Fed/Treasury public-domain series (not ICE BofA). Full history exposed, no trailing-3y cap.
Breakage at 6h refresh (rate limit / auth churn) — Three series per cycle against a 120 req/min official API — trivial. No token refresh, no session churn. Not a concern.
Unit-alignment landmine for whoever builds it — WALCL and WTREGEN are Millions of USD; RRPONTSYD is Billions of USD. Net liquidity = WALCL − RRPONTSYD − WTREGEN requires scaling RRP by 1000 first, and sampling the daily RRP to the Wednesday weekly grid. Silent if missed — the RRP term would look ~1000x too small and net liquidity would be wrong without crashing.
Lab verdict · Dr. Nadia Osei · 2026-07-16
Tested net liquidity (WALCL − RRP×1000 − TGA, RRP scaled bn→mn and sampled to the Wednesday grid, +2d publication lag) as a trailing 13w rising-trend flag, in two ex-ante forms: A) a 6th signal on the strict n=6 map, B) a plumbing overlay capping the book at Defensive when liquidity contracts; robustness over trend windows {8,13,26}. Against v3 (legacy-helper baselines, same helper both sides) it lost CAGR in every cell of both primaries — 2007 A/w13 10.36% vs 11.37% (−1.01pp), 2015 A/w13 12.84% vs 14.28% (−1.44pp) — while roughly doubling switches, so net-of-cost is worse still; Sharpe gains were +0.01 to +0.08, within noise and not offsetting a 1–2pp CAGR bleed. Bar rule 1 requires improvement in BOTH primary windows with the other metric not materially worse; it improves neither, and maxDD is flat. OOW (2003–2007, the earliest the Fed weekly balance sheet supports — pre-2003 does not exist) offered one +0.46pp cell (B/w13) but that cannot rescue a candidate already failed on both primaries. Rejected.
2007A/w13 CAGR 10.36% vs 11.37% (−1.01pp), Sharpe 1.01 vs 1.00; best cell B/w8 10.48% (−0.89pp), Sharpe 1.06 (+0.06); all 6 cells CAGR-negative
2015A/w13 CAGR 12.84% vs 14.28% (−1.44pp), Sharpe 1.13 vs 1.12; best cell A/w8 13.20% (−1.08pp), Sharpe 1.19; all 6 cells CAGR-negative
oow2003–2007: v3 7.53%/0.81; B/w13 7.99% (+0.46pp), Sharpe 0.92 (+0.11) — the only positive cell, and turnover ~2x so net collapses; other cells −0.2 to −2.3pp
→ Vic: “The plumbing is real, Vic, but a rising-trend flag on it drained 1–2pp of CAGR in both windows and called the 2021 RRP surge a contraction — good instinct, wrong sign at the moments that paid.”
Chicago Fed National Activity Index (broad real-activity filter)
REJECTED
Done — failed the validation bar in the lab. Archived in the graveyard.
Vic Marlowe · FRED series CFNAI (and CFNAIMA3 for the 3-month average), monthly, keyless
proposed · triaged · reviewed
The five live signals see market price, S&P positioning, the rate curve, and two price levels (CPI, home prices) — none of them see actual real-economy activity: production, employment, income, orders, consumption. CFNAI is a single diffusion composite of 85 hard-activity series, and its 3-month average crossing ~-0.7 has historically marked recession onset independently of what an inverted-or-not curve is pricing. It carries contemporaneous growth-breadth information the whole roster currently misses.
✓ triage: feasible
· Ray Kessler · 2026-07-15 · history from 1967-03-01 — Feasible, and cheap — CFNAI already rides in our FRED fetcher, so this is one added series id (CFNAIMA3) on an endpoint and key we run today. History to 1967, monthly with a ~3-4 week lag, no licensing truncation. The lag is the only thing Nadia must respect: the -0.7 MA3 signal is a month-stale read, so backtest it point-in-time, not on same-month knowledge. Pass to the lab.
Endpoint reachable with the key we already hold (api.stlouisfed.org/fred, FRED_API_KEY) — Both CFNAI and CFNAIMA3 return 200 JSON. Same endpoint pattern as fetch_fred.py; CFNAI is in fact already in our SERIES roster, so this is a proven path.
History depth (need ~2000 or earlier) — CFNAI observation_start 1967-03-01, CFNAIMA3 1967-05-01. ~33 years of pre-2000 out-of-window data. Plenty.
Update cadence and publication lag — Monthly. observation_end 2026-05-01, last_updated 2026-06-26 — roughly a 3-4 week lag (May print published late June). Tail values sane: 2026-05 MA3 = -0.03.
Licensing truncation trap (the ICE BofA trailing-3y problem) — None. Full 1967-present history is exposed on both series; not a rights-restricted vendor mirror like BAMLH0A0HYM2's cousins.
6h-refresh cadence safety — Monthly series polled every 6h just re-pulls the same value ~120x/month — trivial, no auth churn, well under FRED rate limits. No cadence break.
Lab verdict · Dr. Nadia Osei · 2026-07-15
Tested CFNAIMA3 (and raw CFNAI) as both a 6th score signal (n=6 strict map) and a slowdown overlay capping the book at Defensive when activity is weak, thresholds {-0.70 (thesis), -0.35, 0.00}, publication-lagged 55 days point-in-time, fixed pre-declared thresholds so no lookahead. At the thesis threshold the candidate loses both primaries on net (2007 -0.15pp, 2015 -0.86pp) and every single cell in 2015-> is net-negative; the -0.70 flag never crosses in the 2000-2007 native OOW and its only in-sample activation is 2008, already caught by curve+Case-Shiller. It wins only the 1993-2007 spliced OOW (+0.76pp net, maxDD +4.1pp), driven entirely by the 2001 recession in the non-primary window. Real-activity information exists but is redundant with signals the roster already carries, and the MA3 smoothing kills the response to sharp events (COVID -0.18); the bar requires improvement in BOTH primaries and it improves neither.
2007cand net 10.55% / Sh 1.01 vs base net 10.70% / Sh 0.99 (-0.15pp, noise); overlay -0.86pp
2015cand net 12.62% / Sh 1.07 vs base net 13.48% / Sh 1.11 (-0.86pp); all cells negative
oow1993-2007 splice: cand net 14.50% / Sh 1.13 / DD -22.8 vs base net 13.74% / Sh 1.07 / DD -26.9 (+0.76pp) — 2000-2007 native: 0.00, never fired
→ Vic: “The roster's blind spot is real, Vic, but a 3-month average that stays above -0.70 through 2001 and COVID isn't the eyes you want — it only opened them for 2008, which the curve had already flagged.”
10y real yield restrictiveness (level, not speed)
CARD LIVE
Done — you approved this as an advisory card. It's on the dashboard as context and never trades.
Vic Marlowe · FRED series DFII10 (10-Year TIPS/Treasury inflation-indexed real yield), daily, keyless
proposed · triaged · reviewed
None of the five signals measure how tight money actually is in real terms — curve captures shape, trend captures price, but neither reads the level of the real policy rate that does the damage in a hiking regime. A high/rising 10y real yield is a distinct risk headwind that the equity-trend and curve signals only acknowledge after price breaks; it's orthogonal to the front-end ROC (speed) and breakevens (expectations) cards already tested.
✓ triage: feasible
· Ray Kessler · 2026-07-15 · history from 2003-01-02 — Feasible — pass to lab. Source works today on infrastructure we already run, daily with a one-day lag, no truncation trap. One flag for Nadia: DFII10 starts 2003-01-02, so there is no pre-2000 out-of-window slice; validation has to live inside 2003-2026, which does cover multiple full hiking regimes. If she needs a longer real-rate history she'd have to splice a proxy, and that's a separate build decision.
Reachability via our existing official-API pattern (fetch_fred.py fetch_api, FRED_API_KEY 32-char key we already hold) — 200 OK. series/observations returned count=6139 daily obs; same endpoint shape we already run for DGS10/T10YIE, no new auth.
History depth / earliest observation — observation_start 2003-01-02 (first value 2.43). TIPS 10y constant-maturity real yield does not exist before 2003 on FRED — so pre-2000 out-of-window tests are NOT possible with DFII10.
In-window coverage for the thesis — 2003-2026 = 23yrs/6139 daily obs, spans the 2004-06, 2015-18 and 2022-23 hiking cycles plus 2013 taper tantrum — the exact restrictive-real-rate regimes the card targets.
Update cadence & publication lag — frequency Daily; last_updated 2026-07-15 15:16 CT for obs through 2026-07-14 — ~1 business-day lag, revised once/day. Trivially fine at 6h refresh (value changes at most once between runs).
Licensing truncation trap — Clean. DFII10 sources from Fed H.15 / Treasury, NOT ICE BofA — count=6139 confirms full history exposed, no trailing-3y clamp like the BAMLxxx series.
6h-cadence stress (rate limit / auth churn) — One GET per refresh against static API key; FRED allows 120 req/min. No churn, no throttle risk.
Lab verdict · Dr. Nadia Osei · 2026-07-15
Tested DFII10 (10y real yield) as a restrictiveness LEVEL, ex-ante, two ways: a 6th strict-mapped signal (A) and a Defensive-cap overlay (B, matches the thesis), each on trailing-percentile {85/90/95} and absolute {1.0/1.5} readings, percentiles trailing-756d only, 1-day lag, gross and net@10bps. The leading cell (B overlay, real yields in top 5% of trailing 3y) beats v3 in both primaries under the canonical common-start engine — 2007 net +0.55pp (Sharpe 0.99→1.05), 2015 net +0.82pp (0.99→1.08), maxDD flat — but the win is threshold-fragile: the neighboring p90 cell collapses to +0.00/-0.11pp once the superseded per-window warm-up is removed, and the p90/p95 'robustness' seen in the raw sweep was that warm-up artifact. The only native OOW the series+engine allow is a thin ~2yr 2005-07 slice (+3.91pp net, small-sample magnitude), while the 2019 walk-forward — which contains the 2022-23 restrictive-hiking regime the card explicitly targets — LOSES -0.33pp net as the cap holds the book Defensive through the 2023-24 equity recovery. Both-primaries + thin-OOW pass, but single-threshold fragility and a negative walk-forward in the target regime fail the bar (same failure shape as the n-tilt and breakeven-veto mirages). The information is real and orthogonal (flag fires at 2006/2008/2018/2023 real-rate peaks, silent in the 2013 taper and 2021 deep-negative era) — the signal is card material, the overlay is not adoptable.
2007B p95 overlay net 11.59% vs v3 11.04% (+0.55pp), Sharpe 1.05 vs 0.99, maxDD -21.8% flat
2015B p95 overlay net 13.25% vs v3 12.43% (+0.82pp), Sharpe 1.08 vs 0.99, maxDD -21.8% flat
oowwalk-forward 2019 (covers 2022-23 hiking): net 16.45% vs v3 16.78% (-0.33pp), Sharpe 1.19 vs 1.21 — LOSES; native OOW 2005-07 wins +3.91pp but is a ~2yr single-regime slice; DFII10 has no pre-2003 history so no genuine independent OOW exists
→ Vic: “The real-rate level is genuinely orthogonal information, Vic — it just lights up in the right regimes without paying: the entire edge sits in one percentile threshold and it goes negative net in the very 2022-23 hiking regime you built it for.”
Card preview · Ray Kessler · 2026-07-15
Real-yield restrictivenessADVISORY · PREVIEW
2.33%10y real yield
70 / 100 · 50 = trigger
ELEVATEDp97 of 3y · top-5% restrictive
If followed as a Defensive cap it held the book defensive through the 2022-23 hikes and lost -0.33pp net in the 2019 walk-forward as equities recovered — real information, wrong as a trade.
Source: FRED DFII10 (10y TIPS real yield), daily, ~1-business-day lag · refreshed every 6h.
Why it earns a slot: The five score signals read shape (curve), price (trend) and speed (the 2y-ROC card), but none read the LEVEL of the real policy rate that actually compresses valuations in a hiking regime. This flags when real yields sit in the top 5% of their own trailing 3 years — it lit up at the 2006, 2008, 2018 and 2023 restrictive peaks and stayed silent through the 2013 taper and the 2021 deep-negative era, information the trend and curve signals only concede after price breaks. It reads p97 today, so the desk sees the headwind now instead of after the fact.
The 10y TIPS real yield ranked within its own trailing 3 years — how tight real policy is versus its recent regime, not its absolute level. Above the 95th percentile is the top-5% restrictive zone that compresses equity valuations; charting the rank (not the raw level) keeps the read honest across the +2.5%/-1.1%/+2.3% drift of 2003-2026.
This is a mock-up — nothing is on the dashboard yet. To ship it, tell Clem:
“add the Real-yield restrictiveness card”.
Copper/gold ratio (cyclical-growth filter)
CARD LIVE
Done — you approved this as an advisory card. It's on the dashboard as context and never trades.
Vic Marlowe · Daily copper futures (Yahoo Finance HG=F) over gold (Yahoo GC=F or GLD); monthly fallback via FRED PCOPPUSDM / gold fixings.
proposed · triaged · reviewed
The five live signals read equity trend/positioning, the curve, and domestic prices (CPI, home prices) — none read real-time global industrial demand. The copper/gold ratio is a clean cross-asset growth/reflation gauge that historically leads 10y yields and tends to turn ahead of equity trend at cycle inflections, so it would carry a physical-demand read the model is currently blind to. It's distinct from the rejected sector-momentum and USD ideas — a cross-asset ratio, not an equity or FX overlay.
✓ triage: feasible
· Ray Kessler · 2026-07-15 · history from 2000-08-28 — Feasible. Daily copper/gold ratio is buildable here today from keyless Yahoo HG=F/GC=F, with a FRED monthly fallback on the key we already own — no paid API, no rate-limit or auth risk at 6h cadence. One honest caveat for Nadia: the daily continuous-futures history bottoms out at 2000-08-28, right on the edge of our out-of-window line, so a true pre-2000 backtest needs the monthly FRED splice (copper to 1992, gold TBD). Pass it to the lab.
Yahoo HG=F (copper front-month) weekly, keyless — our fetch_prices.py endpoint pattern — 200 OK, 1352 weekly bars, 2000-08-28 -> 2026-07-15, last close 6.39. Keyless, same host we already hit for 20 tickers.
Yahoo GC=F (gold front-month) weekly, keyless — 200 OK, 1352 bars, identical span 2000-08-28 -> 2026-07-15, last 4074.10. Copper/gold ratio computable daily; both continuous futures, common start ~2000.
FRED fallback PCOPPUSDM (global copper, monthly) with our FRED_API_KEY — key present, 414 obs, 1992-01 -> 2026-06-01. Monthly, ~1-month publication lag. Extends copper history to 1992 if a monthly splice is wanted.
FRED gold fixing GOLDAMGBD228NLBM — 400 'series does not exist' — LBMA fixing series was retired/renamed. Not a blocker: GC=F covers gold to 2000; a monthly FRED gold series can be sourced later if the lab wants a pre-2000 monthly splice.
Licensing truncation / cadence at 6h refresh — No ICE BofA-style trailing-3y trap: PCOPPUSDM is IMF/World Bank full history, Yahoo returns full span. Two extra Yahoo pulls + optional FRED call per refresh — negligible against existing load, no auth churn (Yahoo keyless, FRED key already held).
Lab verdict · Dr. Nadia Osei · 2026-07-15
Tested the copper/gold ratio as a trailing-only growth filter (mode in {trend-vs-MA, ROC} x window in {26,40,52} weeks), added two ways: A) a 6th signal folded into a strict 0-6 map, B) a slowdown overlay capping the book at Defensive when the ratio is not supportive; prev-week indexing, trailing detrend, no lookahead, all 12 cells reported. In 2007 the best cell (A/trend/w26) is +0.20 Sharpe but -0.20pp CAGR (Sharpe gain is de-risking, not timing); in 2015 every one of the 12 cells loses 3.08-5.44pp CAGR with Sharpe flat-to-down, because the ratio sat persistently bearish through the equity bull and held the model out of risk-on. No cell improves both primaries, so the adoption bar (req #1) fails outright. The OOW-spliced window flips sign across parameters (+2.07pp to -1.15pp CAGR), which is dispersion, not robustness. Forensics confirm the growth read is real - correct risk-off at 2008/2011/2015-16/2020/2022 and risk-on at 2021 - so the information is card material even though the rotation rule bleeds; hence advisory, not adopted.
2007A/trend/w26 CAGR 11.32% vs 11.52% (-0.20pp, noise), Sharpe 1.21 vs 1.01 (+0.20), maxDD -22.2% vs -21.8%
2015A/trend/w26 CAGR 11.23% vs 14.31% (-3.08pp), Sharpe 1.09 vs 1.12 (-0.03); all 12 cells -3.08 to -5.44pp CAGR
→ Vic: “The ratio does read the cycle - it called every slowdown from 2008 to 2022 - but it's bearish more weeks than it isn't, so bolting it onto an equity-rotation model just costs you 3-5 points a year of bull market; real gauge, wrong wiring.”
Card preview · Ray Kessler · 2026-07-15
Copper/gold pulseADVISORY · PREVIEW
+20.9%Cu/Au vs 40w MA
15 / 100 · 50 = trigger
EXPANSION+20.9% over 40-wk MA · growth supportive
If wired into the score it would have cut ~3.08pp off 2015 CAGR (all 12 lab cells −3.1 to −5.4pp) for flat Sharpe — it sat bearish through an equity bull; real growth read, wrong wiring, so it advises only.
Source: Yahoo HG=F ÷ GC=F, weekly, keyless · refreshed every 6h · FRED PCOPPUSDM monthly fallback
Why it earns a slot: The five score signals plus the advisories read equity trend, the curve, domestic prices, positioning, breakevens, BTC and housing heat — none read real-time global industrial demand. This cross-asset physical-demand gauge went negative ahead of the 2008/2011/2015-16/2020/2022 slowdowns and spiked in the 2021 reflation, leading 10y yields and often equity trend at inflections, so a human sees a growth turn the live board is otherwise blind to.
Copper priced in gold — a cross-asset read on real global industrial demand vs safe-haven bid — shown as its distance above/below its own 40-week average. Above the line the physical-demand cycle is expanding (reflation); below it, slowing. It tends to turn ahead of 10y yields and equity trend at cycle inflections.
This is a mock-up — nothing is on the dashboard yet. To ship it, tell Clem:
“add the Copper/gold pulse card”.
Inflation nowcast (leading complement to the CPI signal)
REJECTED
Done — failed the validation bar in the lab. Archived in the graveyard.
Vic Marlowe · Cleveland Fed Inflation Nowcasting (clevelandfed.org/indicators-and-data/inflation-nowcasting); CPI/PCE current- and next-month estimates, updated multiple times weekly.
proposed · triaged · reviewed
Our live CPI signal runs on a ~6-week-old print — the score still reads May while June only just landed, and an energy-driven re-acceleration would reach the YoY line months after it hits markets. A daily-updated nowcast carries a real-time estimate of the current and next month's inflation, so it would flag turns weeks before the official number the live signal waits on — new timing information, not a new level.
✓ triage: feasible
· Ray Kessler · 2026-07-15 · history from 2013-07-01 — Passes triage: free, keyless, reachable, near-zero lag, updates daily — exactly the timing information the thesis wants. Hard caveat Nadia must design around: history starts July 2013, so there is no pre-2000 out-of-window test; validate on 2013-2026, which does contain the 2021-23 energy-and-broad re-acceleration this idea is built to catch. Treat as a timing overlay on the CPI signal, not a new level.
Reachability from this pod (curl, keyless) — GET clevelandfed.org/-/media/files/webcharts/inflationnowcasting/nowcast_month.json?sc_lang=en -> HTTP 200, 7.50 MB, no API key/auth. Same for nowcast_quarter.json and nowcast_year.json. No key we don't already hold.
Series coverage in the file — 8 series: nowcast (CPI, Core CPI, PCE, Core PCE) + realized 'Actual' counterparts. This is the real MoM/YoY nowcast, current- and next-month, as described.
History depth (the deciding check) — Distinct period tokens run 2013-7 through 2026-7; chart subcaption is '2013-7'. Earliest observation is July 2013 — the model's public start (Knotek-Zaman). Does NOT reach 2000; a clean pre-2000 out-of-window test is impossible with this source.
Update cadence & publication lag — Embedded _comment stamp '2026-07-14 00:00' (yesterday); daily axis labels confirm multiple updates/week. Lag is near-zero by design — that's the leading edge the idea wants.
Licensing/truncation trap — No trailing-window truncation like FRED's ICE BofA 3y series — full 2013->present is exposed. The only 'truncation' is structural: the nowcast simply wasn't produced before 2013.
6h-refresh operational fit — No auth, no rate-limit gate hit on single pulls; safe at 6h. Two caveats for Clem, not blockers: (1) payload is FusionChart-shaped 7.5 MB JSON served as application/octet-stream — needs a real JSON parse, our FRED keyless startswith('observation_date') gate won't apply; (2) ~30 MB/day across the 3 files on a 1 vCPU pod is fine but not free.
Redundancy vs series we already hold — We already pull T10YIE/T5YIFR (breakeven expectations) and CPIAUCSL. This adds a distinct thing — a real-time current/next-month print, not a market-implied or lagged level.
Lab verdict · Dr. Nadia Osei · 2026-07-15
Sourced the Cleveland Fed nowcast (keyless, HTTP 200) and reconstructed a genuine real-time current-month MoM series, 2013-08 to 2026-07, 3236 daily readings. Tested three ex-ante designs (swap the lagged CPI slot, re-acceleration veto, 6th brake) x two gauges (annualized MoM, 3m-annualized) x three thresholds, on both primaries plus a 2013-2019/2019-2026 stability split. On the faithful headline-CPI swap the candidate loses in both primaries (2013: -0.22pp CAGR at best, most cells -1.6 to -2.8pp; 2015: -0.61pp best; switches nearly double) and never improves maxDD. The only positive cells use Core CPI, an off-mandate series, and their entire edge sits in 2019-2026 (+0.4 to +1.2pp) with exactly +0.00 in 2013-2019 -- and no pre-2013 out-of-window exists to arbitrate, since the nowcast itself begins July 2013. Fails rule 1 (headline), fails rule 2 (no OOW; effect is one-episode-only), clears rule 3 only on an off-mandate series -- the textbook mirage. Rejected.
2007no 2007 window exists (nowcast starts 2013-07); earliest supported = 2013 primary: baseline 13.18%/Sh1.06 vs best faithful candidate 12.96%/Sh1.07 = -0.22pp, within noise; headline mom_ann cells -1.6 to -2.8pp
2015baseline 14.29%/Sh1.12 vs best faithful candidate 13.68%/Sh1.09 = -0.61pp CAGR; maxDD unchanged; off-mandate Core-CPI variant +0.27 to +0.75pp
oownone possible -- data begins 2013-07. Pseudo-split 2013-2019 = +0.00 across all cells; all Core-CPI edge (+0.4 to +1.2pp) is confined to the 2019-2026 re-acceleration event
→ Vic: “The nowcast does lead the print, Vic -- but its only measurable P&L is the 2021-23 spike it was built to catch, and there's no pre-2013 window to prove that isn't just the event scoring itself.”
Front-end repricing speed (2y yield ROC)
CARD LIVE
Done — you approved this as an advisory card. It's on the dashboard as context and never trades.
Vic Marlowe · FRED DGS2 (2-Year Treasury Constant Maturity, daily) — trailing-only ROC and percentiles, no lookahead.
proposed · triaged · reviewed
Our five signals see trend, curve slope, realized CPI, home prices and positioning — none see how fast the front end is repricing the Fed path. In a hawkish hiking regime the 2y can jump 100–150bp while 10−2 stays positive (bear flattening), so our curve signal fires late by construction. A trailing rate-of-change / percentile on the 2y would flag policy-tightening stress before the slope inverts.
✓ triage: feasible
· Ray Kessler · 2026-07-15 · history from 1976-06-01 — Feasible — clean. DGS2 is a public-domain daily series we can already pull with our FRED key, history to 1976, one business-day lag, no ICE-style trailing-window truncation. Trailing ROC/percentile on it is a pure derived transform with no lookahead risk. Hand it to Nadia.
Reachable with keys we already hold — same api.stlouisfed.org observations endpoint fetch_fred.py uses, FRED_API_KEY (len 32) from env — 200 OK, valid JSON. No new source, no paid API, no auth beyond the key we already run.
History depth via series metadata + observations pull — observation_start 1976-06-01; first non-missing 1976-06-01 (7.260); 12,524 non-missing daily obs. ~24 years of pre-2000 history for out-of-window tests — far past the ~2000 bar.
Update cadence and publication lag — Daily (freq D). Latest obs 2026-07-13, last_updated 2026-07-14 15:16 CT — roughly one business-day lag, typical for the Board's H.15 constant-maturity series.
Licensing truncation trap (the ICE BofA / BAMLxxx 3y-trailing problem) — None. DGS2 is Board of Governors / Treasury CMT, public domain — full 1976→present exposed, unlike our BAMLH0A0HYM2. Confirmed by pulling the actual head date, not just metadata.
6h-refresh viability — One series, one request per refresh, static API key, no churn. Nowhere near FRED rate limits. Fits the existing fetch_fred.py loop with a one-line SERIES addition (Clem's call, not mine).
Lab verdict · Dr. Nadia Osei · 2026-07-15
Tested DGS2 front-end repricing speed as absolute pp change over {63,126}d, trailing-756d percentile at {85,90,95}, lagged 1bd, as both a 6th signal (design A) and a tightening-stress overlay cap (design B); grid fully reported, OOW arbitrates. No cell clears the bar in both primaries: the roc126/p90 cell that adds +0.91pp CAGR / +0.12 Sharpe in 2007 turns -0.44pp in 2015, and the only 2015-flat cell (roc63/p90) is -0.19pp in 2007 — a cross-window mirage. maxDD is unchanged in nearly every cell because the up-repricing flag never fires inside the equity drawdowns (2008 falling, 2018 missed at +18bp). The signal is real information — clean flags on 1994/2000/2022 and a +2.48pp CAGR / +0.32 Sharpe lift in the OOW 2000-07 hiking window — but that value is confined to the arbitration window and does not translate to the primaries, so it fails the rule and lands as an advisory card.
2007best cell B roc126/p90: 12.41% CAGR vs 11.50% baseline (+0.91pp), Sharpe 1.13 vs 1.01 — but same cell is -0.44pp in 2015
2015no cell beats baseline above noise; best B roc63/p90: 14.34% vs 14.29% (+0.05pp), Sharpe 1.18 vs 1.12 — flat; roc126 cells -0.4 to -0.9pp
oowOOW 2000-2007 native: B roc63/p85 10.01% vs 7.53% (+2.48pp), Sharpe 1.13 vs 0.81 (+0.32); OOW 1989-2007 spliced roughly flat (+/-0.5pp)
→ Vic: “The blind spot is real, Vic — the 2y did jump 162bp in '94 and 125bp in '22 — but the flag sleeps through 2018, the one hike-driven equity drawdown it was built to catch, and pays off only in a window we're not allowed to adopt on; card material, not live.”
Card preview · Ray Kessler · 2026-07-15
Front-end repricingADVISORY · PREVIEW
+0.72pp2y ROC · 126d
53 / 100 · 50 = trigger
ONp93 of trailing 3y · above p90 · 2y +72bp/126d
Design-B overlay fires today (p93 above the p90 line) → it would cap the live book one level more defensive than the 5-signal score. The model does NOT act on it, by rule: the same roc126/p90 cell added +0.91pp CAGR in 2007 but turned −0.44pp in 2015 and paid off only in the 2000–07 OOW window we can't adopt on.
Source: FRED DGS2 (2y Treasury CMT, Board of Governors, public domain, daily, ~1 business-day lag; latest obs 2026-07-13). Trailing ROC + percentile, no lookahead. Refreshed every 6h.
Why it earns a slot: The five scoring signals watch curve slope (10−2), but in a hawkish hiking regime the 2y reprices 100–160bp while 10−2 stays positive — bear flattening — so the curve signal fires late by construction. This card surfaces that stress early: the percentile line crossed p90 in 1994, the 1999–2000 hiking run-up and 2022 before any inversion, and it sits at p93 right now (+72bp/126d). It earns the slot because its failure is printed on it — the 2018 drawdown it slept through and the 2015 sign-flip — so the human reads an honest context gauge, not a signal masquerading as tradeable.
Trailing-756-day percentile of the 2-year yield's 126-day change. Above p90 means the front end is repricing the Fed path faster than at any point in the last three years — the tightening stress the 10−2 curve signal only registers after it inverts.
This is a mock-up — nothing is on the dashboard yet. To ship it, tell Clem:
“add the Front-end repricing card”.
Market breadth divergence (% of S&P 500 members above 200-DMA)
REJECTED
Done — failed the validation bar in the lab. Archived in the graveyard.
Vic Marlowe · Computable from the constituent OHLC already in the Yahoo stack (share of S&P 500 names above their own 200-DMA); or the ready-made $SPXA200R breadth series (StockCharts / Nasdaq Data Link). Ray to confirm fetchability.
proposed · triaged · reviewed
Our trend signal reads only SPY versus its 40-week MA, so a cap-weighted index held up by a handful of mega-caps can stay green while the average stock rolls over — exactly the narrow-leadership setup being flagged now. Breadth carries information none of the five live signals do: internal participation, which historically deteriorates ahead of index-level trend breaks. Distinct from rejected momentum/sector variants because it measures cross-sectional confirmation of the trend we already trade, not a new return factor.
✓ triage: feasible
· Ray Kessler · 2026-07-15 — Feasible, but not the easy way Vic implied. The ready-made $SPXA200R is not free-fetchable from this pod — no keyless source, paid API only. The DIY constituent path IS buildable on keyless Yahoo data with pre-2000 depth, so pass it to the lab — but Nadia should know up front it carries a survivorship-bias trap without a point-in-time membership source, and it needs a ~500-symbol incremental fetcher to survive the 6h cadence.
Ready-made $SPXA200R via Yahoo chart endpoint (symbols %5ESPXA200R, SPXA200R, %24SPXA200R, interval=1d) — All three return {"result":null, "error":"No data found, symbol may be delisted"}. Yahoo does not carry StockCharts breadth symbols.
Ready-made $SPXA200R via stooq CSV (stooq.com/q/d/l/?s=spxa200r.us) — Returns a JS anti-bot challenge page (noscript 'requires JavaScript'), not CSV. Not machine-fetchable keyless from this pod. StockCharts has no free API; Nasdaq Data Link's breadth series is behind a paid subscription — no free ready-made series exists.
DIY path: Yahoo daily OHLC depth for a constituent (AAPL, interval=1d), same endpoint pattern as fetch_prices.py — 11,487 daily rows, 1980-12-12 -> 2026-07-14. Constituent OHLC needed to compute % above 200-DMA is keyless and easily predates 2000 — data depth is not the constraint.
6h-cadence / operational fit of the DIY path — Requires ~500 symbols vs the current ~20-ticker stack. fetch_prices.py does full refetch per run; at 6h that's ~2000 keyless Yahoo hits/day from one pod IP — a real rate-limit exposure. Needs an incremental/cached fetcher, not the existing full-refresh pattern.
Validation trap: point-in-time S&P 500 membership — We hold no historical constituent list. Computing breadth on today's 500 members back to 2000 injects survivorship/look-ahead bias — precisely into the pre-2000 out-of-window tests. The DIY series is a biased proxy, not the true breadth series, unless a membership-history source is added.
Lab verdict · Dr. Nadia Osei · 2026-07-15
The named series ($SPXA200R, % of S&P members above 200-DMA) is not free-fetchable (Yahoo 404, stooq anti-bot, StockCharts/Nasdaq paid), and the DIY constituent path injects survivorship + look-ahead bias precisely into the pre-2007 OOW arbiter with no point-in-time membership source — barred by rule #4. I tested the unbiased, keyless equivalent: RSP/SPY equal-weight-vs-cap-weight breadth divergence, as a 6th signal (Design A) and a divergence veto (Design B), ma_weeks {26,40} x buf {0,0.02}. In 2007 Sharpe rises +0.15/+0.18 but only by de-risking (CAGR −0.4 to −1.5pp); in 2015 CAGR is cut −1.2 to −4.5pp with Sharpe flat; and the OOW 2003-2007 window is negative on both CAGR and Sharpe in all 8 cells. Wins-one-primary-on-lower-vol, loses-the-other-and-OOW is the exact mirage rule #2 rejects. The flag also reads 'divergence' near-permanently since 2015, so it's a structural short-the-equal-weight tilt, not a timing signal.
2007v3 CAGR 11.50%/Sharpe 1.01 -> 10.0-11.1%/1.16-1.19 (Sharpe +0.15..+0.18, CAGR -0.4..-1.5pp; gain is de-risking, not return)
oowOOW 2003-2007 native: v3 CAGR 7.53%/Sharpe 0.81 -> 5.2-7.2%/0.63-0.78 (CAGR -0.4..-2.3pp, Sharpe -0.03..-0.18; negative in all 8 cells)
→ Vic: “Your narrow-leadership read is on real tape, Vic, but a breadth flag that's been lit for a decade straight isn't calling a top — it's just short the equal-weight — and the clean $SPXA200R you wanted is behind a paywall we don't pay.”
Whipsaw guards on book switches (persistence filters)
REJECTED
Done — failed the validation bar in the lab. Archived in the graveyard.
External audit (2026-07) · No new data - a trading-rule change on the existing v3 signals.
proposed · reviewed
v3 switches ~6.3x/year; requiring the indicated book to persist 2 weeks before trading (symmetric), or trading exits fast and entries slow (asymmetric), should cut turnover and friction drag.
Lab verdict · External audit · re-verified on the desk engine · 2026-07-15
Symmetric persist-2: wins 2007 (+0.53pp gross, +0.78pp net of 10bps) and OOW 2000-06 (+1.86pp net) with switches halved - but LOSES the 2015 window (14.37->13.82 gross, Sharpe 1.12->1.08) and worsens maxDD in BOTH primaries (-21.8->-25.0, -21.9->-25.2). Fails Rule 1 (improve both windows) and trades away the drawdown control that is v3's reason to exist. The audit's summary omitted the 2015 window; the full lab output exposed it. Asymmetric (fast exit, slow re-entry): preserves DD but collapses OOW to 4.90% CAGR (Sharpe 0.58) - sells minor-dip lows, re-buys bear-rally tops in 2000-03. Textbook trap caught by the OOW window.
2007sym 12.08/1.05 vs v3 11.55/1.02 gross; DD -25.0 vs -21.8
2015sym 13.82/1.08 vs 14.37/1.12 - LOSES; DD -25.2 vs -21.9
oowsym 8.50/0.90 vs 6.64/0.73 net (wins); asym 4.90/0.58 (collapse)
→ Vic: “Half the trades, and it still couldn't afford the one window it didn't show.”
Inflation-aware bunker (swap TLT for hedges when CPI is red)
REJECTED
Done — failed the validation bar in the lab. Archived in the graveyard.
When the inflation signal is red, long-duration bonds are the wrong haven; tilt Defensive/Bunker books to energy (XLE) or shorter duration + gold instead.
Lab verdict · External audit · re-verified on the desk engine · 2026-07-15
XLE version: works in pure hiking cycles (2022) but summer-2008 CPI was >5% and rising, so the tilt held energy INTO Lehman - XLE -38.6% while TLT rallied +18.7%; GFC maxDD worsens to -24.7%. Commodities hedge inflation until the recession arrives. AGG/GLD duration version: avoids the crash (DD unchanged -21.8) but improvements are +0.23pp (2015) and +0.08pp (OOW) - under the 0.3pp noise floor. Rejected on Rule 3.
2007XLE tilt maxDD -24.7 vs -21.8
2015duration tilt +0.23pp (noise)
oowduration tilt +0.08pp (noise)
→ Vic: “The bunker's job is one thing: be standing after the blast. Don't hand it a commodity book.”
Crude oil trend overlay (inflation lead)
REJECTED
Done — failed the validation bar in the lab. Archived in the graveyard.
Vic Marlowe · FRED DCOILWTICO (WTI spot) or DCOILBRENTEU (Brent); CME CL futures if a continuous contract is preferred.
proposed · reviewed
Real-time crude momentum leads headline CPI by roughly one to two months and is precisely the energy supply-shock our lagged, energy-weighted inflation signal cannot see until it's already printed. It carries forward information about the inflation signal's own next move — something none of the five live signals capture — and today's setup (flip to Risk-On on old gas prices as oil re-spikes) is the exact failure mode it would guard against.
Lab verdict · Dr. Nadia Osei · 2026-07-14
Tested WTI 13-week momentum (FRED DCOILWTICO, lagged 1 day, trailing-only ROC and 156-week percentiles, no lookahead) two ways declared ex-ante: Design A a 6th signal (top-decile ROC -> red, strict n=6) and Design B the literal failure-mode guard (crude 3-month change > +25% forces the inflation signal red). A base-replication row reproduced v3 to the decimal, so all deltas are the overlay alone. Both designs LOSE in BOTH primary windows — 2007: A 10.37%/0.96 and B 10.60%/0.97 vs v3 11.55%/1.02; 2015: A 12.71%/1.05 and B 12.96%/1.07 vs 14.37%/1.12 — CAGR give-up of 0.95 to 1.66pp, an order of magnitude past the 0.3pp noise floor, with Sharpe down every window. It fails Rule 1 at the gate, so OOW does not arbitrate; for the record the thin std-books OOW also lost (-0.41pp) and only the spliced 1997-2006 OOW showed a mild drawdown cushion (reverse-mirage). Forensics confirm the lead does not exist at the stated threshold: the +25% guard never fired in 2021-22 (re-spike +10.3%, CPI-peak quarter +19.6%) and today reads -38.5% — oil is falling, the cited live setup is absent.
2007B 10.60% / 0.97 (A 10.37% / 0.96) vs v3 11.55% / 1.02 — -0.95 to -1.18pp CAGR, Sharpe -0.05/-0.06
2015B 12.96% / 1.07 (A 12.71% / 1.05) vs v3 14.37% / 1.12 — -1.41 to -1.66pp CAGR, Sharpe -0.05/-0.07
oowspliced 1997-2006: A 10.75% / 0.85, B 10.54% / 0.83 vs base 10.53% / 0.80 (mild cushion, +0.22pp/+0.05); thin std-books 2005-06: A=B 7.91% / 0.83 vs 8.32% / 0.86 (-0.41pp) — moot, primaries already failed
→ Vic: “Your re-spike guard slept through all of 2021-22 and is idle today with WTI's 3-month change at -38.5% — it fired exactly once, July 2008, one month before crude fell 58%; a lead that only rings after the top isn't a lead.”
Broad USD rate-of-change (funding-stress overlay)
REJECTED
Done — failed the validation bar in the lab. Archived in the graveyard.
Vic Marlowe · FRED DTWEXBGS (Broad USD Index, daily) — or ICE US Dollar Index (DXY) if a cleaner intraday feed is preferred; test as trailing-only percentile/ROC, no lookahead.
proposed · triaged · reviewed
A fast appreciation in the trade-weighted dollar is a cross-asset stress tell — global funding squeeze, flight-to-safety, EM pain — that tends to lead an equity-trend break and is orthogonal to all five domestic signals, none of which carry an FX or global-liquidity read. It's the *speed* of the move, not the level, so it shouldn't just proxy price trend; a sharp dollar bid in a week like this (Hormuz, oil, safe-haven flows) is information the CPI/curve/COT stack simply doesn't see.
✓ triage: feasible
· Ray Kessler · 2026-07-14 · history from 2006-01-02 — Feasible — pass it to the lab. DTWEXBGS is reachable with the key we already hold, no truncation trap, ~1 business-day lag, trivial at 6h cadence. One caveat for Nadia: the live daily broad series only starts 2006-01-02; for a genuine pre-2000 out-of-window test she'll need to splice the discontinued DTWEXB (1995+) on rate-of-change, which is legitimate since the signal is speed not level.
Endpoint reachability via our existing pattern (api.stlouisfed.org/fred/series/observations with FRED_API_KEY; keyless fredgraph.csv fallback also exists in fetch_fred.py) — 200 OK, valid JSON. DTWEXBGS returns 5355 daily observations. Key in env works; no separate license/entitlement needed.
History depth of the live broad index (DTWEXBGS) — observation_start 2006-01-02, observation_end 2026-07-10. ~20y daily covers 2008/2011/2015/2018/2020/2022 stress episodes, but does NOT reach pre-2000.
Pre-2000 out-of-window coverage via legacy splice — DTWEXB (Nominal Broad USD, goods-only, DISCONTINUED) runs 1995-01-04 to 2019-12-31, overlapping DTWEXBGS 2006-2019. Signal is ROC/percentile, not level, so the two splice cleanly on percent-change — gives a 1995-start out-of-window set including 1998 LTCM/Asia.
Update cadence and publication lag — Daily (H.10 release, business days). last_updated 2026-07-13 for a 2026-07-10 obs — roughly one business day lag. No intraday updates, so trailing-only ROC has no lookahead risk.
Licensing truncation trap (the FRED ICE BofA trailing-3y problem) — None. Fed H.10 series expose full history — count=5355 from 2006, no rolling window. This is not a licensed-vendor series.
6h-refresh viability (rate limits / auth churn) — Fine. One static API key, a couple of calls per refresh cycle against FRED's generous limits. Keyless fredgraph.csv fallback already wired if the key ever churns.
Lab verdict · Dr. Nadia Osei · 2026-07-14
Ex-ante I tested broad USD speed two ways: Design A adds a 6th score signal (usd_ok = 20-trading-day ROC not in the top decile of its trailing-3y distribution; strict n=6 map 6=RO), Design B is the literal funding-stress overlay from the title (fire when USD ROC >= P90 and >0 -> cap the book at Defensive), across thresholds P85/P90/P95, all inputs lagged 1 business day with trailing-only percentiles. In 2007 Design A is marginal (+0.26pp CAGR / +0.05 Sharpe at P90, near the 0.3pp noise floor) while the overlay Design B is negative (-0.91pp); in 2015 BOTH designs lose decisively at every threshold (A -1.61pp / -0.09 Sharpe, B -2.14pp / -0.13 Sharpe at P90). The bar requires improvement in BOTH primary windows and 2015 fails outright, so the candidate is dead before out-of-window. The apparent OOW win (+1.5 to +2.7pp) is a mirage: the V1 books need GLD (Nov 2004), collapsing any pre-2007 window to ~2.1 quiet years that never reach the 1998/2002 stress the splice was meant to buy. Forensics confirm why it misfires — the flag correctly lights at 2008/2011/2020/2022 dollar surges but also lit through the 2014-15 dollar bull run, which was US-outperformance, not an equity break, so de-risking on speed cost the 2015 window.
2007A(6th-sig) 11.77% CAGR / 1.06 Sharpe vs v3 11.51% / 1.01 (+0.26pp, noise); overlay B 10.60% / 0.96 (-0.91pp)
2015A 12.68% / 1.03 vs v3 14.29% / 1.12 (-1.61pp, -0.09); overlay B 12.15% / 0.99 (-2.14pp) — fails primary
oow2004-2007 (GLD-gated, ~2.1yr, unusable): A 9.01% / 0.99, B 10.18% / 1.11 vs v3 7.53% / 0.81 — thin quiet sample, cannot arbitrate
→ Vic: “Your dollar-speed flag fires clean at 2008, 2011, 2020 and 2022 — but it fired just as hard through the 2014-15 dollar bull that had no equity break, and that -1.6pp hole in 2015 is the whole story: speed can't tell a funding squeeze from plain US outperformance.”
Reviewed fetch robustness for the COT yearly-file fetcher (fetch_cot.py), plus the shared no-floor overwrite pattern in fetch_prices.py
ENGINEERING · WARN
Weekly code review — desk housekeeping, not an investment idea. Nothing needed from you.
Ray Kessler · 2026-07-14
Findings
fetch_cot.py (fetch_year / __main__) — Every 6h cycle re-downloads all 41 yearly zips 1986..2026 from cftc.gov (~164 req/day) even though only the current+prior year ever change; the other ~39 years are static history re-pulled for nothing on a 1 vCPU pod. That's needless load and our own rate-limit exposure. fix: Cache each deacot<year>.zip to disk and only re-fetch the current and prior year; treat 1986..2024 as write-once.
fetch_cot.py (fetch_year returns [] on failure) — A transient curl failure or <1000-byte body on ANY year makes fetch_year return [] silently; the full CSV is then rebuilt from allrows and overwritten. If the 2026 pull blips, every market's file silently loses the current year and the positioning signal runs on data ending 2025 — and watchdog.py only hashes data/*.csv and data/fred/*.csv, so data/cot/ has ZERO integrity coverage. Exits 0, nothing alarms. fix: Fail loud (non-zero) when the current year yields 0 rows, and add a COT row-count/last-date floor check to watchdog.py.
fetch_prices.py (save) + fetch_cot.py — Same root cause both places: cached history is overwritten unconditionally with whatever one fetch returned, no floor vs the prior file. A valid-but-short Yahoo response that drops only the newest weeks passes validate.py (continuity, not length) and watchdog immutability (frozen bars unchanged) — silent drift, not a loud crash. fix: Before overwrite, refuse and keep the old CSV if new row count < ~95% of existing (or newest date regresses).
TIPS breakevens (10y / 5y5y forward)
CARD LIVE
Done — you approved this as an advisory card. It's on the dashboard as context and never trades.
Vic Marlowe · FRED T10YIE / T5YIFR (2003->)
proposed · reviewed
Forward-looking, daily inflation expectations separate transitory oil blips from genuine de-anchoring - a leading read on the pressure our backward-looking monthly CPI signal only confirms weeks later.
Lab verdict · the lab (pre-Nadia) · 2026-07-12
Design B (breakeven-veto on CPI red) passed both primary windows by noise margins (+0.12/+0.22pp) but FAILED 2000s out-of-window (7.06 vs 7.53 CAGR). Rejected as a rule. Forensics validated the information (2008 collapse read correctly, 2021-22 de-anchoring confirmed) -> adopted as advisory dashboard card with if-followed counterfactual.