---
name: rotation-watch-pro-trading
description: Pro Trading copy of the rotation dashboard state from 3 Oct 2026 (basket rule v4, phases, Robinhood fast rule, layout decisions). Read with the main [[rotation-watch]] before touching /opt/rotation or answering basket risk on/off questions.
sources: [cowork]
aliases: [rotation dashboard v4, basket rule v4, basket phases]
---
# Ben's asks, 3 Oct 2026
- [stated] Group the weekly and monthly close indices by chain with plain titles ("Solana closed bullish", "Memes closed bullish, except Robinhood") so the takeaways show at once.
- [stated] Replace the basket overview list with four groups: Rotate into, Hold, Rotate out of, Wait; keep the split by chain, starting with majors.
- [stated] Remove the repeated text on every basket card; put details behind a small ? on each card. Remove the 4 hour "record" cards.
- [stated] Robinhood order: Robinhood 30 first, then the Robinhood Index renamed "Robinhood 10", then sector baskets by market cap.
- [stated] Risk off cards must not look green. Find a solution for the "untested" label and a system to assess Robinhood.
- [stated] Phases he wants: BUY (initial phase), HOLD (meat of the move), HOLD HALF (de-risk), RISK OFF.

# Built (rule4.py, chains.py chains-4, closes.py, page)
- BUY = signal close (close > 30d high; young baskets 10d high) and the next close within 10% of the breakout; HOLD after; TAKE HALF / HOLD HALF at first HOT; SELL at 15d low close (young 5d). Gates: BTC > 100d avg, majors basket risk on, 25%+ of other baskets risk on, no Solana froth (SOL +20% on BTC in 4 weeks).
- "Untested" replaced by tags: "tested 2023-26" (long CMC baskets, slow rule) and "fast rule · N days data" (Robinhood, Ink, Arc, Bankr, o1; fast rule tested on the long baskets).
- Live 3 Oct close: no BUY phase; HOLD Solana apps, Base AI, Solana AI, majors, TON, Bonk.fun, Base apps, Pump.fun; rotate out of Arc launchpad tokens; all Robinhood baskets risk off. ledger4 live scorecard from the 4 Oct close; Telegram on BUY, TAKE HALF, SELL, CANCEL.
- Another session added a "From: risk on/off dashboard" footer and moved alerts to /opt/rotation/config.json; both kept in chains.py and closes.py. Backups *.bak-v4-* in /opt/rotation and /opt/rotation/chains.

# v4.1, 3 Oct 2026 afternoon
- [stated] Ben: the Robinhood section contradicted the baskets (rotating out, money coming in, HOLD vs WAIT); wants money flows accurate per chain with size and daily charts; use the word EXTENDED; say WAITING FOR BOTTOM instead of WAIT; last moves, colours, past results and report card at the very bottom; history chart explained so a child gets it (white line, 90 day reading); 50 more iterations optimising basket trading and rotation into strong baskets and out of extended ones.
- Words now: BUY, HOLD, EXTENDED: TAKE HALF, EXTENDED: HOLD HALF, SELL; risk off: WAITING FOR BOTTOM, BASING, ALMOST BULLISH, BLOCKED BY MARKET. Rotate out of also lists the weakest EXTENDED basket when a tested basket turns BUY (swap).
- Date bug fixed: CoinMarketCap label D = close at end of day D; OKX majors/BTC/SOL, Robinhood and 4h baskets were labelled one day late, the provisional close filled the wrong day, closes candles of CMC baskets ended a day early (7 of 68 labels changed). ledger4 reset (no live trades yet). Backups *.bak-v41-*.
- Page order: closes, what to do, baskets, 1 to 3 book gauges, 4 money flows (DefiLlama stablecoins + DEX volume, daily bars), 5 Robinhood this week (same words as baskets, leaders), 6 history (chart 1 $1 system vs BTC with money-location strip; chart 2 % of 64 big coins beating BTC 3 months/1 month, 7 day average), 7 to 10 last moves, colours, past results, report card.
- Handover dash-h6; raw data http://159.223.88.168/hx-c9ois/edge/basket-rule-v41-2026-10-03/
- Late fixes 3 Oct: young baskets use finished days only (an unfinished day gave a false Ink stock tokens BUY); GeckoTerminal baskets refresh every 6h plus right after the 07:00 Bangkok close (hourly runs took 30+ min of GeckoTerminal 429s); stale provisional point removed from state.json (backup state.json.bak-prov-*). Live chains.py md5 0b61428871dd299e32eb90973f5b249b, rule4.py 96a8bf791b59fe7aa8d92ae3389a8aa0.

