Positions
Every debriefed call in one table, the exit sweep, capital protection, and position management rules v1.
REPORT-positions.md · updated 06/09/2026 07:37:46Rook, worker analysis-positions. Brief: analysis-2026-09-06/BRIEF-positions.md. Scratch and scripts: analysis-2026-09-06/data/positions/. All numbers replayed on debriefs/*/minutes.json, debriefs/*/swaps.jsonl, data/executor/follower-fills.jsonl, data/watchtower/paper-ledger-v2.jsonl. Nothing live was edited.
TLDR
- The ladder banks 30% of what the tape offered. Over the 21 debriefed calls that ever saw +40 or better, the peaks sum to +3050 points and the live Gold v2 ladder banks +914.
analysis-2026-09-06/data/positions/lowpeak-out.md. - One change survives every honest way of reconstructing the price path: move the first clip from +60 to +40. The reason is mechanical, not statistical: in
executor/follower.mjs:281the trail only arms after a clip. A call that peaks +45 never clips, so it has no trail, only the -45 stop. Twenty-two of 39 calls never reached +60 and are worth -876 points together. - The stepped trail we shipped last night (40, then 25 after +200) is not supported once LIQLORACLE is in the sample. On the swap-tick path it is the worst trail variant tested: -54 points against +346 for a flat 40. Last night's +121 was fitted on 32 calls that did not include the one call that has run past +1000.
- Do not tighten by market cap. Only 4 of 39 calls ever crossed $1M peak mcap and only 1 crossed $2M. With entry mcaps clustered between $57k and $309k, "mcap band" and "pnl band" are the same axis, and the mcap-banded variants score identically to their pnl-stepped twins.
- If anything, tighten at LOW pnl, not high. With
trailingStopMode: relative, the trail stop sits below breakeven for any peak under +67. That is where the give-back is, not at the top. - Capital: rugs are the entire live loss. Live realized is -$206.89 over 19 lots; the five
liquidity_pulledwriteoffs are -$250.00. Excluding them the live book is +$43.11. A realized daily-loss stop would not have stopped a single one, because the writeoffs realize hours after the buys. AmaxOpenof 2 would have blocked PEZ (-$50) and cost nothing. - Honesty: n = 39 calls over three days, one of them (LIQLORACLE) drives every sum. Excluding it, every variant tested is negative on every path. Treat the sweep as a ranking, not a forecast.
1. The tape, one table
39 debriefed calls after de-duplicating VERITY-2026-09-04 against VERITY-2026-09-05 (same token, same entry minute). TERROR-2026-09-04 is dropped: 2 bars of tape.
"sim" is the live Gold v2 ladder (executor/follower.json .exit) replayed on the 60 s bars of minutes.json with the adverse extreme taken first inside each bar, which is what a 2 s poller hits on a long. pnl is in points of the ticket, so +100 means the $50 ticket doubled. Rugged tokens (CYBERDOG, SEPE, ZEP, PEZZED, PEZ, from follower-fills.jsonl reason=liquidity_pulled) are forced to -100 at the end of their tape: dexscreener kept printing a rising price after the LP was pulled, and there was no route.
| call | set | tape min | entry mcap | age m | peak % | peak min | +60 at | +200 at | sim exit | sim pts | sim $/50 | live $ | live exit | Gold v2 paper % | hold % | flat % |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| LIQLORACLE | Gold v2 | 21 | $86k | 7.3 | +2296 | 10.8 | 2.8 | 3.8 | trail | +409 | +205 | +128.9 | clip+clip+trail | +551 trailing_stop | +491 | +269 |
| RF | Wide | 36 | $229k | 6.9 | +740 | 2.9 | 1.2 | 3.2 | trail | +51 | +25 | |||||
| ETHOSIS | Gold v2 | 41 | $111k | 2.7 | +739 | 6.1 | 1.0 | 1.6 | trail | +156 | +78 | +197 trailing_stop | +200 | +146 | ||
| BODKIN | Gold v2 | 50 | $251k | 11 | +670 | 10.2 | 2.4 | 3.4 | trail | +138 | +69 | +196 trailing_stop | +202 | +29 | ||
| hoodrat | Gold v2 | 41 | $233k | 3.8 | +239 | 17.7 | 1.0 | 18.0 | trail | +45 | +23 | +43.2 | clip+clip+trail | +65 trailing_stop | +66 | +24 |
| VERITY | Gold | 3062 | $216k | 3016 | +177 | 2937 | 2911 | time stop | +85 | +43 | -13.7 | no_progress x2 | ||||
| ROBBING | Gold | 38 | $101k | 9.3 | +175 | 6.3 | 3.5 | trail | +12 | +6 | ||||||
| PEZ | Gold v2 | 17 | $97k | 15.8 | +135 | 17.1 | 7.0 | rug writeoff | -18 | -9 | -50.0 | liquidity_pulled | -17 | -17 | +23 | |
| Culio | Gold | 32 | $127k | 4.6 | +129 | 16.4 | 14.8 | stop | -50 | -25 | ||||||
| PETOI | Gold | 30 | $105k | 21.1 | +96 | 8.2 | 8.1 | trail | +41 | +21 | ||||||
| MADETEST | Gold v2 | 20 | $309k | 7.5 | +85 | 1.3 | 1.2 | trail | +46 | +23 | -54 stop_loss | -58 | +42 | |||
| FRAMON | Gold | 60 | $120k | 285 | +82 | 50.4 | 46.9 | no progress | -1 | -0 | -2.8 | no_progress | ||||
| CLANKSEN | Gold | 61 | $100k | 36.5 | +77 | 52.3 | 38.7 | trail | +31 | +15 | ||||||
| PEZZED | Gold v2 | 14 | $101k | 13.7 | +70 | 13.2 | 11.4 | rug writeoff | -17 | -8 | -50.0 | liquidity_pulled | -22 | -22 | +23 | |
| BBM | Gold | 51 | $220k | 3074 | +70 | 42.5 | 40.2 | open at end | +57 | +29 | ||||||
| AJC | Gold v2 | 13 | $78k | 19.8 | +65 | 3.1 | 3.3 | trail | +24 | +12 | -26.4 | stop_loss | -63 stop_loss | -63 | -30 | |
| PasDePanique | Gold | 36 | $122k | 9.2 | +63 | 1.3 | 1.8 | trail | +27 | +14 | ||||||
| FOMO | Gold | 61 | $123k | 1988 | +58 | 3.3 | open at end | +24 | +12 | +1.4 | time_stop | |||||
| Bingus | Gold | 31 | $110k | 16 | +48 | 2.2 | stop | -56 | -28 | |||||||
| BUSINESS | Gold v2 | 20 | $71k | 5.7 | +45 | 0.5 | stop | -49 | -25 | +17 breakeven_stop | +17 | +36 | ||||
| Viagra | Gold | 51 | $240k | 156 | +42 | 1.7 | stop | -47 | -23 | |||||||
| MUPPETS | Gold v2 | 9 | $165k | 37.6 | +40 | 3.4 | open at end | +5 | +3 | -49 stop_loss | +120 | -46 | ||||
| COMPUTE | Gold | 36 | $131k | 20.1 | +40 | 16.2 | stop | -67 | -34 | |||||||
| MUMU | Gold v2 | 51 | $187k | 35 | +38 | 0.6 | stop | -53 | -27 | -24.3 | stop_loss | -50 stop_loss | -50 | -37 | ||
| Launch | Gold | 58 | $118k | 78836 | +37 | 17.9 | open at end | -8 | -4 | |||||||
| DOOKIE | Gold v2 | 36 | $273k | 7.2 | +37 | 16.3 | stop | -47 | -23 | -58 stop_loss | -58 | -34 | ||||
| SANDIH | Gold | 60 | $144k | 5992 | +26 | 0.5 | open at end | -14 | -7 | |||||||
| TOPO | B1 | 30 | $95k | 1213 | +21 | 1.6 | open at end | -23 | -12 | -19.1 | stop_loss | |||||
| ZEP | Gold v2 | 6 | $88k | 12 | +19 | 5.7 | rug writeoff | -100 | -50 | -50.0 | liquidity_pulled | -100 | -100 | -100 | ||
| CYBERDOG | B1 | 10 | $983k | 2 | +17 | 9.1 | rug writeoff | -100 | -50 | -50.0 | liquidity_pulled | |||||
| KEYCAT | B1 | 34 | $624k | 19.9 | +16 | 4.7 | stop | -51 | -25 | -11.6 | wallet_exit | |||||
| MILADY | Gold | 31 | $98k | 2.9 | +13 | 0.4 | stop | -53 | -27 | +0.2 | stop_loss | |||||
| COLLECT | Gold v2 | 34 | $126k | 22.9 | +11 | 1.3 | stop | -59 | -30 | -25.5 | stop_loss | -53 stop_loss | -52 | -52 | ||
| HARDER | Gold | 61 | $148k | 1475 | +7 | 6.2 | no progress | -9 | -4 | -4.3 | no_progress | |||||
| ELFIE | Gold | 61 | $225k | 157 | +4 | 6.0 | no progress | -37 | -18 | |||||||
| Uranus | Gold | 61 | $220k | 1152 | +4 | 47.1 | no progress | -19 | -10 | |||||||
| SEPE | Gold | 2 | $57k | 2.6 | +3 | 1.3 | rug writeoff | -100 | -50 | -50.0 | liquidity_pulled | |||||
| CRIME | Gold | 60 | $207k | 959 | +2 | 0.3 | no progress | -13 | -6 | |||||||
| SNOO | Gold | 54 | $233k | 47292 | +0 | 0 | no progress | -0 | -0 | -2.9 | no_progress |
Sums: sim +160 points (= +$80 on $50 tickets, n = 39). Live realized on the 18 of these with fills: -$206.89 (follower-fills.jsonl, field pnlUsd). Paper over 14 closes each at sizeUsd 50: Gold v2 +$280.05, Gold-hold +$337.57, Gold-flat +$145.69 (paper-ledger-v2.jsonl, .pnlUsd on type=="close"). Full machine-readable table: analysis-2026-09-06/data/positions/tape.json.
Three exits side by side, on the calls all three books saw. Gold v2 and Gold-hold differ on exactly one call: MUPPETS, where Gold v2 closed stop_loss at -49 and Gold-hold rode to +120. That is not a rule difference: both sets carry stopLossPct: -45 and both opened MUPPETS at the same price at 21:12:14, and Gold-hold's poller simply never sampled the -45 mark that Gold v2's did at 21:18:48. It is a marking artifact worth its own fix: MUPPETS is +$84.32 of Gold-hold's $57.52 edge, against which LIQLORACLE costs the hold book -$30.06 (245.61 versus 275.67) for trailing out three minutes later. Gold-flat (single +30 clip, stop -25, no trail) wins the losers and gives up the runners: it turns MADETEST -54 into +42 and AJC -63 into -30, and it turns LIQLORACLE +551 into +269. Flat is a better median book and a much worse sum book.
Where the live fill differs from the paper book. LIQLORACLE: paper +551%, sim on bars +409, live +$128.9 on a $50 ticket, that is +258%. Half the gap is latency at the clip (the +60 clip filled at roughly +154%, follower-fills.jsonl 01:03:04, usdOut 65.36 on a $25 basis) and half is the tail we never sold. This is the execution lane's problem, not the ladder's.
2. Sweep of the exit space
Scripts: data/positions/sweep.mjs, robust.mjs, lowpeak.mjs, clipsweep.mjs, trailmode.mjs, boot.mjs. Full output: data/positions/*-out.md.
The path-construction problem, stated first because it drives everything. minutes.json gives 60 s bars, not a tick tape. Whether a trail fires depends on whether you assume the bar low came before the bar high. I ran every variant on three constructions: bars (adverse extreme first, the pessimistic and most poller-like), closes (bar closes only, optimistic), and ticks (every swap in swaps.jsonl). Variants whose sign flips between the three are not findings.
| variant | bars, vs live | ticks, vs live | closes, vs live | ex-LIQLORACLE (bars) | median pts (bars) | hit (bars) |
|---|---|---|---|---|---|---|
| LIVE Gold v2 ladder | (+160 abs) | (-54 abs) | (+288 abs) | -249 | -13 | 38% |
| clip1 +40 x 50% | +194 | +128 | +150 | -55 | 0 | 49% |
| clip1 +40 x 67% | +291 | +190 | +50 | +113 | 0 | 49% |
| trail 40 flat (drop the step) | +288 | +399 | -97 | -195 | -13 | 38% |
| trail 40, 30 after +150 | +302 | +499 | +20 | -181 | -13 | 38% |
| trail 40, 20 after +200 | -138 | +14 | +97 | -249 | -13 | 38% |
| trail 20 flat | -79 | -80 | +133 | -190 | -13 | 38% |
| mcap trail 40 <$2M, 25 >$2M | +288 | +539 | -97 | -195 | -13 | 38% |
| mcap trail 40/30/20 by $500k/$2M | +239 | +610 | +20 | -244 | -13 | 38% |
| points-mode trail (40 pts) | -170 | -7 | -46 | -186 | -13 | 38% |
| stop -55 | +92 | +59 | -7 | -156 | -8 | 44% |
| stop -35 | -49 | -17 | 33% | |||
| stop -25 | -141 | -25 | 26% | |||
| no-progress 45m under +10 | +76 | +77 | +80 | -173 | -11 | 41% |
| no-progress off | +64 | -12 | 41% | |||
| time stop 30m | -80 | -8 | 38% | |||
| no clips at all (pure trail) | -405 | 23% | ||||
| clip1 +40x50% + trail 40 flat | +481 | +527 | +54 | -2 | 0 | 49% |
| clip1 +40x50% + hybrid trail + np 45m | +121 | +181 | +201 | +11 | +8 | 51% |
Only three rows keep their sign on all three paths: the +40 first clip, the 45 minute no-progress, and the two composites built on the +40 clip. Everything about the trail flips.
Why the +40 clip works, mechanically. decideExit at executor/follower.mjs:281 gates the trail behind if (clipped). Until the first clip fires there is no trail and no breakeven ratchet, only stopLossPct: -45. Twenty-two of 39 calls never reached +60 (lowpeak-out.md); they are worth -876 points together. Five of them peaked between +40 and +60 and then rode to the stop:
| call | full-tape peak | live ladder | with a +40 first clip |
|---|---|---|---|
| BUSINESS | +45 | -49 (stop) | +9 (trail) |
| Bingus | +48 | -56 (stop) | +10 (trail) |
| Viagra | +42 | -47 (stop) | +20 (trail) |
| FOMO | +58 | +24 | +33 |
| MUPPETS | +40 | +5 | +8 |
| sum | -123 | +80 |
Leave-one-out for the +40 clip (clipsweep-out.md): the full-sample delta is +194 points; dropping any single call leaves it between +120 and +219. No one call drives it. That is the opposite of the trail variants, where dropping LIQLORACLE flips every sign.
Bootstrap, 1000 resamples over calls (boot.mjs, seeded, deterministic):
| variant | bars: mean delta | 5th | 95th | P(better) | ticks: mean | 5th | 95th | P(better) |
|---|---|---|---|---|---|---|---|---|
| clip1 +40 x 50% | +184 | -26 | +428 | 93% | +115 | -103 | +372 | 78% |
| clip1 +40x50% AND trail 40 flat | +486 | +97 | +961 | 99% | +542 | -61 | +1355 | 90% |
| trail 40 flat | +302 | +0 | +756 | 90% | +421 | -68 | +1286 | 65% |
| trail 40, 30 after +150 | +310 | +5 | +765 | 97% | +529 | -61 | +1587 | 66% |
| mcap trail 40/25 at $2M | +305 | +0 | +756 | 89% | +570 | -66 | +1704 | 66% |
| no-progress 45m under +10 | +78 | -23 | +245 | 78% | +78 | -20 | +235 | 82% |
| stop -55 | +81 | -79 | +288 | 74% | +46 | -103 | +233 | 63% |
The trail variants have P(better) of 65 to 66% on the tick path with an interval three times as wide as their mean. That is the shape of a result that rides on one call appearing in the resample.
Trail as pnl rises, and as mcap rises: the direct answer. With trailingStopMode: relative, the stop after a peak of P sits at P - trail x (1 + P/100):
| peak | trail 40 stop | trail 30 | trail 25 | trail 20 |
|---|---|---|---|---|
| +40 | -16 | -2 | +5 | +12 |
| +60 | -4 | +12 | +20 | +28 |
| +100 | +20 | +40 | +50 | +60 |
| +200 | +80 | +110 | +125 | +140 |
| +2000 | +1160 | +1370 | +1475 | +1580 |
A 40% relative trail is already a widening ladder in points. It only sits above breakeven once the peak exceeds +66.7. So the honest answer to "narrow as pnl goes up" is: the relative trail narrows in fraction of the run given back automatically, and the place it is broken is the bottom, not the top. As for mcap: only BODKIN, CYBERDOG, LIQLORACLE and RF ever crossed $1M peak mcap and only LIQLORACLE crossed $2M. Entry mcaps run $57k to $983k with 37 of 39 under $310k, so peak mcap is close to a monotone function of peak pnl on this tape. The mcap-banded variants are not measuring anything the pnl-stepped variants do not already measure, and there is no n at the top band.
Outcome by entry mcap band, for what it is worth (live ladder, bars): under $100k n=9 sum +120; $100k to $200k n=16 sum -69; $200k to $400k n=12 sum +260; over $400k n=2 sum -151. The middle band is the loss-maker and the $200k-$400k band is the winner, which contradicts the current filters.bands preference for "under 250k". n is too small to act on.
3. Capital protection
Where the live loss came from (follower-fills.jsonl, pnlUsd by reason, non-dry):
| reason | n | sum $ |
|---|---|---|
| liquidity_pulled (rug writeoff) | 5 | -250.00 |
| stop_loss | 5 | -95.00 |
| no_progress | 5 | -23.82 |
| wallet_exit | 1 | -11.58 |
| time_stop | 1 | +1.42 |
| trailing_stop | 2 | +63.98 |
| clip_target | 4 | +108.11 |
| total | 19 lots | -206.89 |
Rugs are 121% of the loss. Every other exit category nets +$43.11. This is the single most important capital fact in the lane, and the fix belongs to the rugs lane, not to the ladder.
Did the stop-loss hits recover? Under the live ladder on bars, 10 calls exit on the stop for -533 points. All 10 later traded above their exit price (median +58 points above), but only 5 of 10 got back above our entry: Culio (-50 exit, later +129), COMPUTE (-67, later +40), DOOKIE (-47, later +37), KEYCAT (-51, later +16), BUSINESS (-49, later +1). The other five kept falling: COLLECT, Bingus, MILADY, Viagra, MUMU. That is a coin flip, and it is why stop -55 gains +92 on bars but only +59 on ticks and -7 on closes. A wider stop is not a free lunch, it is a bet that the sample keeps splitting 5/5.
Separately, the -45 stop does not realize -45 live. AJC realized -52.8%, COLLECT -51.0%, MUMU -48.6% (follower-fills.jsonl: usdOut against a $50 usdIn). Roughly 5 points of overshoot per stop, on top of the configured level.
Did we hold winners into flat? Yes, and this is the give-back table. Under the live ladder, 11 calls exit on the trail and every one of them later traded higher, median +92 points higher. Six of the 11 exited at or below +7 points on the runner fraction despite peaks of +62 to +175:
| call | peak | banked | as % of peak |
|---|---|---|---|
| ROBBING | +175 | +12 | 7% |
| hoodrat | +92 | +45 | 50% |
| PETOI | +96 | +41 | 43% |
| PasDePanique | +63 | +27 | 43% |
| CLANKSEN | +62 | +31 | 50% |
| AJC | +65 | +24 | 37% |
| BODKIN | +354 | +137 | 39% |
| ETHOSIS | +311 | +156 | 50% |
| LIQLORACLE | +994 | +409 | 41% |
Across all 21 calls that saw +40 or better: peaks sum +3050, banked +914, capture 30%.
The daily frame. $50 tickets against a wallet of roughly $510 (0.203 ETH at 02026-09-06 05:53, working state). maxOpen: null and dailyLossStopUsd: null today. Counterfactuals over the whole live tape (frame-out.md):
| rule | lots taken | lots skipped | winners skipped | total $ | worst day $ |
|---|---|---|---|---|---|
| as live (no caps) | 19 | 0 | none | -206.89 | -98.38 |
| maxOpen 3 | 19 | 0 | none | -206.89 | -98.38 |
| maxOpen 2 | 18 | 1 | none | -156.89 | -98.38 |
| maxOpen 1 | 15 | 4 | LIQLORACLE +$129 | -185.75 | -98.38 |
| daily realized loss stop $100 | 17 | 2 | hoodrat +$43 | -223.72 | -104.20 |
| daily realized loss stop $75 | 14 | 5 | hoodrat +$43 | -183.56 | -82.50 |
| maxOpen 2 + daily loss $100 | 16 | 3 | hoodrat +$43 | -173.72 | -104.20 |
Peak concurrency that night was 3 lots at 02:06 UTC, $150 of a $510 wallet, 29%. maxOpen: 2 blocks exactly PEZ and costs nothing on this tape. A realized daily-loss stop is useless against the rug case: ZEP, PEZZED and PEZ were all bought before any of them was written off at 02:54, so realized pnl was still +$128.86 (from LIQLORACLE) when PEZ was bought. It also costs hoodrat, the second-best trade in the book. Do not ship a realized daily-loss stop.
One hazard with maxOpen: on the night of the rugs, ZEP was "open" for 149 minutes because there was no route to sell it. A naive maxOpen: 2 would have been jammed by two unsellable lots and stopped trading entirely. The cap must count only lots that still have a route, or must release a lot once v4PoolDrained fires.
4. Position management rules v1
| # | rule | evidence | status |
|---|---|---|---|
| 1 | Hard stop at -45, no breakeven until the first clip | 10 stop exits, -533 pts, 5 of 10 never recovered above entry | live, keep |
| 2 | Breakeven ratchet on first clip | prevents the trail sitting below zero at low peaks (table in section 2) | live, keep |
| 3 | Relative trail, not points | points-mode is -170 on bars, -7 on ticks, -46 on closes vs live | live, keep |
| 4 | First clip at +40 x 50%, not +60 x 50% | +194/+128/+150 pts on bars/ticks/closes; leave-one-out +120 to +219; arms the trail on 5 calls that currently ride to the stop | ship now (config) |
| 5 | Drop trailSteps (the 25 after +200) |
-54 abs on ticks against +346 for flat 40; the step was fitted on 32 calls without LIQLORACLE | ship now (config) |
| 6 | maxOpen: 2, counting only lots with a live route |
saves PEZ -$50, skips no winner; peak concurrency 3 = 29% of the wallet | ship now (config) plus a small code guard for the stuck-lot case |
| 7 | Second clip +200 x 25% | changes 0 to 3 calls in every variant; +11 pts at 50% | live, keep, not worth touching |
| 8 | No-progress 30 min under +10 | 45 min is +76/+77/+80; 15 min is +15; off is +64 | shadow first (n=6 exits, all small) |
| 9 | Time stop 90 min | 30 of 39 tapes are shorter than 60 min, so 90 versus 180 versus off is untestable here (0 calls change) | not supported by the data yet |
| 10 | Tighten the trail as mcap rises | 4 calls ever crossed $1M peak mcap, 1 crossed $2M | not supported by the data yet |
| 11 | Tighten the trail as pnl rises above +200 | every stepped-trail variant is path-dependent and rides on LIQLORACLE; P(better) 65 to 66% on ticks | not supported by the data yet |
| 12 | Widen the stop to -55 | +92 bars, +59 ticks, -7 closes; P(better) 63 to 74% | shadow first |
| 13 | Daily realized-loss stop | costs hoodrat +$43, saves nothing, does not fire before a rug is written off | not supported by the data yet |
Next things to try, ranked, one paper set each
Configs to add to watchtower/rules-v2.json sets[] (Rook to add as shadow books; the entry filters stay identical to Gold v2 in every one, only exit changes):
P1 Gold-clip40 (the recommended live change, run it in paper for a day first)
{ "name": "Gold-clip40", "exit": { "stopLossPct": -45, "noProgressMin": 30, "noProgressPct": 10,
"clips": [{ "pct": 40, "fraction": 0.5 }, { "pct": 200, "fraction": 0.25 }],
"trailingStopPct": 40, "trailingStopMode": "relative", "timeStopMin": 90,
"walletExit": false, "breakevenAfterClip": true } }
Expected on this tape: +481 pts vs live on bars, +527 on ticks, +54 on closes; median goes from -13 to 0, hit rate 38% to 49%.
P2 Gold-clip40-fat (same, first clip takes two thirds)
{ "name": "Gold-clip40-fat", "exit": { "stopLossPct": -45, "noProgressMin": 30, "noProgressPct": 10,
"clips": [{ "pct": 40, "fraction": 0.67 }, { "pct": 200, "fraction": 0.25 }],
"trailingStopPct": 40, "trailingStopMode": "relative", "timeStopMin": 90,
"walletExit": false, "breakevenAfterClip": true } }
The only variant that is positive vs live on bars and ticks and positive with LIQLORACLE removed (+113 pts ex-LIQLORACLE). It is the capital-protection version of P1.
P3 Gold-wide (test the wider stop and the later no-progress together)
{ "name": "Gold-wide", "exit": { "stopLossPct": -55, "noProgressMin": 45, "noProgressPct": 10,
"clips": [{ "pct": 40, "fraction": 0.5 }, { "pct": 200, "fraction": 0.25 }],
"trailingStopPct": 40, "trailingStopMode": "relative", "timeStopMin": 120,
"walletExit": false, "breakevenAfterClip": true } }
Both components are the same sign on bars and ticks and near zero on closes. This set exists to find out which of the two is real.
P4 Gold-lowtight (tighten at low pnl, the counterintuitive one)
{ "name": "Gold-lowtight", "exit": { "stopLossPct": -45, "noProgressMin": 30, "noProgressPct": 10,
"clips": [{ "pct": 40, "fraction": 0.5 }, { "pct": 200, "fraction": 0.25 }],
"trailingStopPct": 25, "trailingStopMode": "relative", "timeStopMin": 90,
"trailSteps": [{ "seenPct": 100, "trailPct": 40 }, { "seenPct": 500, "trailPct": 30 }],
"walletExit": false, "breakevenAfterClip": true } }
Tight until +100, wide through the middle, tight again above +500. +491 pts vs live on bars, +591 on ticks, +171 on closes, but ex-LIQLORACLE it is +8 on bars and negative on ticks and closes, so it is a runner bet. It is the direct test of the "the trail is broken at the bottom, not the top" claim.
P5 Gold-hold-clip40 (the runner book, to keep an upper bound in view)
{ "name": "Gold-hold-clip40", "exit": { "stopLossPct": -45, "noProgressMin": null, "noProgressPct": 10,
"clips": [{ "pct": 40, "fraction": 0.5 }, { "pct": 200, "fraction": 0.25 }],
"trailingStopPct": 40, "trailingStopMode": "relative", "timeStopMin": 480,
"walletExit": false, "breakevenAfterClip": true } }
Gold-hold already beats Gold v2 on MUPPETS by 169 points on a single call. Pairing the hold horizon with the +40 clip separates "we exit too early in time" from "we exit too early in price".
Recommendations
Ship now (config only, reversible)
executor/follower.json.exit.clips[0].pct: 60 to 40 (and.exit.clipPctto 40 to keep the legacy field in step). Evidence: rule 4 above. Reverse by editing the two numbers back.executor/follower.json.exit.trailSteps:[]. Evidence: rule 5. The step was fitted on a 32-call sample that predates the only call that has run past +1000.executor/follower.json.maxOpen: 2. Evidence: rule 6. Do this only together with build item 1 below, otherwise a stuck lot jams the book.watchtower/rules-v2.json: add the five shadow sets P1 to P5 above.
Build (code, with the test that proves it)
maxOpenmust not count unsellable lots. A lot whoseroutes.mjscheck returnsv4PoolDrainedshould stop counting against the cap. Test: two open positions where one is drained;decideEntrystill admits a third. Without this,maxOpen: 2would have halted trading for the last 90 minutes of the 09-06 night.- Stop overshoot telemetry. Log the mark that triggered the stop next to the realized pct, so we can measure the roughly 5 points of overshoot (AJC -52.8 realized against -45 configured) instead of estimating it. Test: a fixture fill where the mark is -45 and the fill is -52 produces
stopOvershootPct: 7.8in the fill line. - A tick-resolution replay harness. Every conclusion in section 2 changes sign depending on whether the replay runs on bar lows, bar closes or swaps.
debriefs/replay-stepped-trail.mjsruns one of the three. Make the path construction an explicit flag and re-run the shipped ladder against all three before any future exit change. Test: the existing 32-call stepped-trail result reproduces on the tick path and reverses on the close path.
Needs Thomas
- Sizing versus the wallet. $50 tickets on a $510 wallet means a 3-lot night is 29% at risk. Either the wallet gets bigger or the ticket gets smaller; the data cannot choose. My read: the rug rate (5 of 19 live lots) argues for a smaller ticket until the rugs lane ships a filter, not for a daily loss stop.
- Whether to accept the runner trade-off. P2 (
+40 x 67%) is the only rule that is positive without LIQLORACLE, and it explicitly sells two thirds of the next LIQLORACLE at +40. That is a preference, not a statistic.
Open questions
- Every sum here is one call wide. Nothing in section 2 should be treated as settled until the book has 100 or more calls. The right next step is more tape, not more variants.
- 30 of 39 tapes are under 60 minutes, so the time stop and the long-horizon no-progress rules are effectively untested. The debrief collector should keep marking a call for at least 3 hours.
- The three path constructions disagree by more than any rule change does. Until we know which one matches the live poller, "which trail is best" is not answerable. Build item 3 is the fix.
- The $200k to $400k entry-mcap band is the only profitable band on this tape (+260 pts, n=12) while
filters.bandsprefers "under 250k". Worth a capture-lane look, not a config change at n=12. - The MUPPETS marking artifact means the Gold v2 versus Gold-hold comparison is currently measuring poller luck, not horizon. Fix the paper poller's mark cadence before reading anything into that pair.
Sources
debriefs/*/metrics.json(entry, path, sims),debriefs/*/minutes.json(60 s bars:oPct/hPct/lPct/cPct,liqUsd),debriefs/*/swaps.jsonl(ts,pct), 41 folders, 39 distinct calls after de-duplication.data/executor/follower-fills.jsonl: fieldsside,reason,trigger,pnlUsd,usdIn,usdOut,fraction,positionId,set,dry. 19 live lots.data/watchtower/paper-ledger-v2.jsonl:type=="close", fieldsset,symbol,pnlPct,pnlUsd,exitReason,peakPct.executor/follower.json.exit,.maxOpen,.dailyLossStopUsd,.ticketUsd;executor/follower.mjs:272-296(decideExit);watchtower/rules-v2.jsonsets[].- Scripts written for this lane:
analysis-2026-09-06/data/positions/{lib,tape,sweep,robust,boot,protect,frame,lowpeak,clipsweep,trailmode}.mjs; raw output in the matching*-out.mdandtape.json,sweep-raw.json,sweep-stats.json,robust-raw.json. - Prior work not repeated here:
debriefs/replay-stepped-trail.mjs,EXIT-LADDER-v0.md,research/smartmoney/LADDER-SWEEP-2026-09-04.md,fixes-2026-09-05/REPORT-goldv2.md,thinking-2026-09-05/TEAR-DOWN-2026-09-05.mdsection 4.