← Back

name: polymarket-screener description: Use when the user asks about the Polymarket Screener, prediction markets, Polymarket trading, CLOB API, wallet/wagmi/RainbowKit, builder code "SZHub", price alerts, portfolio, signals, or anything related to the polymarket-screener project at /home/app/polymarket-screener/.

Polymarket Screener Skill

Quick Access

⚠️ ПЕРЕЕЗД НА MALAYSIA — ЗАВЕРШЁН 2026-06-21 (читай ПЕРЕД старыми заметками ниже)

Проект целиком переехал с main-сервера (Ванкувер, 1 ядро задыхался) на Malaysia VPS (2 vCPU / 8 ГБ, 100 ГБ NVMe). План: docs/MIGRATION_TO_MALAYSIA_PLAN.md (в репо/бэкапе).

🌊 ПОТОК (Flow) + РУЧНЫЕ СДЕЛКИ С ДЕПОЗИТА — 30 Jun 2026 (commits на redesign-nav: 55183bc/e4ec2a7/fe771ed + демон)

🌐 i18n (en/ru/es) — 2 Jul 2026 (испанский добавлен, коммиты 280e63e/a4ae8e5/18f16fc)

🎚️ ЛИМИТЫ КОПИЙ — переработаны 2 Jul 2026 (8d455cc+005df49)

Stack

⚠️ PIVOT → КОПИТРЕЙДИНГ (7 Jun 2026) — источник истины docs/COPYTRADING_PLAN.md

Продукт развернулся в копитрейдинг. Навигация V3 ниже = АРХИВ (будет переделана).

Дедуп кличек китов (16 Jun, 5c856de pushed)

Баг: разные адреса хешатся в одно «Прилагательное+Зверь» комбо → дубли в списках («Чёткий Дракон» ×2 в «Мои копии»). Генератор ~2500 комбо vs 4000+ китов → коллизии неизбежны (birthday paradox). Деплоенная версия дедуп НЕ делала; начатый в раб.дереве фикс лепил hex-хвост адреса («…A3F») — уродливо + лик адреса (файл сам это запрещает). Решение: whaleCodenamesUnique() (client/src/utils/whales.ts) при коллизии перебирает свободные комбо детерминированно от адреса (beast inner / adj outer, старт от натурального имени) → чистые разные имена («Чёткий Дракон»/«Чёткий Грифон»), без хвоста/лика. Стабильно: адреса сортируются, lexи-меньший держит базовое имя. Hand-picked WHALE_NICKNAMES не перекатываются (фикс. идентичности), только резервируются. Применено во ВСЕХ списках: CopyTradingPage, LeadersPage, UserAnalyticsPage. Одиночные карточки (WhaleProfile/PriceChart) не трогал (1 кит = нет коллизий). Деплой клиента = npm run build (tsc+vite) + pm2 restart polymarket-screener (index.html вмораживается через Vec::leak).

Баг-аудит копитрейда (10 Jun, сессия 6)

Прошёл copy-loop.mjs+copy-exec.mjs на баги (money-path). 5 найдено+починено, задеплоено. Коммиты 4f06964 (Chunk1) + 862ff77 (Chunk2), запушены.

Продолжение сессии 6 — drpc false-zero + History UI + 2 краша клиента (10 Jun)

Триггер: Rick спросил «сколько открыто позиций?» — я сказал 4 (демон-ledger), а Портфель показал 8 (Data API). Разные источники правды: моя цифра = positions.json status=open (что демон активно ведёт); Портфель = Data API /positions (реальные on-chain холды кошелька, включая дуст-лузеров и сирот). Копнув разницу — нашли реальные баги.

Авто-освобождение зависших слотов (9 Jun, сессия 5)

Builder-код на копи-ордерах + PWA force-update (9 Jun, сессия 4)

Portfolio P&L / History / вкладки (9 Jun, сессия 3)

Копитрейд — ростер китов + ценовой band (9 Jun, сессия 2)

Navigation (V3 — redesign «Лента возможностей», 31 May) [АРХИВ, см. PIVOT выше]