# Cleanup, 3 Oct 2026 evening
- [stated] Ben: remove the money flows section ("nothing in there that is not productive"); he has no time to look at a million things, wants only the most reliable parts; asked for a list of other confusing parts to cut.
- Done: money flows card and flows_update removed (page sections now 1 to 3 book gauges, 4 Robinhood this week, 5 history, 6 to 9 bottom). Backups *.bak-noflows-*. Live chains.py md5 2b1e652dda1c62fe466800fc91ab93cd, rotation.html a97c1b4d569f03715ebe41a5cca01ed4.
- [stated] Ben approved all 7 cuts (3 Oct evening) and wants the hidden young baskets to come back once they have 30 real days.
- Done: weekly closes and weekly Telegram alerts removed (monthly kept); rotation strip and "Robinhood this week" removed (Robinhood leaders now behind the ? on Robinhood cards); one top card "What to do now" (basket call plus one line for the old system), then the monthly close; old CASH/BTC/ALTS book folded at the bottom (sections 1 to 7 inside); 130 iteration table off the page. GeckoTerminal baskets (Arc top, Arc pads, Bankr, o1, Ink top, Ink stocks) hidden until 30 days after backfill_until (all back 30 Oct 2026); they keep their ledger, send no alerts, and return by themselves with a "BACK ON THE DASHBOARD" Telegram. Backups *.bak-cut-*. Live chains.py 7b49b7649a689454a61c8b0e8193b56a, closes.py e343bc4111aaadb370e25e03bf51f3f7, rotation.html 9a4fb3f35779ff72f671deb6936f5639.
- [stated] 3 Oct evening, Ben: basket names in the four groups as rounded chips (categories, not text), a dash when a group is empty, scorecard removed; 50 new ideas to rotate into strength, check the Pro Trading knowledge base, test before using.
- Done: chips + dash live, scorecard gone. 78 ideas tested (x50 bench /home/claude/it100, raw data http://159.223.88.168/hx-c9ois/edge/basket-rule-v42-2026-10-03/). Rule v4.2 live for tested baskets: hot market (50%+ of other baskets on) uses the 20d high, breadth gate 35%, trailing stop 20% under best close; young baskets unchanged. ledger4 reset (11 test rows). Live chains.py 1971e7e998417c1917cadd522b1855fe, rule4.py 72af46c5b5dea854a64a742eda031eb2, rotation.html b77bfd92d79cf77af77227020b7f4044; backups *.bak-v42-*.
- [stated] 3 Oct night, Ben: "half taken" must read as a plain action ("sell 50%"); asked whether holding no longer works (rotate instead), what "holding the strongest baskets every day" meant, and for 50 more rotation and money management ideas inspired by top traders, then implement the best.
- Done: rule v4.3 live. Words now BUY, BUY MORE (once at +15%, tested baskets), HOLD, SELL 50% / SELL 75% (extended; 75% after BUY MORE), HOLD REST, SELL; Telegram sends BUY MORE and SELL 50%/75%. ledger4 reset again (11 rows). Live chains.py bf9b4f27cbc42623c1736500bee78f05, rule4.py 9393fac6a33f766657398d4e4b7ddad4, rotation.html 2eca12b9b45e6f7db82ed39c515d59e6; backups *.bak-v43-*; raw data http://159.223.88.168/hx-c9ois/edge/basket-rule-v43-2026-10-03/
- [stated] 3 Oct night, Ben: labels "SELL 25%" / "SELL 75%" and "double your investment"; asked whether money chases brand-new launches vs established coins; "the market wakes up" means breakout day to him.
- Done: rule v4.4 live. Words BUY, DOUBLE YOUR INVESTMENT, HOLD, SELL 25% (SELL 75% if doubled; young baskets SELL 50%), HOLD REST, SELL. Trailing 20% arms after +30%. Meme mania gate (new coin volume share top 20% of the year, state["newshare"] seeded with Mondays 2019-2026, then daily from the CMC snapshot). Page line "Money in brand-new coins". ledger4 reset (11 rows). Live chains.py ff86936b09ec7c1dab2e7871767c386e, rule4.py 470455ed3029fedf290f6a6589f0e9e6, rotation.html 8515e102dc5f74740201dda37e5bf989; backups *.bak-v44-*; raw data http://159.223.88.168/hx-c9ois/edge/basket-rule-v44-2026-10-03/
- [stated] 4 Oct, Ben: questioned SELL 25% vs 75%, the extended definition and selling under the 15 day low; wants bottom buys if solid.
- Done: rule v4.5 live, adds BUY (BOTTOM) for tested baskets (40%+ drop, higher low, close over last 6 day swing high, BTC > 50d; state gates btc50). ledger4 reset (11 rows). Live chains.py abecc1258354b619da86b9bfb63da957, rule4.py c79d29b69129c480a4acd7ec65d84dcc, rotation.html 1d264290af42924e445032119a975d60; backups *.bak-v45-*; raw data http://159.223.88.168/hx-c9ois/edge/basket-rule-v45-2026-10-04/
- [stated] 3 Oct 2026 late, Ben: top alert when money chases brand-new coins, framed as a whole-market warning; extended label text "Take % Profit. (25% if not add, 75% if you doubled)"; two exits: 1) trailing stop 20%, 2) close under the 15 day low; then 3 iterations on new coin money and 30 ideas each on breakout day, bottoms, extended, profit taking, ship only what improves the system significantly.
- Done (v4.6 wording, rule logic unchanged): red "WHOLE MARKET WARNING" banner at the very top when meme_mania; Telegram on switch on/off (state mania_was); extended word TAKE % PROFIT (young: TAKE 50% PROFIT), rule4 exposes take_pct, low_at, trail_at; cards show "trail stop" and "15d low" separately; rules box under the market check. No ledger reset. Live chains.py 97ea06091ee8274eb95c5119381d00c7, rule4.py b62fb2f4ee4a7d2face1513d76a903f8, rotation.html 9e51c6fb87462106985f7eff093f143c; backups *.bak-v46-* and *.bak-v46b-*.
- Round J result: 120 ideas, nothing shipped (sizing gains are just more money in; selling less wins in bulls and loses in chop; no regime filter fixes it). Raw data http://159.223.88.168/hx-c9ois/edge/basket-ideas-roundJ-2026-10-03/
- [stated] 3 Oct 2026 22:30 BKK, Ben: the warning must read "De-risk memes. Money is chasing new launches."; unclear whether bottom buys plus breakouts means doing both.
- Done: rule v4.7 live. DE-RISK MEMES banner and Telegram; while on, no new meme buys and an open meme basket (tested baskets) sells on a close 10% under its best close (exit_why "newcoins", card shows "meme stop"). ledger4 reset (11 rows). Live chains.py b0557dbc6772b6e639054f855323e163, rule4.py 3e16ccdc01dced7820a075bdd420fb9f, rotation.html 8fbb0c8acc783546c199a50080ff0bff; backups *.bak-v47-*; raw http://159.223.88.168/hx-c9ois/edge/basket-rule-v47-2026-10-03/
- [stated] 3 Oct 2026 late, Ben: chain logo in front of each category inside the chip, no chain word (Solana logo + DeFi, Base logo + AI, TON logo + coins, majors = three overlapping logos + "Majors").
- Done: logos (CMC/DefiLlama icons embedded as data URIs) on chips, card titles, chain headers and the hidden list; short names; Robinhood 10/30 keep their names. Live rotation.html f66b1944c6f2ff41d8ba07010fdb28ed (backup rotation.html.bak-logos-*). Test /tmp/t6.js now reads full names from chip/card titles.
- Done 3 Oct 2026 23:40 BKK: "Coins to buy" (3 coins, full contracts) on risk-on tested basket cards and in BUY / BUY (BOTTOM) alerts; picked once on the BUY day by picks.py (CMC historical listings of the BUY day and 90 days before), cached in state["picks4"], max 6 new picks per run. Live chains.py b9dfee98f319276fdb9ce27aa2b94f35, picks.py fc0b760c722392eab8bb6e7c4d8cbc1e, rotation.html 97ab141340244b1d3b56818f6fe3bdac; backups *.bak-picks-*.
- [stated] 4 Oct 2026 00:30 BKK, Ben: bet on strength, not laggards; add a Bitcoin card first (Bitcoin, then majors, then the rest); picks behind a "Three Coins to Buy" button next to the ? that opens an overlay (no fold).
- Done 4 Oct 00:47 BKK (v4.8): Bitcoin card first (rule as majors on BTC alone, no breadth gate); picks v2 = closest to the 30d high (weekly points) + smallest 90d gain, cache state["picks4b"], 3 new per run; overlay with full contracts and copy buttons; chips order btc, majors, rest. Live chains.py 84fa832681362c0bb5857461038aeb18, picks.py d5e3300c858ad0347494e22261ce314a, rotation.html a6b99f6b98aefb290e71f75cf077134f; backups *.bak-v48-*; raw http://159.223.88.168/hx-c9ois/edge/coin-picks-v2-2026-10-04/
- [stated] 4 Oct 2026 01:00 to 01:40 BKK, Ben: test X chatter as a pick factor; cleanup (only mark what is off, no "tested" tags, no chart dates, no risk-on words, no tap/hover hints, new coin money only when high and then as a big warning sized like the main call, no old system text); add Robinhood-like baskets (Solana stock memes from stonk.fun, infrastructure, CMC top 15 memes; same for Base); ? opens a pop-up with the coins first; DexScreener link + copy contract; nicer fonts. Then agreed with the other session's pick study and wants key insight reminders under the coins in the pop-up.
- Done 4 Oct 01:35 BKK (v4.9/v5.0): cleanup live; new baskets sol_topmemes, sol_infra, base_infra (CMC) and sol_stocks (GeckoTerminal, stonk.fun roster, hidden until 2 Nov 2026 by the 30 real days rule); Base stock memes skipped (only 1 tagged coin, no roster). Picks v3: up to 50 liquid coins (vol $100k+, listed 8+ days, top 50 by CMC rank), drop +30% day coins and the 7 day leader, take the 5 biggest; cache state["picks4c"], 3 new per run. Button "Coins to Buy" opens coins then a Key insights list. X test: quiet coins beat the basket 49% vs 36%, U shape, surging worst in 2025-26; not shipped. Live chains.py 06257a75eb6f8a1d4ad9411cfe95f100, picks.py 0d4eee58f708c44b451e49cfc17213b6, rotation.html f55cb33382e964af65ba3e23979aa72b; backups *.bak-v50-*; raw http://159.223.88.168/hx-c9ois/edge/coin-picks-v3-2026-10-04/
- [stated] 4 Oct 2026 02:00 BKK, Ben: gold "Coins to Buy" button and a bigger layout on wide screens; 5 iterations to make everything correct and reliable before going live; 100 ideas from research on similar dashboards, execute the best.
- Done 4 Oct 02:10 BKK (v5.1/v5.2): gold button; at 1400px+ the page is 1480px wide with bigger type and 150px charts. Picks v4 = 10 coins spread big to small (5 biggest cost 3 to 4 pts per trade both eras), guards for $1 look-alikes and staking/wrapped names, cache state["picks4d"], 8 per run; pop-up shows live DexScreener 24h move (flag "up 30%+ in 24h: skip for now") and "Copy all N contracts"; chips jump to their card; "Changed at the last close" line (state["words_by_day"], json changes/changes_from); red line when a data source fails. Fixes: missing coin now -50% once (was every day after day 3); old chain-2 rule alerts silenced (open 29 Sep Bonk.fun trade could have sent a contradicting SELL). Self-healing: /opt/rotation/rotfix.py every 10 min from rotfix.timer (super watches it) and cron, restarts stale/hung chains, closes, rotation, rh_drill, rotmap, restores rotation.html from /opt/rotation/rotation.html.good, alertgate only after 60 min; cron chains/closes have timeouts 3000/1200 s (crontab backup /opt/rotation/crontab.bak-v51). Daily independent self-check /opt/rotation/verify_rot.py 08:20 BKK (log verify.log). Drill passed (stale rh_drill restarted in 24 s). Live chains.py 30e9a1f8fa66c96b040d21c4aeb26f70, picks.py 3428f5c826411bfc3b1d4e027870272d, rotation.html dbe8396becfa1494188f2b72d71b10e4, rotfix.py 24c5b55cbf90bd4c34c8c1da4d399fab; backups *.bak-v51-*, *.bak-v52-*; ideas page http://159.223.88.168/hx-c9ois/edge/rotation-ideas-2026-10-04/
- [stated] 4 Oct 2026 02:20 BKK, Ben: wants the rotation chart (RRG) and a "highest recommended" pick among baskets that are BUY now.
- Done 4 Oct 02:25 BKK (v5.3): headline "BEST BUY: X, Then: Y, Z" with gold "#1 BEST BUY" / "#n BUY" badges (order = v4.into, strongest 30 day move first; tested in [[trading-edge-hub-3]]); Telegram BUY alerts add "#1 BEST BUY of N today" when 2+ buys; RRG svg inside the What to do card (basket vs BTC: x = 30d change of a 5 day smoothed ratio, y = its 5 day change, sqrt scale, tail = last 10 days every 2 days, label collision avoidance, buys ringed gold). Live chains.py 291bb8718bced4e356a51f4b7f4f2108, rotation.html 15e166d6089c2aa784b8e9a7702b53c8 (also rotation.html.good); backups *.bak-v53-*.
- [stated] 4 Oct 2026 07:00 BKK, Ben: very happy with the dashboard (it fixes his weaknesses as a trader); wants solid foundations (basket methodology: size, count, construction, refresh, new entrants with a waiting period); a simple rotation view at the very top (last 3, now 3, next 3 strongest, plus Bitcoin and stablecoins with a short why/why not); plans 3 to max 6 positions; asked which trading tool (fomo vs BasedBot); 50 more basket-ranking ways and the 10/20/30/60 breakout windows tested; for now Telegram only for errors that the redundant fixers could not fix (rotation-close alerts maybe later); wants redundant monitoring of data and baskets; asked where we are in the cycle (wave 5 of the first leg, strong BTC, retail burned on memes).
- [stated] Ben wants the Giver's takes fed into the dashboard; he will send details. The Giver = @lazyvillager1 (Giver's Gambit podcast, lazyvillager1.substack.com), thesis "BTC is TINA" (Sep 2026).
- Done 4 Oct 07:30 BKK (v5.5): top "Rotation" card (NOW 3 from a replay of the tested book over 120 days with cushion-to-sell bars and EXIT CLOSE, NEXT 3 closest to a fresh BUY, BEFORE last 3 exits, Bitcoin and stablecoins tiles with why/why not, plan 2 coins x 3 baskets); json "rotation" from rotation_book() in chains.py; ETH memes, ETH AI, BNB memes, BNB AI added (seeded from snapB + CMC history, state.json backup *.bak-v55-*), BREADTH_KEYS now the 13 bench baskets; basket select drops staking/wrapped/LP names and $1 look-alikes; Monday membership changes logged (state/json member_changes, shown in the ? pop-up); coin pop-up shows live buy cost at Ben's position size (Jupiter, KyberSwap, STON.fi quotes, size saved in the browser) and stars the 2 cheapest; trading Telegram muted while /opt/rotation/MUTE_TRADING exists (chains.py, closes.py patched, rotmap.py cron and rotfix run with --dry since rotmap.py is frozen; rotation.py already QUIET); verify_rot.py hourly from cron :50 and verify_rot.timer :20, first fail triggers an engine rerun, alert only if still failing 40+ min later; rotfix also restarts the self-check if verify.ok is 3h old. Live chains.py 0a6cceefd5f31bf6489866dd0f140040, baskets_def.py 436699d2806ec077c41184c98f037f92, closes.py 56a22954b3c2bba385a529474d77351b, rotation.html f2238df3b21c9001c73d2916b4e99b9b (header stamp now from chains.json; BSC USDT quote address fixed), rotfix.py d3d4fb602618b1c56ff2c19ae8ac1d54, verify_rot.py fa7f5434a6300eca0039342ed3333242; crontab backup /opt/rotation/crontab.bak-v55.
- Done 4 Oct 09:15 BKK (v5.6): rotation card shows next close countdown (07:00 BKK), NEXT tile word "SOLD AT THE LAST CLOSE" for a basket that just sold, plan 3 baskets x 4 to 5 coins (pop-up stars the 5 cheapest under 2%), ETH/BTC info line (chains.json "ethbtc" from OKX ETH/BTC, never a gate), live track record line (scorecard4, closed live trades); new "The Giver · macro view" card (giver.json from Mac launchd com.kookwatch.giver hourly RSS, ~/kookwatch/giver/giverfeed.py; giver_view.json hand-written stance; "feed paused" shown if 6h+ old); chains.py queues a muted HEADS-UP when a NOW basket is within 3% of its sell line (state headsup_sent). Live chains.py f73575cc729975ad33156c168f7f7937, rotation.html b4d51af69318a2b01f321d7e8cd390e7; backups *.bak-v56-*, *.bak-v56b-*. verify 49 PASS / 0 FAIL after deploy.
- [stated] 4 Oct 2026 10:00 BKK, Ben: dashboard must be visual with short category language: green for what we are in and hold, yellow for not ready yet, red for downtrending; stablecoins get a logo like Bitcoin; nothing longer than a sentence or two; Giver view as short stance categories (e.g. short-term bullish, medium-term bearish), no long text; wants to know hourly whether buying a NOW basket still makes sense; drop info that does not help decisions (ETH/BTC line). The Giver's paid Telegram groups: "homeless chat" and "TacFellas" (cliff notes, most relevant); wants them read from the droplet so it works when his Mac is off, with redundant monitoring.
- Done 4 Oct 10:00 BKK (v5.7): rotation card with lamps (NOW green, CLOSE TO SELLING red, NEXT yellow, SOLD TODAY red, BEFORE red chips, PARKING Bitcoin / Stablecoins with $ logo); each NOW tile: today's move (chains.json "intraday", hourly from the live listing), "sells if the 07:00 close is X% lower than now", "New money: BUY TODAY / LATE BUT OK / TOO LATE" (BUY close <24h, <48h, older); ETH/BTC line removed; RRG folded into "Map vs Bitcoin, picture only"; Giver card = headline + 3 lamps (BTC short, BTC medium, Alts) + one level line, from /giver_view.json. Picks v5: up to 3 biggest coins with a $1M+ DexScreener pool (token-pairs per coin) or $5M+ CMC volume (labelled "buy on Binance or Bybit"), cache state["picks5b"]. Giver Telegram reader on the droplet: /opt/giver (700), venv telethon 1.45, tg_setup.py (one-time QR login, Ben double-clicks ~/Desktop/Connect Giver Telegram.command, asks api_id/api_hash from my.telegram.org and an optional Anthropic key, files 600), tg_read.py (cron :12 + giver-read.timer :42, flock /tmp/giver_read.lock; messages private in msgs.jsonl; stance lamps auto only if /opt/giver/.anthropic exists, else new_msgs count), giver_fix.py cron */30 (rerun if 2h stale, alertgate report after 3h, login-expired alert max once a day); no session yet (web Telegram in Chrome not logged in; kookwatch session deleted 17 Sep). Live chains.py c631e760e26464376162d04fb7253f88, picks.py 71a9a51939a3352cdd0771a88af13fb7, rotation.html c8722954c13bb8de165edb28b7217735; backups *.bak-v57*, crontab.bak-v57. verify 49 PASS / 0 FAIL.
- [stated] 4 Oct 2026 10:30 BKK, Ben: the Giver turned short-term bearish in TacFellas on 3 Oct; could not find the "Connect Giver Telegram" file on his Desktop.
- Done 4 Oct 10:30 BKK: Giver card set from TacFellas (Short-term bearish: net short crypto; BTC short Bearish, BTC 1 to 2 months Unclear, Alts Bearish). Telegram Desktop on the Mac is readable by computer use (TacFellas channel, 295 subscribers; Ben joined 4 Oct 09:19). Droplet path without api keys: /opt/giver/web_tg.py (Playwright headless Telegram Web, profile /opt/giver/webprof 700); one-time link = QR page http://159.223.88.168/tglink-<random>/ from the transient unit giver-link (up to 12 h, page removed after), opened on his Mac; 2-step password helper ~/Desktop/Giver Telegram password.command (writes /opt/giver/.pw2fa 600, used once, deleted). tg_read.py reads via Telethon if .tgsession exists, else via web_tg.py read once /opt/giver/web_ok exists (read selectors .bubble[data-mid] not yet verified on a logged-in page). Old Connect Giver Telegram.command moved to ~/kookwatch/giver/.
- Done 4 Oct 11:12 BKK: Giver Telegram reader LINKED on the droplet (Telegram Web session in /opt/giver/webprof, login 04:05 UTC from Singapore = the droplet; web_ok present). TacFellas peer #-2267902863 (giver_cfg.json web_peer). web_tg.py read: waits for .chatlist-chat, reads .bubble[data-mid]:not(.service) .translatable-message; first run stored 11 messages (msgs.jsonl 600), unread 0 (classified_upto 3 Oct). Login gotchas fixed: the password page has 3 password inputs (the visible one is the 2nd) so typing uses a mouse click at the box; first helper runs sent an empty password. Lamps still need an Anthropic key at /opt/giver/.anthropic to update by themselves; otherwise the card shows the unread count.
