Every process that feeds new tokens into the system — its real thresholds read from source, its gates, its enrichment coverage, and what it has actually made. Generated, never hand-written: this page reads the running code and config, and marks what it cannot parse rather than guessing. Click any row for what / why / which / when.
Sorted by how many paper trades each has produced. Volume = is this feed on the
ta_enrichment whitelist (without it, no TA and no volume data, ever). The trend line is
daily expectancy with a dashed zero baseline — a falling line below zero is losing faster, not winning.
| feed | writer · cron | vol | trades | expectancy | armed | PF | total P&L | daily expectancy trend |
|---|---|---|---|---|---|---|---|---|
| fomo | fomo_harvester.py 12,42 * * * * | ❌ | 2356 | −$8 | 59% | 0.70 | −$18,288 | |
| volume_path | volume_sidecar.py */5 * * * * | ❌ | 2107 | −$2 | 17% | 0.70 | −$4,341 | |
| frontrun | side_cluster_frontrun.py 17,47 * * * * | ❌ | 1913 | −$3 | 52% | 0.80 | −$5,866 | |
| momentum_scalp | momentum_scalp_detector.py 3-59/10 * * * * via momentum_scalp_gated.sh | ✅ | 1746 | −$18 | 51% | 0.32 | −$31,055 | |
| oggy | oggy_watch_prep.py no cron found | ❌ | 1120 | −$9 | 63% | 0.51 | −$10,565 | |
| fomo_convergence | fomo_card.py 22,52 * * * * | ❌ | 946 | −$9 | 61% | 0.46 | −$8,926 | |
| whalemover | whalemover_tracker.py None | ❌ | 926 | −$4 | 41% | 0.72 | −$3,365 | |
| smartmoney | smart_money_convergence.py */10 * * * * via smart_money_convergence.sh | ✅ | 916 | −$8 | 58% | 0.62 | −$7,679 | |
| whalemover_rh | whalemover_tracker_rh.py None | ❌ | 903 | −$3 | 22% | 0.57 | −$3,035 | |
| signals | accumulation_detector.py */10 * * * * via accumulation_detector.sh accumulation_engine.py 13,43 * * * * |
✅ | 889 | −$10 | 58% | 0.57 | −$9,196 | |
| sa_accum | sa_accumulation_scan.py 47 */6 * * * DISABLED | ❌ | 848 | −$4 | 44% | 0.68 | −$3,815 | |
| source_strategy | source_strategy_paper.py 0-59/5 * * * * | ❌ | 786 | −$3 | 34% | 0.78 | −$2,138 | |
| accum_engine | accumulation_engine.py 13,43 * * * * | ❌ | 521 | −$5 | 56% | 0.62 | −$2,858 | |
| wallet_buysize | trending_buy_proof_enricher.py no cron found wallet_buysize_edge.py 3-58/5 * * * * DISABLED |
❌ | 501 | $3 | 58% | 1.16 | $1,350 | |
| wallet_intel | wallet_intel_scan.py 3 */4 * * * | ❌ | 456 | −$3 | 46% | 0.73 | −$1,372 | |
| trending | base_trending_scanner.py */15 * * * * via base_trending_scanner.sh gmgn_trending_multi.py */15 * * * * via gmgn_trending_multi.sh DISABLED |
✅ | 452 | −$10 | 68% | 0.31 | −$4,718 | |
| scout | scout_extract.py */5 * * * * | ❌ | 405 | −$8 | 53% | 0.32 | −$3,148 | |
| control | control_cohort_collector.py no cron found | ❌ | 383 | −$14 | 57% | 0.52 | −$5,278 | |
| oggy_boost | oggy_boost_filter.py */5 * * * * via oggy_boost_gated.sh DISABLED | ✅ | 302 | −$1 | 72% | 0.94 | −$385 | |
| cipher | cipher_signal_parser.py 4-59/10 * * * * DISABLED | ❌ | 297 | −$7 | 63% | 0.61 | −$1,970 | |
| alpha_brief | brief_pick_tracker.py 11,41 * * * * | ❌ | 264 | −$8 | 44% | 0.45 | −$2,176 | |
| sniper | sniper_detector.py */10 * * * * via sniper_detector.sh | ✅ | 230 | −$21 | 58% | 0.21 | −$4,830 | |
| volume_spike | volume_spike_scanner.py 26,56 * * * * DISABLED | ❌ | 194 | −$6 | 65% | 0.59 | −$1,107 | |
| floor_revival | floor_revival.py 11-59/15 * * * * | ❌ | 151 | −$8 | 63% | 0.57 | −$1,219 | |
| inversion_alpha | inversion_alpha_bridge.py no cron found | ❌ | 149 | −$12 | 65% | 0.33 | −$1,741 | |
| cross_cluster | sapphy_whale_mover_reporter.py 8,38 * * * * DISABLED | ❌ | 148 | −$4 | 55% | 0.69 | −$559 | |
| trench | trenches_detector.py */10 * * * * | ✅ | 124 | −$20 | 59% | 0.35 | −$2,436 | |
| michacalls | michacalls_extract.py no cron found | ❌ | 102 | −$5 | 61% | 0.80 | −$480 | |
| accum_sig_gmgn_cluster | writer not identified | ❌ | 68 | $6 | 51% | 1.63 | $437 | |
| accum_sig_fresh_swarm | writer not identified | ❌ | 65 | $6 | 54% | 1.63 | $401 | |
| accum_sig_flow_div | writer not identified | ❌ | 57 | $1 | 49% | 1.09 | $58 | |
| accum_sig_stealth | writer not identified | ❌ | 55 | $2 | 51% | 1.23 | $131 | |
| dexlions_kol | dexlions_kol_calls.py 19 */3 * * * DISABLED | ❌ | 44 | −$3 | 77% | 0.81 | −$139 | |
| leading_conv | writer not identified | ❌ | 40 | −$3 | 2% | 0.25 | −$133 | |
| whale_driver | whale_driver_paper_bridge.py None via whale_driver_emit.sh | ❌ | 26 | −$7 | 8% | 0.02 | −$170 | |
| dormancy | dormancy_scanner.py 21,51 * * * * DISABLED | ❌ | 21 | −$10 | 38% | 0.53 | −$213 | |
| sniffer | wallet_feed_poster.py 20 */3 * * * | ❌ | 18 | $2 | 39% | 1.24 | $30 | |
| caller_kol | writer not identified | ❌ | 12 | $11 | 50% | 2.28 | $136 | |
| sajad_second_leg | gmgn_trending_multi.py */15 * * * * via gmgn_trending_multi.sh DISABLED | ❌ | 11 | −$17 | 27% | 0.20 | −$190 | |
| fresh_large_buy | wallet_buysize_edge.py 3-58/5 * * * * DISABLED wallet_intel_scan.py 3 */4 * * * |
❌ | 2 | −$46 | 0% | 0.00 | −$93 | — |
| accum_rejected | accumulation_detector.py */10 * * * * via accumulation_detector.sh | ❌ | — | — | — | — | — | not paper-traded |
| accum_sig_bundled_risk | writer not identified | ❌ | — | — | — | — | — | not paper-traded |
| accum | accumulation_detector.py */10 * * * * via accumulation_detector.sh sa_accumulation_scan.py 47 */6 * * * DISABLED |
✅ | — | — | — | — | — | not paper-traded |
| base_launch | base_launcher_detector.py */15 * * * * via base_launcher_detector.sh | ✅ | — | — | — | — | — | not paper-traded |
| convergence | alphafeed_convergence.py */10 * * * * fomo_card.py 22,52 * * * * |
✅ | — | — | — | — | — | not paper-traded |
| fomo_source_convergence | fomo_card.py 22,52 * * * * | ❌ | — | — | — | — | — | not paper-traded |
| fresh_buy_permutation | wallet_buysize_edge.py 3-58/5 * * * * DISABLED | ❌ | — | — | — | — | — | not paper-traded |
| kien_convergence | kien_convergence_detector.py 31 */2 * * * DISABLED | ❌ | — | — | — | — | — | not paper-traded |
| known_convergence | known_wallet_index.py 3-59/15 * * * * | ❌ | — | — | — | — | — | not paper-traded |
| known_distribution | writer not identified | ❌ | — | — | — | — | — | not paper-traded |
| momentum | momentum_signal_detector.py */10 * * * * | ✅ | — | — | — | — | — | not paper-traded |
| runner_blind | writer not identified | ❌ | — | — | — | — | — | not paper-traded |
| runner_mastery | runner_signal_bridge.py no cron found | ❌ | — | — | — | — | — | not paper-traded |
| sapphy_alpha | sapphy_alpha_reporter.py 14 * * * * DISABLED | ❌ | — | — | — | — | — | not paper-traded |
| sapphy_hot | sapphy_hot_alert.py */5 * * * * DISABLED | ❌ | — | — | — | — | — | not paper-traded |
| sniper_shadow | sniper_shadow_feed.py */12 * * * * DISABLED | ❌ | — | — | — | — | — | not paper-traded |
| stealth_convergence | stealth_whale_convergence.py */5 * * * * DISABLED | ✅ | — | — | — | — | — | not paper-traded |
| tweet_alpha | tweet_alpha.py 3-59/10 * * * * | ❌ | — | — | — | — | — | not paper-traded |
| whalemover_alpha | sapphy_whale_mover_reporter.py 8,38 * * * * DISABLED | ❌ | — | — | — | — | — | not paper-traded |
| youtube_alpha | writer not identified | ❌ | — | — | — | — | — | not paper-traded |
| youtube_macro | writer not identified | ❌ | — | — | — | — | — | not paper-traded |
These configs are real and loaded. The thing to understand is where they act: conviction gates alerting, not paper entry.
| config | ver | loaded by | purpose |
|---|---|---|---|
| conviction_gates.json | v1.2.0 | admission_gate.py, conviction.py, feed_bible_extract.py, feed_bible_gen.py, paper_forensics_gen.py, test_gate_exemptions.py, token_selection_command.py | Conviction gate for the master scanner firehose. Score = sum of distinct CATEGORY weights + diversity bonus + boosts - vetoes. Cross-type convergence |
| copy_decision_gates.json | v1.0.0 | admission_gate.py, copy_decision.py, feed_bible_extract.py, paper_forensics_gen.py, paper_trader.py | Copy-decision engine gates. Embodies the copy-timing philosophy: WHICH/WHAT/HOW/WHEN to copy fresh/dormant/smart wallets. Tunable. |
| tdwa_gates.json | v1.4.0 | daily_top_gainers_feed.py, feed_bible_extract.py, tdwa_tiering.py, tdwa_trigger_processor.py | TDWA quality gates. Regime-aware, tunable. weekly=7d realized PnL proxy. v1.3.0 (260622): added extreme_poor regime tier; big_winner floor is now expl |
| gmgn_filter_comb.json | vNone | feed_bible_extract.py, gmgn_filter_comb.py | |
| gmgn_gate.json | vNone | base_launcher_detector.py, base_trending_scanner.py, decision_receipt.py, feed_bible_extract.py, gated_cabal_extract.py, gmgn_gate_watchdog.py, gmgn_resource_dashboard.py, kline_lane_watchdog.py, monitor_overseer.py | |
| volume_gate_config.json | v1.1.0 | feed_bible_extract.py, feed_bible_gen.py, master_filter_dashboard.py, token_selection_command.py, volume_gate.py, volume_horizons.py | Tunable volume-gate config. Every number here was MEASURED on the 260726 attribution study (n=938 joined closed positions with mcap + absolute net $, |
conviction.py v1.1.1 scores the firehose and assigns PRIORITY / WATCH / LOG — but it is
loaded by master_scanner_180.py and copy_decision.py, which drive
alerts. paper_universal.py — the thing that actually opens positions — does not
import it. It has a conviction-derived size multiplier (conv_mult), so conviction
changes how big a trade is, never whether to take it.
So the entry decision is still: is there capacity, and is there a price. Of 956,873 logged
rejections, 1.2% are a quality judgement
(sm_distrib); the rest are src_cap, total_cap and
no_price.
Every step below is read live from lib/signal_filters.py +
strategy_config.json at generation time. Hover any WHY / WHEN / HOW cell for the
full explainer. Thresholds here are Karpathy-tunable, so this table — not any doc — is the truth.
Buy size relative to market cap is conviction. Sub-floor tokens are mostly noise
unless several wallets each made a genuinely sized buy. The filter is built so the only
expensive check (a GMGN traders call) fires only for small tokens that already
show real activity — quality where it matters, cost nowhere else.
| # | step | rule (live values) | why | when | how |
|---|---|---|---|---|---|
| 1 | Volume floor | volume < $4,000 → REJECT | Applies to EVERY token regardless of market cap. A token with no volume cannot be entered or exited at the price we think we see — this is a tradability gate before it is a quality gate. | First, before any market-cap logic and before any API call. | Reads the volume field already present on the candidate record. Zero cost. |
| 2 | Vol/MC ratio floor | OFF | Optional second tradability check — turnover relative to size. Currently disabled (0 = off), so it costs nothing and rejects nothing today. | Immediately after the volume floor, when enabled. | Set min_vol_mc_ratio > 0 in strategy_config.json to activate. |
| 3 | MC floor — fast pass | market cap ≥ $50,000 → PASS immediately | Above the floor a token is considered established enough that buy-size conviction is not the deciding evidence. This branch exists mainly for COST: it returns without spending the expensive per-token traders call. | Whenever market cap clears the floor. This is the majority path. | Pure comparison, no network call. |
| 4 | Sub-floor activity pre-gate | volume < $2,000 OR buys < 5 → REJECT | A cheap guard so we never spend a paid GMGN traders call on an obviously-dead microcap. This is the cost-control half of the design — the rescue below is the only expensive step in the whole filter. | Only for tokens BELOW the market-cap floor. | Uses volume + buy-count already on the record. Still zero cost. |
| 5 | Sized-buy rescue | ≥ 2 wallets each bought ≥ chain threshold → PASS (rescued) | THE CORE THESIS: buy size relative to market cap IS conviction. A sub-floor token is noise UNLESS multiple independent wallets committed real money. This is what rescues a genuinely early token from being thrown away with the dust. | Only for sub-floor tokens that already passed the activity pre-gate — deliberately the narrowest possible slice. | ONE GMGN `token traders` call sampling the top 50 wallets, counting those whose cumulative buy clears a chain-aware native-token threshold: sol $600 · base $525 · eth $525 · bsc $300. The same call also builds the full buy_profile for outcome learning, so it is never paid for twice. |
| declared in apply_to | expected writer | actually imports it? |
|---|---|---|
trending_multi | gmgn_trending_multi.py | ✔ RUNS IT |
momentum | momentum_signal_detector.py | ✔ RUNS IT |
momentum_scalp | momentum_scalp_detector.py | ✔ RUNS IT |
convergence | alphafeed_convergence.py | ✔ RUNS IT |
trench | trenches_detector.py | ✖ DECLARED, NEVER CALLED |
trench is listed in the filter's own apply_to but trenches_detector.py never imports it — so those signals are emitted with no noise filtering at all.
momentum_scalp was exactly this bug until 260816: apply_to declared it,
and momentum_scalp_detector.py — which duplicates the parent's scan loop — had
zero references to signal_filters. The scalp stream admitted candidates the full
momentum detector rejects. This row is generated, so the next occurrence shows up here by itself.
Sibling to §02b. §02 shows which configs exist and who loads them; this shows what each rule actually does, when it fires and why we believe it. Hover any why / when / how cell. All values read live at generation time.
volume_gate
— ENFORCING
· volume_gate_config.json v1.1.0The strongest single entry predictor found anywhere in this system: net buy volume RELATIVE to market cap. Low ratio = early commitment not yet priced; high ratio = we are buying after the crowd. Measured IC vs return -0.186 on n=1,612 observed exits, and it survives the per-source confound control.
| rule | live value | why | when | how |
|---|---|---|---|---|
| Ratio band — net_buy_vol_1h / mcap | LOW ≤ 0.0075 · HIGH ≥ 0.0435 | This is the signal that works. Ratio ceiling ≤0.0435 lifted expectancy -$12.90 → -$1.91 (n=103) and armed% 58.4 → 68.9. | Computed at entry for any feed that carries volume — only 12 of 50 feeds do. | +1 point per LOW band, -1 per HIGH band across this and turnover. |
| Corroborating band — vol / mcap turnover | LOW ≤ 2.636 · HIGH ≥ 10.24 | Independent measure pointing the same direction; used to grade, never alone. | Same moment as the ratio band. | Contributes its own ±1 to the grade. |
| Absolute $ band — net_usd_1h | sweet $500–$2000 · danger ≥ $50000 · gate_enabled=False | A FLOOR DOES NOT WORK — higher absolute net $ is monotonically WORSE in every tier with adequate n. Only a narrow BAND ($500–$2,000, +$2.96 on n=92) is positive, and that is in-sample. This is why it is captured but not gated. | Never — gate_enabled is false by design. | Left visible so the negative result is not silently rediscovered. |
| Grade → verdict | A≥2 · B=1 · C=0 · D<0 → C/D = SKIP | C/D means the commitment is already priced. UNKNOWN fails OPEN — absence of volume data is a coverage gap, not evidence of badness. | At admission, via admission_gate below. | admission_gate reuses the already-computed verdict rather than recomputing it. |
admission_gate
— ENFORCING
· admission_gate_config.json v1.0.0The only real quality-based admission control on paper entry. Deliberately narrow: it gates ONLY on things closer to 'confirmed bad' than 'looks weak', because raw score vs return is r=0.020 (n=3,383) — a linear weighted score empirically does not work, so score stays a SIZE input and never an admission input.
| rule | live value | why | when | how |
|---|---|---|---|---|
| Volume SKIP | gate_on_volume_skip = True | Rejects grade C/D from volume_gate — buying after the crowd. Strongest evidence in the system. UNKNOWN fails open. | Every paper_universal entry candidate. | Reuses volume_gate's shadow verdict; no extra computation. |
| Exit-only veto | gate_on_veto = True | A source whose ONLY category is 'exit' is a distribution/sell signal masquerading as an entry. Unambiguous — no theory required. | Same moment, before sizing. | Reads source_category from conviction_gates.json (the same map conviction.py trusts). |
| Blacklisted deployer | gate_on_veto = True | The system's one pre-existing hard filter. 'The token is confirmed bad', not 'the setup looks weak'. | Same moment. | deployer_intel.DeployerDB lookup; ANY import/lookup failure fails OPEN so an infra problem never blocks trading. |
| Everything else | score · conviction tier · wallet grade · chart archetype · KOL tier | Explicitly NOT admission inputs. They move SIZE only. Widening the gate to conviction tier touches ~35-40% of the book and needs its own OOS proof first. | Never at admission. | Applied as conv_mult sizing inside paper_universal. |
conviction
— ALERTING ONLY — not paper entry
· conviction_gates.json v1.2.0Scores the master-scanner firehose into PRIORITY / WATCH / LOG. The critical thing to understand: paper_universal.py does NOT import conviction. It drives ALERTS, and only a size multiplier in the paper book. Conviction changes how big a trade is, never whether to take it.
| rule | live value | why | when | how |
|---|---|---|---|---|
| Category weights | level0 10 · smart 10 · cluster 9 · proven 9 · social 6 · sniper 5 · momentum 4 · exit -6 | Cross-type convergence (different CATEGORIES agreeing) >> raw signal count. Note exit is NEGATIVE — a distribution signal actively subtracts. | On every firehose candidate. | Sum of DISTINCT category weights — duplicate sources in one category do not stack. |
| Diversity bonus | +15 per extra category | The whole thesis: two independent kinds of evidence beat two of the same kind. | After category weights. | Added once per additional distinct category. |
| Tiers | PRIORITY ≥ 35 · WATCH ≥ 18 · priority_needs_quality=True | PRIORITY additionally requires a high-quality category (level0/smart/cluster/proven) so a pile of weak momentum signals cannot reach the top tier on volume alone. | Final step, drives alert routing. | Raise priority_min to get FEWER alerts — this is the volume knob. |
| Where it does NOT act | paper_universal.py entry | Loaded by master_scanner_180.py and copy_decision.py — both ALERT paths. This is the gap §02 exists to make visible. | n/a | paper_universal has conv_mult (sizing) only. |
Only admission_gate can stop a trade. volume_gate is shadow-only,
and conviction never touches paper entry at all — it routes alerts and scales size.
So the live entry decision is still, overwhelmingly: is there capacity, and is there a
price.
These are the numbers that decide what gets in today. They are capacity limits, not
quality filters — a signal rejected on src_cap was never judged, it just queued behind a
position we already held.
| constant | live value |
|---|---|
MAX_OPEN_PER_SRC | 25 |
MAX_TOTAL_OPEN | 300 |
SIG_MAX_AGE | 30 * 60 |
REENTRY_COOLDOWN | 6 * 3600 |
S_TIER_RESERVE | 20 |
TOP_COPY_N | 60 |
MAX_WALLET_COPY | 80 |
SIZE | 100.0 |
DEAD_STRIKES | 6 |
RESCUE_AT | 3 |
RESCUE_BUDGET | 25 |
BE_CONTROL_EVERY | 4 |
net_buy_vol/mcap). That is
49 of 61 feeds.control is not a bug. It is a deliberately unfiltered random cohort — the
baseline every other feed has to beat. If it ever ranks well, that is a warning about the others.feed_bible.json
(feed_bible_extract.py, reads live source + config) · performance from
paper_universal_ledger.jsonl (21,735 observed exits, DEAD/UNRESOLVED excluded) ·
crons from jobs.jsondocker exec <gw> python3 /opt/data/scripts/feed_bible_gen.py ·
Hermes → queue #238, thread 37479