SCANNER BIBLE v1.0.0
generated 2026-10-12 00:25Z
61 feeds · 23,424 legs

Scanner bible

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.

feeds61 50 with an identified writer
ta/vol enrichment 12/61 49 feeds can never carry volume — queue #229
quality rejections 1.2% of 956,873 — the rest are capacity or missing price
entry thresholdNONE nothing is rejected for being low quality

01 The feeds

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.

feedwriter · cronvoltrades expectancyarmedPF total P&Ldaily expectancy trend
fomo fomo_harvester.py 12,42 * * * * ❌ 2356−$859%0.70−$18,288daily expectancy 07-09..10-06 · min $-48 max $47
volume_path volume_sidecar.py */5 * * * * ❌ 2107−$217%0.70−$4,341daily expectancy 08-30..10-11 · min $-38 max $243
frontrun side_cluster_frontrun.py 17,47 * * * * ❌ 1913−$352%0.80−$5,866daily expectancy 07-11..10-10 · min $-34 max $60
momentum_scalp momentum_scalp_detector.py 3-59/10 * * * * via momentum_scalp_gated.sh ✅ 1746−$1851%0.32−$31,055daily expectancy 07-09..08-25 · min $-73 max $72
oggy oggy_watch_prep.py no cron found ❌ 1120−$963%0.51−$10,565daily expectancy 07-07..10-11 · min $-72 max $115
fomo_convergence fomo_card.py 22,52 * * * * ❌ 946−$961%0.46−$8,926daily expectancy 07-09..10-06 · min $-37 max $11
whalemover whalemover_tracker.py None ❌ 926−$441%0.72−$3,365daily expectancy 07-09..10-11 · min $-70 max $233
smartmoney smart_money_convergence.py */10 * * * * via smart_money_convergence.sh ✅ 916−$858%0.62−$7,679daily expectancy 07-07..10-08 · min $-62 max $152
whalemover_rh whalemover_tracker_rh.py None ❌ 903−$322%0.57−$3,035daily expectancy 09-03..10-12 · min $-32 max $36
signals accumulation_detector.py */10 * * * * via accumulation_detector.sh
accumulation_engine.py 13,43 * * * *
✅ 889−$1058%0.57−$9,196daily expectancy 07-10..10-06 · min $-106 max $53
sa_accum sa_accumulation_scan.py 47 */6 * * * DISABLED ❌ 848−$444%0.68−$3,815daily expectancy 07-26..10-10 · min $-51 max $53
source_strategy source_strategy_paper.py 0-59/5 * * * * ❌ 786−$334%0.78−$2,138daily expectancy 08-27..10-11 · min $-103 max $54
accum_engine accumulation_engine.py 13,43 * * * * ❌ 521−$556%0.62−$2,858daily expectancy 07-07..10-09 · min $-53 max $91
wallet_buysize trending_buy_proof_enricher.py no cron found
wallet_buysize_edge.py 3-58/5 * * * * DISABLED
❌ 501$358%1.16$1,350daily expectancy 07-09..09-29 · min $-60 max $178
wallet_intel wallet_intel_scan.py 3 */4 * * * ❌ 456−$346%0.73−$1,372daily expectancy 07-09..10-11 · min $-51 max $52
trending base_trending_scanner.py */15 * * * * via base_trending_scanner.sh
gmgn_trending_multi.py */15 * * * * via gmgn_trending_multi.sh DISABLED
✅ 452−$1068%0.31−$4,718daily expectancy 07-07..10-09 · min $-65 max $57
scout scout_extract.py */5 * * * * ❌ 405−$853%0.32−$3,148daily expectancy 09-10..10-10 · min $-52 max $5
control control_cohort_collector.py no cron found ❌ 383−$1457%0.52−$5,278daily expectancy 07-09..10-10 · min $-97 max $508
oggy_boost oggy_boost_filter.py */5 * * * * via oggy_boost_gated.sh DISABLED ✅ 302−$172%0.94−$385daily expectancy 07-10..10-03 · min $-110 max $260
cipher cipher_signal_parser.py 4-59/10 * * * * DISABLED ❌ 297−$763%0.61−$1,970daily expectancy 07-08..09-20 · min $-69 max $78
alpha_brief brief_pick_tracker.py 11,41 * * * * ❌ 264−$844%0.45−$2,176daily expectancy 07-09..10-11 · min $-104 max $55
sniper sniper_detector.py */10 * * * * via sniper_detector.sh ✅ 230−$2158%0.21−$4,830daily expectancy 07-08..08-18 · min $-64 max $74
volume_spike volume_spike_scanner.py 26,56 * * * * DISABLED ❌ 194−$665%0.59−$1,107daily expectancy 07-07..09-20 · min $-74 max $57
floor_revival floor_revival.py 11-59/15 * * * * ❌ 151−$863%0.57−$1,219daily expectancy 07-07..10-09 · min $-62 max $66
inversion_alpha inversion_alpha_bridge.py no cron found ❌ 149−$1265%0.33−$1,741daily expectancy 08-07..10-08 · min $-44 max $36
cross_cluster sapphy_whale_mover_reporter.py 8,38 * * * * DISABLED ❌ 148−$455%0.69−$559daily expectancy 07-12..10-09 · min $-37 max $68
trench trenches_detector.py */10 * * * * ✅ 124−$2059%0.35−$2,436daily expectancy 07-07..08-22 · min $-76 max $272
michacalls michacalls_extract.py no cron found ❌ 102−$561%0.80−$480daily expectancy 07-22..08-17 · min $-59 max $108
accum_sig_gmgn_cluster writer not identified ❌ 68$651%1.63$437daily expectancy 08-14..10-06 · min $-35 max $75
accum_sig_fresh_swarm writer not identified ❌ 65$654%1.63$401daily expectancy 08-14..10-07 · min $-31 max $77
accum_sig_flow_div writer not identified ❌ 57$149%1.09$58daily expectancy 08-14..10-07 · min $-36 max $65
accum_sig_stealth writer not identified ❌ 55$251%1.23$131daily expectancy 08-15..10-07 · min $-32 max $106
dexlions_kol dexlions_kol_calls.py 19 */3 * * * DISABLED ❌ 44−$377%0.81−$139daily expectancy 07-08..08-08 · min $-78 max $55
leading_conv writer not identified ❌ 40−$32%0.25−$133daily expectancy 10-03..10-09 · min $-6 max $-2
whale_driver whale_driver_paper_bridge.py None via whale_driver_emit.sh ❌ 26−$78%0.02−$170daily expectancy 10-06..10-11 · min $-35 max $-3
dormancy dormancy_scanner.py 21,51 * * * * DISABLED ❌ 21−$1038%0.53−$213daily expectancy 07-19..10-03 · min $-56 max $38
sniffer wallet_feed_poster.py 20 */3 * * * ❌ 18$239%1.24$30daily expectancy 10-04..10-11 · min $-9 max $12
caller_kol writer not identified ❌ 12$1150%2.28$136daily expectancy 10-05..10-11 · min $-1 max $25
sajad_second_leg gmgn_trending_multi.py */15 * * * * via gmgn_trending_multi.sh DISABLED ❌ 11−$1727%0.20−$190daily expectancy 08-07..10-04 · min $-60 max $24
fresh_large_buy wallet_buysize_edge.py 3-58/5 * * * * DISABLED
wallet_intel_scan.py 3 */4 * * *
❌ 2−$460%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