5 вкладок: [🔥 Возможности] [🐋 Киты] [🔍 Скринер] [📊 Портфель] [⚙️ Ещё]

Key Files

API Endpoints

Signals & Whale win-rate pipeline (Фаза 4, 31 May)

Подключение кошелька — user-connect (1 Jun, В ПРОЦЕССЕ)

i18n (RU/EN) + вкладка «Портфель» (1 Jun)

Вкладка «Скринер» в порядок (5 шагов, 1 Jun)

Киты v2 — бэкфилл истории + алерты + PnL профиля (31 May)

Вкладка «Киты» — досье + near-resolved + направление + консенсус (31 May)

Two-scale signals + longshot fade + countdown (31 May, pushed c6e9518)

UI-полировка ленты (31 May, 6 фиксов pushed 03da988)

Builder Code

Audit (May 30) — 7/9 fixed, pushed to origin/master

CLOB V2 Builder Fee (CRIT #2 — ✅ IMPLEMENTED 30 May)

Was V1 = BROKEN → builder earned $0. Migrated to CLOB V2 (live 28 Apr 2026). Full verified spec + Step A hash-proof: docs/CLOB_V2_MIGRATION.md. Commits: A order.ts 7905e4f, B OrderForm f78b05a, C routes.rs bc063c4, Step A fixture fed8cbe. Re-verified: viem (order.ts) == py-clob-client-v2, digest+sig byte-identical (scripts/stepA_v2_ref.py). ⚠️ Live test still pending — needs funded EOA in MetaMask (see Wallet note).

🎯 Redesign «лента возможностей» (APPROVED 30 May — IN PROGRESS)

Источник истины: docs/REDESIGN_PLAN.md (24f94e3). Главный экран / = карточная лента 🔥 Сигналы (WHALE/SPIKE/MOMENTUM/NEW MONEY/WIDE SPREAD + Buy-кнопка), отдельная вкладка 🐋 Киты (лента + лидерборд + профили), скринер-таблица → 3й план. Навигация 5 вкладок: Сигналы/Киты/Скринер/Портфель/Ещё. Deps #1 (edge.rs) и #3 (CLOB V2 trade) ✅. Уже есть кирпичи: EdgeScanner+WhaleFeed на /signals, volume_anomalies, /whale/:address. Метод: 1 микрошаг → commit → спросить дальше. Фазы: 1 каркас навигации (4 шага) · 2 лента Сигналов (6) · 3 вкладка Киты (3) · 4 полировка (3).

✅ Фаза 1 DONE (31 May, 3e8e992/11c7c80/0e744ca): роуты-заглушки (HomePage→/home), BottomNav + Sidebar 5 вкладок синхронно. ✅ Фаза 2 DONE (31 May, 787eb263e2acba): backend GET /api/signals/feed (edge_scores type=WHALE + volume_anomalies type=SPIKE; WHALE-first sort key +2.0; normalized strength WHALE=edge_score/SPIKE=min(score/10,1); фильтры category/type/min_strength post-fetch по пулу 300). useSignalsFeed hook (SignalCard=WhaleSignal|SpikeSignal). SignalCard.tsx (бейдж+картинка+метрика). SignalsFeed страница (grid/skeleton/empty + filter-bar). Buy CTA → /market/:id?side= (OrderForm initialSide). ⚠️ directional WHALE в БД=1, спайков ~50 (данные, не код). ⚠️ PWA SW кэширует — fix: закрыть PWA/Clear site data. ✅ Фаза 3 DONE (31 May, 4775c42): WhalesPage заменила заглушку — SubTabs 🐋 Сделки (WhaleFeed) + 🏆 Топ-кошельки (useTopTraders/whale/:address). 3.1/3.3 уже существовали (/api/signals/whales+/top-traders+/whale/{address}), переиспользованы. NB: LeaderboardPage=билдеры SZHub, не киты. СЛЕДУЮЩИЙ ШАГ = Фаза 4 (полировка): 4.1 WR+спец-категория китов в карточках Сигналов, 4.2 типы NEW MONEY/MOMENTUM в edge.rs+фид, 4.3 судьба старого HomePage (/home) — слить в Скринер или удалить (нужно разрешение Rick).

Wallet note (live test)

weather-bot = custodial sigType2 (funds in proxy 0x3643…); screener = non-custodial sigType0 (browser EOA-direct). Can't live-test screener with bot wallet (funds in proxy, type-0 order won't see them) → need a funded EOA in MetaMask.

