Cut plans are rewritten after the close — the sample is ~51, not 228

Found 2026-09-03, before scoring a single cut plan Status OPEN — desk-side; the plan structure is good, its history is not Corrects my own repeated claim that there were "256 scoreable cut plans against 139 taken rides"

What we saw

day_trade_recruits looks like a large, clean sample:

565 recruits · 256 with a full plan (entry+stop+target) · 228 cut and never taken
all 228 resolve to a listing venue · 321 distinct symbols

Then the timestamps:

plan_at UTC hour     20:00Z  ->  205 plans      16:00 ET, AFTER the close
                     13-19Z  ->   43 plans      intraday
                     <13Z    ->    8 plans      pre-market

written after the session they name had closed:  205 of 256

And plan_at is not a birth time — it is a batch timestamp. Four values cover almost the whole book:

2026-09-03T20:02:47.822Z   68 plans
2026-08-31T20:02:29.482Z   64 plans
2026-09-02T20:02:16.531Z   52 plans
2026-09-01T20:05:02.306Z   20 plans

A nightly job re-plans every recruit just after the close. What it writes is anchored to the last price — plan_entry equals price on every post-close row sampled:

XOM   plan_entry 165.27   price 165.27
VST   plan_entry 144.80   price 144.80
GSK   plan_entry  51.45   price  51.45
AMZN  plan_entry 256.20   price 256.20

And plan_change records what the rewrite did:

"take → stand down: pays 2.0-to-1 once the spread is paid, under the 2-to-1 floor"   x6
"take → stand down: pays 1.9-to-1 …"                                                 x4
"target moved $34.44 → $34.00 (now the $34 line)"

The decisions came before the rewrite. GOOGL was onboarded at 18:18Z and re-planned at 20:02Z; CPRT was onboarded 16:28Z, entered 16:32Z, re-planned at 20:02Z. So the plan now stored is not the plan anybody acted on.

Why it matters

I had been about to score 228 cut plans and report the result. That would have been wrong in two compounding ways:

  1. Lookahead. A plan written at 16:02 for a session that ended at 16:00 was chosen with the whole day visible. Scoring it against that day's tape asks "how good is a plan drawn after the fact", and the answer would have looked spectacular.
  2. It is not a plan anyone had. Entry anchored to the close is not an entry anybody could have taken; the verdict was flipped by a spread re-check after the fact. The row describes a hypothetical bracket, not a decision.

The honest sample is the plans written before their session ended:

51 plans · 50 of them cut · 46 symbols · 2026-08-31 to 2026-09-03

So: ~51, not 228. I had repeated "256 scoreable cut plans against 139 taken rides" several times, including in commits and in what this is for. That number was the size of the table, not the size of the sample.

The plan structure itself is good

Worth being clear that the shape is right — it is the history that is missing. plan_json carries reasoned levels, not just numbers:

{"symbol":"ZS","side":"long","verdict":"stand-down",
 "entry":179,"stop":177.59,"target":182,
 "stop_level":{"kind":"prev-high","price":177.6,"label":"yesterday's high","weight":3},
 "target_level":{"kind":"round","price":182,"label":"the $182 line","weight":1},
 "rr":{"reward":3,"risk":1.41,"ratio":2.12766},
 "rr_after_costs":{...}}

A stop that knows it is yesterday's high, and an R:R computed after costs, is more than most desks record. All of that is worth scoring — once the version that was actually live is the one being read.

The same disease as the issued levels

This is issued-levels again, in a second place: the plan is overwritten in place, and only the latest survives. plan_change records that a change happened and describes it in prose, but the previous entry/stop/target are gone as structured values.

Still open