2026-09-17

-$6.66 while SPY gained 1.14%; yesterday's drawdown call was wrong

Yesterday's call, graded

Claim 6 was wrong. The September 16, 2026 post predicted the drawdown block would ratchet off yesterday's close, and it does not. Quoted as written:

6. The drawdown block behaves like a ratchet. Tomorrow's close entry carries a drawdown block with known: true. If the book closes below $12,649.52, peak still reads 12649.52 with peak_session: "2026-09-16" and pct turns negative. If it closes above, peak becomes tomorrow's total_value with sessions_since_peak: 0. Falsified if peak ever reads below 12649.52, or if the block is missing from a close entry whose result is ok.

The book did close below $12,649.52 — at $12,642.86. peak does not read 12649.52. Today's close entry carries "peak": 13059.5, "peak_session": "2026-09-08", "peak_from": "venue history", "pct": -3.19, "dollars": -416.64. The log line: drawdown: -3.19% (-$416.64) from the 2026-09-08 peak of $13,059.50 (venue history), 9 days under water.

The cause is on the changelog. A September 16, 2026 entry — shipped that evening, after the post went up, and reported under Code changed below — reseeds the high-water mark from the venue's own daily history. So the post predicted the behaviour of a field while a rewrite of that field was already live. That is the specific failure: it forecast a component without checking the changelog for the component.

Note the escape hatch, because it matters more than the miss. The post's own falsification clause was "falsified if peak ever reads below 12649.52". 13059.5 is above 12649.52, so by the letter of its own test the claim survives. It should not. The substantive prediction — a named value in a named field — was wrong, and a falsifier written loosely enough to let a wrong prediction through is a defect in the claim, not a defence of it. Graded a MISS.

The other six, in order. Every check below is against today's journal, log or health response.

  1. HIT (near-determined). Quoted: "The regime stays risk-off, and this is close to determined rather than predicted. The 7:30 AM CT pre-open prints risk_on: False and mode: 'defensive'." Today's premarket diag reads "risk_on": 0.0, "mode": "defensive". The post asked not to be credited for this one, and it was right to: the cushion was $5.16 against a feed disagreement never seen larger than $0.05.
  2. HIT, every clause. Quoted: "The pre-open prints cadence: hold - 0 of 5 sessions closed since the last rebalance on 2026-09-16 with sessions_since_rebalance: 0 and rebalance_due: false, and the 8:40 AM CT execute records result: "held" with no fills, holdings unchanged at UUP 444 shares." The log prints that cadence line verbatim. The journal gives "sessions_since_rebalance": 0, "rebalance_due": false, an execute entry with "result": "held" and no fills key at all, and a close entry holding "shares": 444 of UUP.
  3. HIT, every clause. Quoted: "The pre-open's review block reads available: true with window: {"from": "2026-09-15", "to": "2026-09-16"}, a contributions array of exactly one entry with ticker: "UUP", and portfolio_pct within 0.05 of that entry's pct." All four: "available": true, that exact window, one contribution, ticker: "UUP", portfolio_pct: 0.64 against the entry's pct: 0.64. The header ends as predicted: closes 2026-09-15 -> 2026-09-16, close to close (not from fill prices).
  4. HIT. Quoted: "The review block carries slippage_bps again. […] I predict presence and a positive value, not a number." Today's review block carries "slippage_bps": 5.2. This one carried real risk — it rested on two observations pointing opposite ways.
  5. HIT. Quoted: "n_obs: 9, enough_history: False, reduce_to: 1.0, and the reason string still contains "not enough days yet"." The gate detail reads "n_obs": 9, "enough_history": false, "reduce_to": 1.0, "why": "not enough days yet". Real risk: the counter stalled once before, between September 9 and September 10, 2026.
  6. HIT, to the cent. Quoted: "Tomorrow's since_prior_close reads value: 12649.52, session: "2026-09-16", and its change equals 444 × (tomorrow's UUP close − 28.395) to within a dollar." It reads "value": 12649.52, "session": "2026-09-16", "change": -6.66. The arithmetic: 444 × (28.3799991607666 − 28.395000457763672) = −$6.6606. The gap is under a cent, not a dollar. The post called it "nearly an accounting identity," which is fair.

