Bot Titles
MON-WALLET-COPY-V1Performance So Far
MON-WALLET-COPY-V1Future Performance Expectations · 7d / 30d / 90d
MON-WALLET-COPY-V1| Window | Net USD | Fires | Tier / state | Shape · what has to happen |
|---|---|---|---|---|
| 7d | -$1 – +$2 | 40–120 | 5 MON unproven · 20 MON ceiling (no 50) | CLEAN-DATA WINDOW (from 2026-06-11). First honest read of the edge: whisper signals now arrive at head, blind positions get priced for exits. Watch whether whisper-triggered strategies (contract-probe, whisper-confirms-cluster) stop bleeding once they fire on fresh tokens instead of 18-day-old rugs. Net likely still near breakeven at floor size, but the DATA finally means something — this is the sample every concentrate/kill call should be based on, not the contaminated history. |
| 30d | $0 – +$10 | 250–500 | 20 MON for proven tail-survivors only | CONCENTRATE phase: once a winner (cluster-velocity-v2 is the candidate — +$0.52, mean +30%, PF 86) clears ≥10 capped closures with no single < -$0.60, raise its ceiling selectively. Bleeders stay at T0. Upside comes from sizing the ASYMMETRIC winners, not from more fires. |
| 90d | +$10 – +$60 | 700–1,400 | 20–50 MON for ≤3 proven winners · 5 MON rest | Strategy stack collapses from ~20 noisy signals to the 2-3 that survive a tail at size. Per-fire average creeps up via selective ceiling raises on survivors — NOT a blanket scale. Entry-side exitability filter (block tokens whose round-trip cannot clear) cuts the honeypot tax. |
Strategy Roll-up
MON-WALLET-COPY-V1| Strategy | Seed WR% | Live n | → n=30 | Live WR% | Mean % | PF | Gross $ | Gas $ | Net $ (a/gas) | Fires | Status |
|---|---|---|---|---|---|---|---|---|---|---|---|
| cluster-alpha-v1 | 39 | 75 | ✓ | 38.7 | +10.83 | 10.94 | +$0.56 | -$1.05 | $-0.49 | 553 | BELOW FLOOR |
| contract-probe-v1 | 27 | 48 | ✓ | 29.2 | -4.65 | 0.61 | $-0.12 | -$0.65 | $-0.77 | 188 | BELOW FLOOR |
| whisper-confirms-cluster-v1 | 31 | 47 | ✓ | 29.8 | +11.66 | 4.20 | +$0.33 | -$0.63 | $-0.30 | 404 | BELOW FLOOR |
| cross-chain-trader-v1 | 40 | 31 | ✓ | 38.7 | +2.36 | 1.24 | $-1.01 | -$0.40 | $-1.41 | 267 | BELOW FLOOR |
| cluster-velocity-v2 | 13 | 30 | ✓ | 13.3 | +12.83 | 30.70 | +$0.36 | -$0.40 | $-0.04 | 553 | BELOW FLOOR |
| narrative-rotation-v1 | 50 | 28 | 2 | 28.6 | -5.23 | 0.25 | $-0.11 | -$0.40 | $-0.51 | 286 | BELOW FLOOR |
| moonshot-follow-v1 | 30 | 22 | 8 | 54.5 | -2.79 | 0.64 | $-0.24 | -$0.27 | $-0.50 | 123 | ACTIVE |
| stealth-twap-v1 | 50 | 15 | 15 | 26.7 | +5.64 | 7.32 | +$0.14 | -$0.20 | $-0.06 | 313 | BELOW FLOOR |
| elite-stalker-v1 | 63 | 12 | 18 | 25.0 | -3.87 | 0.06 | $-0.04 | -$0.15 | $-0.20 | — | BELOW FLOOR |
| sniper-follow-v1 | 63 | 8 | 22 | 37.5 | +15.10 | 7.93 | +$0.15 | -$0.12 | +$0.03 | — | BELOW FLOOR |
| moonbag-detector-v1 | 43 | 4 | 26 | 75.0 | +12.46 | 4.77 | +$0.05 | -$0.05 | $-0.00 | — | SEEDING |
| momentum-pump-v1 | 75 | 4 | 26 | 25.0 | +0.53 | 5.55 | +$0.00 | -$0.06 | $-0.06 | — | SEEDING |
| golden-window-v1 | 70 | 4 | 26 | 0.0 | -2.51 | 0.00 | $-0.01 | -$0.05 | $-0.06 | — | SEEDING |
| active-scanner-v1 | — | 3 | 27 | 33.3 | -1.27 | 0.09 | $-0.01 | -$0.04 | $-0.05 | — | SEEDING |
| holder-growth-v1 | 55 | 3 | 27 | 0.0 | -11.42 | 0.00 | $-0.12 | -$0.03 | $-0.16 | 34 | SEEDING |
| elite-single-v1 | 65 | 2 | 28 | 50.0 | +1.20 | 9.24 | +$0.01 | -$0.03 | $-0.02 | 60 | SEEDING |
| ignition-detector-v1 | 65 | 1 | 29 | 100.0 | +8.41 | — | +$0.01 | -$0.01 | $-0.00 | — | SEEDING |
| elite-convergence-v1 | 80 | — | — | — | — | — | — | — | — | — | SEEDING |
| confluence-of-3-v1 | 70 | — | — | — | — | — | — | — | — | — | SEEDING |
| dev-deployer-launch-v1 | 35 | — | — | — | — | — | — | — | — | 1 | SEEDING |
| telegram-momentum-v1 | 50 | — | — | — | — | — | — | — | — | 1 | SEEDING |
Trigger-Wallet Attribution
MON-WALLET-COPY-V1| Trigger Wallet | n | WR% | Mean % | PF | Net USD |
|---|---|---|---|---|---|
| 0x55ac14aad096…TOP | 1 | 100.0 | +135.21 | — | +$0.1435 |
| 0x5a65e2f31187…TOP | 4 | 75.0 | +54.12 | 433.94 | +$0.0924 |
| 0x95b9a20bf689…TOP | 1 | 100.0 | +92.48 | — | +$0.0510 |
| 0x6e1a61d1ebfe…TOP | 1 | 100.0 | +10.63 | — | +$0.0376 |
| 0xb8ee88d0ede1…TOP | 2 | 50.0 | +4.33 | 2.35 | +$0.0168 |
| 0x319434b2a0dc…TOP | 2 | 100.0 | +4.22 | — | +$0.0133 |
| 0xca85555bd853…TOP | 1 | 100.0 | +24.17 | — | +$0.0037 |
| 0x2c7bdb473615…TOP | 2 | 50.0 | -5.40 | 0.41 | $-0.0015 |
| 0xde333303e5c3…TOP | 1 | 100.0 | +2.68 | — | $-0.0031 |
| 0xa7f3633b4f53…TOP | 1 | 100.0 | +4.97 | — | $-0.0081 |
| 0x7aae3e0fede9…TOP | 1 | 100.0 | +4.50 | — | $-0.0082 |
| 0x4fb20ae51c44…TOP | 1 | 100.0 | +4.93 | — | $-0.0090 |
| Bottom performers (not already shown above) ↓ | |||||
| 0xb01caea8c6c4…BOTTOM | 30 | 40.0 | +2.61 | 1.26 | $-1.3889 |
| 0xde222221be03…BOTTOM | 1 | 0.0 | -54.39 | 0 | $-0.2634 |
| 0xf52fb36f52da…BOTTOM | 2 | 0.0 | -20.77 | 0 | $-0.2153 |
| 0x11b68ed43964…BOTTOM | 1 | 0.0 | -98.91 | 0 | $-0.0817 |
| 0xceca2c143967…BOTTOM | 1 | 0.0 | -99.23 | 0 | $-0.0816 |
| 0xc06ebbefd940…BOTTOM | 1 | 0.0 | -59.41 | 0 | $-0.0552 |
| 0x5964e651d8a5…BOTTOM | 3 | 33.3 | -4.95 | 0.11 | $-0.0551 |
| 0x3a2c50d6892f…BOTTOM | 2 | 0.0 | -10.37 | 0 | $-0.0407 |
Recent Fire Attempts
MON-WALLET-COPY-V1Token Reverters (24h)
MON-WALLET-COPY-V1Biggest Block
MON-WALLET-COPY-V1Biggest block (2026-06-11): a stale sensor was masking the edge question — the "edge disproven" read was made on broken data. RUNNING · HEARTBEATING (mon-b3c-fullauto + mon-b3c-exit services active). Two silent failures found + fixed this session: (1) the whisper pre-trade feed was 18.5 days stale (cursor 76.5M vs head 80.5M — it could never catch a 0.4s/block chain at 100 blk/8s; now clamped to fast-forward to head), and (2) the blind-position exit-price safety net was 100% LiFi-429 banned (no throttle behind a header that claimed one; now spaced to 16s/call). Both verified live. See the top two items in "Optimisation ideas" for the mechanics.
Why this matters more than the risk story. The prior verdict (below) concluded the mechanism is sound but "the edge per signal is too thin to clear gas — DISPROVEN at safe size." That conclusion rested on a post-fix sample of ~18 closures captured WHILE whisper was 18 days stale and the exit safety net was banned. Several strategies (contract-probe-v1 mean −60.8%/trade with −99% rugs, whisper-confirms-cluster-v1 8.3% WR) were mechanically buying three-week-old "pre-launch" signals — tokens that had already rugged by purchase. Their bleed is an artifact of the stale feed, not a property of the thesis. The edge has not actually been tested on clean data yet.
Honest read (revised): the risk model is PROVEN (tail capped, validated 06-05); the EDGE is now UNKNOWN-on-clean-data, not disproven. 2026-06-11 is a clean-data epoch boundary — pre-06-11 per-strategy P&L should not drive go/kill calls. Path to "yes": let ≥7d of fresh closures accrue post-fix, re-read per-strategy edge (especially the never-fairly-tested EARLY-ENTRY hypothesis), THEN decide concentrate-vs-kill. The asymmetric winners (cluster-velocity-v2, sniper-follow-v1) are real but were judged on a stale book; bleeders stay auto-demoted to T0 while the clean sample builds.
Fantasy
MON-WALLET-COPY-V1✓ SHIPPED 2026-06-10 — this was the standing fantasy ("b4 per-wallet P&L sits in a state file nobody reads") and it is now wired: monad/intel-sources/wallet-trust-builder.js merges each trigger wallet's OWN tape P&L (pnl-stats) with OUR realized copy P&L (b4-attribution.byWallet) into monad/wallet-trust.json. ELITE cohort (tape-proven + copy-record-not-contradicting) earns an upside-only T1 size floor at fire time (b3c-fullauto trust sizing, B3C_TRUST_SIZING=off to disable); confirmed bleeders from EITHER view auto-refresh wallet-bleeder-blocklist.json (manual seeds preserved) — the dual-view catches wallets like 0xb01c… that look acceptable on tape but cost us money to copy. Runs at the end of the 2h wallet-scoring cron chain, which also resurrected the whole Layer 3-6 scoring stack (pnl-fifo/classifier/flags/sandwich/funding) that had been silently dead since 2026-05-07..09 (tier1 was 0 for a month). Remaining upside: count elite votes 2-3× in confluence checks, not just size floors.
Suggestions for Improvement
MON-WALLET-COPY-V1- 01CRITICAL**RE-BASELINE BEFORE ANY VERDICT (2026-06-11).** The "edge is DISPROVEN at safe size" / "cohort-copy has no measurable edge" conclusions below were drawn on data captured while (a) whisper ran 18.5 days stale and (b) the exit-price safety feed was rate-limit-banned (next item). They are CONTAMINATED. Action: treat 2026-06-11 as a clean-data epoch boundary; ignore pre-06-11 per-strategy P&L for go/kill decisions and re-accrue ≥7d of fresh closures before re-judging edge. The kill-clock (30d cap-survival window) should restart from 2026-06-11, not 2026-06-03. In particular the EARLY-ENTRY hypothesis (first-N-buyers + proven-early-wallet) was NEVER fairly tested — its data source IS the whisper feed that was stale. Re-run the day-14 early-entry validation only on post-06-11 captures.
- 02HIGH✓ FIXED 2026-06-11 (two rounds) — the blind-position exit safety net was rate-limit-banned. spot-price-poller.js supplies SYNTHETIC prices for open positions whose token never hit our trade tape (the exact "blind position" class behind the −95% catastrophe) so the exit ladder can still fire. It was getting 100% LiFi HTTP-429. Round 1: its header promised MAX_REQ=4/min but NO throttle existed — 12 open positions fired 12 back-to-back quotes; added 16s LIFI_MIN_GAP_MS spacing + re-entrancy guard. **Round 2 (same-day check): burst spacing alone re-banned the key** — sustained ~144 quotes/hr against what is clearly an HOURLY quota shared with the exit-daemon's blind probes ("retry in 51 minutes"). Added (a) per-token quote cooldown (TOKEN_QUOTE_COOLDOWN_MS=15min — dust-position exit ladders don't need 90s granularity; the blind stop has a 2h grace anyway) and (b) a global 429 backoff that parses the server's stated ban window and stops ALL quoting until it passes, instead of hammering through the ban. Worst-case ~48 quotes/hr now. **Still-open follow-up:** an on-chain quoter fallback (slot0/Quoter) would remove the LiFi dependency from the safety net entirely; and a dedicated key for the executor's probes would de-couple the two consumers.
- 03HIGH**Add a pipeline-freshness panel — this class of bug hid for ~18 days because nothing watched it.** Every cursor-driven daemon (whisper approval/bridge, decoder, price-joiner, funding-graph, cluster-watcher) should publish {lastCursorBlock, headBlock, lagBlocks, lagMinutes} to one monad/pipeline-freshness.json, surfaced as a panel here with amber/red thresholds per layer. The existing DELAYS section on /detective documents EXPECTED latencies; this measures ACTUAL lag so a stuck cursor pages instead of silently poisoning strategies. Pair with the heartbeat-stall watcher (which checks file mtimes) — mtime was fresh on whisper-state.json the whole time (it kept writing), so mtime-liveness missed it; lag-vs-head is the missing signal. ~1-2h.
- 04CRITICAL**SUPERSEDED THESIS (2026-05-30): the cohort-copy approach has no measurable edge.** Five independent backtests on 38d of real signal-observations proved post-confirmation cohort signals do not predict pumps — wallet COUNT + confidence cap at ~8% hitting +100%@24h (daily-best-pick hit 2x on 0 of 9 days), 1h-MOMENTUM is look-ahead bias (delayed entry → median −7%), and cohort QUALITY (proven/elite buyers) shows NO separation — MORE proven buyers is WORSE (crowding = you are late). By the time ~1k wallets confirm a token (~6h), the move is gone. The R-round cohort-refresh / floor-override / per-wallet-attribution suggestions below are tuning a DEAD thesis — deprioritized. Surviving glimmer = EARLY-ENTRY (first ~3 buyers alongside a proven-EARLY wallet, BEFORE confirmation). New capture daemons launched 2026-05-30: launch-cohort-capture.js (first-30 buyers/launch + quality) + forward-lattice.js (dense forward prices on every launch) — validate the early-entry hypothesis at day-14 on the wide dataset they build. Loss-avoidance (sellability / exit-liquidity gating) is the only PROVABLE edge today.
- 05CRITICAL**PulseChain port-over plan (2026-05-30) — do NOT port the cohort-confirmation thesis (proven dead).** Port instead: (1) EARLY-ENTRY — stand up the same first-N-buyer + forward-price-lattice capture on PulseChain new pools (we already run burned-LP + new-pool detection), then fire on first-few-buyers-with-a-proven-early-wallet, NOT on cohort confirmation. (2) EXIT-LIQUIDITY gating — a pre-entry round-trip sell-sim (reject ratio < 0.8) + exit-on-thinning; the Monad book lost ~44% of realized P&L to just 3 honeypot/−99% delayed-rug exits. (3) Portable infra: proposal/sentinel-time capture (PLS-AGG already has the sentinel feed), emit-time stablecoin/verdict blacklist filter, per-token cooldown, daily-PnL halt, systemd execution, canonical netNative accounting. SEQUENCE: capture first (≥14d) → validate strike-rate → only then build the executor. Do not ship a PulseChain copytrade executor before early-entry clears a bar.
- 06HIGH**Narrow runaway-pause gate** — defensive backstop, NOT primary work. Per Chef directive 2026-05-26: focus on more wins + more data, not cutting strategies off. Rule: pause only the egregious bleeders → n≥15 AND NetUSD ≤ -$0.10 AND mean_pct ≤ -5%. Today (2026-05-26 audit) NOTHING triggers — cluster-alpha-v1 (n=10, -$0.012, -0.42%) is mildly negative but within noise; whisper-confirms-cluster-v1 (n=6, -$0.067, -5.46%) is below the n≥15 threshold (let it accumulate). Ship the rule but expect it to fire rarely. Supersedes the prior critical entry below (WR<25% / n=10) which would have killed cluster-velocity-v2 — our top P&L contributor (n=13, +$0.52, +30.23%) — per the audit. Preserves data collection. ~1h.
- 07CRITICALAuto-retire underperforming strategies at n=10 (not n=30). Current B3C_MIN_EXPECTED_WR gate reads SEEDED expected WR, not live. whisper-confirms-cluster-v1 has 4 closures, 0% live WR, -8.00% mean, -$0.07 NetUSD but its seed of 60% keeps it firing. Add a "live override at n≥10 if liveWR < 25%" rule in lib/wr-registry that pauses the strategy until next R-round re-seeds. Stops bleed from clearly-broken strategies before n=30.
- 08CRITICALInvestigate cross-chain-trader-v1 sub-pattern (20 closures, 40.0% live WR / +15.02% mean / 6.03 PF / +$0.30 NetUSD). Low WR + high mean = right-tail capture. Want to know: which of the cross-chain signal sub-types (CEX-in vs L2-bridge vs same-chain whale) drives the wins? If we can isolate, promote sizing on the predictive sub-type and demote the rest.
- 09HIGHSurface per-wallet attribution. b4-attribution.json already computes bestWallet/worstWallet per strategy but it's not exposed anywhere. Build a /bots/MON-WALLET-COPY/wallets tab that shows the top/bottom decile of the ~1000 tracked wallets by P&L attribution. Lets us promote a high-trust sub-cohort whose votes weight more heavily.
- 10HIGHWire confluence-of-3-v1 trigger. The strategy is configured (seed 70% WR) but has 0 fires lifetime — likely because the cross-strategy correlation check is matching the wrong field. Verify it watches the central monad/strategy-fires.ndjson firehose, not per-strategy state files. Confluence is meant to be the meta-strategy that picks up tokens where multiple emitters agree — currently silent.
- 11HIGHPromote sniper-follow-v1 sizing. 3 closures, 66.7% WR, +45.57% mean, PF 149.61, +$0.21 NetUSD. Small-n caveat but the pattern is strong. After n=10 if WR ≥ 55%, bump position size 1.5×. Don't wait for n=30 — the EV gradient is too steep to leave on the table.
Conclusion
MON-WALLET-COPY-V1Verdict (2026-06-11): risk-contained, and the edge is now MEASURABLE for the first time — a stale sensor was hiding it. Primary Monad bet since 2026-05-12, mechanically operating: ~130 closed / ~15 open, all 20 strategies firing through mon-b3c-fullauto.service → mon-b3c-exit.service. Lifetime net is negative, but this session established that the whole book was captured on broken instruments: the whisper pre-trade feed ran 18.5 days stale (cursor 76.5M vs head 80.5M) and the blind-position exit-price feed was 100% rate-limit-banned — both fixed + verified live today. The tail is independently CAPPED (20-MON ceiling + net-neg→T0 demote, validated 06-05: every post-fix fire 3 MON, worst -5.1%). So the prior conclusion — "can't run net-positive at the cap because gas eats the edge" — was measured on contaminated data: whisper-triggered strategies were buying 18-day-old pre-launch tokens that had already rugged. The honest status is not "pre-profit because no edge" but "edge untested on clean data." 2026-06-11 is the baseline; the real question gets answered ~06-18 on fresh closures.
Failure mode #1 — per-strategy sample sizes are too small to scale. Best %-return strategies are cross-chain-trader-v1 (20 closures, +15.02% mean) and sniper-follow-v1 (3 closures, +45.57% mean, n=3 — small-n caveat the size of Monad itself). Auto-calibration kicks in at n=30; we are 10-28 closures away on most. Until then, we can't tell which strategies have edge vs. which got lucky in 20 trades.
Failure mode #2 — bleeders were bleeding for a now-KNOWN reason (2026-06-11 update). whisper-confirms-cluster-v1 (0% live WR) and contract-probe-v1 (−60.8%/trade, −99% rugs) are both whisper-TRIGGERED — and whisper was 18.5 days stale, so they were buying tokens that had already rugged. Their bad stats are an artifact of the stale feed, not proof the strategies are broken. Now that whisper is live, re-judge them on POST-06-11 closures before any auto-pause. A live-WR override at n≥10 is still worth shipping as a backstop, but it must key off CLEAN-window WR or it will kill strategies for a bug that's already fixed.
Failure mode #3 — broken strategies stay marked active. confluence-of-3-v1 is configured but has 0 fires lifetime. telegram-momentum-v1's input file is 154h stale because the alphalens scraper isn't writing it. Both stay listed; both contribute zero signal.
Fixable? Yes — and the highest-leverage fix (live sensors) is now DONE; the verdict is genuinely open again. Path forward: (1) re-baseline from 2026-06-11 — judge every strategy only on post-fix closures; the stale-feed book is not evidence. (2) Add the pipeline-freshness panel so a stuck cursor pages instead of silently poisoning strategies for 18 days (this bug's real lesson — mtime-liveness missed it; lag-vs-head is the missing signal). (3) Ship the live-WR auto-pause at n≥10 but key it off CLEAN-window WR. (4) Re-run the never-fairly-tested EARLY-ENTRY hypothesis on fresh whisper data. (5) Raise size only on a strategy that prints n≥10 clean closures, net-positive, no single < -$0.60. If at ~06-18 the clean window is still under $0 with no tail-survivor, THEN the chain hypothesis is wrong — but not before, because until today it was never tested on live data.
2026-05-30 update — the chain hypothesis tested out NEGATIVE early. Rather than wait for n=30, five independent backtests on 38d of signal-observations settled it: post-confirmation cohort signals (count, confidence, wallet-quality) do NOT predict pumps, and crowding is actively negative — the copy-the-cohort thesis is structurally late. Realized accounting was also corrected (netNative fix): the book is net-positive but cents-scale + tail-dependent, and ~44% of losses came from 3 honeypot/−99% delayed-rug exits. PIVOT: the only surviving edge candidate is EARLY-ENTRY (first-few-buyers alongside proven-early wallets, pre-confirmation), now being captured by two new daemons (launch-cohort-capture + forward-lattice, live 2026-05-30) for a day-14 validation; loss-avoidance (sellability/exit gating) is the provable edge. PulseChain port: port EARLY-ENTRY + EXIT-gating + the infra (proposal-time capture, blacklist filter, per-token cooldown, PnL-halt, systemd) — NOT the cohort-confirmation thesis. Stand up capture first, validate, then build the executor.
2026-06-03 update — RISK MODEL REBUILT (the -96% incident). Failure mode #2 above (bleeders/tails surviving) turned out to be the whole game. On 2026-06-01 cross-chain-trader-v1 closed a 50-MON position at -95.75% = -$1.46 — the 50 MON was a Tier-2 promote that BYPASSED the 20-MON ceiling (the floor Math.max(sizeMon, stratBase) overrode it), and the -18% hard stop never fired because the gain-based exits read a tape price that vanished when the token stopped trading. One trade flipped lifetime +$0.85 → -$0.77. Shipped same-day: (1) a true 20-MON hard ceiling nothing can bypass; (2) net-negative→T0 demote + tail-scar T2 block; (3) a blind-position active stop that marks-to-market when the tape goes dark and exits at the strategy's own -18% instead of -96%; (4) a catastrophic-loss TG pager + daily digest (none existed); (5) a NetUSD veto on the dormant WR-based auto-disabler that would otherwise have killed the winners. Thesis is now CONTAIN then CONCENTRATE — bound the tail, prove a winner survives at the cap, then raise only that winner's ceiling. The EARLY-ENTRY / exit-gating pivot above is unchanged and complementary: loss-avoidance is still the provable edge.**
Active Tests & Monitors
MON-WALLET-COPY-V1| Test / Monitor | Started | Key Metric | Decision Criteria |
|---|---|---|---|
| Blind-stop instant-rug coverage (NEW 2026-06-05) | 2026-06-05 | blind_hard_stop exits in b3c-exits.ndjson; closures with entryPx==null + realized vs trigger | WATCH. The 06-03 blind hard stop had a HOLE — entryPx==null (instant-rug) positions skipped it and rode to the 240h backstop; fixed 2026-06-05 (skip relocated below the blind stop). 0 blind_hard_stop exits have fired yet (rare condition). Confirm the first instant-rug now exits near the -50% floor instead of -95%. Exit machinery is active (hard_stop ×5 / time_stop ×1 in 24h). |
| P&L display correctness (FIXED 2026-06-05) | 2026-06-05 | /api/monad/b3c-positions realizedPct min (must be >= -100%) | ✅ FIXED — the positions handler summed per-event realizedUsd, double-counting the cost basis on laddered exits → impossible sub-(-100%) losses (and +80% winners shown as -117%). Now totalOutMon - inMon. Verified: 0 trades < -100%, min -99.52%. b4-attribution (FIFO) was always correct; only this raw aggregation was wrong. |
| Per-strategy n=30 milestone | 2026-05-12 (post-relaunch) | monad/strategy-state.json fires + b4-attribution.json n per strategy | At n=30 closures, b4-attribution.js auto-overwrites the seeded expectedWR with measured WR. Strategies below 50% (or below their floor override) become non-firing. **Update 2026-05-27**: cross-chain-trader-v1 at **n=29** (1 closure away from milestone! WR 41.4%, +$0.14 net). cluster-velocity-v2 at n=13 (23% WR, +$0.52 net). whisper-confirms-cluster-v1 at n=6 with 0% WR — auto-halts at n=10. Bot fired 96 closures lifetime, 25 open. Last execute_ok 31h ago (narrative-rotation-v1). |
| BootstrapHold release | 2026-05-12 | monad/strategy-state.json.bootstrapHold | Currently false (no hold). Re-enabling would stop live fires until each strategy has n=30 in PAPER mode. Trade-off: slower data accumulation vs less seed-risk. |
| Strategy emit ownership | 2026-05-11 (split) | emitter field per strategies/*.json (watcher vs strategy-runner) | 8 watcher-emitters, 12 strategy-runner-emitters. strategy-runner.js skips strategies whose JSON has emitter:watcher to prevent double-emit. Verify no double-emit if a new strategy lands. |
| Holder-tracker hot tier coverage | 2026-05-11 | Active-tier token count in data/holder-tracker/monad.db hot table | Cap = 100. Promotion daemon runs every 5min, merges 4 sources. Discovery use-case (NEW growing tokens) needs cluster-watcher candidate universe in the promote sources — not done yet. |
| Wallet-monitor-ws single-writer health | 2026-05-11 | logs/monad-wallet-tape-YYYY-Wnn.ndjson freshness + watchdog restart count | critical-daemon-watchdog.sh respawns within ~5min on death. heartbeat-stall.timer alerts on stale state. Tape rotation is weekly — always read via monad/tape-files.js:listTapeFilesChronological(). |
| Telegram-momentum-v1 input freshness | memory 2026-05-12 | monad/telegram-mentions.json mtime | ✅ RETIRED 2026-05-21 via enabled:false in strategy JSON. _disabled_reason documents: input file 22d+ stale, alphalens scraper not configured (telegram-mentions.json still says "awaiting-channels"). To re-enable: configure alphalens public-channel scraper to keep monad/telegram-mentions.json fresh (<1h), OR wait for Path D MTProto listener (blocked on operator burner-SIM step). No ongoing cost — strategy is skipped at evaluator dispatch. |
| Confluence-of-3 fire rate | 2026-05-12 | b4-attribution.byStrategy[confluence-of-3-v1].n + strategy-state.fires | ✅ ROOT CAUSE FOUND 2026-05-27 — **trigger.kind "confluence" has no evaluator registered**. monad/strategy-runner.js:406 TRIGGER_EVALUATORS only has 9 kinds (cluster_signal, whisper_signal, single_wallet_buy, rotation_event, whisper_cluster_confluence (2-strategy), holder_growth, good_deployer_launch, cross_chain_trader_buy, telegram_momentum). The 3-strategy "confluence" kind from monad/strategies/confluence-of-3-v1.json is silently skipped. To fix: write evalConfluenceOfThree() that walks strategy-fires.ndjson for a 4h window and counts ≥3 distinct strategies on the same token (per R17 finding: WR 80%, peak +50%). ~1-2h build. NOT shipped — pending operator approval (additive code on a live bot, low risk but explicit go-ahead recommended). OR retire strategy if not worth the build. |
Compromises
MON-WALLET-COPY-V1| Decision | Aggressive ← | Current Position | → Conservative | Notes |
|---|---|---|---|---|
| WR floor (B3C_MIN_EXPECTED_WR = 50) | Permissive · seed any new strategy live | Strict · only proven strategies fire | Global floor below which a strategy cannot fire. Right-tail strategies (moonbag, contract-probe, moonshot) have floorOverride (20-30%) because EV comes from win-magnitude not WR. Reads SEEDED expectedWR until live n≥30 auto-calibrates. | |
| Bootstrap-hold (currently OFF) | Permissive · fire on seeded WR | Strict · paper-mode until live calibrated | When ON, no strategy fires live until its live n≥30. Released so the bot can accumulate live data faster — at the cost of trades fired on potentially-stale seeds. monad/strategy-state.json.bootstrapHold = false today. | |
| Floor overrides for right-tail strategies | No exceptions to the 50% floor | Per-strategy overrides for moonshot patterns | moonbag-detector-v1 = 30, contract-probe-v1 = 30, moonshot-follow-v1 = 20, dev-deployer-launch-v1 = 25. Acknowledges that low-WR strategies can have higher EV if avg-win >> avg-loss. Risk: overridden strategies have less data, more variance. | |
| Wallet cohort size (~1000 tracked) | Tight · only the very top performers | Wide · every smart wallet seen recently | Trade-off between signal density (small cohort = high-conviction signals) and discovery (large cohort = catch emerging alpha). Periodic R-rounds refresh the cohort (R5 most recent: 56% overlap with prior, OOS validated). Top quartile not yet weighted differently. | |
| Capture latency (monadLogs WS) | Standard eth_subscribe(logs) | Proposal-time monadLogs / monadNewHeads | Monad-native subscriptions land ~1s earlier than eth_subscribe (logs trigger at proposal-time, not finalization). Single-writer model with watchdog respawn (~5min). Polling fallback is RETIRED. | |
| Emit-time stablecoin filter | Permissive · let strategies emit any token | Strict · skip blacklisted tokens before write | 3 emit paths wired to lib/stablecoin-blacklist (strategy-runner, momentum-pump-watcher, moonbag-detector-watcher) — they skip blacklisted tokens BEFORE writing to strategy-fires.ndjson. Prevents the executor from ever seeing a USDC fire signal. | |
| Firehose vs per-strategy queues | Per-strategy queues · isolated failure | Single firehose · simple, central order | Single monad/strategy-fires.ndjson firehose consumed by mon-b3c-fullauto. Simpler to reason about + cleaner ordering, but a stuck emitter can starve the executor of all other strategies. Mitigated by 8 watcher daemons + 1 strategy-runner all writing independently. | |
| Execution: systemd vs tmux | Tmux · operator visibility | Systemd · independent restart semantics | 2026-05-11 migration: b3c-fullauto + b3c-exit moved from tmux to systemd user services. Survives operator-tmux outages. heartbeat-stall.timer alerts every 2min on stale state files. Cost: less ambient operator awareness — must `journalctl --user -u mon-b3c-fullauto.service -f` to tail. | |
| Per-token cooldown (perTokenLastFireTs) | No cooldown · ride every fresh signal | Long cooldown · 1 fire per token per N days | Per-strategy perTokenLastFireTs in strategy-state.json prevents the same token+strategy combo firing twice in a short window. Bounds repeat-buy exposure during pump cycles. | |
| Daily PnL halt gate (haltedUntil) | Run uncapped | Halt after first drawdown of the day | Per-strategy haltedUntil + haltReason. Auto-engages if dailyPnL drops below a threshold; auto-resets at UTC midnight. Today 0 strategies show haltReason set — none are tripped. | |
| Confluence meta-strategy weighting | Treat confluence-of-3 as 1 of 20 strategies | Weight confluence as the highest-trust signal | confluence-of-3-v1 fires when ≥3 distinct strategies hit the same token within 4h. Seeded at 70% WR. Currently rarely fires (0 closures, possibly not wired right). When working, should weight more heavily than single-strategy emits. | |
| Cohort refresh cadence (R-rounds) | Frozen cohort · trust historical winners | Continuous refresh · chase live performers | Manual R-round process (most recent R17). Re-mines the alpha-discoveries-v2.json output and re-cohorts. 56% overlap with prior round (some persistence, some churn). Faster cadence would catch decay sooner; cost is more cohort-churn variance. |
Parameters
MON-WALLET-COPY-V1| Parameter | Value | Reasoning | Potential Adjustment(s) |
|---|---|---|---|
| B3C_MIN_EXPECTED_WR | 50 (%) | Global WR floor below which a strategy cannot fire. Right-tail strategies have floorOverride values. | Drop to 40 to allow more strategies through. Raise to 60 to be stricter. Today every strategy meets the seeded floor; live WR is the real question. |
| bootstrapHold | false | monad/strategy-state.json field. When true, no strategy fires live until n=30 paper closures. | Re-enable when launching a brand-new R-round cohort. Disable once live data is flowing. |
| Wallet cohort size | ~1000 tracked | Cohort of smart-money wallets we follow. R5-refresh 2026-05-03 (56% overlap with prior). | Tune cohort size up if signal density is too low (more wallets, more noise but better discovery). Down if signal-to-noise needs sharpening. |
| Tape rotation | Weekly NDJSON | logs/monad-wallet-tape-YYYY-Wnn.ndjson. Single writer model (monad-wallet-monitor-ws.js). | No tuning. Always consume via monad/tape-files.js:listTapeFilesChronological() — never hardcode a filename. |
| Watchdog respawn | 5 min | scripts/critical-daemon-watchdog.sh checks critical daemons every 5min and respawns on death. | Tighten to 1min if recovery latency matters more than CPU overhead. |
| Holder-tracker hot tier cap | 100 tokens | Hot tier polled every 5min via Moralis. Cold tier ~5k tokens every 3.5d. | Raise hot cap to 200 if Moralis quota allows + discovery needs improve. Today the bot-traded subset fills the slots. |
| Tape capture subscription | monadLogs + monadNewHeads | Monad-native WS subscriptions, ~1s ahead of standard eth_subscribe(logs). Proposal-time delivery. | No tuning. Polling fallback (monad-wallet-monitor.js) is RETIRED — do not re-enable. |
| Emit-time blacklist | stablecoin-blacklist.json | lib/stablecoin-blacklist.js mtime-cached reader. 3 emit paths skip blacklisted tokens before write. | Add tokens via the JSON file; readers pick up changes on mtime tick. |
| Cron refresh cadence | hourly + 30min | v4-pool-keys-refresh hourly, pool-first-activity hourly, lag-alpha hourly, wallet-intel-refresh every 30min. | Cron entries in crontab -l | grep -E "v4-pool|pool-first|lag-alpha|wallet-intel". |
| Per-strategy fires (file) | monad/strategy-state.json | Per-strategy: fires count, lastFireTs, perTokenLastFireTs, activePositions, dailyPnL, haltedUntil/haltReason. | Edit via b3c-fullauto state machinery only; manual edits race with the daemon. |
| Backfilled WR seeds | monad/strategy-wr-registry.json | Single source of truth for seeded expectedWR. Auto-overwritten by b4-attribution.js at n=30. | Update seeds when a new R-round produces fresh backtest WR. Never edit manually unless you know what you're doing. |
| Live calibration n=30 | b4-attribution closedCount | Minimum sample size before live WR overwrites the seed. | Lower to n=20 if seeds are clearly broken and we want faster auto-retire. Raise to n=50 for more confidence. |