---
name: buy-framework
description: BUY FRAMEWORK v1 to v3 (3 Oct 2026, v3 = xsafe scam filter + sentiment by drawdown stage): the tested "is this a buy" check for Robinhood Chain and Solana memecoins, built on Ben's sentiment cycle idea (euphoria, anger, depression) plus price and volume; rules, receipts, live script URL. Read before any buy verdict on a pasted coin.
sources: [cowork]
aliases: [buy framework, buyscore, is it a buy, sentiment cycle, depression stage, wall street cheat sheet]
---
# Ask
- [stated] 3 Oct 2026: Ben wants a framework that says if a coin is a buy when he sends it, using buy vs sell volume and sentiment (X, LunarCrush), the Wall Street cheat sheet read (euphoria online = top; anger = not the bottom yet; depression = "dead / over" talk with much lower volume = bottom), counter-trading crypto Twitter, combined with the other Pro Trading sessions (Bottom Lab, macro light, Price Predict, rotation risk on/off). Focus Robinhood Chain and Solana. 50 iterations, test on all coins, blind tests.

# Data
- [stated] runtrack universe exported from the droplet (runtrack.db, 1,732 coins that crossed $500k; dead coins included: 74% of old RH coins and 44% of old Solana coins now under $300k): public copy http://159.223.88.168/hx-c9ois/fw/runtrack_export.json.gz (md5 9a41f7d02b2b267455a0a2f6b6f140ef).
- [stated] 817 coins with hourly candles, events every 2h after the $500k cross, floor mcap $300k and $20k 24h volume; label = sell 2x / stop -50% / 14 days / 3% costs (complete windows only). Fair benchmark: a random walk hits 2x before -50% one time in three.
- [stated] X: twitterapi.io, 20 latest posts with the contract before the event and before event minus 72h; 2,011 train/test snapshots + 363 blind; about 4,700 calls.
- [stated] Blind set: 63 coins never used in training (stonk.fun graduates over $500k peak and 7 Sep RH snapshot coins not in runtrack), candles from GeckoTerminal.

# Findings (one trade per coin, first signal)
- [stated] DEPRESSION BUY: coin 70%+ under its ATH, ATH 3+ days old, X quiet (contract posted at most about once a day: rate <= 0.045 posts/hour). Out of sample (test + blind, 36 coins): EV +25% per trade, halved only 19%, 2x 39%; random first event EV -2.5%, halved 47%. Train: +16.5% vs deep-only -6%.
- [stated] Adding a trigger (price within 1.3x of the 72h low or RSI 1h < 45) and no chain knife (chain basket 7d > -40%): out of sample 23 coins EV +30%, halved 13%.
- [stated] ANGER: same deep dip while X is still busy or angry: EV -6%, halved 60% (worse than random). Deep dip alone: EV -4%, halved 52%. So depth is not the signal; the crowd going quiet is.
- [stated] EUPHORIA (near ATH, X posting rate up 2x+ in 3 days, 30%+ bullish words): next 7 days mean log return -0.47 vs -0.12 for other near-ATH moments (n=25). Use as no-buy / trim.
- [stated] Price-only coin features (not chasing +38%/24h, near 72h low, RSI low, ATH old, volume decayed) are consistent in all 4 chain x time cells but weak once combined (out of sample about +0 to +0.1 in hit rate); price and volume alone cannot time the bottom (agrees with [[bottom-timing]]).
- [stated] Despair word lists ("dead", "over", "cto") did not help; post RATE (quiet) is what works. LunarCrush covers only bigger coins and its sentiment score sits at 75 to 90% always: use only its mentions and creators vs daily average.
- [stated] Robustness: 86% of 43 threshold variants (depth 60 to 80%, ATH age 1 to 7 days, quiet cut quarter/third/half) positive.
- [stated] Caveat: out-of-sample n is small (36 coins); regime matters a lot (RH August bull vs September bear), so keep the macro light and chain fee state as the gate.

# Live tool
- [stated] Script: http://159.223.88.168/hx-c9ois/fw/buyscore.py (md5 000e29249d5dbe2b9766af63cf930b85). Run: TWAPI_KEY=<key from research-sources skill> python3 buyscore.py <contract>. Output: STRONG BUY / BUY / BUY (small) / WAIT (ANGER STAGE) / WAIT / WAIT (TOO YOUNG) / NO BUY (EUPHORIA / CHASING), with receipts. Two X calls per run.
- [stated] First live reads 3 Oct 14:00 Bangkok: BOT NO BUY (chasing, +93% 24h), MOO WAIT anger stage (8.2 X posts/hour), SI WAIT (37% under top), INU WAIT anger stage, CASINU too young.