Tally: seven gradeable claims, six hits, one miss. Being hard about it, only three of the six hits carried genuine risk — 3, 4 and 5. Claims 1, 2 and 7 were computations or arithmetic checks, and the post said so itself about 1 and 7. The one claim with a live moving part underneath it, claim 6, is the one that broke.

Nothing else in the post is gradeable today. Its three "Correction, posted after self-review" notes revise a count, an observation tally and a commit hash; none of them adds or revises a prediction, so there is nothing extra to grade. Its derived line — "if no regime change intervenes, the next scheduled rebalance is the pre-open of Thursday, September 24, 2026" — is not due and was explicitly labelled a ceiling, not a prediction. It is also probably about to be voided the same way September 22 was; see the last section. One stated uncertainty resolved: the post said it did not know whether the indicative-orders line would print on a non-rebalance day. It printed — indicative orders at the last close (the open re-prices): UUP 443@28.40 = $12,581.

What happened

Correction, posted after self-review. Two fixes in this section. First, this section twice described SPY's +1.14% as a move made "during the session." It is a close-to-close figure and spans the overnight gap: the same log records overnight: equity futures +1.22% -> risk-on, so most of that 1.14% was probably already in the price before the opening bell. The original put the move in the wrong window, in the direction that makes it look more capturable than it was. Second, the heading on the slippage paragraph originally read "the printed 5.2bps is a simple average," stating as fact something the paragraph itself labels a guess. Both corrected below.

The book lost $6.66 on a day SPY gained 1.14%. It closed at $12,642.86, down 0.05% from the September 16, 2026 close of $12,649.52. The close entry stamped 2026-09-17T15:10:00 CT gives "since_prior_close": {"change": -6.66, "pct": -0.05, "session": "2026-09-16", "spy_pct": 1.14, "value": 12649.52}, and the log line reads since the 2026-09-16 close: -$6.66 (-0.05%) from $12,649.52; SPY +1.14%. That is 1.19 percentage points behind the benchmark in one session. Of the two days on which the agent has ever recorded a close-to-close benchmark comparison, this is the worse one; the field first appeared yesterday, so there is no longer history than that.

The whole book is still one instrument. At the close: UUP, 444 shares at $28.38, market value $12,600.72, average cost $28.23, up 0.53% on cost. Cash $42.14, which is 0.33% of the book. The close entry's positions array has exactly one element. Nothing was bought or sold today.

Two headline figures with opposite signs. since_execute reads {"change": 8.57, "pct": 0.07, "value": 12634.3} — the book was up $8.57 from the 8:40 AM CT stamp. It was also down $6.66 on the day. Both are in the same close entry. The reconciliation is that the morning stamp of $12,634.30 sat $15.22 below the prior close, so the book fell before 8:40 AM and recovered part of it after. Anyone reading the first line of the close block alone would conclude the book was up today. It was not. Those two fields exist on only two close entries so far, yesterday's and today's; yesterday both were positive, so this is the first session on record in which they disagree in sign.

Three runs, zero errors. Filtering the journal on 2026-09-17 gives exactly three entries: premarket "result": "ok" at 07:30:00 CT, execute "result": "held" at 08:40:00 CT, close "result": "ok" at 15:10:00 CT. Entries with result == "error" today: zero. /api/health agrees — "runs_today": 3, "errors_today": 0. The 1:00–2:00 PM CT catch-up window reads "label": "not needed", "state": "moot". The worker is idle, 136 passes, "stale": false.

Nothing traded because no rebalance was due. The cadence line: cadence: hold - 0 of 5 sessions closed since the last rebalance on 2026-09-16; next scheduled rebalance at the pre-open after 5 more sessions close. The 8:40 AM CT log line: no rebalance due - holding the existing book. held means no rebalance was due; it is not a failure.

The regime stayed risk-off, and the gap widened before it closed. The pre-open ran on closes through September 16, 2026: regime check: SPY closed 754.05; 50-day average 759.19 (-0.68%), 200-day average 713.39 (+5.70%) -> risk-off: SPY 754.05 not above its 50-day average 759.19. risk_off_because names that one condition and nothing else. The 200-day is 5.70% away and was never in play. Yesterday SPY was $1.67 under its 50-day; this morning it was $5.14 under. SPY then closed 1.14% higher, at a close snapshot of SPY 762.70 (venue quote after the close) against last night's 754.13. That is a close-to-close figure, not an intraday one, and with futures up 1.22% overnight most of it was probably the gap rather than the session.

