> ## Documentation Index
> Fetch the complete documentation index at: https://docs.sleuthintel.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Sleuth - Wallet Analyzer - Build Spec v1 (Dev)

> Original Sleuth document.

<div style={{ margin: "-24px -32px", width: "calc(100% + 64px)" }}>
  <iframe title="Sleuth - Wallet Analyzer - Build Spec v1 (Dev)" srcDoc={"<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n<meta charset=\"UTF-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<title>SLEUTH \u00b7 Wallet Analyzer \u00b7 Build Spec v1 (Dev)</title>\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link href=\"https://fonts.googleapis.com/css2?family=Orbitron:wght@500;700;900&family=Space+Grotesk:wght@400;500;700&family=DM+Mono:wght@400;500&display=swap\" rel=\"stylesheet\">\n<style>\n:root{\n  --bg:#0b0d10;\n  --panel:#11151b;\n  --panel2:#0e1116;\n  --border:#1e2630;\n  --ink:#cbd5df;\n  --dim:#7d8b99;\n  --green:#00ff66;\n  --green-dim:#0a7a3c;\n  --heat:#ff7a45;\n  --gold:#d8c9a3;\n  --red:#ff5c5c;\n}\n*{margin:0;padding:0;box-sizing:border-box;}\nhtml{scroll-behavior:smooth;}\nbody{background:var(--bg);color:var(--ink);font-family:'Space Grotesk',sans-serif;font-size:15px;line-height:1.65;}\n.wrap{max-width:1020px;margin:0 auto;padding:0 22px;}\n\n.hero{padding:78px 0 48px;border-bottom:1px solid var(--border);position:relative;overflow:hidden;}\n.hero::before{content:'';position:absolute;top:-140px;right:-60px;width:460px;height:460px;\n  background:radial-gradient(circle,rgba(0,255,102,0.07) 0%,transparent 65%);pointer-events:none;}\n.hero .tag{font-family:'DM Mono',monospace;font-size:11px;letter-spacing:3px;color:var(--green);\n  text-transform:uppercase;margin-bottom:16px;}\n.hero h1{font-family:'Orbitron',sans-serif;font-weight:900;font-size:clamp(1.9rem,5.5vw,3.1rem);\n  color:#fff;letter-spacing:3px;line-height:1.15;}\n.hero h1 span{color:var(--green);}\n.hero .sub{color:var(--dim);max-width:720px;margin-top:18px;font-size:1.02rem;}\n.hero .sub strong{color:var(--gold);font-weight:500;}\n.status{display:inline-flex;gap:10px;align-items:center;margin-top:26px;font-family:'DM Mono',monospace;\n  font-size:11px;letter-spacing:2px;text-transform:uppercase;background:var(--panel);\n  border:1px solid var(--border);border-radius:5px;padding:10px 16px;color:var(--dim);}\n.status b{color:var(--green);font-weight:500;}\n\n.sec{padding:60px 0 8px;}\n.eyebrow{font-family:'DM Mono',monospace;font-size:11px;letter-spacing:3px;color:var(--dim);\n  text-transform:uppercase;margin-bottom:10px;}\nh2{font-family:'Orbitron',sans-serif;font-weight:700;color:#fff;font-size:clamp(1.2rem,3vw,1.65rem);\n  letter-spacing:1.5px;margin-bottom:18px;}\nh3{font-family:'Orbitron',sans-serif;font-weight:700;color:var(--gold);font-size:1rem;\n  letter-spacing:1.5px;margin:30px 0 12px;}\np{margin-bottom:14px;}\np strong{color:var(--gold);font-weight:500;}\n.lead{font-size:1.05rem;}\ncode{font-family:'DM Mono',monospace;font-size:0.85em;color:var(--green);background:rgba(0,255,102,0.06);\n  padding:1px 6px;border-radius:3px;}\n\n.pill{display:inline-block;font-family:'DM Mono',monospace;font-size:10px;letter-spacing:1.2px;\n  padding:3px 10px;border-radius:3px;text-transform:uppercase;white-space:nowrap;}\n.pill.green{background:rgba(0,255,102,0.08);color:var(--green);border:1px solid rgba(0,255,102,0.3);}\n.pill.heat{background:rgba(255,122,69,0.12);color:var(--heat);border:1px solid rgba(255,122,69,0.35);}\n.pill.gold{background:rgba(216,201,163,0.08);color:var(--gold);border:1px solid rgba(216,201,163,0.3);}\n.pill.red{background:rgba(255,92,92,0.1);color:var(--red);border:1px solid rgba(255,92,92,0.3);}\n\n.flow{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin:22px 0;}\n.node{font-family:'DM Mono',monospace;font-size:11px;letter-spacing:1px;background:var(--panel);\n  border:1px solid var(--border);border-radius:4px;padding:9px 14px;color:var(--gold);text-transform:uppercase;}\n.node.hot{border-color:rgba(0,255,102,0.45);color:var(--green);}\n.arr{color:var(--dim);font-family:'DM Mono',monospace;}\n\n.card{background:var(--panel);border:1px solid var(--border);border-radius:8px;padding:20px 24px;margin:14px 0;}\n.card h4{font-family:'Orbitron',sans-serif;font-size:0.92rem;letter-spacing:1.5px;color:#fff;margin-bottom:10px;}\n.card p:last-child{margin-bottom:0;}\n.card.hot{border-left:3px solid var(--green);}\n.card.warn{border-left:3px solid var(--red);}\n\n.grid2{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin:20px 0;}\n@media(max-width:760px){.grid2{grid-template-columns:1fr;}}\n\ntable{border-collapse:collapse;width:100%;margin:18px 0;font-size:0.88rem;}\nth{font-family:'DM Mono',monospace;font-size:10px;letter-spacing:1.5px;color:var(--dim);\n  text-transform:uppercase;text-align:left;padding:10px 14px;border-bottom:1px solid var(--border);font-weight:500;}\ntd{padding:11px 14px;border-bottom:1px solid var(--border);vertical-align:top;}\ntr:last-child td{border-bottom:none;}\ntd.k{color:var(--gold);font-weight:500;}\ntd.g{color:var(--green);font-family:'DM Mono',monospace;font-size:0.82rem;white-space:nowrap;}\ntd.mono{font-family:'DM Mono',monospace;font-size:0.82rem;color:var(--dim);}\n\n.callout{border:1px solid rgba(0,255,102,0.25);background:rgba(0,255,102,0.04);border-radius:8px;\n  padding:20px 26px;margin:26px 0;}\n.callout .ct{font-family:'Orbitron',sans-serif;color:var(--green);letter-spacing:2px;font-size:0.82rem;\n  margin-bottom:10px;text-transform:uppercase;}\n.callout p{margin-bottom:8px;}\n.callout p:last-child{margin-bottom:0;}\n.callout.red{border-color:rgba(255,92,92,0.3);background:rgba(255,92,92,0.04);}\n.callout.red .ct{color:var(--red);}\n.callout.gold{border-color:rgba(216,201,163,0.3);background:rgba(216,201,163,0.04);}\n.callout.gold .ct{color:var(--gold);}\n\nul.clean{list-style:none;margin:14px 0;}\nul.clean li{padding:8px 0 8px 24px;position:relative;border-bottom:1px solid var(--border);font-size:0.93rem;}\nul.clean li:last-child{border-bottom:none;}\nul.clean li::before{content:'\u203a';position:absolute;left:4px;color:var(--green);}\nul.clean li b{color:var(--gold);font-weight:500;}\n\n.footer{border-top:1px solid var(--border);margin-top:70px;padding:30px 0 50px;\n  font-family:'DM Mono',monospace;font-size:11px;letter-spacing:1.5px;color:var(--dim);text-transform:uppercase;}\n</style>\n</head>\n<body>\n\n<div class=\"hero\"><div class=\"wrap\">\n  <div class=\"tag\">// Internal \u00b7 Dev Build Spec \u00b7 v1</div>\n  <h1>WALLET ANALYZER<br><span>BUILD SPEC</span></h1>\n  <p class=\"sub\">How we actually build it. One attribution engine, three surfaces on top: the wallet page, the alerts engine, the Rotation view. <strong>Degen Mode is a skin, never a fork.</strong> Python and TypeScript throughout, consistent with the Tree build spec. Where this conflicts with anything, the whitepaper wins.</p>\n  <div class=\"status\">STATUS <b>DRAFT v1</b> \u00b7 PAIRS WITH <b>FEATURE DOC v1</b> \u00b7 MONETIZATION <b>DEFERRED</b></div>\n</div></div>\n\n<!-- \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 00 THE SHAPE \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n<div class=\"sec\"><div class=\"wrap\">\n  <div class=\"eyebrow\">// 00 \u00b7 The Shape</div>\n  <h2>One engine, three surfaces, one skin toggle</h2>\n  <p>The expensive 80% is a shared engine built once: trade attribution, the wallet stats service, behavioral baselines, and the alert evaluator. Every feature in the feature doc then reduces to a renderer, an alert condition, or an aggregation over the same engine. The consumer wallet page and the agent API are two renderers over one computation, which is what makes the degen surface and the Phase 3 composite query work the same build.</p>\n  <div class=\"flow\">\n    <span class=\"node\">CHAIN DATA \u00b7 250+ VIA DISCOVER INDEX</span><span class=\"arr\">\u2192</span>\n    <span class=\"node hot\">ATTRIBUTION ENGINE</span><span class=\"arr\">\u2192</span>\n    <span class=\"node\">STATS SERVICE</span><span class=\"arr\">\u2192</span>\n    <span class=\"node\">BASELINES</span><span class=\"arr\">\u2192</span>\n    <span class=\"node hot\">WALLET PAGE \u00b7 ALERTS \u00b7 ROTATION \u00b7 API</span>\n  </div>\n  <ul class=\"clean\">\n    <li><b>Attribution before everything.</b> No feature ships on a wallet until its trade history reconstructs correctly. Wrong PnL on a flex card is a reputation ender.</li>\n    <li><b>Degen Mode is presentation state.</b> One flag on the render layer, persisted per user, forceable by deep link. Zero backend divergence.</li>\n    <li><b>Reads the Tree, never reinvents it.</b> Labels, archetypes, clusters, and evidence come from the canonical entity layer defined in the Tree build spec v2. This spec adds derived machine tags, it does not create a second label system.</li>\n    <li><b>Every stat is an endpoint.</b> If the page can render it, the API/MCP layer can serve it. Consumer and agent parity is a build rule, not a roadmap item.</li>\n  </ul>\n</div></div>\n\n<!-- \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 01 THE CORE \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n<div class=\"sec\"><div class=\"wrap\">\n  <div class=\"eyebrow\">// 01 \u00b7 The Core</div>\n  <h2>The shared engine (build once)</h2>\n  <p>Seven components. Build these and every feature in the doc is mostly a renderer plus config. Honest estimate for a lean team: 5 to 7 weeks for the core, with P0 features landing progressively from week 3 because the first three components unlock most of them.</p>\n  <table>\n    <tr><th>Component</th><th>What it is (dev terms)</th><th>Stack</th></tr>\n    <tr><td class=\"k\">Trade attribution engine</td><td>Reconstructs per-wallet trade history from raw transfers: swap detection, position building (FIFO cost basis), entry price estimation from pool state at tx time, realized/unrealized split, fee accounting. Per-chain adapters behind one interface, <code>chain_adapter</code> per VM family (EVM, SVM first, others by adapter). Output is one normalized <code>trades</code> and <code>positions</code> store every other component reads.</td><td class=\"mono\">Python, Postgres, existing indexer feeds</td></tr>\n    <tr><td class=\"k\">Wallet stats service</td><td>Computes the full stat block per wallet: PnL suite, win rate, hold times, entry timing stats (median entry mcap, sub-$100k share, deploy-to-buy delta), money-left-on-table, counterparty tables. Cached with invalidation on new activity. This service is the single source for the page, the cards, the API, and the roast.</td><td class=\"mono\">Python (FastAPI), Redis cache</td></tr>\n    <tr><td class=\"k\">Classifier + funding tracer</td><td>Derives machine tags: archetype (sniper, flipper, hodler, accumulator, bundler, insider-pattern, fresh), wallet age, funding origin walk (CEX, whale, deployer, bridge, mixer), deployer history and rug record. Deterministic rules first, per the machine-lane philosophy: it proves, it never guesses. Writes tags into the canonical entity layer with <code>source=machine</code> so Tree labels and machine labels render in one system.</td><td class=\"mono\">Python, Postgres (entity layer)</td></tr>\n    <tr><td class=\"k\">Baseline store</td><td>Rolling behavioral profile per tracked wallet: median buy size, active metas, trade cadence, dormancy state. Feeds anomaly, dormancy, and convergence detection. Needs a quiet accumulation period before anomaly features look smart, so it starts recording at P0 even though nothing consumes it until P1.</td><td class=\"mono\">Python workers, Postgres</td></tr>\n    <tr><td class=\"k\">Alert evaluator + delivery</td><td>One evaluator, condition trees over engine outputs: event, anomaly, convergence, composite (cross-domain AND logic pulling Signals velocity and Tree tags). Backtest mode runs any condition tree over history before activation. Delivery ladder: Telegram bot, then push, then webhooks (Phase 3 alignment). Alert configs are data, which is what makes recipes shareable later.</td><td class=\"mono\">Python workers + Redis queue, Telegram Bot API</td></tr>\n    <tr><td class=\"k\">Card renderer</td><td>Server-side image generation for flex cards, versus cards, Wrapped, receipts, and dynamic link unfurls (OG images). One templating service, Degen Mode styling baked in, every card watermarked and deep-linked. This is the growth machinery, treat it as production infrastructure, not a nice-to-have.</td><td class=\"mono\">Node/TS, satori or resvg, CDN cache</td></tr>\n    <tr><td class=\"k\">Rotation aggregator</td><td>Meta-level rollups: net smart-money flow per narrative (Signals taxonomy), cohort filters (top-100, archetype, personal watchlist), leading-wallet scoring, quadrant coordinates, Sankey edges, PM odds overlay where markets map to metas. Feeds the Flows page, the weekly report generator, and the composite endpoints.</td><td class=\"mono\">Python, Postgres rollup tables, React/TS + D3</td></tr>\n  </table>\n  <div class=\"callout\">\n    <div class=\"ct\">Build rule</div>\n    <p>The stats service and the classifier only ever read from the attribution engine's normalized store. No feature computes its own PnL from raw chain data. One number, one source, everywhere: page, card, alert, API, roast.</p>\n  </div>\n</div></div>\n\n<!-- \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 02 P0 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n<div class=\"sec\"><div class=\"wrap\">\n  <div class=\"eyebrow\">// 02 \u00b7 P0</div>\n  <h2>P0 \u00b7 Credibility + distribution <span class=\"pill green\">FIRST SHIP</span></h2>\n  <p class=\"lead\">The set that makes degens take the page seriously and starts the sharing loop. Nothing here depends on baselines or the Tree being fully live.</p>\n  <table>\n    <tr><th>Feature</th><th>Depends on</th><th>Acceptance</th></tr>\n    <tr><td class=\"k\">Full PnL suite + entry timing stats</td><td class=\"mono\">attribution, stats service</td><td>Spot-check panel of 50 known wallets matches explorer-derived truth within tolerance; entry price estimates flagged as estimates in UI</td></tr>\n    <tr><td class=\"k\">Archetype badges</td><td class=\"mono\">classifier</td><td>Rules documented per archetype; manual audit of 100 classifications \u226590% agreement; tags land in entity layer as machine-source</td></tr>\n    <tr><td class=\"k\">Fresh wallet + funding trace</td><td class=\"mono\">classifier</td><td>Funding walk resolves \u22653 hops; known CEX/bridge/deployer sets versioned in config</td></tr>\n    <tr><td class=\"k\">Deployer history + rug record</td><td class=\"mono\">classifier, machine-lane validators</td><td>Deploy detection per chain adapter; rug heuristic documented and conservative, false accusation is worse than a miss</td></tr>\n    <tr><td class=\"k\">Shareable PnL card</td><td class=\"mono\">card renderer, stats service</td><td>One-tap render under 2s, deep-links open Degen Mode, watermark on every card</td></tr>\n    <tr><td class=\"k\">Token treemap \u00b7 PnL curve \u00b7 calendar heatmap</td><td class=\"mono\">stats service</td><td>Default hero charts per mode; render on wallets with 5k+ trades without falling over</td></tr>\n    <tr><td class=\"k\">Track + Telegram alerts (event tier)</td><td class=\"mono\">alert evaluator, delivery</td><td>Buy/sell/transfer alerts under 60s from confirmation; per-user mute and threshold controls day one</td></tr>\n    <tr><td class=\"k\">Degen Mode toggle</td><td class=\"mono\">render layer</td><td>Persisted per user, deep-link forceable, zero backend divergence</td></tr>\n    <tr><td class=\"k\">Baseline recording (silent)</td><td class=\"mono\">baseline store</td><td>Recording for all Discover-ranked + tracked wallets from day one, consumed by nothing yet</td></tr>\n  </table>\n</div></div>\n\n<!-- \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 03 P1 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n<div class=\"sec\"><div class=\"wrap\">\n  <div class=\"eyebrow\">// 03 \u00b7 P1</div>\n  <h2>P1 \u00b7 The differentiators <span class=\"pill gold\">MOAT SHIP</span></h2>\n  <p class=\"lead\">Where Sleuth stops being a better tracker and becomes the only one of its kind. Gated on baselines having weeks of data and attribution being proven in P0.</p>\n  <table>\n    <tr><th>Feature</th><th>Depends on</th><th>Acceptance</th></tr>\n    <tr><td class=\"k\">Narrative lead time</td><td class=\"mono\">stats service \u00d7 Signals velocity history</td><td>Per-wallet stat + per-trade timeline; methodology page published, this number will be challenged publicly</td></tr>\n    <tr><td class=\"k\">Cross-domain profile card</td><td class=\"mono\">entity layer (Tree)</td><td>Renders only where links carry evidence trails; unlabeled state invites Tree submission</td></tr>\n    <tr><td class=\"k\">PM exposure panel</td><td class=\"mono\">Wallet Analysis (existing PM profiling)</td><td>PM stats render on any wallet with Polymarket history; joins through entity layer</td></tr>\n    <tr><td class=\"k\">Copytrade backtest</td><td class=\"mono\">attribution, historical pool prices</td><td>Lag model explicit and configurable (default: entry N minutes after, at then-price); every result labeled with assumptions</td></tr>\n    <tr><td class=\"k\">Convergence detection + alerts</td><td class=\"mono\">baseline store, Discover rankings</td><td>Configurable N wallets / window / cohort; backtest mode required before activation; ships only if Discover ranking passes trust audit</td></tr>\n    <tr><td class=\"k\">Anomaly alerts</td><td class=\"mono\">baseline store (\u22654 weeks data)</td><td>Deviation thresholds per behavior class; target alert precision audited monthly, noise kills the feature</td></tr>\n    <tr><td class=\"k\">Dormancy wake-ups</td><td class=\"mono\">baseline store</td><td>Dormancy definition in config; fires once per wake, never repeats</td></tr>\n    <tr><td class=\"k\">Exit liquidity + money on table</td><td class=\"mono\">stats service, counterparty tables</td><td>Both directions render; peak-price source documented</td></tr>\n    <tr><td class=\"k\">Cabal detection v1</td><td class=\"mono\">classifier, entity edges</td><td>Bags-in-common \u00d7 funding \u00d7 timing correlation; renders as cluster panel with evidence, reuses sybil/drainer math from Tree validators</td></tr>\n    <tr><td class=\"k\">Holder cluster bubble map</td><td class=\"mono\">entity edges</td><td>Renders on any token page context from the wallet view; clusters carry evidence trails</td></tr>\n    <tr><td class=\"k\">Claim your wallet</td><td class=\"mono\">signature verify, entity layer</td><td>Sign-to-claim writes a wallet\u2194handle identifier into the entity layer; vanity URLs; unclaimed state visible</td></tr>\n    <tr><td class=\"k\">Dynamic link unfurls</td><td class=\"mono\">card renderer</td><td>OG image per wallet URL, cached, refreshed on activity</td></tr>\n    <tr><td class=\"k\">Composite wallet endpoint</td><td class=\"mono\">everything above</td><td><code>GET /wallet/{addr}/profile</code> returns archetype, lead time, cluster, risk, PM crossover in one call; exposed via API/MCP alongside the existing 15 endpoints</td></tr>\n  </table>\n</div></div>\n\n<!-- \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 04 P2 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n<div class=\"sec\"><div class=\"wrap\">\n  <div class=\"eyebrow\">// 04 \u00b7 P2</div>\n  <h2>P2 \u00b7 The surfaces + the circus <span class=\"pill heat\">SCALE SHIP</span></h2>\n  <p class=\"lead\">Rotation as its own page, the social layer at full volume, and the alert engine's advanced tiers. Everything here is renderers and aggregations over an engine that P0/P1 proved.</p>\n  <table>\n    <tr><th>Feature</th><th>Depends on</th><th>Acceptance</th></tr>\n    <tr><td class=\"k\">Rotation surface (Flows)</td><td class=\"mono\">rotation aggregator</td><td>Quadrant chart, Sankey + 90d scrub, cohort lenses; top-nav page</td></tr>\n    <tr><td class=\"k\">Leading wallets + rotation alerts</td><td class=\"mono\">rotation aggregator, alert evaluator</td><td>Leading-wallet score methodology documented; \"first movers exiting X\" as top alert tier</td></tr>\n    <tr><td class=\"k\">PM overlay on Flows</td><td class=\"mono\">rotation aggregator \u00d7 PM Markets</td><td>Odds line renders where a meta maps to a live market</td></tr>\n    <tr><td class=\"k\">Weekly Rotation Report</td><td class=\"mono\">rotation aggregator, Assistant</td><td>Auto-generated, watermarked charts, public half + full version split</td></tr>\n    <tr><td class=\"k\">Composite alerts + NL creation</td><td class=\"mono\">alert evaluator, Assistant</td><td>Cross-domain AND conditions; sentence compiles to condition tree with confirm step showing the parsed logic</td></tr>\n    <tr><td class=\"k\">Alert backtesting UI</td><td class=\"mono\">alert evaluator backtest mode</td><td>Fire count + post-fire median move shown before any activation</td></tr>\n    <tr><td class=\"k\">Alert recipes</td><td class=\"mono\">alert configs as data</td><td>Publish/subscribe; earning mechanics parked with monetization</td></tr>\n    <tr><td class=\"k\">Fantasy wallet leagues</td><td class=\"mono\">stats service, Discover</td><td>Draft 5, weekly, PnL percent scoring; v1 cosmetic only, no stakes</td></tr>\n    <tr><td class=\"k\">Call receipts</td><td class=\"mono\">entity layer, CT ingestion</td><td>Post\u2194buy timestamp pairs render with both sources linked; disputes route through Tree flagging</td></tr>\n    <tr><td class=\"k\">Wallet vs wallet</td><td class=\"mono\">stats service, card renderer</td><td>Versus screen + shareable card</td></tr>\n    <tr><td class=\"k\">Sleuth Wrapped (quarterly)</td><td class=\"mono\">stats service, card renderer</td><td>Scheduled batch render, same-day drop for all claimed wallets</td></tr>\n    <tr><td class=\"k\">Wallet roast + Degen Score</td><td class=\"mono\">Assistant, stats service</td><td>Roast is an Assistant prompt over the stat block; score formula versioned and published</td></tr>\n    <tr><td class=\"k\">Streaks + achievements</td><td class=\"mono\">stats service</td><td>Badge definitions in config; render on claimed profiles + Wrapped</td></tr>\n    <tr><td class=\"k\">Assistant on the wallet page</td><td class=\"mono\">Assistant scoped to stats + trades store</td><td>Answers cite the underlying trades; no invented history</td></tr>\n    <tr><td class=\"k\">Most Wanted tie-in</td><td class=\"mono\">Most Wanted spec, Tree</td><td>Bounty panel renders on flagged unattributed wallet pages, links to submission flow</td></tr>\n  </table>\n</div></div>\n\n<!-- \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 05 CHAINS \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n<div class=\"sec\"><div class=\"wrap\">\n  <div class=\"eyebrow\">// 05 \u00b7 Chain Coverage</div>\n  <h2>All chains Sleuth indexes</h2>\n  <p>Coverage target is the full Discover index, 250+ chains. Depth is honest and tiered: the attribution engine ships with EVM and SVM adapters at full depth (the WP's current Wallet scope), and every other indexed chain gets, at minimum, the stat tier its data supports. The page always states its depth tier, a partial profile labeled partial beats a wrong profile labeled complete.</p>\n  <table>\n    <tr><th>Tier</th><th>What renders</th><th>Requires</th></tr>\n    <tr><td class=\"k\">Full</td><td>Everything in this spec</td><td class=\"mono\">swap decoding + pool price history + deploy detection</td></tr>\n    <tr><td class=\"k\">Standard</td><td>PnL suite, archetypes, funding trace, alerts, cards</td><td class=\"mono\">swap decoding + price feed</td></tr>\n    <tr><td class=\"k\">Basic</td><td>Holdings, transfers, wallet age, track alerts</td><td class=\"mono\">indexer feed only (the Discover baseline)</td></tr>\n  </table>\n  <p>New chains are an adapter and a config row, never a rewrite. Adapter priority after EVM/SVM follows Discover volume, decided per release from live data rather than fixed here.</p>\n</div></div>\n\n<!-- \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 06 DEPENDENCIES \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n<div class=\"sec\"><div class=\"wrap\">\n  <div class=\"eyebrow\">// 06 \u00b7 Dependencies + Blockers</div>\n  <h2>What blocks what</h2>\n  <ul class=\"clean\">\n    <li><b>Attribution correctness blocks everything.</b> P0 opens with the 50-wallet truth panel. No public card render until it passes. A wrong flex card is the fastest possible way to die on CT.</li>\n    <li><b>Discover ranking trust blocks convergence.</b> Convergence alerts inherit every flaw in the leaderboard. A ranking audit (wash-trade filtering, sybil dedupe through entity edges) is a named P1 task, and convergence ships behind it.</li>\n    <li><b>Baselines block anomaly features.</b> Minimum 4 weeks of silent recording before anomaly, dormancy, or leading-wallet scoring activates. Recording starts at P0 for exactly this reason.</li>\n    <li><b>Entity layer is a Tree build spec dependency.</b> Cross-domain cards, cabal evidence, claims, and receipts all write to or read from the canonical entity graph. The classifier's machine tags land there from P0, so this surface and the Tree grow one graph, not two.</li>\n    <li><b>Historical pool prices block backtests.</b> Copytrade backtest and alert backtesting need per-pool price history. Scoping that store (depth, chains, retention) is a P0 engineering task even though the features are P1/P2.</li>\n    <li><b>CT ingestion blocks receipts.</b> Call receipts need timestamped post capture. Scope starts narrow: claimed profiles and Tree-linked handles only, never a firehose.</li>\n    <li><b>Signals taxonomy blocks Rotation.</b> Flows inherits whatever meta/narrative taxonomy Signals exposes. If metas need regrouping for rotation math, that lands in Signals, not in a parallel taxonomy here.</li>\n  </ul>\n\n  <div class=\"callout red\">\n    <div class=\"ct\">What we deliberately do not build</div>\n    <p>No execution, no sniping, no trade routing beyond what Swaps already covers in Phase 2. We do not enter the latency war with Axiom, we sit above it. No paid-signal framing anywhere: every output is evidence with context, per the feature doc's positioning. And no real-money league stakes in v1, that question is parked with monetization.</p>\n  </div>\n\n  <div class=\"callout gold\">\n    <div class=\"ct\">Monetization + token hooks \u00b7 deferred</div>\n    <p>Pricing gates, recipe earnings, league stakes, and any aSLEUTH mechanics on this surface are later-date decisions. The spec keeps the seams visible: alert configs are data (recipes can earn later), claims write entity identifiers (attribution can pay later), and the composite endpoint is metered-ready. Nothing here invents token mechanics, anything future conforms to the whitepaper.</p>\n  </div>\n</div></div>\n\n<!-- \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 07 SEQUENCE \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n<div class=\"sec\"><div class=\"wrap\">\n  <div class=\"eyebrow\">// 07 \u00b7 Sequence</div>\n  <h2>Honest order of operations</h2>\n  <div class=\"flow\">\n    <span class=\"node hot\">CORE ENGINE + TRUTH PANEL</span><span class=\"arr\">\u2192</span>\n    <span class=\"node\">P0 \u00b7 PAGE + CARDS + TRACK</span><span class=\"arr\">\u2192</span>\n    <span class=\"node\">RANKING AUDIT \u00b7 BASELINES FILL</span><span class=\"arr\">\u2192</span>\n    <span class=\"node\">P1 \u00b7 MOAT + ALERTS</span><span class=\"arr\">\u2192</span>\n    <span class=\"node hot\">P2 \u00b7 FLOWS + SOCIAL + COMPOSITE</span>\n  </div>\n  <p>Core engine 5 to 7 weeks lean, P0 features landing progressively from week 3. P1 opens once the truth panel passes and baselines have their four weeks, which they accumulate in parallel, so the gap between P0 and P1 is audit time, not idle time. P2 is renderers and aggregations over a proven engine and can be parallelized across the team. Honest numbers, written in, same rule as the Tree spec: features ship when they are ready.</p>\n</div></div>\n\n<div class=\"footer\"><div class=\"wrap\">\n  SLEUTH \u00b7 WALLET ANALYZER BUILD SPEC v1 \u00b7 INTERNAL \u00b7 PAIRS WITH FEATURE DOC v1 \u00b7 THE WHITEPAPER WINS ON CONFLICT\n</div></div>\n\n</body>\n</html>\n" } style={{ width: "100%", minHeight: "100vh", border: "none", display: "block", background: "#060606" }} />
</div>