DB Schema (7 tables)

Contracts (Polygon Mainnet)

Progress

CSS Architecture

PWA

Mobile wallet signing (WalletConnect)

Live trading flow (доведено до исполненного ордера 2 Jun)

Known Issues / TODO

Build & Deploy

# Frontend
cd client && npm run build

# Backend (на сервере с cargo)
cd server-rust && cargo build --release

# PM2
pm2 restart polymarket-screener

2026-06-08 — Copy-trading M3-final-b: deposit-wallet L1 auth + sigType3 order (server-side) WORK

2026-06-08 — 🏆 M3 COMPLETE: live server-side copy-order on CLOB

2026-06-08 — Detection loop Чанк 1+2 (live copy works)

2026-06-08 — Чанк 3a: WebSocket near-real-time детекция

2026-06-08 — Чанк 3b+3c: round-trip + pm2-демон

2026-06-08 — Security fix (Privy JWT) + copy-trader daemon LIVE

2026-06-09 — Copy-trader: per-event кап + per-leader PnL на карточках

2026-06-09 — Полная локализация UI (RU/EN) + бейдж копий + сортировки

2026-06-09 (сессия 2) — Честные слоты по китам + on-chain сверка реестра + топап нативным USDC

2026-06-10 (сессия 7) — WS 429 блокер → POLL-режим, конфиг, ledger-фиксы, +2 кита

Портфель P&L — переделка вкладки (11 Jun, серия по скриншотам Rick)

Цель: «всегда актуальные данные» + читаемость метрик. Все правки в server-rust/src/routes.rs (portfolio_summary, portfolio_activity, helper redeem_pnl_by_market) + клиент client/src/components/portfolio/{PnlDashboard,TradeHistory}.tsx, hooks/usePortfolioHistory.ts, i18n/translations.ts, App.css. Деплой: cd server-rust && cargo build --release (~2мин, бинарь напрямую target/release/polymarket-screener) + cd client && npm run build (tsc -b — ОБЯЗАТЕЛЕН, rolldown НЕ тайпчекает) + pm2 restart polymarket-screener. Тест-кошелёк DW 0x50A8061e…F24Ff, проверка curl localhost:3240/api/portfolio/summary?address=… и …/activity?….

PolyCopy — диагностика эджа + фиксы прибыльности (11 Jun вечер)

Ключ: DW 0x50A8061e… = копи-счёт, его P&L = табель PolyCopy. Диагностика «почему минус»: наш winrate 27% vs стейтед-WR китов 72%. Утечки (по логам демона Малайзия + positions.json):

Фиксы в node-executor/copy-loop.mjs (канон → rsync Малайзия /root/poly-exec/pm2 restart copy-trader; env аддитивно pm2 set copy-trader:VAR val):

Ростер (state в copy_subscriptions, main DB data/screener.db): демон читает GET /api/copy/active (WHERE status='active', фильтр FOLLOWER DID), подхват ~30с, лог [poll] N leader(s). Пауза = UPDATE … status='paused'. Профиль кита для отбора: whale_wallets(pnl/wr/last_seen) + whale_trades(avgBuy из BUY-цен, sell%, crypto% regex по market_question/slug). Критерии: PnL>$15k, WR≥58%, avgBuy 0.35–0.78 (главный — фаворит-фарм >0.80 блоу-апит), крипто<30%, ≤4д, ≥30 сделок. sqlite3 CLI нет → python3.

Leaders UI (LeadersPage.tsx): идентиконы (addrHue/addrInitials из адреса) вместо общего 🐋; метка «🟢/🔴 на реале» из GET /api/copy/pnl (демон POSTʼит per-leader на /api/copy/pnl через PNL_URL). ⚠️ снапшот state.copy_pnl IN-MEMORY → обнуляется при рестарте screener, демон перепостит на своём цикле (секунды). i18n leaders.onReal/realPnlTip.