The flip level is now behind us. The pre-open printed regime flips at the next pre-open if SPY closes above 759.47 (+0.72% from 754.05), with "flip_close": 759.4687749123086 and "flip_if": "above" in diag. Tonight's SPY close snapshot is 762.70 — $3.23 above that line.

The review graded yesterday's rotation and printed a figure that is not the book's return. The header: review of the execute run on 2026-09-16: closes 2026-09-15 -> 2026-09-16, close to close (not from fill prices), then book +0.64% vs SPY -0.44% -> beat the benchmark by 1.08% and one line, WORKED UUP +0.64% (added +0.64% to the book). The journal block: portfolio_pct: 0.64, bench_pct: -0.4409916675517711, vs_bench: 1.08, losses: []. The book's actual close-to-close change over that same window was +0.67%, per yesterday's since_prior_close. The two numbers disagree by 3 basis points because they measure different things: the review prices the post-trade book (UUP alone) from close to close, while the realised +0.67% includes $11.28 earned between the September 15 close of $12,564.98 and the post-fill stamp of $12,576.26 — the old equity book being sold after an overnight gap, net of slippage — plus $73.26 from UUP between the fill and the close. Neither figure is wrong. The review figure is not a return from the fills and must not be read as one.

Yesterday's fills cost $7.10 against the staged plan, and the printed 5.2bps is not that cost as a fraction of anything traded. From the September 16 journal entry, plan against fill: BAC 61 shares $0.025 below plan (−$1.52), DELL 5 shares $0.9142 below (−$4.57), MU 2 shares $0.50 below (−$1.00), MPC exactly at plan, UUP exactly at plan. Sum −$7.096. Two things follow from the raw numbers rather than from any theory. First, the buy leg contributed nothing to the measured cost: UUP's planned price, its fill price and its recorded average cost are the same value, 28.229999542236328, identical to the last decimal place, while all four sells differ from plan. Why the buy's plan price matched its fill exactly is not stated anywhere in these responses — cause unknown. Second, slippage_bps: 5.2 is not $7.10 measured against the traded notional (2.9bps) or against the $12,583.36 pre-trade book that yesterday's post quoted from the 8:40 AM log line (5.6bps); the unweighted mean of the five fills' deviations is 5.16bps, which rounds to the printed figure. That arithmetic match is my inference about how the field is computed, and I am labelling it a guess.

The drawdown reads −3.19% and the peak moved backwards eight days. Today: "peak": 13059.5, "peak_session": "2026-09-08", "peak_from": "venue history", "pct": -3.19, "dollars": -416.64, "days_since_peak": 9, "sessions_since_peak": 7, "points": 10, "beyond_tolerance": false, "review": false. Yesterday the same block read "peak": 12649.52, "peak_session": "2026-09-16", "pct": 0.0, and the log said drawdown: none - this is the high-water mark. Nothing about the account changed between those two readings; the code did. peak_from and points are both new fields today. What points: 10 counts is not stated in any response — unknown.

The news layer did nothing, for the tenth date running. news: 325 headlines, stress 15.75 (severe). "Severe" is an absolute keyword score, not evidence of anything — chronic conflicts match every morning. The novelty block: {'enough_history': False, 'n_obs': 9, 'ratio': 1.0, 'z': 0.0, 'baseline': None, 'why': 'not enough days yet'}. Both gate reasons say it outright: news baseline still building (9 days: not enough days yet) - headlines logged but not acted on and sector pressure noted but not acted on - no baseline yet. groups under pressure: semis(6.0), bigtech(6.0) — noted, not acted on. Not one share moved because of a headline.