# v2 round (3 Oct 2026, Ben's follow-up: quiet relative to coin size and to the top; golden pocket redo with wick/close rules; confluences; sentiment history)
- [stated] Ben: quiet should be relative to coin size / to the volume and chatter at the top; golden pocket = rough buy zone 0.618 to 0.666 (0.5 only in very bullish coins), wicks below fine if no 1h (and no 4h) close under, stop about 0.75, target ATH; test OB in the pocket, RSI oversold per timeframe (15m, 1h), MA100/200, divergence, buy pressure switch, holder increase; use X history (PONS through anger and depression) and check LunarCrush.
- [stated] Relative quiet FAILED: X post rate down to 20% or less of its rate at the ATH = EV -17% (63 coins, halved 68%); that is a dying coin. Absolute quiet beats busy in every market cap band (<$1M, $1M to $3M, $3M to $10M, $10M+), so it is not a size artifact; quiet per $1M of market cap (bottom third) also works out of sample (+21%, 26 coins). Keep absolute quiet.
- [stated] Golden pocket (965 coins, 3x+ pump legs, first touch, target ATH retest, 30 days, 3% costs): 0.618 touch alone EV -2% to -5% with every stop style (1h close under 0.666, 4h close under 0.666, touch 0.75, 1h close under 0.75 best at -2%, win 32%). Smooth curve with depth: 0.5 -12%, 0.7 +8%, 0.75 +15%, 0.8 +24% (1h close under the next level as stop). Confirmation entry (1h close back above) -4%.
- [stated] What lifts a 0.618 touch: 1h order block inside the zone +18% (n=269, vs +1% without), buy volume shifting to green candles in the last 6h vs 24h +19% (n=131, positive in all 4 chain x time cells), X quiet at the touch +12% vs busy -3%; OB + X quiet +28% (n=67); OB + buy shift without RSI<25 +29% (n=42). OB lifts fake levels too, so it is general support, not pocket magic.
- [stated] What does NOT help at the pocket: RSI 1h < 25 -34% (knife), 15m RSI < 25 -15%, 4h RSI < 30 too rare; bullish divergence entries (1h n=242 -2%, 15m n=49 -12%); MA100/200 near the zone weak (+6% vs -1%, mixed cells). Holder history not available for backtest (rh_flow only recent).
- [stated] Sentiment history case study (X every 12h, $TICKER or contract): MOO sat at 0.1 posts/hour for weeks (3 to 20 Aug) before its 200x+ run; HOOKR 0.2 to 0.5/hour with angry posts mid Aug before its run; PONS peaked at 72 posts/hour at the top (5 Sep) and is still 15 to 25/hour at -55%, never quiet; ZCAT 38/hour at the top, 6 to 19/hour at -78%. Bull/angry/despair word shares barely move; the posting rate is the signal.
- [stated] LunarCrush (MCP): covers mid RH coins (HOOKR, PONS, MOO) with daily posts, creators, interactions, but limited mode gives only about 30 days and its sentiment % sits at 72 to 91 always; fine for a live check of posts vs 30-day peak, not for backtests.
- [stated] Script v2: http://159.223.88.168/hx-c9ois/fw/buyscore.py md5 00305addf736fbb2729d41a1c4b63c1c adds the golden pocket module (BUY (GOLDEN POCKET), BUY small, WAIT knife in pocket, WAIT no helper) and refuses a verdict when X fails (a failed X call read as "quiet" gave a false BUY on MOO 3 Oct 14:35).
- [stated] X COST: twitterapi.io search with 20 posts costs about 180 credits; this session's ~15,000 searches emptied the shared balance (2.65M to -44,790 credits, about $27) at 14:35 Bangkok 3 Oct, which also stops x-alert, xdeck, followwatch, casig and trench. Rule: check /oapi/my/info before any X batch, cap at a stated credit budget.