SELL realized в History (cfd2d48): realized_pnl_by_key (обобщён из redeem): REDEEM по conditionId, SELL по id={txHash}-{asset} (несколько продаж/рынок). portfolio_activity вписывает в SELL+REDEEM. Клиент TradeHistory: SELL → realized знаком+цветом, центы для <$1.

Презентация/анонимизация китов + свежесть Лидеров (12 Jun)

Единый утиль client/src/utils/whales.ts (Leaders+MyCopies+WhaleProfile одинаково):

🚀 Прод-запуск копитрейда — эпик (12 Jun, источник истины: docs/BETA_LAUNCH_PLAN.md)

Цель (Rick): ОДИН прод-грейд продукт → внутр. тестирование на РЕАЛЬНОЙ системе → прод ~неделя. НЕ урезанная бета. Прод-гейт = 6 критериев: эдж / security / секреты / мультиюзер / ops / legal. План = 5 фаз + Фаза L (legal).

Фаза 0 — гейт эджа (идёт, фоном): замер profit factor с stop-loss+mirror-exit. Артефакты data/edge-measurement/: baseline-ledger-2026-06-11.json, README.md, measure.mjs (тянет ledger с Малайзии, окно по openedAt>=1781231224, считает PF/WR/per-leader). Baseline all-time PF 0.73/WR47%. Гейт: PF>1.0 на ≥30 → продолжаем. ~14-16 Jun → node measure.mjs. 🔑 Правило: НЕ менять торговую логику демона / НЕ применять политику до гейта (иначе замер недостоверен).

Фаза 1 — security = ВАРИАНТ A (строгий, выбрал Rick). Спека docs/PRIVY_POLICY_SPEC.md. Аудит: server-ключ подписывает 5 путей, вывод средств ТОЛЬКО через deposit-wallet Batch (executeDepositWalletBatch). Эмпирически (живой Privy API): ❌ политика не заходит в массив Call[] (валидатор давится типом), ✅ матч domain.verifyingContract, ✅ default-DENY. Финал A: политика на SERVER-ДЕЛЕГАТА (addSigners({signerId:kc34moyfw73mo5whwfjqpewy,policyIds})): 1 правило ALLOW eth_signTypedData_v4 WHERE verifyingContract in [exchangeV2 0xE111…996B, negRiskV2 0xe2222…0F59]

Фаза 2 — мультиюзер онбординг (2.1 a-d ✅ задеплоено): клиент деплоил Safe, а копитрейд в DEPOSIT-WALLET → разрыв.

Фаза 2 — фундинг (2.5 a-b ✅ задеплоено): Rick выбрал вариант A (крипто). Депозит = показ DW-адреса+копи+«pUSD/Polygon». Вывод = withdrawDepositWallet transfer-батч подписью ВЛАДЕЛЬЦА EOA (не делегата). i18n dep./wd.. В PrivyAccount.

4.1 risk-дисклеймер ✅ задеплоено: CopyConfigModal гейт первой активации (localStorage polycopy_risk_accepted_v1), 4 пункта (риск/лаг/«не выводим»[A]/контроль юзера)+чекбокс. i18n risk.*. Editing подписки пропускает. NB: модалка УЖЕ даёт юзеру mirrorExits+drawdownStop (плюс к не-дискреционной структуре).

E2E journey: шаги 1-4,6,7 ✅ работают; шаг 5 (демон мультиюзер 2.2-2.4) + шаг 8 (политика 1.3) — ПОСЛЕ гейта эджа. Legal (docs/LEGAL_RISK.md, отложен но в уме): R1 Polymarket аудитит копитрейд-апы (отзыв builder-кода); R2 adviser-регистрация Канада NI 31-103 (наша дискреция → строить не-дискреционно); R3 гео-обход через Малайзию; R4 не-кастодиал↔security заодно. Нужен реальный юрист перед деньгами. Билдер-фи→$10k: доход=notional×rate/10000 (ОБЪЁМ, не число сделок). Сейчас ~$1/день. $10k@1%=$1M notional. Рычаги: юзеры×размер позиции, ручные сделки скринера, taker 0.5→1%, удержание трафика. → BETA_LAUNCH_PLAN Chunk 4.3.