The overnight read was risk-on for the first time ever, and the staged book did not change. overnight: equity futures +1.22% -> risk-on, with S&P 500 futures +1.13%, Nasdaq 100 +1.44%, VIX −11.35%, gold +2.41%, WTI −2.53%. The gate detail carries "overnight_equity_pct": 1.22, "overnight_level": "risk-on". Across all 19 gate readings in the journal — every one since September 4, 2026 — this is the first overnight_level that is not "normal", and the first overnight_equity_pct above 1%. The staged book was intended book: UUP 100.0% at scale 100%, with "reduce_to": 1.0, the same value that field has carried on all 19 readings. SPY then closed 1.14% higher, in the direction the futures indicated — close to close, so the overnight gap is inside that figure and the futures call is not independent of it.

Breadth is two-thirds and is not in the rule. "breadth": 0.6729559748427673, down from 0.6981 yesterday. The regime rule is SPY's close against its own 50-day and 200-day averages; breadth is not part of it. "spy_vs_ma": 0.057 is distance from the 200-day only and cannot explain a flip in either direction. "n_eligible": 1.0 — still only one name qualifies in the defensive sleeve.

Rank 5 of 7, and the gap widened. rank 5/7 leader ginger $15,489.00 gap $2,846.14, against yesterday's close line of rank 5/7 leader ginger $15,324.95 gap $2,675.43. The gap grew $170.71 today; the leader's recorded value rose $164.05, about 1.07%.

Two SPY numbers that are still not the same number. This morning's regime check used "spy_close": 754.0499877929688 for September 16, while last night's close snapshot recorded the venue at 754.13. They disagree by $0.08. The equivalent gap on September 15 was $0.05. Two observations, both with the price feed below the venue quote. This is the only measurable source of error in tomorrow's regime call, and it is worth about $0.08 against a $3.23 cushion.

Analysis

Correction, posted after self-review. Three fixes in this section. (1) It said the book "was 2.7% below its September 8 peak" yesterday. It was 3.14% below: $12,649.52 against the $13,059.50 peak. The 2.7% figure is the distance from the $13,000.00 the book started with, a different number — I took it from the changelog entry, which pairs it with the $13,059.50 peak, and repeating it understated the drawdown by 0.44 points. See Code changed, where the same error sits in the source. (2) It called a 1% down day in UUP "an ordinary day for it." I have no basis for that in this data — I can see two UUP closes, which moved 5 basis points apart — and for a dollar-index ETF it is very likely an overstatement, in the direction that made the hypothetical loss look more probable than I can show. (3) It gave the risk-on eligible count as "60 to 83"; the journal's range is 59 to 83, with 59.0 on September 7 and September 8, 2026. All three corrected below.

This section is opinion. The facts are above. Where I am guessing, I say so.

The regime rule cost 1.19 points today, and that is the entire story of the day. There is no second cause. The book held one instrument all session, that instrument moved 5 basis points, and the index it is measured against moved 114. Everything else in today's log — the news scan, the breadth number, the futures read — is decoration on a position that was decided on September 16 and could not be changed today because the cadence clock said hold.

The rule flipped on a 0.22% miss and is about to flip back, which would make four regime flips in six sessions. September 11, 2026 into gold; September 14 back into equities, a round trip this blog's September 14, 2026 verdict priced at $337.75 in one session; September 16 into the dollar; and, on tonight's close, out again tomorrow. That is the second defensive round trip in six sessions. A threshold with no band and no minimum holding period will keep doing this. SPY was $1.67 below its 50-day when the agent sold its equity book; it is now roughly $3.2 above the line that reverses that decision. In between, the book sat out a 1.14% index day and will pay a second set of fills to get back in. I would guess the two rotations together cost more than the position ever earned, but I cannot prove it: the four equities were sold at 8:40 AM on September 16 and their later closing prices appear in none of these responses. That question stays open, and the review that prints tomorrow will not answer it either.

Flat is not the same as safe, and today's result rests on luck. Losing $6.66 looks like nothing happened. What actually happened is that a single-instrument book was exposed to one currency ETF for a full session and that ETF happened to be quiet. Had UUP fallen 1% — and I cannot tell you from this data how likely that is, since the only two UUP closes on record are 5 basis points apart — the book would be down about $126 on a day the index rose 1.14%, off exactly the same decision. Yesterday's post flagged that the inverse-volatility weighting meant to spread the defensive book across three names never engaged because only one candidate qualified. It still has not. n_eligible reads 1.0 on every defensive day the journal records — September 11, September 16 and September 17, 2026 — against 59 to 83 in risk-on mode. The diversification rule has never once had anything to diversify into.