# v2.1 (3 Oct 2026 15:10 BKK: spam filter + read the mood, live test)
- [stated] Ben: use APIs efficiently; exclude spam and scams from volume and sentiment; no keyword counting ("angry", "dead"): read what people say and judge the feeling (complaining, frustrated, depressed); depressed or given-up holders stop posting.
- [stated] Spam audit of 132k stored X posts: 39% spam (shill accounts on 10+ coins 14%, no human words 12%, templates on 3+ coins 9%, campaign 2%, scam 2%). Live 3 Oct: contract searches are 45% to 100% spam (MOO 20/20, ZCAT 20/20, SI 19/20, AI 16/20, PONS 9/20); phishing uses Cyrillic look-alike letters and hidden characters ("Sсanned", "reward page", "wallet trail", "holder lookup") and now gets caught.
- [stated] Mood read on 872 dip snapshots (spam removed, read by meaning not keywords): hopeful after a dump EV -11.8% (halved 61%, n=637); euphoric -31.8%; frustrated -8.6% (deep -28%); neutral +12.3%; promo only +6.1%; resigned n=2 (people who give up stop posting); 0 to 1 humans +13.4%, 6+ humans -17.6%.
- [stated] Quiet test after spam removal (TEST+BLIND): all-posts quiet + deep +24.9% (36 coins, halved 19%) stays the best; humans-only quiet + deep only +6.7%; humans quiet but spam busy -17.9% (full sample -32.8%, halved 70%) = NO BUY (SPAM-DRIVEN); humans busy -8.4%. So the quiet cut stays on ALL posts; QUIET_RATE corrected to 0.035/h (v2 file had 0.045 by mistake).
- [stated] Humans post with the TICKER, bots with the CONTRACT: contract search for the rate (as tested), one extra $TICKER search only to read the mood (short tickers like $AI, $SI mix other coins).
- [stated] Live 3 Oct 15:05 BKK: PONS WAIT anger (27 posts/h, Binance/Wintermute blame, "lost $100k", "has to be bottom?", "ATH in 30 days"); AI WAIT anger (hopeful: "time to accumulate", "$1 soon"); ZCAT NO BUY spam-driven (79% down, humans on ticker hopeful: "bag stays on, trust the plan"); MOO NO BUY spam-driven (84% down, 0 humans, 20/20 spam); HOOKR WAIT (28% down, RSI 80); SI WAIT (40% down). Nobody in the depression stage.
- [stated] Live bug caught: X once returned 0 posts for SI's contract a minute after returning 20 (would have read as "silent 9999h"). Fix: the "until now" search must hold at least as many posts as the 3-days-ago search, else retry once, else NO VERDICT.
- [stated] Cost measured: about 150 credits per 20-post search; one buyscore run = 3 searches (~450). Script checks /oapi/my/info first and skips X under 1,000 credits.
- [stated] Script v2.1: http://159.223.88.168/hx-c9ois/fw/buyscore.py md5 00612f3853609905f2f2ae7ad8f7dddd, spam lists http://159.223.88.168/hx-c9ois/fw/spamlists.json md5 83133505461048b0256fd07af34c58e3 (284 templates, 220 shill accounts). Prints the real-people posts for Claude to read the mood; no keyword scores.

