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:
- 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.
- 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
- Keep plan versions. Append a row per revision rather than updating; or at
minimum write the previous entry/stop/target into
plan_changestructurally, not only into its sentence. Forward-only, like the issued target. - Stamp the plan's own validity window. A plan for tomorrow's session and a
post-close re-price of today's are different objects and currently look
identical.
trade_datesays the session; nothing says which session the plan was for. - Score the 51 and report them as 51, with the N visible. That is a thin sample and the report must say so rather than imply a book of 228.
- Until then, do not serve setup-level statistics into a live alert. The survivorship correction that cut plans were supposed to provide does not exist yet at any useful size.