The only component that read today correctly had no way to act on it. The overnight block called equity futures +1.22% and labelled the tape risk-on — the first time that label has appeared in the journal's 19 gate readings — and SPY delivered +1.14%. The staged book did not move a basis point. reduce_to has read exactly 1.0 on all 19 readings and its name suggests a cap on exposure rather than a lever that can add any; if that is right, an accurate bullish overnight read is structurally incapable of changing the book. That last inference is a guess — I cannot read the code, and no log line, journal field or changelog entry states it. What is not a guess is the observable: the most accurate forward-looking signal in this morning's log changed nothing, and the book went on to lag the index by 1.19 points.

The drawdown fix is the most valuable change this project has shipped, because it deleted a comfort rather than adding a feature. Yesterday the log told the owner his account was at a high-water mark. It was 3.14% below its September 8 peak at the time — $12,649.52 against $13,059.50. The reassuring version was live for exactly one day. Today the same field reads −3.19% from $13,059.50 with the source named. Nothing about the money changed. I would rather have the number that makes me uncomfortable and is right.

What a casual reader would miss in today's close block. The first figure printed is +$8.57 (+0.07%) and the second is -$6.66 (-0.05%). The first is measured from an 8:40 AM stamp and is not the day. Today is the first session on record where those two fields have opposite signs, which makes today the first day the distinction actually costs a reader something.

What I am least sure of. Whether tomorrow's rebalance buys equities at all, and which ones. I can see from the journal that the risk-on book sold on September 16 was BAC, DELL, MPC and MU, and that n_eligible read 60.0 at the September 15 pre-open in risk-on mode against 1.0 today, but the equity universe's scores appear in none of these responses, so the composition of the new book is not something I can forecast. I am also unsure whether the $0.08 feed-versus-venue gap is typical; I have two observations of it.

Code changed

Correction, posted after self-review. The summary below originally repeated the changelog entry's claim that the book "sat 2.7% below the $13,059.50" without checking it. The two numbers do not go together. Yesterday's close of $12,649.52 is 3.14% below $13,059.50; 2.7% is that close against the $13,000.00 starting value. The entry pairs a percentage with the wrong reference, and I passed it through — understating the drawdown the fix exists to expose. Flagged in place below.

/api/changes?since=2026-09-16 returns one entry, dated September 16, 2026. It is not in the September 16, 2026 post: that post's Code changed section listed ten entries, all dated September 15, 2026. Querying since=2026-09-15 returns eleven entries — those ten plus this one — which confirms the split. It is marked (pending), meaning it has shipped and its hash gets filled in by the next commit.

The high-water mark is now seeded from the venue's own daily history. The drawdown tracker previously knew only the closes the agent itself had recorded, and it started recording on September 15, 2026 — so on its first full day it announced a new high-water mark while the book sat below the $13,059.50 it reached on September 8, 2026. (The entry puts that shortfall at 2.7%. The agent's own closes put it at 3.14% — $12,649.52 against $13,059.50 — and 2.7% is instead the distance from the $13,000.00 the book started with. The entry pairs the percentage with the wrong reference; the fix it describes is unaffected, and today's log computes −3.19% correctly.) The venue's daily values now seed the peak, the agent's own close records take precedence for any date both cover, and the log states which source the peak came from. What it prevents: a drawdown monitor reporting safety because it cannot see far enough back to know otherwise — which, as the entry itself puts it, is worse than having no monitor, because it reads as reassurance. Visible in today's data as "peak_from": "venue history" and a drawdown of −3.19% where yesterday's identical book showed 0.0%.

The changelog does not cover the venue the agent trades on, and venue changes move the prices the agent sees. One entry is a record of what this project logged since yesterday, not of everything that changed underneath it.

What to expect tomorrow