02 The gate layers — what exists, and what it actually gates

These configs are real and loaded. The thing to understand is where they act: conviction gates alerting, not paper entry.

configverloaded bypurpose
conviction_gates.jsonv1.2.0admission_gate.py, conviction.py, feed_bible_extract.py, feed_bible_gen.py, paper_forensics_gen.py, test_gate_exemptions.py, token_selection_command.pyConviction gate for the master scanner firehose. Score = sum of distinct CATEGORY weights + diversity bonus + boosts - vetoes. Cross-type convergence
copy_decision_gates.jsonv1.0.0admission_gate.py, copy_decision.py, feed_bible_extract.py, paper_forensics_gen.py, paper_trader.pyCopy-decision engine gates. Embodies the copy-timing philosophy: WHICH/WHAT/HOW/WHEN to copy fresh/dormant/smart wallets. Tunable.
tdwa_gates.jsonv1.4.0daily_top_gainers_feed.py, feed_bible_extract.py, tdwa_tiering.py, tdwa_trigger_processor.pyTDWA 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.jsonvNonefeed_bible_extract.py, gmgn_filter_comb.py
gmgn_gate.jsonvNonebase_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.jsonv1.1.0feed_bible_extract.py, feed_bible_gen.py, master_filter_dashboard.py, token_selection_command.py, volume_gate.py, volume_horizons.pyTunable volume-gate config. Every number here was MEASURED on the 260726 attribution study (n=938 joined closed positions with mcap + absolute net $,

✖ The gap this table makes visible

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.

02b The noise filter — the one shared pre-emission gate

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.

◆ The thesis in one line

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.

#steprule (live values)whywhenhow
1Volume floorvolume < $4,000 → REJECTApplies 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.
2Vol/MC ratio floorOFFOptional 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.
3MC floor — fast passmarket cap ≥ $50,000 → PASS immediatelyAbove 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.
4Sub-floor activity pre-gatevolume < $2,000 OR buys < 5 → REJECTA 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.
5Sized-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.

Who actually runs it — declared vs. running truth

declared in apply_toexpected writer actually imports it?
trending_multigmgn_trending_multi.py✔ RUNS IT
momentummomentum_signal_detector.py✔ RUNS IT
momentum_scalpmomentum_scalp_detector.py✔ RUNS IT
convergencealphafeed_convergence.py✔ RUNS IT
trenchtrenches_detector.py✖ DECLARED, NEVER CALLED

✖ Declared ≠ 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.

02c The other gates — volume · admission · conviction

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.0

The 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.

rulelive valuewhywhenhow
Ratio band — net_buy_vol_1h / mcapLOW ≤ 0.0075 · HIGH ≥ 0.0435This 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 turnoverLOW ≤ 2.636 · HIGH ≥ 10.24Independent 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_1hsweet $500–$2000 · danger ≥ $50000 · gate_enabled=FalseA 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 → verdictA≥2 · B=1 · C=0 · D<0 → C/D = SKIPC/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.0

The 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.

rulelive valuewhywhenhow
Volume SKIPgate_on_volume_skip = TrueRejects 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 vetogate_on_veto = TrueA 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 deployergate_on_veto = TrueThe 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 elsescore · conviction tier · wallet grade · chart archetype · KOL tierExplicitly 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.0

Scores 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.

rulelive valuewhywhenhow
Category weightslevel0 10 · smart 10 · cluster 9 · proven 9 · social 6 · sniper 5 · momentum 4 · exit -6Cross-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 categoryThe whole thesis: two independent kinds of evidence beat two of the same kind.After category weights.Added once per additional distinct category.
TiersPRIORITY ≥ 35 · WATCH ≥ 18 · priority_needs_quality=TruePRIORITY 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 actpaper_universal.py entryLoaded by master_scanner_180.py and copy_decision.py — both ALERT paths. This is the gap §02 exists to make visible.n/apaper_universal has conv_mult (sizing) only.

◆ The one thing to take from this section

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.

03 The caps that actually bind

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.

constantlive value
MAX_OPEN_PER_SRC25
MAX_TOTAL_OPEN300
SIG_MAX_AGE30 * 60
REENTRY_COOLDOWN6 * 3600
S_TIER_RESERVE20
TOP_COPY_N60
MAX_WALLET_COPY80
SIZE100.0
DEAD_STRIKES6
RESCUE_AT3
RESCUE_BUDGET25
BE_CONTROL_EVERY4

◆ How to read this page

feed_bible_gen.py v1.0.0 · thresholds from 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.json
Claude → docker exec <gw> python3 /opt/data/scripts/feed_bible_gen.py · Hermes → queue #238, thread 37479