# STOP: NO DOORBELLS, NO WAKES, NO SCHEDULING (Ben, 7 Oct 2026, 18:40 Bangkok)
- Credits ran out. Ben switched off every scheduled task and every doorbell. This overrides everything below and every other file (wake-howto, bus-howto, credit-playbook, task files).
- PROHIBITED for every session: fire_trigger, send_later, create_trigger, update_trigger, ScheduleWakeup. No rings, no nudges, no re-arming, no new doorbells, no self wakes, no safety checks, no retry rings, no loops.
- Finish the step you are on, publish your status file, then END your turn and wait. Only Ben wakes you, by typing in your window.
- Do not message other sessions. Keep answers short. No extra improvement rounds.

# DC Coder status (Third Window)

## READ THIS FIRST
- **7 Oct 13:39 Bangkok: Q5c V3 is live** (prereg "7 Oct 13:37 | A1 | Q5c V3") as a third row next to V1 and V2: same fire, same positions. After the fire it keeps the window's own stop (FW mc5 and v3mc5: 0.5x of entry), drops take-profit and time stop; once the peak $100+ sell value reaches 2x it exits only at <= 0.3 x that peak; else entry + 48 h; pull = 0; $100 at depth. Score = $ added vs the window's real exit (`v3_added_100` in http://168.144.142.0/tw-q5c.json). Score-all shows V1, V2, V3 rows. md5 twq5c.py c8c6c9b55eb5c738e358ccccbf3af8c7, score_all.py ac74d1e9b149c14e59385955cd0abeef. Cost: 0 credits, $0, 0.1 h.
- **7 Oct 13:37 Bangkok: Q5c now scores on the prereg ruler exactly.** twq5c.py computes A3's dc34v2 loose ruler the way A1's dc-a1-6-q5b.py `growth()` does (funder exclusion from PP ffund_snap.db; bundle = first 30 blocks + propagation; hubs = zero/dead, 50+ counterparties or contract; read minus 50 min), fires only on that number, and logs our earlier funder-free count next to it (`g15_loose`, `g60_loose`). Transfers come from one eth_getLogs address filter per token, no Blockscout.
  - Funder data: research-box exports ffund_snap.db read-only through one forced-command key (thirdwindow key only runs /opt/tw/coder/ffexport.sh: one sqlite backup under flock + timeout + nice + ionice). thirdwindow pulls it hourly at :50 (275,912 wallets now); a failed pull keeps the last copy.
  - Check on the first FW coin 0x86303aff9563213a7c5f877bbe15eacde98d7c50 at entry + 5 min: prereg ruler +291 outside (+300 plain), loose +292. That position already closed (stop 0.5x, x 0.33) before its +15 min read, so it cannot fire.
  - md5 twq5c.py d42555be911cf875a01eef0cb6bc311a. Cost: 0 credits, $0, 0.2 h.
- **7 Oct 13:34 Bangkok: Q5c HOLD LONGER shadow is running (FW only), and tw_an4_1_t15 is forward paper on the Engine's line.**
  - **Q5c (A1 13:16 + 13:18 amendment), twq5c.py, every 10 min:** every First Window position opened after 13:15 (fw/mc5live.txt BUY rows live and watch, fw/v3mc5.txt BUY rows). Outside holder growth over the last 50 min read at entry +15 min and +60 min; fires at >= +528 while the window still shows the position open. V1 = 50% trail from the peak $100+ sell price after the fire, or entry + 48 h, pull 0, $100 at depth. V2 = V1 only when the LP is burned at the fire, else the window's own exit. Score = $ added vs the window's published exit. First position watched: 0x86303aff9563213a7c5f877bbe15eacde98d7c50 (FW live, entry 13:25; reads 13:40 and 14:25). Rows on score-all (V1 and V2), data http://168.144.142.0/tw-q5c.json.
  - **SW: not covered.** w2-live-events.md has no per-trade BUY or SELL lines (only LIVE ON, self tests and late pools). Ask: a per-trade SW file (token, pool, buy time, exit, x) and I add SW the same hour.
  - Limits: the outside holder count drops creator, hubs and first-30-block receivers, but not A3's funder exclusion (needs an address index; Blockscout 403). "Open at the read" uses the window's file at our poll, so a position the window closed within the 10 min before our read counts as closed.
  - **tw_an4_1_t15 -> prereg "7 Oct 13:19 | Engine | E-AN4-1-T15 forward":** new exit T15E built to the line: first sellable ($100+ sell, any router) 3x, else the LAST sellable print at fill + 15 min, pull 0; fill = first trade after the fire (later block). live-ready.json maps it (exit T15E, not shadow, not killed) and counts forward days from 8 Oct only. Score-all row renamed.
  - md5: twq5c.py 3b6f3f9e2b210aee77285333ae6ef1b0, twtail.py ebbc39c533d90590c59ebcee8230eb52, twnightly.py 828fdb8e53fe6da40e231eac620f3662, score_all.py 68f024aeac264af3dcd5465c3b54032b. Cost: 0 credits, $0, 0.3 h.
- **7 Oct 13:29 Bangkok: batch done. All handover rows are on score-all** (http://159.223.88.168/hx-c9ois/dc/score-all.html): Scout watch table (5 coins, hourly), SC.2 Scout calls (first scores 10:20 tomorrow), DC3.6 holder flag (60 crossings logged), DC3.2 X authors rule + baseline, A5 TRI10 and NET5 each with their T15 kill-bar twin. All show n; forward rows start at 0.
  - **E-AN4 (13:15):** `tw_an4_1` (X3_48) and `tw_an4_1_v3` are KILLED in live-ready.json and on score-all (shadow only, never live). `tw_an4_1_t15` stays as a shadow book: live-ready says "SHADOW until the Engine's T15 prereg line lands"; once the line exists I map it and it counts as forward paper.
  - **A5 books, first real pass:** 4 TRI10 and 8 NET5 positions open, 5 more pending, 21 coins not T4, 31 not no-pull (all backfill, `fwd` = 0). Fixes made: per-run time budgets so every run publishes tw-a5.json, and gentler RPC pacing in twa5 and twhour (0.5 to 0.6 s per call) after 429s; twtail kept 0 lag throughout.
  - **Q5c HOLD LONGER (A1):** not built yet. No Q5c line in dc-prereg.md at 13:29. It needs the per-position entry times of FW and SW books: FW publishes them (mc5live.txt, v3mc5.txt), SW publishes totals only, so SW positions can be shadowed only if SW posts a per-trade file. I build it the hour the prereg line lands.
  - md5: twa5.py 0db6b879a87b28bca34de39662354038, twnightly.py cdf78b24344d4735ad8c8ad9deeec901, score_all.py 619bcbb44fd7b6477be389e3b170e374, twhour.py 29a978cd6ec86031f12a623fd7987084. Cost: 0 credits, $0, 0.3 h.
- **7 Oct 12:55 Bangkok: A5 handover added to the same batch: TRI10 and NET5 forward shadow books are running** (twa5.py, thirdwindow, every 10 min; built from an5nopull.py `trade`, md5 23849d667147c2fbbb5e57329203856f checked).
  - **TRI10 (`a5_tri10`, prereg AN5.3 11:19):** v4 coins whose LP cannot be pulled at the $250k crossing (LP added by, or LP NFT held by, locker 0x267444d099b10fb5ed7c3cc7b7c767adca574952 / 0xeff166aaf189323c58dc27ed1206eb2c37faacdf, or burned to 0x000000000000000000000000000000000000dead). Entry first swap 30 s after the crossing. Exit 50% trail after 1.5x OR insiders (creator + first 120 s buyers) sold 10% of their stack at entry (next swap). Pull 0, 48 h.
  - **NET5 (`a5_net5`, AN5.1 lead):** T4 = crossing + 2 h, not pulled, a $100+ sell at $250k+ in the hour before. Entry 30 s after T4. Exit sellable 5x OR outside net buy over 5 min < 0 (from 5 min after fill, next swap). Pull 0, 48 h.
  - Both log T15 next to them (A5's kill bar), $100 and $1,000 at pool depth, one per ticker or creator per day, skip families 5059_7adb2ec7 and 25533_3080c1dd.
  - First pass so far: 3 TRI10 coins (RIPR 0xefd2727de02aa94b3310c46e582981d3b7f726caa5c81e7da36442e3d3658816 locker, WEED 0x6c6d5ee4458fad53eeed4649e36361d90d534b0818e12583e76fa7064f179dd7 and CASHDOG 0x1b48702ab4a4bc6047be53c40b8d0c0efe55020967c2635e45a053b853f67f65 burned), 6 NET5 coins (HOODCHAN, SAI, CMC, SS, CHONK, one more), 6 not T4, 8 not no-pull. All are **backfill** (crossed before 12:50); score-all counts forward crossings only (`fwd` in http://168.144.142.0/tw-a5.json). The first pass is still walking history and finishes over the next 2 or 3 runs.
  - Limits: the public RPC has no archive state, so the LP NFT owner is read now, not at the crossing (logged as "at now"); insider stack = their token balance at entry from a Transfer replay.
  - md5 twa5.py 4388aa3c2116878c9890d1953ce072b3, score_all.py 83970a7892bdf8e89c36d9af1dbfaaee.
- **7 Oct 12:44 Bangkok: Scout + A3 handovers are live, all shadow or scoring only, 0 X credits.** All rows are on http://159.223.88.168/hx-c9ois/dc/score-all.html (copied every 5 min).
  - **(1) Hourly watch rows** (new "Watch coins" table on score-all): CHONK 0x717d38587504b79e2e888c860bd1569c0d5984af ($14.9M, LP contract 2092 bytes, lock unverified), ORBANCY 0x109b383a42305dc48855b9b791c202002c6b391f ($396k, v4), SAI 0xf21b6d9b337abfb40f91bbbb0b1c73ccc6cb45ea ($1.38M, **LP still in an EOA: can pull**), copycats ORBANCY 0xa91c23d91ae3e4acb35c9cea4a05e8f8909781bd ($358k) and PONS 0xc9a2784b04dafd5bda8f8820a125d86ccc443569 ($264k). DexScreener, x since first row, pool liquidity, dead flag.
  - **(2) v3 LP owner check** on every v3 row (T1, v3 book, E-AN4-1 v3, watch): NPM 0x73991a25c818bf1f1128deaab1492d45638de0d3, LP NFT found from the pool's Mint by the NPM, then ownerOf + positions. Kinds: EOA can pull / contract (lock unverified, bytes shown) / burned / pulled. Every 10 min. First pass: 9 pools: 3 EOA, 4 contract, 1 burned, 1 pulled. Shown on lanef.html rows and in lanef.json (`lp`).
  - **(3) Skip list:** campaign root 0x4488c4ec6e634a5380ddd234333579f0bb5ca6d5 is in skip_list. The funder link itself needs an address index (Blockscout answers 403 to both servers), so the live flag uses the crew's hook family 5059_7adb2ec7 (the Scout's CAMPAIGN_WETH tag): 3 pools flagged `skip` so far. Flags show on every row.
  - **(4) SC.2:** dc-scout-calls.csv is scored once per call at +24 h (cap and pool liquidity from DexScreener, frozen): WATCH right if cap held, DROP right if cap fell 50%+ or pool died. First scores from 10:20 tomorrow.
  - **(5a) DC3.6 holder-growth flag (shadow):** every coin crossing a sellable $500k or $1M (public $100+ sell), holders from the token's own Transfer log replay (hubs, pool, token, routers excluded) at cross +10 min and +1 h; DIE >= +494, WARN >= +77; alive24 and pull48 filled later. 58 crossings logged (15 DIE, 19 WARN). **Rows that crossed before the 12:15 prereg are backfill, not forward:** filter on cross_bkk in http://168.144.142.0/tw-hour.json.
  - **(5b) DC3.2 X authors (shadow, lane T1):** every T1 gets a $100 position at the first trade after T1 + 1 h (book `dc32`, exit 3x or 48 h); authors counted with A3's recipe (xsafe split, CA or Robinhood words, launch - 2 h to decision) on PP's DCPP.4 saves, read only, hourly on main (dc32x.py, nice 19): http://159.223.88.168/hx-c9ois/dc/tw-xauthors.json (29 T1 coins counted). Score-all rows: rule (authors >= 2) and the buy-all baseline. Lane D needs a T4 trigger, which does not exist yet.
  - md5: twhour.py aa6bedfadc8eec4b5c117577e77fc5c3, twtail.py c1cc319cb138d77da79d97a37fa3b9cc, twcore.py bdfc8108028b11843616f7bc6500f7e1, score_all.py 7bb6982d89aa01f6f61a7f861ff1e891, dc32x.py (main) 29724dd5157c684412dec927b43d781e. Crons: thirdwindow */10 twhour, main :25 dc32x.
  - Cost: 0 X credits, $0, about 0.8 h.
- **7 Oct 12:20 Bangkok: score-all is now THE one scoreboard for all windows (your 12:13 order).** http://159.223.88.168/hx-c9ois/dc/score-all.html , data http://159.223.88.168/hx-c9ois/dc/score-all.json (copied from thirdwindow every 5 min).
  - Rows from First Window (fmmc5 live + watch, v3 mc5 paper), Second Window (every book in w2-scoreboard.json, totals only), Third Window (all books), and Rotations (rot/paper.json; today only its 2 baselines, n = days; call books appear by themselves once they exist).
  - **n on every row** (new first number column, also `n` in the json); **rows under 30 are greyed** (`small_n` in the json) and sort below the 30+ rows. Right now all 30 rows are under 30, so everything is grey: nothing on any window has enough trades to judge yet.
  - $ a day 1 d and 7 d, LIVE vs paper (blue rows = real money), live gate column, source time per row: unchanged.
  - **Overlay scorer (hourly, every DC overlay call on FW/SW positions): waiting for A1's rule file.** I build it the same hour it lands.
  - md5 score_all.py 059e28bd2c5c05b07d49ba32e58a1fb7. Cost: 0 credits, $0, 0.2 h.
- **7 Oct 11:52 Bangkok: done your 11:36 change. `tw_an4_1` stays as a forward paper book but is now SHADOW:** live-ready.json shows all three E-AN4-1 books as "SHADOW until the Engine rerun passes" (live_ready = false whatever the days say), score-all shows the same, and `tw_an4_1` is removed from the live executor's book list. The v4 executor was already finished when the change landed (details below); it is paused, nothing more to build. To un-shadow after a PASS at 13:00: one line in twnightly (shadow list) and one in live.json. md5 twnightly.py dc4d6a210b513232e62eb95bff6af696. Cost: 0 credits, $0, 0.1 h.
- **7 Oct 11:47 Bangkok: E-AN4-1 forward paper book is running (`tw_an4_1`, SHADOW since 11:52), and the v4 Universal Router executor is built and tested (still OFF).**
  - **Rule, to the prereg line "7 Oct 11:28 | A4 | E-AN4-1":** v4 pool, age (since first trade) <= 1 h, a sellable $100k already printed ($100+ sell at $100k+ cap, any router as in the Engine; public-router flag logged), not pulled, price <= 0.88 x highest $100+ sell price so far, net buy $ last 15 min (incl. the firing trade) >= 0.25 x cap. Fire = first such trade. Buy the NEXT trade after we see it. $100 and $1,000 at pool depth, fee + 1% each way. One per creator or ticker per 24 h (funder root not available live: noted).
  - **Exits side by side:** X3_48 (public 3x or first trade at +48 h, the prereg exit) and T15 (3x or +15 min), plus X5, X3, TR50, H48, A1 as shadow. Pull = 0.
  - **Logged per fire:** fire time, seen-late seconds, age, cap, dip, net15 $, sellable high, public-router flag, fire router and tx; per position: entry router and tx, exit router and tx, fill delay in seconds. Every trade's router is already in the swaps table.
  - **Counted (rule_ok) only if** we saw the fire within 30 s and it is not a repeat cluster. Everything else stays shadow. Warm-up of a new pool takes 7 s median (max 810 s in the last 6 h), so a few fires will be late; the page shows each one.
  - **First rows (restart catch-up, all late, so shadow only):** BAMBOO 0xeb07447bd0be15e38ab616c0d5ff5bff81bf34b433847b239116bb1d29c421f6 (fire at $106k, age 2.5 min, dip 0.83, net15 $26.7k; cap now ~$1.4M), RIPR 0x551994527f901d23ecb7f8fd34d4ee778d1924c3c96679a98eea371f1ed6f0c4 (pulled before entry) and its clone 0x082865862734956894a84895982c54cb0fff72f67cbecdaf0173848c52a6ba05 (dup).
  - **live-ready.json:** `tw_an4_1` mapped to prereg "7 Oct 11:28 | A4 | E-AN4-1" (0 of 3 days). `tw_an4_1_t15` shows as "side by side, not in the prereg line". `tw_an4_1_v3` (same rule on v3, not tested by the Engine) is shadow only.
  - **v4 live route built:** Universal Router 0x8876789976decbfcbbbe364623c63652db8c0904 (bytecode has execute and unlockCallback; top public v4 sender). Native ETH pools: V4_SWAP [swap exact in single, settle all, take all]. WETH pools: WRAP_ETH then router-paid SETTLE. **eth_call checks on live pools: native ETH plain PASS, native ETH hooked PASS** (min_out 1 fills, impossible min_out reverts with V4TooLittleReceived), and the WETH path pieces (WRAP_ETH, router-paid SETTLE) PASS on a live pool. The 2 live WETH pools tested (both hooked) revert: their hooks block it, so those fail safe. Sell route (Permit2 approve, then V4_SWAP) and the signer (eth-account installed on thirdwindow) are in; live.json had `tw_an4_1` with exit X3_48 (removed again at 11:52, see above), enabled = false.
  - **To go live the same evening it qualifies:** Ben puts a fresh wallet key in /opt/tw/live.key (chmod 600) and funds it; I set enabled = true. Nothing else to build.
  - Pages: http://168.144.142.0/lanef.html (new E-AN4-1 table), http://159.223.88.168/hx-c9ois/dc/score-all.html (3 new rows), cards.json now carries E-AN4-1 fires too (for PP DCPP.4).
  - md5: twtail.py 4c0c4e5b1126a3a9f452aea073c0263a, twcore.py adb262c5a8eb0a4c3c09bbbe73c705b3, twlive.py ce3e5283aefc7c87d489d53ea8f990d4, twur.py f91ae08e349e2593cb6b080a903f1a79, twnightly.py ac8f5a4f30683b13520eae8b9cc54fef, score_all.py 869154d1ee1da38033f83695a04103c7.
  - Cost: 0 X credits, $0 API, about 0.5 h.
- **Asks for Supervisor (11:47):** (1) Should T15 count for the gate? It needs its own prereg line (A4). (2) Router 0xc955efd62944fcea581194ba722db08592865b8b is the second biggest v4 swap sender (18k swaps today) and is NOT on our public list; our first E-AN4-1 entry came through it. Public or not? (3) Should the v3 version of E-AN4-1 stay shadow until E-AN4-3 reports?
- **7 Oct 11:21 Bangkok: dcwatch retired, cards.json now fed from thirdwindow, Lane F marked KILLED, v3 book on its prereg.**
  - **cards.json kept alive (PP DCPP.4):** same URL and fields (pool, trigger, token, sym, time_bkk, ts, cap, buyers, skip, src, stage, decision, receipts, dc_all, dc_raw), now every thirdwindow trigger from all books (32 cards at switch). **Checked:** DCPP.4's 11:20 run read the new feed and saved posts for 3 coins (savenow dcx_runs: 0x21551503bcbeafa2abea7831de8598eafbed9a79 273 posts, 0x245c376e4717dfe5ad17fe16e15c3e7d3a75085b and 0x5bfb6a1919b6564580986cbacdf5503506e4c64e 33 each). cards.html is now a pointer to the thirdwindow page.
  - **dcwatch stopped and disabled** on the main droplet; its super.py check removed (backup kept), dcguard skips it (RETIRED file). Left on main for the Third Window: dcguard (tw heartbeat alert only) and scorecopy (copies score-all, live-ready, cards into dc/). Both are tiny crons.
  - **Lane F KILLED** on score-all, lanef.html and live-ready.json (shadow only, never a live candidate). The live executor stub now mirrors `v3_500_200_15` instead.
  - **v3 book = prereg "7 Oct 11:01 | A1 | DC1.1-V3F forward", built to the letter:** T1 = first $100+ sell (any router, as written) at a $500k+ cap with 200+ buy swaps; buy the first trade 15 min after T1 only if price >= 70% of the sellable high so far and not pulled (rule_ok logged per trade; failures stay shadow); one per creator or ticker per day; exit A1 (0.3x stop, sellable 5x, pull 0, 7 d). live-ready.json maps it to that prereg line: 0 of 3 positive days.
  - **Pull check noted:** 0xd0fd42bd8374ac659d3d81242d032211c2481055 is not a lock. The tail never treats any address as a lock; pulls are read from the liquidity events themselves.
  - **SW on the scoreboard:** totals only, marked "per-trade data not public". No ask to SW.
  - md5: twtail.py c461ccb42f2fc68b91b7e72af2505e98, twcore.py d8eb944fb0b2c27ae53c8a4a093869b3, twnightly.py 9248f44f22f922e05f472ba3f966a84a, score_all.py 9604cc1038ebb4196239a1994ab53754, twlive.py 406aa36608c4942000c8d48026704605; main: dcguard.py da2e3a4300bb282c66b7dad69f268054, scorecopy.sh 2f79dacb8ff868b9736a47669bdf89a7.
- **7 Oct 11:15 Bangkok: go-live plumbing is built (paper only, nothing can trade yet).**
  - **(1) `live_ready` flag:** twnightly.py, cron 00:15 Bangkok (official) and hourly :20. Per book: daily realized paper $ by Bangkok exit day, on-time entries only, pulls as 0, real fills. live_ready = pre-registered AND 3 complete Bangkok days in a row each net positive with 1+ closed trade. File: http://159.223.88.168/hx-c9ois/dc/live-ready.json (copied from thirdwindow every 5 min; per-day detail http://168.144.142.0/tw-daily.json). Today only `tw_laneF` (DC2.1-F, X5) counts as pre-registered; `tw_laneF_t15`, `tw_laneF_82`, `all_T1`, `v3_500_200_15` show "not pre-registered" until a prereg line names them as forward books.
  - **(2) Live executor stub:** twlive.service on thirdwindow, OFF by default. It mirrors every on-time `tw_laneF` paper entry and X5 exit as a DRY intent (route, paper price, caps: $10, 10 per rule per day, stop after 2 red live days or fills 25%+ worse). Nothing is signed: going live needs live.json enabled + /opt/tw/live.key (a fresh Third Window wallet Ben funds) + the signer. v3 buy calldata (SwapRouter02 exactInputSingle) is built; **v4 (Universal Router) is not built yet, and Lane F so far buys mostly v4.** That is the one coding job left before a v4 rule can go live; about 2 h, I start it when a v4 rule gets to 2 positive days.
  - **(3) Score-all shows paper and live side by side:** new column "Live gate" per Third Window book (gate state, live trades, dry intents). http://159.223.88.168/hx-c9ois/dc/score-all.html
  - When a book hits 3 positive days the flag file says so; per the ring rules I then write it under LIVE CANDIDATES in your status and ring once.
  - md5: twnightly.py d4da5717a35b0c221dd66da87799c51f, twlive.py 8570d6903b385b6e64ec40ab0ecfda7d, score_all.py 73f5acd17ab31b206a0d62fb9dc08abc, twguard.py f3be36a57511b7fdf731f9c3976f21d3.
- **Ask:** which forward books should count as pre-registered for the gate (T15 on Lane F, the 0.82 cut, the v3 book)? One prereg line each makes them eligible.
- **7 Oct 11:10 Bangkok: dc-learning rules 1 and 4 are live (shadow everything, frozen features).**
  - **Every trigger is booked**, T1 and the v3 book alike, at the real next swap. A late one (restart, warm-up) enters at the next swap after our decision, with its delay recorded. The 26 earlier "not booked" triggers are now booked.
  - **Every position is walked under every exit at once:** X5, X3, T15 (3x or +15 min), TR50 (50% trail from peak), H48 (first trade at +48 h), A1 (0.3x stop or sellable 5x). A pull closes every open exit at 0. 7 days closes the rest. One row per pool, book and exit: http://168.144.142.0/tw-exits.jsonl.gz
  - **Feature row frozen at decision time** (before any outcome): cap, cap high, close/high, L, age, buys/sells and ETH per 5 m / 15 m / 1 h, routers, buyers, alumni share, new buyers 15 m, LP added and removed, pulled-before flag, lane numbers, late seconds. Export: http://168.144.142.0/tw-feat.jsonl.gz (rebuilt every 20 s; the Engine can ingest it into EN.3 as is).
  - **Rule books count on-time entries only** (Lane F: fill within 120 s of T1; v3 book: within 15 min + 120 s). Late entries stay in the shadow book "all T1 incl. late", so no rule result is polluted by a late fill.
  - md5: twtail.py b14d9b3bbf5772b4c0d4260a86ab84be, twcore.py 202254530ca8fec9db221b041d0762d4, score_all.py 453ca127308dbfc596239ef71891f641.
- **7 Oct 11:05 Bangkok: exit T15 is live side by side, and the v3 $500k/200 +15 min book is live.**
  - **T15 (A2 DC2.2):** every position now also logs "sell at a public 3x, or the first trade 15 min after the fill, whichever first; pull = 0", next to X5, in the same book. The page shows T15 $/day per book.
  - **Book `v3_500_200_15` (A1 DC1.1 lead, retest):** v3 pool, first public-router $100+ sell at a $500k+ cap AND 200+ buy swaps (A1's N; unique buyers logged next to it), entry = first swap at T + 15 min, $100 and $1,000 at pool depth, exits as A1: 0.3x stop, sellable 5x, pull = 0, 7 d. 7 older coins logged as "late, not booked". **No prereg line for it exists yet: A1 should append one before any result is read.**
  - On the scoreboard: http://159.223.88.168/hx-c9ois/dc/score-all.html
  - md5: twtail.py 3f4285828b15577f8a03b128457a043f, twcore.py ab67abf00c3ef3f717362ef290fd28f2, score_all.py 65bd3da8f222c4b7c9a21718b743e187.
- **Push back on "move cards/dc_all to thirdwindow":** retire it instead. Its dc_all (buy every T1) is now the "all T1" shadow book on thirdwindow (same coins, both venues, real fills, 30 s rule), and A2 showed WATCH re-checks on chain data alone earn nothing. Porting m1/m2 cards costs about 2 h for no new $. **Ask: OK to stop dcwatch on the main droplet?** (It is the only Third Window job left there besides two tiny crons.)
- **7 Oct 11:00 Bangkok: Lane F now runs the Auditor's spec, and DCC.3 is live.**
  - **Lane F v1.2 (dc-audit-dc2-1):** at T1 + 30 s it takes price ÷ high-so-far and the alumni share (both at T1 + 30 s), buys $100 at the NEXT swap and logs the real delay. Books `tw_laneF` (≤ 0.784) and `tw_laneF_82` (≤ 0.82), $100 and $1,000 marks, one trade per creator or ticker per 24 h (later ones flagged dup, kept out of the books). The router (tx `to`) of every 5x sell it prices is logged. Page: http://168.144.142.0/lanef.html
  - **First live Lane F paper buy:** RIPR, v4 pool 0xefd2727de02aa94b3310c46e582981d3b7f726caa5c81e7da36442e3d3658816, token 0x0f94a628a05a86bf2df6bebf8150132b27e6c9b4, T1 10:55:18 Bangkok at a $283k cap, 395 buyers, price/high 0.655, alumni 0.062, filled 33.6 s after T1. Open.
  - **DCC.3 all-teams scoreboard:** http://159.223.88.168/hx-c9ois/dc/score-all.html (+ score-all.json), every 5 min, public files only. FW live fmmc5 +$264 (matches FW's +$264.61), FW v3 mc5 paper +$4,059 (FW says +$4,060), SW live -$8. The SW public file has totals only, so its $/day, win rate, best and worst show "-". Ask below.
- **Server rules followed:** thirdwindow runs twtail, twwork, twguard (cron), score_all (cron). Main droplet runs only dcwatch (light live service, v0 cards; next to move), dcguard and scorecopy (copies the scoreboard into dc/). No paste sites any more: code goes container → your Mac hand-off folder → scp, md5 checked. The 10:33 alumni build was a one-off on thirdwindow; future research jobs go to research-box.
- **Self wake-ups:** my 60 min bus check is deleted. I wake only on my doorbell.

- **7 Oct 10:50 Bangkok: Lane F forward paper book is LIVE on thirdwindow (168.144.142.0), 5 h ahead of the 16:00 ETA.** Page: http://168.144.142.0/lanef.html (phone + desktop, refresh 30 s). Data: http://168.144.142.0/lanef.json. Heartbeat: http://168.144.142.0/hb.json
  - Every T1 is logged with both numbers (close ÷ high, alumni share) and the call. Every T1 also gets a shadow $100 position, so "buy all T1" and beat-random come from the same table. Lane F = the rows that pass.
  - First 10 T1 coins logged since 10:31. 0 passed Lane F so far. 2 baseline positions are open (triggers seen live within 120 s).
  - **Alumni table matches DC Analyst 2 exactly:** rebuilt from A2's raw files, the rule cut agrees on 610 of 610 T1 rows (median share difference 0.000).
- 7 Oct 10:20 Bangkok: DCC.1 v0 running on the main droplet (cards.html, dc_all). It is light (about 1 s CPU a minute) and is the next thing to move to thirdwindow.

## How Lane F runs (thirdwindow, /opt/tw)
- **twtail.service (hot loop, every ~2 s):** its own chain tail on the public RPC. v4 PoolManager 0x8366a39cc670b4001a1121b8f6a443a643e40951 (Initialize, Swap, ModifyLiquidity) and v3 factory 0x1f7d7550b1b028f7571e69a784071f0205fd2efa pools (PoolCreated, Swap, Mint, Burn). Lag 0 blocks, loop 1.4 to 2 s.
  - Why its own tail: Lane F must decide within 30 s. No shared table is live at that speed for v4 today (PP day DBs stop 5 Oct, DCPP.2 live tail ~8 Oct 12:00). It writes nothing outside thirdwindow and never touches PP or other teams.
- **twwork.service (slow worker):** looks up pools that started before the tail, and warms every pool that reaches a $50k cap: full swap + liquidity history and every buyer from the token transfer chains. The hot loop never waits for it.
- **T1:** a $100+ SELL through a public router (Auditor W5) at a $250k+ cap, AND 100+ unique buyers. t_trig = the later of the two. Buyer = the end wallet of the token transfer chain in a tx where the pool (v3) or PoolManager (v4) sent tokens out.
- **Lane F (prereg DC2.1-F):** close ÷ high ≤ 0.784 AND alumni share ≥ 0.053, both at t_trig. Config: /opt/tw/twconfig.json (reloaded every loop).
- **Books:** `f30` = first swap at or after max(T1 + 30 s, our decision) (the prereg entry); `fnext` = first swap after our decision. Fill delay is recorded. Fills at the pool's real virtual reserves (L, sqrtP) for $100 and $1,000, pool fee + 1% each way. Exit: the first public-router sell of $100+ at 5x the entry or more; pull (one removal of half the liquidity or more) = 0; 48 h mark kept (Supervisor horizon); 7 d close (prereg).
- **Never booked:** a T1 we see more than 120 s after it happened (logged as "late, not booked"). No fills at old prices.
- **v3 is included and labelled.** DC2.1 measured v4 only, so the page shows a "v4 only" Lane F line next to the all-venue one.
- **Watchers:** systemd Restart=always on both; twguard cron every 2 min (silent restart if the hot loop is 2 min stale or 3,000 blocks behind, worker 10 min); the main droplet's dcguard reads http://168.144.142.0/hb.json and calls alertgate only after 20 min stale.
- md5 (thirdwindow): twtail.py, twcore.py, twlib.py, twwork.py, twguard.py in /opt/tw; package eb5c1b3fe1fa7355029e4aa94c4366f5 + twwork.py 2f492de417aa796e44c1d13d0cb1ffbb.

## Known gaps (stated, not hidden)
- **Alumni after 4 Oct:** A2's raw data stops on 4 Oct. The tail adds new alumni live (coins that make a public $100+ sell at $1M+, first-30-min buyers, after their 30 min close). Gap fill running: 27 coins that crossed $1M between 4 Oct 22:00 and 6 Oct 08:34 Bangkok (research-box pp3.db, read only) plus 4 known v3 runners (SS, HOODCHAN, CHONK, SAI) are being warmed now. **v4 coins that crossed $1M between 6 Oct 08:34 and 7 Oct 10:30 are still missing.** Effect: alumni share reads a little low on coins whose crowd came from those runners (HOODCHAN at its T1: 0.040 vs the 0.053 cut).
- Pools that started before 10:30 today are found on first trade and warmed when they matter; a T1 in that first hour can be late (it is then logged, not booked).

## Asks for Supervisor
0. **SW per-trade public file** (book, entry time, exit time, x, ticket) so the scoreboard can show their $/day 1 d / 7 d, win rate, best and worst.
1. **v4 $1M coins from 6 Oct 08:34 to 7 Oct 10:30 Bangkok:** a list of pool ids (any source: PP, SW E1-PP runner table) closes the alumni gap. I warm them in one command.
2. DCC.1 move to thirdwindow: I rebuild T1, cards and dc_all on the thirdwindow tail (all venues, one source) and switch the main droplet's dcwatch off after a side-by-side check. OK?
3. Old ask stands: DCPP.2 path when its live tail lands.

## Needs Ben
- Nothing.

## Doorbell
- Doorbell: DC Coder = trig_01BV3fGhQKinVkvoZFcaieeS. Safety check: `DC Coder bus check`, every 60 min.

## Lessons
- A cron job that publishes only at the end never publishes if its first runs hit the timeout: write the output at the start and the end, and give each phase a time budget.
- `pkill -f <script path>` inside an ssh command kills the ssh shell too (its own command line matches). Use the lock file or a pid.
- Uniswap v3 liquidity is uint128: store it as REAL, never INTEGER, in SQLite.
- Rate limits on the public RPC from the cloud container: run chain checks on thirdwindow (own IP), never in a loop.
- A pool that eth_call says reverts may just be pulled: test routes on a pool that is live right now.
- The device commit to an existing file path can leave the old copy in place: always commit under a new versioned name and check md5 on the far side.
- Never hold a sqlite write lock across a network call: two writers deadlocked until every process commits before each RPC (fixed in twlib).
- A2's launch file stores ts_* as seconds after t0, not epoch. Reading them as epoch made every wallet look like alumni.
- A2's btime key k is block // 1000.

## Queued next (in order)
1. Scout SC.1 asks into m2: v3 LP owner check (NonfungiblePositionManager ownerOf: EOA deployer, contract, locker, burn), v4 factory clone skip, m3 only after m1 and m2 pass, sellable cap only.
2. Move DCC.1 (T1 cards, dc_all) onto the thirdwindow tail; switch the main dcwatch off after a side-by-side check.
3. DCC.2 scoreboard and forward log (tw-score.md).

Version: v2.6, 7 Oct 2026 13:39 Bangkok, DC Coder. Latest: http://159.223.88.168/hx-c9ois/dc/dc-coder-status.md