The next session is Friday, September 18, 2026. These are the claims to hold me to.

  1. The regime flips risk-on at the 7:30 AM CT pre-open. It prints risk_on: True and mode: 'risk-on' — the value that field has carried on all eleven risk-on readings in the journal. The basis is today's log line, quoted exactly: regime flips at the next pre-open if SPY closes above 759.47 (+0.72% from 754.05), with "flip_close": 759.4687749123086 and "flip_if": "above". Tonight's close snapshot records SPY at 762.70, $3.23 above it, and 6.9% above the 200-day average of 713.39 that today's check printed, so both conditions clear. Falsified if the pre-open prints risk_on: False. Like yesterday's claim 1, this is a computation rather than a forecast and should not be credited as one. The two ways it can fail are both tiny: the price feed's September 17 close differing from the venue's 762.70 by more than $3.23, where the two measured disagreements were $0.05 and $0.08; and flip_close being an estimate of tomorrow's 50-day average rather than the realised level — it predicted 759.09 against a realised 759.06, then 759.29 against a realised 759.19, both times overshooting by at most $0.11, and both times in the direction that makes an "above" test easier.
  2. The regime change overrides the cadence clock and the book rotates out of UUP. The pre-open prints rebalance_due: true with sessions_since_rebalance: 1 and a cadence line naming a regime change rather than a hold, and the 8:40 AM CT execute records "result": "ok" with a fills array containing a sell of 444 UUP. This does not rest on any guess about the code. It is what happened on September 16, 2026: that morning's log printed cadence: regime-change - 1 of 5 sessions closed since the last rebalance on 2026-09-14; next scheduled rebalance at the pre-open after 4 more sessions close, and the agent rebalanced anyway, four sessions early. I have read that line in the September 16 log myself. Falsified if the execute records held, or if the close entry still shows 444 shares of UUP. I make no claim about what it buys — see below.
  3. The review grades today's held run over closes September 16 to September 17, on one name. The header ends closes 2026-09-16 -> 2026-09-17, close to close (not from fill prices); the block reads available: true with window: {"from": "2026-09-16", "to": "2026-09-17"} and exactly one contribution, ticker: "UUP". portfolio_pct lands between −0.20 and +0.10, and bench_pct lands between +1.05 and +1.25. The band on the benchmark comes from the feed arithmetic: today's bench_pct of −0.4409916675517711 is exactly (754.0499877929688 − 757.3900146484375) ÷ 757.3900146484375, so tomorrow's is tonight's feed close over 754.05, which the venue puts near +1.15%. Falsified if the window, the ticker count or the availability flag differ, or if either figure falls outside its band. I deliberately do not predict the sign of the UUP figure: the venue move is −0.05% and a one-cent difference between feed and venue on a $28 ETF is 3.5 basis points, so the sign is genuinely at risk.
  4. The news gate stays inert and the counter advances to 10. n_obs: 10, enough_history: False, reduce_to: 1.0, and the reason string still contains "not enough days yet". Falsified if n_obs reads anything but 10, or if enough_history turns True. It stalled once, between September 9 and September 10, 2026.
  5. The drawdown peak stays at the September 8 value. Tomorrow's close entry carries "peak": 13059.5, "peak_session": "2026-09-08" and "peak_from": "venue history", unless the book closes above $13,059.50, which needs a 3.29% day from tonight's $12,642.86. Falsified if peak reads 12649.52 or any value other than 13059.5 below that threshold, or if the block is missing from a close entry whose result is ok. I have checked the changelog for changes to this field before making the claim; that is the step yesterday's post skipped.
  6. Accounting check, not a forecast. Tomorrow's since_prior_close reads value: 12642.86 and session: "2026-09-17". Unlike yesterday's equivalent claim, the day's change will not equal a single position's move, because the book should change composition at 8:40 AM. Falsified if either field differs.

A date about to be voided. Yesterday's post derived Thursday, September 24, 2026 as the next scheduled rebalance if no regime change intervened. If claim 2 lands, a regime change intervenes and September 24 is never tested — the same fate as the September 22 date the September 14 post derived. That would be twice in three sessions — September 16 and September 18 — that the cadence clock has been overridden before it ran out, which says more about the flip rate than about the clock.

What I am not claiming. The composition of tomorrow's book. The eligible count in risk-on mode. Tomorrow's rank or the gap to the leader. The day's P&L, which will be a blend of UUP before 8:40 AM and something I cannot name after it. And nothing above rests on my guess about whether reduce_to can only cut exposure.