Сессия 13 Jun 2026 — гейт-чистка китов + 5 UI-фич

Гейт эджа / профилирование китов (как делать)

Фичи (все фронт; #3 +1 Rust-роут)

  1. Position-card ended badge (TradePage.tsx): завершён только при pos.redeemable===true, иначе почасовой timeUntil(endDate); окно расчёта → t('time.hr',{n:'<1'}). (commit ee58b7f)
  2. Статус archived (useCopySubscriptions.ts union + CopyTradingPage + LeadersPage + translations): «Стоп»→setStatus(addr,'archived') (не remove/delete), Мои копии фильтруют archived, Лидеры бейдж 🟠🕘 leaders.badgeArchived. Бэк НЕ трогали (/api/copy/active уже фильтрует active). (commit ba8f0de)
  3. Попап «+N исходов» (EventsList.tsx): новый GET /api/screener/events/{event_id}/outcomes (routes.rs, тот же запрос исходов БЕЗ обрезки entry.len()<3, фильтр event_id=?) → попап вместо ссылки на polymarket.com. .ev-more
  4. 🐋 Холдинги китов на картах поз (Вариант B, commit c10369c): hooks/useLeaderHoldings.ts фетчит позиции активных лидеров (из useCopySubscriptions, status=active) через Data API (CORS открыт из браузера), индекс по conditionId (несколько лидеров на рынке→крупнейший холд). TradePage карта: 🐋 {whaleCodename(null,addr)} держит {formatVolume(value)}. Анонимно. ⚠️ Вариант C (точный «кит→размер входа в момент копии») = ПОСЛЕ гейта: демон пушит positions(conditionId→leader+leaderSize) в POST /api/copy/pnl (правка торгового демона).
  5. Клички (whales.ts): WHALE_NICKNAMES map (lowercase addr→кличка) в начале whaleCodename, приоритет над label. Прилагательное+существительное по стилю. Surface везде (Лидеры/Мои копии/карты поз — все юзают whaleCodename). Легко переделать = правка мапы.

Грабли сессии

13 Jun (продолжение) — i18n клички, мульти-кит, маркеры на графике

14 Jun — Friend-Beta: мультиюзер-демон + self-serve депозит (Блоки A,B,C,E,F1; план docs/FRIEND_BETA_PLAN.md)

🔑 Правило весь сессион: живой node-executor/copy-loop.mjs НЕ трогать (byte-identical, эдж-гейт PF 0.83<1.0); весь мультиюзер = отдельный инстанс copy-trader-mu (copy-loop-mu.mjs); все money-path скрипты DRY по умолчанию; политика A НЕ применяется до гейта. 10 коммитов 0a62a24..8566a8f (pushed).

A. Мультиюзер-демон copy-loop-mu.mjs (форк single-user 1:1, per-user users=Map<addr,{dw,eoa,budget,executor,ledger:Map}>, write-through в copy_positions через API):

B. Self-serve депозит (USDC→авто-pUSD):

C. Per-user портфель (0943853): был хардкод TradePage portfolioAddress=DW Rick → утечка. Фикс: authed GET /api/copy/wallet→DW юзера (рядом с POST на том же роуте); TradePage резолвит per-user. Изоляция подписок уже ок (authed_user→DID, list/upsert/delete скоупят).

E. Privy политика A node-executor/privy-policy.mjs (НЕ исполнен): orders-only (спека §4b — ALLOW только CLOB-домены exchangeV2/negRiskExchangeV2, прочее enclave DENY). create/show/apply, apply за APPLY=1. ⚠️ применять ПОСЛЕ гейта (ломает авто-redeem/wrap→юзер-present).

F1. Ops node-executor/health-check-mu.mjs: Telegram-алерт демон-stale / низкий баланс. Cron 15мин.

Грабли: git commit -F heredoc с /api/… → sandbox принимал за cd-таргет → писать в .git/COMMIT_MSG_TMP. qrcode был транзитивно (объявить явно). cargo в $HOME/.cargo/bin. Удаление кода → TS6133 unused → npm run build (tsc -b).

TODO: G1 (дисклеймер гейтит активацию?) + сухой прогон mu LIVE на тест-DW.

2026-06-14 (ч.2) — G1 дисклеймер + ИНЦИДЕНТ деплой-рассинхрон + страница Кошелёк (W1–W3)

G1 (c4bbcc5): аудит risk-дисклеймера. Гейт уже был (CopyConfigModal: risk-экран перед новой подпиской, чекбокс обязателен, confirm disabled={!accepted}, текст risk.p1-p4 en/ru). Дыра мультиюзера: RISK_KEY localStorage был ГЛОБАЛЬНЫЙ → второй тестер на том же браузере наследовал принятие. Фикс: ключ per-DID polycopy_risk_accepted_v1:<did> (usePrivy user.id).

🔴 ИНЦИДЕНТ (Rick: «где стата, зачем сломал»): Портфель показал всё $0. Причина — деплой-рассинхрон Блока C: новый клиент (TradePage дёргает GET /api/copy/wallet) задеплоился, а Rust-бэкенд НЕТ (крутился старый, где роут только POST → GET 405) → depositWallet undefined → portfolioAddress пустой → $0. Деньги/позиции целы on-chain, сломалось только отображение. Диагностика: curl localhost:3240/api/copy/wallet → 405 (не 401) = старый бинарь; user_wallets в data/screener.db (НЕ server-rust/data — там нет таблицы) есть DID+DW Rick; cwd репо-корень, DB_PATH дефолт data/screener.db. Фикс: cargo build (incremental 1.8s = бинарь на диске уже был новый) + pm2 restart polymarket-screener → GET 401 (роут жив). 🔑 УРОК: Блок где меняется и клиент И бэкенд = деплоить ВМЕСТЕ (cargo build + npm build + pm2 restart). Клиент в проде обновляется отдельно — нельзя коммитить серверную правку и не задеплоить бинарь.

Страница Кошелёк (план: Портфель=позиции/P&L, Кошелёк=деньги-в/вывод+настройки; чип=только баланс; не плодить 6-ю вкладку):

2026-06-14 (ч.3) — Страница User Analytics: данные + клички + сортировка + статы юзера

Контекст: Rick гонял по скриншотам страницу «User Analytics» (/analytics/users, admin-only по isAdminEmail, серверный хендлер analytics_users в routes.rs, клиент UserAnalyticsPage.tsx + хук useUserAnalytics.ts). Серия мелких правок по UX.

Деплой-факт сессии: бинарь Rust часто УЖЕ собран (mtime новее исходников) — cargo «Finished» за ~1с = пересборки нет, это норм. Клиентские правки = npm run build + pm2 restart (index.html вмораживается). Серверные = cargo build + restart. Снапшот copy_pnl in-memory → после рестарта пустой ~20-30с пока демон не запушит.

2026-06-15 — FRIEND-BETA LIVE: сквозной тест нового юзера + автономка + EDGE GATE PASS

Главное: прошли ВЕСЬ путь нового юзера на реальном 2-м аккаунте (email sergiizapolskyi, DID cmqel7uqa022w0cjj4wbvbw9b, DW 0x8b95…d3cb, EOA 0xc4b7…4141): регистрация→активация кошелька→депозит $10 USDC→авто-конверт pUSD→подписка→LIVE-копия исполнилась (~$2.80 «Spain», потом ещё). Изоляция данных подтверждена.

🐛 5 багов пойманы+починены (все коммиты pushed master):

⚙️ Автономка (всё крутится без меня, reboot-safe):

🎯 EDGE GATE PASSED (data/edge-measurement/measure.mjs): 81 закрытых копий, PF 1.30, realized +$21.17, winrate 30% (выигрыши крупнее проигрышей). Старт был 0.83. ✅ → разблокированы: п.1 USER_EOA живому, п.2 Privy-политика A, миграция на mu. Инсайт: PF держат 2-3 кита (0x0346af+$17, 0x224a89+$12), а 0x84cfff -$3.96/26 копий — кандидат на вычистку.

🚨 НОВОЕ ПРАВИЛО (CLAUDE.md): НИКОГДА не использовать токен бота Бендера для алертов/задач. Для проектов — отдельный бот от Rick.

Скоуп-апдейт friend-beta: друг может регаться (путь чист). Его копии стартуют только после добавления его DID в FOLLOWER (1 команда). Депозит держать малым ($5-10) пока политика A не навешена.

2026-06-15 (ч.2) — Пост-гейт чанки: Чанк1 USER_EOA ✅ + Чанк2 Privy-политика (упёрлись в архитектуру)

Чанк 1 ✅ (USER_EOA, живой демон безопасен): old copy-exec.mjs last-wins выбор кошелька → с 2 Privy-кошельками при рестарте мог подписать НЕ тем ключом. Фикс: задеплоил текущий copy-exec.mjs (поддерживает USER_EOA/opts.eoa) + задал USER_EOA=0xe2d8…3d3f (Rick EOA) живому copy-trader, рестарт. Проверка: budget=$35.85 (Rick, у тестера было бы $4.65) = правильный кошелёк. 🚨 ГРАБЛЯ повтор: pm2 start ecosystem.copy-trader.cjs снова запустил .cjs как СКРИПТ (имя ecosystem.copy-trader, no-op) → живой демон ~30с лежал. Фикс: ВСЕГДА pm2 start copy-loop.mjs --name copy-trader --interpreter node --node-args="--experimental-global-webcrypto" + ПОЛНЫЙ инлайн-env (LIVE/SUBS_URL/SERVICE_TOKEN/FOLLOWER/USER_EOA/DEPOSIT_WALLET/STATE/POSITIONS/капы). На рестарте --update-env НЕ хватит — SERVICE_TOKEN слетит в ''. pm2 save.

Чанк 2 — Privy-политика A (orders-only), вся подготовка + анализ готовы, остался apply:

РЕШЕНИЯ для следующей сессии (Rick склонился):

2026-06-15 (ч.4) — Q1 ЗАВЕРШЁН: orders-only Privy-политика авто-в-активацию (политика A применена ✅)

Все 3 чанка Q1 сделаны+задеплоены+проверены на ОБОИХ кошельках:

ИТОГ пост-гейт: ✅ Чанк1 USER_EOA + ✅ Q2 один демон (copy-trader-mu оба акка) + ✅ Q1 политика A. Осталось 🔲 Чанк3 чистка убыточных китов (0x84cfff -$3.96/26, 0xcf6c54 -$5, 0x492442 -$4.65).

2026-06-15 (ч.5) — РЕДЕМ-САГА: A построен → C невозможен → B (авто-редем сервером) + инцидент с делегатом

Контекст: orders-only политика (Q1) сломала авто-редем — redeem-dw cron падал policy_violation. Резолвнутые рынки (игры 14 июня) висели «open», капитал заперт.

2026-06-15 (ч.6) — ESLint клиента до нуля (полный аудит ошибок)

Аудит проекта: Rust cargo clippy --all-targets ✅ 0, tsc -b ✅ 0, node-executor node --check ✅ все 29 .mjs валидны. ESLint клиента 18 замечаний (react-hooks v7, react@19) → почищено до 0 (3 чанка 762276f/b38e474/8ecd44f, pushed).

2026-06-16 — Бэкфилл истории копий + новые киты + Фаза B (позиционный PnL)

Контекст: «My Copies показывает не всю стату» + поиск свежих китов + старт плана улучшения дискавери.

2026-06-19 — Тормоза веб-морды: диагноз 1 ядро + swap + план переезда на Malaysia

Контекст: Rick — «PolyCopy стало медленно грузиться» (скрин: страница кита «Copy leader» висит в скелетоне, карточки не наполняются).


Обновление 2026-06-22 — Фаза 2 редизайн + история 3мес + realized-PnL фикс

Где код / как деплоить

Сделано (на проде)

NEXT

  1. Фолловеры «🔥 N копируют» на карточке — РАЗБЛОКИРОВАНО (3 юзера, 69 активных подписок в copy_subscriptions). Read-time COUNT по leader_address.
  2. Мониторинг первого реального resolved-банка демона (логи closed (resolved/untradeable) … pnl≈$X).
  3. Чанк 4 (ROI 30/60/90 + период-свитчер) — через ~4-6 нед накопления истории.
  4. Бизнес: docs/BETA_LAUNCH_PLAN.md, FRIEND_BETA_PLAN.md, ROADMAP_V2.md на Malaysia.

Сессия 2026-06-23 — Конкурент-анализ + P0.2 EDGE + Counter-trading дизайн

Сессия 2026-06-23 (вечер) — Editorial-редизайн UI «Поликопи» (Бендер)

Что: полный визуальный редизайн фронта в стиль Editorial (serif) + Liquid-Chrome бренд. Утверждён Rick'ом по живому мокапу.

Сессия 2026-06-23 (ночь) — FADE counter-trading LIVE + 2 фикса (Бендер)

Доделаны 3 TODO. Всё на проде poly-dev.szhub.space / Malaysia. Демон copy-trader-mu не пострадал (copy-юзеры торгуют норм).

Сессия 2026-06-24 (продолжение) — FADE-доска UX-доводка + PWA Update-кнопка

Активировал верхний Leaders-тумблер COPY⇄FADE (был «SOON») и отладил FADE-«Losers»-доску по фидбеку Rick'а. Все правки — фронт, демон не тронут.

Сессия 2026-06-24 (вечер) — Автозачисление депозита + Chunk6 + полный аудит (5 фиксов)

Сессия 2026-06-24 (поздно) — FADE боевой тест + метки 💀 в портфеле

📌 TODO / Follow-ups (поликопи)

Сессия 2026-06-24 (ночь, ч.2) — fade-китов выбор досконально + возврат copy

Сессия 2026-06-25 — Whale bet sum + mirror-exit + redeem + КОРЕНЬ зомби-pending

Сессия 2026-06-26 — MU-демон аудит + 3 money-path фикса (LIVE деплой)

⚠️ ОТКРЫТЫЕ ПРОБЛЕМЫ (2026-06-26, для след. сессии)

💱 АВТО-КОНВЕРТ USDC→pUSD (deposit-watch) — где живёт и как проверять (2026-06-29)

🌊 ПОТОК — вкладки достроены (30 Jun 2026)

2026-07-01 — ✅ Redeem neg-risk фикс ($18 забраны) + git-реконсиляция node-executor

2026-07-01 (ч.2) — «Сохранись»: reconcile главной копии repo (коммит b9c19bf)

2026-07-01 (ч.3) — «Вариант В» (демон из репо) — уже достигнут по КОДУ, фиксация (демон НЕ трогали)

Проверено на Malaysia (read-only), рестарта денежного демона НЕ было:

2026-07-02 (ч.2) — Whale Card редизайн (карточка кита = стата кита)

Карточка WhaleProfile.tsx показывает СТАТУ САМОГО КИТА (реализованную), НЕ «бэктест под наш конфиг» (тот — устаревший глобал-дефолт, остаётся только на LeadersPage). Секции: A хедер / B «Стата кита» (ROI реализ.=Σpnl÷Σinvested, WR, Резолвнуто, P&L) / C объём / D эффективность по цене входа / E поведение / F график P&L (тумблер 7д/30д/90д/Всё) / G топ рынки / H последние сделки / I мои настройки копирования / J авто-рекомендация. Trust-блок в футере.

2026-07-03 — Whale Analytics (7 фич на карточку кита, чанки 1-8)

По конкурент-ресёрчу (docs/COMPETITOR_ANALYSIS.md разд.5) → план docs/WHALE_ANALYTICS_PLAN.md (11 чанков P0-P2). Все правки в WhaleProfile.tsx + инлайн-лейблы ru/en/es.

2026-07-03 (ч.2) — Coattail: ребренд + логотип-мишень + адаптив