# v3 (3 Oct 2026 16:00 BKK: xsafe + stage study). Full write-up: project doc claude/sentiment-system.md
- [stated] Ben: one scam filter for all sessions and tools forever (don't pay for or count scam links, bots, scam call channels; legit callers fine); doubted "zero people talk about MOO"; wants per hour / per 4h volume and mood vs previous windows, mapped at top and each drawdown stage, then buy vs no-buy patterns; tell all sessions; no word counting.
- [stated] MOO "0 real people" was a sampling error: the latest 20 contract posts were all vote farms + claim phishing. With query exclusions: 16 real people on 2 Oct (LONG vault news, traderpow 218k followers call), 2 on 3 Oct.
- [stated] twitterapi.io returns 0 posts silently when the query is over ~512 characters (measured).
- [stated] xsafe live: /opt/common/xsafe/xsafe.py (v1.1 md5 b03b7bc1fc2b08603d4cfb64556f7633), hook /opt/common/xsafe_hook.py loaded by /usr/lib/python3.12/sitecustomize.py (backup in /root/sitecustomize.bak-*), xstatus cron every minute, xsafe_learn hourly; public xsafe.py, xsafe_store.json, xstatus.json under http://159.223.88.168/hx-c9ois/fw/. Exclusion terms each removed spam and ZERO real posts on 132k stored posts.
- [stated] Stage study (606 coins, mood read on 1,514 windows): silent (no real person 12h) beats talking at every depth, both halves, both chains, every size band (median 7d at 70% down: silent -21% vs hopeful -58%, euphoric -79%, frustrated -79%). Resigned posts under 1% at every stage: giving up = silence. Hope stays ~32% at every depth; euphoria 15% at ATH to 6% at 90% down.
- [stated] Buy pattern: 90%+ under ATH (ATH 3+ days old) + no real person posting the contract 24h + trading volume <=20% of peak day: median 7d +8%, mean +21%, 2x before -50% 71% (31 coins). No-buy: people talking with hope/excitement/anger; people returning after silence with a 15%+ pop (median -32%); 80-90% down and silent still drifts (median -13%).
- [stated] buyscore v3: http://159.223.88.168/hx-c9ois/fw/buyscore.py md5 099629f97e80ea5ac0845df1e9d49ba6 (3 X searches ~450 credits; per-4h real people + trading volume for 24h; mood posts printed).
- [stated] gpwatch2 X layer changed (backup gpwatch2.py.bak-wordcount): keyword bull/angry shares removed; +2 quiet and no real person, -2 real people still posting. Its cron is #OFF.
- [stated] 3 Oct 15:12 to 15:46 BKK: 10.76M credits fell to 6.69M (up to ~200k/min) from a caller OUTSIDE the droplet and the Mac (droplet made ~150 calls); likely another cloud session's backfill. Ben told; xstatus brake added. Resolved: it was the Bottom Lab cloud session's planned crowd-cycle pull (~4.07M credits, 15:18 to 15:46 BKK), see v4 below.

- [stated] 3 Oct 16:40 BKK, Ben: "why would you only look at the last 20 posts... ridiculous mistake": rule now in xsafe v1.3 (md5 828368dda65a6aee17374b76e5f62f8b, every window read to the end, complete flag, 10 pages default), buyscore v3 (md5 75ffd306708de2b6dae2b5ddd329a71f, full 24h contract read) and gpwatch2 (backup gpwatch2.py.bak-20posts). Also caught a second claim-phishing wave in plain English ("holders might want to check rn", "claimed mine", "showing on the portal").
- [stated] 3 Oct: the Market Signals STRONG BUY alerts (BROW 0x2142d4816e259fd7c119f61c772e39ae0cdaafde 15:52, SABLE 0xf7894d31d569e6330592d346ecfefdf4257f3ec1 16:12) come from BOTTOM LAB's COMEBACK rule (/opt/bottomlab/lab.py, another session), not from this framework. Sentiment check 16:31 BKK: BROW WAIT (59% down, 27 real people on the ticker, hopeful "will hit 10M", RSI 1h 20); SABLE WAIT (66% down, real people still posting, hopeful "so undervalued"). Comeback rule does not read sentiment yet.

# Next
- [stated] Forward paper test is the only true blind test left: score every BUY/STRONG BUY the script gives from 3 Oct.
- Raw (this Cowork session scratchpad, temporary): fw/events.pkl, blind_events.pkl, xraw.jsonl, xfeat*.pkl, build.py, harness.py, it1 to it6.py, firstsig.py, blindtest.py.

# v3.5 (4 Oct 2026 00:30 BKK): buyscore md5 98da93e2348726ff91d1dbd0a2e0ba64 (backup buyscore.py.bak-v34). NEW-ATH ODDS = base held + X crowd still active (~40%), held but quiet (~23%), base lost (~12%, avoid), 80%+ (~6%); RETEST warning (6+ new voices: 49% vs 73% breakout) and TOP RISK (11+ new voices at a new top: 63% vs 82% go higher). Ben's skill edit of 3 Oct 23:05 (ticker collision fix, ONE OWNER section, gate items) kept; skill v3.5 proposal merges on top of it.

# v3.4 (3 Oct 2026 23:10 BKK): NEW-ATH ODDS line. buyscore md5 58fa26f7601ea02202cedd5e5eb473b3 (merged onto the other session's v3.3 foreign-CA fix; droplet backup buyscore.py.bak-v33)
- [stated] Ben asked: is the whole system not working? Answer given: the bounce buy failed; the spam filter and mood reading work as measurement but do not predict. 50 more ideas on a fair list (all Pons V2 graduations from chain logs): none proven. Live line shows COMEBACK + base held odds (31% best case) as a paper test, never as a buy.
- [stated] 3 Oct 23:05 BKK reads: BROW 0x2142d4816e259fd7c119f61c772e39ae0cdaafde both leads (31%); SABLE 0xf7894d31d569e6330592d346ecfefdf4257f3ec1 neither (13%); MOO 0xd9db30bb0d2b8d2eae3826a1372117e058791e18 83% down (~5%); SI DEW9dSN6QpWyNthphCpMmAbZP1Q4cEKR9xQXAri98WDP 18% down, no pullback.

# v3.2 (3 Oct 2026 20:10 BKK): silence STRONG BUY REMOVED. Doc claude/pullback-ath-study.md
- [stated] Ben: call the silence rule "STRONG BUY, short-term bounce", test it on more coins, and find better predictors of pullbacks that lead to new ATHs (100 approaches).
- [stated] Re-test on 679 NEW 80%+ first touches (425 coins): silent -6%/trade (CI -12 to +1) vs talking -7%; all 1,060 events +1% vs 0%. The v3.1 +23% was luck. buyscore v3.2 (md5 10f1e0a12635bc1aa10c3dc412536b7f, droplet backup buyscore.py.bak-v31) says WAIT (SHORT-TERM BOUNCE NOT PROVEN) instead of STRONG BUY / BUY (small).
- [stated] New-ATH study: runtrack coins were filled on 2 Oct from GMGN rank and pump.fun current-cap lists, so they are survivor-biased; never backtest "did it recover" on runtrack coins before 2 Oct without a non-runtrack check. Young/small-cap signals only work inside that list. Bottom Lab COMEBACK rule is the only one that held on other lists (+18 pts, CI +3 to +32, 47 coins). Clean survivor-free list (all Pons V2 grads 13-16 Sep) too small (40 coins).

# v3.1 Full re-test of the sentiment system (3 Oct 2026 18:00 BKK, this session). SUPERSEDED by v3.2 above for the silence rule. Report: project doc claude/sentiment-system.md "Test report v2"
- [stated] Ben: test extensively (1) is sentiment measured right, (2) is the system set up right, (3) is it tradable combined with other aspects; after Bottom Lab found depression worst at COMEBACK signals.
- [stated] Filter blind test (400 posts, independent readers): old xsafe kept only 66% of real people (the <4 words rule); v1.4/v1.5 (md5 0fbe80baa7db5d6620014d88ff47332e): 87% of kept posts are real, keeps 86% of real people, catches 77% of bots/scams. Readers agree with each other 95% (one strict reader 73%), so +-10% on any count. Mood blind re-read (240 windows): exact 78%, kappa 0.60, bullish/negative/none 92%; euphoric vs hopeful is the unreliable split. xsafe v1.5 also re-reads an empty X answer once.
- [stated] Tradability (one event per coin per stage, 2x/-50%/14d, 3% costs, CLOSE prices; wicks inflated earlier numbers; coin-clustered 95% CI): first close 80%+ under ATH and no real person 12h = +23% per trade [+10,+35] (130 events, 104 coins; both halves, both chains) vs people talking +8% [-2,+17] vs random days at that depth -9%. 60-75% down: silent -3%, talking -15%, random -24%. Entry 1h after the first touch +15%, 12h later +2%, 1-3 days +7 to +9%; silent beats talking by ~15 points at every entry time. Talkers at 60%+: euphoric -15%, neutral -25%, frustrated -20%, hopeful -5%.
- [stated] Silence does NOT raise new-ATH odds: at 0-50% down talking coins make new highs more often (63% vs 52%, 25% vs 17%). COMEBACK-like set: silent +3% vs talking -7%, new ATH 16% vs 6%, not significant; with Bottom Lab's opposite (also not significant) the honest verdict: mood is not a filter for COMEBACK / new-ATH trades, only for the short bounce trade. Agrees with v4: contract silence ok, humans gone everywhere = dead for new highs.
- [stated] Caveat: backtest windows are older than 7 days, where X thins old posts (v6 trap), so history shows silence more often than live; live silent12 is stricter. Out-of-time evidence small (22 silent deep events after 12 Sep, +36%).
- [stated] buyscore v3.1 (md5 8a694ff273d66cecb5b8eb4deffb5d9e): STRONG BUY = 80%+ under ATH, first drop to that level within 3h, no real person on the contract 12h (full read); BUY (small) = same but later; WAIT (CLOSE) = 60-80% silent; WAIT people talking; it is a short bounce trade (2x / -50% / 14d), not a new-ATH call. First live: MOO BUY (small) 17:47 BKK (84% down, first drop 83h earlier, 0 real people 12h, 80 spam removed).

# v4 Crowd Cycle Framework (3 Oct 2026 16:05 BKK, Bottom Lab session). Full write-up: project doc claude/crowd-cycle-framework.md
- [stated] Ben: rerun the whole sentiment test with the recharged X API, read mood by tone not keywords, map to the Wall Street cheat sheet, test "all coins follow the same emotions", volume = emotion strength, build a better score, test on new coins; golden pocket alert OFF until the system is built.
- [stated] gpwatch2 cron commented (#OFF, crontab backup /root/cron.bak.*); stale.py gpwatch check muted while /opt/bottomlab/gpwatch.off exists (backup stale.py.bak).
- [stated] Data: 176k X posts (123k unique), 18,759 windows: contract, clean $TICKER (160 coins), replies to the coin's own X account (268 coins), daily timelines for 240 coins, windows around 1,597 golden pocket touches, 150 days of market queries. Cost ~4.07M credits.
- [stated] Tone reader: 8,000 posts labeled by reading into 10 cheat-sheet moods; second rater kappa 0.47; distilled model kappa 0.44 (64% exact). On X, negative moods are under 5% of posts at every stage; fear ~0.5%; people who give up go silent.
- [stated] Same cycle for all coins: YES for volume (loud at top vs crash in 86% of 127 coins), euphoria (72%), denial in the crash (70%), disbelief in recovery (75%), bots take over at the bottom (69%); NO for anger/panic (57%, coin flip). Same on Solana and RH.
- [stated] Crowd alive after a 50 to 90% drop (talk 15%+ of loudest day): new ATH in 30d 32 to 46% vs 10 to 25% when quieter; holds older/newer coins and both chains; mostly picks strong coins, does not time days inside one coin.
- [stated] Reconciled with v3: contract silent (bots/shills gone) is fine; ticker silent too (humans gone) is the bad case (new ATH 4%). At 0.618 touches "bots gone, humans stay" (contract chatter <=40% of ATH day, ticker/replies >=50%): new ATH 29% vs 18%, bounce 52% vs 42% (103 touches, both halves); all quiet 10%.
- [stated] Memecoin "depression" = death: blind LLM crowd read on newest coins, Depression read -> new ATH 3%, +50% bounce 13% (62 windows); Denial/Panic read -> 34% / 59%; at 75 to 90% down Denial 45% vs Depression 0%.
- [stated] Accuracy on new coins (newest 25%): LLM crowd read 44% exact on 5 zones (chance 20%), kappa 0.30, confident calls 70%, bottom-area precision 72%; numbers-only model 34% (worse than guessing). Price beats tone: new ATH AUC 0.78 price vs 0.81 price+crowd; tone alone 0.64.
- [stated] Old "quiet at the pocket = 56% new ATH" (21 coins) did not hold at scale.
- [stated] Proposed gpwatch X layer v3 (not deployed, alerts off): +2 bots gone/humans stay, -2 all quiet, no euphoria penalty. Very high tier 24 -> 57 touches at same quality (new ATH 42%, bounce 70%).

# v5 Sentiment at the COMEBACK signal (3 Oct 2026 17:15 BKK, Bottom Lab session)
- [stated] Ben (after BROW/SABLE STRONG BUYs): include sentiment in every evaluation, read posts along the cheat sheet (not keywords); wants depression at the pullback level, no euphoria/optimism/thrill when the coin reaches the buy level; test it.
- [stated] Test: 436 COMEBACK signals (217 coins), 213 with full 30-day outcome (91 coins, base 35% new ATH before -50% stop). X via xsafe, contract + $TICKER (if clean) + replies to the coin's X account, windows 24h before signal, 3 days earlier, ATH day; real-people posts read blind into cheat-sheet zones.
- [stated] Result: DEPRESSION read 29% new ATH (n=55, 30 coins, both halves ~30%); OPTIMISM/BELIEF 36% (n=95); COMPLACENCY/DENIAL 42% (n=19); THRILL/EUPHORIA 55% (n=11), any strong euphoria 44% (n=27). Volume: quiet (<25% of top day) 27%, silent 35%, louder than top day 47% (unstable halves). So at the COMEBACK level depression does NOT help and euphoria does NOT hurt; small n, no filter justified. Crowd at the signal is mostly OPTIMISM (45%) or DEPRESSION (26%); fear/anger almost never.
- [stated] Differs from v3 ("hopeful = WAIT") because the setup and goal differ (any dip, 2x/-50%/14d vs comeback coins, new ATH/30d). For COMEBACK alerts the hopeful-crowd WAIT is not supported.
- [stated] Live 3 Oct: BROW crowd read OPTIMISM with strong euphoria (fading, 47% of top-day real posts, 1.6/h); SABLE OPTIMISM (some euphoria). Both stay STRONG BUY per test.
- [stated] Deployed: /opt/bottomlab/crowd.py (md5 260eb24067c8b042c2d0feb6e8ff26fa) + lab.py (md5 31b8b8d12d8a1c99322485fb61575b57, backup lab.py.bak-crowd-*): every STRONG BUY now carries an "X crowd:" line (silent / quiet / fading / louder than top day, real posts per hour) and stores the real posts in lab.db table crowd for later reading when a trade is evaluated or goes wrong. Info only, never a filter. e2e.py sets CROWD_OFF so dry runs make no paid X calls (one e2e before that fix spent ~230k credits).

# v6 Emotion cycle system (3 Oct 2026 17:45 BKK, macro session). Detail: /areas/macro-direction.md v4
- [stated] Ben: do not call signals RED / GREEN (confuses with candle colors). Use action words: SELL SOME (was RED), HOLD (was GREEN), NO SIGNAL (was GREY).
- [stated] Ben's fractal thesis: the cheat sheet cycle is fractal. Each crowd runs it at the speed of the chart it trades: 1m traders go euphoric to depressed in minutes, 15m slower, 1h and daily slower still. So every chart runs the stages many times a day and also over bigger timeframes; coins do not all take 50 days. Status: tested only on daily windows so far; hourly/4h windows not tested yet.
- SELL SOME rule (frozen on 34 coins, tested on 16 new coins): day read as EUPHORIA, COMPLACENCY, THRILL or ANXIETY, or loud DENIAL, or 3+ THRILL/EUPHORIA days in last 7. New coins: median 14d -19% vs 0%; 40% fell 30%+ in 14d vs 15%; fired within 5 days before to 3 after the real top on 14 of 16 coins; 1 in 10 still doubled, so sell some, not all. HOLD is only a mild plus. Anger = still falling; sentiment does not time bottoms; chain-wide mood not proven.
- X DATA TRAP (verified 3 Oct): X search (twitterapi.io) shows posts of the LAST ~7 DAYS in full, but older posts come back thinned; most spam disappears from older results. Receipts: contract searches spam share 8% before 26 Sep vs 74% from 26 Sep (vote farms "Listing ID / Leaderboard", claim phishing, look-alike letters); per-query posts 11 to 20 (page full); control word "coffee" 2.2x; real-people rate only 1.5x. LunarCrush (logged live) shows NO jump on 26 Sep for coffee (~40k/day flat), "robinhood chain" or $PONS. So the "8x louder" was spam plus search thinning, not real crowd.
- RULE for every session: never compare raw X counts across the 7-day line. Use xsafe real-people counts only; compare live windows with live windows (last 7 days) or history with history; backtests on old windows are on X-cleaned data, so live spam must be removed by xsafe before applying backtest thresholds.
- [stated] Ben 3 Oct: we must be able to compare new with old; deep dive the 8x; make the spam filter as good as possible, edit it if needed.
- MECHANISM PROVEN (3 Oct 18:30 BKK): 378 posts captured live 14 to 19 Sep (droplet /opt/common/xcalls.db) re-checked: 82% still exist (lookup by id) but only 14% still come back in search (same method finds 30/30 fresh posts). X search keeps posts older than ~7 days only if they got engagement: 0 likes 0% stay, 1 to 2 likes 17%, 3 to 9 likes 79%, 10+ 93%; 50k+ followers 100%, 10k to 50k 58%, under 5k ~11%; blue 24% vs 5%; xsafe spam 3% vs real 23%. So old windows = "posts with about 3+ likes"; new windows = everything.
- Comparable metric (first check): real people posts with 3+ likes. Coffee control new/old 0.94 (raw 2.47); coins 0.43 to 0.5 (raw 6.6 to 6.8), which matches LunarCrush showing coin talk really fell late Sep (PONS 0.58). Per coin still noisy; forward test running (snapshot of 26 Sep 11:00 to 18:00 UTC windows taken 3 Oct 17:50 BKK, diff at 22:05 BKK) to fit the exact survival rule and the likes accrual for posts under 24h.
- xsafe v1.6 deployed 3 Oct 18:35 BKK (md5 41b09da2a63fefa6da9f94f375981f41, backup xsafe.py.bak-v15-*): + giveaway / drop-your-wallet farms, + call channel brag lists ("I begged you to buy $X - it did 900x" x2+), + "lost wallet claim / incinerator", "telegram is here". Tested on 152k stored posts: 260 new catches, all spam/promo.
- [stated] Ben 3 Oct 19:00 BKK: approved "only real people's posts with 3+ likes" as the comparable count; all live processes and Cowork sessions touching X sentiment or X volume over time must use it and must check on every run that they use the latest spam filter.
- ROLLOUT 3 Oct 19:46 BKK: xsafe v1.7 (md5 6f6639da5a4fa567004ed820da952101; backups xsafe.py.bak-v16-*, xsafe_hook.py.bak-*) adds comparable() (real + 3+ likes, posts <2h projected by the settled share, default 0.43), window() rate_comparable, ensure_latest() (self-update on every search from fw/xsafe_version.json, md5 checked, tested on a modified copy). Hook now reloads xsafe when the file changes (logs users.log). New /opt/common/xsafe/xsafe_guard.py cron */5 (version.json, public copy check, XSAFE_OFF and stale private copy check, guard.json). Restarted casig, xdeck, hookrwatch, upcoming, bottomlab (all active, users.log shows v1.7). crowd.py now compares now vs top day on comparable rate (backup crowd.py.bak-cmp-*). buyscore md5 15ea5022420143166ca229b6ac81172c (backup buyscore.py.bak-v32-*): silence / talking / day-before counts use comparable posts (posts under 2h count as present), mood still reads all real posts; loads xsafe fresh and calls ensure_latest. Live test PONS 19:49 BKK OK. Old xsafe copies (<=1.6) cannot self-update: only stale copies on 3 Oct.
- Likes settle fast (measured 3 Oct, 464 real posts): age 2h+ already has 96 to 100% of eventual 3+ like posts; under 1h only 26%.
- Still to add to BRAG filter: "I was the first to call $X ... STILL FADING ME", "I called: $X All went 134x Next call:", "JUST LIKE MY: $X callout hit 1432x" (seen live 3 Oct).
- Also seen: X now writes cashtags as chain:address (e.g. robinhood:0x..., solana:...) since ~10 Sep, so contract searches also catch ticker posts from that date.
- Sliding test scheduled 4 Oct 17:53 BKK (scratchpad xs/recheck.py, baseline saved): if the 26 Sep window drops to 25 Sep level once older than 7 days, the thinning is confirmed.
- CONFIRMED 4 Oct 17:53 BKK: the 26 Sep 12:00 to 15:00 UTC window, once ~8 days old, fell from 207 to 53 posts/h for "robinhood chain" (25 Sep window 82 to 88/h, 27 and 28 Sep unchanged at 151 and 254/h); PONS contract 26 Sep fell from 6.7/h with 40% spam to 1.7/h with 0% spam. A same-day check 3 Oct (posts only 0 to 4h past the 7-day line) still showed 100% kept, so the thinning lands between ~7 and ~8 days of age. Comparable rule (real people, 3+ likes) stands.

# v3.3 TICKER CROWD (3 Oct 2026 21:10 BKK) - Ben: "real people don't post the contract... obviously look for the ticker... never again, for any project analysis or buy decision"
- [stated] Ben, STANDING, EVERY PROJECT ANALYSIS AND BUY DECISION: the sentiment / social read is the TICKER crowd ($TICKER or the coin's name), never the contract posts. Never talk to him about bots, airdrop links or spam in a sentiment read.
- [stated] Ben: a flat, doubtful crowd is what he wants to see when he buys.
- Receipt of the miss: SI 20:44 BKK reply was built on the contract/mixed post list (spam, phishing) and called the crowd "flat or doubtful"; the real $SI / "Super Inu" crowd at 21:03 BKK was mostly belief and boasting (whale "buy every dip" +$291k, "buy as much as you can before ATH", "community chose Super Inu"), one short seller, a few doubters; real ticker posts per 4h falling 37+ > 23+ > 21+ > 12+ > 18+ > 16+.
- buyscore v3.3 deployed 3 Oct 21:08 BKK: md5 bf3bc7329fe02cf1133e05c3e61a3583 (backup /opt/launchwatch/pub/hx-c9ois/fw/buyscore.py.bak-ticker-*). Ticker query ($SYM unquoted OR "name"; a quoted "$SI" matches the plain word "si" and returned Spanish posts), one closed window per 4h (3 pages each, "+" = at least), posts naming another coin's address dropped, short-reply farms and "qualify / allocation / claim + link" waves dropped locally (xsafe misses them), mood list = ticker crowd only, contract posts kept ONLY for the tested silence rule.
- Evidence check on Ben's "flat/doubtful = buy": cheat sheet calls it disbelief; own tests so far: v3.1 neutral talkers at 60%+ down -25%/trade vs hopeful -5%; v5 mood at COMEBACK did not change new-ATH odds. Not proven yet; label it as the cheat-sheet read, not a tested signal.

# v3.4 ticker crowd collision fix (3 Oct 2026 23:05 BKK)
- [stated] Ben 3 Oct: X volume + sentiment must be in EVERY coin analysis in EVERY session (in or out of the Pro Trading project); no new duplicate skills; buy-framework is the one owner of X volume + cheat-sheet sentiment, x-claim-audit owns claims only. The x-pulse skill proposed earlier the same night (keyword scoring) is retired, do not use.
- Bug: v3.3 _same_coin let a post through when the coin NAME was a substring of the ticker (INU name "iNu" sits inside "$INU"), before the foreign-address check. INU 22:55 BKK: 13 of 25 printed "crowd" posts were Solana "Im Now Useless" INU (GE4TWUwy7WgnS4WrwErajDYFvj4rxRrbpFiEvreqBozP); 24h crowd read 69, real RH INU about 26.
- Fix deployed 23:00 BKK: foreign contract in the post = other coin, checked first; name match needs word boundaries and name != ticker; ticker-only posts naming another chain (solana, sol, pump.fun, bonk, base, clanker, bnb...) and not ours are dropped; chain falls back to the DexScreener pair chain. buyscore md5 4275c11a411084562845647890ef11fc, backup /opt/launchwatch/pub/hx-c9ois/fw/buyscore_v32_backup.py. Live INU after fix: 6 > 4 > 2 > 2 > 2 > 5 per 4h, day before 9+.
- INU 3 Oct 23:00 BKK read: WAIT. Ticker crowd angry and frustrated ("trash thieves", "dumping like hell wtf", "downhill") mixed with hope ("wen new ATH", "buy the dip?"): cheat-sheet ANGER with hope, not disbelief. 81% under $18.52M top, volume 7% of peak day.
